Collect the OCCT kernel issues n3xd works around in ISSUES.md
This commit is contained in:
@@ -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).
|
||||
Reference in New Issue
Block a user