Table of Contents

Class MillingForceBrief

Namespace
Hi.MillingForces
Assembly
HiMech.dll

Instant physics brief on the rake face for milling: the force stage's fixed-size scalar summary of one step, beside the per-revolution detail in MillingForceLuggage. Persisted as a tri-state record (WriteBin(BinaryWriter, MillingForceBrief?), ReadBin(BinaryReader)).

public class MillingForceBrief : IWriteBin
Inheritance
MillingForceBrief
Implements
Inherited Members
Extension Methods

Constructors

MillingForceBrief()

Ctor.

public MillingForceBrief()

MillingForceBrief(BinaryReader)

Reads a no-cut or a computed brief written by WriteBin(BinaryWriter). The null record has no instance to construct: read it through ReadBin(BinaryReader).

public MillingForceBrief(BinaryReader reader)

Parameters

reader BinaryReader

The reader positioned at the record's first byte.

Exceptions

InvalidDataException

The record's version is not this build's, the record is the null record, or its tag is none of the three.

MillingForceBrief(int)

Initializes a new instance of the MillingForceBrief class with a specified rotation division number.

public MillingForceBrief(int rotationDivisionNum)

Parameters

rotationDivisionNum int

The number of divisions for rotation calculations.

Properties

AvgAbsForce_N

Gets the average absolute force in Newtons: the length of AvgForceToToolOnToolRunningCoordinate_N, computed on read; 0 until BuildNonSeqExtension(IMachiningTool, MachineMotionStep, MillingForceLuggage, MillingToolPhysicsPack) has run.

public double AvgAbsForce_N { get; }

Property Value

double

AvgAbsMomentAboutSensorVec3d_Nm

Gets the average absolute moment about the sensor as a 3D vector in Newton-meters. Null until BuildNonSeqExtension(IMachiningTool, MachineMotionStep, MillingForceLuggage, MillingToolPhysicsPack) has run.

public vec3d_t? AvgAbsMomentAboutSensorVec3d_Nm { get; }

Property Value

vec3d_t?

AvgAbsMomentXAboutSensorOnSpindleRotationCoordinate_Nm

Gets the average absolute moment about the sensor on spindle rotation coordinate in Newton-meters.

public double AvgAbsMomentXAboutSensorOnSpindleRotationCoordinate_Nm { get; }

Property Value

double

AvgAbsMomentXAboutToolTipOnSpindleRotationCoordinate_Nm

Gets the average absolute moment about the tool tip on spindle rotation coordinate in Newton-meters.

public double AvgAbsMomentXAboutToolTipOnSpindleRotationCoordinate_Nm { get; }

Property Value

double

AvgAbsTorqueOnSpindleRotationCoordinate_Nm

Gets the average of abs spindle axial torque on Spindle rotation coordinate.

public double AvgAbsTorqueOnSpindleRotationCoordinate_Nm { get; }

Property Value

double

AvgContactEdgeLengthPerFlute_mm

Gets the average contact edge length per flute in millimeters.

public double AvgContactEdgeLengthPerFlute_mm { get; }

Property Value

double

AvgForceToToolOnToolRunningCoordinate_N

Avg cutting force to tool on tool running coordinate. Null until BuildNonSeqExtension(IMachiningTool, MachineMotionStep, MillingForceLuggage, MillingToolPhysicsPack) has run.

public vec3d_t? AvgForceToToolOnToolRunningCoordinate_N { get; }

Property Value

vec3d_t?

AvgMomentAboutSensor_Nm

Gets the average moment about the sensor in Newton-meters.

public double AvgMomentAboutSensor_Nm { get; }

Property Value

double

AvgMomentAboutToolTipOnToolRunningCoordinate_Nm

Gets the average moment about the tool tip on tool running coordinate in Newton-meters. Null until BuildNonSeqExtension(IMachiningTool, MachineMotionStep, MillingForceLuggage, MillingToolPhysicsPack) has run.

public vec3d_t? AvgMomentAboutToolTipOnToolRunningCoordinate_Nm { get; }

Property Value

vec3d_t?

AvgMomentAboutToolTip_Nm

Gets the average moment about the tool tip in the program coordinate system, measured in Newton-meters.

