Тема: Расчленение блока в другом пространстве

Можно ли программно, находясь в пространстве "Model",
расчленить блок "aa" ,вставленный в другом пространстве,
например, "Layout1" ?
Спасибо.

Re: Расчленение блока в другом пространстве

Может быть, через vla-explode ?

Re: Расчленение блока в другом пространстве

Пробовал.
Без перехода (програмно, перед расчленением)
в "Layout1" работает некорректно, т.е. расчленяет, но не
удаляет после расчленения блок.

Re: Расчленение блока в другом пространстве

Иннокентий пишет:

работает некорректно, т.е. расчленяет, но не
удаляет после расчленения блок.

Во vla-explode так и было задумано.

Re: Расчленение блока в другом пространстве

Значит следует в код добавлять после расчленения
еще и (entdel <имя_рсчлененного_блока...).
А по другому никак ? (без перехода в пространство
расчленяемого блока)

Re: Расчленение блока в другом пространстве

Мне кажется подойдет такой подход:
у меня проходит, правда могут быть какие-нито
казусы?
(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'~

Re: Расчленение блока в другом пространстве

> Олег(jr.)
Спасибо. Работает.

Re: Расчленение блока в другом пространстве

Все-таки без "entdel" ("vla-delete") не обойтись......................
Но вот что интересно :
после расчленения, для проверки, переходим в layout,
переносим один из объектов расчлененного блока, а на
его месте (этого объекта) остается такой же его собрат,
пытаемся его взять, а он не берется; выполняем
регенерацию - пропадает; т.е это был фантом.
Чего это такое ?
Спасибо.

Re: Расчленение блока в другом пространстве

Ну не зря ж сделали автоматическую регенерацию при переходе по листам и в модель. А без перехода остается только принудительно ее делать.

Re: Расчленение блока в другом пространстве

Ясно.
Спасибо.

Re: Расчленение блока в другом пространстве

Вот что получилось для примера, когда  необходимо
расчленить все блоки с именем "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)

Re: Расчленение блока в другом пространстве

Правда забыл учесть состояние слоев этих блоков
(блокирован/разблокирован)....

Re: Расчленение блока в другом пространстве

Вроде все пучком
~'O'~

Re: Расчленение блока в другом пространстве

Обработка слоев :
(vl-cmdf "_.-LAYER" "_U" "*" "")
.......вышеприведенный код от 2004-12-28(13:12:09).........
(vl-cmdf "_.LAYERP")