This commit is contained in:
2026-09-11 03:46:11 +08:00
parent 45b9f9ed5d
commit b7f55aa631
114 changed files with 3646 additions and 576 deletions
@@ -120,8 +120,8 @@ count the thermal FEM builds, so trailing shank nodes no longer sit at 0 K after
<li><strong>Cutter geometry is validated up front.</strong>
<a class="xref" href="../../api/Hi.Milling.Cutters.MillingCutter.html#Hi_Milling_Cutters_MillingCutter_GetUpperBeamGeometryIssues_">GetUpperBeamGeometryIssues</a> collects upper-beam and shank
configuration problems as keyed messages — for example an extended-cylinder beam whose full length
sits below the flute height (<code>Cutter-UpperBeam--BelowFluteHeight</code>), which inverts the shank solid and
makes the shank thermal model unbuildable. They are reported once per tool at <code>BeginSession</code> and at
sits below the flute height (<code>Cutter-UpperBeam--ExtendedCylinderFullLengthTooShort</code>), which
inverts the shank solid and makes the shank thermal model unbuildable. They are reported once per tool at <code>BeginSession</code> and at
each tool change, instead of surfacing later as a null-reference cascade inside the thermal physics
with nothing naming the beam.</li>
<li><strong><code>RakeFaceCuttingPara3d</code> no longer throws on a six-field parameter string</strong> (the guard read the
@@ -134,9 +134,16 @@ the <code>LocalProfileMillingPara(Vec3d, Vec3d)</code> constructor maps (x,y,z)
physics was inactive at simulation time). The gather pass counts both against the eligible steps:
silent at zero, one summary warning at or below
<a class="xref" href="../../api/Hi.MillingForces.Training.MillingTraining.html#Hi_MillingForces_Training_MillingTraining_MissingEngagementAbortRatio">MissingEngagementAbortRatio</a> (default 0.25), and a
configuration error above it. A gather pass that produces no samples at all now reports immediately
rather than throwing inside the SVD solve, separating &ldquo;not one step touched the workpiece&rdquo; from
&ldquo;touched steps whose mapped force data yielded no usable shots&rdquo;.</li>
configuration error above it. <strong>The breakdown in that summary is the diagnosis</strong>: misses sitting on
the engagement level mean the play itself ran with physics inactive, while a scattered few on the
luggage level are the read-back path, where a segment that covers a step but lacks its row is
dropped and answers null once before the next read rebuilds it. Above the ratio the training
aborts instead of continuing on what is left, because a parameter file built from a fraction of
the play is indistinguishable from a sound one once it has been written — its coefficients are
read back later as a real effect. Set the ratio to <code>1</code> to never abort. A gather pass that produces
no samples at all now reports immediately rather than throwing inside the SVD solve, separating
&ldquo;not one step touched the workpiece&rdquo; from &ldquo;touched steps whose mapped force data yielded no usable
shots&rdquo;.</li>
<li><strong>New training knobs.</strong> <a class="xref" href="../../api/Hi.MillingForces.Training.MillingTraining.html#Hi_MillingForces_Training_MillingTraining_EnableDesignMatrixSolver">EnableDesignMatrixSolver</a>
(default false) solves the least squares on a thin QR of the design matrix instead of forming the
normal equations, which square the condition number;