public double AvgMomentAboutToolTip_Nm { get; }

Property Value

double

AvgMomentXyAboutObservationPoint

Gets the average moment about the tool tip in the program coordinate system, measured in Newton-meters.

public double AvgMomentXyAboutObservationPoint { get; }

Property Value

double

AvgRadialForcePerFluteToTool_N

Gets the average radial force per flute applied to the tool in Newtons.

public double AvgRadialForcePerFluteToTool_N { get; }

Property Value

double

ChipThickness_mm

Gets or sets the actual chip thickness in millimeters after cutting.

public double ChipThickness_mm { get; }

Property Value

double

ChipVolume_mm3

ChipVolume_mm3 per flute.

public double ChipVolume_mm3 { get; }

Property Value

double

CuttingForceHeightFromToolTip_mm

The height above the tool tip, mm, at which this step's cutting force is placed on the cutter beam for the deflection: the centroid of the engaged cutting edge — the engagement layers that cut the step, each weighted by its height interval and its engaged arc (GetEngagedEdgeHeightFromToolTip_mm(LayerMillingEngagement, List<PairZr>, double, bool)) — recorded by the force computation from the step's engagement. The tip deflection is the force times the beam's compliance for a load at this height (CutterBeamCompliance): a cutter engaged at its bottom reads the tip compliance, a countersink cutting at the rim of a hole reads the far stiffer compliance of a load high on its cone, and a pointed cutter is never loaded at the point it has no section at. The yielding stress ratio leaves out the beam sections below this height (YieldingStressRatio). NaN when the force was not computed from an engagement (a no-cut brief, a brief built before the height was recorded), which the deflection reads as a load at the tip and the yielding stress ratio as no section left out.

public double CuttingForceHeightFromToolTip_mm { get; }

Property Value

double

DeltaTipDeflectionOnToolRunningCoordinate_mm

Gets the delta tip deflection on tool running coordinate in millimeters. Null until BuildNonSeqExtension(IMachiningTool, MachineMotionStep, MillingForceLuggage, MillingToolPhysicsPack) has run, or when no tool or luggage was available to the build.

public vec3d_t? DeltaTipDeflectionOnToolRunningCoordinate_mm { get; }

Property Value

vec3d_t?

FrictionCoefficient

The effective friction coefficient FrictionPower_W was computed with — the kernel's SurfaceMaterial?.FrictionCoefficient ?? CoatingMaterial.DefaultFrictionCoefficient at the time, or the μ a brief-only recompute scaled it to. 0 when unknown (a no-cut brief, or one built before the value was recorded). The friction power is linear in μ, so a rebuild for another μ scales by the ratio against THIS value, per brief: a recompute cancelled half-way and run again scales the already-scaled briefs by 1 instead of by the play-to-current ratio a second time.

public double FrictionCoefficient { get; }

Property Value

double

FrictionPower_W

friction power takes by workpiece per cycle. the unit is watt.

public double FrictionPower_W { get; }

Property Value

double

IsNoCut

