Table of Contents

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

src MachineMotionStep

The 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

reader BinaryReader

The reader positioned at the record's first byte.

programZeroLegs ProgramZeroLegs

The holder of the step's two program-zero matrices; not null.

seqPre mat4d_t

The pair's previous pose on the workpiece geometry coordinate.

seqCur mat4d_t

The pair's current pose on the workpiece geometry coordinate.

Exceptions

InvalidDataException

The record's version is not this build's, or its n_mc is outside -1..6.

EndOfStreamException

The stream ends inside the record.

ArgumentNullException

programZeroLegs is 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

stepDuration TimeSpan

The duration of this step.

accumulatedTime TimeSpan

The accumulated time up to this step.

beginSpindleAngle_rad double

The initial spindle angle in radians.

mcValues double[]

The machine coordinate values.

commandedClFeedrate_mmds double

The controller's commanded CL feedrate in millimeters per second.

spindleSpeed_radds double

The spindle speed in radians per second.

spindleDirection SpindleDirection

The direction of spindle rotation.

coolantMode CoolantMode

The coolant delivery mode active for this step.

toolId int

The ID of the tool being used.

programZeroToWorkpieceGeomToMat4d mat4d_t

The transformation matrix from program zero to workpiece geometry.

workpieceGeomToProgramZeroMat4d mat4d_t

The transformation matrix from workpiece geometry to program zero.

seqOnWorkpieceGeomCoordinate SeqPair<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

stepDuration TimeSpan

The duration of this step.

accumulatedTime TimeSpan

The accumulated time up to this step.

beginSpindleAngle_rad double

The initial spindle angle in radians.

mcValues double[]

The machine coordinate values.

commandedClFeedrate_mmds double

The controller's commanded CL feedrate in millimeters per second.

spindleSpeed_radds double

The spindle speed in radians per second.

spindleDirection SpindleDirection

The direction of spindle rotation.

coolantMode CoolantMode

The coolant delivery mode active for this step.

toolId int

The ID of the tool being used.

programZeroLegs ProgramZeroLegs

The holder of the two program-zero matrices; not null.

seqOnWorkpieceGeomCoordinate SeqPair<mat4d_t>

The sequence of transformations on workpiece geometry coordinate.

Exceptions

ArgumentNullException

programZeroLegs is 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

double

BeginSpindleAngle_deg

Begin spindle rotation angle. in deg;

public double BeginSpindleAngle_deg { get; set; }

Property Value

double

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

double

BeginTimecode

The work time at the begin of the step.

public TimeSpan BeginTimecode { get; }

Property Value

TimeSpan

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

mat4d_t

CdnTransformProgramToWorkpieceGeom

Gets the transformation matrix from program zero to workpiece geometry.

public mat4d_t CdnTransformProgramToWorkpieceGeom { get; }

Property Value

mat4d_t

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

mat4d_t

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

mat4d_t

CdnTransformWorkpieceGeomToProgram

Gets the transformation matrix from workpiece geometry to program zero.

public mat4d_t CdnTransformWorkpieceGeomToProgram { get; }

Property Value

mat4d_t

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

mat4d_t

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

double

CoolantMode

public CoolantMode CoolantMode { get; set; }

Property Value

CoolantMode

CyclePeriod

Gets the cycle period as a TimeSpan.

public TimeSpan CyclePeriod { get; }

Property Value

TimeSpan

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

double

EndSpindleAngle_deg

Gets the end spindle angle in degrees.

public double EndSpindleAngle_deg { get; }

Property Value

double

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

double

EndTimecode

The work time at the end of the step. The value is BeginTimecode + StepDuration.

public TimeSpan EndTimecode { get; set; }

Property Value

TimeSpan

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

double

GeomCl

Gets the current position in workpiece geometry coordinate.

public dvec3d_t GeomCl { get; }

Property Value

dvec3d_t

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

bool

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

vec3d_t?

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

vec3d_t?

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

vec3d_t?

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

double

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

double

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

double

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

dvec3d_t

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

mat4d_t

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

ProgramZeroLegs

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

SeqPair<mat4d_t>

SeqOnWorkpieceGeomCoordinate

Gets or sets the sequence of transformations on workpiece geometry coordinate.

public SeqPair<mat4d_t> SeqOnWorkpieceGeomCoordinate { get; set; }

Property Value

SeqPair<mat4d_t>

SpindleDirection

Gets or sets the direction of spindle rotation.

public SpindleDirection SpindleDirection { get; set; }

Property Value

SpindleDirection

SpindleSpeed_cycleds

Gets the spindle speed in cycles per second.

public double SpindleSpeed_cycleds { get; }

Property Value

double

SpindleSpeed_radds

For milling behavior only.

public double SpindleSpeed_radds { get; set; }

Property Value

double

SpindleSpeed_rpm

Gets the spindle speed in revolutions per minute.

public double SpindleSpeed_rpm { get; }

Property Value

double

StepDuration

Gets or sets the duration of this step.

public TimeSpan StepDuration { get; set; }

Property Value

TimeSpan

ToolId

Gets or sets the ID of the tool being used.

public int ToolId { get; set; }

Property Value

int

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

mat4d_t

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

millingTool IMachiningTool

The 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

toolHouse MachiningToolHouse

The 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

millingTool IMachiningTool

The milling tool.

physicsPack MillingToolPhysicsPack

The 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

millingTool IMachiningTool

The milling tool.

physicsPack MillingToolPhysicsPack

The frozen per-session physics pack of millingTool; null computes the diameter on use.

Returns

List<double>

The list of side cusp heights in millimeters; null for a null tool.

GetSideCuspPhaseInterval_rad(IMachiningTool, MillingToolPhysicsPack)

Gets the side cusp phase interval in radians.

public double GetSideCuspPhaseInterval_rad(IMachiningTool millingTool, MillingToolPhysicsPack physicsPack = null)

Parameters

millingTool IMachiningTool

The milling tool.

physicsPack MillingToolPhysicsPack

The 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

millingTool IMachiningTool

The 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

millingTool IMachiningTool

The milling tool.

Returns

SeqPair<mat4d_t>

The sequence of transformations for a single tooth.

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

preTipPoint vec3d_t?

The tip point before this step, or null when there is no previous tip pose.

curTipPoint vec3d_t?

The tip point this step reaches, or null when the step carries no current pose.

stepDuration TimeSpan

This step's duration.

sameTool bool

Whether the tool at preTipPoint is the tool of this step.

commandedClFeedrate_mmds double

The 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_mmds double

The 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

writer BinaryWriter

The writer to write to.

Exceptions

InvalidOperationException

McValues has more than the six entries a record carries.