mirror of
https://github.com/bherbruck/solidcraft.git
synced 2026-11-15 13:10:45 +00:00
52c9f72249
* 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>