Тема: Расчленение блока в другом пространстве
Можно ли программно, находясь в пространстве "Model",
расчленить блок "aa" ,вставленный в другом пространстве,
например, "Layout1" ?
Спасибо.
Информационный портал для профессионалов в области САПР
Вы не вошли. Пожалуйста, войдите или зарегистрируйтесь.
Страницы 1
Чтобы отправить ответ, вы должны войти или зарегистрироваться
Можно ли программно, находясь в пространстве "Model",
расчленить блок "aa" ,вставленный в другом пространстве,
например, "Layout1" ?
Спасибо.
Может быть, через vla-explode ?
Пробовал.
Без перехода (програмно, перед расчленением)
в "Layout1" работает некорректно, т.е. расчленяет, но не
удаляет после расчленения блок.
работает некорректно, т.е. расчленяет, но не
удаляет после расчленения блок.
Во vla-explode так и было задумано.
Значит следует в код добавлять после расчленения
еще и (entdel <имя_рсчлененного_блока...).
А по другому никак ? (без перехода в пространство
расчленяемого блока)
Мне кажется подойдет такой подход:
у меня проходит, правда могут быть какие-нито
казусы?
(vl-load-com)
(defun testexplode (layout_name block_name)
(setq adoc
(vla-get-activedocument
(vlax-get-acad-object))
layts (vla-get-layouts adoc)
layt (vla-item layts layout_name )
cur_layt (vla-get-activelayout adoc)
blk (vla-item (vla-get-blocks adoc) block_name))
(vla-put-activelayout adoc layt)
(vlax-for a (vla-get-paperspace adoc)
(if (and (= (vla-get-objectname a) "AcDbBlockReference")
(= (vla-get-name a) block_name))
(progn
(vla-explode a)
(vla-delete a)
(if (vlax-object-released-p a)
(vlax-release-object a)))))
(vla-put-activelayout adoc cur_layt)
(vla-regen adoc acallviewports)
(princ)
)
;Autolaunch:
(testexplode layout_name block_name)
~'O'~
> Олег(jr.)
Спасибо. Работает.
Все-таки без "entdel" ("vla-delete") не обойтись......................
Но вот что интересно :
после расчленения, для проверки, переходим в layout,
переносим один из объектов расчлененного блока, а на
его месте (этого объекта) остается такой же его собрат,
пытаемся его взять, а он не берется; выполняем
регенерацию - пропадает; т.е это был фантом.
Чего это такое ?
Спасибо.
Ну не зря ж сделали автоматическую регенерацию при переходе по листам и в модель. А без перехода остается только принудительно ее делать.
Вот что получилось для примера, когда необходимо
расчленить все блоки с именем "BLOK1" во всех пространствах
(как в "Model", так и в "Layout1", "Layout2", "Layout3" и т.д.) :
(setq ff (vla-get-activedocument (vlax-get-acad-object)) gg (vla-get-layouts ff) hh (vla-get-activelayout ff) cc (ssget "_X" '((0 . "INSERT") (2 . "BLOK1")))) (while cc (setq aa (ssname cc 0) jj (cdr (assoc 410 (entget aa))) ii (vla-item gg jj)) (vla-put-activelayout ff ii) (vla-explode (vlax-ename->vla-object aa)) (vla-delete (vlax-ename->vla-object aa)) (setq cc (ssdel aa cc) cc (if (= (sslength cc) 0) nil cc))) (vla-put-activelayout ff hh) (vla-regen ff acallviewports)
Правда забыл учесть состояние слоев этих блоков
(блокирован/разблокирован)....
Обработка слоев :
(vl-cmdf "_.-LAYER" "_U" "*" "")
.......вышеприведенный код от 2004-12-28(13:12:09).........
(vl-cmdf "_.LAYERP")
Страницы 1
Чтобы отправить ответ, вы должны войти или зарегистрироваться
Форум работает на PunBB, при поддержке Informer Technologies, Inc