| Правила | Регистрация | Пользователи | Поиск | Сообщения за день | Все разделы прочитаны |  Справка по форуму | Файлообменник |

Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Вертикальная выноска линейного размера

Вертикальная выноска линейного размера

Ответ
Поиск в этой теме
Непрочитано 13.12.2007, 06:23 #1
Вертикальная выноска линейного размера
Vova
 
Engineer
 
New-York
Регистрация: 05.09.2003
Сообщений: 10,288

Может, пригодится не только мне. На левой картинке размеры вынесены на лидере (меню правой кнопки 2006). Они всегда получаются косыми. На правой картинке косина сведена почти к нулю, но точного перпендикуляра не достичь, потому что выноска на переломе не имеет грипсы.
Можно-ли программно сделать из косой выноски строго перпендикулярную? Хотя-бы клика за 2-3. Файл также здесь

Миниатюры
Нажмите на изображение для увеличения
Название: DIM-PERPENDICULAR.jpg
Просмотров: 1360
Размер:	23.1 Кб
ID:	1480  

Вложения
Тип файла: dwg
DWG 2004
DIM-PERPENDICULAR.dwg (81.7 Кб, 5267 просмотров)

Просмотров: 29727
 
Непрочитано 15.12.2007, 15:13
#2
kp+

идущий по граблям
 
Регистрация: 26.05.2005
Сообщений: 5,091


А чем Stretch не устраивает? Base point на "переломе" выноски, и все путем. Те же 3 клика.
По крайней мере, у меня получилось (версия Акада тоже 2006)
kp+ вне форума  
 
Автор темы   Непрочитано 15.12.2007, 16:10
#3
Vova

Engineer
 
Регистрация: 05.09.2003
New-York
Сообщений: 10,288


А с чем выравнивать? Если с перекрестьем, то получится неточно. А если размер не горизонтальный и не вертикальный? Или для достижения точности делать дополнительные построения, да менять UCS?
Vova вне форума  
 
Непрочитано 26.12.2007, 14:28
#4
VVA

Инженер LISP
 
Регистрация: 11.05.2005
Минск
Сообщений: 6,990
<phrase 1= Отправить сообщение для VVA с помощью Skype™


