Commit Graph

4 Commits

Author SHA1 Message Date
bherbruck 885dc45f0b Merge origin/main into unit/surface.surface_p1
Brings in intersect.topology_solver_p1 (PR #30).

- topology_solver sm_GetFaceSilhouettes: wire the UNPORTED(surface.surface_p1)
  stub. It now builds the cache with smsurf_GetSurfaceCache (the 3-argument
  port), checks HasCachedCurves(SM_AS_TRIMMED_SILHOUETTE, 10 * tol, 20 deg,
  view vector, FALSE), and calls CreateSilhouetteCurves over the face's UV
  domain (a non-B-spline surface, a NULL SM_CAST_PTR upstream, is an
  error). It then stops at UNPORTED(topology.face_p2):
  SmFace::CreateCurvesByTrimming.
- Renumber this unit's upstream issues UB-80/UB-81 to UB-83/UB-84. Main's
  surf_of_extrusion_p1 and topology_solver_p1 entries already use UB-80/81.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01BY8UpXKuMci15rAWGXsbsm
2026-10-14 12:33:47 -04:00
Marius van Voorden 727031303c surface.surface_p1: review fixes
- StepSurface::knots: ContainsValue's default tolerance is 0, not SM_EFF_ZERO.
- A plane's polar box comes from SmPlane::EvaluateNormal (plane_bounding_box),
  also for the surface caches (their plane stub is gone).
- UB-81: SmSurface::CalculateBoundingBox recurses without bound on a polar box of a
  curve-bounded or STEP surface; the base body and the cache dispatch refuse it
  (InvalidInput), the FFI never asks the C++ for it; the cache's other boxes of
  those kinds defer on CalculateContinuities.
- The remaining stubs on this unit become DISPATCH GAPs (iso curve and crv-on-surf
  readers, ApproximateSize, the grid, p7's sm_IsNodeValid and solver patch reads).
- FFI: IsOnBoundary / IsInDomain accept points up to a side outside the domain for
  planes and clamping B-splines; BBox prints the polar box of B-splines and planes.
- Generators: STEP knot intervals just inside the domain ends, outside points.
- Fixtures: the review's cases. is_planar checks the face owner first; comments on
  the hard-coded face state and the B-spline zone tolerance.

difftest: 806 cases, 764 pass, 0 fail, 42 deferred; --perturb 764/764.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-14 16:34:38 +02:00
Claude 6bdb98ac24 surface.surface_p1: FFI binding, difftest runner, back-edge wiring
- solidcore-ffi: surface_surface_p1 (22 ops, matching the shim's codes 0-21) with
  input validation; the shim reads SmPseudoBox::GetBasis and guards
  GetDomainWithContinuity without a surface cache (upstream NULL dereference, UB-75).
- difftest: surface_surface_p1 runner (800 generated cases over B-spline, plane and
  curve-bounded surfaces, optionally STEP-wrapped): 758 pass bit-identical, 42
  deferred, --perturb 758/758.
- Wire SmBSplineSurface's IsDegenerateCurve / IsDegeneratePoint / first-derivative
  back-edges and its bounding box zone tolerance (Surface handles a face owner);
  retag LocalPointSolve (surface_p5), GlobalPointSolve (surface_p4) and
  CreateOffsetSurface (surface.offset_surface).
- trim_srf_cache runner: face cases defer on SmBrep::CreateFaceFromSurface.
- Step arms in the cpp-only runners; clippy fixes; unit tests assert the wired
  behaviour.
- plan: surface.surface_p1 partial; findings and upstream-issues entries; reports of
  the touched units (all improved, none regressed).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01RsMto2bEoBSCSCJku4nT4u
2026-10-14 02:48:59 +00:00
Marius van Voorden 806a75dafc surface.surface_p1: WIP wiring of back-edges, C++ shim (22 ops), shared test helpers
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-14 03:50:07 +02:00