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)