The following sections provide quick reference to the JSCAD application programming interface (API), the heart of making designs.
The 'primitives' are accessed through the modeling API using the following:
const { cube, ellipse, star } = require('@jscad/modeling').primitives
| Primitive | Notes |
|---|---|
| const mypath = arc({center: [2, 2], radius: 2, startAngle: Math.PI, endAngle: Math.PI * 2, segments: 64}) | API |
| const myshape = circle({center: [6.5, 6.5], radius: 3.5, startAngle: Math.PI / 2, endAngle: Math.PI, segments: 64}) | User Guide API |
| const myshape = ellipse({center: [6.5, 6.5], radius: [7, 9], startAngle: Math.PI / 2, endAngle: Math.PI, segments: 64}) | API |
| const mypath = line([ [10, 10], [-10, 10] ]) | API |
| const myshape = polygon({ points: [ [10, 11], [0, 11], [5, 20] ], paths: [0, 1, 2]}) | API |
| const myshape = rectangle({center: [6.5, 6.5], size: [10, 20]}) | API |
| const myshape = roundedRectangle({center: [6.5, 6.5], size: [10, 20], roundRadius: 2, segments: 64}) | API |
| const myshape = square({center: [6.5, 6.5], size: 10}) | API |
| const myshape = star({vertices: 8, outerRadius: 10}) /* star with 8/2 density */ | API |
| const myshape = star({vertices: 12, outerRadius: 40, innerRadius: 20}) /* star with given radius */ | API |
| const myshape = triangle({type: 'AAS', values: [degToRad(62), degToRad(35), 7]}) | API |
| Primitive | Notes |
|---|---|
| const myshape = cube({center: [6.5, 6.5, 6.5], size: 7}) | API |
| const myshape = cuboid({center: [6.5, 6.5, 6.5], size: [3, 5, 7]}) | API |
| const myshape = cylinder({center: [-5, -5, -5], height: 10, radius: 4, segments: 5}) | API |
| const myshape = cylinderElliptic({center: [-5, -5, -5], height: 10, startRadius: [1, 2], endRadius: [2, 1], startAngle: Math.PI / 2, endAngle: Math.PI * 2 * 0.75, segments: 5}) | API |
| const myshape = ellipsoid({center: [-5, -5, -5], radius: [4, 6, 8], segments: 64}) | API |
| const myshape = geodesicSphere({radius: 15, frequency: 18}) | API |
| const myshape = polyhedron({points: mypoints, faces: myfaces, orientation: 'inward'}) | API |
| const myshape = roundedCuboid({center: [-5, -5, -5], size: [10, 20, 10], roundRadius: 2, segments: 16}) | API |
| const myshape = roundedCylinder({center: [-5, -5, -5], height: 10, radius: 2, roundRadius: 0.5, segments: 16}) | API |
| const myshape = sphere({center: [-5, -5, -5], radius: 5, }) | API |
| const myshape = torus({innerRadius: 10, outerRadius: 100, innerSegments: 32, outerSegments: 8, innerRotation: Math.PI, startAngle: Math.PI}) | API |
The 'transforms' are accessed through the modeling API using the following:
const { translate, scale, rotateX } = require('@jscad/modeling').transforms
| Transform | Notes |
|---|---|
| const newshape = align({modes: ['min', 'center', 'none'], relativeTo: [10, null, 10], grouped: true}, oldshape) | API |
| const newshape = center({axes: [true, true, false], center: [15, 10, 0]}, oldshape) | API |
| const newshape = centerX(oldshape) | API |
| const newshape = centerY(oldshape) | API |
| const newshape = centerZ(oldshape) | API |
| const newshape = mirror({origin: [5, 5, 5], normal: [0, 0, 10]}, oldshape)) | API |
| const newshape = mirrorX(oldshape) | API |
| const newshape = mirrorY(oldshape) | API |
| const newshape = mirrorZ(oldshape) | API |
| const newshape = rotate([Math.PI / 4, 0, 0], oldshape) | API |
| const newshape = rotateX(oldshape) | API |
| const newshape = rotateY(oldshape) | API |
| const newshape = rotateZ(oldshape) | API |
| const newshape = scale([5, 0, 10], oldshape) | API |
| const newshape = scaleX(5, oldshape) | API |
| const newshape = scaleY(0.5, oldshape) | API |
| const newshape = scaleZ(5, oldshape) | API |
| const newshape = transform(mat4.rotateX(Math.PI/4), oldshape) | API |
| const newshape = translate([5, 0, 10], oldshape) | API |
| const newshape = translateX(5, oldshape) | API |
| const newshape = translateY(0.5, oldshape) | API |
| const newshape = translateZ(5, oldshape) | API |
The 'booleans' are accessed through the modeling API using the following:
const { union, intersect, scission, subtract } = require('@jscad/modeling').booleans
The 'extrusions' are accessed through the modeling API using the following:
const { extrudeLinear, extrudeRegtangular, extrudeRotate, project } = require('@jscad/modeling').extrusions
| Extrusion of 2D Shapes | Notes |
|---|---|
| const newshape = extrudeLinear({height: 20, twistAngle: Math.PI, twistSteps: 20}, oldshape)) | API |
| const newshape = extrudeRectangular({size: 3, height: 15}, oldshape) | API |
| const newshape = extrudeRotate({startAngle: Math.PI, angle: Math.PI / 2, overflow: 'cap', segments: 64}, oldshape) | API |
| const newshape = project({axis: [0, 0, 1], origin: [0, 0, 0]}, oldshape) | API |
The 'expansions' are accessed through the modeling API using the following:
const { expand, offset } = require('@jscad/modeling').expansions
The 'text' functions are accessed through the modeling API using the following:
const { vectorChar, vectorText } = require('@jscad/modeling').text
The 'colors' are accessed through the modeling API using the following:
const { colorize, hexToRgb } = require('@jscad/modeling').colors
| Function | Notes |
|---|---|
| let newshape = colorize([1, 0, 0], oldshape) | API |
| let newshape = colorize(colorNameToRgb('lightblue'), oldshape) | API |
| let newshape = colorize(hexToRgb('#000080'), oldshape) | API |
| let newshape = colorize(hslToRgb([0.9166666666666666, 1, 0.5]), oldshape) | API |
| let newshape = colorize(hsvToRgb([0.9166666666666666, 1, 1]), oldshape) | API |
The 'utils' are accessed through the modeling API using the following:
const { radToDeg, degToRad } = require('@jscad/modeling').utils