команда в цикле "_.dimaligned"

Автор Тема: команда в цикле "_.dimaligned"  (Прочитано 7701 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Тема содержит сообщение с Решением. Нажмите здесь чтобы посмотреть его.

Оффлайн 1958Автор темы

  • ADN OPEN
  • **
  • Сообщений: 91
  • Карма: 0
команда в цикле "_.dimaligned"
« : 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. )

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13829
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: команда в цикле "_.dimaligned"
« Ответ #1 : 24-06-2022, 19:32:19 »
1958,
Организуй цикл с проверкой активной команды при помощи (getvar "CMDNAMES") и пока она равна "DIMALIGNED" запускай команду (vl-cmdf "\\")
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн 1958Автор темы

  • ADN OPEN
  • **
  • Сообщений: 91
  • Карма: 0
Re: команда в цикле "_.dimaligned"
« Ответ #2 : 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. )
Видно, что-то не то я состряпал. Не работает.

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13829
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: команда в цикле "_.dimaligned"
« Ответ #3 : 24-06-2022, 23:41:46 »
Возможно вместо (vl-cmdf) следует использовать (command). Ну и включи cmdecho чтобы видеть сообщения в командной строке.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн 1958Автор темы

  • ADN OPEN
  • **
  • Сообщений: 91
  • Карма: 0
Re: команда в цикле "_.dimaligned"
« Ответ #4 : 25-06-2022, 06:08:34 »
cmdecho включил. Заменил vl-cmdf на command. Цикл не работает. Вот сообщения в командной строке:
Команда: des
Выберите объект: _.dimaligned
Начало первой выносной линии или <выбрать объект>:
Начало второй выносной линии:
Создан неассоциативный размер.
Положение размерной линии или
[Мтекст/Текст/Угол]:
Размерный текст = 27.44
Команда:

Оффлайн Алексей Кулик

  • Administrator
  • *****
  • Сообщений: 1096
  • Карма: 172
Re: команда в цикле "_.dimaligned"
« Ответ #5 : 25-06-2022, 09:02:18 »
ACAD не запущен, но, может, стоит попробовать поменять (vl-cmdf "\\") на (vl-cmdf pause) ?
Все, что сказано - личное мнение.

Правила форума существуют не просто так!

Приводя в сообщении код, не забывайте про его форматирование!

Оффлайн 1958Автор темы

  • ADN OPEN
  • **
  • Сообщений: 91
  • Карма: 0
Re: команда в цикле "_.dimaligned"
« Ответ #6 : 25-06-2022, 09:59:13 »
может, стоит попробовать поменять (vl-cmdf "\\") на (vl-cmdf pause)
Не помогло:
Команда: des
Выберите объект: _.dimaligned
Начало первой выносной линии или <выбрать объект>:
Начало второй выносной линии:
Создан неассоциативный размер.
Положение размерной линии или
[Мтекст/Текст/Угол]:
Размерный текст = 17.99
Команда:

Отмечено как Решение 1958 26-06-2022, 19:28:43

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13829
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: команда в цикле "_.dimaligned"
« Ответ #7 : 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. )
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение