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