Whether this brief is the NoCut(int) record of a step the physics ran on without engagement. Read by the derived values that take equipment context: a no-cut step reads 0 on them whatever the context says (and whether it has one), so the no-cut state stays distinct from “unknown” when no spindle capability or material is attached. Read by the step cache too, which stores the no-cut force record of such a step as its header alone (the brief's tag is one half of that test, the zero array the other).

public bool IsNoCut { get; }

Property Value

bool

IsReliefFaceCollided

Gets a value indicating whether the relief face is collided.

public bool? IsReliefFaceCollided { get; }

Property Value

bool?

MaxAbsForce_N

Gets the maximum absolute force in Newtons: the length of MaxForceOnToolRunningCoordinate_N, computed on read; 0 until BuildNonSeqExtension(IMachiningTool, MachineMotionStep, MillingForceLuggage, MillingToolPhysicsPack) has run or when no rotation sample carries a finite non-zero force.

public double MaxAbsForce_N { get; }

Property Value

double

MaxAxialTorqueOnToolRunningCoordinateZero_Nm

Gets the peak axial torque at the tool running coordinate origin in Newton-meters: the largest magnitude of the axial torque over one spindle rotation, sign dropped, so a CCW (M04) step compares against the spindle torque curve the same way as a CW one.

public double MaxAxialTorqueOnToolRunningCoordinateZero_Nm { get; }

Property Value

double

MaxForceOnToolRunningCoordinate_N

Gets the maximum force on the tool running coordinate in Newtons. Null until BuildNonSeqExtension(IMachiningTool, MachineMotionStep, MillingForceLuggage, MillingToolPhysicsPack) has run, or when no rotation sample carries a finite non-zero force.

public vec3d_t? MaxForceOnToolRunningCoordinate_N { get; }

Property Value

vec3d_t?

MaxMomentAboutSensor_Nm

Gets the maximum moment about the sensor in Newton-meters.

public double MaxMomentAboutSensor_Nm { get; }

Property Value

double

MaxMomentAboutToolTip_Nm

Gets the maximum moment about the tool tip in Newton-meters.

public double MaxMomentAboutToolTip_Nm { get; }

Property Value

double

RakeFaceCycleAvgContactArea_mm2

contact area along cutter outside contact point to circle center direction. The average is for each rotation angle. This property is for computing heat transfer.

public double RakeFaceCycleAvgContactArea_mm2 { get; }

Property Value

double

ReliefFaceCollidingSpeed_mmds

The negative value means there is no relief face collision.

public double? ReliefFaceCollidingSpeed_mmds { get; }

Property Value

double?

RotationAngleInterval_deg

Delta angle in degree. The value is 360 / RotationDivisionNum.

public double RotationAngleInterval_deg { get; }

Property Value

double

RotationAngleInterval_rad

Delta angle in radian. The value is 2 * pi / RotationDivisionNum.

public double RotationAngleInterval_rad { get; }

Property Value

double

RotationDivisionNum

Gets the number of divisions used for rotation calculations.

public int RotationDivisionNum { get; }

Property Value

int

UncutChipThickness_mm

Gets or sets the uncut chip thickness in millimeters.

public double UncutChipThickness_mm { get; }

Property Value

double

YieldingStressRatio

Gets the yielding stress ratio: the largest, over the cutter beam's sections outside the tip zone (a section standing closer to the tip than its own radius) and at or above CuttingForceHeightFromToolTip_mm, of the section's principal stress under this step's cutting forces divided by the beam material's strength (GetYieldingStressRatio(IMachiningTool, double)); NaN when it cannot be evaluated.

public double YieldingStressRatio { get; }

Property Value

double

Methods

BuildNonSeqExtension(IMachiningTool, MachineMotionStep, MillingForceLuggage, MillingToolPhysicsPack)

Internal use. Build extended data: the aggregates of the per-rotation force and moment series of luggage (the force and moment vectors, the peak and average torque, the yielding stress ratio, the tip deflection span) and the axial power the spindle delivers on machineStep. Everything that also depends on the equipment — the spindle ratios, the chip mass, the plastic depth, the moment on the program coordinate — is not stored but computed on read from these aggregates and the context the reader passes. In single thread, no need to use the function. In multi thread, call it before going to un-safe area.

public void BuildNonSeqExtension(IMachiningTool millingTool, MachineMotionStep machineStep, MillingForceLuggage luggage, MillingToolPhysicsPack physicsPack = null)

Parameters

millingTool IMachiningTool
machineStep MachineMotionStep
luggage MillingForceLuggage
physicsPack MillingToolPhysicsPack

GetAbsAxialPower_W()

Gets the absolute axial power in Watts.

public double GetAbsAxialPower_W()

Returns

double

Absolute axial power in Watts.

GetAvgForceToWorkpieceOnProgramCoordinate(MachineMotionStep)

Avg cutting force on workpiece coordinate.

public vec3d_t? GetAvgForceToWorkpieceOnProgramCoordinate(MachineMotionStep machineStep)

Parameters

machineStep MachineMotionStep

Returns

vec3d_t?

The average force to the workpiece on the program coordinate, or null before BuildNonSeqExtension(IMachiningTool, MachineMotionStep, MillingForceLuggage, MillingToolPhysicsPack) has run.

GetAvgMomentAboutToolTipOnProgramCoordinate_Nm(MachineMotionStep)

Gets the average moment to the tool about the tool tip on the program coordinate in Newton-meters, computed on read: AvgMomentAboutToolTipOnToolRunningCoordinate_Nm carried to the program coordinate of machineStep (rotation only). Null until BuildNonSeqExtension(IMachiningTool, MachineMotionStep, MillingForceLuggage, MillingToolPhysicsPack) has run or without a step; Zero on a no-cut brief whatever the step's transform holds (a zero carried through a transform would read −0 components, or NaN through a NaN pose).

public vec3d_t? GetAvgMomentAboutToolTipOnProgramCoordinate_Nm(MachineMotionStep machineStep)

Parameters

machineStep MachineMotionStep

The step's motion, for the tool-running to program transform.

Returns

vec3d_t?

GetAxialPowerTakenByWorkpiece_W()

Gets the axial power taken by workpiece in Watts.

public double GetAxialPowerTakenByWorkpiece_W()

Returns

double

Axial power taken by workpiece in Watts.

GetChipMass_g(WorkpieceMaterial)

Gets the chip mass in grams, computed on read: ChipVolume_mm3 times the density of workpieceMaterial.

public double GetChipMass_g(WorkpieceMaterial workpieceMaterial)

Parameters

workpieceMaterial WorkpieceMaterial

The workpiece material the mass is read against; null (an unreadable side file, or none attached) yields NaN on a step that cuts.

Returns

double

0 on a no-cut brief, NaN without a material, else the mass.

GetContinueSpindlePowerRatio(SpindleCapability, SpindleSpeedCache)

Spindle Power Ratio from spindle power capability on infinite insistency boundary, computed on read: the input spindle power (GetInputSpindlePower_W(SpindleCapability)) over the power the spindle sustains indefinitely at the step's speed (InfInsistentRatioSpindlePowerBoundary_W).

public double GetContinueSpindlePowerRatio(SpindleCapability spindleCapability, SpindleSpeedCache spindleSpeedCache)

Parameters

spindleCapability SpindleCapability

The spindle capability the input power is read with (its energy efficiency); null yields NaN.

spindleSpeedCache SpindleSpeedCache

The spindle limits at the step's speed; null (no spindle capability, or one without the continuous condition) yields NaN.

Returns

double

0 on a no-cut brief; NaN until BuildNonSeqExtension(IMachiningTool, MachineMotionStep, MillingForceLuggage, MillingToolPhysicsPack) has run or without a cache; else the ratio.

GetContinueSpindleTorqueRatio(SpindleSpeedCache)

Spindle Torque Ratio from spindle torque capability on infinite insistency boundary, computed on read: MaxAxialTorqueOnToolRunningCoordinateZero_Nm over the torque the spindle sustains indefinitely at the step's speed (InfInsistentRatioSpindleTorqueBoundary_Nm).

public double GetContinueSpindleTorqueRatio(SpindleSpeedCache spindleSpeedCache)

Parameters

spindleSpeedCache SpindleSpeedCache

The spindle limits at the step's speed; null (no spindle capability, or one without the continuous condition) yields NaN.

Returns

double

0 on a no-cut brief; NaN until BuildNonSeqExtension(IMachiningTool, MachineMotionStep, MillingForceLuggage, MillingToolPhysicsPack) has run or without a cache; else the ratio.

GetDeflectionTransformOnWorkpieceGeomCoordinate(IMachiningTool, WorkpieceMaterial, MachineMotionStep, MillingToolPhysicsPack)

Gets the deflection transformation matrix in the workpiece geometric coordinate system.

public mat4d_t GetDeflectionTransformOnWorkpieceGeomCoordinate(IMachiningTool millingTool, WorkpieceMaterial workpieceMaterial, MachineMotionStep machineStep, MillingToolPhysicsPack physicsPack = null)

Parameters

millingTool IMachiningTool

The milling tool.

workpieceMaterial WorkpieceMaterial

The workpiece material.

machineStep MachineMotionStep

The machining step.

physicsPack MillingToolPhysicsPack

The frozen per-session physics pack of millingTool; null computes the tool's scalar derivations on use.

Returns

mat4d_t

The deflection transformation matrix.

GetInputSpindlePower_W(SpindleCapability)

Gets the input spindle power in Watts.

public double GetInputSpindlePower_W(SpindleCapability spindleCapability)

Parameters

spindleCapability SpindleCapability

The spindle capability information; null (an unreadable side file, or none attached) yields NaN.

Returns

double

Input spindle power in Watts.

GetInputSpindlePower_W(SpindleCapability, double)

Internal Use Only. The input spindle power of a step from its absolute axial power: the formula GetInputSpindlePower_W(SpindleCapability) reads, for a reader that holds the power as a number (the plural strip charts' resident channels).

public static double GetInputSpindlePower_W(SpindleCapability spindleCapability, double absAxialPower_W)

Parameters

spindleCapability SpindleCapability

The spindle capability; null yields NaN.

absAxialPower_W double

The absolute axial power taken by the workpiece in watts.

Returns

double

Input spindle power in Watts.

GetMaxBottomEdgeDeflectionOnToolRunningCoordinate_mm(IMachiningTool, MillingToolPhysicsPack, vec3d_t, double)

Internal Use Only. The maximum bottom-edge deflection from the step's maximum force and the height it sits at: the formula GetMaxBottomEdgeDeflectionOnToolRunningCoordinate_mm(IMachiningTool, WorkpieceMaterial, MachineMotionStep, MillingToolPhysicsPack) reads, for a reader that holds the two as numbers (the plural strip charts' resident channels): the tip deflection of GetMaxTipDeflectionOnToolRunningCoordinate_mm(IMachiningTool, MillingToolPhysicsPack, vec3d_t, double) swung out to the bottom edge.

public static vec3d_t? GetMaxBottomEdgeDeflectionOnToolRunningCoordinate_mm(IMachiningTool millingTool, MillingToolPhysicsPack physicsPack, vec3d_t maxForceToToolOnTr_N, double cuttingForceHeightFromToolTip_mm)

Parameters

millingTool IMachiningTool

The milling tool; null or not a MillingTool yields null.

physicsPack MillingToolPhysicsPack

The frozen per-session physics pack of the tool; null computes the tool's scalar derivations on use.

maxForceToToolOnTr_N vec3d_t

The maximum force to the tool on the tool running coordinate in N.

cuttingForceHeightFromToolTip_mm double

The height of the force above the tool tip in mm.

Returns

vec3d_t?

The maximum bottom-edge deflection vector in millimeters, or null; a NaN force reads as a NaN vector, as the instance method does for a tip deflection not known.

GetMaxBottomEdgeDeflectionOnToolRunningCoordinate_mm(IMachiningTool, WorkpieceMaterial, MachineMotionStep, MillingToolPhysicsPack)

Gets the maximum deflection of the bottom edge in the tool running coordinate system, computed on every read for the tool passed in.

public vec3d_t? GetMaxBottomEdgeDeflectionOnToolRunningCoordinate_mm(IMachiningTool millingTool, WorkpieceMaterial workpieceMaterial, MachineMotionStep machineStep, MillingToolPhysicsPack physicsPack = null)

Parameters

millingTool IMachiningTool

The milling tool to get the deflection for.

workpieceMaterial WorkpieceMaterial

The workpiece material.

machineStep MachineMotionStep

The machining step.

physicsPack MillingToolPhysicsPack

The frozen per-session physics pack of millingTool; null computes the tool's scalar derivations on use.

Returns

vec3d_t?

The maximum deflection vector in millimeters, or null when millingTool is not a MillingTool or its cutter is not a MillingCutter (no effective cutting diameter to swing about). A tip deflection that is not known yet (see GetMaxTipDeflectionOnToolRunningCoordinate_mm(IMachiningTool, MillingToolPhysicsPack)) is not a null here: the identity transform's zero translation is normalised into a NaN direction, so the swing reads as a NaN vector.

Exceptions

ArgumentException

millingTool carries no cutter while the force pass has run: the tip deflection this swings out throws through MillingForceUtil.GetBendingPara_mmdN before the cutter kind is tested.

GetMaxDeflectionTransformOnToolRunningCoordinate(IMachiningTool, WorkpieceMaterial, MachineMotionStep, MillingToolPhysicsPack)

GetDeflectionTransformationByTipMovementOnToolRunningCoordinate

public mat4d_t GetMaxDeflectionTransformOnToolRunningCoordinate(IMachiningTool millingTool_, WorkpieceMaterial workpieceMaterial, MachineMotionStep machineStep, MillingToolPhysicsPack physicsPack = null)

Parameters

millingTool_ IMachiningTool
workpieceMaterial WorkpieceMaterial
machineStep MachineMotionStep
physicsPack MillingToolPhysicsPack

The frozen per-session physics pack of millingTool_; null computes the tool's scalar derivations on use.

Returns

mat4d_t

The tip deflection transform on the tool running coordinate; identity when the tool is not a MillingTool or no tip deflection is known.

GetMaxSpindlePowerRatio(SpindleCapability, SpindleSpeedCache)

Spindle Power Ratio from max spindle power capability, computed on read: the input spindle power (GetInputSpindlePower_W(SpindleCapability)) over the peak power the spindle sustains at the step's speed (MinInsistentRatioSpindlePowerBoundary_W).

public double GetMaxSpindlePowerRatio(SpindleCapability spindleCapability, SpindleSpeedCache spindleSpeedCache)

Parameters

spindleCapability SpindleCapability

The spindle capability the input power is read with (its energy efficiency); null yields NaN.

spindleSpeedCache SpindleSpeedCache

The spindle limits at the step's speed; null (no spindle capability, or one without the continuous condition) yields NaN.

Returns

double

0 on a no-cut brief; NaN until BuildNonSeqExtension(IMachiningTool, MachineMotionStep, MillingForceLuggage, MillingToolPhysicsPack) has run or without a cache; else the ratio.

GetMaxSpindleTorqueRatio(SpindleSpeedCache)

Spindle Torque Ratio from max spindle torque capability, computed on read: MaxAxialTorqueOnToolRunningCoordinateZero_Nm over the peak torque the spindle sustains at the step's speed (MinInsistentRatioSpindleTorqueBoundary_Nm).

public double GetMaxSpindleTorqueRatio(SpindleSpeedCache spindleSpeedCache)

Parameters

spindleSpeedCache SpindleSpeedCache

The spindle limits at the step's speed; null (no spindle capability, or one without the continuous condition) yields NaN.

Returns

double

0 on a no-cut brief; NaN until BuildNonSeqExtension(IMachiningTool, MachineMotionStep, MillingForceLuggage, MillingToolPhysicsPack) has run or without a cache; else the ratio.

GetMaxTipDeflectionOnToolRunningCoordinate_mm(IMachiningTool, MillingToolPhysicsPack)

Gets the maximum deflection of the tool tip in the tool running coordinate system, computed on every read for the tool passed in: the beam's compliance of millingTool for a load at CuttingForceHeightFromToolTip_mm times MaxForceOnToolRunningCoordinate_N.

public vec3d_t? GetMaxTipDeflectionOnToolRunningCoordinate_mm(IMachiningTool millingTool, MillingToolPhysicsPack physicsPack = null)

Parameters

millingTool IMachiningTool

The milling tool to get the deflection for.

physicsPack MillingToolPhysicsPack

The frozen per-session physics pack of millingTool; null computes the tool's scalar derivations on use.

Returns

vec3d_t?

The maximum deflection vector in millimeters, or null when millingTool is null or the force pass (the non-sequential extension) has not run on this brief — a brief handed back before (or without) that pass carries no force. A built brief on which no rotation sample carries a force (a no-cut step, a step whose forces are all zero) reads Zero, not null. Callers treat null as “no deflection known” (e.g. StepFeedSolver.BuildCompensation falls back to Zero, i.e. no compensation).

Exceptions

ArgumentException

millingTool carries no cutter while the force pass has run: the bending parameters come from the cutter, see MillingForceUtil.GetBendingPara_mmdN. A cutterless tool is not a “cannot compute” null.

GetMaxTipDeflectionOnToolRunningCoordinate_mm(IMachiningTool, MillingToolPhysicsPack, vec3d_t, double)

Internal Use Only. The maximum tip deflection from the step's maximum force and the height it sits at: the formula GetMaxTipDeflectionOnToolRunningCoordinate_mm(IMachiningTool, MillingToolPhysicsPack) reads, for a reader that holds the two as numbers (the plural strip charts' resident channels) — the beam's compliance of millingTool for a load at cuttingForceHeightFromToolTip_mm times maxForceToToolOnTr_N.

