・ ブロック図形(図形タイプ INSERT )にネストされたオブジェクトを WCS に複製する
INSERT図形にネストされた図形オブジェクトを複製するには、アフィン変換、(vla-TransformBy)
等の方法もありますが、X Y Z の尺度が異なる INSERT
図形の場合は、不可能もしくは困難です
これを、簡単におこなうには、選択したオブジェクトのみをブロックとして作成し直して
INSERT 図形を複製し、分解することで可能となります
ただし、ブロック定義をつくるので、既存のものとかぶったりしないように注意が必要です
;/////////////////////////////////////////////////////////////////////////////////////////////////; ;*** Jo_bobj_to_wcs.lsp INSERT図形にネストされたオブジェクトを WCS に複製 By Kamijo ;/////////////////////////////////////////////////////////////////////////////////////////////////; (defun Jo_bobj_to_wcs ( / ent en_l en n Jof_make ) ;***********************************************************************************************; ; サブルーチン 単一オブジェクトのブロックをつくり分解; (defun Jof_make (en_l / n nen ned ien ied bn ben bed n_name en) (setq nen (car en_l)) (setq ned (entget nen)) (setq n 0) (repeat (1- (length en_l)) (setq ien (nth (1+ n) en_l)) (setq ied (entget ien)) (setq bn (cdr (assoc 2 ied))) (setq ben (tblobjname "BLOCK" bn)) (setq bed (entget ben)) (setq n_name (strcat "Jo_temp" (itoa n))) (setq bed (subst (cons 2 n_name)(assoc 2 bed) bed)) (setq ied (subst (cons 2 n_name)(assoc 2 ied) ied)) (setq ied (if (assoc 66 ied) (subst (cons 66 0) (assoc 66 ied) ied) ied));属性を持つブロックは属性無しに; (entmake) (entmake bed) (entmake ned) (entmake '((0 . "ENDBLK"))) (if (and (setq ned (entmake ied)) (not (equal (entlast) en_l))) (entdel (entlast)) (progn (princ (strcat "\n複合図形の作成失敗 Jof_make:" (itoa n))) (exit) ) ) (setq n (1+ n)) ) (if (entmake ned) (progn (setq en (entlast)) (repeat (1- (length en_l)) (command "._EXPLODE" en) (setq en (entlast)) ) ) ) en ) ;***********************************************************************************************; ; メインルーチン (Jo_bobj_to_wcs) ; (setq ent (nentsel "\n複写したいオブジェクトを選択:")) (if (= 4 (length ent)) (progn (setq en_l (cadddr ent)) (if (not (wcmatch (cdr (assoc 2 (entget (car en_l)))) "*`**")) (progn (if (or (= "VERTEX" (cdr (assoc 0 (entget (car ent))))) (= "ATTRIB" (cdr (assoc 0 (entget (car ent))))) ) (progn (princ "\nそれはダメ・・・m(__)m") (setq en_l nil) ) (setq en_l (append (list (car ent)) en_l)) ) ) ) ) (princ "\nネストされたオブジェクトを選んでね") ) (if en_l (progn (setq en (Jof_make en_l)) (redraw en 3) (repeat (1- (length en_l)) (command "._PURGE" "B" "Jo_temp*" "N");ブロック定義の削除 ) ) ) (princ) )