# How to create a coordinate system based on direction vectors and a specific origin?

Options
Member, Moderator, Employee Posts: 134

I have principal axis vectors and center of gravity of a body. Now I want to create a coordinate system based on these vectors and center. But, Mechanical doesn't let me input vector information.

Tagged:

• Member, Moderator, Employee Posts: 134
edited December 2023
Options

This script is tested in 2022R2. Simply open Mechanical --> go to Automation Tab --> hit Scripting button and paste the below script in Script Editor -> Run script

```#Inputs
#Center of Gravity
Xcog = Quantity(100,'mm')
Ycog = Quantity(200,'mm')
Zcog = Quantity(300,'mm')

#Principal Axis Vectors
Xaxis = [0.99997, -0.00777, -0.00092]
Yaxis = [0.00772, 0.99886, -0.04717]
#Zaxis = [0.00129, 0.04716, 0.99889]

def create_beams_from_points(reinforcements_point_list):
with Transaction(True):
for pointlist in reinforcements_point_list:
points=construction_line.CreatePoints(pointlist)
for i in range(0,len(points)-1):
edge = construction_line.CreateStraightLines([points[i],points[i+1]], [(0,1)])
part = ExtAPI.DataModel.Project.Model.Geometry.GetPart(part_geo)
geo_bodies= part_geo.Bodies
treebodies=map(lambda x: ExtAPI.DataModel.Project.Model.Geometry.GetBody(x), geo_bodies)

points1 =[[(Xcog.Value,Ycog.Value,Zcog.Value), (Xcog.Value+Xaxis[0], Ycog.Value+Xaxis[1],Zcog.Value+Xaxis[2])]]
create_beams_from_points(points1)

points2 =[[(Xcog.Value,Ycog.Value,Zcog.Value), (Xcog.Value+Yaxis[0], Ycog.Value+Yaxis[1],Zcog.Value+Yaxis[2])]]
create_beams_from_points(points2)

constructionLines = list(DataModel.GetObjectsByType(DataModelObjectCategory.ConstructionLine))
lineX = constructionLines[-2]
lineY = constructionLines[-1]

beamX_Id = lineX.GetPartFromGeometry().Bodies[0].Edges[0].Id
beamY_Id = lineY.GetPartFromGeometry().Bodies[0].Edges[0].Id

with Transaction(True):
myCsys.OriginDefineBy = CoordinateSystemAlignmentType.Fixed
myCsys.OriginX = Xcog
myCsys.OriginY = Ycog
myCsys.OriginZ = Zcog

myCsys.PrimaryAxis = CoordinateSystemAxisType.PositiveXAxis
myCsys.SecondaryAxis = CoordinateSystemAxisType.PositiveYAxis
myCsys.PrimaryAxisDefineBy = CoordinateSystemAlignmentType.Associative
myCsys.SecondaryAxisDefineBy = CoordinateSystemAlignmentType.Associative

beamX_Sel = ExtAPI.SelectionManager.CreateSelectionInfo(SelectionTypeEnum.GeometryEntities)
beamX_Sel.Ids = [beamX_Id]

beamY_Sel = ExtAPI.SelectionManager.CreateSelectionInfo(SelectionTypeEnum.GeometryEntities)
beamY_Sel.Ids = [beamY_Id]

myCsys.PrimaryAxisLocation = beamX_Sel
myCsys.SecondaryAxisLocation = beamY_Sel

myCsys.PrimaryAxisDefineBy = CoordinateSystemAlignmentType.Fixed
myCsys.SecondaryAxisDefineBy = CoordinateSystemAlignmentType.Fixed

lineX.RemoveFromGeometry()
lineY.RemoveFromGeometry()

DataModel.Remove(lineX)
DataModel.Remove(lineY)
```

Created Coordiante System

• Member, Employee Posts: 243
Options

You might also be interested in some of the functions in the attached file, such as RotCS(cs,Axes).