public static vec3d_t? GetMaxTipDeflectionOnToolRunningCoordinate_mm(IMachiningTool millingTool, MillingToolPhysicsPack physicsPack, vec3d_t maxForceToToolOnTr_N, double cuttingForceHeightFromToolTip_mm)

Parameters

millingTool IMachiningTool

The milling tool to get the deflection for; null yields null.

physicsPack MillingToolPhysicsPack

The frozen per-session physics pack of the tool; null computes the tool's scalar derivations on use.

maxForceToToolOnTr_N vec3d_t

The maximum force to the tool on the tool running coordinate in N (Zero for a brief without one).

cuttingForceHeightFromToolTip_mm double

The height of the force above the tool tip in mm (NaN reads a load at the tip).

Returns

vec3d_t?

The maximum deflection vector in millimeters, or null without a tool.

Exceptions

ArgumentException

millingTool carries no cutter.

GetWorkpiecePlasticDepth_mm(WorkpieceMaterial)

The depth in mm at which the cutting stress exerted on the workpiece equals its yield strength, computed on read from the per-flute radial force and contact edge length (the Flamant solution of a line load on a half plane) and the yield strength of workpieceMaterial: the compressive one when the radial force pushes into the workpiece, the tensile one when it pulls. Positive value for compression. Negative value for tension.

