solidcore: move the pin to 3546c9bc (main, with solidcore#1437 and #1445)

From f020a066: trim_boundary_seam_wrap keeps the gap lines along a singular
side (#1446, fixes #1437), so a sphere's area, volume and inertia are no
longer 0; they now miss 1e-9 by about 2e-9 (solidcore#1435). And
BrepIdentity::of_brep honours a copy's geometry_owner_keys (#1445, after
#1440): the identity test uses its new form. No new UpstreamFixes flags.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01SdcgExNEwfR9CX2RAzp2Pt
This commit is contained in:
Brett Lawson
2026-10-29 03:44:11 +01:00
parent c9b2c18eb7
commit 04c2af035b
5 changed files with 14 additions and 10 deletions
Generated
+1 -1
View File
@@ -4054,7 +4054,7 @@ dependencies = [
[[package]]
name = "solidcore"
version = "0.0.1"
source = "git+https://github.com/tangency-labs/solidcore?rev=f020a06681ef1ef34294b5b0e424ac15dc788ad5#f020a06681ef1ef34294b5b0e424ac15dc788ad5"
source = "git+https://github.com/tangency-labs/solidcore?rev=3546c9bc3f1309018c8d47d1ab55843a518d3abf#3546c9bc3f1309018c8d47d1ab55843a518d3abf"
dependencies = [
"thiserror 2.0.21",
]
+1 -1
View File
@@ -35,7 +35,7 @@ solidcraft-3dx-client = { path = "crates/threedx-client" }
# they reach parity (crates/smlib/src/route.rs). Pinned; move the rev on its own commit. For a
# local checkout, add `[patch."https://github.com/tangency-labs/solidcore"] solidcore = { path =
# "../solidcore/crates/solidcore" }` to a `.cargo/config.toml` outside the repository.
solidcore = { git = "https://github.com/tangency-labs/solidcore", rev = "f020a06681ef1ef34294b5b0e424ac15dc788ad5" }
solidcore = { git = "https://github.com/tangency-labs/solidcore", rev = "3546c9bc3f1309018c8d47d1ab55843a518d3abf" }
# foundation
thiserror = "2"
+2 -2
View File
@@ -160,8 +160,8 @@ macro_rules! primitive {
primitive!(box_, "box");
primitive!(cylinder, "cylinder");
primitive!(sphere, "sphere",
volume: ignore = "solidcore#1437: trim_boundary_seam_wrap zeroes a sphere's volume",
round_trip: ignore = "solidcore#1437: the record comes back the same, but trim_boundary_seam_wrap zeroes its volume");
volume: ignore = "solidcore#1435: a sphere's volume at 1e-8 is 2e-9 off",
round_trip: ignore = "solidcore#1435: the record comes back the same; its volume at 1e-8 is 2e-9 off");
primitive!(cone, "cone",
round_trip: ignore = "solidcore#1435: the record comes back the same, but its volume at 1e-8 is 1.4e-9 off (the C++ kernel 1.1e-11 on the same arrays); the side face's precise properties do not split at the surface's knots, fork 08d9a14 (solidcore PR #1456)");
primitive!(frustum, "frustum");
+1 -1
View File
@@ -266,7 +266,7 @@ macro_rules! primitive {
primitive!(box_, "box");
primitive!(cylinder, "cylinder", area: ignore = "solidcore#1435: face area at 1e-8 is 3.7e-8 off");
primitive!(sphere, "sphere",
mass: ignore = "solidcore#1437: trim_boundary_seam_wrap zeroes a sphere's properties (and #1435 after)",
mass: ignore = "solidcore#1435: a sphere's properties at 1e-8 miss 1e-9",
area: ignore = "solidcore#1435: face area at 1e-8 is 1.2e-8 off");
primitive!(cone, "cone",
mass: ignore = "solidcore#1435: cone inertia at 1e-8 is 1.7e-9 off",
+9 -5
View File
@@ -489,11 +489,15 @@ fn faces_are_picked_on_the_box_and_on_its_working_copy() {
}
assert!(faces[0].as_ref().is_some_and(|f| f.len() == 1), "the body: {faces:?}");
assert_eq!(faces[0], faces[1], "the body and its copy pick the same face");
// The maintainers' usage: the body itself, keyed by its naming scheme.
let body = BrepIdentity::of_brep(&b);
box_face_distances_are_exact("of_brep on the body", &face_distances(k, &mut b, &body, p)?);
// The copy under the arena's identities: no face's geometry owner resolves.
let arena = BrepIdentity::of_brep(&w);
// `BrepIdentity::of_brep` honours a copy's owner keys since solidcore#1445: the body
// and its copy both resolve.
for (what, x) in [("of_brep on the body", &mut b), ("of_brep on its copy", &mut w)] {
let proven = BrepIdentity::of_brep(x);
box_face_distances_are_exact(what, &face_distances(k, x, &proven.identity(), p)?);
}
// The copy under its naming scheme alone (the arena's identities): no face's geometry
// owner resolves, and the query says so rather than answering from the vertices.
let arena = BrepIdentity::of_naming_with_id(solidcore::topology::BrepId::from_index(0), &w);
match face_distances(k, &mut w, &arena, p) {
Err(SolidError::InvalidInput { .. }) => {}
other => panic!("the copy under the arena's identities: {other:?}"),