From 5a1b0fdeb1916d337de8f70a208c0947a82b4b0b Mon Sep 17 00:00:00 2001 From: stroblme Date: Wed, 14 Oct 2026 16:16:25 +0200 Subject: [PATCH] Collect the OCCT kernel issues n3xd works around in ISSUES.md --- ISSUES.md | 58 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 58 insertions(+) create mode 100644 ISSUES.md diff --git a/ISSUES.md b/ISSUES.md new file mode 100644 index 0000000..197e214 --- /dev/null +++ b/ISSUES.md @@ -0,0 +1,58 @@ +# 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).