Files
MarkusRe 52c9f72249 Offset: the certified offset and the fold refusal are the default; shell_one_construction retires (#13827) (#14039)
* test: the parabolic sheet's S1 cases on the default kernel (#2350)

The thicken and fold tests of the parabolic sheet ran on a kernel with
shell_one_construction set. On Kernel::default() the t11 fold towards
the centre is not refused naming its apex radius 10: the default kernel
still runs SMLib's sampled N_SrfOffset fit and no fold refusal.

Co-Authored-By: Claude Code <noreply@anthropic.com>

* offset: S1 by default: certified nets and the fold refusal; shell_one_construction retired

AGENTS.md §4b retires the port's flags. With shell_one_construction off
(the default) the shell replaced each implicit offset by N_SrfOffset's
fit, checked at samples, and built B-spline faces whose offset folds.
Now replace_implicit_offsets always takes certified_offset (within the
shell's tolerance at every parameter) and offset_face_prefix refuses a
folding face with OffsetFailure::Folds, naming the largest wall, for
every offset but the local operation. The N_SrfOffset branch and the
flag-off test go with the flag; fixes.json and the tests that listed it
drop the name. docs/offset-and-shell.md and its figure no longer call
S1 opt-in; WR-718 gets an addendum.

Co-Authored-By: Claude Code <noreply@anthropic.com>

* offset tests: faces whose offset folds are refused naming their radius (D5)

With S1 the default, three upstream parts that built by deleting an
inside-out offset face are refused before anything is built, at the
face whose offset folds: Defeature/extrusion.smb face 2 inset 2
(largest 1.5331), Fillet/brepForFillet2.smb face 2 outset 5.6 and 11.2
(3.9580), Solids/extrusion_old.smb face 7 outset 2.5 (0.9689). The
tests assert those refusals. The collapse test keeps face 2 as a shell
face so face 5's collapse is still what it names. The lamina-edge
deletion stays covered by the extrudeHoles1 outset; the HANG-51 bound
loses its only known input.

Co-Authored-By: Claude Code <noreply@anthropic.com>

* test: the swept bar's WR-545 shell keeps two marched edges under S1 (18 lines)

The two inner straight walls of the issue_1476 swept bar are offsets of
extrusions. N_SrfOffset's fit of them was recognised as an extrusion when
the shell was merged (bAddAnalytics), so make_edges_on_analytics_exact
made their edges with the planar end cap lines (20 lines). The certified
net is bicubic and not recognised, so those two edges stay marched (18
lines, as SolidCraft's configuration already gets). Measured with the
SSI of each candidate edge printed: at the base 28 and 30 become lines,
at the head they have one net face and are skipped; the other edges
(49, 54 lines; 33, 37, 40, 48 no SSI curve) are the same. The volume
moves from 1299.4876806943942 to 1299.4876807223006 (2e-11 relative),
inside the pin.

Co-Authored-By: Claude Code <noreply@anthropic.com>

* goldens: offset p1 nets and p2 fold refusals under S1 (blessed)

offset.offset_executive_p1, 11 replace_* cases: the certified net keeps
the base's parametrisation, so natural_domain is the base's domain
([0,0,1,2], [0,-1,1,1], swapped [0,0,2,1], ...) where N_SrfOffset's fit
was reparametrised to [0,1]^2; the samples move with it. On a 41 x 41
grid each net is within its approx_tol of the exact offset S + d n at
the same (u, v) (worst 3.7e-6 of 1e-5, 3.6e-5 of 1e-4, 3.1e-4 of 1e-3,
4.3e-8 of 1e-7, 4.1e-10 of 1e-9; plane and line extrusion 2e-15).

offset.offset_executive_p2, 20 cases: a face whose offset folds is
refused (D5, Offset(Folds)) naming its least radius on that side; each
distance is past it. 16 built before by deleting the inside-out face;
4 were already refused and now stop at the folding face (fewer faces
in the executive's partial offset).
  defeature_extrusion_face0_inset2_5_extended          1001->1001  face 2  d  -2.5  largest 1.5331
  defeature_extrusion_face0_inset2_5_rounded           1001->1001  face 2  d  -2.5  largest 1.5331
  defeature_extrusion_face0_inset2_5_rounded_unstitched 1000->1001  face 2  d  -2.5  largest 1.5331
  defeature_extrusion_face0_inset2_extended            1001->1001  face 2  d  -2.0  largest 1.5331
  defeature_extrusion_face0_outset2_5_extended         1001->1001  face 2  d   2.5  largest 1.1264
  defeature_extrusion_face0_outset2_5_rounded          1000->1001  face 2  d   2.5  largest 1.1264
  fillet2_f0_d0_in_rnd                                 1000->1001  face 2  d  -5.6  largest 5.0738
  fillet2_f0_d0_out_rnd                                1000->1001  face 2  d   5.6  largest 3.9580
  fillet2_f0_d0_out_rnd_unmerged                       1000->1001  face 2  d   5.6  largest 3.9580
  fillet2_f0_d1_in_rnd                                 1000->1001  face 2  d -11.2  largest 5.0738
  fillet2_f0_d1_out_rnd                                1000->1001  face 2  d  11.2  largest 3.9580
  fillet2_f0_d1_out_rnd_unmerged                       1000->1001  face 2  d  11.2  largest 3.9580
  fillet2_f1_d0_in_rnd                                 1000->1001  face 2  d  -5.6  largest 5.0738
  fillet2_f1_d0_out_rnd                                1000->1001  face 2  d   5.6  largest 3.9580
  fillet2_f1_d1_in_rnd                                 1000->1001  face 2  d -11.2  largest 5.0738
  fillet2_f1_d1_out_rnd                                1000->1001  face 2  d  11.2  largest 3.9580
  fillet2_f2_d0_in_rnd                                 1000->1001  face 3  d  -5.6  largest 2.9088
  fillet2_f2_d0_out_rnd                                1000->1001  face 3  d   5.6  largest 5.0975
  fillet2_f2_d1_in_rnd                                 1000->1001  face 3  d -11.2  largest 2.9088
  fillet2_f2_d1_out_rnd                                1000->1001  face 3  d  11.2  largest 5.0975

Co-Authored-By: Claude Code <noreply@anthropic.com>

* test: the drilled plate's shell volumes under S1 (1795, 1950)

With the certified offset the default and #14347's intersect flags gone,
the plate shelled 2 inward builds the same 16/36/24 solid; its volume
moves within the integrator's accuracy, so three pins move:

  1795 open at z 27.5             9655.150697869625 -> 9655.150751213405
                                  closed form +2.54e-4 -> +3.07e-4
  1950 SolidCraft fixes, WR-545   10400.212354107192 -> 10400.212799756418
                                  closed form -1.97e-5 -> +4.26e-4
  1950 WR-545 alone               10400.212413698822 -> 10400.212854198868
                                  closed form +3.99e-5 -> +4.80e-4

The shell's non-analytic offsets are certified nets instead of
N_SrfOffset's fits. With WR-545 the volume is now within 1.5e-12 and
3.1e-10 relative of the volume without it (the pins without it hold);
the shell still runs the flag through the face-owned surfaces (#1950).

Co-Authored-By: Claude Code <noreply@anthropic.com>

* offset docs: where the certified net replaces an offset, and NotCertified

construction.rs said every implicit offset surface is replaced by its
certified B-spline; only the shell and the thicken replace them, the
plain offset keeps its implicit offset surfaces. The refusal of a face
not proved regular names NotCertified where no radius bounds the wall;
the refusal table in docs/offset-and-shell.md §4.2 now lists it beside
Folds. §8's invariant 2 names the two remaining exceptions (the revolved
generator's fit, the round offset as its net) instead of "the fitted
paths in §3 and §3.2".

Co-Authored-By: Claude Code <noreply@anthropic.com>

* findings: the folding offsets refused by default, with main's bodies

The p2 golden cases whose offset folds were built on main by deleting
the inside-out offset face (16 at status 1000, 4 failed later); D5 now
refuses them before any face is built. The record lists the counts main
built and carries before renders of brepForFillet2 (outset 5.6) and
Defeature/extrusion (outset 2.5): the input with the folding face
highlighted and main's result as a wireframe.

Co-Authored-By: Claude Code <noreply@anthropic.com>

* findings: the p1 replace cases' certified nets keep the base's domain

The 11 replace_* cases of offset.offset_executive_p1 moved in the
goldens commit because the certified net keeps the base's
parametrisation where N_SrfOffset's fit was reparametrised to the unit
square. The record lists old and new domains and each net's worst gap
to the exact offset S + d n on a 41 x 41 grid against its tolerance.

Co-Authored-By: Claude Code <noreply@anthropic.com>

---------

Co-authored-by: Claude Code <noreply@anthropic.com>
2026-11-10 09:23:37 +00:00
..