public double GetWorkpiecePlasticDepth_mm(WorkpieceMaterial workpieceMaterial)

Parameters

workpieceMaterial WorkpieceMaterial

The workpiece material the depth is read against; null (an unreadable side file, or none attached) yields NaN on a step that cuts.

Returns

double

0 when the contact edge is shorter than PressureEvaluationDepth_mm (no cut), NaN without a material, else the depth.

NoCut(int)

Builds a brief representing a physically-computed “no cut” state — i.e. EnablePhysics=true but the step has no engagement (IsTouched=false). This is semantically distinct from a null brief which means “physics was not computed at all”. All forces, moments, ratios, chip dimensions and deflections are zero; relief-face colliding speed is set to a negative sentinel so IsReliefFaceCollided returns false rather than null.

public static MillingForceBrief NoCut(int rotationDivisionNum)

Parameters

rotationDivisionNum int

The rotation division count this brief reports.

Returns

MillingForceBrief

PowerWithoutFriction_W()

Gets the power without friction in watts, calculated as axial power taken by workpiece minus friction power.

public double PowerWithoutFriction_W()

Returns

double

ReadBin(BinaryReader)

Reads the record WriteBin(BinaryWriter, MillingForceBrief?) wrote, the null record included.

public static MillingForceBrief? ReadBin(BinaryReader reader)

