Files
ocp/ISSUES.md
T

3.1 KiB
Raw Blame History

OCCT issues

Kernel behaviour n3xd works around. Each entry says how to reproduce it, what the app does about it and which OCCT version last showed it. Recheck them on every kernel bump. Missing bindings are not listed here; they live in NOTEPAD.md.

BRepFilletAPI_MakeFillet segfaults on a fillet as wide as its wall

  • Symptom: SIGSEGV inside the fillet build. It is a native fault, so no exception reaches Python and the whole process dies.
  • Repro: a 23-face part. It has a 110 × 60 × 20 mm base, a 2 mm diagonal slab and 2 mm side walls, and already carries one r = 2 fillet. A second r = 2 fillet on any edge bounding a 2 mm side wall crashes, for example the wall's outer diagonal edge. r = 1 on the same edges builds. Production project d0260694, 2026-10-14.
  • Workaround: every fillet and chamfer builds in a forked child (app/backend/n3xd/cad/cad_pool.py), where the fault becomes a "try a smaller radius" error. An earlier gate built parts under 200 faces in the server process, on the assumption that 8.0.1's ChFi3d_Builder::StartSol() hardening had removed the fault class. It hadn't.
  • Last seen: OCCT 8.0.1 (n3xd-ocp 8.0.1.2).

Fillets at an exact tangent radius fail or come out invalid

  • Symptom: at a radius that makes the blend exactly tangent to a neighbouring face, BRepFilletAPI_MakeFillet either reports IsDone() == false or reports success and returns a solid that BRepCheck_Analyzer rejects.
  • Workaround: retry with an imperceptibly smaller radius (app/backend/n3xd/cad/operations/fillet.py).
  • Last seen: OCCT 8.0.1.

Tangential union along a closed curve returns an empty shape

  • Symptom: fusing two solids that touch along a full circle (a revolved ring exactly filling a matching hole) gives IsDone() and an empty compound, which BRepCheck_Analyzer calls valid. Exact, fuzzy, BOPAlgo_GlueShift, OBB, CellsBuilder and MakerVolume all give an empty or invalid result.
  • Workaround: boolean_combine rejects the empty result, so the feature reports boolean_failed. Moving the tool by 1e-4 mm before the fuse gives the right union in both operand orders, but silently moving user geometry was rejected as a default. The app-side opt-in idea is in app/NOTEPAD.md.
  • Test: app/backend/tests/test_boolean.py::test_tangential_fuse_is_rejected_not_silently_emptied
  • Last seen: OCCT 8.0.1 (rechecked 2026-08-11).

BRepGProp mass properties drift on spline-bounded shapes

  • Symptom: with default settings, SurfaceProperties_s and VolumeProperties_s misreport spline-bounded faces and solids, while the geometry itself is exact. A closed Catmull-Rom region in spline.n3xd reads 110.64 against a true 110.01 (+0.57 %). Its extrusion reads about 1109 against 1100.1.
  • Partial workaround: the eps overload (SurfaceProperties_s(shape, props, 1e-6)) fixes the area (110.01) but makes the volume worse (about 1166), so it is not a drop-in. The app-side follow-up is in app/NOTEPAD.md.
  • Last seen: OCCT 7.9 / 8.0 (not rechecked since).