Vla-transformby
- 構文
- (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 "円を変換しますた。") )
関連事項