# Quick Reference

The following sections provide quick reference to the JSCAD application programming interface (API), the heart of making designs.

## Primitive Shapes

The 'primitives' are accessed through the modeling API using the following:

`const { cube, ellipse, star } = require('@jscad/modeling').primitives`

### 2D 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

### 3D Primitives

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

## Shape Transformations

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

## Shape Operations

### Boolean Operations

The 'booleans' are accessed through the modeling API using the following:

`const { union, intersect, scission, subtract } = require('@jscad/modeling').booleans`
Operation Notes
const newshape = intersect(oldshape0, oldshape1) API
const newshape = subtract(oldshape0, oldshape1) API
const newshape = union(oldshape0, oldshape1) API
const newshapes = scission(bigshape) API

### Hull Operations

The 'hulls' are accessed through the modeling API using the following:

`const { hull, hullChain } = require('@jscad/modeling').hulls`
Operation Notes
const newshape = hull(oldshape0, oldshape1) API
const newshape = hullChain(oldshape0, oldshape1) API

## Extrusions

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

## Expansions

The 'expansions' are accessed through the modeling API using the following:

`const { expand, offset } = require('@jscad/modeling').expansions`
Expansion Notes
const newshape = expand({delta: 2, corners: 'round', segments: 64}, oldshape) API
const newshape = offset({delta: -4, corners: 'round', segments: 64}, oldshape) API

### Text

The 'text' functions are accessed through the modeling API using the following:

`const { vectorChar, vectorText } = require('@jscad/modeling').text`
Function Notes
let vectorCharObject = vectorChar({ xOffset: 10, yOffset: 50, height: 18, input: '!' }) API
let arrayOfSegments = vectorText({ xOffset: 10, yOffset: 50, height: 18, input: 'line1\nline2' }) API

## General Functions

### Colors

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

#### Utilities

The 'utils' are accessed through the modeling API using the following:

`const { radToDeg, degToRad } = require('@jscad/modeling').utils`
Function Notes