オブジェクトは、TransformBy メソッドを使用して 4x4 の変換マトリックスで移動、尺度変更、回転することができます。
次の表は変換マトリックスの設定の例で、R = 回転、T = 平行移動です。
変換マトリックスの構成 | |||
---|---|---|---|
R00 | R01 | R02 | T0 |
R10 | R11 | R12 | T1 |
R20 | R21 | R22 | T2 |
0 | 0 | 0 | 1 |
オブジェクトを変換するには、まず変換マトリックスを初期化します。次の例では、変数 tMatrix に代入された変換マトリックスを示します。ここでは、図形を点 (0, 0, 0) の回りで 90 度回転させます。
tMatrix(0,0) = 0.0 tMatrix(0,1) = -1.0 tMatrix(0,2) = 0.0 tMatrix(0,3) = 0.0 tMatrix(1,0) = 1.0 tMatrix(1,1) = 0.0 tMatrix(1,2) = 0.0 tMatrix(1,3) = 0.0 tMatrix(2,0) = 0.0 tMatrix(2,1) = 0.0 tMatrix(2,2) = 1.0 tMatrix(2,3) = 0.0 tMatrix(3,0) = 0.0 tMatrix(3,1) = 0.0 tMatrix(3,2) = 0.0 tMatrix(3,3) = 1.0
変換マトリックスが完成したら、TransformBy メソッドを使用してそれをオブジェクトに適用します。次のコードは、マトリックス(tMatrix)をオブジェクト(anObj)へ適用する例です。
anObj.TransformBy tMatrix
以下の例は、線分を作成し、次に変換マトリックスを使用して 90 度回転します。
Sub Ch4_TransformBy() ' Create a line Dim lineObj As AcadLine Dim startPt(0 To 2) As Double Dim endPt(0 To 2) As Double startPt(0) = 2 startPt(1) = 1 startPt(2) = 0 endPt(0) = 5 endPt(1) = 1 endPt(2) = 0 Set lineObj = ThisDrawing.ModelSpace.AddLine(startPt, endPt) ZoomAll ' Initialize the transMat variable with a ' transformation matrix that will rotate ' an object by 90 degrees about the point(0,0,0) Dim transMat(0 To 3, 0 To 3) As Double transMat(0, 0) = 0#: transMat(0, 1) = -1# transMat(0, 2) = 0#: transMat(0, 3) = 0# transMat(1, 0) = 1#: transMat(1, 1) = 0# transMat(1, 2) = 0#: transMat(1, 3) = 0# transMat(2, 0) = 0#: transMat(2, 1) = 0# transMat(2, 2) = 1#: transMat(2, 3) = 0# transMat(3, 0) = 0#: transMat(3, 1) = 0# transMat(3, 2) = 0#: transMat(3, 3) = 1# ' Transform the line using the defined transformation matrix lineObj.TransformBy transMat lineObj.Update End Sub
次に変換マトリックスのさまざまな例を示します。
回転マトリックス: 点(0, 0, 0)を中心にして 90 度 | |||
---|---|---|---|
0.0 | -1.0 | 0.0 | 0.0 |
1.0 | 0.0 | 0.0 | 0.0 |
0.0 | 0.0 | 1.0 | 0.0 |
0.0 | 0.0 | 0.0 | 1.0 |
回転マトリックス: 点(5, 5, 0)を中心にして 45 度 | |||
---|---|---|---|
0.707107 | -0.707107 | 0.0 | 5.0 |
0.707107 | 0.707107 | 0.0 | -2.071068 |
0.0 | 0.0 | 1.0 | 0.0 |
0.0 | 0.0 | 0.0 | 1.0 |
平行移動マトリックス: 図形を(10, 10, 0)移動 | |||
---|---|---|---|
1.0 | 0.0 | 0.0 | 10.0 |
0.0 | 1.0 | 0.0 | 10.0 |
0.0 | 0.0 | 1.0 | 0.0 |
0.0 | 0.0 | 0.0 | 1.0 |
尺度変更マトリックス: 点(0, 0, 0)で 10,10 尺度変更 | |||
---|---|---|---|
10.0 | 0.0 | 0.0 | 0.0 |
0.0 | 10.0 | 0.0 | 0.0 |
0.0 | 0.0 | 10.0 | 0.0 |
0.0 | 0.0 | 0.0 | 1.0 |
尺度変更マトリックス: 点(2, 2, 0)で 10, 10 尺度変更 | |||
---|---|---|---|
10.0 | 0.0 | 0.0 | -18.0 |
0.0 | 10.0 | 0.0 | -18.0 |
0.0 | 0.0 | 10.0 | 0.0 |
0.0 | 0.0 | 0.0 | 1.0 |