feat(graph): graph-select verb + convexity in graph-ml (closes #54, #55)#56
Merged
Conversation
OKF (Open Knowledge Format, from the Google Knowledge Catalog) bundle under docs/knowledge/ for durable cross-cutting knowledge: overview, OKF reference, open-source-boundary policy, and the relationship to the downstream commercial OCCTStudio app (which consumes the reconstruct feature-graph IR). CLAUDE.md remains the detailed per-verb reference; adds a pointer to the bundle. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…in graph-ml Closes #54, #55. #54 — new `graph-select` verb for local B-rep graph queries without dumping the whole graph: face-neighbors (+ convexity/shared-edge count via the kernel AAG), edge-faces (faces/vertices/boundary/manifold flags), vertex-edges, face-adjacency (full gAAG), and edges-class (boundary|non-manifold|seam|degenerate). The selection/pointer primitive for DSL selectors + GNN face-adjacency selection. #55 — graph-ml now emits a faceAdjacency block [{face1,face2,convexity,sharedEdgeCount}] from the AAG (the gAAG edge attribute; convexity is the top edge feature in B-rep GNNs). Face indices follow shape.faces() order (the face[N] scheme query-topology emits). Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
cc2f703 to
f7e4894
Compare
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Implements the two self-contained BRepGraph coverage gaps from the audit — the selection / "pointer" primitives the generative-CAD literature (UV-Net, Pointer-CAD, AAGNet) relies on.
#54 —
graph-selectverbAnswers a local topology question without exporting + re-parsing the whole graph (
graph-ml):--query face-neighbors --face N--query edge-faces --edge M--query vertex-edges --vertex K--query face-adjacency--query edges-class --class boundary|non-manifold|seam|degenerateBacked by the kernel
AAG(face queries / convexity) andTopologyGraph(edge/vertex adjacency).#55 — convexity-attributed face-adjacency in
graph-mlgraph-mlnow emits afaceAdjacencyblock —[{face1, face2, convexity, sharedEdgeCount}]from the AAG. Convexity is the top edge feature in B-rep GNNs (the gAAG attribute used by AAGNet/BRepGAT) and is exactly whatconcave/convexselectors resolve; it was previously absent from the export.Index spaces
Face queries use AAG indices (=
shape.faces()order = theface[N]schemequery-topologyemits). Edge/vertex queries useTopologyGraphindices (edge[M]/vertex[K]). Convexity is a dihedral-between-two-faces property, so it's reported on face adjacencies, not lone edges — documented in the verb header.Verification
swift buildclean. Smoke-tested onrecipes/01-mounting-bracket(a filleted L-bracket): 20 faces / 38 adjacencies; the filleted inner corner classifies concave and outer edges convex as expected; a watertight solid reports 0 boundary edges.The MCP-side mirror of these (
graph_select/ convexity passthrough on scene bodies) is OCCTMCP#38, which depends on this landing + a release.🤖 Generated with Claude Code