Class MachineMotionStep
- Namespace
- Hi.MachiningSteps
- Assembly
- HiMech.dll
MachiningStep has spindle information. Note that the spindle information is only for milling behavior.
public class MachineMotionStep : IGetFeedrate, IGetSpindleSpeed, IWriteBin
- Inheritance
-
MachineMotionStep
- Implements
- Inherited Members
- Extension Methods
Remarks
The step is the managed view of the play core's step record
(mechmachiningmachining_step_record_t, mirrored by
Hi.Machining.NativeMachiningStep.StepRecord): the step pipeline builds it from the record
the step procedure answered
(MachineMotionStep(in StepRecord, ProgramZeroLegs)) and
ToRecord fills a record back. Every value the step derives from its record –
the spindle angles, the feeds, the tool-running frame and the pairs on it, the move and the
program cusp – is computed on every read, nothing is memoised on the step, and the
arithmetic lives in core.dll (mech/motion/motion_step.cpp, the line-by-line port of
the managed bodies, play-core migration P9): the step pipeline takes the values from the
step procedure's answer (StepMotionSnapshot.Derived), handed down its stages, and a
getter here crosses to the stateless motion_step__* exports
(Hi.Motion.NativeMotion), one native call per read, for a reader off the pipeline.
Wire format (the result-recording plan's P1): WriteBin(BinaryWriter) writes the step as one
117-byte record and
MachineMotionStep(BinaryReader, ProgramZeroLegs, in mat4d_t, in mat4d_t) reads
it back. The record is the version byte (1), then the fields of the step record
ToRecord fills, in the record's order and each as its little-endian bytes: the
duration ticks and the end-timecode ticks (int64), the six machine-coordinate values
(doubles; the entries past n_mc are zero), the begin spindle angle, the commanded CL
feedrate, the actual tip feedrate and the spindle speed (doubles as their raw bits, so NaN
payloads and signed zeros survive), the tool id, n_mc (-1 for a null
McValues), the spindle direction, the coolant mode and the rapid flag (int32,
1 / 0). No matrix is in the record: the two program-zero legs and the pair on the workpiece
geometry coordinate stay on the record's shell, and the reader takes them back from its
caller, so a step read back always carries a pair. The five fields of the step record the
shell owns -- the step index, the sentence index, the holder index, the touched flag and the
collided-pair count -- are not written either.
Constructors
MachineMotionStep(MachineMotionStep)
Initializes a new instance of the MachineMotionStep class by copying from another instance.
public MachineMotionStep(MachineMotionStep src)
Parameters
srcMachineMotionStepThe source machining step to copy from.
MachineMotionStep(BinaryReader, ProgramZeroLegs, in mat4d_t, in mat4d_t)
Initializes a new instance of the MachineMotionStep class from the record
WriteBin(BinaryWriter) wrote, on programZeroLegs and with the pair the
record does not carry handed back by the caller: a step read back always carries a pair
(SeqOnWorkpieceGeomCoordinate is never null here, while a step in memory may
carry none; every step the step pipeline publishes carries one). The version byte is
judged before a byte of the payload is read; then the record is read field for field and
the step built from it as the step pipeline builds its steps from the step procedure's
answer.
public MachineMotionStep(BinaryReader reader, ProgramZeroLegs programZeroLegs, in mat4d_t seqPre, in mat4d_t seqCur)
Parameters
readerBinaryReaderThe reader positioned at the record's first byte.
programZeroLegsProgramZeroLegsThe holder of the step's two program-zero matrices; not null.
seqPremat4d_tThe pair's previous pose on the workpiece geometry coordinate.
seqCurmat4d_tThe pair's current pose on the workpiece geometry coordinate.
Exceptions
- InvalidDataException
The record's version is not this build's, or its
n_mcis outside -1..6.- EndOfStreamException
The stream ends inside the record.
- ArgumentNullException
programZeroLegsis null.
MachineMotionStep(TimeSpan, TimeSpan, double, double[], double, double, SpindleDirection, CoolantMode, int, mat4d_t, mat4d_t, SeqPair<mat4d_t>)
Initializes a new instance of the MachineMotionStep class with specified parameters, on a ProgramZeroLegs holder of its own built from the two program-zero matrices. The step pipeline builds its steps on the holder the steps of one workpiece instance share, through MachineMotionStep(TimeSpan, TimeSpan, double, double[], double, double, SpindleDirection, CoolantMode, int, ProgramZeroLegs, SeqPair<mat4d_t>).
public MachineMotionStep(TimeSpan stepDuration, TimeSpan accumulatedTime, double beginSpindleAngle_rad, double[] mcValues, double commandedClFeedrate_mmds, double spindleSpeed_radds, SpindleDirection spindleDirection, CoolantMode coolantMode, int toolId, mat4d_t programZeroToWorkpieceGeomToMat4d, mat4d_t workpieceGeomToProgramZeroMat4d, SeqPair<mat4d_t> seqOnWorkpieceGeomCoordinate)
Parameters
stepDurationTimeSpanThe duration of this step.
accumulatedTimeTimeSpanThe accumulated time up to this step.
beginSpindleAngle_raddoubleThe initial spindle angle in radians.
mcValuesdouble[]The machine coordinate values.
commandedClFeedrate_mmdsdoubleThe controller's commanded CL feedrate in millimeters per second.
spindleSpeed_raddsdoubleThe spindle speed in radians per second.
spindleDirectionSpindleDirectionThe direction of spindle rotation.
coolantModeCoolantModeThe coolant delivery mode active for this step.
toolIdintThe ID of the tool being used.
programZeroToWorkpieceGeomToMat4dmat4d_tThe transformation matrix from program zero to workpiece geometry.
workpieceGeomToProgramZeroMat4dmat4d_tThe transformation matrix from workpiece geometry to program zero.
seqOnWorkpieceGeomCoordinateSeqPair<mat4d_t>The sequence of transformations on workpiece geometry coordinate.
MachineMotionStep(TimeSpan, TimeSpan, double, double[], double, double, SpindleDirection, CoolantMode, int, ProgramZeroLegs, SeqPair<mat4d_t>)
Initializes a new instance of the MachineMotionStep class on a shared ProgramZeroLegs holder: the step keeps a reference to it, not a copy of its two matrices, so every step built on one workpiece instance refers to the same 272-byte object and the step itself is 112 bytes.
public MachineMotionStep(TimeSpan stepDuration, TimeSpan accumulatedTime, double beginSpindleAngle_rad, double[] mcValues, double commandedClFeedrate_mmds, double spindleSpeed_radds, SpindleDirection spindleDirection, CoolantMode coolantMode, int toolId, ProgramZeroLegs programZeroLegs, SeqPair<mat4d_t> seqOnWorkpieceGeomCoordinate)
Parameters
stepDurationTimeSpanThe duration of this step.
accumulatedTimeTimeSpanThe accumulated time up to this step.
beginSpindleAngle_raddoubleThe initial spindle angle in radians.
mcValuesdouble[]The machine coordinate values.
commandedClFeedrate_mmdsdoubleThe controller's commanded CL feedrate in millimeters per second.
spindleSpeed_raddsdoubleThe spindle speed in radians per second.
spindleDirectionSpindleDirectionThe direction of spindle rotation.
coolantModeCoolantModeThe coolant delivery mode active for this step.
toolIdintThe ID of the tool being used.
programZeroLegsProgramZeroLegsThe holder of the two program-zero matrices; not null.
seqOnWorkpieceGeomCoordinateSeqPair<mat4d_t>The sequence of transformations on workpiece geometry coordinate.
Exceptions
- ArgumentNullException
programZeroLegsis null.
Properties
ActualTipFeedrate_mmds
The equipped tool's real tip feedrate over this step in millimeters per second: the tip's displacement relative to the workpiece from the previous step's pose to this one, over StepDuration. This is the feedrate the cut experiences. It equals CommandedClFeedrate_mmds whenever the tip translates with the controller's CL point (XYZ moves, CL files, RTCP with the tool-length offset of the equipped tool) and differs when the two decouple: under RTCP with an offset that does not describe the equipped tool the tip sweeps with the posture change while the CL point may stand still. Initialised to the commanded value; the step builder assigns the measured one (MeasureActualTipFeedrate_mmds(vec3d_t?, vec3d_t?, TimeSpan, bool, double)) and keeps the commanded value where no tip speed is defined. Physics reads this value: GetFeedPerTooth_mm(IMachiningTool), FeedPerCycle_mm, the force step and the MRR. Presented to clients as ActualTipFeedrate_mmdmin.
public double ActualTipFeedrate_mmds { get; set; }
Property Value
BeginSpindleAngle_deg
Begin spindle rotation angle. in deg;
public double BeginSpindleAngle_deg { get; set; }
Property Value
BeginSpindleAngle_rad
The spindle angle at the beginning of the step, in radians, positive the M03 (clockwise) way seen from the spindle toward the tool tip (BeginSpindleAngle_rad).
public double BeginSpindleAngle_rad { get; set; }
Property Value
BeginTimecode
The work time at the begin of the step.
public TimeSpan BeginTimecode { get; }
Property Value
CdnTransformProgramToToolRunning
Gets the transformation matrix from program to tool running coordinate:
CdnTransformProgramToWorkpieceGeom times
CdnTransformWorkpieceGeomToToolRunning, computed in core.dll on every read
(motion_step__program_to_tool_running).
public mat4d_t CdnTransformProgramToToolRunning { get; }
Property Value
CdnTransformProgramToWorkpieceGeom
Gets the transformation matrix from program zero to workpiece geometry.
public mat4d_t CdnTransformProgramToWorkpieceGeom { get; }
Property Value
CdnTransformToolRunningToProgram
Gets the transformation matrix from tool running to program coordinate: the inverse of
CdnTransformProgramToToolRunning, computed in core.dll on every read
(motion_step__tool_running_to_program).
public mat4d_t CdnTransformToolRunningToProgram { get; }
Property Value
CdnTransformToolRunningToWorkpieceGeom
Tool running coordinate to workpiece geom coordinate: the inverse of
CdnTransformWorkpieceGeomToToolRunning, computed in core.dll on every read
(motion_step__tool_running_to_workpiece_geom).
public mat4d_t CdnTransformToolRunningToWorkpieceGeom { get; }
Property Value
CdnTransformWorkpieceGeomToProgram
Gets the transformation matrix from workpiece geometry to program zero.
public mat4d_t CdnTransformWorkpieceGeomToProgram { get; }
Property Value
CdnTransformWorkpieceGeomToToolRunning
Gets the transformation matrix from workpiece geometry to tool running coordinate, computed on every read from SeqOnWorkpieceGeomCoordinate: nothing is memoised on the step, so a concurrent first read cannot see a half-written matrix and a replaced pair reads through at once. The step procedure computes it once per step (the first of the step's derived values) and the pipeline hands it down its stages; a reader outside the pipeline builds it again on every read, in core.dll – two cross products, a normalisation and one 4x4 product, or the inverse of the current pose on an axial or zero move.
public mat4d_t CdnTransformWorkpieceGeomToToolRunning { get; }
Property Value
CommandedClFeedrate_mmds
The controller's commanded feedrate of the CL point in millimeters per second (CommandedClFeedrate_mmds at the time of the step): the F word after G94/G95/G93 conversion, or for a rapid the CL path over the act duration. It is not the equipped tool's real tip feedrate: under RTCP with a tool-length offset that does not match the equipped tool the tip sweeps while the CL point may stand still; the tip's own feedrate is ActualTipFeedrate_mmds. Presented to clients as Feedrate_mmdmin.
public double CommandedClFeedrate_mmds { get; set; }
Property Value
CoolantMode
Gets or sets the coolant delivery mode active for this step. Read by BuildCuttingTemperatureAndWear(SeqPhysicsState, MachineMotionStep, MachineMotionStep, double, SpindleCapability, IMachiningTool, Workpiece, int, Substraction, LayerMillingEngagement, MillingForceBrief, CoolantHeatCondition, CoolantMode, bool, MillingToolPhysicsPack, Action<string>) to pick the effective convection coefficient on the temperature FEM.
public CoolantMode CoolantMode { get; set; }
Property Value
CyclePeriod
Gets the cycle period as a TimeSpan.
public TimeSpan CyclePeriod { get; }
Property Value
CyclePeriod_s
Gets the cycle period in seconds: 60 over SpindleSpeed_rpm, computed in
core.dll on every read (motion_step__cycle_period_s).
public double CyclePeriod_s { get; }
Property Value
EndSpindleAngle_deg
Gets the end spindle angle in degrees.
public double EndSpindleAngle_deg { get; }
Property Value
EndSpindleAngle_rad
Gets the end spindle angle in radians: BeginSpindleAngle_rad plus
PassedSpindleAngle_rad, wrapped about 0 as Cycle2Pi_rad(double, double, bool)
wraps; computed in core.dll on every read (motion_step__end_spindle_angle_rad).
public double EndSpindleAngle_rad { get; }
Property Value
EndTimecode
The work time at the end of the step. The value is BeginTimecode + StepDuration.
public TimeSpan EndTimecode { get; set; }
Property Value
FeedPerCycle_mm
The feed per spindle cycle in millimeters, from the real tip feedrate (ActualTipFeedrate_mmds): the advance the cut experiences per revolution.
public double FeedPerCycle_mm { get; }
Property Value
GeomCl
Gets the current position in workpiece geometry coordinate.
public dvec3d_t GeomCl { get; }
Property Value
IsRapid
Whether the controller commanded this step as a rapid traverse (G00, ActRapid): CommandedClFeedrate_mmds is then the rapid rate, not a programmed feed. Assigned by the step builder from IsRapid; false for feed motion and for steps built outside an act runner. A rapid step that removes stock is what RapidCutMonitor reports.
public bool IsRapid { get; set; }
Property Value
McValues
Machine coordinate values.
public double[] McValues { get; set; }
Property Value
- double[]
MoveOnProgramCoordinate_mm
Gets the movement vector in program coordinate in millimeters: the vector rotated into
the program coordinate, not translated (motion_step__move); null while the step
carries no sequence on the workpiece geometry coordinate.
public vec3d_t? MoveOnProgramCoordinate_mm { get; }
Property Value
MoveOnWorkpieceGeomCoordinate_mm
Gets the movement vector in workpiece geometry coordinate in millimeters, computed on
every read as the difference of the pair's two tip points (nothing is memoised on the
step; the arithmetic is core.dll's, motion_step__move); null while the step
carries no sequence on the workpiece geometry coordinate.
public vec3d_t? MoveOnWorkpieceGeomCoordinate_mm { get; }
Property Value
MovingDirectionOnWorkpieceGeomCoordinate
Gets the movement direction vector in workpiece geometry coordinate, the zero vector
for a zero move (motion_step__move); null while the step carries no sequence on
the workpiece geometry coordinate.
public vec3d_t? MovingDirectionOnWorkpieceGeomCoordinate { get; }
Property Value
MovingLength_mm
Gets the length of movement in millimeters, computed on every read from the pair
(motion_step__move: the length of MoveOnWorkpieceGeomCoordinate_mm).
public double MovingLength_mm { get; }
Property Value
Exceptions
- InvalidOperationException
The step carries no sequence on the workpiece geometry coordinate.
PassedSpindleAngle_deg
For milling behavior only.
public double PassedSpindleAngle_deg { get; }
Property Value
PassedSpindleAngle_rad
The angle the spindle turns through over the step, in radians: positive
under M03, negative under M04, and 0 while the spindle is stopped (M05
keeps the modal SpindleSpeed_radds) or its direction is
undefined (GetSpindleAngleRate_radds(SpindleDirection, double));
computed in core.dll on every read (motion_step__passed_spindle_angle_rad: the
rate times the duration's seconds).
public double PassedSpindleAngle_rad { get; }
Property Value
ProgramCl
Gets the current position in program coordinate: GeomCl over
ProgramToWorkpieceGeomMat4d, computed in core.dll on every read
(motion_step__program_cl).
public dvec3d_t ProgramCl { get; }
Property Value
ProgramToWorkpieceGeomMat4d
Gets or sets the transformation matrix from program zero to workpiece geometry. Setting it gives this step a holder of its own, with WorkpieceGeomToProgramMat4d as it was; the steps that shared the previous holder keep it. The two legs are not set as a pair: each setter reads the current holder and publishes a new one, so a reader between two sets sees one new leg with one old (as with the two fields before), and two threads setting the two legs of one step at once can lose one of the writes. Build the step on a holder where the pair matters.
public mat4d_t ProgramToWorkpieceGeomMat4d { get; set; }
Property Value
ProgramZeroLegs
Gets the holder of the step's two program-zero matrices; never null. The steps the step pipeline builds on one workpiece instance share one holder (ProgramZeroLegs).
public ProgramZeroLegs ProgramZeroLegs { get; }
Property Value
SeqOnToolRunningCoordinate
Gets the sequence of transformations on tool running coordinate: the pair carried
through CdnTransformWorkpieceGeomToToolRunning, which this read builds in
core.dll (motion_step__seq_on_tool_running); null while the step carries no pair.
The step pipeline takes the pair from the step procedure's answer.
public SeqPair<mat4d_t> SeqOnToolRunningCoordinate { get; }
Property Value
SeqOnWorkpieceGeomCoordinate
Gets or sets the sequence of transformations on workpiece geometry coordinate.
public SeqPair<mat4d_t> SeqOnWorkpieceGeomCoordinate { get; set; }
Property Value
SpindleDirection
Gets or sets the direction of spindle rotation.
public SpindleDirection SpindleDirection { get; set; }
Property Value
SpindleSpeed_cycleds
Gets the spindle speed in cycles per second.
public double SpindleSpeed_cycleds { get; }
Property Value
SpindleSpeed_radds
For milling behavior only.
public double SpindleSpeed_radds { get; set; }
Property Value
SpindleSpeed_rpm
Gets the spindle speed in revolutions per minute.
public double SpindleSpeed_rpm { get; }
Property Value
StepDuration
Gets or sets the duration of this step.
public TimeSpan StepDuration { get; set; }
Property Value
ToolId
Gets or sets the ID of the tool being used.
public int ToolId { get; set; }
Property Value
WorkpieceGeomToProgramMat4d
Gets or sets the transformation matrix from workpiece geometry to program zero. Setting it gives this step a holder of its own, with ProgramToWorkpieceGeomMat4d as it was; the steps that shared the previous holder keep it. Not a pair-wise write with the other leg (see ProgramToWorkpieceGeomMat4d).
public mat4d_t WorkpieceGeomToProgramMat4d { get; set; }
Property Value
Methods
GetFeedPerTooth_mm(IMachiningTool)
The feed per tooth in millimeters, from the real tip feedrate (ActualTipFeedrate_mmds): the chip load the cut experiences, which the force step and the tooth sequence are built on.
public double GetFeedPerTooth_mm(IMachiningTool millingTool)
Parameters
millingToolIMachiningToolThe milling tool.
Returns
- double
The feed per tooth in millimeters.
GetFeedrate_mmds()
Gets the program feedrate in millimeters per second.
public double GetFeedrate_mmds()
Returns
- double
Feedrate in mm/s
GetMachiningTool(MachiningToolHouse)
Gets the machining tool from the tool house.
public IMachiningTool GetMachiningTool(MachiningToolHouse toolHouse)
Parameters
toolHouseMachiningToolHouseThe machining tool house.
Returns
- IMachiningTool
The machining tool.
GetProgramSideCuspHeight_mm(IMachiningTool, MillingToolPhysicsPack)
Gets the program side cusp height in millimeters.
public double GetProgramSideCuspHeight_mm(IMachiningTool millingTool, MillingToolPhysicsPack physicsPack = null)
Parameters
millingToolIMachiningToolThe milling tool.
physicsPackMillingToolPhysicsPackThe frozen per-session physics pack of
millingTool; null computes the diameter on use.
Returns
- double
The program side cusp height in millimeters.
GetSideCuspList_mm(IMachiningTool, MillingToolPhysicsPack)
Gets the list of side cusp heights in millimeters: one height per division of the
spindle cycle (RotationDivisionNum), the cusp of the
flute whose window holds the division's angle, 0 where none does; computed in core.dll
on every read from one feed per tooth and one radius (motion_step__side_cusp_list_mm,
the phase interval built inside from the same radius – never a newer generation).
public List<double> GetSideCuspList_mm(IMachiningTool millingTool, MillingToolPhysicsPack physicsPack = null)
Parameters
millingToolIMachiningToolThe milling tool.
physicsPackMillingToolPhysicsPackThe frozen per-session physics pack of
millingTool; null computes the diameter on use.
Returns
GetSideCuspPhaseInterval_rad(IMachiningTool, MillingToolPhysicsPack)
Gets the side cusp phase interval in radians.
public double GetSideCuspPhaseInterval_rad(IMachiningTool millingTool, MillingToolPhysicsPack physicsPack = null)
Parameters
millingToolIMachiningToolThe milling tool.
physicsPackMillingToolPhysicsPackThe frozen per-session physics pack of
millingTool; null computes the diameter on use.
Returns
- double
The side cusp phase interval in radians.
GetSpindleDirection()
Gets the spindle rotation direction.
public SpindleDirection GetSpindleDirection()
Returns
- SpindleDirection
The spindle direction (clockwise, counterclockwise, or stopped)
GetSpindleSpeed_cycleds()
Gets the spindle speed in cycles per second.
public double GetSpindleSpeed_cycleds()
Returns
- double
The spindle speed in cycles per second.
GetSpindleSpeed_radds()
Gets the spindle speed in radians per second.
public double GetSpindleSpeed_radds()
Returns
- double
Spindle speed in rad/s
GetToothArcDuration_s(IMachiningTool)
Gets the duration of a single tooth arc in seconds: CyclePeriod_s over the
tool's flute number, NaN for a null tool; computed in core.dll on every read
(motion_step__tooth_arc_duration_s, a flute number below 0 standing for none).
public double GetToothArcDuration_s(IMachiningTool millingTool)
Parameters
millingToolIMachiningToolThe milling tool.
Returns
- double
The duration of a single tooth arc in seconds.
GetToothSeqOnToolRunningCoordinate(IMachiningTool)
Gets the sequence of transformations for a single tooth on tool running coordinate:
the pair's cur, and a pre one GetFeedPerTooth_mm(IMachiningTool) back from it along the
pair's relative motion; computed in core.dll on every read
(motion_step__tooth_seq_on_tool_running). The step pipeline takes the tooth pair
from the step procedure's answer.
public SeqPair<mat4d_t> GetToothSeqOnToolRunningCoordinate(IMachiningTool millingTool)
Parameters
millingToolIMachiningToolThe milling tool.
Returns
MeasureActualTipFeedrate_mmds(vec3d_t?, vec3d_t?, TimeSpan, bool, double)
Measures a step's real tip feedrate: the distance from the tip point the
machine stood at before this step to the one it reaches, on the
workpiece-geometry coordinate, over the step duration. Falls back to
commandedClFeedrate_mmds where a tip speed is not
defined: no previous point (the first step after a reset, or after a
cutter location that was not finite), a
non-positive duration (a CSV row without timing), or a tool change
between the two points (the tip jumped with the tool, it did not
travel). The previous point is the pose the step pipeline saw last,
step or no step (PreTipPose):
the sweep valve skips a collinear return over a segment it already
covered, and it spans a motion pair's pre two steps back on a
straight run, so neither the last built step nor cur - pre
measures one step's travel. The step procedure measures every built step's
(ActualTipFeedrate_mmds of the record it answers) with the same
arithmetic, which lives in core.dll (motion_step__measure_actual_tip_feedrate_mmds).
public static double MeasureActualTipFeedrate_mmds(vec3d_t? preTipPoint, vec3d_t? curTipPoint, TimeSpan stepDuration, bool sameTool, double commandedClFeedrate_mmds)
Parameters
preTipPointvec3d_t?The tip point before this step, or null when there is no previous tip pose.
curTipPointvec3d_t?The tip point this step reaches, or null when the step carries no current pose.
stepDurationTimeSpanThis step's duration.
sameToolboolWhether the tool at
preTipPointis the tool of this step.commandedClFeedrate_mmdsdoubleThe commanded CL feedrate, returned where no tip speed is defined.
Returns
- double
The tip feedrate in millimeters per second.
ToString()
Returns a string representation of this machining step.
public override string ToString()
Returns
- string
A string representation of this machining step.
WithFeedrate(double)
A copy of this step at another feedrate: both
CommandedClFeedrate_mmds and ActualTipFeedrate_mmds
are feedrate_mmds. For a solver asking what the cut
would experience at a candidate feed (the trial step of the NC
optimization's feed solve).
public MachineMotionStep WithFeedrate(double feedrate_mmds)
Parameters
feedrate_mmdsdoubleThe candidate feedrate in millimeters per second.
Returns
- MachineMotionStep
The copy.
WriteBin(BinaryWriter)
Writes this step as one 117-byte record: the version byte, then the fields of the step
record ToRecord fills, in the record's order – the duration and the
end-timecode ticks (int64), the six machine-coordinate values (the entries past
n_mc zero), the begin spindle angle, the commanded CL feedrate, the actual tip
feedrate and the spindle speed (doubles as their raw bits: NaN payloads and signed zeros
survive), the tool id, n_mc (McValues' length, -1 for null), the
spindle direction, the coolant mode and the rapid flag (int32, 1 / 0). No matrix is
written: the two program-zero legs and the pair on the workpiece geometry coordinate are
the record's shell's, and the reader takes them from its caller. The record is filled
before the first byte is written, so a step that cannot be recorded leaves the stream as
it was.
public void WriteBin(BinaryWriter writer)
Parameters
writerBinaryWriterThe writer to write to.
Exceptions
- InvalidOperationException
McValues has more than the six entries a record carries.