Vla-transformby

提供:GizmoLabs - だいたい CAD LISP なサイト
構文
(vla-transformby vla-object TransformationMatrix)


機能
4 x 4 変換マトリックスを指定して、オブジェクトを移動、尺度変更、または回転させる。


引数
  • vla-object … すべてのVLA図形オブジェクト、AttributeReference
  • TransformationMatrix … 実行する変換を指定する 4x4 マトリックス。


戻り値
なし。変換マトリックスが正しくない場合はエラーを返す。


  • MEMO
  • 変換マトリックスの構成は次の通り。(R = 回転、T = 平行移動)。
R00 R01 R02 T0
R10 R11 R12 T1
R20 R21 R22 T2
0 0 0 1


サンプル
(vl-load-com)
(defun c:Example_TransformBy()
    ;; 線分を作成し、変換行列を使用して 90 ° 回転させるサンプル
    (setq acadObj (vlax-get-acad-object))
    (setq doc (vla-get-ActiveDocument acadObj))

    ;; 線分を作成
    (setq startPt (vlax-3d-point 2 1 0)
          endPt (vlax-3d-point 5 1 0))
    
    (setq modelSpace (vla-get-ModelSpace doc))
    (setq lineObj (vla-AddLine modelSpace startPt endPt))
    (vla-Update lineObj)
    
    ;; transmat 変数して、point(0,0,0) で 90 度回転する変換行列するようの初期化
    ;; (変換行列の例については下記参照)
    (setq transMat (vlax-tmatrix '((0 -1 0 0)
                                   (1 0 0 0)
                                   (0 0 1 0)
                                   (0 0 0 1))))
    
    ;; 定義されている変換行列を使用して線分を変換。
    (alert "線分を行列変換")
    (vla-TransformBy lineObj transMat)
    (vla-ZoomAll acadObj)
    (vla-Regen doc acAllViewports)
    (alert "せんぶんを変換しました")
    
;; 変換行列のその他の例:
;; 原点 0,0,0 の回転行列: 90 度
;    (setq transMat (vlax-tmatrix '((0 -1 0 0)
;                                   (1 0 0 0)
;                                   (0 0 1 0)
;                                   (0 0 0 1))))
        
;; 回転マトリクス : 基点 5,5,0 で45 度 
;    (setq transMat (vlax-tmatrix '((0.70710678118654 -0.70710678118654 0 5)
;                                   (0.70710678118654 0.70710678118654 0 -2.071068)
;                                   (0 0 1 0)
;                                   (0 0 0 1))))
        
;; 平行移動マトリクス: 10,10,0 移動
;    (setq transMat (vlax-tmatrix '((1 0 0 10)
;                                   (0 1 0 10)
;                                   (0 0 1 0)
;                                   (0 0 0 1))))

;; 拡縮マトリクス : 基点 0,0,0 で 拡大 10,10
;    (setq transMat (vlax-tmatrix '((10 0 0 0)
;                                   (0 10 0 0)
;                                   (0 0 10 0)
;                                   (0 0 0 1))))
        
;; Scaling Matrix: 基点 2,2 で 拡大 10 
;    (setq transMat (vlax-tmatrix '((10 0 0 -18)
;                                   (0 10 0 -18)
;                                   (0 0 10 0)
;                                   (0 0 0 1))))
)


;----------------------
(vl-load-com)
(defun c:Example_GetUCSMatrix()
    ;; 新しい UCS を作成し、それのための UCS 行列を見つけるサンプル。
    ;; WCS 座標を使用して円を作成し、円を UCS に変換する。

    (setq acadObj (vlax-get-acad-object))
    (setq doc (vla-get-ActiveDocument acadObj))
  
    ;; 新しい UCS を定義し、原点に UCS アイコンを表示。
    (setq origin (vlax-3d-point 2 2 0)
          xAxisPoint (vlax-3d-point 3 2 0)
          yAxisPoint (vlax-3d-point 2 3 0))
    
    (setq ucsObj (vla-Add (vla-get-UserCoordinateSystems doc) origin xAxisPoint yAxisPoint "UCS1"))
    (vla-put-ActiveUCS doc ucsObj)
    (vla-put-UCSIconOn (vla-get-ActiveViewport doc) :vlax-true)
    (vla-put-UCSIconAtOrigin (vla-get-ActiveViewport doc) :vlax-true)
    (vla-put-ActiveViewport doc (vla-get-ActiveViewport doc))
    
    ;; WCS 座標を使用して円を作成。
    (setq center (vlax-3d-point 1 1 0)
          radius 0.5)
    (setq modelSpace (vla-get-ModelSpace doc))
    (setq circleObj (vla-AddCircle modelSpace center radius))
    (vla-ZoomAll acadObj)
    
    ;; UCS 変換行列を取得。
    (setq TransMatrix (vla-GetUCSMatrix ucsObj))
    
    ;; UCS 座標にサークルを変換する。
    (alert "円を変換します。")
    (vla-TransformBy circleObj TransMatrix)
    (vla-Update circleObj)
    
    (alert "円を変換しますた。")
)

関連事項