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