Command reference
Browse commands by their names and default keyboard shortcuts. Entries are organized by command group and panel; ungrouped commands follow by area.
For step-by-step instructions, start with the window tour, sketching guide or solid features guide. Practical command guides below explain prerequisites, options and examples in place. Entries without a practical guide link to an overview instead. Contribute a guide, tip, demo or model link.
Expand Automation details for the command ID and parameters used by scripts, the CLI and MCP. In that notation, ? marks an optional parameter and expr means a number or an expression with units.
This catalog is generated from solidcraft-cli commands by cargo xtask book (493 commands).
Practical guides:
SOLID › CREATE
Create Sketch
Command group: SOLID › CREATE
Read the solid features guide.
Automation details
Command ID: sketch.create
Parameters:
plane: XY|XZ|YZ | construction plane name or id | {origin?: [x,y,z] numbers in mm, default [0,0,0] (not an expression), x_dir, y_dir} (in world coordinates unless frame says otherwise; a named plane is the active component's own) | {face: [world x,y,z], body?: exact world body, index?: face index, path?: complete occurrence ids, fixed?: bool}; new face attachments require a unique certified source (a flat face of a sheet metal body attaches to its panel instead, in the flat pattern's coordinates), fixed:true explicitly freezes the selected plane; offset?: expr, flip?: bool | "x" | "y" (not on a face: sketch the plane from its other side, so the normal and the default extrude direction are reversed; a half turn about the plane's own x or y axis, true picks the one keeping the sketch's y axis upward; offset still moves along the unflipped normal), frame?: world (default) | component (which coordinates an explicit plane is in; the reply's `frame` says which, with a `note` when the active component is moved or turned), project_edges?: bool, name?
Extrude
Command group: SOLID › CREATE
Default keyboard shortcut: E
Turn a flat sketch region into a solid, or add or remove material from an existing body. For example, a rectangle extruded 20 mm becomes a rectangular block.
Before you start
- For a solid extrusion, finish a sketch with at least one closed region. Select the region you want, rather than an individual edge or point.
- You can also select a planar face of an existing body instead of a sketch.
- To add or remove material, an existing body must meet the extrusion. Choose New Body when you want an independent piece.
- Thin Extrude uses sketch curves instead of filled regions; open chains are allowed. This is useful for a wall or a ring.
Options
| Choice | What it does | When to use it |
|---|---|---|
| Profiles | Chooses the filled sketch regions to extrude. A loop inside another loop makes a hole. | Select just the regions you need when a sketch contains several. |
| Distance | Sets how far the shape extends. Values can include units, such as 20 mm, or a named design parameter. | Make a part to a known size. |
| Reverse Direction | Sends the extrusion to the other side of the sketch. | The preview points away from the intended body. |
| Symmetric | Splits the entered total distance equally across the sketch plane. 10 mm extends 5 mm on each side. | Keep the sketch at the middle of a part. |
| Two Sides | Sets a separate distance on each side. | The sketch is between two unequal extensions. |
| Through All | Reaches through the target body. | Cut a hole that must stay open when the body becomes thicker. |
| To Object | Stops at a selected target face, vertex or point. An offset can stop before or beyond that target. | Let the end follow another part of the design. |
| Start | Starts at the sketch, at an offset from it, or from a selected object. | Leave a gap before the extrusion begins. |
| Taper Angle | Slopes the side walls. | Make drafted sides; reduce the angle if the profile’s narrow details cannot support it. |
| Operation | New Body makes a separate piece; Join adds material; Cut removes it; Intersect keeps only the overlap. | Choose the intended result explicitly when the automatic preview is not what you want. |
| Target bodies | Chooses which existing bodies take part in a join, cut or intersection. | Several bodies lie in the extrusion’s path. |
| Thin Extrude | Builds walls along curves; thickness and side control where the material lies. Two-sided walls can have different thicknesses. | Make ribs, walls or rings without drawing both wall boundaries. |
Try it: a 20 mm block
- Create a sketch on the XY plane and draw a closed rectangle.
- Finish the sketch and choose Extrude.
- Select the rectangular region, set Distance to 20 mm, and choose New Body.
- Check the preview’s direction and confirm. You should have one solid block.
- Edit the extrusion in the timeline to change its distance later.
Tips and common mistakes
- Do check the operation before confirming. Automatic operation can join an addition or cut into an existing body; it is not a promise of a separate part.
- Do use Through All for a cut that should follow later thickness changes.
- Don’t expect an open outline to make a filled solid. Close it, or choose Thin Extrude for a wall.
- Don’t assume a symmetric distance is the distance on each side. New symmetric extrusions use the total distance; older saved designs can retain their earlier convention.
- Taper with a two-sided or symmetric extent is not supported. A very steep taper can also be refused rather than creating an invalid result.
Examples and community resources
The bracket starts with a closed L-shaped profile; another extrusion removes the two holes. Its dimensions are controlled by design parameters.
| Resource | What to explore | Author and licence |
|---|---|---|
| Editable bracket recipe | A complete SolidCraft example using an extrusion, a fillet and a cut. | SolidCraft contributors; MIT OR Apache-2.0. |
Contribute a tip, demo, model or screenshot to add a reviewed resource beside this explanation.
See also
Revolve turns a profile around an axis. Sweep carries a profile along a path. Flange creates sheet metal with a thickness rule.
Automation details
Command ID: solid.extrude
Parameters:
distance: expr (or through_all: true); taper?: angle expr (positive: outward, so the far end is larger along the extrusion direction; negative: inward, so the far end is smaller); sketch?: id|name (default: active or last sketch); profiles?: all | [index] | [{curves: [ids]}] (the profile whose outer loop is made of exactly these curves, or pieces of them; found again on every recompute, so it follows parameter changes; islands inside are its holes; an error when no profile or several match) | [{point:[x,y]}] (index and point picks are stored by their curves when that finds the same profile; a pick on a drawn profile that reference geometry, such as the projected outline of the face the sketch is on, cuts into regions takes the whole drawn profile); exact_regions?: bool (each index or point pick is exactly the region it names, as the dialogs send); default: every drawn profile, except that a loop inside another is its hole and a loop inside that hole is material again; face?: [x,y,z] (extrude a planar body face instead of a sketch profile); faces?: [[x,y,z],…] (coplanar faces of one body); face_body?: name (whose face, where faces of several bodies meet at the point); direction?: positive|negative|symmetric (distance is total thickness, split evenly around the start plane); convention?: total_distance|legacy_per_side (default total_distance; legacy preserves older symmetric extents); distance2?: expr (Two Sides: a second distance the other way from the first side, which may be through_all or to; with direction: negative the first side goes against the normal and distance2 along it); start_offset?: expr (along the sketch normal, also with direction: negative); to?: [x,y,z] (To Object: a face, vertex or point; to_offset?: expr past it); from?: [x,y,z] (From Object: start at that face or point); operation?: new|join|cut|intersect|auto (cut into a body, otherwise join existing solids; new in an empty component); targets?: [body] (Join from a face, or from a sketch on a body's face, defaults to that face's body; explicit targets or participants override); name?; body_name?; thin?: true (Thin: a wall along sketch curves instead of the profiles) with curves?: [curve ids] (open chains and closed loops, joined where they meet end to end; default: every drawn curve of the sketch), thickness: expr, side?: center|inside|outside|two_sides (a closed loop's inside is the area it encloses, an open chain's the side it bends toward, a straight line's the left of its first curve as drawn; default center), thickness2?: expr (two_sides: the thickness outside); corners are mitred, crossing walls are one
Revolve
Command group: SOLID › CREATE
Read the solid features guide.
Automation details
Command ID: solid.revolve
Parameters:
axis: sketch line id | x | y (sketch axes) | X|Y|Z (world) | {type: world, axis: X|Y|Z} (as returned by timeline.inspect) | construction axis name (followed when edited) | {origin, dir} | {edge|face: [x,y,z]} (a straight or circular edge, or a cylinder, cone or torus face: about its axis, followed as the model changes); angle?: expr (default 360 deg); angle2?: expr (Two Sides: the other side's angle); direction?: symmetric (angle split either side, independent of axis direction); convention?: sketch_normal|legacy_axis_start (default sketch_normal; legacy retains older angular starts); to?: [x,y,z] (To Object: turn until that face, vertex or point); sketch?, profiles? | face: [x,y,z] (a planar body face as the profile) and face_body?: name (whose face, where faces of several bodies meet), operation?, targets?, name?, body_name?
Sweep
Command group: SOLID › CREATE
Read the solid features guide.
Automation details
Command ID: solid.sweep
Parameters:
sketch: profile sketch; profiles?; path_sketch: sketch; path: [curve ids in order]; orientation?: perpendicular (default: square to the path, turning with it) | parallel (as drawn: the profile moves without turning; the path must keep crossing its plane) | [x,y,z] (square to the path, its turn about the path fixed by this direction); twist?: angle expr (the profile turns this much about the path over its length; within 4 turns); scale?: expr (the profile's scale at the end, linear along the path; 0.01…100); rails?: [{sketch?: sketch (default path_sketch), curves: [curve ids in order]}] (guide rails, one or two, each meeting every plane square to the path once along it, from the end nearest the path's start: one rail turns the profile so its point where the rail starts stays on the rail and scales it with the rail's distance from the path; two rails carry it between them, its points where they start staying on both; rails take the default orientation, no twist and no scale, and a path without sharp corners); rail_fit?: scale (default: the profile grows and shrinks evenly) | stretch (only across to the rail, between the rails); operation?, targets?, name?, body_name?
Loft
Command group: SOLID › CREATE
Read the solid features guide.
Automation details
Command ID: solid.loft
Parameters:
sections: [{sketch, profiles?} | {sketch, point: id} (an apex)] (2…50, in order; matching hole counts, no holes at an apex); rails?: [{sketch, curves: [ids in order]}] (one or two guide rails from the first section to the last, through every section's outline: the loft follows them between the sections; not with sections that have holes); rail_fit?: scale|stretch (default scale: with one rail the sections grow evenly with the rail's distance from their middle, with two with the distance between the rails; stretch: only that way); operation?, targets? (Join excludes hidden bodies from automatic targets; explicit targets or participants may include them), name?, body_name?
Box
Command group: SOLID › CREATE
Read the solid features guide.
Automation details
Command ID: solid.box
Parameters:
length, width, height: expr; corner?: [x,y,z] | center?: [x,y,z] (numbers in mm or length expressions; default: the origin); operation?, targets?: [body], name?, body_name?
Cylinder
Command group: SOLID › CREATE
Read the solid features guide.
Automation details
Command ID: solid.cylinder
Parameters:
radius | diameter, height: expr; base?: [x,y,z] (centre of the bottom: numbers in mm or length expressions; default: the origin); axis?: X|Y|Z|[x,y,z] (default Z); operation?, targets?: [body], name?, body_name?
Sphere
Command group: SOLID › CREATE
Read the solid features guide.
Automation details
Command ID: solid.sphere
Parameters:
radius | diameter: expr; center?: [x,y,z] (numbers in mm or length expressions; default: the origin); operation?, targets?: [body], name?, body_name?
Torus
Command group: SOLID › CREATE
Read the solid features guide.
Automation details
Command ID: solid.torus
Parameters:
major, minor: expr (radii); center?: [x,y,z] (numbers in mm or length expressions; default: the origin); operation?, targets?: [body], name?, body_name?
Cone
Command group: SOLID › CREATE
Read the solid features guide.
Automation details
Command ID: solid.cone
Parameters:
radius | diameter, height: expr (the base circle, and the top's distance along the axis; a negative height goes the other way); top_radius? | top_diameter?: expr (the top circle; default 0: a full cone ending in an apex); base?: [x,y,z] (centre of the base circle: numbers in mm or length expressions; default: the origin); axis?: X|Y|Z|[x,y,z] (default Z); operation?, targets?: [body], name?, body_name?
Rectangular Pattern
Command group: SOLID › CREATE
Read the solid features guide.
Automation details
Command ID: solid.pattern.rectangular
Parameters:
features: [names] | bodies: [names] | components: [names]; dir1: [x,y,z]; count1; spacing1; dir2?, count2?, spacing2?; alignment?, alignment2?: left|center|right (default right; counts include the original); reversed?, reversed2?: bool (Flip)
Circular Pattern
Command group: SOLID › CREATE
Read the solid features guide.
Automation details
Command ID: solid.pattern.circular
Parameters:
features: [names] | bodies: [names] | components: [names]; axis: X|Y|Z | construction axis name (followed when edited) | {origin, dir} | {edge|face: [x,y,z]} (a straight or circular edge, or a cylinder, cone or torus face: about its axis, followed as the model changes); count; angle? (default 360 deg; partial arcs include both ends); alignment?: left|center|right (default right; original stays fixed); reversed?: bool (Flip; selects the extra side for even centered counts)
Pattern on Path
Command group: SOLID › CREATE
Read the solid features guide.
Automation details
Command ID: solid.pattern.path
Parameters:
features: [names] | bodies: [names]; path_sketch: sketch; path: [curve ids in order]; count; spacing (between instances) | distance (first to last); orientation?: identical|path; flip?: bool
Mirror
Command group: SOLID › CREATE
Read the solid features guide.
Automation details
Command ID: solid.mirror
Parameters:
features: [names] | bodies: [names] (combine?: join with the original); plane: XY|XZ|YZ|construction plane name or id|{origin, normal}|{origin, x_dir, y_dir} (origin coordinates may be length expressions; the mirror follows them, or a construction plane)
Hole
Command group: SOLID › CREATE
Default keyboard shortcut: H
Read the solid features guide.
Automation details
Command ID: solid.hole
Parameters:
position: [x,y,z] on a face (numbers, or length expressions the hole follows) | sketch + points: [sketch point ids] (one hole each, perpendicular to the sketch, into the material on whichever side of the sketch plane it is) | sketch alone (every sketch point: standalone points and circle centres); flip?: bool (sketch points: drill to the other side); single?: bool (with one sketch point: a Single hole that follows the point, drilled into the face there); direction?: [x,y,z] (default: into the face, against its outward normal; one that leaves the face is mirrored into it; ignored with sketch points unless single); diameter | thread (a tapped hole: metric major minus pitch or tabulated UNC/UNF, G or Rp cut-tap drill) | clearance: "M6" with fit?: close|normal|loose (ISO 273); depth? (default through all) | to?: [x,y,z] (To Object: drill to that face or point); references?: [{edge: [x,y,z] on a straight edge of the face, distance: expr}] (at most two; the centre goes that far from each edge's line, in the face's plane, and follows the edges; with a numeric position only); type?: simple|drilled|counterbore|countersink; tip_angle?; cb_diameter?, cb_depth?; cs_diameter?, cs_angle?; thread?: "M6" or "1/4-20 UNC" (cosmetic); handedness?: right|left (default right, needs thread for left); thread_depth?: positive length independent of drill depth (default: full useful cylindrical wall; must fit that wall); targets?: [body] (the bodies to drill; holes at the points of a sketch on a body's face default to that body, found along the holes' direction on it alone; explicit targets or participants override, ["*"] every body)
Pipe
Command group: SOLID › CREATE
Read the solid features guide.
Automation details
Command ID: solid.pipe
Parameters:
path_sketch: sketch; path: [curve ids in order]; diameter: expr; wall?: expr (hollow); operation?, targets?, name?, body_name?
Bounding Solid
Command group: SOLID › CREATE
Read the solid features guide.
Automation details
Command ID: solid.bounding_solid
Parameters:
bodies?: [names] (default: all); margin?: expr; name?, body_name?
Thread
Command group: SOLID › CREATE
Read the solid features guide.
Automation details
Command ID: solid.thread
Parameters:
face: [x,y,z] on a cylindrical face; designation?: ISO metric ("M8", "M8x1"; default: the size that fits); length?: expr (default: the whole face); handedness?: right|left (default right); modeled?: bool (default false). Cosmetic: the model is unchanged, model.threads lists it. Modeled: cuts the thread profile into the body; a shaft thicker than the thread is first turned down to its major diameter over the threaded length
Boundary Fill
Command group: SOLID › CREATE
Read the solid features guide.
Automation details
Command ID: solid.boundary_fill
Parameters:
tools: [bodies]; cells: [[x,y,z] a point inside each cell to fill (a cell: inside some tools, outside the rest)]; operation?: new|join|cut|intersect; remove_tools?: bool
Coil
Command group: SOLID › CREATE
Read the solid features guide.
Automation details
Command ID: solid.coil
Parameters:
diameter; two of revolutions (or turns), height, pitch; section_size; section?: circular|square; section_position?: inside|center|outside; base?: [x,y,z] (numbers in mm or length expressions; default: the origin); axis?: X|Y|Z|[x,y,z] (default Z); start_angle?; clockwise?: bool; sketch? (a sketch; its plane is the section plane, so its placement sets the radius and start phase), profiles? (default: all; one closed profile without holes); operation?, targets?, name?, body_name?
Rib
Command group: SOLID › CREATE
Read the solid features guide.
Automation details
Command ID: solid.rib
Parameters:
sketch, curves: [open curve ids, in order]; thickness (across the sketch plane, or across the curves when normal); depth? (default: to the next face); flip?: bool (fill to the other side); direction?: in_plane|normal (grow across the sketch plane, the default, or along its normal)
Web
Command group: SOLID › CREATE
Read the solid features guide.
Automation details
Command ID: solid.web
Parameters:
sketch, curves: [open curve ids] (one wall each); thickness; depth? (default: to the next face); flip?: bool; direction?: in_plane|normal
Emboss
Command group: SOLID › CREATE
Read the solid features guide.
Automation details
Command ID: solid.emboss
Parameters:
sketch, profiles?; depth; mode?: emboss|deboss; targets?; face?: world point [x,y,z] selecting a planar or complete exterior cylindrical wall (inferred when exactly one supported tangent cylinder matches the selected profiles)
Joint Origin
Command group: SOLID › CREATE
Read the components and joints guide.
Automation details
Command ID: joint.origin
Parameters:
name?, occurrence?: id|name (default: from the pick, or the named face's component), face: [x,y,z] | "<name>" (centre of a planar face) | circle: [x,y,z] | "<name>" (centre of a round end: a point on its wall or rim, the end's centre, or the round face's name as model.faces lists it) | edge: [x,y,z] (a point on an edge of a planar face: the edge's middle, z out of the face, y into it; on?: [x,y,z] a point on the face (default: the larger planar face beside the edge); corner?: [x,y,z] near one end: the corner there, x and y along its two edges into the face; found again by name, so it follows the face as it changes size; z?: [x,y,z] the frame's z instead of the face's normal, along the edge when it runs that way, x chosen from z: an edge or corner picked as it is, kept as a point where it can't be found by name) | point: [x,y,z], z?: [x,y,z]; a circle's z?: [x,y,z] (a round edge's centre with the way out of it: its end by name when that is the frame it shows, else a point there); body?: the named face's body; end?: "<name>" (a circle's end: the face across its rim there; default the end nearer the pick); x?: [x,y,z] (a direction, world) | "<face name>" | {face: [x,y,z]} (the frame's x: a direction, a plane's normal, or the way to another hole's axis; keeps a round origin's turn; a point's x is a direction, laid square to its z, default: chosen from z alone). Faces are kept by name: the origin follows its face, and a circle its end, when the design changes
SOLID › MODIFY
Fillet
Command group: SOLID › MODIFY
Default keyboard shortcut: F
Read the solid features guide.
Automation details
Command ID: solid.fillet
Parameters:
edges: [[x,y,z] point on edge | {body, index}]; radius: expr; body?; type?: constant|curvature (alias g2: curvature-continuous quintic between planar faces along straight edges, one planar end face at each end (including sloped ends); radius sets the equivalent circular setback, not constant curvature; exact fit only)|chord (radius is the width across)|variable (radius at the end nearest start, radius2 at the other; one end may be 0, where the round closes to the corner)|spline (the radius along the edge is a clamped B-spline from the end nearest start: radius is its first control radius, radii the rest, knots its knot vector from 0 to 1; one end may be 0); radius2?; start?: [x,y,z]; radii?: [expr, …]; knots?: [number, …]; mid?: [[position 0…1 from start, radius expr], …] (variable radii between the ends); smooth?: bool (smooth instead of straight between the radii); corner?: rolling|g2 (rolling, the default: the corners where three blended edges meet are pieces of the rolling ball's sphere, tangent to each blend; g2: a patch repeating each blend's surface up to the second order, constant-radius exact fillets only, refused where it cannot be built); fit?: exact|reduce|taper (exact, the default: a radius too large for the geometry around the edges is refused; reduce: where it doesn't fit it is reduced to the largest that does, one radius for edges sharing a face; the smallest used is returned as `radius_applied`, each edge's as `radii_applied: [{edge: [x,y,z], radius}]`, and noted in the feature's warning; taper: along each straight edge between planar faces where it doesn't fit, the radius follows the room there as a smooth spline, down to 0 where a face closes to a point, noted in the feature's warning)
Chamfer
Command group: SOLID › MODIFY
Read the solid features guide.
Automation details
Command ID: solid.chamfer
Parameters:
edges: [[x,y,z] | {body, index}]; distance: expr; distance2?: expr (along the second face) | angle?: expr (from the first face); flip?: bool (which face is first: by default the one facing up most); body?
Combine
Command group: SOLID › MODIFY
Read the solid features guide.
Automation details
Command ID: solid.combine
Parameters:
target: body; tools: [body]; operation?: join|cut|intersect; keep_tools?: bool; new_component?: bool (the result goes into a new component; component_name?)
Scale
Command group: SOLID › MODIFY
Read the solid features guide.
Automation details
Command ID: solid.scale
Parameters:
bodies: [names]; factor: expr | factors: [x, y, z] exprs; origin?: [x,y,z]
Delete Face
Command group: SOLID › MODIFY
Read the solid features guide.
Automation details
Command ID: face.delete
Parameters:
faces: [[x,y,z] points on the faces, or face names from model.faces]; body?; heal?: bool (default true: the neighbouring planes close the gap, as when a rounded edge, hole or boss is taken off; false: the gap stays open and the faces left are a surface body)
Offset Face
Command group: SOLID › MODIFY
Read the solid features guide.
Automation details
Command ID: solid.offset_face
Parameters:
faces: [[x,y,z] points on faces (planar or curved), or face names from model.faces]; distance: expr (positive: outward); body?
Shell
Command group: SOLID › MODIFY
Read the solid features guide.
Automation details
Command ID: solid.shell
Parameters:
faces: [[x,y,z] points on the faces to remove, or face names from model.faces]; thickness: expr; direction?: inside|outside|both; tangent_chain?: bool (also open faces joined smoothly to the picked ones); body?
Draft
Command group: SOLID › MODIFY
Read the solid features guide.
Automation details
Command ID: solid.draft
Parameters:
faces: [[x,y,z] points, or face names from model.faces]; angle: expr; neutral: XY|XZ|YZ|plane name|{origin, normal}; pull?: [x,y,z] (default: neutral plane normal); body?
Split Face
Command group: SOLID › MODIFY
Read the solid features guide.
Automation details
Command ID: solid.split_face
Parameters:
faces: [[x,y,z] points on the faces to split, or face names from model.faces]; body?; and the splitting tool: plane: XY|XZ|YZ|plane name|{origin, normal} — or tool: {body, point} (a face of a body, its surface extended) — or sketch: id or name (its curves, along the sketch's normal)
Split Body
Command group: SOLID › MODIFY
Read the solid features guide.
Automation details
Command ID: solid.split_body
Parameters:
body: name; plane: XY|XZ|YZ|plane name|{origin, normal} — or tool: {body, point} (a face of a body, its surface extended) — or sketch: id, line: curve id (a straight sketch line, along the sketch's normal)
Press Pull
Command group: SOLID › MODIFY
Default keyboard shortcut: Q
Read the solid features guide.
Automation details
Command ID: solid.press_pull
Parameters:
face: [x,y,z] and distance: expr (positive adds material, negative cuts), or edges: [[x,y,z]…] and distance (a fillet)
Move/Copy
Command group: SOLID › MODIFY
Default keyboard shortcut: M
Read the solid features guide.
Automation details
Command ID: solid.move
Parameters:
bodies: [names]; translate?: [x,y,z] (exprs or numbers); axis?: [x,y,z]; angle?: expr; copy?: bool (default false: keeps the original bodies and transforms a new copy instead of moving them in place)
Replace Face
Command group: SOLID › MODIFY
Read the solid features guide.
Automation details
Command ID: solid.replace_face
Parameters:
faces: [[x,y,z] points on planar faces, or face names from model.faces]; target: plane (XY|XZ|YZ|construction plane|{origin, normal}) | target_face: [x,y,z] on a parallel planar face; body?
Align
Command group: SOLID › MODIFY
Read the solid features guide.
Automation details
Command ID: solid.align
Parameters:
bodies: [names]; from: [x,y,z] | "origin" | {snap: vertex|edge_mid|face_center|circle_center, at: [x,y,z]} | from_face: [x,y,z] | from_plane: XY|XZ|YZ|construction or offset plane name or id|{origin, normal}; to: (the same) | to_face: [x,y,z] | to_plane: (a plane as from_plane; the point or face goes onto it along its normal, and the plane may move later: the bodies follow); faces and planes also turn to meet; flip?: bool
Remove
Command group: SOLID › MODIFY
Read the solid features guide.
Automation details
Command ID: solid.remove
Parameters:
bodies: [names] (removed from here on in the timeline)
Compute All
Command group: SOLID › MODIFY
Read the solid features guide.
Automation details
Command ID: timeline.compute_all
No parameter description is provided by the command registry.
Delete
Command group: SOLID › MODIFY
Default keyboard shortcut: Delete
Read the solid features guide.
Automation details
Command ID: timeline.delete
Parameters:
feature: id|name | features: [id|name] | groups: [timeline folder ids] (a folder goes with all its features and nested folders; one undo step; a sketch takes its dependent features with it) → deleted: [ids]; groups?: [folder ids deleted]; failing?: [{feature, error}] (later features that worked and now fail)
Change Parameters
Command group: SOLID › MODIFY
Read the parameters and expressions guide.
Automation details
Command ID: parameters.change
Parameters:
name, expression (number or text), unit?: mm|cm|m|in|ft|deg|rad|""|text (new parameters default to their value's unit; a text parameter's expression is its text, quotes round it optional: sketch texts' words are built from it), comment?, favorite?: bool, new_name?: rename (references follow); or delete: name; or changes: {name: expression, …} (existing parameters, checked together and rebuilt once, all or nothing) → changed?: {name: value} (with changes), recomputed: features rebuilt, restored: features whose earlier result for the same inputs was reused (e.g. a value set back), switched?: [{feature, name, suppressed}] (the configuration rules that switch a feature's suppression and read a parameter whose value changed run in their order, as on activation; driven parameters and restrictions wait for a configuration edit or activation)
Physical Material
Command group: SOLID › MODIFY
Read the solid features guide.
Automation details
Command ID: material.assign
Parameters:
bodies: [names]; material: name (Steel, Aluminum, ABS Plastic, …, or one made with material.create; `material.list`)
Appearance
Command group: SOLID › MODIFY
Default keyboard shortcut: A
Read the solid features guide.
Automation details
Command ID: appearance.assign
Parameters:
bodies?: [names]; faces?: [[x,y,z] on faces] (body?: which body, default the nearest); components?: [names or ids, or occurrence names]; appearance?: library name or stable starter.* ID (appearance.library) | color: "#rrggbb" or [r, g, b] (0–255), opacity? (0–1, default 1); name?: inert copied look label (requires color, mutually exclusive with appearance); pbr?: {metallic:0..1, roughness:0.045..1, dielectric_ior:1..3} (requires color/appearance and opacity 1); a starter ID or registered starter name resolves its recipe before color overrides; omitted pbr retains that response and pbr: null explicitly clears it. Unavailable glass recipes refuse through either selector. Other custom labels with an explicit color retain legacy scalar behavior. Neither appearance nor color (or color: null): clear, so the face follows its body, the body its component, the component its material
SOLID › CONSTRUCT
Offset Plane
Command group: SOLID › CONSTRUCT
Read the solid features guide.
Automation details
Command ID: construct.plane.offset
Parameters:
base: XY|XZ|YZ|plane name, or a planar face {face: [x,y,z], body?, index?, path?}; offset: expr, or through: a point ref (vertex, sketch point, construction point) the plane goes through, parallel to base; name?
Plane at Angle
Command group: SOLID › CONSTRUCT
Read the solid features guide.
Automation details
Command ID: construct.plane.at_angle
Parameters:
base: XY|XZ|YZ|plane name, or a planar face {face: [x,y,z], body?, index?, path?}; axis: X|Y|Z|construction axis name (where it is now)|{origin, dir} | {edge|face: [x,y,z]} (a straight or circular edge, or a cylinder, cone or torus face: about its axis, followed as the model changes); angle: expr; name?
Axis Through Cylinder/Cone/Torus
Command group: SOLID › CONSTRUCT
Read the solid features guide.
Automation details
Command ID: construct.axis.through_cylinder
Parameters:
face: ref (a cylinder, cone or torus face, or a circular edge); name?
Axis Perpendicular To Face
Command group: SOLID › CONSTRUCT
Read the solid features guide.
Automation details
Command ID: construct.axis.normal_to_face
Parameters:
face: ref; point: ref (the axis goes through it, square to the face); name?
Axis Through Two Planes
Command group: SOLID › CONSTRUCT
Read the solid features guide.
Automation details
Command ID: construct.axis.two_planes
Parameters:
a, b: plane or planar face refs; name?
Axis Through Two Points
Command group: SOLID › CONSTRUCT
Read the solid features guide.
Automation details
Command ID: construct.axis.two_points
Parameters:
a, b: point refs (vertices, sketch points, points); name?
Axis Through Edge
Command group: SOLID › CONSTRUCT
Read the solid features guide.
Automation details
Command ID: construct.axis.edge
Parameters:
edge: ref (a straight edge or sketch line); name?
Point At Vertex
Command group: SOLID › CONSTRUCT
Read the solid features guide.
Automation details
Command ID: construct.point.vertex
Parameters:
point: ref (vertex, sketch point, point); name?
Point Through Two Edges
Command group: SOLID › CONSTRUCT
Read the solid features guide.
Automation details
Command ID: construct.point.two_edges
Parameters:
a, b: edge or line refs (where they meet, or come closest); name?
Point Through Three Planes
Command group: SOLID › CONSTRUCT
Read the solid features guide.
Automation details
Command ID: construct.point.three_planes
Parameters:
a, b, c: plane or planar face refs; name?
Point At Center Of Circle/Sphere/Torus
Command group: SOLID › CONSTRUCT
Read the solid features guide.
Automation details
Command ID: construct.point.center
Parameters:
of: ref (circular edge, sketch circle or arc, sphere or torus face); name?
Point At Edge And Plane
Command group: SOLID › CONSTRUCT
Read the solid features guide.
Automation details
Command ID: construct.point.edge_plane
Parameters:
edge: edge or line ref; plane: plane or planar face ref; name?
Point Along Path
Command group: SOLID › CONSTRUCT
Read the solid features guide.
Automation details
Command ID: construct.point.along_path
Parameters:
path: edge or sketch curve ref; t: expr, 0…1 along it (default 0.5); name?
Midplane
Command group: SOLID › CONSTRUCT
Read the solid features guide.
Automation details
Command ID: construct.plane.midplane
Parameters:
a, b: plane or planar face refs (halfway between; bisecting when they meet at an angle); name?
Plane Through Two Edges
Command group: SOLID › CONSTRUCT
Read the solid features guide.
Automation details
Command ID: construct.plane.two_edges
Parameters:
a, b: straight edge or line refs in one plane; name?
Plane Through Three Points
Command group: SOLID › CONSTRUCT
Read the solid features guide.
Automation details
Command ID: construct.plane.three_points
Parameters:
a, b, c: point refs; name?
Tangent Plane
Command group: SOLID › CONSTRUCT
Read the solid features guide.
Automation details
Command ID: construct.plane.tangent
Parameters:
face: ref (cylinder, cone, sphere or torus); at?: [x,y,z] where it touches (default: the face pick); name?
Plane Along Path
Command group: SOLID › CONSTRUCT
Read the solid features guide.
Automation details
Command ID: construct.plane.along_path
Parameters:
path: edge or sketch curve ref; t: expr, 0…1 along it (default 0.5); name? The plane is square to the path there
Perpendicular Plane
Command group: SOLID › CONSTRUCT
Read the solid features guide.
Automation details
Command ID: construct.plane.perpendicular
Parameters:
plane: plane or planar face ref; line: straight edge, sketch line or axis ref; name? The plane holds the line and is square to the plane
SOLID › ASSEMBLE
New Component
Command group: SOLID › ASSEMBLE
Read the components and joints guide.
Automation details
Command ID: component.create
Parameters:
name?, parent?: component id or name (default: the active one); parent_path?: exact parent placement; activate?: bool (default true); grounded?: bool (default: true for the design's first part, false otherwise)
Insert Design
Command group: SOLID › ASSEMBLE
Read the components and joints guide.
Automation details
Command ID: component.insert_design
Parameters:
path: a .solidcraft design → a new component linked to it, holding its solid bodies as placed in that design and a copy of its design properties; name? (default: the design's name); parent?: component id or name (default: the active one); translate?: [x,y,z]; reuse?: bool (default false): insert a free occurrence, reusing an existing link to the same file when available
Joint
Command group: SOLID › ASSEMBLE
Default keyboard shortcut: J
Read the components and joints guide.
Automation details
Command ID: joint.create
Parameters:
type: rigid|revolute|slider|cylindrical|pin_slot|planar|ball, or a relation: parallel|perpendicular|angle|point_on_plane|point_on_line|line_on_plane (ties only some directions or points, made where the parts are; several between two parts add up); a, b: joint origins ({occurrence, face|circle|edge|point: [x,y,z] in world, or face|circle: "<face name>"; z? for a point, end?, x? as joint.origin} | origin name); values?: [angles in deg or expressions, distances]; limits?: [[min, max] | null…]; flip?: bool (default false: the origins are mated, b's z against a's as two faces meet; true: b's z along a's, so two origins given at one point with the same z stay as they are); offset?: mm or an expression; angle?: deg or an expression (an angle relation's tilt from mated; for other joints the default is none, or a half turn where that turns b less, so faces that already meet stay as they are); name?; quiet?: bool (leave out dof and fixed). An expression (text) is kept with the joint and worked out again whenever the design changes, so the joint follows the parameters it names; a joint whose expression no longer works out (a parameter deleted) is left out of the solve with the reason in its errors
As-Built Joint
Command group: SOLID › ASSEMBLE
Read the components and joints guide.
Automation details
Command ID: joint.as_built
Parameters:
type, a: occurrence, b: occurrence (stay where they are); at?: joint origin (default: b's origin) — the joint's frame; one on a or b is kept on its face or hole there, so the joint follows it as the design changes; name?; limits?: [[min, max] | null…]; quiet?: bool
Rigid Group
Command group: SOLID › ASSEMBLE
Read the components and joints guide.
Automation details
Command ID: joint.rigid_group
Parameters:
occurrences: [ids or names] (move together, as they are)
Drive Joints
Command group: SOLID › ASSEMBLE
Read the components and joints guide.
Automation details
Command ID: joint.drive
Parameters:
joint: id|name; value | values: [angles in deg or expressions, distances] (values not given keep theirs; a value driven drops the expression joint.create gave it; clamped to the limits; the other joints of a closed loop follow, and the motion stops where the loop can no longer close → stopped_by_loop); quiet?: bool (leave out dof and fixed) → values: [{name, value, unit: deg|mm, limits}] as joint.list gives them; moved: whether any occurrence moved; reason: why the joint can move nothing (suppressed, its origins lost, or its chain joined to nothing grounded → unconnected: the occurrence named)
Motion Link
Command group: SOLID › ASSEMBLE
Read the components and joints guide.
Automation details
Command ID: joint.motion_link
Parameters:
a, b: joints; ratio (b = ratio · a + offset): b's units per a's (mm per deg for an angle driving a distance); offset?: in b's units (deg for an angle, mm for a distance, or an expression); ia?, ib?: value indices (default 0)
Gear
Command group: SOLID › ASSEMBLE
Read the components and joints guide.
Automation details
Command ID: joint.gear
Parameters:
a, b: joints that turn (revolute), b driven by a; ra, rb: the gears' pitch radii (or tooth counts): mm, an expression, or {circle: [x,y,z], occurrence?}: the round face there, its radius (read again whenever the design changes, so the ratio follows edits); internal?: bool (one is a ring gear: both turn the same way; by default b turns the other way); reverse?: bool; link?: index (replace that motion link) → link, ratio (b's degrees per a's); b keeps where it is, also when the link replaces another (at the current pose)
Rack and Pinion
Command group: SOLID › ASSEMBLE
Read the components and joints guide.
Automation details
Command ID: joint.rack_pinion
Parameters:
a, b: a joint that turns (revolute: the pinion) and one that slides (slider: the rack), in either order, b driven by a; radius: the pinion's pitch radius (mm, an expression, or {circle: [x,y,z], occurrence?}): the rack travels radius × the turn in radians; reverse?: bool; link?: index (replace that motion link) → link, ratio (mm per degree, or degrees per mm); b keeps where it is, also when the link replaces another (at the current pose)
Screw
Command group: SOLID › ASSEMBLE
Read the components and joints guide.
Automation details
Command ID: joint.screw
Parameters:
joint: a cylindrical joint (its turn drives its travel) | a, b: a joint that turns and one that slides, b driven by a; pitch: travel per turn (mm or an expression); reverse?: bool (a left-hand thread); link?: index (replace that motion link) → link, ratio (mm per degree, or degrees per mm); b keeps where it is, also when the link replaces another (at the current pose)
Cam
Command group: SOLID › ASSEMBLE
Read the components and joints guide.
Automation details
Command ID: joint.cam
Parameters:
a: the cam's joint (revolute); b: the follower's joint, a slider (a translating follower) or a revolute (an oscillating one), b driven by a; profile: {sketch: id|name, index?: the profile (default: the largest)} | {edges: [[x,y,z]…] (points on edges of the cam's bodies forming one closed loop, world), occurrence?}: the cam's outline, in a plane square to its axis, read again whenever the design changes; follower?: knife|roller|flat (default knife; flat: a face square to a slider's line); radius?: the roller's radius (mm, an expression or {circle: [x,y,z], occurrence?}: the roller's round face, which is its tip too); tip?: a joint origin where the follower touches: its knife's point or its roller's centre, such as {circle: [x,y,z]} on the roller (needed for an oscillating follower; a translating one's line runs through it, by default along its slider's axis); flip?: bool (ride the cam from the other side than the one the follower is on now); link?: index (replace that motion link) → link, lift: {min, max, rise, unit} (b's travel over a turn of the cam), reverse (the side it rides from), follower_offset (mm: how far a translating follower's line passes from the cam's axis); b keeps where it is, also when the link replaces another (at the current pose)
Enable Contact Sets
Command group: SOLID › ASSEMBLE
Read the solid features guide.
Automation details
Command ID: contact.enable_sets
Parameters:
enabled?: bool (default true) — driving joints and motion studies stop where bodies in one contact set would pass through each other
Enable All Contact
Command group: SOLID › ASSEMBLE
Read the solid features guide.
Automation details
Command ID: contact.enable_all
Parameters:
every occurrence takes part in contact (one set of all)
Disable Contact
Command group: SOLID › ASSEMBLE
Read the solid features guide.
Automation details
Command ID: contact.disable_all
Parameters:
contact off
New Contact Set
Command group: SOLID › ASSEMBLE
Read the solid features guide.
Automation details
Command ID: contact.create
Parameters:
occurrences: [ids or names] (two or more); name?
Motion Study
Command group: SOLID › ASSEMBLE
Read the components and joints guide.
Automation details
Command ID: motion.study
Parameters:
name?; study? (edit an existing one); steps? (timeline length, default 100); keys: [{joint, index?, points: [[step, value], …]}] (values: degrees for angles, mm for distances, or expressions)
Motion Trace
Command group: SOLID › ASSEMBLE
Read the components and joints guide.
Automation details
Command ID: motion.trace
Parameters:
occurrence: id|name, or an occurrence path [ids] (an instance inside sub-assemblies); point: [x,y,z] world point on it, where it is placed now; study: id|name, or joint: id|name with from and to (degrees for angles, mm for distances, or expressions) and index? (which value, default 0); samples? (2…500, default the study's steps + 1, or 100) - the point's path as the study plays or the joint is driven, closed loops following → points: [[x,y,z]…] world positions, samples (taken), stopped_at (the sample where the motion stopped short; the trace ends there), stopped_by_loop, stopped_by_contact (the design is not changed)
Exploded View
Command group: SOLID › ASSEMBLE
Read the solid features guide.
Automation details
Command ID: explode.create
Parameters:
name?; scale? (automatic: each occurrence pushed away from the assembly's centre by scale × its offset, default 1); moves?: [{occurrence, translate: [x,y,z]}] (instead of automatic)
SOLID › POSITION
Capture Position
Command group: SOLID › POSITION
Read the components and joints guide.
Automation details
Command ID: component.capture_position
Parameters:
keeps pending occurrence moves
Revert Position
Command group: SOLID › POSITION
Read the components and joints guide.
Automation details
Command ID: component.revert_position
Parameters:
occurrences?: [ids] (default all); drops selected pending occurrence moves
SOLID › INSPECT
Interference
Command group: SOLID › INSPECT
Read the solid features guide.
Automation details
Command ID: inspect.interference
Parameters:
bodies?: [names] (default: all, in world placement); budget_s?: seconds (default 240, at most 86400: pairs not finished by then are listed in unchecked as "not checked: the time budget … ran out" and the call returns) → interferences: pairs that overlap with the overlap volume, area, bounding box and centre (a pin a hair off the axis of a hole of its size also has near_coaxial: {offset_mm, length_mm}, its volume the crescent the walls share); unchecked: [{a, b, reason}], the pairs that could not be checked, with the reason, and each mesh body (STL, 3MF or OBJ import: not intersected) as {a: name, b: null, reason: "mesh body: not checked"}, so count: 0 is not read as no overlap (checked counts the solid bodies). Bodies are pruned by bounding box first, then by their display meshes (pairs whose meshes stay apart by more than their chord tolerances, neither inside the other, are clear without a boolean), so any number of bodies is fine; the pairs left are intersected exactly, in parallel on desktop, the slowest first; at most 20000 pairs whose boxes overlap are intersected per call (truncated: true and skipped_pairs: n say when more were left out). Also: pairs_candidate (boxes overlap), pairs_cleared (by the meshes), pairs_intersected, pairs_not_checked, budget_exceeded, threads (worker threads; 0: on the calling thread), boolean_ms and tessellate_ms (kernel time summed over the pairs), slowest: [{a, b, ms, boolean_ms, tessellate_ms}] and ms
Bill of Materials
Command group: SOLID › INSPECT
Read the solid features guide.
Automation details
Command ID: assembly.bom
Parameters:
component?: id or name (default the design); levels?: flat (default: every part at any depth, counted through its subassemblies) | top (the component's direct children, subassemblies as one row each); group_by?: ["part_number"] (default; components without a part number get a row per definition) | ["definition"]; group_children?: true (a component with a part number is one row, the parts placed inside it listed under it as children: [{item, part_number, description, revision, each, count, definition}], not as rows of their own); path?: write a .csv or .json file (children as items 1.1, 1.2…); format?: csv|json (default from the path) → rows: [{item, part_number, description, revision, count, definition, components, properties, children?}] sorted by part number, total_occurrences (children included)
Enable Component Colors
Command group: SOLID › INSPECT
Read the solid features guide.
Automation details
Command ID: inspect.colored_components
Parameters:
enabled?: bool (omitted: toggle); temporary component colours, without changing appearances
Measure
Command group: SOLID › INSPECT
Default keyboard shortcut: I
Read the solid features guide.
Automation details
Command ID: inspect.measure
Parameters:
bodies?: [names] (default all) → closed per body; volume_mm3, center_of_mass, density_g_cm3 and mass_g only for closed, consistently oriented bodies; area, bbox and counts for all; total.open_bodies_skipped counts bodies excluded from volume/mass totals; or items: [1-2 selections] (face/edge: type, body, point; index optional) → length/area/volume; diameter, radius, circumference or arc_length/angle_deg of circles, arcs and cylinders; slot sizes; min (distance_mm, from, to), max, center_distance (centre to centre, or from an axis) and angle
Section Analysis
Command group: SOLID › INSPECT
Read the solid features guide.
Automation details
Command ID: inspect.section
Parameters:
plane: XY|XZ|YZ | construction plane name or id | {origin, normal}; offset?: expr along the plane's normal (XY: +Z, XZ: +Y, YZ: +X); at?: expr, the cut's world coordinate on the named plane's axis (XY: Z, XZ: Y, YZ: X), instead of offset; flip?: bool; hatch?: bool (hatch the cut faces, in each body's colour; default true); or clear: true. Returns the cut's origin and normal, and for a named plane its axis and at
SOLID › CONFIGURE
Configure
Command group: SOLID › CONFIGURE
Read the parameters and expressions guide.
Automation details
Command ID: config.configure
Parameters:
params?: [parameter names]; features?: [feature names]; materials?: [body names]; appearances?: [body names] (columns to add; with no rows yet, a "Default" row takes the current values)
Display Configuration Table
Command group: SOLID › CONFIGURE
Read the parameters and expressions guide.
Automation details
Command ID: config.table
Parameters:
→ columns (param:<name> or suppress:<feature>), rows, the active row and whether the design still matches it
SOLID › INSERT
Insert Fastener
Command group: SOLID › INSERT
Read the solid features guide.
Automation details
Command ID: parts.fastener
Parameters:
the Insert Part dialog's command (same as parts.insert): family, size, length?, at?|point?+direction?, name?
Insert STEP
Command group: SOLID › INSERT
Read the import and export guide.
Automation details
Command ID: file.insert_step
Parameters:
path: STEP, IGES, FreeCAD .FCStd or Rhino .3dm file (its bodies join the design as an Import base feature in a new component named after the file, placed in the active component; an assembly's products become nested components, a repeated part one component with an occurrence per placement, all held as one rigid group until component.unlock → component, component_name, occurrence, subcomponents?, rigid_joints?); name? (the feature's and the component's); up?: z|y (default z: the file's axes are kept; y: the file has Y up, so the import's component is turned a quarter turn about X, Y becoming Z → stand_up: its occurrence); names?: auto|solid|product|instance (default auto: keep meaningful solid names, replace placeholders with the nearest named product, else instance; solid: the solid's own name; product: the part's name; instance: the occurrence's name, else the product's); matrix?: [12 or 16 numbers] (where the new component's occurrence sits in the active component, after `up`: a rigid row-major 3x4 rotation-and-translation or 4x4 matrix, flat or as rows, as occurrence.move takes it; a scale, shear or mirror is refused before the file is read); tolerance? (see occurrence.move)
Insert Mesh
Command group: SOLID › INSERT
Read the import and export guide.
Automation details
Command ID: file.insert_mesh
Parameters:
path: .3mf, .stl, .obj, .glb or .gltf file (its meshes join the design as mesh bodies in a new component named after the file → component, component_name, occurrence; a glTF file's node tree becomes nested components held as one rigid group until component.unlock, a mesh placed again another occurrence, its materials the bodies' appearances, and its metres millimetres); name?; up?: z|y for a glTF file (default y: glTF has Y up, so the import's component is turned a quarter turn about X, Y becoming Z → stand_up: its occurrence; z: the file's axes are kept)
SKETCH › FINISH SKETCH
Finish Sketch
Command group: SKETCH › FINISH SKETCH
Read the sketching and constraints guide.
Automation details
Command ID: sketch.finish
No parameter description is provided by the command registry.
Cancel Sketch
Command group: SKETCH › FINISH SKETCH
Read the sketching and constraints guide.
Automation details
Command ID: sketch.cancel
Parameters:
Leaves the sketch without keeping what changed since it was created or opened for editing: the design goes back to how it was then (a new sketch is removed), as one step that Undo brings back. Refused when the undo history no longer leads back to that point (use Undo instead)
Finish with AutoConstrain
Command group: SKETCH › FINISH SKETCH
Read the sketching and constraints guide.
Automation details
Command ID: sketch.finish_auto_constrain
Parameters:
like AutoConstrain, then Finish Sketch
SKETCH › CREATE
Line
Command group: SKETCH › CREATE
Default keyboard shortcut: L
Read the sketching and constraints guide.
Automation details
Command ID: sketch.line
Parameters:
points: [[x,y] | "l1.end" | {at, ref}…] (x and y each a number or an expression over the design's parameters, "W / 2": such a point is fixed where it comes to and follows the parameters; likewise wherever a point argument also takes a point id), closed?: bool, construction?: bool, ids?: [..], infer?: bool (add horizontal/vertical); connect?: bool (default true: a new point landing exactly on an existing point, the origin too, is made coincident with it). Returns created: {points, curves, constraints, dimensions}: the ids of what it added (stable and never reused: usable right away in sketch.dimension, sketch.constraint.*, sketch.delete…)
2-Point Rectangle
Command group: SKETCH › CREATE
Default keyboard shortcut: R
Read the sketching and constraints guide.
Automation details
Command ID: sketch.rectangle.two_point
Parameters:
p0, p1: opposite corners [x,y]; construction?. Returns sides {bottom, right, top, left} (line ids) and corners {bottom_left, bottom_right, top_right, top_left} (point ids); connect?: bool (default true: a new point landing exactly on an existing point, the origin too, is made coincident with it). Returns created: {points, curves, constraints, dimensions}: the ids of what it added (stable and never reused: usable right away in sketch.dimension, sketch.constraint.*, sketch.delete…)
3-Point Rectangle
Command group: SKETCH › CREATE
Read the sketching and constraints guide.
Automation details
Command ID: sketch.rectangle.three_point
Parameters:
p0, p1: first edge; p2: point on the opposite edge; construction?: bool; connect?: bool (default true: a new point landing exactly on an existing point, the origin too, is made coincident with it). Returns created: {points, curves, constraints, dimensions}: the ids of what it added (stable and never reused: usable right away in sketch.dimension, sketch.constraint.*, sketch.delete…)
Rounded Rectangle
Command group: SKETCH › CREATE
Read the sketching and constraints guide.
Automation details
Command ID: sketch.rectangle.rounded
Parameters:
p0, p1: opposite corners [x,y]; radius: expr (the corner radius, less than half the shorter side); construction?. A 2-point rectangle whose four corners are filleted alike: one radius dimension (`param`), the other arcs equal to it. Returns sides {bottom, right, top, left} (line ids) and arcs (the corner arcs: bottom-left, bottom-right, top-right, top-left); connect?: bool (default true: a new point landing exactly on an existing point, the origin too, is made coincident with it). Returns created: {points, curves, constraints, dimensions}: the ids of what it added (stable and never reused: usable right away in sketch.dimension, sketch.constraint.*, sketch.delete…)
Center Rectangle
Command group: SKETCH › CREATE
Read the sketching and constraints guide.
Automation details
Command ID: sketch.rectangle.center
Parameters:
center, corner; construction?: bool. Returns sides {bottom, right, top, left} (line ids) and corners {bottom_left, bottom_right, top_right, top_left} (point ids); connect?: bool (default true: a new point landing exactly on an existing point, the origin too, is made coincident with it). Returns created: {points, curves, constraints, dimensions}: the ids of what it added (stable and never reused: usable right away in sketch.dimension, sketch.constraint.*, sketch.delete…)
Center Diameter Circle
Command group: SKETCH › CREATE
Default keyboard shortcut: C
Read the sketching and constraints guide.
Automation details
Command ID: sketch.circle.center
Parameters:
center: [x,y] or point ref, radius | diameter: number; through?: point ref (a point the circle passes through, kept on it: where the tool's second click snapped); construction?: bool; connect?: bool (default true: a new point landing exactly on an existing point, the origin too, is made coincident with it). Returns created: {points, curves, constraints, dimensions}: the ids of what it added (stable and never reused: usable right away in sketch.dimension, sketch.constraint.*, sketch.delete…)
2-Point Circle
Command group: SKETCH › CREATE
Read the sketching and constraints guide.
Automation details
Command ID: sketch.circle.two_point
Parameters:
p0, p1: diameter ends; construction?: bool; connect?: bool (default true: a new point landing exactly on an existing point, the origin too, is made coincident with it). Returns created: {points, curves, constraints, dimensions}: the ids of what it added (stable and never reused: usable right away in sketch.dimension, sketch.constraint.*, sketch.delete…)
3-Point Circle
Command group: SKETCH › CREATE
Read the sketching and constraints guide.
Automation details
Command ID: sketch.circle.three_point
Parameters:
p0, p1, p2; construction?: bool; connect?: bool (default true: a new point landing exactly on an existing point, the origin too, is made coincident with it). Returns created: {points, curves, constraints, dimensions}: the ids of what it added (stable and never reused: usable right away in sketch.dimension, sketch.constraint.*, sketch.delete…)
3-Point Arc
Command group: SKETCH › CREATE
Read the sketching and constraints guide.
Automation details
Command ID: sketch.arc.three_point
Parameters:
start, end, through: [x,y] or point ref (a referenced through point stays on the arc); construction?: bool; connect?: bool (default true: a new point landing exactly on an existing point, the origin too, is made coincident with it). Returns created: {points, curves, constraints, dimensions}: the ids of what it added (stable and never reused: usable right away in sketch.dimension, sketch.constraint.*, sketch.delete…)
Center Point Arc
Command group: SKETCH › CREATE
Read the sketching and constraints guide.
Automation details
Command ID: sketch.arc.center_point
Parameters:
center, start, end (counter-clockwise from start) | center, start, sweep: signed degrees; construction?: bool; connect?: bool (default true: a new point landing exactly on an existing point, the origin too, is made coincident with it). Returns created: {points, curves, constraints, dimensions}: the ids of what it added (stable and never reused: usable right away in sketch.dimension, sketch.constraint.*, sketch.delete…)
Inscribed Polygon
Command group: SKETCH › CREATE
Read the sketching and constraints guide.
Automation details
Command ID: sketch.polygon.inscribed
Parameters:
center, radius (to vertices), sides, angle?: deg; connect?: bool (default true: a new point landing exactly on an existing point, the origin too, is made coincident with it). Returns created: {points, curves, constraints, dimensions}: the ids of what it added (stable and never reused: usable right away in sketch.dimension, sketch.constraint.*, sketch.delete…)
Circumscribed Polygon
Command group: SKETCH › CREATE
Read the sketching and constraints guide.
Automation details
Command ID: sketch.polygon.circumscribed
Parameters:
center, radius (to edge midpoints), sides, angle?: deg; connect?: bool (default true: a new point landing exactly on an existing point, the origin too, is made coincident with it). Returns created: {points, curves, constraints, dimensions}: the ids of what it added (stable and never reused: usable right away in sketch.dimension, sketch.constraint.*, sketch.delete…)
Edge Polygon
Command group: SKETCH › CREATE
Read the sketching and constraints guide.
Automation details
Command ID: sketch.polygon.edge
Parameters:
p0, p1: one edge, sides; connect?: bool (default true: a new point landing exactly on an existing point, the origin too, is made coincident with it). Returns created: {points, curves, constraints, dimensions}: the ids of what it added (stable and never reused: usable right away in sketch.dimension, sketch.constraint.*, sketch.delete…)
Center to Center Slot
Command group: SKETCH › CREATE
Read the sketching and constraints guide.
Automation details
Command ID: sketch.slot.center_to_center
Parameters:
p0, p1: arc centres, width; connect?: bool (default true: a new point landing exactly on an existing point, the origin too, is made coincident with it). Returns created: {points, curves, constraints, dimensions}: the ids of what it added (stable and never reused: usable right away in sketch.dimension, sketch.constraint.*, sketch.delete…)
Overall Slot
Command group: SKETCH › CREATE
Read the sketching and constraints guide.
Automation details
Command ID: sketch.slot.overall
Parameters:
p0, p1: overall ends, width; connect?: bool (default true: a new point landing exactly on an existing point, the origin too, is made coincident with it). Returns created: {points, curves, constraints, dimensions}: the ids of what it added (stable and never reused: usable right away in sketch.dimension, sketch.constraint.*, sketch.delete…)
Point
Command group: SKETCH › CREATE
Read the sketching and constraints guide.
Automation details
Command ID: sketch.point
Parameters:
point: [x,y] (each a number or an expression over the design's parameters: the point is then fixed where it comes to and follows them) or a snap: "mid:<line>" (held at the line's midpoint), "on:<curve>:x,y" (on the curve near x,y), {vertex: [x,y,z]} or {on_edge: [x,y,z]} of the model; id?; connect?: bool (default true: a new point landing exactly on an existing point, the origin too, is made coincident with it). Returns created: {points, curves, constraints, dimensions}: the ids of what it added (stable and never reused: usable right away in sketch.dimension, sketch.constraint.*, sketch.delete…)
Sketch Dimension
Command group: SKETCH › CREATE
Default keyboard shortcut: D
Read the sketching and constraints guide.
Automation details
Command ID: sketch.dimension
Parameters:
entities: [refs] (a line midpoint is "mid:line_id"), type?: auto|distance|horizontal|distance_x|vertical|distance_y|length|radius|diameter|angle, value?: number or expression (default: current; a bare number is in the design's units, e.g. 2 means 2 in in an inch design; give a unit such as "50 mm" to override), or `name = expression` (e.g. "width = 40"; also `#name = expression`), which adds the user parameter `name` with that expression and dimensions with `name` (refused when the name is taken or reserved; the reply's `defined` names it); text_at?: [x, y]. Two points or a line off the axes: with auto, text_at across from them is the distance between them, above or below them horizontal, beside them vertical. Two midpoints: placing text above or below their bounding box measures horizontally, beside it vertically. Two lines: the angle between them (acute, or 180° − it when the value is nearer that) unless text_at picks a sector. A line and a circle or arc: the distance from the line to its edge (the gap, or how far the edge reaches past a line that cuts it; 0 is tangent); dimension the centre point for the distance to the centre. A point and a circle or arc: the distance from the point to its edge (or how far within it a point inside lies). Two circles or arcs: the gap between their edges (or how far they overlap when they cross, or the narrowest gap between them when one lies inside the other); dimension their centre points for the distance between centres. An arc and one of its end points: the arc's length (type arc_length does it from the arc alone). A dimension the sketch already determines is refused (naming what determines it); if_redundant?: "driven" places it as a driven (reference) dimension instead. scale_sketch?: bool (the dimension tool sends true): when this is the sketch's first length dimension and nothing in the sketch fixes a size (no other driving length dimension, nothing fixed or projected), the whole sketch scales about its origin to the value instead of distorting. Returns measured in unit (mm or deg), and scaled: the factor when the sketch was scaled
Normal/Construction
Command group: SKETCH › CREATE
Default keyboard shortcut: X
Read the sketching and constraints guide.
Automation details
Command ID: sketch.construction
Parameters:
curves: [ids], value?: bool (default: construction unless all of them already are)
Midpoint Line
Command group: SKETCH › CREATE
Read the sketching and constraints guide.
Automation details
Command ID: sketch.line.midpoint
Parameters:
mid: [x,y], point ref or snap ("mid:<line>", "on:<curve>:x,y", model vertex/edge); end: [x,y]; construction?. Returns created: {points, curves, constraints, dimensions}: the ids of what it added (stable and never reused: usable right away in sketch.dimension, sketch.constraint.*, sketch.delete…)
Tangent Arc
Command group: SKETCH › CREATE
Read the sketching and constraints guide.
Automation details
Command ID: sketch.arc.tangent
Parameters:
start: end point of a line or arc ("l1.end"), end: [x,y]; curve?: the curve to be tangent to (default: the one ending at start). Returns created: {points, curves, constraints, dimensions}: the ids of what it added (stable and never reused: usable right away in sketch.dimension, sketch.constraint.*, sketch.delete…)
2-Tangent Circle
Command group: SKETCH › CREATE
Read the sketching and constraints guide.
Automation details
Command ID: sketch.circle.two_tangent
Parameters:
curves: [two lines/circles/arcs], radius | diameter: expr, near: [x,y] (which of the solutions). Returns created: {points, curves, constraints, dimensions}: the ids of what it added (stable and never reused: usable right away in sketch.dimension, sketch.constraint.*, sketch.delete…)
3-Tangent Circle
Command group: SKETCH › CREATE
Read the sketching and constraints guide.
Automation details
Command ID: sketch.circle.three_tangent
Parameters:
curves: [three lines/circles/arcs], near: [x,y] (which of the solutions). Returns created: {points, curves, constraints, dimensions}: the ids of what it added (stable and never reused: usable right away in sketch.dimension, sketch.constraint.*, sketch.delete…)
Center Point Slot
Command group: SKETCH › CREATE
Read the sketching and constraints guide.
Automation details
Command ID: sketch.slot.center_point
Parameters:
center: slot centre, end: one arc centre, width. Returns created: {points, curves, constraints, dimensions}: the ids of what it added (stable and never reused: usable right away in sketch.dimension, sketch.constraint.*, sketch.delete…)
Three Point Arc Slot
Command group: SKETCH › CREATE
Read the sketching and constraints guide.
Automation details
Command ID: sketch.slot.arc_three_point
Parameters:
start, through, end: points on the centre arc, width. Returns created: {points, curves, constraints, dimensions}: the ids of what it added (stable and never reused: usable right away in sketch.dimension, sketch.constraint.*, sketch.delete…)
Center Point Arc Slot
Command group: SKETCH › CREATE
Read the sketching and constraints guide.
Automation details
Command ID: sketch.slot.arc_center
Parameters:
center, start: centre arc start, end: direction of the centre arc end (counter-clockwise) or sweep: degrees (0 < sweep < 360), width; returns centre_arc. Returns created: {points, curves, constraints, dimensions}: the ids of what it added (stable and never reused: usable right away in sketch.dimension, sketch.constraint.*, sketch.delete…)
Ellipse
Command group: SKETCH › CREATE
Read the sketching and constraints guide.
Automation details
Command ID: sketch.ellipse
Parameters:
center, major: end of the major axis [x,y], minor: a point the ellipse passes through on the minor side [x,y] | minor_radius. Returns created: {points, curves, constraints, dimensions}: the ids of what it added (stable and never reused: usable right away in sketch.dimension, sketch.constraint.*, sketch.delete…)
Fit Point Spline
Command group: SKETCH › CREATE
Read the sketching and constraints guide.
Automation details
Command ID: sketch.spline.fit_point
Parameters:
points: [[x,y] or point refs…] (2…500): the spline passes through them, periodic?: boolean (default false); periodic cubic fit closes smoothly through at least 3 distinct samples. Returns created: {points, curves, constraints, dimensions}: the ids of what it added (stable and never reused: usable right away in sketch.dimension, sketch.constraint.*, sketch.delete…)
Control Point Spline
Command group: SKETCH › CREATE
Read the sketching and constraints guide.
Automation details
Command ID: sketch.spline.control_point
Parameters:
points: control points (2…500), cubic. Returns created: {points, curves, constraints, dimensions}: the ids of what it added (stable and never reused: usable right away in sketch.dimension, sketch.constraint.*, sketch.delete…)
Control Point Spline (Degree 5)
Command group: SKETCH › CREATE
Read the sketching and constraints guide.
Automation details
Command ID: sketch.spline.control_point_5
Parameters:
points: control points (2…500), degree 5. Returns created: {points, curves, constraints, dimensions}: the ids of what it added (stable and never reused: usable right away in sketch.dimension, sketch.constraint.*, sketch.delete…)
Conic Curve
Command group: SKETCH › CREATE
Read the sketching and constraints guide.
Automation details
Command ID: sketch.conic
Parameters:
start, end, apex: [x,y] or point refs; rho?: 0…1 (default 0.5: parabola). Returns created: {points, curves, constraints, dimensions}: the ids of what it added (stable and never reused: usable right away in sketch.dimension, sketch.constraint.*, sketch.delete…)
Centerline
Command group: SKETCH › CREATE
Read the sketching and constraints guide.
Automation details
Command ID: sketch.centerline
Parameters:
curves: [line ids], value?: bool (default toggles): centerline line type (not in profiles; an axis)
Text
Command group: SKETCH › CREATE
Read the sketching and constraints guide.
Automation details
Command ID: sketch.text
Parameters:
text: string (\n breaks lines), or text_expression: the words built from text parameters (parameters.add with unit text) and quoted texts joined by + ("Label + '-L'"): the text keeps it, its words follow the parameters (a parameter edit or a configuration row relabels it) and `exprs` returns it as `text`; at: baseline start [x,y], height?: capital height mm (default 5), angle?: deg; at's x and y, height and angle each take a number or an expression over the design's parameters as a string ("plate_width / 2", "label_size"): the text keeps the expression, follows the parameters, and returns it in `exprs`; an expression naming no parameter is the number it comes to, a bare number in one is in the design's units, font?: an installed font's family or full name, or a .ttf/.otf file path (~ and %VAR% expand; default: the built-in Liberation Sans), bold?, italic?: bool (an installed family's bold or italic face; italic without one is slanted), align?: left|center|right (the lines against `at`, or along the path), letter_spacing?: extra mm between letters, line_spacing?: times the font's line distance (default 1), path?: a curve id of the sketch the baseline follows ("": none; `at` and `angle` then do not place the text; the curve becomes construction, a guide the letters stand on), reverse?: bool (the other way along the path). Returns created: {points, curves, constraints, dimensions}: the ids of what it added (stable and never reused: usable right away in sketch.dimension, sketch.constraint.*, sketch.delete…)
Sketch Constrainer
Command group: SKETCH › CREATE
Read the sketching and constraints guide.
Automation details
Command ID: sketch.constrainer
Parameters:
entities: [one or two sketch entity ids]: applies the constraint the geometry nearly has (horizontal/vertical, parallel, perpendicular, collinear, coincident, concentric, equal, tangent)
Project
Command group: SKETCH › CREATE
Default keyboard shortcut: P
Read the sketching and constraints guide.
Automation details
Command ID: sketch.project
Parameters:
refs: [{edge: [x,y,z], body?} | {face: [x,y,z], body?} (its edge loops) | {body: name} (silhouette) | {vertex: [x,y,z], body?} | {sketch, curve} | {sketch, point} | "origin" | {axis: X|Y|Z} | {plane: XY|XZ|YZ|name}]. Returns created: {points, curves, constraints, dimensions}: the ids of what it added (stable and never reused: usable right away in sketch.dimension, sketch.constraint.*, sketch.delete…)
Intersect
Command group: SKETCH › CREATE
Read the sketching and constraints guide.
Automation details
Command ID: sketch.intersect
Parameters:
refs: [{body}, {face: [x,y,z], body?}, {edge: [x,y,z], body?}, {sketch, curve}]: section curves (or points) with the sketch plane, linked. Returns created: {points, curves, constraints, dimensions}: the ids of what it added (stable and never reused: usable right away in sketch.dimension, sketch.constraint.*, sketch.delete…)
Include 3D Geometry
Command group: SKETCH › CREATE
Read the sketching and constraints guide.
Automation details
Command ID: sketch.include_3d
Parameters:
refs: like Project (edges, vertices, sketch curves and points); curves out of the sketch plane are flattened onto it. Returns created: {points, curves, constraints, dimensions}: the ids of what it added (stable and never reused: usable right away in sketch.dimension, sketch.constraint.*, sketch.delete…)
Project To Surface
Command group: SKETCH › CREATE
Read the sketching and constraints guide.
Automation details
Command ID: sketch.project_to_surface
Parameters:
curves: [{sketch, curve}…] (curves of other sketches), face: [x,y,z] point on the target face, body?: projected along the active sketch's normal onto the face, as linked 3D curves. Returns created: {points, curves, constraints, dimensions}: the ids of what it added (stable and never reused: usable right away in sketch.dimension, sketch.constraint.*, sketch.delete…)
Intersection Curve
Command group: SKETCH › CREATE
Read the sketching and constraints guide.
Automation details
Command ID: sketch.intersection_curve
Parameters:
a, b: {body} | {face: [x,y,z], body?}: where they meet, as linked 3D curves. Returns created: {points, curves, constraints, dimensions}: the ids of what it added (stable and never reused: usable right away in sketch.dimension, sketch.constraint.*, sketch.delete…)
Spun Profile
Command group: SKETCH › CREATE
Read the sketching and constraints guide.
Automation details
Command ID: sketch.spun_profile
Parameters:
body: name, axis: a line of the active sketch (curve id) | X|Y|Z: the body's outline revolved about the axis, in the sketch plane. Returns created: {points, curves, constraints, dimensions}: the ids of what it added (stable and never reused: usable right away in sketch.dimension, sketch.constraint.*, sketch.delete…)
Isoparametric Curve
Command group: SKETCH › CREATE
Read the sketching and constraints guide.
Automation details
Command ID: sketch.isoparametric_curve
Parameters:
face: [x,y,z] point on the face (the curve passes through it), body?, direction?: u|v|[x,y,z] (default u): linked 3D curve. Returns created: {points, curves, constraints, dimensions}: the ids of what it added (stable and never reused: usable right away in sketch.dimension, sketch.constraint.*, sketch.delete…)
Fit Curves to Mesh Section
Command group: SKETCH › CREATE
Read the sketching and constraints guide.
Automation details
Command ID: sketch.fit_curves_to_section
Parameters:
body: name (a mesh or solid body): its section with the sketch plane, fitted with lines and arcs, as normal (unlinked) geometry. Returns created: {points, curves, constraints, dimensions}: the ids of what it added (stable and never reused: usable right away in sketch.dimension, sketch.constraint.*, sketch.delete…)
SKETCH › CONSTRAINTS
Horizontal/Vertical
Command group: SKETCH › CONSTRAINTS
Read the sketching and constraints guide.
Automation details
Command ID: sketch.constraint.horizontal_vertical
Parameters:
line: id | points: [a, b] (point ids or {midpoint: line_id}; accepted midpoints reuse or create a point with a Midpoint constraint); mode?: horizontal|vertical
Coincident
Command group: SKETCH › CONSTRAINTS
Read the sketching and constraints guide.
Automation details
Command ID: sketch.constraint.coincident
Parameters:
a, b: points, a point and a curve or sketch axis (x / y: the sketch's own axes, unless a curve has that id; an axis becomes a linked construction line on it, reported in created), or two distinct lines (joins their closest endpoints), or two circles/arcs (the second lies on the first: concentric and equal, `constraints` lists both); any of them may be a model edge {edge: [x,y,z], body?} or vertex {vertex: [x,y,z], body?}, projected into the sketch first (reported in created)
Tangent
Command group: SKETCH › CONSTRAINTS
Read the sketching and constraints guide.
Automation details
Command ID: sketch.constraint.tangent
Parameters:
a, b: curves or sketch axes (x / y: the sketch's own axes, unless a curve has that id; an axis becomes a linked construction line on it, reported in created); any of them may be a model edge {edge: [x,y,z], body?} or vertex {vertex: [x,y,z], body?}, projected into the sketch first (reported in created)
Equal
Command group: SKETCH › CONSTRAINTS
Read the sketching and constraints guide.
Automation details
Command ID: sketch.constraint.equal
Parameters:
a, b: lines or circles/arcs; or curves: [2 to 200 lines or circles/arcs], each made equal to the first, in one step; any of them may be a model edge {edge: [x,y,z], body?} or vertex {vertex: [x,y,z], body?}, projected into the sketch first (reported in created)
Parallel
Command group: SKETCH › CONSTRAINTS
Read the sketching and constraints guide.
Automation details
Command ID: sketch.constraint.parallel
Parameters:
a, b: lines or sketch axes (x / y: the sketch's own axes, unless a curve has that id; an axis becomes a linked construction line on it, reported in created); any of them may be a model edge {edge: [x,y,z], body?} or vertex {vertex: [x,y,z], body?}, projected into the sketch first (reported in created)
Perpendicular
Command group: SKETCH › CONSTRAINTS
Read the sketching and constraints guide.
Automation details
Command ID: sketch.constraint.perpendicular
Parameters:
a, b: lines or sketch axes (x / y: the sketch's own axes, unless a curve has that id; an axis becomes a linked construction line on it, reported in created); any of them may be a model edge {edge: [x,y,z], body?} or vertex {vertex: [x,y,z], body?}, projected into the sketch first (reported in created)
Fix/UnFix
Command group: SKETCH › CONSTRAINTS
Read the sketching and constraints guide.
Automation details
Command ID: sketch.constraint.fix
Parameters:
entity: point or curve | entities: [points and curves]; fixed?: bool (default: fix them all unless all are fixed, then unfix)
MidPoint
Command group: SKETCH › CONSTRAINTS
Read the sketching and constraints guide.
Automation details
Command ID: sketch.constraint.midpoint
Parameters:
point, line | a, b in pick order: a point and a line (either way round), or two lines whose midpoints meet (the first stays, the second moves); any of them may be a model edge {edge: [x,y,z], body?} or vertex {vertex: [x,y,z], body?}, projected into the sketch first (reported in created)
Concentric
Command group: SKETCH › CONSTRAINTS
Read the sketching and constraints guide.
Automation details
Command ID: sketch.constraint.concentric
Parameters:
a, b: circles/arcs; any of them may be a model edge {edge: [x,y,z], body?} or vertex {vertex: [x,y,z], body?}, projected into the sketch first (reported in created)
Collinear
Command group: SKETCH › CONSTRAINTS
Read the sketching and constraints guide.
Automation details
Command ID: sketch.constraint.collinear
Parameters:
a, b: lines or sketch axes (x / y: the sketch's own axes, unless a curve has that id; an axis becomes a linked construction line on it, reported in created); any of them may be a model edge {edge: [x,y,z], body?} or vertex {vertex: [x,y,z], body?}, projected into the sketch first (reported in created)
Symmetry
Command group: SKETCH › CONSTRAINTS
Read the sketching and constraints guide.
Automation details
Command ID: sketch.constraint.symmetry
Parameters:
a, b: two points or two curves (lines mirror their ends, circles/arcs their centres); line: symmetry line id, or x / y for the sketch's own axes (a curve with that id wins; an axis becomes a linked construction line on it, reported in created); or point (or a point id as line, "origin" too): symmetric about that point, each pair joined by a construction line it is the midpoint of; any of them may be a model edge {edge: [x,y,z], body?} or vertex {vertex: [x,y,z], body?}, projected into the sketch first (reported in created)
Curvature
Command group: SKETCH › CONSTRAINTS
Read the sketching and constraints guide.
Automation details
Command ID: sketch.constraint.curvature
Parameters:
a, b: two curves sharing an end point (curvature continuous, G2)
Polygon
Command group: SKETCH › CONSTRAINTS
Read the sketching and constraints guide.
Automation details
Command ID: sketch.constraint.polygon
Parameters:
lines: [line ids] of a closed chain: equal sides with every corner on one circle (a regular polygon)
AutoConstrain
Command group: SKETCH › CONSTRAINTS
Read the sketching and constraints guide.
Automation details
Command ID: sketch.auto_constrain
Parameters:
tolerance?: mm (default 0.01), angle_tolerance?: deg (default 1), dimensions?: bool (default true): infer constraints, then dimension until fully constrained
AutoConstrain from datum
Command group: SKETCH › CONSTRAINTS
Read the sketching and constraints guide.
Automation details
Command ID: sketch.auto_constrain_from_datum
Parameters:
datum: point ref (default origin); like AutoConstrain with positions measured from the datum
SKETCH › MODIFY
Blend Curve
Command group: SKETCH › MODIFY
Read the sketching and constraints guide.
Automation details
Command ID: sketch.blend_curve
Parameters:
a, b: end points of two curves ("l1.end", "a2.start"), continuity?: g1|g2|g3|g4 (default g1: a tangent spline; g2…g4 match the reference curves' curvature, curvature rate and 4th derivative as well, as one Bézier of degree 5, 7 or 9). Returns created: {points, curves, constraints, dimensions}: the ids of what it added (stable and never reused: usable right away in sketch.dimension, sketch.constraint.*, sketch.delete…)
Fillet
Command group: SKETCH › MODIFY
Read the sketching and constraints guide.
Automation details
Command ID: sketch.fillet
Parameters:
point: corner shared by two curves ("l1.end") | points: [corners] (all rounded alike: one radius, the rest equal) | a, b: two lines or arcs meeting at a corner; radius: expr. A corner that dimensions or constraints measure to stays as a virtual sharp corner on both curves' extensions (`virtual_corners`; the moved ones in `moved_to_virtual_corner`). Returns created: {points, curves, constraints, dimensions}: the ids of what it added (stable and never reused: usable right away in sketch.dimension, sketch.constraint.*, sketch.delete…)
Equal Distance Chamfer
Command group: SKETCH › MODIFY
Read the sketching and constraints guide.
Automation details
Command ID: sketch.chamfer.equal_distance
Parameters:
point | a, b: a corner of two lines; distance. Returns created: {points, curves, constraints, dimensions}: the ids of what it added (stable and never reused: usable right away in sketch.dimension, sketch.constraint.*, sketch.delete…)
Distance and Angle Chamfer
Command group: SKETCH › MODIFY
Read the sketching and constraints guide.
Automation details
Command ID: sketch.chamfer.distance_angle
Parameters:
point | a, b: a corner of two lines; distance: along a, angle: deg from a. Returns created: {points, curves, constraints, dimensions}: the ids of what it added (stable and never reused: usable right away in sketch.dimension, sketch.constraint.*, sketch.delete…)
Two Distance Chamfer
Command group: SKETCH › MODIFY
Read the sketching and constraints guide.
Automation details
Command ID: sketch.chamfer.two_distance
Parameters:
point | a, b: a corner of two lines; distance: along a, distance2: along b. Returns created: {points, curves, constraints, dimensions}: the ids of what it added (stable and never reused: usable right away in sketch.dimension, sketch.constraint.*, sketch.delete…)
Offset
Command group: SKETCH › MODIFY
Default keyboard shortcut: O
Read the sketching and constraints guide.
Automation details
Command ID: sketch.offset
Parameters:
curves: [ids], distance: number in mm or length expression (creates an editable dimension; positive = left of the chain, or toward `side`), side?: [x,y], chain?: bool (default true: the connected chain); direction?: one_side|symmetric (default one_side) or symmetric?: bool (the same distance each way; no `side`, whose job it takes over), distance2?: positive length expression (Two Sides: an independent distance the other way, as for `solid.extrude`). Each side is its own offset association, listed in `sides`; flip?: bool reverses the primary side; `param`/`param2` name the driving dimensions. Returns created: {points, curves, constraints, dimensions}: the ids of what it added (stable and never reused: usable right away in sketch.dimension, sketch.constraint.*, sketch.delete…)
Trim
Command group: SKETCH › MODIFY
Default keyboard shortcut: T
Read the sketching and constraints guide.
Automation details
Command ID: sketch.trim
Parameters:
curve: id, at: [x,y] (the piece to remove: between the nearest intersections around it). Returns created: {points, curves, constraints, dimensions}: the ids of what it added (stable and never reused: usable right away in sketch.dimension, sketch.constraint.*, sketch.delete…)
Extend
Command group: SKETCH › MODIFY
Read the sketching and constraints guide.
Automation details
Command ID: sketch.extend
Parameters:
curve: id, at: [x,y] near the end to extend (a line runs on to the nearest curve, or the previewed reach when nothing is in the way; an arc grows along its circle and closes into a whole circle when nothing stops it)
Break
Command group: SKETCH › MODIFY
Read the sketching and constraints guide.
Automation details
Command ID: sketch.break
Parameters:
curve: id, at: [x,y] (split at intersections) | points: [[x,y]…] (1…1000 positions projected onto the curve; duplicates are merged). Returns created: {points, curves, constraints, dimensions}: the ids of what it added (stable and never reused: usable right away in sketch.dimension, sketch.constraint.*, sketch.delete…)
Sketch Scale
Command group: SKETCH › MODIFY
Read the sketching and constraints guide.
Automation details
Command ID: sketch.scale
Parameters:
entities: [curve/point ids], base: [x,y] or point ref, factor: number
Transform
Command group: SKETCH › MODIFY
Default keyboard shortcut: G
Read the sketching and constraints guide.
Automation details
Command ID: sketch.transform
Parameters:
entities: [curve/point ids], factor?: number (scale), angle?: degrees (turn), center?: [x,y] or point ref (what scales and turns stay put; default [0,0]), translate?: [dx,dy] (applied last); scales, turns and moves in one step
Move/Copy Sketch Entities
Command group: SKETCH › MODIFY
Read the sketching and constraints guide.
Automation details
Command ID: sketch.move
Parameters:
entities: [ids], translate?: [dx,dy], angle?: deg, center?: [x,y], copy?: bool, rotate_constraints?: bool (default true; false keeps constraints unchanged); a rotation turns the constraints tied to the sketch axes when all their geometry moves (horizontal and vertical relations and dimensions swap at odd quarter turns and stay at half turns, line angles turn with the line) and removes the horizontal and vertical ones that cannot hold at other angles; picking a text outline or linked point transforms its whole text source once, and copies remain editable text. Returns created: {points, curves, constraints, dimensions}: the ids of what it added (stable and never reused: usable right away in sketch.dimension, sketch.constraint.*, sketch.delete…)
SKETCH › INSERT
Insert DXF
Command group: SKETCH › INSERT
Read the sketching and constraints guide.
Automation details
Command ID: sketch.insert_dxf
Parameters:
path | text: ASCII DXF (blocks expanded); at?: [x,y] offset, scale? | width? | height?: mm, the drawing's size before rotation, aspect kept (win over scale); angle?: degrees, about the drawing's origin (or its centre); align?: "origin" (default: `at` is where the file's origin goes) | "center" (`at` is where the drawing's middle goes and it turns and scales about it); tolerance?: mm within which ends join (default 0.0001); plane?: (when no sketch is active, a new sketch on it; default XY). Returns created: {points, curves, constraints, dimensions}: the ids of what it added (stable and never reused: usable right away in sketch.dimension, sketch.constraint.*, sketch.delete…)
Insert SVG
Command group: SKETCH › INSERT
Read the sketching and constraints guide.
Automation details
Command ID: sketch.insert_svg
Parameters:
path | text: SVG; at?: [x,y] offset, scale? | width? | height?: mm, the drawing's size before rotation, aspect kept (win over scale); angle?: degrees, about the drawing's origin (or its centre); align?: "origin" (default: `at` is where the file's origin goes) | "center" (`at` is where the drawing's middle goes and it turns and scales about it); tolerance?: mm within which ends join (default 0.0001); plane?: (when no sketch is active, a new sketch on it; default XY). Returns created: {points, curves, constraints, dimensions}: the ids of what it added (stable and never reused: usable right away in sketch.dimension, sketch.constraint.*, sketch.delete…)
Canvas
Command group: SKETCH › INSERT
Read the sketching and constraints guide.
Automation details
Command ID: canvas.insert
Parameters:
path | data (base64 PNG or JPEG); plane?: XY|XZ|YZ|{face: [x,y,z]}|… (default XY); center?: [x,y] on the plane, or at?: [x,y,z]; width?: mm (default 100); angle?: deg; opacity?: 0…1 (default 0.5); flip?; name?
Decal
Command group: SKETCH › INSERT
Read the sketching and constraints guide.
Automation details
Command ID: canvas.decal
Parameters:
path | data; face: [x,y,z] on a planar face (the image is centred there); width?: mm; angle?: deg; opacity?: (default 1)
Edit Canvas
Command group: SKETCH › INSERT
Read the sketching and constraints guide.
Automation details
Command ID: canvas.edit
Parameters:
canvas: id or name; center?, width?, angle?: deg, opacity?, flip?, visible?, name?
SKETCH › INSPECT
Curvature Comb Analysis
Command group: SKETCH › INSPECT
Read the sketching and constraints guide.
Automation details
Command ID: inspect.curvature_comb
Parameters:
curves?: [sketch curve ids] (sketch?: id|name, default active) | edges?: [[x,y,z] points on body edges] | faces?: [[x,y,z] points on faces] with count?: isoparametric curves each way (default 4; combs along the face's iso grid); density?: teeth per curve (default 40), scale?: comb length per unit curvature (default auto)
Minimum Radius Analysis
Command group: SKETCH › INSPECT
Read the sketching and constraints guide.
Automation details
Command ID: inspect.minimum_radius
Parameters:
curves?: [sketch curve ids] (sketch?) | edges?: [[x,y,z]…] | faces?: [[x,y,z]…] (default: every face of every body); the smallest radius of curvature of each and where it is
Isocurve Analysis
Command group: SKETCH › INSPECT
Read the sketching and constraints guide.
Automation details
Command ID: inspect.isocurve
Parameters:
faces: [[x,y,z]…] points on faces; count?: curves each way (default 8): the faces' isoparametric curves
Center of Mass
Command group: SKETCH › INSPECT
Read the sketching and constraints guide.
Automation details
Command ID: inspect.center_of_mass
Parameters:
bodies?: [names] (default all): the centre of mass (uniform density) of each and of all together
Zebra Analysis
Command group: SKETCH › INSPECT
Read the sketching and constraints guide.
Automation details
Command ID: inspect.zebra
Parameters:
stripes?: number across the view (default 12); clear?: true turns the analysis off
Draft Analysis
Command group: SKETCH › INSPECT
Read the sketching and constraints guide.
Automation details
Command ID: inspect.draft
Parameters:
pull?: [x,y,z] direction (default Z); angle?: degrees (default 1); clear?: true turns the analysis off
Environment Map Analysis
Command group: SKETCH › INSPECT
Read the sketching and constraints guide.
Automation details
Command ID: inspect.environment_map
Parameters:
clear?: true turns the analysis off
Accessibility Analysis
Command group: SKETCH › INSPECT
Read the sketching and constraints guide.
Automation details
Command ID: inspect.accessibility
Parameters:
direction?: [x,y,z] the tool comes from (default Z, from above); clear?: true turns the analysis off
Curvature Map Analysis
Command group: SKETCH › INSPECT
Read the sketching and constraints guide.
Automation details
Command ID: inspect.curvature_map
Parameters:
radius?: mm shown red (default: a tenth of the model's size); clear?: true turns the analysis off
SKETCH › PATTERN
Mirror
Command group: SKETCH › PATTERN
Read the sketching and constraints guide.
Automation details
Command ID: sketch.mirror
Parameters:
entities: [curve/point ids], line: mirror line id (symmetry constraints are added). Returns created: {points, curves, constraints, dimensions}: the ids of what it added (stable and never reused: usable right away in sketch.dimension, sketch.constraint.*, sketch.delete…)
Circular Pattern
Command group: SKETCH › PATTERN
Read the sketching and constraints guide.
Automation details
Command ID: sketch.pattern.circular
Parameters:
entities: [ids], center: [x,y] or point ref, count: 2…500 (number or unitless expression, retained through edits), angle?: total deg, number or expression (default 360); alignment?: left|center|right (default right); reversed?: bool (default false). Quantity includes the original. Center balances copies around it; reversed flips the direction and extra side for even totals. Partial arcs span angle with angle/(count-1) spacing; full turns use angle/count. Adds associative pattern constraints; a coordinate center creates a constrainable point. Returns pattern and center ids. pattern?: existing pattern id to edit (omitted values retained; surviving instance ids retained). Returns created: {points, curves, constraints, dimensions}: the ids of what it added (stable and never reused: usable right away in sketch.dimension, sketch.constraint.*, sketch.delete…)
Rectangular Pattern
Command group: SKETCH › PATTERN
Read the sketching and constraints guide.
Automation details
Command ID: sketch.pattern.rectangular
Parameters:
entities: [ids], count, spacing; count2?, spacing2?; counts: positive integer numbers or expressions, at most 500 instances total; spacings: length numbers or expressions; direction?, direction2?: sketch line ids (live references); dir?, dir2?: [x,y] vectors (defaults: sketch x, perpendicular to direction 1); alignment?, alignment2?: left|center|right (default right). Signed spacings reverse each direction. reversed?, reversed2?: bool (default false); reverses placement and the extra side of even centered totals. Quantities include the original. Adds associative pattern constraints. Returns pattern id. pattern?: existing pattern id to edit (omitted values retained; surviving instance ids retained). Returns created: {points, curves, constraints, dimensions}: the ids of what it added (stable and never reused: usable right away in sketch.dimension, sketch.constraint.*, sketch.delete…)
SURFACE › INSPECT
Continuity Analysis
Command group: SURFACE › INSPECT
Read the solid features guide.
Automation details
Command ID: inspect.continuity
Parameters:
body?: name (default: the visible bodies); edges?: [x,y,z] points or {"index": i} (default: every edge of the body; a pick must match one body); samples?: 3…257 stations along each edge, ends included (default 33); gap_tolerance_mm? (default 0.001), angle_tolerance_deg? (default 1), curvature_tolerance_per_mm? (default 0.01); add?: true keeps the seams already shaded and adds these (measuring an edge again replaces it); clear?: true turns the analysis off. → each edge's worst gap (G0), normal angle (G1) and curvature jump (G2) as {value, at: [x,y,z], edge_fraction}, its verdict (smooth, curvature_jump, sharp or gap) and a summary; the seams are shaded in the viewport
SURFACE › CREATE
Boundary Surface
Command group: SURFACE › CREATE
Read the solid features guide.
Automation details
Command ID: surface.boundary
Parameters:
Either a loop of one sketch's curves — sketch?: id|name (default: the sketch being edited); curves: [2 to 4 sketch curve ids in loop order] (each one ends where the next begins and the last where the first does; two: the patch spans between them and leaves each boundary along the tangent across it; three or four: the flat patch of the loop, three collapsing the side opposite the first curve to the corner there); continuity?: g0|g1|g2|g3 | [one per curve] (default g1: how much of the surface across each boundary the patch repeats — a sketch curve's own plane, so g1 and up hold exactly and g0 lets the middle bow); crown?: number -0.9…3 (default 0: how full the middle is, without touching a boundary; two curves only); samples?: 8…512 stations per boundary (default 25) — or a curve network — u: [curve] (two or more one way: the surface lofts through them), v?: [curve] (crossing every u-curve once: two each way give a Coons patch, more a Gordon surface through every curve; a curve that misses another by more than 0.01 mm is refused, naming the pair), each curve "id" (a curve of `sketch`) | {sketch?: id|name, curves: [ids meeting end to end]} (planar or 3D sketch curves) | {body: name, edges: [[x,y,z]] (points on a chain of its edges), continuity?: g0|g1|g2 (default g0; g1 the surface leaves tangent to the face beside a surface's open edges, g2 with its curvature too; on curves of one direction only)} | {point: [x,y,z]} (a side collapsed to a point: a three-sided patch); operation?: new|join (default new; join sews the surface into the body of its first edge curve, a solid when it closes the gap). name?, body_name? (a surface body)
Patch
Command group: SURFACE › CREATE
Read the solid features guide.
Automation details
Command ID: surface.patch
Parameters:
sketch?: id|name and profiles? (planar patches of sketch regions) | edges: [[x,y,z]] (points on a closed loop of a body's edges: one face on them, planar when the loop is, else a smooth B-spline surface) and body?; continuity?: g0|g1|g2 (edges only, default g0: how the patch meets the faces beside the loop — g1 their tangent planes, g2 also their curvature across the edges) or [{edge: [x,y,z], g: g0|g1|g2}] (those edges so, the rest g0) or {all, edges}; points?: [[x,y,z]] (edges only, up to 64: points the patch passes through); crown?: number −0.9…3 (default 0: only a fitted patch, whose middle becomes fuller by this many times the loop's size — the bump vanishes on the loop, so the face still meets the picked edges and the continuity across them; a loop that is planar and g0 is the exact plane whatever the crown; with points, crown needs a g1 or g2 edge); name?, body_name?
Thicken
Command group: SURFACE › CREATE
Read the solid features guide.
Automation details
Command ID: surface.thicken
Parameters:
bodies: [surface names]; thickness: expr (negative: against the normal); symmetric?: bool; operation?: new|join|cut|intersect; targets?
Surface Extrude
Command group: SURFACE › CREATE
Read the solid features guide.
Automation details
Command ID: surface.extrude
Parameters:
sketch?: id|name; curves?: [curve ids] (open or closed chains of curves meeting end to end) and/or profiles? (their boundaries; the default when no curves are given); distance: expr; direction?: positive|negative|symmetric; distance2?: expr; start_offset?: expr; name?, body_name? (a surface body: walls only, no caps)
Surface Revolve
Command group: SURFACE › CREATE
Read the solid features guide.
Automation details
Command ID: surface.revolve
Parameters:
sketch?: id|name; curves?: [curve ids] and/or profiles? (as surface.extrude); axis: sketch line id|x|y|X|Y|Z|{type: world, axis: X|Y|Z}|construction axis name|{origin, dir} | {edge|face: [x,y,z]} (a straight or circular edge, or a cylinder, cone or torus face: about its axis, followed as the model changes); angle?: expr (default 360 deg); angle2?: expr (the other side); symmetric?: bool; name?, body_name? (a surface body, no caps; a solid where a full turn closes it)
Surface Sweep
Command group: SURFACE › CREATE
Read the solid features guide.
Automation details
Command ID: surface.sweep
Parameters:
sketch?: id|name; curves?: [curve ids] and/or profiles? (as surface.extrude); path_sketch: sketch; path: [curve ids in order] (a path with corners, or 3D curves, gives ruled walls mitred at the corners); orientation?, twist?, scale?, rails?, rail_fit? (as solid.sweep); name?, body_name? (a surface body, no caps)
Surface Loft
Command group: SURFACE › CREATE
Read the solid features guide.
Automation details
Command ID: surface.loft
Parameters:
sections: [{sketch, curves?: [curve ids], profiles?} | {body, edges: [[x,y,z]]}] (2…50 in order; each one chain: a profile without holes, or curves meeting end to end; all open or all closed; a body edge chain takes the face the chain bounds as the surface the end repeats); continuity?: [g0|g1|g2|g3, g0|g1|g2|g3] (each end, default g0: how much of the surface at the first and last section the loft repeats — the tangent plane, the curvature, or how that curvature changes); crown?: [number, number] (default 0: how full each end leaves, -0.9 flattest to 3 fullest); rails?, rail_fit? (as solid.loft; sketch sections only, both ends g0); name?, body_name? (a surface body: ruled between two sections, smooth through three or more; no caps)
Offset Surface
Command group: SURFACE › CREATE
Read the solid features guide.
Automation details
Command ID: surface.offset
Parameters:
faces: [[x,y,z]] (points on the faces); body?; distance: expr (signed, along the faces' normals; 0 copies the faces); chain?: bool (each pick's whole smooth chain of faces); tolerance?: expr (how far a fitted face may stray, default 0.01 mm). Planes and cylinders move exactly; other faces are fitted. A new surface body (a solid where its faces close)
Ruled Surface
Command group: SURFACE › CREATE
Read the solid features guide.
Automation details
Command ID: surface.ruled
Parameters:
body; edges: [[x,y,z]] (points on a chain of its edges, open or closed); distance: expr (how far the strip reaches); mode?: normal|tangent|angle|direction (default normal: along the normal of the face beside each edge; tangent: continuing it); angle?: expr (angle mode: from `direction`, else from the face's normal, turned away from the face; 90 deg from the normal is tangent); direction?: [x,y,z] (direction mode: the rulings; angle mode: the reference, e.g. a pull direction for a draft); face?: [x,y,z] (a point on the face the directions come from; default: the face beside the most picked edges); flip?: bool (the other side); corners?: mitre|round (sharp corners of the chain; inside corners are always cut back). Lines and arcs give exact planes, cylinders and cones, other edges a fitted ruled B-spline. A new surface body
Blend Surface
Command group: SURFACE › CREATE
Read the solid features guide.
Automation details
Command ID: surface.blend
Parameters:
from, to: {body, edges: [[x,y,z]]} (points on the edges of one chain of each body: two picks on the same edge is that one edge, more chain up); continuity?: [g0|g1|g2|g3, g0|g1|g2|g3] (each end, default g1: how much of the surface at the picked edges the blend repeats — the tangent plane, the curvature, or how that curvature changes); bulge?: [number, number] (default 0: how full each end leaves, -0.9 flattest to 3 fullest); align?: [[x,y,z], [x,y,z]] (a point each end leaves towards, when the faces at the picks do not say); seam?: [[x,y,z], [x,y,z]] (a point on each chain its stations start from: two closed chains otherwise pair the way that keeps the blend from twisting; an open chain starts at the end nearer its point; a closed chain blends only to a closed chain); stitch?: bool (sew the blend onto its two bodies where the boundaries meet, replacing them); name?, body_name?
SURFACE › MODIFY
Stitch
Command group: SURFACE › MODIFY
Read the solid features guide.
Automation details
Command ID: surface.stitch
Parameters:
bodies: [names] (surfaces sewn into the first; a solid when they close); tolerance?: expr (default: tight)
Extend
Command group: SURFACE › MODIFY
Read the solid features guide.
Automation details
Command ID: surface.extend
Parameters:
body: surface name; edges: [[x,y,z]] (points on boundary edges to push out); distance: expr (unless up_to); mode?: natural (the surface itself continued: exact for planes and surfaces of revolution, a B-spline's end spans continued; the default) | tangent (a ruled run-off face along each edge, G1) | curvature (a run-off face keeping the surface's curvature across the edge, G2); up_to?: plane (XY|XZ|YZ|plane name|{origin, normal}) | {body, point} (a face, its surface extended) | "bounds" (natural: back to the surface's own bounds, undoing a trim); neighbours?: bool (default true: the edges next to an extended edge are lengthened to meet it; false: the extension's sides run square to the edge)
Trim
Command group: SURFACE › MODIFY
Read the solid features guide.
Automation details
Command ID: surface.trim
Parameters:
body: surface name; plane: XY|XZ|YZ|plane name|{origin, normal} or tool: {body, point} (a face, its surface extended) or curves: {sketch, curves?: [curve ids] (chains of curves meeting end to end; default every curve), direction?: normal|[x,y,z] (swept onto the surface along the sketch's normal, the default, or this direction)}; keep: [x,y,z] (a point on the side to keep) or [[x,y,z], ...] (points on the regions to keep: the pieces that hang together once cut). Mutual trim: with: another surface (one face each; leave out plane, tool and curves), keep_with: [x,y,z] or [[x,y,z], ...] (what to keep of it); each is cut where the other's surface (extended) meets it; extend?: bool (a surface that stops short of the other is extended to meet it); stitch?: bool (the kept pieces sewn into `body`; `with` is then gone)
Untrim
Command group: SURFACE › MODIFY
Read the solid features guide.
Automation details
Command ID: surface.untrim
Parameters:
face: {body, point}; holes?: all|[[x,y,z]] (points on the inner loops to remove; default: all); outer?: bool (restore the outer boundary to the surface's natural bounds: a free-form surface's own, an analytic surface's span of the face); in_place?: bool (untrim a surface body's face where it is; a solid's face is always copied out). A surface body; the face keeps its name
Unstitch
Command group: SURFACE › MODIFY
Read the solid features guide.
Automation details
Command ID: surface.unstitch
Parameters:
body; faces?: [[x,y,z]] (points on the faces to take out, each its own surface body; the rest stay together under the body's name; default: every face its own surface body). A solid comes apart into surfaces
Reverse Normal
Command group: SURFACE › MODIFY
Read the solid features guide.
Automation details
Command ID: surface.reverse_normal
Parameters:
body (a surface); faces?: [[x,y,z]] (points on the faces to turn over; default: all of them)
Fair Surface
Command group: SURFACE › MODIFY
Read the solid features guide.
Automation details
Command ID: surface.fair
Parameters:
body: surface name; faces?: [[x,y,z]] points on the faces to fair (default: every face); strength?: number (0..1 of the full fairing step, default 1); iterations?: number (1..1000 steps, default 1); keep_edges?: bool (default true: hold the boundary row and the row next to it, so a face keeps meeting its neighbours in position and in tangent); tolerance?: expr mm (how far a control vertex may move, default 0.001 of the body's size). Moves the interior control vertices of each B-spline face to flatten its curvature variation while the boundary stays put: the face keeps its edges and the body its shape within the tolerance, and the warning in the reply carries the energy before and after; name?
Surface Fillet
Command group: SURFACE › MODIFY
Read the solid features guide.
Automation details
Command ID: surface.fillet
Parameters:
planned: a, b: {body, point} (two faces of separate bodies that meet or cross; the points pick the side the ball rolls on); radius: expr; trim?: both|first|none
Match Surface
Command group: SURFACE › MODIFY
Read the solid features guide.
Automation details
Command ID: surface.match
Parameters:
body: surface name (the body whose face is rebuilt); faces?: [[x,y,z]] (points on that face, default: the body's first); target: body name (the body the seam must meet); edges: [[x,y,z]] (points on one edge chain of the target: the rebuilt boundary takes its place); order?: g1|g2|g3 (default g2: position and tangent plane, the curvature too, or how that curvature changes along the seam). The far boundary stays where it was and the body keeps its name
SHEET METAL › CREATE
Flange
Command group: SHEET METAL › CREATE
Create a sheet metal base, bend an existing edge into a wall, or build a contour from an open sketch. The sheet metal rule supplies the material thickness and bend settings so the folded and flat versions describe the same part.
Before you start
| Flange type | What you need to select | Result |
|---|---|---|
| Base | A closed region in a finished sketch. | A new flat sheet metal body. |
| Edge | One or more supported edges of an existing sheet metal body. | Bent walls along those edges. A sketch is not required for this mode. |
| Contour | An open chain of straight sketch lines. | A sheet following that outline, extended by the chosen distance. |
Choose or create a Sheet Metal Rule before building the part. To work from an ordinary solid plate, use Convert to Sheet Metal first. An arbitrary solid edge does not become a sheet metal edge just by selecting Flange.
Options
| Choice | Meaning |
|---|---|
| Type | Base, Edge or Contour. The selection determines which input is appropriate. |
| Rule | Sets thickness, bend radius, K-factor and the gaps/reliefs that keep bends manufacturable. Change thickness in the rule, not as a flange height. |
| Height | Sets the edge flange’s height. Check the height reference and preview when matching a drawing dimension. |
| Angle | Sets how far the edge bends; 90° makes a right-angle wall. |
| Per-edge angle and height | Lets selected edges in one feature have different dimensions. Empty values use the common setting. |
| Position | Places the flange relative to the selected edge. The preview shows which material remains inside or outside the original outline. |
| Flip | Bends toward the other side of the sheet. |
| Corner Relief Shape and size | Use the rule’s setting or override relief between edge flanges of this feature. These overrides are not available for base or contour flanges. |
| Distance | Sets the length of a contour flange’s extrusion along the open sketch. |
Try it: two sides of a tray
- Set a sheet rule with 1.5 mm thickness and 1.5 mm bend radius.
- Draw and finish an 80 × 50 mm rectangular sketch.
- Choose Flange, select the rectangle’s region and make a Base flange.
- Choose Flange again, select an edge and set its height to 20 mm.
- Add another 20 mm flange on the opposite edge. Check the bend directions before confirming each feature.
- Use Create Flat Pattern to inspect the developed part and bend lines.
Tips and common mistakes
- Do use one edge flange feature for adjoining walls whose shared corners should close together. Flanges made as separate features keep their own ends.
- Do inspect warnings and the flat pattern; a relief that cannot fit may be left out with a warning.
- Don’t confuse height with sheet thickness. The rule owns thickness.
- Don’t select a sketch point for an edge flange: choose an edge of the sheet. For a base flange, select a closed sketch region instead.
Examples and community resources
| Resource | What to explore | Author and licence |
|---|---|---|
| Editable sheet metal demo | The rule, base sketch and two edge flanges used in this illustration. | SolidCraft contributors; MIT OR Apache-2.0. |
Contribute a tip, demo, model or screenshot, explaining the edge or region that must be selected.
See also
Hem returns an edge back toward the sheet. Fold bends a sheet along a chosen line. Sheet Metal Rules controls thickness and bend settings. Create Flat Pattern shows the developed part.
Automation details
Command ID: sheet.flange
Parameters:
base: sketch + profiles? (rule?, flip?) | contour: sketch + curves (open chain of lines) + distance (rule?, flip?, reverse?) | edge: edges: [[x,y,z] on top/bottom edges, or {point: [x,y,z], angle?, height?} for an edge with its own angle and height] + height (along the flange, to its far edge), angle? (default 90 deg), radius? (default: rule), height_from?: outer|inner|tangent (where the height is measured from: the outer virtual sharp (default), the inner virtual sharp, or past 90 deg the line square to the flange touching the bend's outside (tangent; up to 90 deg the outer sharp)), position?: inside|outside|middle|material_outside|tangent (where the bend starts: the outer virtual sharp on the edge (default), the bend starting at the edge (bend_outside is the same), half way, the inner virtual sharp on the edge, or the bend's outer face tangent to the edge's face (below 90 deg the bend's end on that face)), flip?, body?, corner_relief_shape?: notch|round|rectangular|tear and corner_relief? (size across): the relief at the corners these flanges make (default: the rule's); then?: [{angle?, height, flip?}] further bends (at most 16), each a flange on the far edge of the one before, flip: true turns that bend the other way (edge only); type?: base|edge|contour (default from the inputs); name?, body_name? (the new body). Thickness, K-factor and bend radius come from the rule (sheet.manage_rules); passing them here is refused, and so is the corner relief on a base or contour flange
Path Flange
Command group: SHEET METAL › CREATE
Read the sheet metal guide.
Automation details
Command ID: sheet.path_flange
Parameters:
edge: [x,y,z] on a top or bottom edge of the sheet; sketch + curves: an open chain of sketch lines drawn on a plane across that edge, from the edge out (each line one flange as long as the line, to the outer face from the virtual sharp; each corner one bend, turning the way the lines turn); radius? (default: rule); body?. One feature, one body
Perforate
Command group: SHEET METAL › CREATE
Read the sheet metal guide.
Automation details
Command ID: sheet.perforate
Parameters:
diameter, pitch: expr; margin?: expr (clear of edges, cut-outs and bends; default: the diameter); pattern?: staggered (60°, default) | square; body? - a perforation field over the whole flat sheet: holes in the flat pattern (perforations), the DXF (layer PERFORATION) and the measured volume, not cut into the B-rep (#732)
Hem
Command group: SHEET METAL › CREATE
Fold a sheet metal edge back through a half turn to form a return. Use a hem when you need a doubled-over edge, rather than an upright wall.
Before you start
- You need an existing sheet metal body and a supported free sheet edge. Make a base flange or convert a suitable solid plate first.
- Select the edge, not a sketch line, face or point. Hem does not require a new sketch. A bend along a line inside the sheet uses Fold instead.
- Leave room for the return so it does not run into another wall or return.
Options
| Choice | Meaning |
|---|---|
| Edges | The sheet edges to turn back. Check that the preview changes the intended edge. |
| Length | The return’s length, measured to its outer face. It is not the thickness of the sheet. |
| Gap | Controls the inner radius of the return bend. Leave it empty to use the sheet rule’s hem setting. |
| Flip | Turns the return toward the other side of the sheet. |
Try it: a returned edge
- Create an 80 × 50 mm base flange in 1.5 mm sheet.
- Choose Hem and select a free 80 mm edge of the sheet.
- Set Length to 8 mm and Gap to 1.5 mm.
- Check which side receives the return; use Flip if necessary, then confirm.
- Inspect Create Flat Pattern to see the material needed for the bend.
Tips and common mistakes
- Do check the bend in the preview: an edge returning toward another feature needs enough clearance.
- Don’t draw a sketch line to tell Hem where to bend. Its input is an existing sheet edge; use Fold for a bend line through a panel.
- Don’t use Hem for an ordinary right-angle wall. That is an edge Flange.
Examples and community resources
| Resource | What to explore | Author and licence |
|---|---|---|
| Editable hem demo | The sheet rule, base flange and 8 mm return used in this illustration. | SolidCraft contributors; MIT OR Apache-2.0. |
Contribute a tip, demo, model or screenshot, explaining the selected edge and dimensions.
See also
Flange makes a base sheet or an angled wall. Fold bends along a line in the sheet. Sheet Metal Rules sets the default hem gap. Create Flat Pattern shows the developed part and bend lines.
Automation details
Command ID: sheet.hem
Parameters:
edges: [[x,y,z] on sheet edges]; length (to the outer face); gap? (inner radius, default: rule); flip?; body?
Fold
Command group: SHEET METAL › CREATE
Read the sheet metal guide.
Automation details
Command ID: sheet.fold
Parameters:
line: sketch + curve (a sketch line on the sheet's base face; followed when the sketch changes) or points: [[x,y,z], [x,y,z]]; angle? (default 90 deg); radius? (default: rule); position?: centerline|start|end|mould (where the line sits in the bend, default centerline); fixed?: [x,y,z] on the side that stays (default: the larger side); flip? (fold the other way); body?
Convert to Sheet Metal
Command group: SHEET METAL › CREATE
Read the sheet metal guide.
Automation details
Command ID: sheet.convert
Parameters:
body; face: [x,y,z] on its large flat face (a plate of even thickness; recesses in one face up to half the thickness deep, such as an engraved label, become pockets of the sheet), or that face's name from model.faces; rule?; bends?: [[x,y,z] on sharp edges] (a solid or a shelled body: `face` is the fixed face and the flat faces reached from it across these edges become the sheet; a shell keeps its thickness, a solid takes the rule's inward; edges between two of those faces that are no bends are cut open with the rule's gap; a point in the middle of a chamfer between two faces, or on a bend modelled with its radius (a cylinder between two flat faces tangent to it, either skin), makes it one bend of the rule's radius at their virtual sharp; the faces' holes become cut-outs and their engravings, up to half the thickness deep, pockets)
Create Flat Pattern
Command group: SHEET METAL › CREATE
Read the sheet metal guide.
Automation details
Command ID: sheet.flat_pattern
Parameters:
body? → flat size, outline loops and cut-outs (flat coordinates, as point lists), cutout_shapes (the same cut-outs exactly, in the same order: {circle: {center, radius}} for a round hole, else {segments: [{line: [a, b]} | {arc: {center, radius, start_deg, sweep_deg}} | {polyline: [...]}]}), pockets (with their own cutout_shapes), bend lines and the bend table
SHEET METAL › MODIFY
Unfold
Command group: SHEET METAL › MODIFY
Read the sheet metal guide.
Automation details
Command ID: sheet.unfold
Parameters:
body? (default: the last sheet body) — all bends
Refold
Command group: SHEET METAL › MODIFY
Read the sheet metal guide.
Automation details
Command ID: sheet.refold
Parameters:
body? (default: the last unfolded sheet)
Sheet Metal Rules
Command group: SHEET METAL › MODIFY
Read the sheet metal guide.
Automation details
Command ID: sheet.manage_rules
Parameters:
name (new or existing); thickness?, k_factor?, bend_radius?, relief_width?, relief_depth?, corner_relief?, hem_gap?, gap? (expressions; `Thickness` is the rule's; gap: between flanges that meet at a corner, whose ends are closed toward each other at any angle); corner_relief_shape?: notch|round|rectangular|tear (what is cut where two bends meet at a corner of the base: round and rectangular a relief `corner_relief` across; tear none, each bend's end is cut straight from the corner to its flange's end; default notch); angle_display?: bend|included (how the DXF bend notes read the bend angles: the bend angle, default, or the included angle left between the bend's sides, 180° less it; the bend table gives both, and a flange's `angle` is always the bend angle); active?: bool; delete?: bool
WELDMENTS › CREATE
Frame Member
Command group: WELDMENTS › CREATE
Automation details
Command ID: frame.member
Parameters:
sketch: the frame sketch (id or name; 2D or 3D); lines?: [curve ids] (one member each; default: every straight line drawn in the sketch: not construction, not projected or otherwise linked, not of no length); profile: {kind: bar|round_bar|rect_tube|round_tube|angle|channel|i_beam, …its dimensions: each a number in the design's units or a length expression over its parameters ("tube_wall", "2 in")} (frame.profile.list gives each kind's dimensions and an example; dimensions left out take defaults from the profile's size) | profile_sketch: a sketch whose profile is the section, in its own x and y around its origin, with profiles?: picks as solid.extrude takes them (default: its material, nested loops alternating, so two circles make a tube); anchor?: origin|center|centroid|top_left|top|top_right|left|right|bottom_left|bottom|bottom_right (the profile point that sits on each line, default origin); angle?: angle expr (the profile turned about the line; default 0: its y as near world up as the line allows, a vertical member's x along world X); mirror?: bool (the profile mirrored across its y axis); name?; body_name? (what the members are named after, then numbered: `Rail`, `Rail (2)`…; default the profile's description, `Rect Tube 40x40x3`, or the profile sketch's name); names?: {line id: name} (names to keep, as Edit Feature keeps them). One body per line, from its start to its end; each member keeps its name when other lines are added or deleted. Returns the feature and the bodies it made
PLASTIC › CREATE
Boss
Command group: PLASTIC › CREATE
Read the plastic parts guide.
Automation details
Command ID: plastic.boss
Parameters:
position: [x,y,z] on a face; direction? (default: out of the face); diameter, height; hole_diameter?, hole_depth? (default: to the face); draft? (angle), fillet? (root radius); ribs? (count), rib_thickness?, rib_length? (out from the wall), rib_offset? (below the top); body?
Lip
Command group: PLASTIC › CREATE
Read the plastic parts guide.
Automation details
Command ID: plastic.lip
Parameters:
face: [x,y,z] on the rim face of a shelled body; width, height; type?: lip|groove; gap? (groove clearance); side?: inside|outside (which rim edge); body?
Snap Fit
Command group: PLASTIC › CREATE
Read the plastic parts guide.
Automation details
Command ID: plastic.snap_fit
Parameters:
position: [x,y,z] on a face; direction? (default: out of the face); hook: [x,y,z] (the catch's direction); length, thickness, width, catch_depth, catch_length; base_height? (extends the base below the face); new_body?: bool (make a separate body instead of joining); body?
Rest
Command group: PLASTIC › CREATE
Read the plastic parts guide.
Automation details
Command ID: plastic.rest
Parameters:
position: [x,y,z] on a face (the rest's centre); direction? (default: out of the face); width (round: the diameter); length? (a rectangle, along `along`); along?: [x,y,z]; height; draft? (angle; default: the body's plastic rule); thickness? (wall of a hollow rest); body?
PLASTIC › SETUP
Manage Plastic Rules
Command group: PLASTIC › SETUP
Read the plastic parts guide.
Automation details
Command ID: plastic.manage_rules
Parameters:
name (library or new rule; a new one starts from `from`, default ABS (1.5mm)); from?; material?; thickness?, nominal_radius?, clearance?, knife_edge?, reveal_height?, thickness_variation?, draft?, max_thickness?, min_thickness?, min_draft? (expressions; `Thickness` is the rule's); active?: bool (rule for bodies without one); delete?: bool (a design rule; a library rule goes back to the library values)
Assign Plastic Rule
Command group: PLASTIC › SETUP
Read the plastic parts guide.
Automation details
Command ID: plastic.assign_rule
Parameters:
bodies: [names]; rule: name (empty: no rule) — plastic features on these bodies take its draft and clearance as defaults
Other commands: sketch
Edit Sketch
Automation details
Command ID: sketch.edit
Parameters:
sketch: id or name
Draw Dimensioned Sketch Geometry
Automation details
Command ID: sketch.draw.dimensioned
Parameters:
command: sketch creation command, params: object, dimensions: object of role to numeric or expression value, or `name = expression` (also `#name = expression`), which defines the user parameter `name` as sketch.dimension does (the reply's `defined` lists the names); creates geometry and all driving dimensions atomically in one undo step. Returns created: {points, curves, constraints, dimensions}: the ids of what it added (stable and never reused: usable right away in sketch.dimension, sketch.constraint.*, sketch.delete…)
Delete Sketch Entities
Automation details
Command ID: sketch.delete
Parameters:
entities: [curve, point or constraint ids]
Drag Sketch Point
Automation details
Command ID: sketch.move_point
Parameters:
point: ref, to: [x,y]
Drag Sketch Geometry
Automation details
Command ID: sketch.drag
Parameters:
entity: point or curve, from: [x,y] where it was grabbed, to: [x,y], live?: bool: points and the material point grabbed on a line move toward `to` within the design constraints. When exact placement is impossible, bounded feasible steps minimize cursor distance. Splines slide by to - from; a circle or arc grabbed on its edge takes the radius to `to`. `with?`: [point or curve ids] moves the rest of a selection with the entity as one translation (circles keep their radii). Long moves retain the solution branch; arcs cannot sweep through their starts. Returns `reached`: progress projected onto the requested move (0..1), `at`: the grabbed position for the next frame, and `retry`: budget-limited progress can continue in another frame. `live: true` shares a work budget across held-solve decomposition and cursor correction; ordinary recovery and the final model evaluation retain their existing limits, not a wall-clock deadline. Later features stay stale until `sketch.drag_end`; `dof` stays from before the drag
End Sketch Drag
Automation details
Command ID: sketch.drag_end
Parameters:
constraint?: {command: a sketch.constraint.* id, params}: ends a drag made of `sketch.drag` `live: true` frames: adds the constraint it let go on (not kept if it over-constrains the sketch), then evaluates the whole model once; returns the constraint's result and the sketch's solved state and degrees of freedom
Move Dimension Text
Automation details
Command ID: sketch.dimension_text
Parameters:
dimension: constraint id or parameter name; at: [x,y] text centre (sketch coordinates) | reset: true (default place)
Sketch Palette Options
Automation details
Command ID: sketch.options
Parameters:
sketch?: id|name (default active); any of show_profile, show_points, show_dimensions, show_constraints, show_projected, show_construction, grid, snap, slice, sketch_3d: bool. Returns them all
Chain
Automation details
Command ID: sketch.chain
Parameters:
curve: id: the curves joined to it end to end (what a double-click selects)
Solve Sketch
Automation details
Command ID: sketch.solve
Parameters:
reports the solver status and degrees of freedom
Add Spline Point
Automation details
Command ID: sketch.spline.insert_point
Parameters:
curve: fit point spline id, at: [x,y]: a fit point is inserted where the curve passes nearest to it, between its neighbours (the curve still runs through it and all its old points; constraints on them stay); end?: start|end: `at` becomes the spline's new first or last point instead, and the curve runs on to it (refused when that end is joined to other geometry). Control point splines take no new points yet. Returns point: the new point's id
Infinite Line
Automation details
Command ID: sketch.infinite
Parameters:
curves: [line ids], value?: bool (default toggles): infinite line type (#1359): construction geometry drawn across the whole view through the line's two points; off, a normal line
Edit Text
Automation details
Command ID: sketch.edit_text
Parameters:
link: the text's link id (or entity: one of its curves), text? or text_expression? (as in sketch.text; typed words replace the expression), at?, height?, angle?: deg (numbers or expressions as in sketch.text; a number replaces an expression, and so does moving the text), font?: family or file path (empty: the built-in font), bold?, italic?: bool (an installed family's bold or italic face; italic without one is slanted), align?: left|center|right (the lines against `at`, or along the path), letter_spacing?: extra mm between letters, line_spacing?: times the font's line distance (default 1), path?: a curve id of the sketch the baseline follows ("": none; `at` and `angle` then do not place the text; the curve becomes construction, a guide the letters stand on), reverse?: bool (the other way along the path) (each kept when left out); or edits: [{link or entity, text?, at?, …}]: several texts changed together, the design rebuilt once (all or nothing; returns edits: each one's result); live?: bool: one frame of an interactive change (the sketch is solved, the features after it stay as they were until `sketch.drag_end`). Returns created: {points, curves, constraints, dimensions}: the ids of what it added (stable and never reused: usable right away in sketch.dimension, sketch.constraint.*, sketch.delete…)
Toggle Driven Dimension
Automation details
Command ID: sketch.toggle_driven
Parameters:
constraint: dimension id, driven?: bool (default toggles); a driving dimension gets a parameter with its current value
Toggle Radius / Diameter
Automation details
Command ID: sketch.toggle_diameter
Parameters:
constraint: a circle's or an arc's radius or diameter dimension id; diameter?: bool (default: the other one); sketch?: id|name (default: the one being edited). The circle stays the same size: its parameter is halved or doubled (a plain value is rewritten, an expression becomes `(e) / 2` or `2 * (e)`); refused when anything else uses that parameter
Constraint Glyphs
Automation details
Command ID: sketch.glyphs
Parameters:
sketch?: id|name: every constraint with where to draw its glyph (sketch coordinates)
Snap Inference
Automation details
Command ID: sketch.snap
Parameters:
at: [x,y], from?: [x,y] (previous click), radius?: mm (snap distance, default 1): what a click there would snap to and infer
Drawing Size
Automation details
Command ID: sketch.drawing_bounds
Parameters:
path | text: SVG or DXF (by `format`: "svg" | "dxf", default by the file name, else SVG); returns min, max, width and height in the file's own size
Save As DXF
Automation details
Command ID: sketch.export_dxf
Parameters:
sketch?: id|name (default active); path?: file to write (else the DXF text is returned)
Loose Ends
Automation details
Command ID: sketch.loose_ends
Parameters:
sketch?: id|name (default active): the ends of profile curves (not construction, projected or text) that can make a profile fail. open: [{point, curve, at}] ends that touch no other profile curve (no profile runs through them); untied: [{point, curve, at, touches: {point}|{curve}}] ends that touch another curve only by position (the profile closes now, but nothing keeps it closed when a dimension changes)
Tie Loose Ends
Automation details
Command ID: sketch.loose_ends.tie
Parameters:
sketch?: id|name (default active); points?: [point ids] (default: every untied end): ties each untied end to what it touches, coincident with another curve's end or on another curve. Returns constraints: [ids added], and the untied ends left
3D Line
Automation details
Command ID: sketch.line3d
Parameters:
points: [[x,y,z]…] world points (2 or more): one 3D line per segment, joined end to end (needs 3D Sketch on). Returns created: {points, curves, constraints, dimensions}: the ids of what it added (stable and never reused: usable right away in sketch.dimension, sketch.constraint.*, sketch.delete…)
3D Spline
Automation details
Command ID: sketch.spline3d
Parameters:
points: [[x,y,z]…] world fit points (2 or more): a smooth 3D curve through them (needs 3D Sketch on). Returns created: {points, curves, constraints, dimensions}: the ids of what it added (stable and never reused: usable right away in sketch.dimension, sketch.constraint.*, sketch.delete…)
3D Arc
Automation details
Command ID: sketch.arc3d
Parameters:
start, through, end: [x,y,z] world points: an exact circular arc through them, from start through through to end (needs 3D Sketch on). Stored exactly (centre, radius, angles), so path consumers can treat it as a true arc. Returns created: {points, curves, constraints, dimensions}: the ids of what it added (stable and never reused: usable right away in sketch.dimension, sketch.constraint.*, sketch.delete…)
3D Point
Automation details
Command ID: sketch.point3d
Parameters:
point: [x,y,z] world point (needs 3D Sketch on). Returns created: {points, curves, constraints, dimensions}: the ids of what it added (stable and never reused: usable right away in sketch.dimension, sketch.constraint.*, sketch.delete…)
Move 3D Point
Automation details
Command ID: sketch.move3d
Parameters:
wire: drawn 3D curve or point id, index?: fit point (default 0), to: [x,y,z] | by: [dx,dy,dz]; points joined to it move too
Break Offset Association
Automation details
Command ID: sketch.offset.break
Parameters:
curve: derived offset curve id (retains geometry and makes its points editable)
Trim Along Path
Automation details
Command ID: sketch.trim.path
Parameters:
points: [[x,y]…] (2…2000 positions: a path drawn across the sketch). Every piece the path crosses is removed as `sketch.trim` removes the piece at that crossing, in the order the path crosses them; a piece crossed again after it is gone is not trimmed twice; projected geometry, infinite lines, offset outputs and pieces trim refuses are passed over (why in `skipped`). dry_run?: bool (report without changing the design). One undo step → trimmed: [each trim's result], removed: [[[x,y]…]] (each removed piece as a polyline). Returns created: {points, curves, constraints, dimensions}: the ids of what it added (stable and never reused: usable right away in sketch.dimension, sketch.constraint.*, sketch.delete…)
Break Link
Automation details
Command ID: sketch.break_link
Parameters:
link?: link id (j1) | entities?: [curve or point ids]: linked geometry becomes normal sketch geometry
Auto-Project Edges on Reference
Automation details
Command ID: sketch.auto_project
Parameters:
value?: bool (default toggles): project a face's edges when a sketch is created on it
Redefine Sketch Plane
Automation details
Command ID: sketch.redefine
Parameters:
sketch: id or name; plane: as sketch.create; frame?: as sketch.create; author_path?: exact owner occurrence ids; explicitly rebinds or freezes the plane while preserving geometry and dimension names
Copy Sketch Entities
Automation details
Command ID: sketch.copy
Parameters:
entities?: [curve or point ids] (default: the selected sketch geometry); the constraints and dimensions among them come along
Cut Sketch Entities
Automation details
Command ID: sketch.cut
Parameters:
entities?: [curve or point ids] (default: the selected sketch geometry): copies them as sketch.copy does, then deletes them (one undo step)
Paste Sketch Entities
Automation details
Command ID: sketch.paste
Parameters:
at?: [x, y] (sketch point the copy's centre goes to) | translate?: [x, y]; without either, offset from the original in its own sketch and at the same coordinates in another; sketch?: target (default: the active sketch)
Inspect Sketch
Automation details
Command ID: sketch.inspect
Parameters:
sketch?: id|name (default active)
Other commands: canvas
Calibrate Canvas
Automation details
Command ID: canvas.calibrate
Parameters:
canvas: id or name; a, b: two points on the canvas plane [x,y]; distance: their true distance (mm): scales the image about a
Delete Canvas
Automation details
Command ID: canvas.delete
Parameters:
canvas: id or name
Canvas to Sketch
Automation details
Command ID: canvas.to_sketch
Parameters:
canvas?: id or name (default: the last canvas); name?: the new sketch's name. Traces the canvas image (dark drawing on a light background, or the reverse) into a new sketch on the canvas plane, lying exactly on the image: lines, splines and holes
Other commands: mesh
Convert Mesh
Automation details
Command ID: mesh.convert
Parameters:
body?: mesh body name (default: the selected mesh body); tolerance?: length expression (default 0.05 mm): reconstruct a closed constant-section mechanical mesh as editable planar and cylindrical faces, with a parametric timeline feature in the mesh body's owning component (the active component must be that component or an ancestor; otherwise activate the named component first); the active component is unchanged; name?
Other commands: sheet
List Sheet Metal Rules
Automation details
Command ID: sheet.rules
Parameters:
→ rules with their expressions and values, and the active one
Export Flat Pattern as DXF
Automation details
Command ID: sheet.export_dxf
Parameters:
body?, path?, curves?: exact|arcs (default exact: an ellipse as ELLIPSE, splines, text outlines and other Béziers as SPLINE; arcs: tangent arcs and lines within 0.001 mm, for machines that read only those), text?: cut|etch (default cut: letters that text cut through the sheet are cut contours on layer TEXT; etch: single contours on layer ETCH and the sheet keeps its material there; text machined to a depth is always on ETCH), bend_notes?: bool (default false: a note beside each bend line on layer BEND_NOTES, `B1 UP 90%%d R1`, its angle the included angle when the body's rule has angle_display: included), note_height?: mm (default 3), bend_lines?: bool (default true; false leaves BEND_UP and BEND_DOWN out, for a cutter that would cut them), layers?: roles|single (default roles, the layers below; single: every entity on layer 0), per_body?: bool (a file for every sheet body, `<path>-<body>.dxf`, or their DXF texts without a path → files: [{body, path | dxf, bends}]; not with `body`) → DXF (AutoCAD 2000, mm): layers OUTLINE (the outer contour), CUT (what is cut out inside it), TEXT or ETCH (letters), BEND_UP and BEND_DOWN (dashed centre lines), BEND_NOTES, POCKET_<BOTTOM|TOP|INTERNAL>_Z<from>_TO_<to>_MM (one per side and depth) and PERFORATION; inner contours come before the outline
Export Bend Table
Automation details
Command ID: sheet.export_bend_table
Parameters:
body?, format?: csv|json (default csv), path? → bend table in mm and degrees, including rule and flat centre-line coordinates; angle_deg is the bend angle and included_angle_deg the angle left between the bend's sides (180° less it); a bend that cut-outs split has a row for each piece
Other commands: plastic
List Plastic Rules
Automation details
Command ID: plastic.rules
Parameters:
→ rules with their expressions and values, the active rule and the rules assigned to bodies
Other commands: frame
Profile Library
Automation details
Command ID: frame.profile.list
Parameters:
Returns kinds: [{kind, label, required, optional, example}]: the built-in profiles, each SolidCraft's own parametric definition
Profile Properties
Automation details
Command ID: frame.profile.properties
Parameters:
profile: {kind: bar|round_bar|rect_tube|round_tube|angle|channel|i_beam, …its dimensions: each a number in the design's units or a length expression over its parameters ("tube_wall", "2 in")} (frame.profile.list gives each kind's dimensions and an example; dimensions left out take defaults from the profile's size); density?: kg/m³ (adds mass_per_m, kg/m). Returns profile (every default filled in), area (mm²), centroid [x,y] (mm, from the bounding box centre), ixx, iyy, ixy (mm⁴ about the centroid), width, height
Insert Profile
Automation details
Command ID: frame.profile.insert
Parameters:
profile: {kind: bar|round_bar|rect_tube|round_tube|angle|channel|i_beam, …its dimensions: each a number in the design's units or a length expression over its parameters ("tube_wall", "2 in")} (frame.profile.list gives each kind's dimensions and an example; dimensions left out take defaults from the profile's size); at?: [x,y] (sketch mm, default the origin); anchor?: origin|center|centroid|top_left|top|top_right|left|right|bottom_left|bottom|bottom_right (the profile point placed on `at`: its origin, the default and a built-in profile's centre, its bounding box's centre, its centroid, or a corner or edge middle of its bounding box); angle?: radians, counter-clockwise; fixed?: bool (default true: the curves are locked, so solving the sketch keeps the shape); sketch?: id|name (default: the sketch being edited). Returns the section as frame.profile.properties does. Returns created: {points, curves, constraints, dimensions}: the ids of what it added (stable and never reused: usable right away in sketch.dimension, sketch.constraint.*, sketch.delete…)
Other commands: component
Cycle Component Color
Read the components and joints guide.
Automation details
Command ID: component.cycle_color
Parameters:
component: id or name; saves the next identification colour and enables Component Colors; shared by every instance, separate from appearances
Create Components from Bodies
Read the components and joints guide.
Automation details
Command ID: component.from_bodies
Parameters:
bodies: [names] → one new component per body, named after it
Activate Component
Read the components and joints guide.
Automation details
Command ID: component.activate
Parameters:
component: id or name (0 or "root" for the design); occurrence?, path?: exact placement used to author shared geometry
List Components
Read the components and joints guide.
Automation details
Command ID: component.list
Parameters:
compact?: bool (counts of bodies, features, sketches and construction planes instead of their names; occurrences leave out identity transforms; children as occurrence ids); bodies?: bool (with compact: body names, not their count)
Component Physical Properties
Read the components and joints guide.
Automation details
Command ID: component.properties
Parameters:
component?: id or name (default active); descendants?: bool (default true). Measures the first placement, or all placements for root, including pending moves; material-aware mass and center of mass in world coordinates; volume, density, mass and center of mass only for closed, consistently oriented bodies; total.open_bodies_skipped counts open bodies excluded from volume/mass totals
Rename Component
Read the components and joints guide.
Automation details
Command ID: component.rename
Parameters:
component, name
Delete Component
Read the components and joints guide.
Automation details
Command ID: component.delete
Parameters:
component: deletes it, its subcomponents, occurrences and features
Unlock Contents
Read the components and joints guide.
Automation details
Command ID: component.unlock
Parameters:
component: removes the rigid joints that hold its contents together (an imported assembly's rigid group), so its parts move and take joints one by one → joints (the ids removed)
Move Bodies to Component
Read the components and joints guide.
Automation details
Command ID: component.move_bodies
Parameters:
bodies: [names], component; component_path?: its placement to place them by (default: its only one, else the active one; a component placed more than once gets them in every instance); from_path?: the placement of their component they move from (default: its only one, else its first, where its bodies have their own names)
Paste Bodies
Read the components and joints guide.
Automation details
Command ID: component.copy_bodies
Parameters:
bodies: [names, as the Browser shows them: a body seen in another placement of its component (`Cube (B:2)`) is copied from there]; component?: where the copies go (default: the active one); component_path?: its placement to place them by (default: its only one, else the active one; a component placed more than once gets them in every instance). Each copy stays where its body is in the world; the copies' names come back as `bodies`
Move Sketches to Component
Read the components and joints guide.
Automation details
Command ID: component.move_sketches
Parameters:
sketches: [ids or names], component
Paste New
Read the components and joints guide.
Automation details
Command ID: component.paste_new
Parameters:
component: independently copy its nested definition graph and history, materials and styles; occurrence?, path?: selected source placement; parent?: component the copy goes in (default: the source placement's; not the component or one inside it); in_place?, parent_path?: as occurrence.copy; translate?: [x,y,z]. Reassigned external bodies become base geometry; retained external links and omitted boundary joints are reported
Update Links
Read the components and joints guide.
Automation details
Command ID: component.update_links
Parameters:
component?: id or name (default: every linked component) — reads the linked designs again and replaces their bodies where they changed; → updated, unchanged, warnings (also joints whose faces are gone or that no longer solve)
Relink Source
Read the components and joints guide.
Automation details
Command ID: component.relink
Parameters:
component: id or name of a linked component; path: a saved .solidcraft design — replaces the source and linked bodies for all its occurrences, preserving identities and placements; returns path, previous_path, warnings, joint_errors and joint_conflicts
Break Link
Read the components and joints guide.
Automation details
Command ID: component.break_link
Parameters:
component: id or name of a linked component — keeps its bodies as they are and forgets the design file
Extract to File
Read the components and joints guide.
Automation details
Command ID: component.extract
Parameters:
component: id or name of a component that is not linked; path: the .solidcraft design to write → its history, subcomponents and their joints move to that design, and the component becomes linked to it (as component.insert_design makes it); returns path, file, feature, bodies, notices (what stays behind), warnings and copies (components that build the same bodies: see component.replace_with_link)
Find Identical Copies
Read the components and joints guide.
Automation details
Command ID: component.copies
Parameters:
component: id or name of a linked component → copies: [{component, name}], the components not linked whose own history builds the same bodies
Replace with Link
Read the components and joints guide.
Automation details
Command ID: component.replace_with_link
Parameters:
component or components: [ids or names] of components that are not linked; with: a linked component, or path: a .solidcraft design (its link here, else a new linked component) → each component's history goes and its placements become placements of the linked component; refused when its bodies are not the same as the link's; returns component, name, replaced and warnings
List Links
Read the components and joints guide.
Automation details
Command ID: component.links
Parameters:
→ linked components: component, name, path, file (resolved), found (null when the file is on a network location not allowed, or names a device: it is not looked for), and then host (the network location) and reason
Part Properties
Read the components and joints guide.
Automation details
Command ID: component.metadata
Parameters:
component: id or name (0 or "root": the design's own properties) → component, name, part_number, description, revision, metadata (as saved, other tools' keys too), properties: {name: text}
Change Part Properties
Read the components and joints guide.
Automation details
Command ID: component.metadata.set
Parameters:
component: id or name (not the root: use document.metadata.set); part_number?, description?, revision?: text (empty or null removes); values?: {key: value} (SolidCraft's keys, as document.metadata's properties lists them, or a reverse-DNS key holding an object); properties?: {name: text, …} (free properties; empty or null removes). All or nothing, one undo step → component, metadata, properties, changed: [keys]
Other commands: occurrence
Occurrence Physical Properties
Read the components and joints guide.
Automation details
Command ID: occurrence.properties
Parameters:
occurrence: id or name; path?: [occurrence ids] (required if nested under multiple instances); descendants?: bool (default true). Physical properties of this placement in world coordinates, including pending moves; volume, density, mass and center of mass only for closed, consistently oriented bodies; total.open_bodies_skipped counts open bodies excluded from volume/mass totals
Paste (Instance)
Read the components and joints guide.
Automation details
Command ID: occurrence.copy
Parameters:
component (or occurrence): what to place again; path?: validates selected occurrence; parent?: component (default: the same parent); translate?: [x,y,z]; in_place?: bool (default false: the selected transform within the parent; true: where the selected placement is in the world, translate in world axes; a parent placed more than once is placed by parent_path?, else the active placement, and every instance gets the copy). Copies the selected effective transform, including pending moves
Move Occurrence
Read the components and joints guide.
Automation details
Command ID: occurrence.move
Parameters:
occurrence; path?: exact placement; space?: local|world (default local); translate?: [x,y,z]; axis?: [x,y,z], angle?: radians or "30 deg", origin?: [x,y,z]; matrix?: [12 or 16 numbers] (instead of translate/axis/angle/origin: a rigid move as a row-major 3x4 rotation-and-translation or 4x4 matrix, flat or as rows; one that is a rotation only up to rounding is orthonormalised, a scale, shear or mirror is refused); tolerance?: largest accepted |RᵀR − I| (default 1e-9, at most 1e-3); capture?: bool (default true; false keeps it pending until Capture Position); move_grounded?: bool (default false: a grounded occurrence refuses; true moves it and it stays grounded). Nested occurrence definitions remain shared
Drag Occurrence
Read the components and joints guide.
Automation details
Command ID: occurrence.drag
Parameters:
occurrence or path: exact placement; at: [x,y,z] world point on it; point: [x,y,z] where it goes. Moves the placement by point - at (with any chain of joints it is in that is joined to nothing grounded) and captures its position; other pending moves stay pending. Shared definitions move in all placements. Grounded parts and parts joints hold to something fixed are refused (joint.reach moves those)
Ground
Read the components and joints guide.
Automation details
Command ID: occurrence.ground
Parameters:
occurrence; grounded?: bool (default toggles)
Move to Component
Read the components and joints guide.
Automation details
Command ID: occurrence.reparent
Parameters:
occurrence; path?: exact placement; parent: component id or name (0 or "root" for the design); parent_path?: the parent's placement to place it by (default: its only one, else the active one; every instance of the parent gets it). The placement keeps its world position; a move that would break a feature is refused
Other commands: joint
Reach Point
Read the components and joints guide.
Automation details
Command ID: joint.reach
Parameters:
occurrence: id|name; point: [x,y,z] (where its point goes, world); at?: [x,y,z] (its point, in the world where it is now; default: the centre of its bodies' box); z?: [x,y,z] (the way its axis then points); axis?: [x,y,z] (that axis, in the world now; default: its own z); joints?: [ids or names] (only these move toward the point; the other joints of a closed loop they are in follow); quiet?: bool; continuous?: bool (a frame of a drag: the answer says continuous, and the app's command line doesn't echo it). Moves the values of the joints on its chain from where they are to the nearest pose, within their limits, through motion links, keeping closed loops closed as joint.drive does (contact sets are not checked) → reached; error_mm (and error_deg with z): how close it got; point: where its point is; values: [{joint, name, values}] of the joints that moved, as joint.list gives them; moved; stopped_by_limit: [{joint, value, limit: min|max}]: the limits it rests on short of the point; stopped_by_loop: {joint}: the closed loop that stopped it (its chain alone gets closer); reason: why nothing can move
Joint Limits
Read the components and joints guide.
Automation details
Command ID: joint.limits
Parameters:
joint; index?: value index (default 0); min?, max? (omit both to clear)
Edit Joint
Read the components and joints guide.
Automation details
Command ID: joint.edit
Parameters:
joint; type?, flip?, offset?, angle? (a number, or an expression the joint then follows), suppressed?, name?
Delete Joint
Read the components and joints guide.
Automation details
Command ID: joint.delete
Parameters:
joint: id|name (or origin: name, link: index)
List Joints
Read the components and joints guide.
Automation details
Command ID: joint.list
Parameters:
→ joints (type, occurrences, values, limits; expressions: {offset?, angle?, values?} when they were typed as expressions), origins, links, degrees of freedom, conflicts, floating: [{occurrences, joints}] (joint chains joined to nothing grounded: the solver places none of them, so driving them moves nothing)
Inspect Joint
Read the components and joints guide.
Automation details
Command ID: joint.inspect
Parameters:
joint?: id|name (default: every joint) → joints: [{id, name, type, suppressed, visible, flip, offset (mm), angle (deg), values: as joint.list gives them, dofs, expressions?: {offset?, angle?, values?}, a, b: {occurrence, occurrence_name, component, component_name, path (occurrence names from the top, `/` between), snap (as saved: type, pick, face, end, edge, corner, x, point, z, in the component's coordinates), references: [{role: face|end|x|edge|corner, name, role_in_feature?: (top, side:c1…), feature?: {id, name, type} (the feature that made the face; error when it is gone), sketch?: {id, name, curve, curve_type} (a face swept from a sketch curve), faces?: [an edge's two faces], unverified?: a name saved before exact names}], resolves, frame?: {origin, z, x} in the world, error?: why the origin is lost}, links: [{index, role: driver|driven, …as joint.list}], errors, conflicts}] (reads only: nothing changes)
Solve Joints
Read the components and joints guide.
Automation details
Command ID: joint.solve
Parameters:
re-place the occurrences from the joints → conflicts, errors, dof
Sweep Joint
Read the components and joints guide.
Automation details
Command ID: joint.sweep
Parameters:
joint: id|name; from, to: its value the sweep runs between (degrees for angles, mm for distances, or expressions); index? (which value, default 0); step? (between samples, in the joint's unit; default: fine enough that no part passes through another between two); refine?: mm (the first contact is bisected until no part moves more than this between the last clear value and the touching one; default 0.01); occurrences?: [ids or names] (checked against each other; default every occurrence), with against?: [ids or names] (the parts that stay: each of `occurrences` only against these), or contact_sets?: true (the pairs of the design's contact sets); report_gaps?: bool (the nearest gap at every sample, default false); apply?: bool (leave the design where the sweep stopped; default false: the design is not changed) → stopped_at (the last value clear of contact, or where a loop or limit stopped it; null: it reached `to`), stopped_by: {a, b, at: [x,y,z] (where they touch, world)} | "loop" | "limit" | null, samples: [{value, min_gap_mm?, pair?}], min_gap? (report_gaps: {part: {mm, at_value, to}}, the nearest each part came to another), unit, gap_method ("mesh": distances between the tessellations), gap_tolerance_mm (how far those can be off: 0 when every face is flat), pairs (checked), touching_at_start: [[a, b]] (pairs already touching at `from`, such as parts joined face to face or a door on its frame: these stop it only once they pass into each other deeper than they start), applied. The parts are tested at the samples and through the bisection; the motion is on a copy (closed loops follow, contact sets do not stop it)
Other commands: inspect
Clearance
Automation details
Command ID: inspect.clearance
Parameters:
bodies?: [names] (default: every solid body, in world placement, but those in `against`; mesh bodies are not measured); against?: [names] (only pairs with one body in `bodies` and the other here); min_volume?: mm³ (default 0.01: smaller overlaps count as contact); clearance?: mm (default 0: report pairs closer than this); nearest?: n (each body of `bodies` gets its n nearest others); skip_within?: "occurrence" (pairs of bodies of one occurrence) | "component" (pairs of bodies inside one placed component, its subcomponents included) | null; tolerance?: mm (default 1e-6: a gap below it is contact, 0) → overlaps: [{a, b, volume_mm3, area_mm2, bbox, center}]; near: [{a, b, distance_mm, from, to, overlap_mm3?: a contact's shared volume below min_volume, exact?: false when measured on the meshes}], nearest by body (the same for pairs that overlap: 0); nearest: {body: [{body, distance_mm}]}; unchecked: [{a, b, reason}] (pairs whose overlap could not be worked out; each mesh body, STL/3MF/OBJ import, is not measured and is listed as {a: name, b: null, reason: "mesh body: not checked"}, also when named in `bodies` or `against`; the result's `bodies` counts the solid bodies only); pairs_checked; pairs_reused (of those, measured by an earlier call: neither body changed or moved since); pairs_pruned (ruled out by their boxes); ms. Distances are measured on the exact faces and edges, the meshes only rule pairs out
Parameter Sweep
Automation details
Command ID: inspect.parameter_sweep
Parameters:
parameter: name; values: [number | expression] (at most 200) | from, to: numbers, steps? (default 10, at most 199: steps + 1 values) → for each value, in a copy of the design (the design itself is not changed): {value, ms (the rebuild), ok, failed: [{feature, name, error}], warned: [{feature, name, warning}] (features that build at the current value and fail or warn at this one), joints_lost: [{joint, name, origin?: a|b, why}], joints_flipped: [{joint, name, origin: a|b, degrees}] (an origin's z turned more than 90° on its own part from where it is now), sketches_flipped: [{sketch, name, degrees}] (the sketch plane's normal turned more than 90°), sketches_failed: [{sketch, name, failing, folded}] (a solve that fails, or keeps a triangle's turn or an offset's side only by flipping it)} (or {value, ms, ok: false, error} where the parameter takes no such value); summary: {values, ok, slowest_ms, failed, joints_lost, joints_flipped, sketches_flipped, sketches_failed} (how many values show each)
Compare Bodies
Automation details
Command ID: inspect.compare
Parameters:
a, b: body names (default: the two selected bodies, or the design's only two), in world placement; tolerance?: mm (0.001 to 10, default 0.01): surfaces closer than this agree; spacing?: mm (default 0.5): the largest piece of a face sampled as one point, coarser for a body that would need more than max_points? (default 8 million, up to 50 million) samples; max_regions? (default 50); color?: true | {only_in_a?, only_in_b?: "#rrggbb"} (colours the faces that hold a region, red where only a has material and green where only b has: the faces mostly beyond the tolerance, else the one with the largest share; an undo step) → a, b: volume_mm3, area_mm2, center_of_mass, bbox; difference: b − a; deviation: a_to_b, b_to_a (max_mm, mean_mm, at, area_beyond_mm2); regions, largest first: side (only_in_a | only_in_b), volume_mm3 (integrated along lines through the region: resolution), area_mm2, max_deviation_mm, at, center, bbox, faces_a, faces_b (face indices, as model.faces lists them); identical; verdict; warnings (a body whose surface does not enclose what it measures, lines left out). Works from the two surfaces, without a boolean of the bodies, so near-identical bodies compare too
Silhouette
Automation details
Command ID: inspect.silhouette
Parameters:
view?: front|back|left|right|top|bottom|iso (default front); or camera?: {target: [x,y,z], yaw, pitch, distance, fov?} (mm, radians; fov 0 means parallel); bodies?: [world body names] (default visible bodies, named hidden bodies included); rows?: mask height in pixels (default 240, clamped to 16..1024) → tightly framed run-length mask, box_mm, mm_per_px, right/up, projection, body and triangle counts
Other commands: contact
Edit Contact Set
Automation details
Command ID: contact.edit
Parameters:
set: id|name; occurrences?; name?; suppressed?: bool; delete?: bool
List Contact Sets
Automation details
Command ID: contact.list
Parameters:
→ sets, enabled, all
Check Contact
Automation details
Command ID: contact.check
Parameters:
→ pairs in contact sets that pass through each other now
Other commands: motion
Play Motion Study
Read the components and joints guide.
Automation details
Command ID: motion.play
Parameters:
study: id|name; step (0…steps) — sets the joints to the study's values there (contact sets stop them); quiet?: bool (positions of only the occurrences that moved) → values: [{joint, values: [{name, value, unit}]}], positions, moved: whether any occurrence moved, unmoved: [{joint, name, reason}] (keyed joints that can move nothing, such as a chain joined to nothing grounded)
Export Motion Study
Read the components and joints guide.
Automation details
Command ID: motion.export
Parameters:
study; samples? (default steps + 1); path? (.json or .csv) → occurrence positions per step (the design is not changed)
Export Motion Animation
Read the components and joints guide.
Automation details
Command ID: motion.export_animation
Parameters:
study: id|name, or joint: id|name with from and to (degrees for angles, mm for distances, or expressions) and index?, or view: id|name (an exploded view, coming apart from the assembled placement) with back? (default false; true: back together too, exploded at the middle frame of an odd count); path: a .gif file, or a folder for PNG frames (frame-0001.png, frame-0002.png, …); samples? (frames, 2…1000; default the study's steps + 1, 100 for a joint, 41 for a view or 81 with back); width?, height? (16…4096 pixels, default 800 × 500); camera?: {target, yaw, pitch, roll?, distance, fov?, up?} (ui.camera's reply; fields left out keep the default view: view.apply's camera, or the home view framing the model, for a view both assembled and exploded); fps? (1…50, default 20); grid?, axes? (default true: the ground grid and the origin's axes) - draws the study as it plays, the joint as it is driven or the view as it explodes, with the headless renderer → path, format, frames, width, height, fps (GIF), bytes, renderer, stopped_at, stopped_by_loop, stopped_by_contact (the design is not changed, nor its placements)
Keep Motion Trace
Read the components and joints guide.
Automation details
Command ID: motion.trace.keep
Parameters:
occurrence: id|name, or an occurrence path [ids] (an instance inside sub-assemblies); point: [x,y,z] world point on it, where it is placed now; study: id|name, or joint: id|name with from and to (degrees for angles, mm for distances, or expressions) and index? (which value, default 0); samples? (2…500, default the study's steps + 1, or 100) - the point's path as the study plays or the joint is driven, closed loops following; name? (default Motion TraceN); auto_update?: bool (default true); point_ref?: joint origin snap - keeps the trace as a root 3D sketch spline. Associative curves follow mechanism and driving-input edits; false keeps a fixed curve. point_ref retains a geometry snap; otherwise point is retained in component coordinates → sketch, name, curves, points
Edit Motion Trace
Read the components and joints guide.
Automation details
Command ID: motion.trace.edit
Parameters:
sketch: id|name; joint? with from and to, or study?; index?; samples? (2…500); auto_update?: false to detach. Edits a saved associative trace's driving conditions in one undo step
Plot Motion Study
Read the components and joints guide.
Automation details
Command ID: motion.plot
Parameters:
study: id|name; joints?: [id|name] (default: every joint that moves); occurrence? and point? (a point of a part to follow, as motion.trace takes them); samples? (3…1000, default the study's steps + 1); duration?: seconds the whole study takes, 0.001 or more (velocities and accelerations then per second, else per step) → step: [the study step of each sample], time?: [s], joints: [{joint, name, index, dof, unit, value, velocity, acceleration, velocity_unit, acceleration_unit}] (degrees for angles, mm for distances; angles unwrapped), point?: {occurrence, position: [[x,y,z]…], velocity, acceleration (vectors), speed, acceleration_norm, unit, velocity_unit, acceleration_unit}, samples (taken), stopped_at, stopped_by_loop, stopped_by_contact. The study plays as motion.play plays it, each sample driven from the one before, on a copy (the design is not changed); velocities and accelerations are finite differences between samples (central, one-sided at the ends)
Motion Interference
Read the components and joints guide.
Automation details
Command ID: motion.interference
Parameters:
study: id|name; occurrences?: [ids or names] (two or more, checked against each other; default every occurrence), with against?: [ids or names] (then each of `occurrences` is checked only against these, such as an arm against the parts it must miss), or contact_sets?: true (the pairs of the design's contact sets); samples? (2…1000, default the study's steps + 1) → collisions: [{a, b, first_step, last_step, steps: [[from, to]…] (the step ranges where they overlap), depth_mm (how far into each other, the most at deepest_step), volume_mm3 (their overlap there; null when it was not cheap to work out)}], clear, pairs (checked), samples (taken), truncated (the work budget ran out; checked_to: the last step checked), stopped_at, stopped_by_loop. The study plays as motion.play plays it but contact sets do not stop it, on a copy (the design is not changed). Parts are tested at the samples only: one that passes wholly through another between two samples is missed
List Motion Studies
Read the components and joints guide.
Automation details
Command ID: motion.list
No parameter description is provided by the command registry.
Delete Motion Study
Read the components and joints guide.
Automation details
Command ID: motion.delete
Parameters:
study
Other commands: explode
Show Exploded View
Automation details
Command ID: explode.show
Parameters:
view: id|name (or none: back to the assembled placement) — shown only; the design keeps its placements
List Exploded Views
Automation details
Command ID: explode.list
No parameter description is provided by the command registry.
Delete Exploded View
Automation details
Command ID: explode.delete
Parameters:
view
Other commands: config
Configuration Column
Read the parameters and expressions guide.
Automation details
Command ID: config.column
Parameters:
param? | feature? | material? | appearance? (target name); delete?: bool
Configuration Row
Read the parameters and expressions guide.
Automation details
Command ID: config.row
Parameters:
name; from? (row to copy; default current values); values?: {column key: expression, suppression, material name, appearance name or Look object}; rename?; delete?: bool
Activate Configuration
Read the parameters and expressions guide.
Automation details
Command ID: config.activate
Parameters:
row: name — sets its parameter values and suppressions
Preview Configuration
Read the parameters and expressions guide.
Automation details
Command ID: config.preview
Parameters:
row: name — validates a rebuild without changing the design or history
Configuration Rule
Read the parameters and expressions guide.
Automation details
Command ID: config.rule
Parameters:
rule?: {id,name,enabled,condition,effect}; rules?: [rule…] (added or replaced together, then the rows checked once); id? + delete?; id? + index? (ordered move)
Configuration Rules
Read the parameters and expressions guide.
Automation details
Command ID: config.rules
Parameters:
ordered typed rules, rows and active state
Other commands: parts
Standard Parts
Automation details
Command ID: parts.library
Parameters:
family? → families (name, standard, sizes, lengths) and, with family, each size's dimensions (mm)
Insert Part
Automation details
Command ID: parts.insert
Parameters:
family (socket_head_cap_screw | hex_bolt | hex_nut | washer | set_screw | dowel_pin | bearing); size ("M6", or "608" for bearings); length? (mm; screws, bolts, set screws, pins; default a standard length near 2.5 d); at?: [x,y,z] on a hole's rim or wall (the part seats on the hole's face with a rigid joint) | point?: [x,y,z] with direction?: [x,y,z] (no joint); name?
Change Part Size
Automation details
Command ID: parts.resize
Parameters:
component: id|name of an inserted part; size?; length? — rebuilds it (joints keep it seated)
Other commands: body
Rename Body
Automation details
Command ID: body.rename
Parameters:
body: its name, name: the new name (features that use the body follow)
Other commands: browser
New Group
Read the window tour.
Automation details
Command ID: browser.group
Parameters:
folder: bodies|sketches|construction; component?: id (default 0); name?; items?: [keys] (they leave other groups)
Ungroup
Read the window tour.
Automation details
Command ID: browser.ungroup
Parameters:
group: id (its items go back to the folder)
Rename Group
Read the window tour.
Automation details
Command ID: browser.rename_group
Parameters:
group: id, name
Move Browser Items
Read the window tour.
Automation details
Command ID: browser.move
Parameters:
folder, component?, items: [keys]; group?: id (into it; omit to take them out of groups); before?: key (position in the group)
Order Browser Items
Read the window tour.
Automation details
Command ID: browser.order
Parameters:
folder, component?, order: [keys] (the folder's items in display order)
Show/Hide
Read the window tour.
Automation details
Command ID: browser.visibility
Parameters:
visible: bool; items?: [sketch id or name | body name | construction name | joint name | O|X|Y|Z|XY|XZ|YZ]; or joints?: [joint id or name] (their glyphs; they still constrain and move parts); or features?: [feature id or name] (the bodies they made; path?: [occurrence ids] for only that placement's); or folder?: bodies|sketches|construction|origin|joints|all (all of it; showing also shows its browser folders and groups, and `all` takes in the occurrence hides too); or tree_folders?: [browser folder or group key: c0/bodies, o:4/sketches, c0/g7, c0/joints, c0/canvases] (the folder or group itself: its items keep their own state); or paths?: [[occurrence ids]] (exact placements and descendants), isolate?: bool (requires paths and visible:true). Saved with the design and undone like any other change (the camera is not)
Expand All
Read the window tour.
Automation details
Command ID: browser.expand_all
Parameters:
path?: [occurrence ids] (that placement and its descendants); component?: id (that component's own folders); omit both for the whole tree, including folders that start closed (Origin, Named Views, Features). Display only: open/closed rows are not saved in the design and are not an undo step → open, open_by_default, closed_by_default
Collapse All
Read the window tour.
Automation details
Command ID: browser.collapse_all
Parameters:
path?: [occurrence ids]; component?: id; omit both for the whole tree (the design row stays open so the first level remains visible). Display only; not an undo step → open, open_by_default, closed_by_default
Other commands: document
Change Design Units
Automation details
Command ID: document.units
Parameters:
units: mm|cm|m|in|ft (display and unit-less parameters; values keep their meaning)
Design Properties
Automation details
Command ID: document.metadata
Parameters:
→ metadata: the design's metadata object as saved (other tools' keys too); properties: each of SolidCraft's design properties (project, part number, revision…), its text or null (absent, or not text)
Change Design Properties
Automation details
Command ID: document.metadata.set
Parameters:
key and value, or values: {key: value, …} (all or nothing, one undo step). SolidCraft's keys, the ones document.metadata's properties lists, take text ("" or null removes); another tool's data goes under its reverse-DNS key such as com.example.tool (an object; null removes) → metadata, changed: [keys]
Remove Design Property
Automation details
Command ID: document.metadata.remove
Parameters:
key, or keys: [keys] (any key, also one another tool wrote) → metadata, removed: [keys that were there]
Inspect Design
Automation details
Command ID: document.inspect
Parameters:
measure?: bool (include body measurements)
Design Revision
Automation details
Command ID: document.revision
Parameters:
→ document_id (this open design's id: kept while it stays open, another for each design started or opened), revision (moves whenever the design, what is hidden or a component's uncaptured position changes, never on a selection or a view; from one counter for the whole run, so it never repeats). Read-only
Other commands: view
New Named View
Read the window tour.
Automation details
Command ID: view.save
Parameters:
name?; camera: {target: [x,y,z], yaw, pitch, distance, fov?} (replaces a view of the same name)
Rename Named View
Read the window tour.
Automation details
Command ID: view.rename
Parameters:
view: name, name
Delete Named View
Read the window tour.
Automation details
Command ID: view.delete
Parameters:
view: name
List Named Views
Read the window tour.
Automation details
Command ID: view.list
No parameter description is provided by the command registry.
Restore Named View
Read the window tour.
Automation details
Command ID: view.apply
Parameters:
view?: front|back|top|bottom|left|right|iso|home (frames the model) | a named view's name; or camera?: {target: [x,y,z], yaw, pitch, distance, fov?, roll?} (radians, mm; roll defaults to 0, must be finite and is clamped to ±π; up is refused: the up axis comes from the design settings) → camera. The viewport (and the MCP screenshot) moves there. View state: not saved, not an undo step
Fit
Default keyboard shortcut: F6
Read the window tour.
Automation details
Command ID: view.fit
Parameters:
no parameters → frame the active canvas or selection; display only
Home view
Read the window tour.
Automation details
Command ID: view.home
Parameters:
no parameters → home orientation framing the active canvas; display only
Navigation tool
Read the window tour.
Automation details
Command ID: view.tool
Parameters:
tool: orbit|pan|zoom|none → tool; latch a camera tool, none releases it
Continuous orbit
Read the window tour.
Automation details
Command ID: view.spin
Parameters:
on?: bool (omitted: toggle) → on?; continuous orbit until the next click or key
Visual style
Read the window tour.
Automation details
Command ID: view.visual_style
Parameters:
style: shaded_with_edges|shaded|wireframe|shaded_with_hidden_edges → style, index (0..3 in that order)
Grid
Read the window tour.
Automation details
Command ID: view.grid
Parameters:
on?: bool (omitted: toggle) → on?; show the viewport grid
Ground shadow
Read the window tour.
Automation details
Command ID: view.ground_shadow
Parameters:
on?: bool (omitted: toggle) → on?; show the ground shadow
Navigation bar
Read the window tour.
Automation details
Command ID: view.navigation_bar
Parameters:
visible?: bool (omitted: toggle) → visible?; show the navigation bar (window setting)
Render Stage
Read the window tour.
Automation details
Command ID: view.render_stage
Parameters:
stage: look|light|frame|output → {stage}; per-document UI state, never edits or evaluates the design; headless validation only
Shots Strip
Command group: RENDER CAMERA › SHOTS
Read the window tour.
Automation details
Command ID: view.shots_strip
Parameters:
visible: bool → {visible}; Render Shots strip UI preference. Headless echo only, no document edits or undo
Workspace layout
Read the window tour.
Automation details
Command ID: view.layout
Parameters:
mode: floating|compact → validated workspace layout; display only, never opens a dialog
History layout
Read the window tour.
Automation details
Command ID: view.history_layout
Parameters:
width?: 1..1000000; dock?: bottom|left|under_browser; collapsed?: bool → validated layout request; display only, never opens a dialog
Graphics Preset
Read the window tour.
Automation details
Command ID: view.graphics_preset
Parameters:
preset: performance|quality → preset, enabled, display_quality, supersampling, supersampling_adaptive; Quality: AO, Fine, adaptive 2x SSAA; Performance: no AO, Normal, no SSAA
Ambient Occlusion
Read the window tour.
Automation details
Command ID: view.ambient_occlusion
Parameters:
enabled: bool → enabled; apply soft contact shading in the GPU viewport
Perspective view
Read the window tour.
Automation details
Command ID: view.perspective
Parameters:
enabled: bool → enabled; draw the view in perspective, or orthographic when false; a sketch being edited is always shown orthographic
Navigate View
Read the window tour.
Automation details
Command ID: view.navigate
Parameters:
camera: Camera; direction?: [x,y,z] in the camera's up-axis frame; or action: left|right|up|down|clockwise|counterclockwise|home|fit, degrees?: 0..180 (how far left|right|up|down turn; default 90); or motion: pan|orbit|zoom, delta?: [dx,dy] (pixels, each ±10000), free_orbit?: bool (orbit through poles, default false), viewport?: [width,height] (1..1000000, required for pan or pivot), pivot?: [x,y,z], factor?: 0.05..20 (required for zoom), anchor?: [x,y,z] → camera, fit, continuous?
Normal to Selection
Read the window tour.
Automation details
Command ID: view.normal_to
Parameters:
camera?: Camera (default: current session camera or home view) → camera; Look At the first selected planar face or plane, centered on the picked point; repeat while aligned to flip the side; preserves scale and projection
Front View
Default keyboard shortcut: Ctrl+1
Read the window tour.
Automation details
Command ID: view.front
Parameters:
camera?: Camera (default: current session camera or home view) → camera; turns to that standard view as the view cube does, keeping target, distance and projection
Back View
Default keyboard shortcut: Ctrl+2
Read the window tour.
Automation details
Command ID: view.back
Parameters:
camera?: Camera (default: current session camera or home view) → camera; turns to that standard view as the view cube does, keeping target, distance and projection
Left View
Default keyboard shortcut: Ctrl+3
Read the window tour.
Automation details
Command ID: view.left
Parameters:
camera?: Camera (default: current session camera or home view) → camera; turns to that standard view as the view cube does, keeping target, distance and projection
Right View
Default keyboard shortcut: Ctrl+4
Read the window tour.
Automation details
Command ID: view.right
Parameters:
camera?: Camera (default: current session camera or home view) → camera; turns to that standard view as the view cube does, keeping target, distance and projection
Top View
Default keyboard shortcut: Ctrl+5
Read the window tour.
Automation details
Command ID: view.top
Parameters:
camera?: Camera (default: current session camera or home view) → camera; turns to that standard view as the view cube does, keeping target, distance and projection
Bottom View
Default keyboard shortcut: Ctrl+6
Read the window tour.
Automation details
Command ID: view.bottom
Parameters:
camera?: Camera (default: current session camera or home view) → camera; turns to that standard view as the view cube does, keeping target, distance and projection
Isometric View
Default keyboard shortcut: Ctrl+7
Read the window tour.
Automation details
Command ID: view.isometric
Parameters:
camera?: Camera (default: current session camera or home view) → camera; turns to that standard view as the view cube does, keeping target, distance and projection
Other commands: selection
Delete
Automation details
Command ID: selection.delete
Parameters:
items?: [selection items]; components?, occurrences?, canvases?, joints?: [ids or names]; dry_run?: bool → deleted, deleted_joints, would_fail, skipped (one undo step)
Other commands: edit
Undo
Default keyboard shortcut: Ctrl+Z
Automation details
Command ID: edit.undo
No parameter description is provided by the command registry.
Redo
Default keyboard shortcut: Ctrl+Y
Automation details
Command ID: edit.redo
No parameter description is provided by the command registry.
Repeat Last Command
Default keyboard shortcut: Shift+R
Automation details
Command ID: edit.repeat
Parameters:
Starts the last tool or dialog started in the app again, with its defaults (a toolbar click, not a replay of its values). Only the app has a tool to start: called here it is refused, and changes nothing
Checkpoint
Automation details
Command ID: edit.checkpoint
Parameters:
→ {checkpoint: id}: remember the design, active sketch and undo history (restore with edit.restore_checkpoint)
Restore Checkpoint
Automation details
Command ID: edit.restore_checkpoint
Parameters:
checkpoint: id; forget?: bool (true = drop it without going back). Goes back to it, undo history included
Other commands: timeline
Rename
Automation details
Command ID: timeline.rename
Parameters:
feature: id|name, name (references to it follow)
New Feature Folder
Automation details
Command ID: timeline.group
Parameters:
name?; features?: [id|name]; parent?: folder id (features leave any other timeline folder)
Remove Feature Folders
Automation details
Command ID: timeline.ungroup
Parameters:
group: id | groups: [ids] (features remain in the timeline)
Rename Feature Folder
Automation details
Command ID: timeline.rename_group
Parameters:
group: id, name
Move Features to Folder
Automation details
Command ID: timeline.move_to_group
Parameters:
features?: [id|name], groups?: [ids], group?: id (omit or null to move to the timeline root)
Move Timeline Items
Automation details
Command ID: timeline.move_many
Parameters:
features?: [id|name], groups?: [folder ids], group?: folder id, position: insertion slot, active?: bool (true = the moved contents end up before the history marker, false = behind it; other features keep their state); atomically changes folder membership and moves all selected contents as one block
Move Timeline Marker
Automation details
Command ID: timeline.rollback
Parameters:
position: number of features to keep active, or "end" (omit = end)
Roll History Marker
Automation details
Command ID: timeline.roll_to
Parameters:
position: number of features to keep active, or "end" (omit = end) | feature: id|name (the marker goes right after it)
Reorder Feature
Automation details
Command ID: timeline.reorder
Parameters:
feature: id|name, position: its new index, active?: bool (true = it ends up before the history marker, false = behind it; other features keep their state); refused when a feature that worked would fail, unless allow_errors?: bool (default false): then made, and broken: [{feature, error}] lists the features it broke
Reorder Features
Automation details
Command ID: timeline.reorder_many
Parameters:
features: [id|name], position: insertion slot in the current history; selected features keep their relative order; active?: bool (as timeline.reorder's); refused when a feature that worked would fail, unless allow_errors?: bool (default false): then made, and broken: [{feature, error}] lists the features it broke
Edit Feature
Automation details
Command ID: timeline.redefine
Parameters:
feature: id|name, command: the feature's command id, params: its parameters (the feature is rebuilt in place)
Feature Dependents
Automation details
Command ID: timeline.dependents
Parameters:
feature: id|name → features deleted with it, and features that would fail without it
Suppress Feature
Automation details
Command ID: timeline.suppress
Parameters:
feature: id|name | features: [id|name] | groups: [timeline folder ids] (every feature in those folders and their nested folders; one undo step), suppressed?: bool (default toggles: several features are all suppressed unless all of them already are, then all are unsuppressed) → feature: id (or features: [ids]; groups: [ids] when given), suppressed
Edit Feature
Automation details
Command ID: timeline.edit
Parameters:
feature: id|name, set: {fields to change, merged into the feature's definition as timeline.inspect returns it, e.g. {"extent": {"distance": "30"}} (extrude), {"angle": "90 deg"} (revolve); a dotted key names a nested field ({"plane.distance": "8 mm"} = {"plane": {"distance": "8 mm"}}); expressions are text, or a number in mm or degrees} → recomputed: features rebuilt, restored: features whose earlier result for the same inputs was reused
Inspect Feature
Automation details
Command ID: timeline.inspect
Parameters:
feature: id|name → type, definition (the fields timeline.edit's set changes, with their current values), inputs: [{label, param, expression, unit}] (named inputs parameters.change can also set), error, warning
Copy Features
Automation details
Command ID: timeline.copy
Parameters:
features: [ids or names] (in timeline order on paste)
Paste Features
Automation details
Command ID: timeline.paste
Parameters:
translate?: [x,y,z] (moves the copies' geometry); component?: where the copies go (default: the active one), component_path?: its placement (default: the active one, else its only one); the copies go at the marker, each where its original is in the world (copies into their own component keep its coordinates)
Add Recorded Feature
Automation details
Command ID: timeline.add
Parameters:
feature: a feature as the design file and timeline.inspect hold it ({type, name?, id?, …}; the name is kept even when another feature has it, the id is kept and refused when another feature has it, so later steps can refer to them); params?: [{name, expression, unit?, comment?}] (the model parameters its sketch dimensions use); the feature goes at the marker → feature, name, error, warning
Export Command Script
Automation details
Command ID: timeline.export_script
Parameters:
path?: write the script to this file → script: {commands: [...]} that rebuilds the design (solidcraft-cli eval/run), steps, omitted: what the script leaves out (appearances, folders, views, configurations); components and assemblies are not supported yet
Other commands: select
Select
Read the window tour.
Automation details
Command ID: select.set
Parameters:
items: [{type: body|edge|face|feature|sketch_curve|sketch_point|profile, …}], add?: bool
Clear Selection
Read the window tour.
Automation details
Command ID: select.clear
No parameter description is provided by the command registry.
Other commands: parameters
List Parameters
Read the parameters and expressions guide.
Automation details
Command ID: parameters.list
Parameters:
favorites?: bool (only favourites), filter?: all|user|sketch|feature|favorites → parameters (name, expression, unit, value in its unit, source, feature/input, comment, favorite, uses, used_by, error) and cycles
Add User Parameter
Read the parameters and expressions guide.
Automation details
Command ID: parameters.add
Parameters:
name, expression, unit?: as parameters.change (text: a text parameter, its expression the text), comment?, favorite?: bool
Rename Parameter
Read the parameters and expressions guide.
Automation details
Command ID: parameters.rename
Parameters:
name, new_name (expressions, feature inputs and dimensions that use it follow)
Delete Parameter
Read the parameters and expressions guide.
Automation details
Command ID: parameters.delete
Parameters:
name (refused while something uses it; the error lists the users)
Favourite Parameter
Read the parameters and expressions guide.
Automation details
Command ID: parameters.favorite
Parameters:
name, favorite?: bool (default true)
Move Parameter
Read the parameters and expressions guide.
Automation details
Command ID: parameters.move
Parameters:
name, before | after: another user parameter; the user parameter is listed just before or after it
Comment Parameter
Read the parameters and expressions guide.
Automation details
Command ID: parameters.comment
Parameters:
name, comment
Parameter Users
Read the parameters and expressions guide.
Automation details
Command ID: parameters.users
Parameters:
name → users (parameters, feature inputs, dimensions) and the features it drives
Parameter Graph
Read the parameters and expressions guide.
Automation details
Command ID: parameters.graph
Parameters:
→ nodes, edges [user, used] (users include Feature:<name>), cycles, errors
Export Parameters
Read the parameters and expressions guide.
Automation details
Command ID: parameters.export
Parameters:
format?: csv|json (default csv, or from the path), path?: write to a file → text
Import Parameters
Read the parameters and expressions guide.
Automation details
Command ID: parameters.import
Parameters:
text: CSV (header with name, expression, unit?, comment?) or JSON [{name, expression, unit?, comment?}] | path; all or nothing
Complete Expression
Read the parameters and expressions guide.
Automation details
Command ID: parameters.complete
Parameters:
prefix?: the text before the cursor → word, suggestions [{text, kind: parameter|function|unit|constant, detail}]
Other commands: expr
Evaluate Expression
Read the parameters and expressions guide.
Automation details
Command ID: expr.evaluate
Parameters:
expression, kind?: length|angle|unitless (or unit?: mm|in|deg…; text: the text a text parameter would hold, as `text`) → ok, value (mm/rad), display_value, references, error
Other commands: file
New Design
Default keyboard shortcut: Ctrl+N
Read the import and export guide.
Automation details
Command ID: file.new
Parameters:
name?
Save
Default keyboard shortcut: Ctrl+S
Read the import and export guide.
Automation details
Command ID: file.save
Parameters:
path? (default: current file); format?: container|json (default: json for .json, otherwise container); compression?: fast|compact (default: fast); cache?: bool (the evaluated model, so the design opens without rebuilding; default: true); preview?: bool (saved display meshes, default: false); overwrite?: bool (replace the design's file even though another program or computer changed it since it was opened or saved; without it that save is refused)
Save As
Default keyboard shortcut: Ctrl+Shift+S
Read the import and export guide.
Automation details
Command ID: file.save_as
Parameters:
path; format?: container|json (default: json for .json, otherwise container); compression?: fast|compact (default: fast); cache?: bool (the evaluated model, so the design opens without rebuilding; default: true); preview?: bool (saved display meshes, default: false); overwrite?: bool (as file.save, when `path` is the design's own file)
Export
Read the import and export guide.
Automation details
Command ID: file.export
Parameters:
path; format?: stl|stla|obj|step|3mf|3mf-tagged|urdf|json (default from extension; 3mf-tagged: 3MF whose triangles carry their B-rep face, at full precision, for meshing and analysis tools; docs/formats/3mf-face-tags.md; urdf: the whole assembly as a robot, with STL meshes written next to it; docs/urdf.md); bodies?: [names] (JSON and URDF export the complete design); urdf only: mesh_prefix? (before each mesh file name, e.g. package://robot/meshes/), effort? (default 1000), velocity? (default 10); quality?: standard|fine|finest (STL, OBJ and 3MF: how closely the mesh follows curved faces, a chord tolerance of 2e-4, 5e-5 or 1e-5 of each body's size; default standard)
Save As Mesh
Command group: INSERT › FILES
Read the import and export guide.
Automation details
Command ID: file.save_mesh
Parameters:
path; format?: stl|3mf|3mf-tagged (default from the extension, else stl; 3mf-tagged: docs/formats/3mf-face-tags.md); bodies?: [names] (default: all); ascii?: bool (STL); slicer?: id or name from file.slicers, the program path it lists, or a program the user added under Custom… (send the saved file there, through the same steps as file.send_to_slicer: a slicer that has to be started first is waited for; may be deprecated later in favour of file.send_to_slicer or a Send to App workflow, kept for scripts); single_instance?: bool (default true; see file.send_to_slicer); quality?: standard|fine|finest (STL, OBJ and 3MF: how closely the mesh follows curved faces, a chord tolerance of 2e-4, 5e-5 or 1e-5 of each body's size; default standard)
Send to Slicer
Command group: INSERT › FILES
Read the import and export guide.
Automation details
Command ID: file.send_to_slicer
Parameters:
slicer: id or name from file.slicers, or a program the user added under Custom…; bodies?: [names] (default: the selected bodies); wait?: block|return|no (default block: a slicer that drops a file at a cold start is started alone and the call waits up to 10 s for it to be ready, then sends; return: start it and answer {starting}; no: send now); single_instance?: bool (default true: PrusaSlicer, SuperSlicer and Cura load the file in the window that is open); format?: 3mf|stl|3mf-tagged (default 3mf, in millimetres; STL if that can't be written) → saves the bodies in this user's slicer folder and opens the file in the slicer. The file name stays the same for the same design and bodies, so sending again replaces it (use the slicer's Reload from disk)
Open with EasyPrint
Read the import and export guide.
Automation details
Command ID: file.open_in_easyprint
Parameters:
consent: bool (required: true only once the user has agreed to upload the model to Printables' servers; it stays there for 30 minutes and opening it needs a Printables sign-in); bodies?: [names] (default: the selected bodies); format?: 3mf|stl (default 3mf, in millimetres) → uploads the bodies to EasyPrint, Printables' slicer in the browser, and opens it in the browser. 100 MB at most. Works in the desktop app and the browser build; the CLI has no way to upload yet
Installed Slicers
Read the import and export guide.
Automation details
Command ID: file.slicers
Parameters:
→ the slicers found on this machine: [{id, name, program, icon?}]; pass an id, a name or the program path as file.send_to_slicer's or file.save_mesh's `slicer`
Export Current View as DXF
Read the import and export guide.
Automation details
Command ID: file.export_view_dxf
Parameters:
camera: Camera (current view); hidden?: omit|dashed (default omit); tolerance?: 0.0001..1 mm (curve chord tolerance, default 0.01); path?: .dxf file (else returns dxf text). Visible placed bodies and shown sketches' profile curves (no construction geometry, points, dimensions or constraints); 2D LINE/LWPOLYLINE entities on VISIBLE/HIDDEN layers (sketch curves on SKETCH), mm; finished sketches are hidden behind bodies, the active sketch is drawn on top; perspective projected onto the camera target plane; no viewport crop or overlays.
Other commands: doc
Open
Default keyboard shortcut: Ctrl+O
Read the import and export guide.
Automation details
Command ID: doc.open
Parameters:
path: .solidcraft design, .dxf/.svg drawing (opens as a new, unsaved design with an XY sketch, using sketch.insert_dxf/sketch.insert_svg units and defaults), or a .step/.stp/.igs/.fcstd/.3dm/.3mf/.stl/.obj/.glb/.gltf file (STEP, IGES, FreeCAD, Rhino, 3MF, STL, OBJ or glTF; opens as a new design holding the file as a component named after it, as file.insert_step and file.insert_mesh make); up?: z|y for a STEP, IGES, FreeCAD, Rhino or glTF file (see file.insert_step and file.insert_mesh); names?: auto|solid|product|instance for a STEP, IGES, FreeCAD or Rhino file (see file.insert_step); read_only?: bool (a design: saving to its own file is refused, file.save_as keeps the changes elsewhere) → open_elsewhere: {host, user, app, opened} when another SolidCraft has the design open (its lock file is fresh)
Recoverable Designs
Read the import and export guide.
Automation details
Command ID: doc.recovery_list
Parameters:
dir? (default: the recovery folder) → designs autosaved by apps that crashed or closed with unsaved changes
Recover Design
Read the import and export guide.
Automation details
Command ID: doc.recover
Parameters:
id (from doc.recovery_list); dir?; discard?: bool (delete the entry once open) — opens it with its file path, unsaved
Discard Recovered Design
Read the import and export guide.
Automation details
Command ID: doc.recovery_discard
Parameters:
id, or all: true; dir?
Other commands: model
List Edges
Automation details
Command ID: model.edges
Parameters:
body: name
List Faces
Automation details
Command ID: model.faces
Parameters:
body: name → per face: index, name (what face.delete, sheet.convert `face`, solid.shell … take in place of a point), exact, area, centroid (not always on the face), plane_normal, point (a point on the face that picks it), cylinder? ({origin, axis, radius} of a cylindrical face), sheet_face? (a folded sheet's face: `sheet:<body>:<panel>:<side>`, panel base or a flange's tag F<feature>.<k>, side top | bottom | rim.<edge> | bend.inner | bend.outer; taken wherever a face name is, and it holds while sizes change and flanges come and go)
List Threads
Automation details
Command ID: model.threads
No parameter description is provided by the command registry.
Other commands: appearance
Appearance Library
Automation details
Command ID: appearance.library
Parameters:
→ 20 legacy scalar appearances, six opaque PBR finishes and 40 starter recipes with IDs, categories, provenance, requirements and availability; six starter glass recipes are unavailable
List Appearances
Automation details
Command ID: appearance.list
Parameters:
body?: name → assigned appearances; with body, its resolved look and its faces' (face index, look)
Paint Appearance
Command group: RENDER APPEARANCE › APPEARANCE
Automation details
Command ID: appearance.paint
Parameters:
No supported parameters. Always refuses without changing the design or history.
Pick Up Appearance
Command group: RENDER APPEARANCE › APPEARANCE
Automation details
Command ID: appearance.pick_up
Parameters:
No supported parameters. Always refuses without changing the design or history.
Replace Appearance
Command group: RENDER APPEARANCE › APPEARANCE
Automation details
Command ID: appearance.replace
Parameters:
No supported parameters. Always refuses without changing the design or history.
Other commands: material
List Materials
Automation details
Command ID: material.list
Parameters:
→ built-in and design-owned materials (user: true, look, optional physical_card/physical_validation/density_comparison). Read-only; candidate engineering records do not certify sources or supply a solver
New Physical Material
Automation details
Command ID: material.create
Parameters:
name (not a built-in material's); density_g_cm3: (0, 1000]; appearance?: library name (appearance.library) | color?: "#rrggbb" or [r, g, b] (0–255), opacity? (0–1), pbr?: {metallic:0..1, roughness:0.045..1, dielectric_ior:1..3} (opaque only, needs color/appearance): the default look. A named appearance keeps its preset response when pbr is omitted; pbr: null selects scalar shading. Optical edits do not change density. physical_card?: validated SI candidate record (null/omitted means unknown); card density never changes assigned density. Assign it with material.assign
Edit Physical Material
Automation details
Command ID: material.edit
Parameters:
material: a material defined in this design; name? (bodies and configuration cells follow); density_g_cm3?; appearance? | color?, opacity?, pbr? (as material.create; color: null clears the look). physical_card?: validated SI candidate record (omitted retains, null clears). Omitted appearance/color retains the entire current look
Inspect Physical Material
Automation details
Command ID: material.inspect
Parameters:
material: built-in or design-owned name. Returns assigned density, default appearance, optional physical_card, validation and density comparison. Read-only; missing engineering data remains unknown and card density does not change mass
Delete Physical Material
Automation details
Command ID: material.delete
Parameters:
material: a material defined in this design; replace?: material for the bodies and configuration cells that use it (without it, a material in use is refused)
Validate Physical Material Data
Automation details
Command ID: material.properties.validate
Parameters:
card: schema_version 1 engineering material card in SI units. Returns numerical consistency, derived isotropic moduli, missing conditions and sources needing review. Read-only; does not assign/save properties or provide an analysis solver. See docs/physical-material-cards.md
Directional Elastic Modulus
Automation details
Command ID: material.properties.directional
Parameters:
card: schema_version 1 engineering material card; direction: three finite nonzero-vector components in the card's material-local axes. Returns normalized direction, Young modulus in Pa and source/condition review. Read-only constitutive query; no structural solver, persistence or body-axis assignment. See docs/physical-material-cards.md
Other commands: engine
List Commands
Automation details
Command ID: engine.commands
No parameter description is provided by the command registry.
Describe Command
Automation details
Command ID: engine.describe
Parameters:
command: a command id. Returns {id, label, params, input, output} (and param_warnings in the warn parameter-check mode): the command's parameter documentation and, once the command has a typed contract, the JSON Schemas (2020-12) of its parameters and of a successful result (null otherwise). Read-only.
Other commands: library
Inspect Local Library
Automation details
Command ID: library.inspect
Parameters:
path: v1/v2 library JSON; returns validated catalog and exact entry revisions, without changing the design
Export Design Library
Automation details
Command ID: library.export
Parameters:
path: .json; id? (default user.local), name?, provenance?, overwrite? false, format? solidcraft-library/2 (default) | solidcraft-library/1 (refuses PBR/cards). Copies assigned looks and design-local physical definitions; never changes the design
Apply Local Library Entry
Automation details
Command ID: library.apply
Parameters:
path, entry: qualified ID, revision: exact content SHA-256; targets?: {bodies?, faces?: [{body,point}], components?}; name?: physical material name on import. Copies values in one undo step; material conflicts are explicit
Other commands: diagnostics
Crash Reports
Automation details
Command ID: diagnostics.crash_reports
Parameters:
limit?: number (default 20). Lists this computer's crash reports, newest first: {dir, reports: [{id, kind, time, message, command, count, version, path, replayable}]}. kind: command_panic | panic | kernel_panic_recovered | unclean_exit. Read one with diagnostics.crash_report; reproduce it with `solidcraft-cli crashes replay <id>`
Crash Report
Automation details
Command ID: diagnostics.crash_report
Parameters:
id: report id. The whole report: message, location, backtrace, app version and commit, system, the command that crashed and the recent ones, notes, and design_path / replay_path when the crash can be replayed (`solidcraft-cli run <replay_path> --in <design_path>`)
Delete Crash Reports
Automation details
Command ID: diagnostics.crash_reports.clear
Parameters:
id?: one report (default: all). Returns {deleted}
Crash Test
Automation details
Command ID: diagnostics.crash_test
Parameters:
mode: panic | kernel | abort. Checks that crash reports work: panic = an internal error in this command (caught; the design is unchanged), kernel = one inside the geometry kernel (caught), abort = the app ends at once (reported at the next start). Only when the SOLIDCRAFT_CRASH_TEST environment variable is set
Other commands: render
Layered Surface Aging
Automation details
Command ID: render.aging.describe
Parameters:
Empty object. Read-only original Rust/patina/dust/grime/scratch/chip/fading presets and exact GPU aging contract. UI activation opens the shared Aging tab; edits remain a saved render draft, never engineering geometry or material-property mutation.
Lens and Creative Effects
Automation details
Command ID: render.effects.describe
Parameters:
Empty object. Read-only original photographic/creative filter defaults and constraints. UI activation opens shared Effects controls. Saved finishing and exact-master regrading preserve raw EXR bytes; no physical lens or branded-film calibration is implied.
Save Optical Binding
Automation details
Command ID: render.optics.bind
Parameters:
name: GPU setup; set?: complete numerical setup patch; body_index and body_name: exact captured target; expected_revision; optics:{ior,absorption_per_mm:[r,g,b],boundary:closed_mesh|closed_box|thin_sheet,thickness_mm,shadow_transmission,subsurface?:{scattering_per_mm,anisotropy}}; replace?:false. Stores stable definition/feature/occurrence identity in one undo without modifying engineering geometry/materials. Nested media require separate job.options.nested_media and producer certification. Unresolved or incompatible targets refuse atomically.
Remove Optical Binding
Automation details
Command ID: render.optics.unbind
Parameters:
name: saved setup; target: exact saved definition/feature/component/occurrence_path; expected_revision. Removes only that optical assignment in one undo without a device or file access.
Regrade Linear Master
Automation details
Command ID: render.result.regrade
Parameters:
job: exact completed JobId; presentation: {exposure_ev?,tone_map?,finishing?,backdrop?,background?,transparent_background?}. Queues cancellable nondestructive PNG presentation from that retained native FLOAT32 master, not from PNG. Captured geometry/camera/lighting and source EXR remain unchanged; no path tracing, denoising, external EXR import or automatic file writes. Returns a distinct job with source identity and original-master digest. Existing frame retention and export rules still apply.
Set Render Camera
Automation details
Command ID: render.camera.set
Parameters:
camera: complete Render Camera snapshot (target, yaw, pitch, distance, fov; roll defaults to 0 and up to z). Validates the same finite mm/radian bounds as saved render intent, preserves explicit roll/up and changes only transient view state. No model evaluation, setup save, renderer, dirty flag or undo step. Design view.apply retains its separate up-axis policy.
Inspect Render Camera
Automation details
Command ID: render.camera.get
Parameters:
No parameters. Returns the explicitly defined current view camera, or null if the session has no camera override. No camera is fitted, no job is started and no saved setup or engineering document is changed.
Frame Render Subject
Automation details
Command ID: render.camera.fit
Parameters:
No parameters. Fits the current camera to the visible product bounds through the shared Camera::fit contract; changes only view state, not a saved setup, rendering job, stage or engineering geometry.
Review Native Studio
Automation details
Command ID: render.preset.resolve
Parameters:
id: NATIVE-STUDIO-001..025; name; set?: typed GPU setup patch; expected_revision?:u64. Resolves original built-in HDR/rig/passive ground with conservative geometry clearance, returns all replacements and preserved fields without mutation. Unbound SCENE-* concepts are not accepted.
Apply Native Studio
Automation details
Command ID: render.preset.apply
Parameters:
Same reviewed input as render.preset.resolve, expected_revision required, replace_lighting_and_environment:true and replace_stage:true when an existing stage would change. Re-resolves the complete candidate and publishes one undo or no mutation; camera, optical bindings, geometry and engineering materials are preserved.
Review Fixed Sampling Budget
Automation details
Command ID: render.quality.prepare
Parameters:
id: Q-*; variant:fixed_samples_png; acknowledge_omissions:true. Read-only bounded GPU still-budget projection, not full adaptive/convergence/linear-master quality acceptance. Returns dimensions/samples/depth/seed/denoise and explicit omissions. Never switches executor or mutates a shot.
Duplicate Render Shot
Automation details
Command ID: render.shot.duplicate
Parameters:
name, new_name, expected_revision:u64. Copies exact saved setup and resource references in one undo. Existing destinations refuse; captured jobs and camera navigation are unchanged.
Rename Render Shot
Automation details
Command ID: render.shot.rename
Parameters:
name, new_name, expected_revision:u64. Renames exact saved setup in one undo; an existing destination or stale review refuses.
Remove Render Shot
Automation details
Command ID: render.shot.remove
Parameters:
name, expected_revision:u64. Removes only that saved setup in one undo; retains resources, geometry and captured results.
Inspect Original Surface Map
Automation details
Command ID: render.library.preview
Parameters:
id: SURF-*. Returns bounded hash-verified original base-color PNG bytes and source-map fidelity label, not a rendered material thumbnail. No external paths, rendering or document edits.
Prepare Physical Reference
Automation details
Command ID: render.library.physical.prepare
Parameters:
id: named built-in physical profile, name: proposed new material label, acknowledge_reference:true. Read-only loss-aware creation plan using native ValidatedCard admission and one point density; returns source receipts, extended fields and omissions. Does not execute material.create, assign bodies or infer effective-part physics.
Save Render Ground
Automation details
Command ID: render.stage.ground
Parameters:
name: typed raytrace setup, set?: setup patch, margin_fraction?:0.25, gap_mm?:0.1, reflectance_linear?:[0.18,0.18,0.18], replace_stage?:false. Fits one finite passive ground below the visible product once and saves its physical transforms in one undo. Product AABB separation is rechecked on every render.
Save Physical Render Background
Automation details
Command ID: render.stage.backdrop
Parameters:
name: typed raytrace setup, set?: setup patch, kind: floor_wall or cyclorama, reflectance_linear?: [0.18,0.18,0.18], expected_revision: reviewed revision, replace_stage?:false. Fits a finite floor/wall or a 24-strip polygonal cyclorama behind the visible subject using the saved camera azimuth; world +Z up and a minimum one-mm stage envelope. Preserves subject geometry, lighting, output, pose and engineering materials; one undo and rechecked product separation. Not an infinite/analytically smooth/terrain background.
Remove Render Stage
Automation details
Command ID: render.stage.clear
Parameters:
name: setup, set?: setup patch. Removes saved render-only panels atomically; CAD geometry and lighting are unchanged.
Save Surface Binding
Automation details
Command ID: render.library.surface.bind
Parameters:
name: GPU setup; set?: setup patch; surface: same input as render.library.surface.prepare; replace?: false. Pins exact source hashes and definition/feature/occurrence identity with local-mm mapping in one undo. No paths, mesh ordinals or physical material changes.
Remove Surface Binding
Automation details
Command ID: render.library.surface.unbind
Parameters:
name: setup, target: saved definition/feature/component/occurrence_path, set?: setup patch. Removes only that explicit binding in one undo; no device or current geometry required.
Retain Displayed Render Result
Automation details
Command ID: render.result.pin
Parameters:
job: completed JobId, or null to release the displayed-result pin. Retains at most one completed result independently of a newer completion; preserves exact export bytes and original host memory accounting. No design/undo change; preview or foreign jobs refuse.
Find Render Library Targets
Automation details
Command ID: render.library.targets
Parameters:
query?: exact-name substring; offset?:0; limit?:128 (1..128). Returns a bounded page of captured body ordinals/names, revision and scene bounds. Settles the model through ordinary command handling; never returns a large mesh payload.
Browse Render Library
Automation details
Command ID: render.library.list
Parameters:
kind?: surfaces, selene_appearances, hdr, rigs, scenes, materials, lighting, environments, quality, native_scenes, selene_shots or capabilities; query?: bounded search; availability?: all/usable/specification/blocked; offset?:0; limit?:48 (1..128). Returns source status and explicit implemented projections separately. No device, file IO or design change.
Inspect Render Library Resource
Automation details
Command ID: render.library.describe
Parameters:
kind, id: exact authored resource. Returns original specification, runtime projection variants and explicit omissions. A concept is not an executable preset.
Apply Library Opaque Appearance
Automation details
Command ID: render.library.appearance.apply
Parameters:
id: SURF-* or SELENE-AP-*; variant: uniform_opaque (required); bodies: 1..256 exact body names. Applies the original scalar baseline through ordinary appearance assignment in one undo, preserving physical properties. Spatial maps and advanced target effects are explicitly excluded.
Apply Built-in HDR Environment
Automation details
Command ID: render.library.environment.apply
Parameters:
id: HDR-*; name: saved setup; set?: typed CPU/GPU setup patch; rotation_rad?: authored rotation (native origin offset is explicit in the reply); intensity?:1; samples?:16 for CPU; replace_environment?:false. Hash-verifies and embeds original bytes, saves one atomic undo without external files or a render device. An HDR-owned sun cannot duplicate an analytic sun.
Prepare Authored Surface Maps
Automation details
Command ID: render.library.surface.prepare
Parameters:
id: SURF-*; body_index and body_name from render.scene; origin?:[0,0,0]; plane?:xy/yz/zx; scale?:1. Returns an explicit GPU planar map binding with source hashes, original millimetre scale, image-up normal orientation and absolute base-color semantics. No document change; height/displacement and true anisotropy are not included.
Prepare Authored Studio Lights
Automation details
Command ID: render.library.studio.prepare
Parameters:
id: RIG-*; variant: complete for emitter-only rigs, emitters_only for rigs with passive cards; center_mm and subject_extent_mm required. Converts exact rectangular half-edges and solar direction/radius to GPU lighting. Blocked calibration and external-sun rigs refuse. Returns a geometry-clearance review requirement; does not create cards or modify the scene.
Apply Authored Studio Lights
Automation details
Command ID: render.library.studio.apply
Parameters:
rig: render.library.studio.prepare parameters; name; set?: typed GPU setup patch; replace_lighting_and_environment:true required. Saves the explicit rig projection in one undo, removing prior lighting/environment only with that confirmation. Subject clearance still needs review; passive cards are never silently omitted.
Inspect HDR Source
Automation details
Command ID: render.hdr.inspect
Parameters:
path: scoped Radiance HDR file; validates the complete bounded source and returns sha256, width, height, encoded_bytes and primaries without saving or rendering
Save Render Settings with HDR
Automation details
Command ID: render.settings.capture_hdr
Parameters:
name, set: typed CPU/GPU setup patch with hdr/environment unset; path: scoped HDR; expected_sha256?: digest returned by render.hdr.inspect (changed sources refuse); rotation_rad?:0, intensity?:1; samples?:1/4/16/64 for CPU only (default16); assume_linear_srgb?:false for GPU only. Captures immutable bytes and saves resource plus setup atomically in one undo, without a host; returns name/setup/resource metadata, never source bytes
Check Render Request
Automation details
Command ID: render.preflight
Parameters:
setup?: saved name OR settings?: full RenderSetup. A typed job selects raster/cpu_raytrace/gpu_path and its numerical options plus embedded HDR before dispatch; only replace may accompany it. Without job, the legacy runtime controls below remain available. See docs/render-settings.md. integrator?: raster (default) or raytrace; progressive?: false (registered GPU path, CPU integrator/LED options are mutually exclusive); samples?: 1..4096; max_depth?: 1..16; seed?: u32 for progressive; raytrace?: bounded runtime progressive/primary_samples/lights/punctual_lights/area_lights/area_samples/seed/exposure_ev/shadows/reflections/anisotropic_faces/emissions/surface_effects/dielectrics/environment options, only with raytrace. CPU raytrace.budget?: compact (legacy default), studio or workstation; see docs/render-cpu-resource-profiles.md for explicit image/geometry/memory/work limits. CPU raytrace.progressive?: {samples_per_pixel:1..profile limit, seed:u32}; requires primary_samples:1 and selected reflections.samples:1; no area/LED, anisotropy or dielectrics in this initial mode. See docs/render-cpu-progressive.md; environment?: {path: scoped HDR, expected_sha256?: inspected digest, rotation_radians: 0, intensity: 1, samples: 16} OR {resource: saved HDR digest, rotation_radians, intensity, samples}; embedded resources cannot combine with path/hash; explicit sRGB/D65 HDR primaries required. Opaque CPU preview with selected mirror/rough-specular reflections and certified planar anisotropy. HDR with rough reflections or anisotropy requires fully metallic selected bodies and all effective faces; unsupported combinations refuse. No MIS or GI. CPU runtime dielectrics support only certified thin_sheet/closed_box boundaries with explicit IOR and Beer absorption; see docs/render-raytrace-dielectrics.md. CPU emissions are visible radiance only; surface_effects change roughness/shading normals without geometry changes. led_strip?: continuous world-mm LED rectangle recipe; led_samples?: 1/4/16/64 for the whole strip, default16. At most8directional+8punctual+4rectangle/LED sources; shared area N. See docs/render-light-union.md. transparent_background?: false; replace?: false. With progressive:true, raytrace instead accepts GPU dielectrics/clear_coats/textures; environment instead accepts tagged hdr/embedded_hdr/sky with rotation_rad/intensity; file hdr supports expected_sha256, embedded_hdr uses a document resource digest. See docs/render-hdr-resources.md. GPU lens, studio lighting, tone_map, denoise, bounded finishing/backdrop and linear_exr retention are also available. GPU adaptive?: {pilot_samples:16..256,min_samples:16..samples,relative_error:0..1,absolute_error:0.000001..1000000,coverage_error:0.001..0.25} allocates independent production budgets; pilots are discarded, not a certified error guarantee. transmission_samples?:1|2|4 stratifies the first Fresnel branch with extra path cost. volume?:{min_mm:[x,y,z],max_mm:[x,y,z],extinction_per_mm:0..1000,scattering_albedo:[r,g,b],anisotropy:-0.95..0.95} is one finite homogeneous world-mm medium; active media require explicit lighting/environment and refuse glass, denoise and multiple transmission strata. These fields also persist in GPU job.options. See docs/render-materials/TRANSPORT-MASTER-BATCH-2026-10-23.md; see docs/render-transmission.md, render-environment.md, render-runtime-textures.md, render-thin-lens.md, render-studio-lighting.md and render-denoise.md. Optional CPU raytracing requires a raytrace-cpu build and native host, checked before scene capture. Stale geometry is rejected. See docs/render-jobs.md
Render Image
Command group: RENDER › IMAGE
Automation details
Command ID: render.start
Parameters:
Same request as render.preflight. Captures an immutable product scene and queues a bounded image job. Returns its session-scoped job identity, captured scene_generation and progress. Does not change the design. See docs/render-jobs.md
Render Progress
Automation details
Command ID: render.status
Parameters:
job: {session, serial, generation}. Non-blocking progress, error, optional CPU preview metadata {frame_sequence,samples_per_pixel,frame}, and completed frame metadata, optional sampling allocation/work counts and retained-master presentation provenance; no image bytes and no rendering in this call. Preview is separate from the exportable final image.
Cancel Render
Automation details
Command ID: render.cancel
Parameters:
job: {session, serial, generation}. Requests cooperative cancellation; completed jobs remain completed. Late cancelled frames cannot be published.
Export Render Image
Automation details
Command ID: render.export
Parameters:
job: {session, serial, generation}, path: destination matching format?: png (default) or exr, overwrite?: false. EXR requires an opt-in raw linear master retained by that completed GPU job; never converts PNG pixels. Exports a retained completed image atomically; an existing destination is preserved on failure. See docs/render-jobs.md
Render Backends
Automation details
Command ID: render.backends
Parameters:
No parameters. Returns {schema_version: 1, default_backend: builtin, backends: [{id, label, availability, executors: [{id, availability, profiles, limits, scratch}]}]}. Metadata only; does not start rendering or probe a GPU. See docs/render-backends.md
Render Settings
Automation details
Command ID: render.settings.get
Parameters:
name?: saved setup. Without name returns {setups, defaults}; with name returns {name, setup}. Does not evaluate the model or apply a camera. See docs/render-settings.md
Save Render Settings
Automation details
Command ID: render.settings.set
Parameters:
name: setup name, set: object of fields to replace (backend, mode, camera, width, height, format, exposure_ev, environment_rotation, environment_intensity, background, job, surfaces, stage). job?: typed active raster/cpu_raytrace/gpu_path configuration with optional validated embedded HDR reference; omitted preserves, null clears, object replaces the complete job. Creates from defaults and saves without a host, validates atomically, one undo step; identical edits are no-ops. See docs/render-settings.md
Inspect Render Scene
Command group: RENDER › SCENE
Automation details
Command ID: render.scene
Parameters:
No parameters. Authoritative product-scene metadata, without modelling overlays or mesh payloads. Explicitly settles stale geometry; does not render an image. See docs/render-workspace.md
Apply Render Camera
Automation details
Command ID: render.settings.apply
Parameters:
name: saved setup. Applies its existing Camera snapshot including roll/up as view state, without modifying the document or starting a render.
Solo Light
Command group: RENDER SCENE › LIGHTS
Automation details
Command ID: render.lights.solo
Parameters:
No supported parameters. Always refuses without changing the design or history.
Compare Images
Command group: RENDER › RESULT
Automation details
Command ID: render.compare
Parameters:
No supported parameters. Always refuses without changing the design or history.
Render All Shots
Command group: RENDER › BATCH
Automation details
Command ID: render.batch
Parameters:
No supported parameters. Always refuses without changing the design or history.