项目重点:
-
CoordinateSystem(坐标系)
-
Origin(原点)
-
Rotate(旋转)
-
SetCoordinateSystem(设置坐标系)
-
SetCoordinateSystemCartesianAtCsys(在csys设置笛卡尔坐标系)
-
SetOriginAndMatrix(设置原点和矩阵)
1、CoordinateSystem(坐标系)
CoordinateSystem 属性是只读的,它返回一个笛卡尔坐标系对象,该对象表示 WCS 在空间中的方向(定义每个轴方向的 X、Y 和 Z 向量)。
//将方向矩阵写入信息窗口
lw.WriteLine(dispPart.WCS.CoordinateSystem.Orientation.Element.ToString());
//访问单个矩阵的方向元素,在本实例中是X轴元素
lw.WriteLine(dispPart.WCS.CoordinateSystem.Orientation.Element.Xx.ToString());
lw.WriteLine(dispPart.WCS.CoordinateSystem.Orientation.Element.Xy.ToString());
lw.WriteLine(dispPart.WCS.CoordinateSystem.Orientation.Element.Xz.ToString());
2、Origin(原点)
Origin 属性表示一个 Point3d 对象,该属性是可读写的;随意传入新的 Point3d 以更改 WCS 的位置。
3、Rotate(旋转)
Rotate方法为您提供了一种围绕其轴之一旋转 WCS 的简单方法。如果我们想让 WCS 绕其 Z 轴旋转 30 度,代码如下所示:
dispPart.WCS.Rotate(WCS.Axis.ZAxis, 30);
4、SetCoordinateSystem(设置坐标系)
SetCoordinateSystem采用笛卡尔坐标系作为参数,并返回一个笛卡尔坐标系,它表示 WCS 的先前位置。除了返回对象供程序员使用外,它还会在 NX 图形窗口中创建坐标系对象。如果用户不需要或不需要此对象,则可以在代码末尾将其删除,也可以使用不在图形窗口中创建对象的其他方法之一。
5、SetCoordinateSystemCartesianAtCsys(在csys设置笛卡尔坐标系)
它还将笛卡尔坐标系统作为参数,并返回表示先前 WCS 位置/方向的笛卡尔坐标系统对象。与前面讨论的方法的主要区别在于,此方法不会在图形窗口中创建坐标系对象。
6、SetOriginAndMatrix(设置原点和矩阵)
此方法采用两个参数:Point3d 结构和 Matrix3x3 结构。此方法不返回任何值,也不在图形窗口中创建任何对象。许多其他 NX 对象(如 Arc)将原点和方向矩阵公开为属性;这样可以轻松地从另一个对象读取这些值并将其直接分配给 WCS。
示例代码:
(代码可在操作记录中直接运行)
using System;
using NXOpen;
using System.Windows.Forms;
sealed class Module1
{
public static void Main()
{
Session theSession = Session.GetSession();
Part workPart = theSession.Parts.Work;
Part displayPart = theSession.Parts.Display;
ListingWindow lw = theSession.ListingWindow;
lw.Open();
if (ReferenceEquals(displayPart, null))
{
//需要活动部件
return;
}
//保存当前WPS位置和方位
Point3d oldOrigin = displayPart.WCS.Origin;
CartesianCoordinateSystem oldOrientation = displayPart.WCS.CoordinateSystem;
//WPS坐标沿X+方向移动10
Point3d newOrigin = new Point3d(oldOrigin.X + 10, oldOrigin.Y, oldOrigin.Z);
//移动WPS,.SetOriginAndMatrix方法不会保存旧的WPS
displayPart.WCS.SetOriginAndMatrix(newOrigin, oldOrientation.Orientation.Element);
MessageBox.Show("请注意,WCS已沿 + X(绝对)方向移动10");
//旋转WPS
displayPart.WCS.Rotate(WCS.Axis.ZAxis, 32);
displayPart.WCS.Rotate(WCS.Axis.YAxis, 16);
displayPart.WCS.Rotate(WCS.Axis.XAxis, 8);
MessageBox.Show("请注意,WCS已旋转");
//移动到绝对坐标系
Xform absXform = displayPart.Xforms.CreateXform(SmartObject.UpdateOption.WithinModeling, 1);
CartesianCoordinateSystem absCsys = displayPart.CoordinateSystems.CreateCoordinateSystem(absXform, SmartObject.UpdateOption.WithinModeling);
//SetCoordinateSystem方法返回一个CartesianCoordinateSystem对象,并在图形中创建NX坐标系。
//将它赋给一个变量,如果你以后想引用它(重复使用它,删除它,等待)
CartesianCoordinateSystem csys2 = displayPart.WCS.SetCoordinateSystem(absCsys);
lw.WriteLine(csys2.Orientation.Element.ToString());
MessageBox.Show("WCS回到绝对位置,并且上一个位置已保存为NX坐标系对象(在按“确定”后,保存的csys对象可能不可见");
Point3d pt1 = csys2.Origin;
Point startPt = displayPart.Points.CreatePoint(pt1);
Vector3d vec1 = new Vector3d(csys2.Orientation.Element.Xx, csys2.Orientation.Element.Xy, csys2.Orientation.Element.Xz);
Direction dir2 = displayPart.Directions.CreateDirection(displayPart.Points.CreatePoint(pt1), vec1);
Scalar dist2 = displayPart.Scalars.CreateScalar(2, Scalar.DimensionalityType.Length, SmartObject.UpdateOption.WithinModeling);
Offset offset2 = displayPart.Offsets.CreateOffset(dir2, dist2, SmartObject.UpdateOption.WithinModeling);
Point endPoint = displayPart.Points.CreatePoint(offset2, startPt, SmartObject.UpdateOption.WithinModeling);
Scalar rotX = displayPart.Scalars.CreateScalar(30, Scalar.DimensionalityType.Angle, SmartObject.UpdateOption.WithinModeling);
Scalar rotY = displayPart.Scalars.CreateScalar(0, Scalar.DimensionalityType.Angle, SmartObject.UpdateOption.WithinModeling);
Scalar rotZ = displayPart.Scalars.CreateScalar(0, Scalar.DimensionalityType.Angle, SmartObject.UpdateOption.WithinModeling);
Xform myXform = displayPart.Xforms.CreateXform(csys2, startPt, endPoint, rotX, rotY, rotZ, 0, SmartObject.UpdateOption.WithinModeling, 1);
CartesianCoordinateSystem newCsys = displayPart.CoordinateSystems.CreateCoordinateSystem(myXform, SmartObject.UpdateOption.WithinModeling);
//SetCoordinateSystemCartesianaAtCsys方法返回CartesianaCoordinatesSystem对象,但不会在图形窗口中创建NX坐标系对象。
CartesianCoordinateSystem csys3 = displayPart.WCS.SetCoordinateSystemCartesianAtCsys(newCsys);
lw.WriteLine(csys3.Orientation.Element.ToString());
MessageBox.Show("最后,WCS已沿先前保存的Csys’X方向偏移了2个单位,并且已绕先前的Csys‘X轴旋转");
}
public static int GetUnloadOption(string arg)
{
return System.Convert.ToInt32(Session.LibraryUnloadOption.Immediately);
}
}