Сообщество программистов Autodesk в СНГ

ADN Club => AutoLisp / VisualLISP и DCL => Тема начата: 1958 от 24-06-2022, 16:01:03

Название: команда в цикле "_.dimaligned"
Отправлено: 1958 от 24-06-2022, 16:01:03
Возникла такая задача: назначить новый слой "Размер", указать на нужный стиль измерений в чертеже, назначить его текущим и произвести измерения. Лисп я набросал, а вот поместить команду "_.dimaligned" в цикл никак не получается. Ну и после завершения цикла необходимо вернуть старые значения: слой, размерный стиль. Кто может подсказать решение?
Код - Auto/Visual Lisp [Выбрать]
  1. (defun c:des (/)
  2.  (vl-load-com)
  3.  (setq oldlay     (getvar "clayer")
  4.        olddim     (getvar "dimstyle")
  5.        adoc       (vla-get-activedocument (vlax-get-acad-object))
  6.        lay        "Размер"
  7.        newdim     (cdr (assoc 3 (entget (car (entsel)))))
  8.        i          0
  9.  )
  10.  (vla-put-activedimstyle adoc (vla-item (vla-get-dimstyles adoc) newdim))
  11.  (vla-add (vla-get-layers adoc) lay)
  12.  (vla-put-color (vla-Item (vla-get-Layers adoc) lay) 5)
  13.  (setvar "clayer" lay)
  14.  (vl-cmdf "_.dimaligned")
  15.  (princ)
  16. )
Название: Re: команда в цикле "_.dimaligned"
Отправлено: Александр Ривилис от 24-06-2022, 19:32:19
1958,
Организуй цикл с проверкой активной команды при помощи (getvar "CMDNAMES") и пока она равна "DIMALIGNED" запускай команду (vl-cmdf "\\")
Название: Re: команда в цикле "_.dimaligned"
Отправлено: 1958 от 24-06-2022, 20:00:01
Организуй цикл с проверкой активной команды при помощи (getvar "CMDNAMES") и пока она равна "DIMALIGNED" запускай команду (vl-cmdf "\\")
Так?
Код - Auto/Visual Lisp [Выбрать]
  1. (defun c:des (/)
  2.  (vl-load-com)
  3.  (setq oldlay (getvar "clayer")
  4.        olddim (getvar "dimstyle")
  5.        adoc   (vla-get-activedocument (vlax-get-acad-object))
  6.        lay    "Размер"
  7.        newdim (cdr (assoc 3 (entget (car (entsel)))))
  8.  )
  9.  (vla-put-activedimstyle adoc (vla-item (vla-get-dimstyles adoc) newdim))
  10.  (vla-add (vla-get-layers adoc) lay)
  11.  (vla-put-color (vla-Item (vla-get-Layers adoc) lay) 5)
  12.  (setvar "clayer" lay)
  13.  (vl-cmdf "_.dimaligned")
  14.  (while (= (getvar "CMDNAMES") "DIMALIGNED") (vl-cmdf "\\"))
  15.  (princ)
  16. )
Видно, что-то не то я состряпал. Не работает.
Название: Re: команда в цикле "_.dimaligned"
Отправлено: Александр Ривилис от 24-06-2022, 23:41:46
Возможно вместо (vl-cmdf) следует использовать (command). Ну и включи cmdecho чтобы видеть сообщения в командной строке.
Название: Re: команда в цикле "_.dimaligned"
Отправлено: 1958 от 25-06-2022, 06:08:34
cmdecho включил. Заменил vl-cmdf на command. Цикл не работает. Вот сообщения в командной строке:
Команда: des
Выберите объект: _.dimaligned
Начало первой выносной линии или <выбрать объект>:
Начало второй выносной линии:
Создан неассоциативный размер.
Положение размерной линии или
[Мтекст/Текст/Угол]:
Размерный текст = 27.44
Команда:
Название: Re: команда в цикле "_.dimaligned"
Отправлено: Алексей Кулик от 25-06-2022, 09:02:18
ACAD не запущен, но, может, стоит попробовать поменять (vl-cmdf "\\") на (vl-cmdf pause) ?
Название: Re: команда в цикле "_.dimaligned"
Отправлено: 1958 от 25-06-2022, 09:59:13
может, стоит попробовать поменять (vl-cmdf "\\") на (vl-cmdf pause)
Не помогло:
Команда: des
Выберите объект: _.dimaligned
Начало первой выносной линии или <выбрать объект>:
Начало второй выносной линии:
Создан неассоциативный размер.
Положение размерной линии или
[Мтекст/Текст/Угол]:
Размерный текст = 17.99
Команда:
Название: Re: команда в цикле "_.dimaligned"
Отправлено: Александр Ривилис от 26-06-2022, 18:43:03
И не должно было помочь. Если ты собираешься зацикливать команду размера, то и её нужно в цикл. Как-то так (без проверок на ошибки):
Код - Auto/Visual Lisp [Выбрать]
  1. (defun c:des ( / oldlay olddim adoc lay newdim enl enl1 flag)
  2.  (vl-load-com)
  3.  (setq oldlay (getvar "clayer")
  4.        olddim (getvar "dimstyle")
  5.        adoc   (vla-get-activedocument (vlax-get-acad-object))
  6.        lay    "Размер"
  7.        newdim (cdr (assoc 3 (entget (car (entsel)))))
  8.  )
  9.  (vla-put-activedimstyle adoc (vla-item (vla-get-dimstyles adoc) newdim))
  10.  (vla-add (vla-get-layers adoc) lay)
  11.  (vla-put-color (vla-Item (vla-get-Layers adoc) lay) 5)
  12.  (setvar "clayer" lay)
  13.  (setq enl (entlast)
  14.        flag T)
  15.  (while flag
  16.   (command "_.dimaligned")
  17.   (while (/= (getvar "CMDACTIVE") 0) (command pause))
  18.   (setq enl1 (entlast))
  19.   (setq flag (not (equal enl1 enl)))
  20.   (setq enl enl1)
  21.  )
  22.  (princ)
  23. )