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
readerBinaryReaderThe 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
rotationDivisionNumintThe 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
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
AvgAbsMomentXAboutSensorOnSpindleRotationCoordinate_Nm
Gets the average absolute moment about the sensor on spindle rotation coordinate in Newton-meters.
public double AvgAbsMomentXAboutSensorOnSpindleRotationCoordinate_Nm { get; }
Property Value
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
AvgAbsTorqueOnSpindleRotationCoordinate_Nm
Gets the average of abs spindle axial torque on Spindle rotation coordinate.
public double AvgAbsTorqueOnSpindleRotationCoordinate_Nm { get; }
Property Value
AvgContactEdgeLengthPerFlute_mm
Gets the average contact edge length per flute in millimeters.
public double AvgContactEdgeLengthPerFlute_mm { get; }
Property Value
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
AvgMomentAboutSensor_Nm
Gets the average moment about the sensor in Newton-meters.
public double AvgMomentAboutSensor_Nm { get; }
Property Value
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
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
AvgMomentXyAboutObservationPoint
Gets the average moment about the tool tip in the program coordinate system, measured in Newton-meters.
public double AvgMomentXyAboutObservationPoint { get; }
Property Value
AvgRadialForcePerFluteToTool_N
Gets the average radial force per flute applied to the tool in Newtons.
public double AvgRadialForcePerFluteToTool_N { get; }
Property Value
ChipThickness_mm
Gets or sets the actual chip thickness in millimeters after cutting.
public double ChipThickness_mm { get; }
Property Value
ChipVolume_mm3
ChipVolume_mm3 per flute.
public double ChipVolume_mm3 { get; }
Property Value
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
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
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
FrictionPower_W
friction power takes by workpiece per cycle. the unit is watt.
public double FrictionPower_W { get; }
Property Value
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
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
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
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
MaxMomentAboutSensor_Nm
Gets the maximum moment about the sensor in Newton-meters.
public double MaxMomentAboutSensor_Nm { get; }
Property Value
MaxMomentAboutToolTip_Nm
Gets the maximum moment about the tool tip in Newton-meters.
public double MaxMomentAboutToolTip_Nm { get; }
Property Value
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
ReliefFaceCollidingSpeed_mmds
The negative value means there is no relief face collision.
public double? ReliefFaceCollidingSpeed_mmds { get; }
Property Value
RotationAngleInterval_deg
Delta angle in degree. The value is 360 / RotationDivisionNum.
public double RotationAngleInterval_deg { get; }
Property Value
RotationAngleInterval_rad
Delta angle in radian. The value is 2 * pi / RotationDivisionNum.
public double RotationAngleInterval_rad { get; }
Property Value
RotationDivisionNum
Gets the number of divisions used for rotation calculations.
public int RotationDivisionNum { get; }
Property Value
UncutChipThickness_mm
Gets or sets the uncut chip thickness in millimeters.
public double UncutChipThickness_mm { get; }
Property Value
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
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
millingToolIMachiningToolmachineStepMachineMotionStepluggageMillingForceLuggagephysicsPackMillingToolPhysicsPack
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
machineStepMachineMotionStep
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
machineStepMachineMotionStepThe step's motion, for the tool-running to program transform.
Returns
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
workpieceMaterialWorkpieceMaterialThe 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
spindleCapabilitySpindleCapabilityThe spindle capability the input power is read with (its energy efficiency);
nullyields NaN.spindleSpeedCacheSpindleSpeedCacheThe 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
spindleSpeedCacheSpindleSpeedCacheThe 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
millingToolIMachiningToolThe milling tool.
workpieceMaterialWorkpieceMaterialThe workpiece material.
machineStepMachineMotionStepThe machining step.
physicsPackMillingToolPhysicsPackThe frozen per-session physics pack of
millingTool;nullcomputes 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
spindleCapabilitySpindleCapabilityThe 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
spindleCapabilitySpindleCapabilityThe spindle capability;
nullyields NaN.absAxialPower_WdoubleThe 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
millingToolIMachiningToolThe milling tool; null or not a MillingTool yields null.
physicsPackMillingToolPhysicsPackThe frozen per-session physics pack of the tool;
nullcomputes the tool's scalar derivations on use.maxForceToToolOnTr_Nvec3d_tThe maximum force to the tool on the tool running coordinate in N.
cuttingForceHeightFromToolTip_mmdoubleThe 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
millingToolIMachiningToolThe milling tool to get the deflection for.
workpieceMaterialWorkpieceMaterialThe workpiece material.
machineStepMachineMotionStepThe machining step.
physicsPackMillingToolPhysicsPackThe frozen per-session physics pack of
millingTool;nullcomputes the tool's scalar derivations on use.
Returns
- vec3d_t?
The maximum deflection vector in millimeters, or null when
millingToolis 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
millingToolcarries no cutter while the force pass has run: the tip deflection this swings out throws throughMillingForceUtil.GetBendingPara_mmdNbefore 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_IMachiningToolworkpieceMaterialWorkpieceMaterialmachineStepMachineMotionStepphysicsPackMillingToolPhysicsPackThe frozen per-session physics pack of
millingTool_;nullcomputes 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
spindleCapabilitySpindleCapabilityThe spindle capability the input power is read with (its energy efficiency);
nullyields NaN.spindleSpeedCacheSpindleSpeedCacheThe 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
spindleSpeedCacheSpindleSpeedCacheThe 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
millingToolIMachiningToolThe milling tool to get the deflection for.
physicsPackMillingToolPhysicsPackThe frozen per-session physics pack of
millingTool;nullcomputes the tool's scalar derivations on use.
Returns
- vec3d_t?
The maximum deflection vector in millimeters, or null when
millingToolis 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.BuildCompensationfalls back to Zero, i.e. no compensation).
Exceptions
- ArgumentException
millingToolcarries no cutter while the force pass has run: the bending parameters come from the cutter, seeMillingForceUtil.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
millingToolIMachiningToolThe milling tool to get the deflection for; null yields null.
physicsPackMillingToolPhysicsPackThe frozen per-session physics pack of the tool;
nullcomputes the tool's scalar derivations on use.maxForceToToolOnTr_Nvec3d_tThe maximum force to the tool on the tool running coordinate in N (Zero for a brief without one).
cuttingForceHeightFromToolTip_mmdoubleThe 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
millingToolcarries 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
workpieceMaterialWorkpieceMaterialThe 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
rotationDivisionNumintThe rotation division count this brief reports.
Returns
PowerWithoutFriction_W()
Gets the power without friction in watts, calculated as axial power taken by workpiece minus friction power.
public double PowerWithoutFriction_W()
Returns
ReadBin(BinaryReader)
Reads the record WriteBin(BinaryWriter, MillingForceBrief?) wrote, the null record included.
public static MillingForceBrief? ReadBin(BinaryReader reader)
Parameters
readerBinaryReaderThe reader positioned at the record's first byte.
Returns
- MillingForceBrief
The brief read, or
nullfor 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
writerBinaryWriterThe 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
writerBinaryWriterThe writer to write to.
briefMillingForceBriefThe brief to write;
nullwrites the null record.