Transformación de objetos

AutoCAD ActiveX

 
Transformación de objetos
 
 
 

Un objeto se puede desplazar, cambiar de escala o rotar con una matriz de transformación de 4 por 4 utilizando el método TransformBy.

En la tabla siguiente se muestra la configuración de la matriz de transformación, donde R = rotación y T = transformación.

Configuración de la matriz de transformación

R00

R01

R02

T0

R10

R11

R12

T1

R20

R21

R22

T2

0

0

0

1

Para transformar un objeto, es necesario inicializar antes la matriz de transformación. En el siguiente ejemplo se muestra una matriz de transformación, asignada a la variable tMatrix, que rota una entidad 90 grados alrededor del punto (0, 0, 0):

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

Una vez terminada la matriz de transformación, debe aplicarse al objeto con el método TransformBy. La siguiente línea de código es una demostración de cómo se aplica una matriz (tMatrix) a un objeto (anObj):

anObj.TransformBy tMatrix

Rotación de una línea mediante una matriz de transformación

Este ejemplo crea una línea y la gira 90 grados aplicando una matriz de transformación.

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(2) = 0
    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

A continuación se presentan otros ejemplos de matrices de transformación:

Matriz de rotación: 90 grados alrededor del punto (0, 0, 0)

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

Matriz de rotación: 45 grados alrededor del punto (5, 5, 0)

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

Matriz de traslación: mueve una entidad en (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

Matriz de ajuste de escala: ajuste de escala de 10, 10 en el punto (0, 0, 0)

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

Matriz de ajuste de escala: ajuste de escala de 10, 10 en el punto (2, 2, 0)

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