Default Move Events
The code below assumes that a STEP-NC file is in memory and annotated with ARM objects as described in the Getting Started instructions.
The example below uses a cursor to print the tool movements in a process. Each call to next() will return a move event (STIXCTL_MOVE) and the active element on the process stack will be some type of movement element. Check the type of that element with getActiveType().
After testing whether it is a linear move, arc, or helix, we 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.
// Print coordinates and tool axis information for a move
//
void printend(StixCtlCursor &ctl, StixCtlPos p)
{
    double v[3];
    ctl.getPosXYZ(v, p);
    printf (  END: XYZ: %.5g %.5g %.5g
, v[0], v[1], v[2]);
    
    if (ctl.getPosDirZ(v, p))
	printf (  ZDIR: %.5g %.5g %.5g
, v[0], v[1], v[2]);
    printf (\n
);
}
// Print arc center, radius, and direction for an arc move
//
void printarc(StixCtlCursor &ctl, StixCtlPos p)
{
    double v[3];
    printf (  ARC: %s
, ctl.getArcIsCW(p)? CW
: CCW
);
    
    ctl.getArcCenter(v, p);
    printf (  CENTER: %.5g %.5g %.5g
, v[0], v[1], v[2]);
    printf (  RADIUS: %.5g
, ctl.getArcRadius(p));
    printf (  ANGLE: %.5g
, ctl.getArcAngle(p));
    printf (\n
);
}
int main (int argc, char **argv)
{
    [ ... read file and other setup ... ]
    StixCtlCursor p;
    p.startProject(design);
    while (p.next()) {
	switch (p.getActiveType())
	{
	case STIXCTL_TYPE_MOVE:
	    printf (LINEAR MOVE\n
);
	    printend(p, p.getMoveEnd());
	    break;
	    
	case STIXCTL_TYPE_MOVE_ARC:
	    printf (ARC MOVE\n
);
	    printarc(p, p.getMoveArc());
	    printend(p, p.getMoveEnd());
	    break;
	case STIXCTL_TYPE_MOVE_HELIX:
	    printf (HELIX MOVE\n
);
	    printarc(p, p.getMoveArc());
	    printend(p, p.getMoveEnd());
	    break;
	default:
	    printf (UNKNOWN MOVE\n
);
	    break;
	}
    }
    return 0;
}
When run on a file with some linear and arc moves, it produces the following output. The data was a series of three-axis toolpaths, so none of the positions have a tool axis direction.
LINEAR MOVE END: XYZ: 0 0 0 LINEAR MOVE END: XYZ: 0 2 0 ARC MOVE ARC: CW CENTER: 2 2 0 RADIUS: 2 ANGLE: 90 END: XYZ: 2 4 0 ARC MOVE ARC: CCW CENTER: 2 6 0 RADIUS: 2 ANGLE: 90 END: XYZ: 4 6 0 LINEAR MOVE END: XYZ: 4 6 0 LINEAR MOVE END: XYZ: 6 6 0 ARC MOVE ARC: CCW CENTER: 8 6 0 RADIUS: 2 ANGLE: 90 END: XYZ: 8 4 0 ARC MOVE ARC: CW CENTER: 8 2 0 RADIUS: 2 ANGLE: 90 END: XYZ: 10 2 0 LINEAR MOVE END: XYZ: 10 2 0 LINEAR MOVE END: XYZ: 10 0 0