Goal: Transform the given global coordinates to the first non-global coordinate system object in the tree.
Code:
import units
import math
def MatrixTransformationGlobalToUserCS(global_coordinates, destination_coordinate_system, length_unit):
from_unit = DataModel.CurrentConsistentUnitFromQuantityName("Length")
factor = units.ConvertUnit(1, from_unit, length_unit, "Length")
origin = destination_coordinate_system.Origin
x_axis = destination_coordinate_system.XAxis
y_axis = destination_coordinate_system.YAxis
z_axis = destination_coordinate_system.ZAxis
user_coordinates = []
user_coordinates.append(x_axis[0]*(global_coordinates[0] - factor*origin[0]) +
x_axis[1]*(global_coordinates[1] - factor*origin[1]) +
x_axis[2]*(global_coordinates[2] - factor*origin[2]))
user_coordinates.append(y_axis[0]*(global_coordinates[0] - factor*origin[0]) +
y_axis[1]*(global_coordinates[1] - factor*origin[1]) +
y_axis[2]*(global_coordinates[2] - factor*origin[2]))
user_coordinates.append(z_axis[0]*(global_coordinates[0] - factor*origin[0]) +
z_axis[1]*(global_coordinates[1] - factor*origin[1]) +
z_axis[2]*(global_coordinates[2] - factor*origin[2]))
if destination_coordinate_system.CoordinateSystemType == CoordinateSystemTypeEnum.Cartesian:
return user_coordinates
elif destination_coordinate_system.CoordinateSystemType == CoordinateSystemTypeEnum.Cylindrical:
r = sqrt(user_coordinates[0] * user_coordinates[0] + user_coordinates[1] * user_coordinates[1])
theta = math.degrees(math.atan(user_coordinates[1] / user_coordinates[0]))
z = user_coordinates[2]
return [r, theta, z]
def MatrixTransformationGlobalToUserCSUsingMatrix4D(global_coordinates, destination_coordinate_system, length_unit):
from_unit = ExtAPI.DataModel.CurrentConsistentUnitFromQuantityName("Length")
factor = units.ConvertUnit(1, from_unit, length_unit, "Length")
origin = destination_coordinate_system.Origin
x_axis = destination_coordinate_system.XAxis
y_axis = destination_coordinate_system.YAxis
z_axis = destination_coordinate_system.ZAxis
x_axis_vector = Vector3D(x_axis[0], x_axis[1], x_axis[2])
y_axis_vector = Vector3D(y_axis[0], y_axis[1], y_axis[2])
z_axis_vector = Vector3D(z_axis[0], z_axis[1], z_axis[2])
identity = Matrix4D()
transformation = identity.CreateSystem(x_axis_vector,y_axis_vector,z_axis_vector)
vector = Vector3D(global_coordinates[0] - origin[0] * factor, global_coordinates[1] - origin[1] * factor, global_coordinates[2] - origin[2] * factor)
transformation.Transpose()
vector_trans = transformation.Transform(vector)
return vector_trans
global_coordinates = [20,40,60]
localCS = Model.CoordinateSystems.Children[1]
localCoordinates1 = MatrixTransformationGlobalToUserCS(global_coordinates, localCS, "mm")
localCoordinates2 = MatrixTransformationGlobalToUserCSUsingMatrix4D(global_coordinates, localCS, "mm")
print(localCoordinates1)
print(localCoordinates2)