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');
JavaScript is off — the listing above is the whole example.

Calls

CallWhat it does
box(x, y, z, centered?, opts?) => ShapeAxis-aligned box.
cylinder(h, r, segments?, opts?) => ShapeZ-axis cylinder; bottom on the XY plane, height h, radius r.
sphere(r) => ShapeSphere centered at the origin, radius r.
torus(majorR: number, minorR: number, segments?: number) => ShapeSolid torus centered on world origin, axis along world +Z.
spring({ length, coilRadius, wireRadius, turns, axis?, pointsPerTurn?, endStyle?, segments? }) => ShapeBuild 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?) => ShapeExtrude a w-by-h rectangle (XY) by height along Z.
extrudeCircle(r, height, opts?) => ShapeExtrude a radius-r circle (XY) by height along Z.
extrudePolygon(points, depth, opts?) => ShapeExtrude a 2D polygon (array of [x, y] points) by depth along Z.
extrudeRoundedRect(width, height, radius, depth, opts?) => ShapeExtrude a rounded rectangle (corner radius) by depth along Z.
sheetMetal(profile: Sketch, { thickness, kFactor, faceLabels? }) => ShapeBuild 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() => PathBuilderStart a 2D path: chain moveTo / lineTo / arcs / .close() to get a Sketch.
PathBuilder.moveTo(x: Editable<number>, y: Editable<number>) => PathBuilderStart the path at (x, y).
PathBuilder.lineTo(x: Editable<number>, y: Editable<number>) => PathBuilderAdd a straight line segment to (x, y).
PathBuilder.close() => SketchClose the path; returns a Sketch that can be extruded/revolved/swept.
PathBuilder.label(name: string) => PathBuilderTag 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) => SketchClosed circle profile centered at (cx, cy) with radius r.
PathBuilder.tangentArc(x: Editable<number>, y: Editable<number>) => PathBuilderArc continuing tangent from the previous segment to (x, y).
PathBuilder.threePointsArc(x: Editable<number>, y: Editable<number>, midX: Editable<number>, midY: Editable<number>) => PathBuilderArc through start, midpoint, and end.
PathBuilder.sagittaArc(x: Editable<number>, y: Editable<number>, sagitta: Editable<number>) => PathBuilderArc by chord + perpendicular bulge height.
PathBuilder.bulgeArc(x: Editable<number>, y: Editable<number>, bulge: Editable<number>) => PathBuilderArc by chord + DXF bulge factor (tan(angle/4)).
PathBuilder.radiusArc(x: Editable<number>, y: Editable<number>, radius: Editable<number>) => PathBuilderArc by chord + explicit radius.
PathBuilder.tangentCircle(entities: TangentEntity2D[], opts?: { radius?: Editable<number>; near?: [Editable<number>, Editable<number>] }) => SketchClosed circle TANGENT to other 2D geometry, solved by OCCT Geom2dGcc.
PathBuilder.tangentLine(a: TangentEntity2D, b: TangentEntity2D, opts?: { near?: [Editable<number>, Editable<number>] }) => PathBuilderStraight segment along the line TANGENT to two circles (OCCT Geom2dGcc_Lin2d2Tan) — the belt/pulley move.
PathBuilder.smoothSpline(x: Editable<number>, y: Editable<number>) => PathBuilderC1-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> }) => PathBuilderNURBS Slice D — N-waypoint B-spline interpolation.
PathBuilder.nurbsSegment(controlPoints: Array<[Editable<number>, Editable<number>]>, opts?: { degree?: number; weights?: number[]; knots?: number[] }) => PathBuilderNURBS 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 }) => Curve3DQuintic Hermite Curve3D that interpolates the two endpoints with matching positions, first derivatives (tangents), and second derivatives (curvatures).
PathBuilder.hermiteG2(a: HermiteEndpoint2D, b: HermiteEndpoint2D) => PathBuilderNURBS Slice D — 2D quintic-Hermite transition between two endpoints, each with prescribed point + first derivative (tangent) + optional second derivative (curvature).