Commit Graph

2865 Commits

Author SHA1 Message Date
bherbruck dfea1b85b0 Merge pull request #1594 from brett19/feat/brep-attributes-blend
Part of #1462 (P3: blend)
2026-10-30 17:09:44 -04:00
bherbruck e758555880 Merge pull request #1595 from brett19/port/brep-transform-matrix
port: SmBrep::Transform with a 4x4 matrix and SmMatrix::SVDecompose (#1570)
2026-10-30 17:05:08 -04:00
bherbruck 762ec05ff4 Merge pull request #1793 from tangency-labs/difftest/issue-1528-volume-query-operand-state
difftest: #1528 — a volume query on the operand writes the same caches in Rust and C++ (operand state)
2026-10-30 16:51:05 -04:00
bherbruck 2c903890a3 Merge origin/main into feat/brep-attributes-blend (green base for difftest-baseline)
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-10-30 16:25:38 -04:00
bherbruck 0b779b232b Merge pull request #1824 from tangency-labs/difftest/p7-op13-real-faces
difftest: intersect.curve_class_p7 — compare face queries on real B-rep faces (op 13)
2026-10-30 16:24:40 -04:00
bherbruck 8011354a12 difftest: intersect.curve_class_p7 op 13 compares face queries on real B-rep faces
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-10-30 15:42:37 -04:00
bherbruck 5be852bbb5 Merge origin/main into wire/surface-assert-valid-offset-siv
Resolve topology.assert_valid.toml notes: main's #1631 copy_ops text and
this PR's #1702 WP3b text both kept in place.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-10-30 15:35:08 -04:00
bherbruck 811a9776a7 Merge origin/main into feat/brep-attributes-blend
Conflicts in the fillet_executive_p3 runner and shim resolved keeping both
forms (attributed and two_offset_chamfer); has_other_form also covers
two_offset_chamfer.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-10-30 13:58:43 -04:00
bherbruck 0034059648 difftest: #1528 — a volume query on the operand writes the same caches in Rust and C++ (operand state)
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-10-30 13:51:43 -04:00
Brett Lawson 98be43f78c Merge origin/main into port/brep-transform-matrix
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01MNXLXj2sJf943y2dDF36Vy
2026-10-30 18:48:20 +01:00
bherbruck ca8b000a37 Merge pull request #1683 from brett19/fix/curve-sweep-from-faces-box
docs(sweep): curve sweep from faces caps only with cap_ends; box-face difftest op
2026-10-30 13:39:16 -04:00
bherbruck 74a0df22fe Merge pull request #1698 from brett19/wire/adv-ssi-get-tree
wire: intersect.adv_surface_intersector — SmSurfaceCache::GetTree
2026-10-30 13:38:42 -04:00
bherbruck a2eb015c21 Merge pull request #1707 from brett19/wire/geom-tol-brep-overloads
wire: geom.tol — SmTol overloads over topology::Brep
2026-10-30 13:38:29 -04:00
bherbruck 2af25a2a59 Merge pull request #1745 from brett19/fix/offset-input-pure
difftest: offset p2 input.pure observes gap caches on the C++ side
2026-10-30 13:37:44 -04:00
bherbruck 901b426358 Merge pull request #1265 from brett19/difftest/eustate-full-curve
difftest: put_eu_state compares the full UV trim curve record
2026-10-30 13:37:14 -04:00
bherbruck 3afd60b091 Merge pull request #1296 from brett19/difftest/step-inversion-nonplanar
difftest: surface.surface_p2 — STEPInversion on torus and cone records with a non-planar generator flag
2026-10-30 13:34:24 -04:00
bherbruck f9e5b09e09 Merge pull request #1309 from altvnk/contrib/wave2-gap-raw-uv
fix: heal.gap — evaluate the exact raw-knot UV trim curve
2026-10-30 13:34:15 -04:00
bherbruck e732dd6c8f Merge pull request #1771 from tangency-labs/difftest/issue-880-half-arc-rim
difftest: #880 — half a smooth rim chain is refused (1001), the whole chain chamfers (WR-582)
2026-10-30 13:16:59 -04:00
Brett Lawson 2ce57db7b8 Merge remote-tracking branch 'fork/wire/curve-assert-valid' into wire/surface-assert-valid-offset-siv 2026-10-30 17:20:55 +01:00
bherbruck 43ed10e548 Merge pull request #1650 from brett19/fix/caller-keyed-ops-owner-identity
fix(topology): one owner identity for binders and check_brep, so ops on caller-keyed copies check valid (#1631)
2026-10-30 15:57:50 +00:00
bherbruck 06f481e112 Merge pull request #1761 from tangency-labs/difftest/heal-data-owner-block
difftest: heal_data runners compare geometry owners
2026-10-30 11:57:18 -04:00
bherbruck 31cc8f8a93 Merge pull request #1768 from tangency-labs/fix/wr569-stitch-nests-cavities
fix: heal.stitch_p2 — stitched solid nests its cavities (WR-569, opt-in)
2026-10-30 11:56:10 -04:00
bherbruck ee0e306ef9 Merge pull request #1733 from tangency-labs/difftest/brep-p2-build-owners
difftest: topology.brep_p2 — owners from the build (stacked)
2026-10-30 11:49:59 -04:00
bherbruck 42245a616a difftest: #880 reproduced — half a smooth rim chain is refused, the whole chain chamfers (WR-582)
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-10-30 11:47:12 -04:00
bherbruck e8e5d2a3cf Merge pull request #1754 from tangency-labs/difftest/fillet-full-width-919-920
difftest: full-width fillet cases (#919, #920)
2026-10-30 11:24:40 -04:00
bherbruck a597b85cf3 fix: heal — a stitched solid nests its cavities (WR-569, opt-in)
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-10-30 11:18:10 -04:00
bherbruck 45e38eb5d0 difftest: heal_data runners compare geometry owners (kernel-identity aware)
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-10-30 11:11:01 -04:00
Brett Lawson c09bd8fae2 Merge remote-tracking branch 'origin/main' into fix/caller-keyed-ops-owner-identity 2026-10-30 16:08:42 +01:00
Brett Lawson c6b45a7cb4 Merge remote-tracking branch 'origin/main' into wire/curve-assert-valid 2026-10-30 16:01:23 +01:00
Brett Lawson f6ec97b6bd Merge origin/main into difftest/eustate-full-curve
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01MNXLXj2sJf943y2dDF36Vy
2026-10-30 15:57:35 +01:00
Brett Lawson 3de5cd04b5 Merge origin/main into wire/adv-ssi-get-tree 2026-10-30 15:34:56 +01:00
Brett Lawson a9e68d6dc3 Merge origin/main into port/brep-transform-matrix
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01MNXLXj2sJf943y2dDF36Vy
2026-10-30 15:31:03 +01:00
bherbruck 67b72b4ab8 Merge pull request #1000 from tangency-labs/unit/topology.brep_constructor
port: topology.brep_constructor
2026-10-30 10:24:33 -04:00
bherbruck 97f4cfc35d difftest: fillet_executive_p3 full-width cases for #919/#920
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-10-30 10:20:50 -04:00
bherbruck 4d3436371b Merge origin/main into difftest/brep-p2-rust-reader (picks up #1731)
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-10-30 09:52:03 -04:00
bherbruck 4fd552e1ec Merge pull request #1731 from tangency-labs/difftest/brep-p3-real-geometry
difftest: topology.brep_p3 — Rust reader, shim stops normalising analytic geometry
2026-10-30 09:51:38 -04:00
Brett Lawson 41c9a58ba4 Merge remote-tracking branch 'origin/main' into wire/surface-assert-valid-offset-siv 2026-10-30 14:48:32 +01:00
Brett Lawson e06fb0adfc wire: port SmOffsetSurface and SmSrfInVolume AssertValid
Replace the two UNPORTED arms of Surface::assert_valid with faithful ports of
SmOffsetSurface::AssertValid (context, base owner, self-intersection via
GlobalSurfaceIntersect with its status ignored) and SmSrfInVolume::AssertValid
(nested base-surface and volume checks, owner and context tests). Co-port the
volume checks it nests into (SmVolume, SmTransform, SmBSplineVolume, bend,
unbend and twist) as Volume::assert_valid, with an explicit next-map depth bound.

Difftest: an AssertValid step in the offset-surface script runner (100 avNNNN
cases on a separate seed stream) and an AssertValid op in the srf-in-volume
runner (avNNNN cases), comparing every report against C++. Regression test
crates/solidcore/tests/surface_assert_valid_offset_srf_in_volume.rs.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01MNXLXj2sJf943y2dDF36Vy
2026-10-30 14:48:32 +01:00
Brett Lawson 580116ab65 difftest: offset p2 input.pure compares gap caches on the native side too
The Rust purity state is the whole source B-rep, gap caches included, but
the native snapshot never observed the vertex-use and edge-use gap caches.
On the Fillet box_diff_cyl / cyl_on_box_w_fillet sources both kernels reset
the same 8 vertex/face gap caches on the source (CalcVertexFaceGap resets
every same-face use before caching its own), so the C++ side reported pure
and the Rust side impure.

The shim now emits per vertex use the vertex/edge and vertex/face gap init
flags with their edge t / face UV, and per edgeuse the max edge/face gap
init flag, read only through already-initialised caches. input.pure
compares them before/after. Adds the 66 Fillet DoSolidOffset cases
(fillet_files.json) and a unit test that a reset cache alone breaks purity.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01MNXLXj2sJf943y2dDF36Vy
2026-10-30 14:45:08 +01:00
bherbruck 8a35414314 difftest: topology.brep_p3 — Rust reader, shim stops normalising analytic geometry
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-10-30 09:16:56 -04:00
bherbruck 40d716c520 difftest: topology.brep_p2 — Rust reader, shim stops normalising analytic geometry
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-10-30 09:09:05 -04:00
bherbruck ba09d166a2 difftest: query.face_p2 — Rust-built inputs, C++ resolves on its live B-rep
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-10-30 09:00:54 -04:00
Brett Lawson 62d51a2398 Merge remote-tracking branch 'origin/main' into wire/curve-assert-valid 2026-10-30 13:54:25 +01:00
Brett Lawson 15d21367eb difftest: native AssertValid report comparison for the five compound/Hermite curve kinds
Each owning curve unit (hermite_curve, offset_curve, projected_curve,
crv_on_surf, crv_in_volume) gets an assert_valid op in its shim, ffi and
runner, and 300 cases on their own seed stream (the existing streams are
unchanged). Both sides write the full report list through a shared encoder
(sc_assert_reports.h / util::assert_reports) with object identities by first
appearance. The ffi wrappers reject a failed Hermite test 1 with a list
(upstream reads past the one-entry default label table).

The native comparison showed that upstream links contained parts to the
compound curve (SetOwner(this)) only on some construction paths: the
UV-line constructor, SetUVCurve and ReadFromDB of SmCrvOnSurf, ReadFromDB of
SmCrvInVolume and the SmOffsetCurve copy constructor link nothing. The
offset, curve-on-surface and curve-in-volume structs now record those links
and the owner tests read them.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01MNXLXj2sJf943y2dDF36Vy
2026-10-30 13:54:24 +01:00
Brett Lawson a42ce1e9e6 wire: geom.tol SmTol overloads over topology::Brep
Port the SmBrep overloads of SmTol (Get/SetModelSizeEstimate,
Get/SetLargeSmallSizeRatio, GetZoneTol3d/GetApproxTol3d/GetXSectTol3d,
CalcFace/Edge/VertexZoneTol3d and GetScaledZero) as geom::tol::brep_* and
scaled_zero_of_brep, and use them in place of the local copies in
heal_data p2, vertex corner, brep_cache and the fillet finish. Add
geom.tol brep difftest cases (shim sc_geom_tol_brep) and unit tests.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01MNXLXj2sJf943y2dDF36Vy
2026-10-30 13:52:04 +01:00
Brett Lawson b75a2b923f Merge origin/main into wire/adv-ssi-get-tree 2026-10-30 13:31:23 +01:00
Brett Lawson fcd5421b29 wire: AdvSurfaceIntersector::set_surface_caches builds missing trees (SmSurfaceCache::GetTree)
set_surface_caches now takes the kernel and the caches mutably and asks each
for its tree with SurfaceCache::get_tree, as SmSurfaceIntersector::Intersect
does (pSC->GetTree(), NER), instead of returning Unported for a cache without
tree. The m_apTrees assignment for callers that ran GetTree themselves
(DoIntersection) is bind_caches.

difftest: a build-trees mode (trees flag 2) in the intersect.adv_surface_intersector
runner, shim and ffi builds both trees with GetTree on fresh caches, compares
them node by node and runs solves over them (18 inline edge_built_tree_* cases).
The shim now sets the intersector's m_cpContext as DoIntersection does before
FindInteriorCurves; left NULL, FlushCurve made context-less curves whose
DropPoint failed, so IsPointOnCurve reported every later start point on a curve.

Regression test: crates/solidcore/tests/adv_surface_intersector_get_tree.rs.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01MNXLXj2sJf943y2dDF36Vy
2026-10-30 13:31:23 +01:00
bherbruck 75f2896c41 Merge origin/main into unit/topology.brep_constructor
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-10-30 08:24:08 -04:00
bherbruck 92dbdf4ae6 Merge origin/main into difftest/owner-export-compare
Resolve topology_face_p1 FFI docs: keep the owner outputs and #1677's DeleteInnerLoop op.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-10-30 08:22:45 -04:00
Brett Lawson 7ee3212138 Merge origin/main (#1690 merged) into port/brep-transform-matrix
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01MNXLXj2sJf943y2dDF36Vy
2026-10-30 13:07:18 +01:00