10C Inc 2: feature tail

119 of the app's 138 symbols now resolve; only the I/O modules and the Inc 4
tail are left. New: GCE2d, GCPnts, BRepFilletAPI, BRepOffsetAPI,
ShapeAnalysis, ShapeFix, ShapeUpgrade, BRepCheck, BRepTools, BRepLib,
BRepExtrema, BRepClass3d, IntCurvesFace, plus TopTools_HSequenceOfShape.

The fillet and chamfer builders derive BRepBuilderAPI_MakeShape, so their
history comes from the base bound in Inc 1 — which is what lets the app read a
blend's provenance the same way it reads a boolean's. The Inc 2 gate compares
that history exactly, alongside the splitter's, which is what sketch-region
attribution depends on.

Two shapes of deviation, both commented where they are bound:

- Trailing enum arguments are left off four constructors (fillet's
  ChFi3d_FilletShape, MakeThickSolidByJoin's mode/join pair, BRepExtrema's
  Extrema flags, and Inc 1's GeomAPI_ProjectPointOnSurf). An unregistered enum
  cannot serve as a default argument — nanobind converts defaults at binding
  time, so it fails the whole module's import with std::bad_cast. The app never
  overrides any of them, so OCCT's own defaults apply and behaviour is
  unchanged.
- ShapeAnalysis_FreeBounds.ConnectEdgesToWires reassigns a Handle& out
  parameter, which the caster cannot honour because it hands C++ a copy of the
  handle. The lambda splices the result into the sequence the caller passed, so
  the pass-empty-then-read shape the app uses still works. This is the one
  place upstream's holder semantics and ours differ observably.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DfriM8XUkn7uYf5Dwe2xo6
This commit is contained in:
2026-08-10 20:09:29 +02:00
parent 340315b6e9
commit 0ce43a94aa
20 changed files with 1261 additions and 1 deletions

View File

@@ -499,5 +499,197 @@
]
}
}
},
"inc2": {
"fillet": {
"sha256": "4da9eb256a1e012b94655f6ecd02b34590c4e058beb336794fb68c3047c0070c",
"volume": 5974.247779607694,
"area": 2172.530964914873,
"bbox": [
-1.000000004440892e-07,
-1.000000004440892e-07,
-1e-07,
10.0000001,
20.0000001,
30.0000001
],
"n_faces": 7,
"n_edges": 15,
"n_solids": 1,
"history": [
{
"pre": 0,
"deleted": false,
"modified": [
3
],
"generated": []
},
{
"pre": 1,
"deleted": false,
"modified": [],
"generated": []
},
{
"pre": 2,
"deleted": false,
"modified": [
37
],
"generated": []
},
{
"pre": 3,
"deleted": false,
"modified": [],
"generated": []
},
{
"pre": 4,
"deleted": false,
"modified": [
32
],
"generated": []
},
{
"pre": 5,
"deleted": false,
"modified": [
13
],
"generated": []
}
]
},
"chamfer": {
"sha256": "cdf8d040a239e6202f94e38fc0fc9595e475180c7067a5f1e2391d9ed95d03af",
"volume": 5966.25,
"area": 2171.389610306789,
"bbox": [
-1.000000001110223e-07,
-1.000000001110223e-07,
-1e-07,
10.0000001,
20.0000001,
30.000000100000005
],
"n_faces": 7,
"n_edges": 15,
"n_solids": 1
},
"splitter": {
"volume": 6000.0,
"area": 3400.0,
"bbox": [
-1.5e-07,
-1.5e-07,
-1.5e-07,
10.00000015,
20.00000015,
30.00000015
],
"n_faces": 16,
"n_edges": 28,
"n_solids": 3,
"history": [
{
"pre": 0,
"deleted": false,
"modified": [
3,
37,
61
],
"generated": [
8,
41
]
},
{
"pre": 1,
"deleted": false,
"modified": [
33,
57,
81
],
"generated": [
24,
53
]
},
{
"pre": 2,
"deleted": false,
"modified": [],
"generated": []
},
{
"pre": 3,
"deleted": false,
"modified": [],
"generated": []
},
{
"pre": 4,
"deleted": false,
"modified": [
25,
54,
78
],
"generated": [
22,
51
]
},
{
"pre": 5,
"deleted": false,
"modified": [
13,
44,
68
],
"generated": [
15,
46
]
}
]
},
"unified": {
"volume": 12500.0,
"area": 3650.0,
"bbox": [
-1.5e-07,
-1.5e-07,
-1.5e-07,
25.00000015,
25.00000015,
30.00000015
],
"n_faces": 12,
"n_edges": 30,
"n_solids": 1
},
"distance": {
"is_done": true,
"value": 30.0,
"n_solutions": 4
},
"classifier": {
"inside": 0,
"outside": 1
},
"uv_bounds": [
0.0,
30.0,
-20.0,
0.0
],
"outer_wire_edges": 4
}
}