SimpleCAD API Core Classes Documentation
This directory documents the core public object model for SimpleCADAPI.
SimpleCADAPI is OCP-native at runtime: public geometry objects are thin Python wrappers around OpenCascade/OCP shapes exposed through the .wrapped attribute. The package provides functional modeling operations, expression parameters, QL selectors, and replayable model JSON.
Core Classes Overview
Coordinate and tagging utilities
CoordinateSystem
A right-handed 3D coordinate system for local modeling contexts and point/vector transformation.
SimpleWorkplane
A context manager for temporarily modeling in a local coordinate system.
TaggedMixin
Shared tag and metadata behavior for geometry wrappers.
Geometry wrappers
Vertex
A 0D topology wrapper with coordinate queries.
Edge
A 1D topology wrapper for lines, arcs, circles, splines, and other curve edges.
Wire
A connected path made from edges. Wires may be open or closed.
Face
A bounded surface with an outer wire and optional inner wires.
Solid
A closed 3D body with volume, faces, edges, tags, and metadata.
Compound
A collection wrapper for multiple geometry objects.
Product semantics roadmap
Part and Assembly Development Plan
Planned single-body Part, material assignment, component placement, and Assembly semantics layered above the current topology/geometry and operation graph model.
Relationship Diagram
TaggedMixin
├── Vertex (0D)
├── Edge (1D)
├── Wire (1D) ← composed of edges
├── Face (2D) ← bounded by wires
├── Solid (3D) ← bounded by faces
└── Compound ← collection of shapes
CoordinateSystem ← independent utility
SimpleWorkplane ← local modeling context
Design Principles
- Shape-first API: users work with
Vertex,Edge,Wire,Face, andSolid, not graph nodes. - Functional modeling style: public operations return new geometry values, e.g.
make_box_rsolid(...),cut_rsolid(...),fillet_rsolid(...). - OCP-native runtime: geometry construction, topology traversal, properties, booleans, transforms, and export use OCP/OpenCascade helpers.
- Replayable graph workflows:
@scad.modelowns oneGraphSessionand returns aModelResult;@scad.requires_sessioncomposes child builders, andscad.capture_result()selects canonical output nodes for replay and export. - Tags and metadata: tags are useful for lightweight semantics; structured numeric facts should be stored in metadata such as
metadata["geo"]. - Indexed topology access: use plural methods such as
get_edges()andget_faces()for enumeration, and pass an index to the same getter, such asget_edges(index)orget_faces(index), for intentional indexed picks that should become graph selection nodes.
Basic Usage
import simplecadapi as scad
with scad.SimpleWorkplane(origin=(0, 0, 0)):
box = scad.make_box_rsolid(width=5, height=3, depth=2)
scad.apply_tag(shape=box, tag="role.bracket")
box.set_metadata("material", "6061-T6")
box.auto_tag_faces("box")
top_faces = [
face for face in box.get_faces()
if "face.top" in scad.list_tags(shape=face)
]
print(len(top_faces))
Replayable Model JSON
import simplecadapi as scad
@scad.model(graph_id="drilled_block")
def build_model():
body = scad.make_box_rsolid(width=10, height=10, depth=4)
hole = scad.make_cylinder_rsolid(
radius=1.5, height=8, bottom_face_center=(0, 0, -2)
)
part = scad.cut_rsolid(body, hole)
scad.capture_result(value=part)
return part
result = build_model()
rebuilt = result.replay()
print(len(rebuilt))