13 KiB
13 KiB
name, description, license, compatibility, metadata
| name | description | license | compatibility | metadata | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| simplecadapi | Thin SimpleCAD SDK reference skill focused on the public API surface, core types, and current modeling workflows. | AGPL-3.0 | Documentation/reference bundle for current SimpleCADAPI surfaces. |
|
SimpleCAD SDK Skill
Philosophy
- This is a thin SDK reference skill: docs only.
- SDK source code is not bundled in this skill.
Working From Repo Root
- Tool calls run from the repo root.
- Use one explicit skill root:
./skills/simplecadapi/or./workspace/skills/simplecadapi/. - Main doc paths:
<skill_root>/SKILL.md<skill_root>/references/docs/api/README.md<skill_root>/references/docs/api/<api_name>.md<skill_root>/references/docs/stdlib/README.md<skill_root>/references/docs/stdlib/<stdlib_api_name>.md<skill_root>/references/docs/core/<type_name>.md<skill_root>/references/SDK_OVERVIEW.md<skill_root>/references/SDK_SURFACES.md<skill_root>/references/MODELING_WORKFLOWS.md<skill_root>/references/inverse_engineer/brep-reverse-engineering.md
MUST Requirements
- Read
SKILL.md,references/docs/api/README.md, andreferences/docs/stdlib/README.mdbefore choosing APIs. - Read the exact API Markdown page for every API you use.
- Read the needed
core/or exactapi/docs when an API needsEdge,Face,Wire,Solid,GraphSession,Sketch, or expression types. - Prefer the standard parts library for standard parts before hand-modeling with core geometry APIs.
- Follow the documented API signatures exactly.
- When calling any SimpleCAD public API or standard-library function, use keyword arguments for every documented parameter; do not use positional arguments.
- Use one
@modelentry point for replayable tasks,@requires_sessionfor child builders,capture_result(...)for explicit outputs, and the returnedModelResultfor model/session JSON and replay. - Use geometry APIs for integrated parts: profiles, features, booleans, transforms, tagging, QL inspection, serialization, and exports.
- Use tags through
apply_tag(shape=..., tag=...),apply_tag_rselection(scope=..., targets=..., tag=...),list_tags(shape=..., scope=...), andexplain_tag(shape=..., tag=..., scope=...); do not call shape member tag mutators. - Build and validate incrementally. Each step MUST include a small grounding
print, and grounding MUST use QL where possible. - For inspection/debugging, query geometry with QL and print only the queried facts you need; do not print whole solids or full model objects.
- Boolean operations return a single
Solid. - Use
union_rsolid(...)for boolean union. - For automated example/test harnesses, prefer the repo-local examples in
examples/and avoid scratch scripts insandbox/. - If union cannot produce exactly one merged solid, it fails explicitly; do not silently pick one piece.
- If a single merged solid is required and union fails, slightly adjust part placement so intended bodies overlap/embed, then recompute.
- If a task depends on model replay or interchange, prefer
ModelResult.model_jsonorexport_model_json()output over hand-written payloads. - For STEP/BREP reverse engineering, geometry reconstruction, topology matching, feature-history inference, or target/candidate CAD comparison, read
references/inverse_engineer/brep-reverse-engineering.mdcompletely before inspecting or modeling. - In BREP reverse engineering, geometry equality and topology equality are hard requirements. Use engineering prior only to choose among processes that satisfy both; do not accept visual, volume, area, or topology-count similarity as completion.
Task Router
- Standard mechanical part: read
references/docs/stdlib/README.md, then the exact stdlib API page. - General integrated modeling: read
references/MODELING_WORKFLOWS.mdand each exact API page used. - STEP/BREP reverse engineering or exact target comparison: read
references/inverse_engineer/brep-reverse-engineering.md; usesimplecadapi.inverse_engineer.brepfor inspection, strict comparison, views, and slice XOR diagnostics. - Sketch and constraints: read the relevant sketch API pages and
references/docs/core/declarative_constraints.mdwhen needed. - Model JSON, graph replay, or translation: read the graph/serialization API pages and the relevant translator documentation.
Standard Parts Library
- SimpleCAD includes a standard library for parameterized mechanical parts.
- When the user needs a standard part and does not require complex custom geometry changes, use a standard-library function first.
- Current package-level standard-library surfaces include
scad.std.gearfor gears and racks,scad.std.bearingfor ball bearing assemblies,scad.std.chainfor roller-chain sprockets, andscad.std.fastenerfor bolts and nuts. - Read
references/docs/stdlib/README.mdto discover standard-library functions. - Read
references/docs/stdlib/<function_name>.mdbefore calling a standard-library function. - Standard-library functions return normal SimpleCAD shapes or product assemblies that can be transformed, tagged, assembled, exported, and used with graph/model JSON workflows.
Boolean result discipline
union_rsolid(...),cut_rsolid(...), andintersect_rsolid(...)accept mixed inputs: standaloneSolid, lists ofSolid, and nested sequences.- They return a single
Solid. union_rsolid(...)already applies the package's default glue mode and a conservative internal tolerance.- If a union cannot produce exactly one merged solid, it fails explicitly instead of returning multiple pieces.
- If a single merged solid is required but union fails, slightly move the parts so they overlap instead of merely touching, then recompute the union.
Modeling Mental Model
- Start with intent: identify the part, its reference axes, critical profiles, and the features that produce the final solid.
- Build from lower-dimensional geometry to higher-dimensional geometry:
Vertex/Edge/Wire/Faceprofiles first, thenSolidfeatures such as extrude, revolve, loft, and sweep. - Keep modeling operations functional. Create new values from public functions such as
make_circle_rface(...),extrude_rsolid(...),cut_rsolid(...), andfillet_rsolid(...). - Use keyword arguments for all SimpleCAD function calls, for example
make_box_rsolid(width=10.0, height=20.0, depth=3.0)instead of positional arguments. - Use
@modelwhen the top-level model should be replayable, inspectable, exported as model JSON, or translated to another CAD system. It owns oneGraphSession; reusable graph-producing builders use@requires_session. - Treat model JSON as the interchange boundary. Prefer
ModelResult.model_jsonandModelResult.replay()for top-level models; useexport_model_json(session=...)for lower-level direct sessions andreplay_model_json(json_str=...)for standalone payloads. - Use QL for precise grounding. Query faces, edges, centers, normals, areas, lengths, curve types, and tags; print only the facts needed to validate the current step.
- Use
get_edges(index),get_faces(index),get_wires(index), orget_vertices(index)when an indexed topology pick is intentional; these picks are preserved as geo select nodes in replayable graph workflows. - Use tags for topology identity, semantic intent, and selection anchors, such as
housing.face.top,role.mounting_surface,anchor.datum.primary, orgroup.fasteners. - Keep numeric and geometric facts in metadata or graph payloads, not in tags.
- When a QL-selected face or edge is used by a later feature, expect the graph/model workflow to preserve that selection as a stable geo select node.
- For FreeCAD translation, prefer canonical model JSON generated from a
GraphSession; selected profiles and detail-feature selections should come from the graph rather than ad hoc object lookup.
Tagging Mental Model
- Public tag attachment is
apply_tag(shape=..., tag=...). - Multi-entity or explicitly propagated attachment is
apply_tag_rselection(scope=..., targets=..., tag=..., topology_propagation=..., lineage_policy=...); it returns an independent semantic shape view. - Public tag inspection is
list_tags(shape=..., scope=...), which returns a stable sorted list. Useexplain_tag(...)when producer and evidence matter. - Tags are normalized lowercase dot-separated semantic tokens, for example
role.mounting_surface,anchor.datum.primary,group.fasteners,face.top, orsolid.boolean.cut. - Do not encode numeric dimensions or descriptive geometry payloads in tags; store them in metadata such as
shape.get_metadata("geo")orshape.set_metadata(...). - Direct user assignments default to local topology propagation regardless of tag text. Constructor-generated topology-identity Face tags may use downward propagation so boundary Edges expose the Face tag; use
TopologyPropagation.DOWNWARDexplicitly for the same behavior inapply_tag_rselection(...). effectiveincludes local and inherited bindings but excludes lineage. Usescope=TagScope.LINEAGEonly when complete topology-history evidence is available.- Operation events, source roles, and feature output roles are typed
metadata["track"], not flat tags. Query them withql.operation_event(...),ql.origin_role(...), andql.output_role(...); unknown correspondence remains partial/unknown. extrude_rsolid,revolve_rsolid,fillet_rsolid,chamfer_rsolid,shell_rsolid,loft_rsolid,sweep_rsolid, andtwisted_sweep_rsolidaccept strict role-specific tag arguments. Requested roles must have complete kernel evidence and satisfy their documented cardinality or the whole call fails.- Role-specific tag arguments and
result_taglower to canonicalapply_tag_rselectionnodes in aGraphSession; they are semantic assignments, not geometry parameters. There is one public argument per target role; do not use a generic role-to-tag mapping. - Topology identity and user semantics use the same
TagBinding,list_tags(...),explain_tag(...), andql.tag(...)surfaces. One topology object may carry multiple tags for different purposes. - Geometry constructors and features use
tag_prefixto create topology-identity tags such ashousing.face.top; profile APIs useedge_tagoredge_tagsfor local Edge tag segments. These bindings carrytopology_nameevidence and project only across exact kernel-proven correspondence. - Role-specific
*_tagarguments andresult_tagcreate tags with operation-role or result evidence. Tag text alone does not determine evidence or projection policy. - Query proven source projection with
ql.source_binding(...)orql.source_topology(...). These predicates inspect canonical local binding evidence, never tag text or geometric similarity. - When a tagged profile entity must feed a later feature, pass the semantic view returned by
apply_tag_rselection(...)into that feature. Tagging a detached branch and then using the original profile does not create hidden graph coupling. - Prefer scoped QL tag predicates (
ql.tag("role.*", scope="effective"),ql.select(...).where(...)) for inspection and grounding.
SDK Focus
- This skill is intended to describe the public CAD Python SDK surface.
- Prefer the generated API, stdlib, and core docs over environment/bootstrap instructions.
- API docs include an
Import Surfacesection that distinguishes top-level exports, submodule APIs, and translator backend APIs undersimplecadapi.translator.<backend>. - Stdlib docs include an
Import Surfacesection that identifies the package-levelsimplecadapi.std.gearmodule export. - Use
references/SDK_OVERVIEW.mdfor the package-level map. - Use
references/SDK_SURFACES.mdfor the main public surfaces. - Use
references/MODELING_WORKFLOWS.mdfor graph/model-oriented patterns.
Example SDK usage
import simplecadapi as scad
from simplecadapi import ModelResult, capture_result, model, requires_session
Typical replayable usage in a Python script:
import simplecadapi as scad
@scad.model(graph_id="box")
def build_box():
shape = scad.make_box_rsolid(width=10.0, height=20.0, depth=30.0)
scad.capture_result(value=shape)
return shape
result = build_box()
rebuilt = result.replay()
print(len(rebuilt))
Use the graph/model JSON workflow when the task needs reproducibility, interchange, or replayable outputs.
References
references/SDK_OVERVIEW.mdreferences/SDK_SURFACES.mdreferences/MODELING_WORKFLOWS.mdreferences/SDK_PACKAGE_SUMMARY.mdreferences/docs/api/references/docs/stdlib/references/docs/core/references/inverse_engineer/brep-reverse-engineering.md