По просьбе Vova.
Должна "вертикалить" горизонтальные и "горизонталить" вертикальные и повернутые размеры.
Принцип работы:
Выносим размерный текст на выноске в желаемое положение Y, особо не заботясь о вертикальности выноски. Затем применяем в этим размерам DLV
Код:
[Выделить все]
;;;Пытается выровнять выноску Размера
;;; dim - ename or vla-object
(defun dim-leader-vert (dim / dimobj blk lst pt1 pt2 pt3 ptc pt_text)
  (if (= (type dim) 'vla-object)
    (setq dim (vlax-vla-object->ename dim))
  ) ;_ end of if
  (setq dimobj (vlax-ename->vla-object dim))
  (if (and
        (vlax-write-enabled-p dimobj)
        (wcmatch (vla-get-objectname dimobj)
                 "AcDbAlignedDimension,AcDbRotatedDimension"
        ) ;_ end of wcmatch
      ) ;_ end of and
    (progn
      (vla-put-textmovement dimobj acmovetextaddleader)
      (setq blk
             (vla-item (vla-get-blocks
                         (vla-get-activedocument (vlax-get-acad-object))
                       ) ;_ end of vla-get-Blocks
                       (cdr (assoc 2 (entget dim)))
             ) ;_ end of vla-item
      ) ;_ end of setq
      (setq lst nil)
      (vlax-for item blk
        (if (= (vla-get-objectname item) "AcDbBlockReference")
          (setq
            lst (cons
                  (vlax-safearray->list
                    (vlax-variant-value (vla-get-insertionpoint item))
                  ) ;_ end of vlax-safearray->list
                  lst
                ) ;_ end of cons
          ) ;_ end of setq
        ) ;_ end of if
        (if (= (vla-get-objectname item) "AcDbSolid")
          (progn
            (setq
              lst (cons
                    (vlax-safearray->list
                      (vlax-variant-value (vla-get-coordinate item 0))
                    ) ;_ end of vlax-safearray->list
                    lst
                  ) ;_ end of cons
            ) ;_ end of setq
          ) ;_ end of progn
        ) ;_ end of if
      ) ;_ end of vlax-for
      (if (and (car lst)
               (cadr lst)
          ) ;_ end of and
        (progn
          (setq delta (* (vla-get-textgap dimobj)
                         (vla-get-scalefactor dimobj)
                      ) ;_ end of *
          ) ;_ end of setq
          (setq pt1     (car lst)
                pt2     (cadr lst)
                ptc     (polar pt1 (angle pt1 pt2) (* 0.5 (distance pt1 pt2)))
                pt_text (vlax-safearray->list
                          (vlax-variant-value (vla-get-textposition dimobj))
                        ) ;_ end of vlax-safearray->list
          ) ;_ end of setq
          (setq
            pt3 (inters pt_text
                        (polar pt_text (angle pt1 pt2) 1e3)
                        ptc
                        (polar ptc (+ (angle pt1 pt2) (* 0.5 pi)) 1e3)
                        nil
                ) ;_ end of inters
          ) ;_ end of setq
          (setq pt3 (polar pt3 (angle pt2 pt1) delta))
          (vla-put-textposition dimobj (vlax-3d-point pt3))
        ) ;_ end of progn
      ) ;_ end of if
    ) ;_ end of progn
  ) ;_ end of if
) ;_ end of defun
;;;Dimention Leader Vertical
;;;Выравнивание выноски размера
;;;http://dwg.ru/f/showthread.php?t=15823
;;;Вертикальная выноска
(defun C:DLV ( / ss i)
  (setq ss (ssget "_:L" '((0 . "DIMENSION"))))
  (setq i '-1)
  (repeat (sslength ss)
    (dim-leader-vert (ssname ss (setq i (1+ i))))
    )
  (setq ss nil)
  )
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
 
Автор темы   Непрочитано 27.12.2007, 07:03
#5
Vova

Engineer
 
Регистрация: 05.09.2003
New-York
Сообщений: 10,288


Спасибо, VVA
Можно без спросу предложения об улучшении? Хорошо бы полочки направлять в ту сторону, в которую я захочу? (то есть лишний клик). Также может возникнуть ситуация, когда ранее нарисованным размерам требуется повернуть полочки в другую сторону.
То All> в связи с отсутствием отзывов полагаю, что такие размеры не вызвали интереса у публики. Может для метрики они не подходят? Или нормы запрещают? Обратите также внимание на несколько размеров из первой картинки, где стоит только один размерный текст, общий для нескольких размеров. Разве не Good? Особенно в метрике, где может быть много нулей. Экономит ведь место!
Vova вне форума  
 
Непрочитано 27.12.2007, 17:06
#6
VVA

Инженер LISP
 
Регистрация: 11.05.2005
Минск
Сообщений: 6,990
<phrase 1= Отправить сообщение для VVA с помощью Skype™


>Vova #5 Не вопрос "послать" лидер в сторону. Проблема методического характера: как это попроще запросить у пользователя. Т.е или обрабатывать размеры по одному или как?
Предлагаю модификацию предыдущей команды.
DLV0 - аналогична DVL - выноски выравниваются в сторону грипса мтекста размера
DLV180 - к углу в сторону грипса добавляется 180 градусов (pi). Те полочка идет в противоположную сторону
Мне кажется, вместо того, чтобы громоздить диалог по запросу стороны выноски, лучше применить к размерам DLV0 или DLV180 на выбор. К не понравившимся опять
DLV0 или DLV180 на выбор.
Код:
[Выделить все]
;;;Пытается выровнять выноску Размера
;;; dim - ename or vla-object
;;; ang - angle 0 or pi угол в радианах
(defun dim-leader-vert-ang (dim ang / dimobj blk lst pt1 pt2 pt3 ptc pt_text)
  (if (= (type dim) 'vla-object)
    (setq dim (vlax-vla-object->ename dim))
  ) ;_ end of if
  (setq dimobj (vlax-ename->vla-object dim))
  (if (and
        (vlax-write-enabled-p dimobj)
        (wcmatch (vla-get-objectname dimobj)
                 "AcDbAlignedDimension,AcDbRotatedDimension"
        ) ;_ end of wcmatch
      ) ;_ end of and
    (progn
      (vla-put-textmovement dimobj acmovetextaddleader)
      (setq blk
             (vla-item (vla-get-blocks
                         (vla-get-activedocument (vlax-get-acad-object))
                       ) ;_ end of vla-get-Blocks
                       (cdr (assoc 2 (entget dim)))
             ) ;_ end of vla-item
      ) ;_ end of setq
      (setq lst nil)
      (vlax-for item blk
        (if (= (vla-get-objectname item) "AcDbBlockReference")
          (setq
            lst (cons
                  (vlax-safearray->list
                    (vlax-variant-value (vla-get-insertionpoint item))
                  ) ;_ end of vlax-safearray->list
                  lst
                ) ;_ end of cons
          ) ;_ end of setq
        ) ;_ end of if
        (if (= (vla-get-objectname item) "AcDbSolid")
          (progn
            (setq
              lst (cons
                    (vlax-safearray->list
                      (vlax-variant-value (vla-get-coordinate item 0))
                    ) ;_ end of vlax-safearray->list
                    lst
                  ) ;_ end of cons
            ) ;_ end of setq
          ) ;_ end of progn
        ) ;_ end of if
      ) ;_ end of vlax-for
      (if (and (car lst)
               (cadr lst)
          ) ;_ end of and
        (progn
          (setq delta (* (vla-get-textgap dimobj)
                         (vla-get-scalefactor dimobj)
                      ) ;_ end of *
          ) ;_ end of setq
          (setq pt1     (car lst)
                pt2     (cadr lst)
                ptc     (polar pt1 (angle pt1 pt2) (* 0.5 (distance pt1 pt2)))
                pt_text (vlax-safearray->list
                          (vlax-variant-value (vla-get-textposition dimobj))
                        ) ;_ end of vlax-safearray->list
          ) ;_ end of setq
          (setq
            pt3 (inters pt_text
                        (polar pt_text (angle pt1 pt2) 1e3)
                        ptc
                        (polar ptc (+ (angle pt1 pt2) (* 0.5 pi)) 1e3)
                        nil
                ) ;_ end of inters
          ) ;_ end of setq
          (setq pt3 (polar pt3 (+ ang (angle pt2 pt1)) delta))
          (vla-put-textposition dimobj (vlax-3d-point pt3))
        ) ;_ end of progn
      ) ;_ end of if
    ) ;_ end of progn
  ) ;_ end of if
) ;_ end of defun
;;;Dimention Leader Vertical Right
;;;Выравнивание выноски размера
;;;http://dwg.ru/f/showthread.php?t=15823
;;;Вертикальная выноска
(defun C:DLV0 ( / ss i)
  (setq ss (ssget "_:L" '((0 . "DIMENSION"))))
  (setq i '-1)
  (repeat (sslength ss)
    (dim-leader-vert-ang  (ssname ss (setq i (1+ i))) 0)
    )
  (setq ss nil)
  )
;;;Dimention Leader Vertical Right Left
(defun C:DLV180 ( / ss i)
  (setq ss (ssget "_:L" '((0 . "DIMENSION"))))
  (setq i '-1)
  (repeat (sslength ss)
    (dim-leader-vert-ang  (ssname ss (setq i (1+ i))) pi)
    )
  (setq ss nil)
  )
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
 
Непрочитано 27.12.2007, 19:33
#7
dextron3

проектировшик
 
Регистрация: 01.01.2007
СССР
Сообщений: 5,143


Попробывал, есть ли такой лисп чтобы выправлял размеры выноски которых налагаются друг на друга, очень архитекторам бы пригодился,
они любят стены проемы простенки образмеривать,
да и я иногда балуюсь размерами

Алгоритм:
1. Выделите размеры
2. Конец


на скриншотах картинки до и после применения лиспа
цены бы этому лиспу не было....
Миниатюры
Нажмите на изображение для увеличения
Название: Захват1.jpg
Просмотров: 449
Размер:	23.3 Кб
ID:	1854  Нажмите на изображение для увеличения
Название: Захват2.jpg
Просмотров: 434
Размер:	24.8 Кб
ID:	1855  
__________________
инженер проектировшик с опттом программа авто гад образование высшие
dextron3 вне форума  
 
Автор темы   Непрочитано 29.12.2007, 05:53
#8
Vova

Engineer
 
Регистрация: 05.09.2003
New-York
Сообщений: 10,288


Сделал 3 кнопки:
1. *^C^C_aidimtextmove;1;_single
2. ^c^cdlv0
3. ^C^Cdlv180
(2-ая и 3-я это последний лисп от VVA)
№1 вытаскивает размерный текст на лидере 2-мя щелчками (рекомендую
собирать в кучку, чтобы полочки оказались на одном уровне. Пусть на данном этапе тексты наползают друг на друга)
№2 делает выноски строго вертикально полочками вправо.
№3 то-же, но полочки влево. Все тексты теперь разнесены красиво.
dextron3, попробуй
Еще раз спасибо VVA
Vova вне форума  
 
Непрочитано 29.12.2007, 15:51
#9
dextron3

проектировшик
 
Регистрация: 01.01.2007
СССР
Сообщений: 5,143


Vova, а зачем тебе все размеры на одном уровне и в одну сторону,
для красоты или в чем то есть дело?
для моего случая, надо по мимо того чтобы выноски были влево и право
так еще и на разных уровнях,

1. Кнопка разносит каждый второй размер на 1й уровень размеров
2. Кнопка разносит размеры на второй уровень размеров
(т.е. если первая допустим на сантиметр от размерной линиии,
то вторая, выоста текста +3мм)
3. Поворот влево (как у тебя)
4. Поворот в право (как у тебя)

Кнопки нужны исключительно для того чтобы не налазили размеры
__________________
инженер проектировшик с опттом программа авто гад образование высшие
dextron3 вне форума  
 
Автор темы   Непрочитано 29.12.2007, 16:17
#10
Vova

Engineer
 
Регистрация: 05.09.2003
New-York
Сообщений: 10,288


Как видно из картинки поста №1, размеры могут быть на нескольких уровнях, и полочки направлены в те стороны, где им лучше. То есть в разные. Это и делают кнопки №2 и №3. Я хотел сказать, что те размеры, которые должны быть на одном уровне, надо собирать кнопкой №1 в кучку, используя грипсы. Для другого уровне-другая кучка. А далее работают кнопки 1 и 2 и распределяют кучки так, чтобы не было наложения размерного текста.
To All> На моей картинке есть еще один прикол: если размерный текст одинаковый для нескольких размеров, то этот текст дается только один раз, а полочки их выносок смыкаются. Зацените это дело
Vova вне форума  
 
Непрочитано 29.12.2007, 21:03
#11
dextron3

проектировшик
 
Регистрация: 01.01.2007
СССР
Сообщений: 5,143


Vova,
Сделал 3 кнопки:
1. *^C^C_aidimtextmove;1;_single

а что рамер выделить и перенесети за душку, этим нельзя пользоваться
тоже за два щелчка выполняется
__________________
инженер проектировшик с опттом программа авто гад образование высшие
dextron3 вне форума  
 
Автор темы   Непрочитано 29.12.2007, 23:17
#12
Vova

Engineer
 
Регистрация: 05.09.2003
New-York
Сообщений: 10,288


А ты пробовал, прежде чем отвечать? Надо ведь размерный текст оторвать от размерной линии и на лидере от нее отнести. Это возможно только если aidimtextmove=1. По умолчанию, если спeциально не задавать в разм. стиле на вкладке Fit слева внизу Over dimension line, with leader, как можно сделать персонально только через Properties либо через меню правой кнопки. Макрос это делает быстро.
Цитата:
Перенести за дужку
Что это за новый термин? Собственночо сочинения, или где-то услышал? Для размера точнее будет Перенести за шкирку. Как котенка. Патентую
Vova вне форума  
 
Непрочитано 30.12.2007, 09:51
#13
dextron3

проектировшик
 
Регистрация: 01.01.2007
СССР
Сообщений: 5,143


Vova, так у меня в свойствах стоит при дистанции меньше цыфрового
значения, автоматически выноска ставиться,...
можешь мою цепочку расзмеров модифицировать, и выложить
как у тебя получилась оптимизация чтобы я окончательно понял
Миниатюры
Нажмите на изображение для увеличения
Название: Захват1.JPG
Просмотров: 312
Размер:	36.0 Кб
ID:	1908  
Вложения
Тип файла: dwg
DWG 2004
123.dwg (264.0 Кб, 2401 просмотров)
__________________
инженер проектировшик с опттом программа авто гад образование высшие
dextron3 вне форума  
 
Автор темы   Непрочитано 30.12.2007, 18:28
#14
Vova

Engineer
 
Регистрация: 05.09.2003
New-York
Сообщений: 10,288


Здесь как раз иллюстрация к посту №10 (To All), где я просил заценить
Миниатюры
Нажмите на изображение для увеличения
Название: vert -leader-my.jpg
Просмотров: 263
Размер:	22.5 Кб
ID:	1914  
Вложения
Тип файла: dwg
DWG 2004
vert -leader-my.dwg (280.1 Кб, 2401 просмотров)
Vova вне форума  
 
Непрочитано 31.12.2007, 11:07
#15
dextron3

проектировшик
 
Регистрация: 01.01.2007
СССР
Сообщений: 5,143


Ладно с одинаковыми размерами понятно, а как ты с этим справишься?


Всех с новым годом,
что общего с проектирощиками и строителями
пьют так же много
Миниатюры
Нажмите на изображение для увеличения
Название: Захват1.JPG
Просмотров: 242
Размер:	32.7 Кб
ID:	1920  
Вложения
Тип файла: dwg
DWG 2004
vert -leader-my.dwg (274.9 Кб, 2397 просмотров)
__________________
инженер проектировшик с опттом программа авто гад образование высшие
dextron3 вне форума  
 
Автор темы   Непрочитано 01.01.2008, 04:28
#16
Vova

Engineer
 
Регистрация: 05.09.2003
New-York
Сообщений: 10,288


Цитата:
Сообщение от dextron3 Посмотреть сообщение
Ладно с одинаковыми размерами понятно, а как ты с этим справишься?
Сможешь повторить с одинаковыми размерами сам?
А с этим справился так:
штрихи я бы сделал потоньше и покороче; как в dwg файле
ЗЫ так ровненько получилось потому что до нового года еще 3.5 часов, и еще не налили. И вообще, какие у желающих размяться есть другие предложения по данному вопросу? Выкладывайте
Миниатюры
Нажмите на изображение для увеличения
Название: vert -leader-my-2.jpg
Просмотров: 262
Размер:	20.5 Кб
ID:	1926  
Вложения
Тип файла: dwg
DWG 2004
vert -leader-my-2.dwg (271.6 Кб, 2395 просмотров)
Vova вне форума  
 
Непрочитано 01.01.2008, 09:46
#17
dextron3

проектировшик
 
Регистрация: 01.01.2007
СССР
Сообщений: 5,143


Это ты сам ёлочку под новый год нарисовал или с помощью лиспа?

Вот и год уже отматал на форуме, можно поздравить.......
__________________
инженер проектировшик с опттом программа авто гад образование высшие
dextron3 вне форума  
 
Автор темы   Непрочитано 01.01.2008, 20:34
#18
Vova

Engineer
 
Регистрация: 05.09.2003
New-York
Сообщений: 10,288


Вышеуказанный лисп, вероятно, твоими руками сделал все выноски строго вертикальными и смотрящими полочками вправо. Мне осталось только разнести выноски по-уровню и тем-же лиспом развернуть полочки у левой половины размеров в другую сторону. Есть-ли предложения по устройству этих размеров как-то по-другому?
Так-же настырно повторяю вопрос из моего поста № 10 и 14
Vova вне форума  
 
Непрочитано 03.01.2008, 13:05
#19
VVA

Инженер LISP
 
Регистрация: 11.05.2005
Минск
Сообщений: 6,990
<phrase 1= Отправить сообщение для VVA с помощью Skype™


Выношу на суд еще одну модификацию.
DLV0 - как было и раньше (равняет размер вертикально/горизонтально, полочка текста остается в том же направлении, что и было)
DLV180 - как DLV0, полочка текста переносится в противоположную сторону от текущей (раньше было влево)
Новая команда
DLVY - запрашивает точку, и выносит размеры в эту позицию по DLV0
По принципу aidimtextmove для кучи размеров сразу
Код:
[Выделить все]
;;;Пытается выровнять выноску Размера
;;; dim - ename or vla-object
;;; ang - angle 0 or pi угол в радианах
(defun dim-leader-vert-ang-Y (dim ang Y / dimobj blk lst pt1 pt2 pt3 ptc pt_text)
  (if (= (type dim) 'vla-object)
    (setq dim (vlax-vla-object->ename dim))
  ) ;_ end of if
  (setq dimobj (vlax-ename->vla-object dim))
  (if (and
        (vlax-write-enabled-p dimobj)
        (wcmatch (vla-get-objectname dimobj)
                 "AcDbAlignedDimension,AcDbRotatedDimension"
        ) ;_ end of wcmatch
      ) ;_ end of and
    (progn
      (vla-put-textmovement dimobj acmovetextaddleader)
      (setq blk
             (vla-item (vla-get-blocks
                         (vla-get-activedocument (vlax-get-acad-object))
                       ) ;_ end of vla-get-Blocks
                       (cdr (assoc 2 (entget dim)))
             ) ;_ end of vla-item
      ) ;_ end of setq
      (setq lst nil)
      (vlax-for item blk
        (if (= (vla-get-objectname item) "AcDbBlockReference")
          (setq
            lst (cons
                  (vlax-safearray->list
                    (vlax-variant-value (vla-get-insertionpoint item))
                  ) ;_ end of vlax-safearray->list
                  lst
                ) ;_ end of cons
          ) ;_ end of setq
        ) ;_ end of if
        (if (= (vla-get-objectname item) "AcDbSolid")
          (progn
            (setq
              lst (cons
                    (vlax-safearray->list
                      (vlax-variant-value (vla-get-coordinate item 0))
                    ) ;_ end of vlax-safearray->list
                    lst
                  ) ;_ end of cons
            ) ;_ end of setq
          ) ;_ end of progn
        ) ;_ end of if
      ) ;_ end of vlax-for
      (if (and (car lst)
               (cadr lst)
          ) ;_ end of and
        (progn
          (setq delta (* (vla-get-textgap dimobj)
                         (vla-get-scalefactor dimobj)
                      ) ;_ end of *
          ) ;_ end of setq
          (setq pt1     (car lst)
                pt2     (cadr lst)
                ptc     (polar pt1 (angle pt1 pt2) (* 0.5 (distance pt1 pt2)))
                pt_text (if Y  Y (vlax-safearray->list
                          (vlax-variant-value (vla-get-textposition dimobj))
                        )) ;_ end of vlax-safearray->list
          ) ;_ end of setq
          (setq
            pt3 (inters pt_text
                        (polar pt_text (angle pt1 pt2) 1e3)
                        ptc
                        (polar ptc (+ (angle pt1 pt2) (* 0.5 pi)) 1e3)
                        nil
                ) ;_ end of inters
          ) ;_ end of setq
;;;          (setq pt3 (polar pt3 (+ ang (angle pt2 pt1)) delta))     ;;;Было
          (setq pt3 (polar pt3 (+ ang (angle pt3 pt_text)) delta))   ;;;Новое
          (vla-put-textposition dimobj (vlax-3d-point pt3))
        ) ;_ end of progn
      ) ;_ end of if
    ) ;_ end of progn
  ) ;_ end of if
) ;_ end of defun
;;;Dimention Leader Vertical Right
;;;Выравнивание выноски размера
;;;http://dwg.ru/f/showthread.php?t=15823
;;;Вертикальная выноска
(defun C:DLV0 ( / ss i)
  (setq ss (ssget "_:L" '((0 . "DIMENSION"))))
  (setq i '-1)
  (repeat (sslength ss)
    (dim-leader-vert-ang-Y  (ssname ss (setq i (1+ i))) 0 nil)
    )
  (setq ss nil)
  )
;;;Dimention Leader Vertical Right Left
(defun C:DLV180 ( / ss i)
  (setq ss (ssget "_:L" '((0 . "DIMENSION"))))
  (setq i '-1)
  (repeat (sslength ss)
    (dim-leader-vert-ang-Y  (ssname ss (setq i (1+ i))) pi nil)
    )
  (setq ss nil)
  )
(defun C:DLVY ( / ss i pt)
  (and
  (setq pt (getpoint "\nNew leader position : "))
  (setq ss (ssget "_:L" '((0 . "DIMENSION"))))
  (setq i '-1)
  (repeat (sslength ss)
    (dim-leader-vert-ang-Y  (ssname ss (setq i (1+ i))) 0 pt)
    )
  (setq ss nil)
  )
  (princ)
  )
(defun C:DLV2 ( / ss i pt what lst e1 ed mpt)
  (vl-load-com)
  (if
  (and
  (setq pt (getpoint "\nНовая позиция для четных размеров : " ))
  (setq ss (ssget "_:L" '((0 . "DIMENSION"))))
  )
  (progn
  (setq i '-1)
  (repeat (sslength ss)
    (setq e1  (ssname ss (setq i (1+ i))))
    (if (member '(100 . "AcDbAlignedDimension")(entget e1))
      (setq lst (cons e1 lst))
      )
    )
  (foreach x lst
    (setq mpt(cons(cdr(assoc 13(entget x))) mpt))
    )
  (setq mpt (apply 'mapcar (cons 'list mpt)))
  (setq mpt (mapcar '(lambda(x)(apply 'min x)) mpt))
  (setq lst (vl-sort lst '(lambda(x y)(< (distance mpt (cdr(assoc 13(entget x))))
                                         (distance mpt (cdr(assoc 13(entget y))))
                                         )
                            )
                     )
        )
  (setq lst (vl-remove-if '(lambda(x)(setq what (not what))) lst))
  (mapcar '(lambda(x)(dim-leader-vert-ang-Y  x 0 pt)) lst)
  (setq ss nil)
  )
  )
  (princ)
  )
(defun C:DLV1 ( / ss i pt what lst e1 ed mpt)
  (vl-load-com)(setq what t)
  (if
  (and
  (setq pt (getpoint "\nНовая позиция для нечетных размеров : " ))
  (setq ss (ssget "_:L" '((0 . "DIMENSION"))))
  )
  (progn
  (setq i '-1)
  (repeat (sslength ss)
    (setq e1  (ssname ss (setq i (1+ i))))
    (if (member '(100 . "AcDbAlignedDimension")(entget e1))
      (setq lst (cons e1 lst))
      )
    )
  (foreach x lst
    (setq mpt(cons(cdr(assoc 13(entget x))) mpt))
    )
  (setq mpt (apply 'mapcar (cons 'list mpt)))
  (setq mpt (mapcar '(lambda(x)(apply 'min x)) mpt))
  (setq lst (vl-sort lst '(lambda(x y)(< (distance mpt (cdr(assoc 13(entget x))))
                                         (distance mpt (cdr(assoc 13(entget y))))
                                         )
                            )
                     )
        )
  (setq lst (vl-remove-if '(lambda(x)(setq what (not what))) lst))
  (mapcar '(lambda(x)(dim-leader-vert-ang-Y  x 0 pt)) lst)
  (setq ss nil)
  )
  )
  (princ)
  )
Чтобы в DLV180 все было как раньше (влево), нужно в ф-ции dim-leader-vert-ang-Y раскоментировать строчку
Код:
[Выделить все]
;;;          (setq pt3 (polar pt3 (+ ang (angle pt2 pt1)) delta))     ;;;Было
И закоментировать эту
Код:
[Выделить все]
 
(setq pt3 (polar pt3 (+ ang (angle pt3 pt_text)) delta))   ;;;Новое
__________________
Как использовать код на Лиспе читаем здесь

Последний раз редактировалось VVA, 03.01.2008 в 13:35. Причина: Новые команды DLV1 и DLV2
VVA вне форума  
 
Непрочитано 03.01.2008, 13:39
#20
VVA

Инженер LISP
 
Регистрация: 11.05.2005
Минск
Сообщений: 6,990
<phrase 1= Отправить сообщение для VVA с помощью Skype™


К #19 добавил еще 2 команды
DLV1 - выносит в новое указанное положение каждый нечетный размер (DLVY к нечетному размеру)
DLV2 - выносит в новое указанное положение каждый четный размер (DLVY к четному размеру)
Четность/нечетность определяется так: размеры сортируются по возрастанию от самой левой (min X, min Y) 1-й выносной линии (dxf группа 13). Ну и далее к полученному списку чет/нечет
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Вертикальная выноска линейного размера

Размещение рекламы
Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск