docs / Start a shape
Start a shape
The first call in any model: a solid primitive, or a 2D profile to extrude.
A primitive gives you a solid straight away; a closed path gives you a profile to extrude. color() takes a role token or a hex string.
const plate = box(60, 40, 8);
const rib = path()
.moveTo(0, 0)
.lineTo(60, 0)
.lineTo(60, 14)
.lineTo(0, 4)
.close()
.extrude(6)
.translate(0, 12, 8);
return plate.union(rib).color('frame');Calls
| Call | What it does |
|---|---|
box(x, y, z, centered?, opts?) => Shape | Axis-aligned box. |
cylinder(h, r, segments?, opts?) => Shape | Z-axis cylinder; bottom on the XY plane, height h, radius r. |
sphere(r) => Shape | Sphere centered at the origin, radius r. |
torus(majorR: number, minorR: number, segments?: number) => Shape | Solid torus centered on world origin, axis along world +Z. |
spring({ length, coilRadius, wireRadius, turns, axis?, pointsPerTurn?, endStyle?, segments? }) => Shape | Build a helical spring as a circular wire profile swept along a smooth B-spline helix spine, producing one continuous watertight solid. |
extrudeRect(w, h, height, opts?) => Shape | Extrude a w-by-h rectangle (XY) by height along Z. |
extrudeCircle(r, height, opts?) => Shape | Extrude a radius-r circle (XY) by height along Z. |
extrudePolygon(points, depth, opts?) => Shape | Extrude a 2D polygon (array of [x, y] points) by depth along Z. |
extrudeRoundedRect(width, height, radius, depth, opts?) => Shape | Extrude a rounded rectangle (corner radius) by depth along Z. |
sheetMetal(profile: Sketch, { thickness, kFactor, faceLabels? }) => Shape | Build a sheet-metal body from a closed planar Sketch. |
sdf : { sphere(r), box(size), cylinder(r, h), torus(R, r), smoothBlend(a, b, k), materialize(field, opts?), bind(name, field) } | SDF authoring namespace (W2.3 slice-1). |
path() => PathBuilder | Start a 2D path: chain moveTo / lineTo / arcs / .close() to get a Sketch. |
PathBuilder.moveTo(x: Editable<number>, y: Editable<number>) => PathBuilder | Start the path at (x, y). |
PathBuilder.lineTo(x: Editable<number>, y: Editable<number>) => PathBuilder | Add a straight line segment to (x, y). |
PathBuilder.close() => Sketch | Close the path; returns a Sketch that can be extruded/revolved/swept. |
PathBuilder.label(name: string) => PathBuilder | Tag the previous segment so it can be referenced later in fillet/chamfer/shell as {face: name}. |
PathBuilder.circle(cx: number, cy: number, r: number, segments?: number) => Sketch | Closed circle profile centered at (cx, cy) with radius r. |
PathBuilder.tangentArc(x: Editable<number>, y: Editable<number>) => PathBuilder | Arc continuing tangent from the previous segment to (x, y). |
PathBuilder.threePointsArc(x: Editable<number>, y: Editable<number>, midX: Editable<number>, midY: Editable<number>) => PathBuilder | Arc through start, midpoint, and end. |
PathBuilder.sagittaArc(x: Editable<number>, y: Editable<number>, sagitta: Editable<number>) => PathBuilder | Arc by chord + perpendicular bulge height. |
PathBuilder.bulgeArc(x: Editable<number>, y: Editable<number>, bulge: Editable<number>) => PathBuilder | Arc by chord + DXF bulge factor (tan(angle/4)). |
PathBuilder.radiusArc(x: Editable<number>, y: Editable<number>, radius: Editable<number>) => PathBuilder | Arc by chord + explicit radius. |
PathBuilder.tangentCircle(entities: TangentEntity2D[], opts?: { radius?: Editable<number>; near?: [Editable<number>, Editable<number>] }) => Sketch | Closed circle TANGENT to other 2D geometry, solved by OCCT Geom2dGcc. |
PathBuilder.tangentLine(a: TangentEntity2D, b: TangentEntity2D, opts?: { near?: [Editable<number>, Editable<number>] }) => PathBuilder | Straight segment along the line TANGENT to two circles (OCCT Geom2dGcc_Lin2d2Tan) — the belt/pulley move. |
PathBuilder.smoothSpline(x: Editable<number>, y: Editable<number>) => PathBuilder | C1-smooth spline segment from current position to (x, y); inherits start tangent from prior segment. |
PathBuilder.spline(points: Array<[Editable<number>, Editable<number>]>, opts?: { tension?: Editable<number> }) => PathBuilder | NURBS Slice D — N-waypoint B-spline interpolation. |
PathBuilder.nurbsSegment(controlPoints: Array<[Editable<number>, Editable<number>]>, opts?: { degree?: number; weights?: number[]; knots?: number[] }) => PathBuilder | NURBS Slice D — explicit B-spline segment defined by a control polygon. |
hermiteG2(a: { point: Vec3; tangent: Vec3; curvature?: Vec3 }, b: { point: Vec3; tangent: Vec3; curvature?: Vec3 }) => Curve3D | Quintic Hermite Curve3D that interpolates the two endpoints with matching positions, first derivatives (tangents), and second derivatives (curvatures). |
PathBuilder.hermiteG2(a: HermiteEndpoint2D, b: HermiteEndpoint2D) => PathBuilder | NURBS Slice D — 2D quintic-Hermite transition between two endpoints, each with prescribed point + first derivative (tangent) + optional second derivative (curvature). |