Context
BREPGraphJSONExporter and graph-ml export a thorough per-edge attribute set — tolerance, degenerate/closed flags, sameParameter/sameRange, maxContinuity, parameter range, start/end vertex, boundary, manifold, adjacency. But they omit edge convexity/concavity (and dihedral angle).
Why this matters
Convexity is the single most important edge feature in B-rep feature-recognition GNNs — AAGNet's geometric Attributed Adjacency Graph (gAAG) and BRepGAT both key on per-edge convex/concave/smooth labels, and it's the most common machining-feature discriminator. It's also exactly what concave/convex selectors resolve. Right now a consumer feeding the exported graph to a GNN (the whole point of graph-ml) is missing the highest-signal edge attribute.
Proposal
Add to each edge in the graph export:
convexity: convex | concave | smooth/tangent | unknown (enum string),
- optionally
dihedralAngle (radians) at a representative point.
The kernel already exposes the classification on Shape (concaveEdges(), convexEdges(), EdgeConcavity/EdgeConvexity); compute it in the exporter (or request a TopologyGraph-level accessor if cleaner). Add the field to both the graph-ml ML payload (per-edge) and the full BREPGraphJSONExporter edge block; bump the export schemaVersion.
Audit ref
Part of the BRepGraph coverage audit (2026-06-18). Companion: graph adjacency/selection query verb (separate issue). MCP passthrough in OCCTMCP#38.
Context
BREPGraphJSONExporterandgraph-mlexport a thorough per-edge attribute set — tolerance, degenerate/closed flags,sameParameter/sameRange,maxContinuity, parameter range, start/end vertex, boundary, manifold, adjacency. But they omit edge convexity/concavity (and dihedral angle).Why this matters
Convexity is the single most important edge feature in B-rep feature-recognition GNNs — AAGNet's geometric Attributed Adjacency Graph (gAAG) and BRepGAT both key on per-edge convex/concave/smooth labels, and it's the most common machining-feature discriminator. It's also exactly what
concave/convexselectors resolve. Right now a consumer feeding the exported graph to a GNN (the whole point ofgraph-ml) is missing the highest-signal edge attribute.Proposal
Add to each edge in the graph export:
convexity:convex | concave | smooth/tangent | unknown(enum string),dihedralAngle(radians) at a representative point.The kernel already exposes the classification on
Shape(concaveEdges(),convexEdges(),EdgeConcavity/EdgeConvexity); compute it in the exporter (or request aTopologyGraph-level accessor if cleaner). Add the field to both thegraph-mlML payload (per-edge) and the fullBREPGraphJSONExporteredge block; bump the exportschemaVersion.Audit ref
Part of the BRepGraph coverage audit (2026-06-18). Companion: graph adjacency/selection query verb (separate issue). MCP passthrough in OCCTMCP#38.