・ 変換マトリックス(4x4)で図形を変換する 《 VLISP 》 

変換マトリックスを使って、図形を変換するのは、その図形のエンティティーの定義点を変換して、エンティティーを書換えて、(entmod) もしくは (entmake) ということになります
しかし、これでは、図形のタイプごとにコーディングが必要ですね
そこで、Visual Lisp の (vla-TransformBy) をつかって楽してみましょう
Visual Lisp は AutoCAD2000 から以後のバージョンで利用可能です


;///////////////////////////////////////////////////////////////////////////////
;INSERT図形にネストされたオブジェクトをWCSに再現 
; Visual Lisp 用 
;///////////////////////////////////////////////////////////////////////////////
(defun Jov_trans_bobj ( / ent en ed et mat Jof_mat_3to4 )

;*******************************************************************************
;サブルーチン 4x3のマトリックスを4x4に変換 ;
  (defun Jof_mat_3to4 ( mat / a b i mat_col x mat4)
    (setq mat (mapcar '(lambda (a b) (append a (list b))) mat '(0.0 0.0 0.0 1.0)))
    (setq i 0)
    (repeat (length mat)
      (setq mat_col (list (mapcar '(lambda (x) (nth i x)) mat)))
      (setq mat4 (append mat4 mat_col))
      (setq i (1+ i))
      )
    mat4
    )

;*******************************************************************************
; メインルーチン (Jov_trans_bobj) ;
  (vl-load-com) ;LispでActiveXを使うには必ず必要
  (while (not en)
    (setq ent (nentsel "\nネストされたオブジェクトを選択:"))
    (if (= 4 (length ent))
      (progn
        (setq mat (Jof_mat_3to4 (caddr ent)));4x4のマトリックスに変換 ;
        (setq et (cdr (assoc 0 (setq ed (entget (car ent))))))
         (cond
           ((= et "VERTEX")(setq ed nil))
           ((= et "ATTRIB")(setq ed nil)) 
           )
         (if ed
           (setq en (if (entmake ed) (entlast) nil));ネストされたオブジェクトの複製 ;
           (princ "\nそれはダメ・・m(__)m")
           )
         )
       (princ "\nネストされたオブジェクトを選んでね")
       )
     )
   (if (and mat en)
     (progn
       (setq v_obj (vlax-ename->vla-object en));図形名を vla-object に;
       (vla-TransformBy v_obj (vlax-tmatrix mat));図形の WCS への変換>>>>> X Y Z の尺度が違うとエラーになる;
       (vla-Update v_obj)
       (setq en (vlax-vla-object->ename v_obj));vla-object を図形名に;
       )
     )
   (redraw en 3);WCSに複製されたオブジェクトをハイライト表示;
   (princ)
   )
  

驚くほど簡単ですね
ただし、X,Y,Z で尺度の違う変換はかけられません
まあ、その場合、定義点を変換して(entmod) or  (entmake) するとしても、円や円弧はとても大変です
異尺度で変換したら、円・円弧は楕円に 楕円はSPLINE?にしなくてはならないので・・・(私にはできません)

参考文献: http://www1.harenet.ne.jp/~hanafusa/memo/matrix.htm