Print STEP-NC Tool Moves
The sample program below prints destination information for tool moves in a STEP-NC file. The program uses the the FinderAPI to read the data and the Adaptive process cursor to iterate over the moves.
The process cursor walks the process until it reaches the next requested event. By default, it just stops at tool moves. At each move, we examine the type of movement element on the process stack and print relevant information for a linear move, arc, or helix.
Imports STEPNCLib
Sub Main()
Dim finder As finder = New finder
Dim ctl As Adaptive = New Adaptive
'' Read a STEP-NC file
finder.Open238("sample_file.stpnc")
'' Start traversing the process within the file.
'' Uses the active data from finder.
ctl.StartProject()
'' The Move event is the only one selected by default
While ctl.Next() <> Adaptive.CtlEvent.DONE
Select Case ctl.GetActiveType()
Case Adaptive.CtlType.MOVE
Console.WriteLine("LINEAR MOVE")
printend(ctl, ctl.GetMoveEnd())
Case Adaptive.CtlType.MOVE_ARC
Console.WriteLine("ARC MOVE")
printarc(ctl, ctl.GetMoveArc())
printend(ctl, ctl.GetMoveEnd())
Case Adaptive.CtlType.MOVE_HELIX
Console.WriteLine("HELIX MOVE")
printarc(ctl, ctl.GetMoveArc())
printend(ctl, ctl.GetMoveEnd())
End Select
End While
End Sub
The functions below print the destination coordinates, tool axis, and any arc parameters associated with the move. These are the most common parameters, but a position may have others, like surface normal or feed multiplier.
Sub printend(ctl As Adaptive, p As UInteger)
Dim a, b, c As Double
ctl.GetPosXYZ(a, b, c, p)
Console.Write(" END: XYZ: {0:0.0####} {1:0.0####} {2:0.0####}", a, b, c)
ctl.GetPosDirZ(a, b, c, p)
Console.Write(" ZDIR: {0:0.0####} {1:0.0####} {2:0.0####}", a, b, c)
Console.WriteLine()
End Sub
'' Print arc center, radius, and direction for an arc move
''
Sub printarc(ctl As Adaptive, p As UInteger)
Dim a, b, c As Double
ctl.GetPosXYZ(a, b, c, p)
Console.Write(" END: XYZ: {0:0.0####} {1:0.0####} {2:0.0####}", a, b, c)
If ctl.GetArcIsCW(p) Then
Console.Write(" ARC: CW")
Else
Console.Write(" ARC: CCW")
End If
ctl.GetArcCenter(a, b, c, p)
Console.Write(" END: XYZ: {0:0.0####} {1:0.0####} {2:0.0####}", a, b, c)
Console.Write(" RADIUS: {0:0.0####}", ctl.GetArcRadius(p))
Console.Write(" ANGLE: {0:0.0####}", ctl.GetArcAngle(p))
Console.WriteLine()
End Sub