Parameters

reader BinaryReader

The reader positioned at the record's first byte.

Returns

MillingForceBrief

The brief read, or null for the null record.

Exceptions

InvalidDataException

The record's version is not this build's, or its tag is none of the three.

WriteBin(BinaryWriter)

Writes this brief as the record WriteBin(BinaryWriter, MillingForceBrief?) describes: a no-cut or a computed one. A null brief goes through that static overload.

public void WriteBin(BinaryWriter writer)

Parameters

writer BinaryWriter

The writer to write to.

WriteBin(BinaryWriter, MillingForceBrief?)

Writes brief as the tri-state record, a null brief included: [version][tag], then for a no-cut brief its RotationDivisionNum (int32), for a computed brief every stored value — the rotation division, the eleven kernel scalars, the relief-face speed, the extension's private state (its built flag, the peak axial torque, the axial power) and its nine aggregate scalars, the five aggregate vectors. Doubles are their raw bits, so NaN payloads and signed zeros survive; a nullable value is a presence byte followed by the value (zero when absent), so a record is fixed in size: 2 bytes for null, 6 for no-cut, 317 for a computed brief. The layout is the contract a native step record will write one day; read back by ReadBin(BinaryReader).

public static void WriteBin(BinaryWriter writer, MillingForceBrief? brief)

Parameters

writer BinaryWriter

The writer to write to.

brief MillingForceBrief

The brief to write; null writes the null record.