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

ADN Club => AutoLisp / VisualLISP и DCL => Тема начата: 1958 от 20-06-2017, 11:03:41

Название: команда explode
Отправлено: 1958 от 20-06-2017, 11:03:41
Написал небольшую программку:

Код - Auto/Visual Lisp [Выбрать]
  1. (defun c:p2b (/)
  2. (vl-load-com)
  3.  (setq ss (ssget "_X" (list (cons 8 (cdr (assoc 8 (entget (car (entsel "Выберите образец >")))))))))
  4.  (sssetfirst nil ss)
  5.  (vl-cmdf "_explode")
  6. )

Всё прекрасно, но перед расчленением выскакивает предупреждение. Если согласиться, выполняется быстро. Если не соглашаться, выполнение существенно замедляется.
Возможно ли прописать в код обход этого предупреждения, естественно с положительным ответом?
(https://s4.postimg.org/ekyj0hant/image.jpg) (https://postimg.org/image/ekyj0hant/)
Название: Re: команда explode
Отправлено: Александр Ривилис от 20-06-2017, 11:20:54
Перед запуском команды _EXPLODE сохраняешь значение draworderctl (http://help.autodesk.com/cloudhelp/2016/RUS/AutoCAD-Core/files/GUID-85D5C950-1323-4A62-BC35-2CDA7F1C6A50.htm), устанавливаешь его в 0. Затем запускается команда - диалогового окна быть не должно. Ну и потом восстанавливаешь значение draworderctl (http://help.autodesk.com/cloudhelp/2016/RUS/AutoCAD-Core/files/GUID-85D5C950-1323-4A62-BC35-2CDA7F1C6A50.htm)
Название: Re: команда explode
Отправлено: Алексей Кулик от 20-06-2017, 12:32:44
Интересно, а vla-explode такое же выдает?
Название: Re: команда explode
Отправлено: Александр Ривилис от 20-06-2017, 12:35:16
Интересно, а vla-explode такое же выдает?
Уверен что нет, так как vla-explode оперирует одним примитивом (представь себе как такое окошко появлялось бы в цикле по всем расчленяемым примитивам) в отличие от команды _EXLODE
Название: Re: команда explode
Отправлено: 1958 от 20-06-2017, 13:05:35
Что-то непонятное!? Вроде сработало пару раз, а потом всё сначала, выскакивает предупреждение, хоть ты тресни!

Мой код:
Код - Auto/Visual Lisp [Выбрать]
  1. (defun c:p2b (/)
  2.  (vl-load-com)
  3.  (setq ss (ssget "_X"
  4.                  (list (cons 8 (cdr (assoc 8 (entget (car (entsel "Выберите образец >")))))))
  5.           )
  6.  )
  7.  (sssetfirst nil ss)
  8.  (setvar "DRAWORDERCTL" 0)
  9.  (vl-cmdf "_explode")
  10.  (setvar "DRAWORDERCTL" 3)
  11. )
Название: Re: команда explode
Отправлено: Александр Ривилис от 20-06-2017, 13:09:41
Почитай эту тему: https://forum.dwg.ru/showthread.php?t=113813
Там найдёшь много нового и полезного.
Название: Re: команда explode
Отправлено: 1958 от 20-06-2017, 13:29:22
Вот такая конструкция вроде работает:
Код - Auto/Visual Lisp [Выбрать]
  1. (defun c:p2b (/)
  2.  (vl-load-com)
  3.  (setq ss (ssget "_X"
  4.                  (list (cons 8 (cdr (assoc 8 (entget (car (entsel "Выберите образец >")))))))
  5.           )
  6.  )
  7.  (sssetfirst nil ss)
  8.  (setvar "nomutt" 1)
  9.  (setvar "DRAWORDERCTL" 0)
  10.  (vl-cmdf "_explode")
  11.  (setvar "DRAWORDERCTL" 3)
  12.  (setvar "nomutt" 0)
  13. )
Название: Re: команда explode
Отправлено: Александр Ривилис от 20-06-2017, 13:31:22
Из спортивного интереса подумай над упрощением этой конструкции:
Код - Auto/Visual Lisp [Выбрать]
  1. (list (cons 8 (cdr (assoc 8 (entget (car (entsel "Выберите образец >")))))))
Название: Re: команда explode
Отправлено: 1958 от 20-06-2017, 13:37:06
Из спортивного интереса подумай над упрощением
Александр! Я только учусь и вопрос упрощения мне не подвластен. Это Вы должны были понять из предыдущих моих публикаций. :)
Если б подсказали, был бы очень признателен.
Название: Re: команда explode
Отправлено: Александр Ривилис от 20-06-2017, 13:55:59
Вместо     
Код - Auto/Visual Lisp [Выбрать]
  1. (list (cons 8 (cdr (assoc 8 (entget (car (entsel "Выберите образец >")))))))
должно быть
Код - Auto/Visual Lisp [Выбрать]
  1. (list (assoc 8 (entget (car (entsel "Выберите образец >")))))
Название: Re: команда explode
Отправлено: 1958 от 20-06-2017, 16:32:29
Н-да! Век живи, всё не выучишь! Спасибо!