Freecad operation reference
Generated from the current declarations. Do not edit this file by hand.
All routes support shared document/value expressions and finite analytic studies through the framework runtime. Lengths use millimetres. All outputs must be one valid positive-volume solid. See CAD and mesh workflows for native and tessellated output limits.
Index#
body, box, chamfer, circle, common, cone, cut, cylinder, extrude, fillet, fuse, importSTEP, loft, multiFuse, pad, pocket, polygon, readSTEP, rectangle, revolve, sphere, torus
body#
Create the native PartDesign container for one mechanical part and its feature history.
Common mistakes and assumptions:
- A Body is a container, not a solid output. This slice supports one Body at the world origin, one first Pad and a linear Pocket chain.
Native binding: PartDesign::Body. Output kind: ["body"].
Inputs: none.
Options: none.
box#
Creates a native Part::Box: an axis-aligned rectangular solid whose minimum corner sits at origin and which extends length along +X, width along +Y and height along +Z, in millimetres. Choose it for plates, stock blanks and rectangular cut tools. It has no rotation option; for a block in another orientation extrude a rectangle or polygon along the required direction. Schemaxis always assigns all four settings (defaults: a 10 mm cube at the world origin), and the feature stays editable in the published FCStd. In batch parts, parameters plus drive can retain supported length relationships in a native VarSet instead of materialising only the current number.
Common mistakes and assumptions:
- origin is the minimum corner, not the centre: to centre a 20 mm wide box on x = 0, set origin x to -10.
- As a cut tool, let the box overshoot the faces it should pass through; coincident faces make booleans fragile.
- Recorded native qualification for this route covers an analytic box and a height variant (qualification.json box-baseline and box-variant); it does not qualify every boolean that uses a box.
Native binding: Part::Box. Output kind: ["solid"].
Inputs: none.
| Option | Meaning | Type / constraints | Default |
|---|---|---|---|
length |
Edge length of the block along the world X axis, in millimetres (Part::Box Length); the block spans X from the origin corner to origin + length. Must be greater than 0. | {"type":"number","minimum":0,"exclusiveMinimum":true,"maximum":100000} |
10 |
width |
Edge length of the block along the world Y axis, in millimetres (Part::Box Width); the block spans Y from the origin corner to origin + width. Must be greater than 0. | {"type":"number","minimum":0,"exclusiveMinimum":true,"maximum":100000} |
10 |
height |
Edge length of the block along the world Z axis, in millimetres (Part::Box Height); the block spans Z from the origin corner to origin + height. Must be greater than 0. | {"type":"number","minimum":0,"exclusiveMinimum":true,"maximum":100000} |
10 |
origin |
World coordinates [x, y, z] of the block's minimum corner (the Part::Box placement base, its front-left-bottom corner). The block extends from this point in the positive X, Y and Z directions; there is no rotation option. | {"type":"array","items":{"type":"number"},"minItems":3,"maxItems":3} |
[0,0,0] |
chamfer#
Bevels selected edges of an existing solid with one equal distance on both adjoining faces (native Part::Chamfer) and produces a solid. Edge selection works exactly as for fillet: one-based indices of the base solid or a geometric selector with an exact expected count. Choose it for lead-in bevels and broken edges where a flat face is wanted instead of a round.
Common mistakes and assumptions:
- The default edges [1] is just the first edge of the base topology; choose edges deliberately.
- Oversized or intersecting chamfers fail native checks; planning only checks that indices exist.
- Covered by an analytic-volume acceptance fixture (all twelve edges of a block); not exhaustively qualified.
Native binding: Part::Chamfer. Output kind: ["solid"].
| Input port | Multiplicity | Required | Kind |
|---|---|---|---|
base |
one node | yes | solid |
| Option | Meaning | Type / constraints | Default |
|---|---|---|---|
distance |
Chamfer setback in millimetres, applied equally on both faces adjoining every selected edge, so a chamfer between perpendicular faces is a 45° bevel. Too large a distance for the adjoining faces makes FreeCAD fail the chamfer. | {"type":"number","minimum":0,"exclusiveMinimum":true,"maximum":100000} |
1 |
edges |
Which edges of the base solid to bevel: either a list of one-based edge indices or a geometric selector with an exact expected count. The selection always refers to the base input's edges, not to the chamfer result; Schemaxis resolves it, assigns the indices to the native feature and rechecks them after reopening. | {"type":"union","options":[{"type":"array","items":{"type":"integer","minimum":1},"minItems":1,"maxItems":1000,"uniqueItems":true},{"type":"object","properties":{"where":{"type":"object","required":true,"properties":{"curve":{"type":"enum","values":["line","circle"]},"parallelTo":{"type":"array","items":{"type":"number","minimum":-1000000.0,"maximum":1000000.0},"minItems":3,"maxItems":3},"onPlane":{"type":"object","properties":{"axis":{"type":"enum","values":["x","y","z"],"required":true},"coordinate":{"type":"number","required":true}}},"length":{"type":"object","properties":{"minimum":{"type":"number","minimum":0,"required":true},"maximum":{"type":"number","minimum":0,"required":true}}}}},"expect":{"type":"integer","minimum":1,"maximum":1000,"required":true},"tolerance":{"type":"number","minimum":1e-09,"maximum":0.01,"default":1e-06},"angularTolerance":{"type":"number","minimum":1e-09,"maximum":0.01,"default":1e-06}}}]} |
[1] |
circle#
Creates a circular sketch profile centred on origin in the XY, XZ or YZ plane, built as a fully constrained Sketcher sketch with a constraint named radius. Choose it as a section for loft (for example two circles of different radii for a tapered duct) or to extrude a round bar along any direction; for a plain cylinder, cylinder needs no profile node. Optional inputs.body places this sketch in an origin-based PartDesign Body for Pad/Pocket history. Named dimensions can use persistent parameters and drive in batch runs. Optional centre gives signed [x,y] coordinates and named centreX/centreY constraints instead of coincidence at the origin.
Common mistakes and assumptions:
- A profile cannot be the output node.
- Loft sections must sit at different positions: offset the second circle with origin along the plane normal.
Native binding: Sketcher::SketchObject. Output kind: ["profile"].
| Input port | Multiplicity | Required | Kind |
|---|---|---|---|
body |
one node | no | body |
| Option | Meaning | Type / constraints | Default |
|---|---|---|---|
radius |
Radius of the circle in millimetres, stored as the sketch constraint named radius. | {"type":"number","minimum":0,"exclusiveMinimum":true,"maximum":100000} |
5 |
plane |
World plane containing the circle; its normal is +Z on XY, along −Y on XZ and +X on YZ. Pick the plane perpendicular to the direction you will extrude along or loft through. | {"type":"enum","values":["XY","XZ","YZ"]} |
"XY" |
origin |
World coordinates [x, y, z] of the circle's centre. For loft sections, offset successive circles along the plane normal (for example origin [0, 0, 30] for the upper section on XY). | {"type":"array","items":{"type":"number"},"minItems":3,"maxItems":3} |
[0,0,0] |
centre |
Signed local sketch coordinates [x, y] in mm, each within +/-100000. Supplying centre creates named centreX/centreY constraints, including zero or negative values; omitting it keeps the centred coincidence constraint. Coordinate drivers are not exposed. | {"type":"array","items":{"type":"number","minimum":-100000,"maximum":100000},"minItems":2,"maxItems":2} |
omitted |
common#
Keeps only the volume shared by two solids (native Part::Common, an intersection). Choose it to trim a part to an envelope, or to build shapes such as a lens from two spheres. The operands must overlap with positive volume; disjoint or merely touching solids leave nothing, which fails native validity even for an intermediate node.
Common mistakes and assumptions:
- The intersection does not depend on which operand is base or tool.
- Covered by an analytic-volume acceptance fixture (two half-overlapping boxes, 3000 mm³); not exhaustively qualified.
Native binding: Part::Common. Output kind: ["solid"].
| Input port | Multiplicity | Required | Kind |
|---|---|---|---|
base |
one node | yes | solid |
tool |
one node | yes | solid |
Options: none.
cone#
Creates a native Part::Cone: a solid of revolution with radius1 at the base circle (centred at origin) and radius2 at the top circle, height along axis. radius2 = 0 gives a pointed cone; otherwise it is a frustum. Choose it for countersink tools, nozzles and tapers between two circles; use loft for transitions between non-circular sections.
Common mistakes and assumptions:
- radius1 must be greater than 0, so the apex can only be at the top; to point the cone the other way, reverse axis and move origin.
- Equal radii make FreeCAD 1.1 build a cylinder instead of a cone.
- Covered by the analytic-volume acceptance fixture (cone along +X, verification/2026-09-19-adaptor-expansion.json); not exhaustively qualified.
Native binding: Part::Cone. Output kind: ["solid"].
Inputs: none.
| Option | Meaning | Type / constraints | Default |
|---|---|---|---|
radius1 |
Radius of the base circle at origin, in millimetres (FreeCAD Radius1). It must be greater than 0, so a pointed apex can only be at the top. | {"type":"number","minimum":0,"exclusiveMinimum":true,"maximum":100000} |
10 |
radius2 |
Radius of the top circle, at height along axis from origin, in millimetres (FreeCAD Radius2). 0 gives a pointed cone; a value larger than radius1 makes the cone widen away from its base. If it equals radius1, FreeCAD 1.1 builds a cylinder instead. | {"type":"number","minimum":0,"maximum":100000} |
5 |
height |
Distance from the base circle to the top circle along axis, in millimetres. With the radii it sets the taper angle. | {"type":"number","minimum":0,"exclusiveMinimum":true,"maximum":100000} |
20 |
origin |
World coordinates [x, y, z] of the centre of the base (radius1) circle. | {"type":"array","items":{"type":"number"},"minItems":3,"maxItems":3} |
[0,0,0] |
axis |
World direction from the base circle towards the top circle; the native placement turns the cone's local Z axis to it. Magnitude is ignored. | {"type":"array","items":{"type":"number"},"minItems":3,"maxItems":3} |
[0,0,1] |
cut#
Subtracts the tool solid from the base solid (native Part::Cut) and produces a solid linked to both inputs, so editing an operand in FreeCAD recomputes the result. Choose it for holes, slots and pockets; position the hole by the tool's own options. Use common to keep only the overlap, and fuse or multiFuse to add material.
Common mistakes and assumptions:
- base and tool are not interchangeable: swapping them keeps the tool minus the base.
- Planning only checks that both inputs are earlier solids; a tool that misses the base or touches it only on a face can still fail or leave an unchanged part. Check the volume with a measurement.
- Native evidence: the bracket and flange gallery examples (verification/2026-09-19-freecad-gallery.json); booleans are not exhaustively qualified.
Native binding: Part::Cut. Output kind: ["solid"].
| Input port | Multiplicity | Required | Kind |
|---|---|---|---|
base |
one node | yes | solid |
tool |
one node | yes | solid |
Options: none.
cylinder#
Creates a native Part::Cylinder whose base circle is centred at origin and which extends height along axis. Choose it for pins, bosses and round bars, and above all as the tool for a round hole in cut. Unlike circle + extrude it needs no separate profile node; the axis may point in any direction. In batch parts, parameters plus drive can retain supported length relationships in a native VarSet instead of materialising only the current number.
Common mistakes and assumptions:
- radius is half the hole diameter.
- For a through-hole, start the tool below the part and make it longer than the part is thick (the bracket example uses origin z = -1 and height 10 for an 8 mm plate).
- A zero axis vector fails planning with INVALID_AXIS.
Native binding: Part::Cylinder. Output kind: ["solid"].
Inputs: none.
| Option | Meaning | Type / constraints | Default |
|---|---|---|---|
radius |
Radius of the circular cross-section, in millimetres (Part::Cylinder Radius). For a drill tool this is half the hole diameter. | {"type":"number","minimum":0,"exclusiveMinimum":true,"maximum":100000} |
5 |
height |
Length of the cylinder from its base circle along axis, in millimetres (Part::Cylinder Height). | {"type":"number","minimum":0,"exclusiveMinimum":true,"maximum":100000} |
10 |
origin |
World coordinates [x, y, z] of the centre of the cylinder's base circle; the cylinder extends from here by height along axis. | {"type":"array","items":{"type":"number"},"minItems":3,"maxItems":3} |
[0,0,0] |
axis |
World direction [x, y, z] in which the cylinder extends from its base; Schemaxis rotates the native placement so the cylinder's local Z axis points this way. Only the direction matters ([0, 0, 2] equals [0, 0, 1]); a negated vector makes the cylinder grow to the other side of origin. | {"type":"array","items":{"type":"number"},"minItems":3,"maxItems":3} |
[0,0,1] |
extrude#
Sweeps a closed profile (polygon, rectangle or circle) a fixed length along a direction to make a prism-like solid (native Part::Extrusion with Solid enabled, a custom direction, one-sided, no taper). The solid stays linked to its profile, so editing the sketch in FreeCAD updates it. A direction that is not perpendicular to the profile gives an oblique prism. Use revolve for solids of revolution and loft to change section along the way. In batch parts, parameters plus drive can retain supported length relationships in a native VarSet instead of materialising only the current number.
Common mistakes and assumptions:
- direction defaults to +Z, which lies inside XZ and YZ sketch planes; set it to the plane normal for such profiles.
- The input must be a profile node; extruding a solid fails with TYPE_MISMATCH.
- Covered by an analytic-volume acceptance fixture (an L-shaped polygon, 5400 mm³); not exhaustively qualified.
Native binding: Part::Extrusion. Output kind: ["solid"].
| Input port | Multiplicity | Required | Kind |
|---|---|---|---|
profile |
one node | yes | profile |
| Option | Meaning | Type / constraints | Default |
|---|---|---|---|
length |
Distance the profile travels along direction, in millimetres (FreeCAD Length Fwd). FreeCAD uses the direction only as a unit vector when this length is set, so the vector's magnitude never changes the distance. For an oblique direction the prism's height perpendicular to the profile is smaller than length. | {"type":"number","minimum":0,"exclusiveMinimum":true,"maximum":100000} |
10 |
direction |
World direction [x, y, z] of the sweep (FreeCAD Dir with Dir Mode Custom). Use the profile plane's normal for a right prism: [0, 0, 1] for XY, [0, 1, 0] or [0, -1, 0] for XZ, [1, 0, 0] or [-1, 0, 0] for YZ. A tilted direction gives an oblique prism. | {"type":"array","items":{"type":"number"},"minItems":3,"maxItems":3} |
[0,0,1] |
fillet#
Rounds selected edges of an existing solid with one constant radius (native Part::Fillet) and produces a solid. Select edges either by one-based index in the base solid's topology or, preferably, with a geometric selector (where + expect) that Schemaxis resolves again for every design variant and rechecks after reopening. Apply it late in the feature tree, after booleans, as the FreeCAD documentation advises; use chamfer for a flat bevel.
Common mistakes and assumptions:
- The default edges [1] is just the first edge of the base topology; always choose edges deliberately (inspect the base node with schemaxis inspect --node).
- A radius too large for the adjacent faces makes FreeCAD fail the fillet; planning cannot detect this.
- A selector must match exactly expect edges; otherwise the run fails (EMPTY_SELECTION, AMBIGUOUS_SELECTION or SELECTION_COUNT_MISMATCH) instead of rounding other edges.
Native binding: Part::Fillet. Output kind: ["solid"].
| Input port | Multiplicity | Required | Kind |
|---|---|---|---|
base |
one node | yes | solid |
| Option | Meaning | Type / constraints | Default |
|---|---|---|---|
radius |
Constant fillet radius in millimetres, applied to every selected edge (each native edge entry uses the same start and end radius). A larger radius removes more material; a radius too large for the faces meeting at an edge makes FreeCAD fail the fillet. | {"type":"number","minimum":0,"exclusiveMinimum":true,"maximum":100000} |
1 |
edges |
Which edges of the base solid to round: either a list of one-based edge indices or a geometric selector with an exact expected count. The selection always refers to the base input's edges, not to the fillet result; Schemaxis resolves it, assigns the indices to the native feature and rechecks them after reopening. | {"type":"union","options":[{"type":"array","items":{"type":"integer","minimum":1},"minItems":1,"maxItems":1000,"uniqueItems":true},{"type":"object","properties":{"where":{"type":"object","required":true,"properties":{"curve":{"type":"enum","values":["line","circle"]},"parallelTo":{"type":"array","items":{"type":"number","minimum":-1000000.0,"maximum":1000000.0},"minItems":3,"maxItems":3},"onPlane":{"type":"object","properties":{"axis":{"type":"enum","values":["x","y","z"],"required":true},"coordinate":{"type":"number","required":true}}},"length":{"type":"object","properties":{"minimum":{"type":"number","minimum":0,"required":true},"maximum":{"type":"number","minimum":0,"required":true}}}}},"expect":{"type":"integer","minimum":1,"maximum":1000,"required":true},"tolerance":{"type":"number","minimum":1e-09,"maximum":0.01,"default":1e-06},"angularTolerance":{"type":"number","minimum":1e-09,"maximum":0.01,"default":1e-06}}}]} |
[1] |
fuse#
Unites two solids into one (native Part::Fuse), for example a boss on a plate or the two legs of a bracket. The operands must overlap or share a face: separate pieces give a result with two solids, which cannot be the output. Use multiFuse to unite three or more solids in one feature, with optional refinement.
Common mistakes and assumptions:
- Disjoint operands produce two solids; as the output this fails with INVALID_GEOMETRY.
- Schemaxis does not set Refine on fuse (or cut and common); FreeCAD 1.1 takes it from the installation's Part/Boolean RefineModel preference (true unless changed), so edge numbering for index-based finishing can differ between installations. multiFuse sets refine explicitly.
Native binding: Part::Fuse. Output kind: ["solid"].
| Input port | Multiplicity | Required | Kind |
|---|---|---|---|
base |
one node | yes | solid |
tool |
one node | yes | solid |
Options: none.
importSTEP#
Bring one external STEP solid (for example a supplier part) into the model with explicit units, axis orientation and placement, check it against facts you declare from its drawing or datasheet, optionally merge coplanar faces, and continue with ordinary cuts, fillets, measurements and checked STEP, STL and FCStd publications.
Common mistakes and assumptions:
- Imported geometry has no sketches, parameters or feature history; edit it by placement or later features.
- Declared facts are checked on the exact solid; they are not a guarantee of identity or orientation for symmetric parts.
- Live preview does not support importSTEP; use a batch run.
- Runs made before hardened export verification report RERUN_REQUIRED instead of verified.
Native binding: Part::Feature. Output kind: ["solid"].
Inputs: none.
| Option | Meaning | Type / constraints | Default |
|---|---|---|---|
file |
Path of a plain ISO 10303-21 STEP file (AP203, AP214 or AP242) holding exactly one solid, or a workflow artifact reference to a verified STEP publication. A relative path resolves against the directory planning runs in, and that resolved path is recorded. Planning reads at most 32 MiB, 100000 entities and 2000 oriented edges per loop; the run keeps a byte-identical copy and saved verification uses only that copy. | {"type":"string","minLength":1,"maxLength":4096} |
required |
units |
The length unit the STEP file itself assigns to its shape: mm, cm, m or inch. It asserts what the file means and never rescales it; FreeCAD converts the assigned unit to millimetres. A different assigned unit fails with UNIT_MISMATCH, and a file with no assigned length unit fails with UNDECLARED_UNIT because units are never guessed. | {"type":"enum","values":["mm","cm","m","inch"]} |
required |
orientation |
Which signed file axes become the part +Z and +X; +Y completes a right-handed frame. The default keeps the file axes. A Y-up export is mapped with z "+Y" and x "+X". A reflection cannot be expressed, so orientation never changes handedness. | {"type":"object","properties":{"z":{"type":"enum","values":["+X","-X","+Y","-Y","+Z","-Z"],"default":"+Z"},"x":{"type":"enum","values":["+X","-X","+Y","-Y","+Z","-Z"]}}} |
{"z":"+Z"} |
placement |
Where the oriented part is placed in the model. It is stored as the editable placement of the imported source object, so a later GUI edit moves the part and its refine output together. | {"type":"object","properties":{"position":{"type":"array","items":{"type":"number","minimum":-100000,"maximum":100000},"minItems":3,"maxItems":3,"default":[0,0,0]},"clocking":{"type":"number","minimum":-360,"maximum":360,"default":0}}} |
{"position":[0,0,0],"clocking":0} |
expect |
Facts the imported part must satisfy, measured on the exact solid in the part frame: after units and orientation, before placement. Volume is required, together with a centre of mass or at least one inside and one outside point, because volume, area and bounds alone accept a mirrored or turned part. These checks verify only the declared facts; a symmetric part or poorly chosen points can still hide a mirror, a turn or a different part, and FreeCAD may silently repair a file's face orientation. | {"type":"object","properties":{"volume":{"type":"object","required":true,"properties":{"value":{"type":"number","minimum":0,"exclusiveMinimum":true,"maximum":1000000000000000.0,"required":true},"relativeTolerance":{"type":"number","minimum":1e-09,"maximum":0.01,"default":1e-06}}},"centreOfMass":{"type":"object","properties":{"value":{"type":"array","items":{"type":"number","minimum":-1000000.0,"maximum":1000000.0},"minItems":3,"maxItems":3,"required":true},"tolerance":{"type":"number","minimum":1e-06,"maximum":1,"default":0.01}}},"bounds":{"type":"object","properties":{"value":{"type":"array","items":{"type":"number","minimum":-1000000.0,"maximum":1000000.0},"minItems":6,"maxItems":6,"required":true},"tolerance":{"type":"number","minimum":1e-06,"maximum":1,"default":0.01}}},"points":{"type":"object","properties":{"inside":{"type":"array","items":{"type":"array","items":{"type":"number","minimum":-1000000.0,"maximum":1000000.0},"minItems":3,"maxItems":3},"minItems":0,"maxItems":32,"default":[]},"outside":{"type":"array","items":{"type":"array","items":{"type":"number","minimum":-1000000.0,"maximum":1000000.0},"minItems":3,"maxItems":3},"minItems":0,"maxItems":32,"default":[]},"guard":{"type":"number","minimum":1e-06,"maximum":10,"required":true}}}}} |
required |
refine |
Add a parametric Part::Refine output that merges coplanar and co-cylindrical faces of the import. It must keep volume and centre of mass within the declared tolerances and must not add faces, otherwise PREPARATION_CHANGED_GEOMETRY; it follows the source placement and keeps identity placement itself. No other repair or healing is performed. | {"type":"boolean"} |
false |
loft#
Builds a solid that blends through two or more closed profiles in the listed order (native Part::Loft with Solid on and Closed off), for tapered ducts, nozzles and transitions such as round-to-square. Each section must be a profile node at a distinct position, usually offset along a common normal with origin. ruled chooses straight-line or smooth surfaces between sections.
Common mistakes and assumptions:
- Section order is the sweep order; listing sections out of positional order gives a twisted or self-intersecting result.
- Planning cannot check that sections are compatible (for example a circle and a rectangle); native lofting can still fail.
- Native test evidence: two ruled circles (radius 20 and 10, 30 mm apart) loft to the analytic frustum volume 7000π mm³; other section combinations are not qualified.
Native binding: Part::Loft. Output kind: ["solid"].
| Input port | Multiplicity | Required | Kind |
|---|---|---|---|
sections |
nonempty list | yes | profile |
| Option | Meaning | Type / constraints | Default |
|---|---|---|---|
ruled |
true joins each pair of consecutive sections with ruled (straight-line) surfaces, giving straight-sided transitions with creases at intermediate sections; false fits smooth surfaces through all the sections. Choose ruled for predictable straight-sided shapes such as a frustum between two circles. | {"type":"boolean"} |
false |
multiFuse#
Unites 2 to 32 solids in one native Part::MultiFuse feature, for example a frame of overlapping bars or a cluster of bosses, instead of a chain of fuse nodes. The union must still be one connected solid. With refine true (the Schemaxis default) FreeCAD merges face fragments that lie on the same surface, giving cleaner topology for later finishing.
Common mistakes and assumptions:
- Any solid that does not touch the others leaves a second solid; as the output this fails with INVALID_GEOMETRY.
- refine changes edge numbering; inspect the result before writing index-based fillet or chamfer edges.
- Native test evidence: three overlapping 10 mm boxes unite to 2000 mm³; not exhaustively qualified.
Native binding: Part::MultiFuse. Output kind: ["solid"].
| Input port | Multiplicity | Required | Kind |
|---|---|---|---|
shapes |
nonempty list | yes | solid |
| Option | Meaning | Type / constraints | Default |
|---|---|---|---|
refine |
true applies FreeCAD's shape refinement to the union: adjoining faces that lie on the same surface are merged and the seam edges between them removed. false keeps every face fragment from the boolean. Refinement changes face and edge numbering, so index-based edges for a later fillet or chamfer must be read from the result built with the same setting. | {"type":"boolean"} |
true |
pad#
Turn an owned constrained sketch into the first solid of its Body, extruded along +Z.
Common mistakes and assumptions:
- Requires an earlier Body and a profile owned by that Body. The first Pad has no native BaseFeature; length may use a persistent driver.
Native binding: PartDesign::Pad. Output kind: ["solid"].
| Input port | Multiplicity | Required | Kind |
|---|---|---|---|
body |
one node | yes | body |
profile |
one node | yes | profile |
| Option | Meaning | Type / constraints | Default |
|---|---|---|---|
length |
Positive first-Pad thickness in mm along +Z, default 10 mm. Omit when drive.length supplies a persistent native relationship. | {"type":"number","minimum":0,"exclusiveMinimum":true,"maximum":100000} |
10 |
pocket#
Cut a through hole from the current Body tip using an unused sketch in the same Body.
Common mistakes and assumptions:
- The XY sketch cuts along +Z through all stock. Fixed depth and other side modes are unsupported. Select the final solid tip as output.
Native binding: PartDesign::Pocket. Output kind: ["solid"].
| Input port | Multiplicity | Required | Kind |
|---|---|---|---|
base |
one node | yes | solid |
profile |
one node | yes | profile |
| Option | Meaning | Type / constraints | Default |
|---|---|---|---|
extent |
The supported value throughAll retains native ThroughAll intent as the stock thickness changes. Fixed length and other side/extent modes are deliberately unsupported. | {"type":"enum","values":["throughAll"]} |
"throughAll" |
polygon#
Creates a closed, straight-sided sketch profile (Sketcher::SketchObject) from ordered 2D vertices on the XY, XZ or YZ plane. It produces a profile, not a solid: feed it to extrude, revolve or loft. Choose it for L-sections, trapezoids and other outlines; use rectangle or circle for those shapes, since they are fully dimension-constrained in FreeCAD. Schemaxis closes the outline and rejects repeated vertices, zero area and self-intersection before FreeCAD runs.
Common mistakes and assumptions:
- A profile cannot be the output node; it fails with TYPE_MISMATCH.
- Schemaxis adds no sketch constraints to a polygon, so in FreeCAD its vertices are free geometry rather than named dimensions.
- Choose plane before writing points: the same [u, v] values land on different world axes on each plane.
Native binding: Sketcher::SketchObject. Output kind: ["profile"].
Inputs: none.
| Option | Meaning | Type / constraints | Default |
|---|---|---|---|
points |
Ordered [u, v] vertices of the closed outline in the sketch plane, in millimetres. Consecutive points, and the last and first points, are joined by straight edges. Provide 3 to 100 points; Schemaxis rejects repeated vertices, a zero enclosed area and edges that cross or touch non-adjacent edges. | {"type":"array","items":{"type":"array","items":{"type":"number"},"minItems":2,"maxItems":2},"minItems":3,"maxItems":100} |
required |
plane |
World plane containing the polygon. XY maps sketch u, v to world X, Y (normal +Z); XZ maps them to X, Z (normal along −Y); YZ maps them to Y, Z (normal +X). Choose the plane whose normal is the direction you will extrude along, or, for revolve, a plane that contains the revolution axis (XZ or YZ for the default Z axis). | {"type":"enum","values":["XY","XZ","YZ"]} |
"XY" |
origin |
World coordinates [x, y, z] of the sketch's (0, 0) point; every vertex is offset by it. Use it to move a profile along the plane normal, for example to stack loft sections. | {"type":"array","items":{"type":"number"},"minItems":3,"maxItems":3} |
[0,0,0] |
readSTEP#
Imports one solid from a STEP file as a static Part::Feature so that later nodes can cut, fuse, fillet or measure it, for example to drill a supplier part or to continue from a STEP published by an earlier workflow step. Schemaxis copies the file into the run directory and records its SHA-256 digest; saved verification checks that retained copy, so a moved or exported run still verifies after the original is removed, while a new plan or resume reads the current file. The shape has no feature history, and the file must contain exactly one valid solid. For declared units, orientation, checked facts and refine, use importSTEP.
Common mistakes and assumptions:
- Multi-body or assembly STEP files fail with INVALID_GEOMETRY; export a single solid.
- readSTEP does not check units: FreeCAD silently applies the unit the file assigns and assumes millimetres when none is assigned. Use importSTEP with explicit units and expectations, or check bounds and volume with a measurement.
- Live preview does not support readSTEP (UNSUPPORTED_LIVE_INPUT); use a batch run.
- Changing the source file before verification fails with INPUT_CHANGED.
Native binding: Part::Feature. Output kind: ["solid"].
Inputs: none.
| Option | Meaning | Type / constraints | Default |
|---|---|---|---|
file |
Path of the STEP file to import; it must contain exactly one valid solid. A relative path resolves against the working directory of the Schemaxis process (for Studio, the folder it was launched from), not the JSON file's folder. Schemaxis copies the file into the run directory and checks that the source has not changed during capture; saved verification uses only the retained copy. In a workflow, an artifact reference to an earlier verified STEP output can supply the path. | {"type":"string","minLength":1} |
required |
rectangle#
Creates a rectangular sketch profile centred on origin in the XY, XZ or YZ plane. Schemaxis builds it as a fully constrained Sketcher sketch with constraints named width and height, so the dimensions stay editable in FreeCAD and linked extrusions follow them. It is a profile: extrude, revolve or loft it to make a solid; for an axis-aligned block from a corner, box is simpler. Optional inputs.body places this sketch in an origin-based PartDesign Body for Pad/Pocket history. Named dimensions can use persistent parameters and drive in batch runs.
Common mistakes and assumptions:
- A profile cannot be the output node.
- The rectangle is centred on origin, unlike box, whose origin is a corner.
- If the native sketch does not solve fully constrained, the run fails with CONSTRAINT_FAILED.
Native binding: Sketcher::SketchObject. Output kind: ["profile"].
| Input port | Multiplicity | Required | Kind |
|---|---|---|---|
body |
one node | no | body |
| Option | Meaning | Type / constraints | Default |
|---|---|---|---|
width |
Side length along the sketch's first axis (world X on XY and XZ, world Y on YZ), in millimetres; the rectangle spans ±width/2 about origin. Stored as the sketch constraint named width. | {"type":"number","minimum":0,"exclusiveMinimum":true,"maximum":100000} |
80 |
height |
Side length along the sketch's second axis (world Y on XY, world Z on XZ and YZ), in millimetres; the rectangle spans ±height/2 about origin. Stored as the sketch constraint named height. | {"type":"number","minimum":0,"exclusiveMinimum":true,"maximum":100000} |
50 |
plane |
World plane containing the rectangle. XY maps sketch u, v to world X, Y (normal +Z); XZ maps them to X, Z (normal along −Y); YZ maps them to Y, Z (normal +X). Pick the plane perpendicular to the intended extrusion direction. | {"type":"enum","values":["XY","XZ","YZ"]} |
"XY" |
origin |
World coordinates [x, y, z] of the rectangle's centre (the sketch placement). | {"type":"array","items":{"type":"number"},"minItems":3,"maxItems":3} |
[0,0,0] |
revolve#
Sweeps a closed profile around an axis line to make a solid of revolution such as a ring, flange, bushing or turned part (native Part::Revolution with Solid enabled). The axis is the line through origin along axis. Draw the profile in a plane that contains that axis (for the default Z axis use XZ or YZ) and keep it on one side of the axis.
Common mistakes and assumptions:
- A profile on XY revolved about the default Z axis lies perpendicular to the axis and cannot sweep a volume.
- FreeCAD notes that a profile crossing the rotation axis makes the revolve fail in most cases.
- For revolve, origin is a point on the axis; it does not move the profile.
- Covered by an analytic-volume acceptance fixture (an XZ rectangle revolved to an annulus); not exhaustively qualified.
Native binding: Part::Revolution. Output kind: ["solid"].
| Input port | Multiplicity | Required | Kind |
|---|---|---|---|
profile |
one node | yes | profile |
| Option | Meaning | Type / constraints | Default |
|---|---|---|---|
angle |
How far the profile is swept around the axis, in degrees (FreeCAD Angle). 360 makes a closed ring; a smaller angle gives a sector that starts at the profile and turns in the positive (right-hand) sense about axis. | {"type":"number","minimum":0,"exclusiveMinimum":true,"maximum":360} |
360 |
origin |
World coordinates of a point on the revolution axis (FreeCAD Base). Moving it moves the axis relative to the profile, which changes every swept radius and therefore the solid's size; it does not move the profile. | {"type":"array","items":{"type":"number"},"minItems":3,"maxItems":3} |
[0,0,0] |
axis |
World direction of the revolution axis through origin (FreeCAD Axis). Magnitude is ignored; reversing it reverses the sweep sense of a partial angle. | {"type":"array","items":{"type":"number"},"minItems":3,"maxItems":3} |
[0,0,1] |
sphere#
Creates a native Part::Sphere, a full ball centred at origin. Choose it for ball ends, spherical cavities (cut it from a block) or test solids with the analytic volume 4/3·π·r³. It produces a solid.
Common mistakes and assumptions:
- Schemaxis assigns its own default radius of 10 mm; FreeCAD's native 5 mm default is never used.
- Covered by the eight-fixture analytic-volume acceptance run (verification/2026-09-19-adaptor-expansion.json); not exhaustively qualified.
Native binding: Part::Sphere. Output kind: ["solid"].
Inputs: none.
| Option | Meaning | Type / constraints | Default |
|---|---|---|---|
radius |
Radius of the sphere, in millimetres (Part::Sphere Radius). | {"type":"number","minimum":0,"exclusiveMinimum":true,"maximum":100000} |
10 |
origin |
World coordinates [x, y, z] of the sphere's centre (its placement base). | {"type":"array","items":{"type":"number"},"minItems":3,"maxItems":3} |
[0,0,0] |
torus#
Creates a native Part::Torus: a circular tube of radius minorRadius swept around a circular path of radius majorRadius, centred at origin in the plane perpendicular to axis. Choose it for O-rings, handles and ring groove tools (cut a torus from a shaft). Schemaxis requires minorRadius < majorRadius, so the ring always has a central hole.
Common mistakes and assumptions:
- minorRadius equal to or larger than majorRadius fails planning with INVALID_GEOMETRY.
- Covered by the analytic-volume acceptance fixture (2·π²·R·r²); not exhaustively qualified.
Native binding: Part::Torus. Output kind: ["solid"].
Inputs: none.
| Option | Meaning | Type / constraints | Default |
|---|---|---|---|
majorRadius |
Distance from the torus centre to the centre of the tube cross-section, in millimetres (FreeCAD Radius1). The outer diameter is 2 × (majorRadius + minorRadius) and the hole diameter 2 × (majorRadius − minorRadius). | {"type":"number","minimum":0,"exclusiveMinimum":true,"maximum":100000} |
20 |
minorRadius |
Radius of the circular tube cross-section, in millimetres (FreeCAD Radius2); the ring is 2 × minorRadius thick. | {"type":"number","minimum":0,"exclusiveMinimum":true,"maximum":100000} |
5 |
origin |
World coordinates [x, y, z] of the torus centre, the centre of its circular path. | {"type":"array","items":{"type":"number"},"minItems":3,"maxItems":3} |
[0,0,0] |
axis |
World direction of the ring's axis of symmetry, through the hole and perpendicular to the plane of the circular path. Magnitude is ignored. | {"type":"array","items":{"type":"number"},"minItems":3,"maxItems":3} |
[0,0,1] |