Each Placement3D has 2 read-write properties which describes its transformation :
Matrix3D Placement3D::AbsoluteTransformation - absolute transformation
Matrix3D Placement3D::RelativeTransformation - transformation relative to a parent object
The properties are represented by 4x4 transformation matrix :
M11 M12 M13 M14
M21 M22 M23 M24
M31 M32 M33 M34
OffsetX OffsetY OffsetZ M44
Here is an example of setting transformation matrix to a 3D object:
C# |
Copy Code
|
---|---|
Vector3D oVector3D = new Vector3D(); oVector3D.X = 3.0; oVector3D.Y = 4.0; oVector3D.Z = 5.0; Quaternion oQuaternion = new Quaternion(oVector3D, 2.0); Matrix3D oMatrix3D = new Matrix3D(); oMatrix3D.Rotate(oQuaternion); oMatrix3D.Translate(new Vector3D(1.0, 2.0, 3.0)); oComponent1.AbsoluteTransformation = oMatrix3D; |
It is also possible to move 3D object using Move() method :
C# |
Copy Code
|
---|---|
oComponent1.Move(1.0, 2.0, 3.0); |
For more details please refer to Matrix3D description on MSDN webpage.
There is also possibility to transform a 3D object by snapping it to another by means of auxiliary points which are called "mates".
There are 2 kinds of mates:
There are 3 types of target mates:
Snapping mates from two object causes that one object is positioned close the second, i.e. a source mate is in position of a target mate.
Here is an example how to snap a cabinet to another one by a point target mate:
C# |
Copy Code
|
---|---|
Cabinet oCabinet2 = new Cabinet(); oCabinet2.Create(oProject, "TS 8886.500", "1"); //placing a cabinet next to another cabinet with 0.0 offset oCabinet2.FindSourceMate("V1", false).SnapTo(oCabinet.FindTargetMate("V4", false), 0.0); |
Here are also examples of snapping to a line and plane mate. They both are base mates - this mean that snapping to them will automatically set a source object as a child of a target.
Also the orientation of a source item is adjusted to a target :
C# |
Copy Code
|
---|---|
//get front plane of mounting panel MountingPanel oMountingPanel = oCabinet.Children[1] as MountingPanel; Plane oFrontPlace = oCabinet.Planes[0]; //create a mounting rail with a length of 150 MountingRail oRail = new MountingRail(); oRail.Create(oProject, "TS 110_15", "1", 500.0); //placing a rail by using a plane mate as a target (located 100,200 from start of mounting panel, without any rotation) oRail.GetSourceMates(false)[2].SnapTo(oFrontPlace.BaseMate, 0.0, 100.0, 200.0); //creating a terminal Component oTerminal = new Component(); oTerminal.Create(oProject, "SIE.4AV2400-2EB00-0A", "1"); //placing it on a mounting rail with offset 100 from the beginning of it. Target (oRail.BaseMate) is a line mate. oTerminal.FindSourceMate("M4", false).SnapTo(oRail.BaseMate, 100.0); |
Here are also listed methods for getting mates :
C# |
Copy Code
|
---|---|
PointMate[] Placement3D::GetSourceMates(bConsiderMountingClearance); PointMate Placement3D::FindSourceMate(ref System::String name, bool bConsiderMountingClearance); Mate[] Placement3D::GetTargetMates(bConsiderMountingClearance); Mate Placement3D::FindTargetMate( ref System::String name, bool bConsiderMountingClearance ); |