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