Тема: расчленение блоков в блоках в блоках ...

Возникла такая ситуация. Есть в чертеже несколько блоков, которые нужно расчленить таким образом чтобы эти блоки превратились в примитивы автокада. Но каждый из этих блоков состоит в свою очередь еще из несколькоих десятков блоков, каждый из которых еще из нескольких десятков, и т.д. еще около 10-15 вложений. При этом, возникает ситуация когда блок при расчленении распадается на полилинию и блок, так вот полилиния при этом не должна распасться на отрезки, т.е. многократный выбор всех обьектов командой ctrl-a с последующим расчленением не годится, т.к. порубает также все автокадовские примитивы. Пока что выделяю вхождения блоков фильтром, после чего взрываю, но это долго и муторно. Есть ли более простой способ разбить блоки на примитивы, не взрывая сами примитивы?

Re: расчленение блоков в блоках в блоках ...

отделить блоки от других примитивов можно при помощи команды _qselect

Re: расчленение блоков в блоках в блоках ...

Я это делаю фильтром, эффект тот же, но хотелось бы рубать их как-нибудь быстрее..

Re: расчленение блоков в блоках в блоках ...

Может так. Несколько раз запустить.
(defun c:bax ( / nameset setlength i blcrun)
(setq nameset (ssget "_:L" '(( 0 . "INSERT")))) ;imya nabora
(setq setlength (sslength nameset)) ;dlina nabora
(setq i -1)
(repeat setlength
  (setq i (1+ i))
  (setq blcrun (ssname nameset i)) ;imya i
  (command "_explode" blcrun)
)
)

Re: расчленение блоков в блоках в блоках ...

Что-то типа:

(defun test (/ adoc *error* fun_explode err_lst)
  (defun *error* (msg)
    (vla-endundomark adoc)
    (princ msg)
    (princ)
    ) ;_ end of defun
  (defun fun_explode (ent / lst)
    (cond
      ((= (vla-get-objectname ent) "AcDbBlockReference")
       (if (not (vl-catch-all-error-p
                  (vl-catch-all-apply
                    '(lambda ()
                       (setq lst (vlax-safearray->list
                                   (vlax-variant-value (vla-explode ent))
                                   ) ;_ end of vlax-safearray->list
                             ) ;_ end of setq
                       ) ;_ end of lambda
                    ) ;_ end of vl-catch-all-apply
                  ) ;_ end of vl-catch-all-error-p
                ) ;_ end of not
         (progn
           (foreach item lst
             (fun_explode item)
             ) ;_ end of foreach
           (vla-erase ent)
           ) ;_ end of progn
         ) ;_ end of if
       )
      ((and (= (vla-get-objectname ent) "AcDbBlockTableRecord")
            (equal (vla-get-islayout ent) :vlax-false)
            (equal (vla-get-isxref ent) :vlax-false)
            ) ;_ end of and
       (vlax-for sub ent
         (fun_explode sub)
         ) ;_ end of vlax-for
       )
      ((and (vlax-property-available-p ent 'islayout)
            (equal (vla-get-islayout ent) :vlax-true)
            ) ;_ end of and
       (vlax-for sub ent
         (fun_explode sub)
         ) ;_ end of vlax-for
       )
      ) ;_ end of cond
    ) ;_ end of defun
  (vl-load-com)
  (vla-startundomark
    (setq adoc (vla-get-activedocument (vlax-get-acad-object)))
    ) ;_ end of vla-startundomark
  (vlax-for blk_def (vla-get-blocks adoc)
    (fun_explode blk_def)
    ) ;_ end of vlax-for
  (vlax-for blk_def (vla-get-blocks adoc)
    (vl-catch-all-apply '(lambda () (vla-erase blk_def)))
    ) ;_ end of vlax-for
  (vla-endundomark adoc)
  (princ)
  ) ;_ end of defun

Тут не обрабатываются блоки с атрибутами; не копируются свойства исходного элемента (слой / тип / вес линии и т.п.). Только как пример...

Re: расчленение блоков в блоках в блоках ...

> Axel_
или http://ad-cad.narod.ru/Help-Paper.htm
опция РАСЧЛЕНИТЬ