El método TranslateCoordinates convierte un punto o un desplazamiento de un sistema de coordenadas a otro. Un argumento de punto, llamado OriginalPoint, puede interpretarse como un punto 3D o como un vector de desplazamiento 3D. Este argumento se distingue por el argumento Boolean, Disp. Si el argumento Disp se define como TRUE, el argumento OriginalPoint se trata como un vector de desplazamiento; en caso contrario, se trata como un punto. Otros dos argumentos determinan el sistema de coordenadas al que pertenece OriginalPoint, así como el sistema de coordenadas al que OriginalPoint debe convertirse. Los siguientes sistemas de coordenadas de AutoCAD pueden especificarse en los argumentos From y To:
- SCU
-
Sistema de coordenadas universales: el sistema de coordenadas de referencia. Todos los demás sistemas de coordenadas se definen en función del SCU, que nunca cambia. Los valores medidos con el SCU permanecen estables aunque se realicen cambios en otros sistemas de coordenadas. Todos los puntos que se transfieren a los métodos y propiedades de ActiveX, o que éstos devuelven, están expresados en el SCU, salvo que se especifique lo contrario.
- SCP
-
Sistema de coordenadas personales (SCP): el sistema de coordenadas de trabajo. El usuario especifica un SCP para crear tareas de dibujos con más facilidad. Todos los puntos que se transmiten a los comandos de AutoCAD, incluidos los devueltos por funciones externas y rutinas de AutoLISP, están en el sistema SCP activo (a menos que el usuario los preceda de un * en la solicitud de comando). Si desea que su aplicación envíe a los comandos de AutoCAD coordenadas en los sistemas SCU, SCO o SCV, primero debe convertirlas al sistema SCP mediante el método TranslateCoordinates.
- SCO
-
Sistema de coordenadas de objeto: los valores de punto especificados por determinados métodos y propiedades para los objetos Polyline y LightweightPolyline se expresan en este sistema de coordenadas relativo al objeto. Dependiendo del uso que se le vaya a dar al objeto, estos puntos suelen convertirse al SCU, al SCP activo o al SCV activo. Del mismo modo, los puntos del SCU, SCP o SCV que vayan a incluirse en la base de datos deben convertirse antes al SCO por medio de las mismas propiedades. Para conocer los métodos y propiedades que usan este sistema de coordenadas, véase ActiveX and VBA Reference de AutoCAD.
Cuando convierta coordenadas al SCO, o desde éste, introduzca la normal del SCO en el último argumento de la función TranslateCoordinates.
- SCV
-
Sistema de coordenadas de visualización: el sistema de coordenadas donde se transforman los objetos antes de mostrarse. El origen del SCV es el punto almacenado en la variable de sistema TARGET de AutoCAD y su eje Z es la línea de mira. En otras palabras, una ventana gráfica siempre es una vista en planta de su SCV. Pueden utilizarse estas coordenadas para determinar el lugar de la pantalla donde el usuario de AutoCAD verá un objeto concreto.
- SCVEP
-
SCV en espacio papel: este sistema de coordenadas sólo puede transformarse al SCV de la ventana gráfica del espacio modelo actualmente activa y desde el mismo. Se trata básicamente de una transformación 2D, donde las coordenadas X e Y cambian su escala o se desfasan si el argumento Disp es FALSE. La coordenada Z cambia de escala, pero jamás se convierte. Por lo tanto, puede usarse para hallar el factor de escala entre los dos sistemas de coordenadas. El SCVEP sólo puede transformarse en la ventana gráfica actual del espacio modelo actual. Si el argumento From es igual a SCVEP, el argumento To debe ser igual a SCV y viceversa.
Conversión de coordenadas SCO en coordenadas SCU
En este ejemplo se crea una polilínea en espacio modelo. Su primer vértice se muestra en los sistemas de coordenadas SCO y SCU. La conversión de SCO a SCU requiere situar la normal del SCO en el último argumento del método TranslateCoordinates.
Sub Ch8_TranslateCoordinates()
' Create a polyline in model space.
Dim plineObj As AcadPolyline
Dim points(0 To 14) As Double
' Define the 2D polyline points
points(0) = 1: points(1) = 1: points(2) = 0
points(3) = 1: points(4) = 2: points(5) = 0
points(6) = 2: points(7) = 2: points(8) = 0
points(9) = 3: points(10) = 2: points(11) = 0
points(12) = 4: points(13) = 4: points(14) = 0
' Create a light weight Polyline object in model space
Set plineObj = ThisDrawing.ModelSpace.AddPolyline(points)
' Find the X and Y coordinates of the
' first vertex of the polyline
Dim firstVertex As Variant
firstVertex = plineObj.Coordinate(0)
' Find the Z coordinate for the polyline
' using the elevation property
firstVertex(2) = plineObj.Elevation
' Change the normal for the pline so that the
' difference between the coordinate systems
' is obvious.
Dim plineNormal(0 To 2) As Double
plineNormal(0) = 0#
plineNormal(1) = 1#
plineNormal(2) = 2#
plineObj.Normal = plineNormal
' Translate the OCS coordinate into WCS
Dim coordinateWCS As Variant
coordinateWCS = ThisDrawing.Utility.TranslateCoordinates _
(firstVertex, acOCS, acWorld, False, plineNormal)
' Display the coordinates of the point
MsgBox "The first vertex has the following coordinates:" _
& vbCrLf & "OCS: " & firstVertex(0) & ", " & _
firstVertex(1) & ", " & firstVertex(2) & vbCrLf & _
"WCS: " & coordinateWCS(0) & ", " & _
coordinateWCS(1) & ", " & coordinateWCS(2)
End Sub