Resources Numerical accuracy
Calculations
Every calculation under our calculation policies: what it works out, its formula and the precision it runs at. Open one to see its code as it is in the released app.
Calculations
-
Quaternion to rotation matrix
The rotation matrix of an orientation stored as a quaternion.
q ÷ |q|; R₀₀ = 1 − 2(y² + z²), R₀₁ = 2(xy + wz), …
USD transforms and placement usd/geom.js64-bit- CadCraft
- BimCraft
- ModelCraft
- TakeoffCraft
- CivilCraft
- DetailCraft
- PartCraft
-
Value at a time
An animated value at a given time, between its stored samples.
v = a + (b − a) × (t − t₀) ÷ (t₁ − t₀)
USD transforms and placement usd/geom.js64-bit- CadCraft
- BimCraft
- ModelCraft
- TakeoffCraft
- CivilCraft
- DetailCraft
- PartCraft
-
An object's own transform
Builds the transform of one object from its list of translate, rotate, scale and matrix operations.
M = op₁ × op₂ × … in the listed order; an inverted operation uses its inverse
USD transforms and placement usd/geom.js64-bit- CadCraft
- BimCraft
- ModelCraft
- TakeoffCraft
- CivilCraft
- DetailCraft
- PartCraft
-
World transform
The transform of an object in the scene, through all its parents.
W = M_root × … × M_parent × M_own
USD transforms and placement usd/geom.js64-bit- CadCraft
- BimCraft
- ModelCraft
- TakeoffCraft
- CivilCraft
- DetailCraft
- PartCraft
-
Scene units and up axis
The transform from the scene's own units and up axis to meters with Z up.
scale by metersPerUnit; Y-up scenes: rotate 90° about X
USD transforms and placement usd/geom.js64-bit- CadCraft
- BimCraft
- ModelCraft
- TakeoffCraft
- CivilCraft
- DetailCraft
- PartCraft
-
Placement of instanced copies
The transform of each copy of a point instancer from its position, orientation and scale.
M = translate(p) × rotate(q) × scale(s)
USD transforms and placement usd/scene.js64-bit- CadCraft
- BimCraft
- ModelCraft
- TakeoffCraft
- CivilCraft
- DetailCraft
- PartCraft
-
Writing an object's transform
Stores an object's placement in the exported scene.
USD transforms and placement usd/build.js64-bit- CadCraft
- BimCraft
- ModelCraft
- TakeoffCraft
- CivilCraft
- DetailCraft
- PartCraft
-
Attribute value to its storage type
Converts a list of numbers to the number type its USD attribute type calls for.
USD mesh coordinates in saved and exported files usd/build.js32-bit in part- CadCraft
- BimCraft
- ModelCraft
- TakeoffCraft
- CivilCraft
- DetailCraft
- PartCraft
-
Mesh points and extent
Stores the points of a mesh and its bounding box in the scene.
extent = [min x, min y, min z, max x, max y, max z] of the points
USD mesh coordinates in saved and exported files usd/build.js32-bit in part- CadCraft
- BimCraft
- ModelCraft
- TakeoffCraft
- CivilCraft
- DetailCraft
- PartCraft
-
Lamp intensity
Converts a lamp's lumens to the intensity a renderer reads.
intensity = lumens ÷ (683 × area × π)
USD mesh coordinates in saved and exported files usd/build.js32-bit, display only- CadCraft
- BimCraft
- ModelCraft
- TakeoffCraft
- CivilCraft
- DetailCraft
- PartCraft
-
Single values in the binary file
Writes one number, tuple or matrix into the binary USD file.
USD mesh coordinates in saved and exported files usd/usdc-write.js64-bit- CadCraft
- BimCraft
- ModelCraft
- TakeoffCraft
- CivilCraft
- DetailCraft
- PartCraft
-
Arrays in the binary file
Writes an array of numbers into the binary USD file.
USD mesh coordinates in saved and exported files usd/usdc-write.js32-bit in part- CadCraft
- BimCraft
- ModelCraft
- TakeoffCraft
- CivilCraft
- DetailCraft
- PartCraft
-
Reading a mesh
The points, faces and attached values of a mesh read from a USD scene.
USD mesh coordinates in saved and exported files usd/geom.js32-bit in part- CadCraft
- BimCraft
- ModelCraft
- TakeoffCraft
- CivilCraft
- DetailCraft
- PartCraft
-
Built-in shapes as meshes
A cube, sphere, cylinder, cone, capsule or plane of a USD scene as a mesh.
ring point = (r·cos θ, r·sin θ, z), θ = 2π·j ÷ 24
USD mesh coordinates in saved and exported files usd/geom.js64-bit- CadCraft
- BimCraft
- ModelCraft
- TakeoffCraft
- CivilCraft
- DetailCraft
- PartCraft
-
Region size, enclosing triangle and tolerances
Measures the region and sets the tolerances every later test uses.
D = max(Δx, Δy); eps = 1e-13 × D; epsA = 1e-13 × D²
Triangulation of solid faces acis/cdt.js64-bit- CadCraft
- ModelCraft
-
Orientation of three points
Twice the signed area of the triangle a, b, c: positive when anticlockwise.
(x_b − x_a) × (y_c − y_a) − (y_b − y_a) × (x_c − x_a)
Triangulation of solid faces acis/cdt.js64-bit- CadCraft
- ModelCraft
-
In-circle test
Whether point d lies inside the circle through a, b and c.
det of rows (a − d, |a − d|²), (b − d, |b − d|²), (c − d, |c − d|²) > 0
Triangulation of solid faces acis/cdt.js64-bit- CadCraft
- ModelCraft
-
Triangle that holds a point
Walks from the last triangle to the one a new point falls in.
Triangulation of solid faces acis/cdt.js64-bit- CadCraft
- ModelCraft
-
Inserting a point
Adds one point: merged into a corner it coincides with, splitting an edge it lies on, or splitting the triangle it is inside.
Triangulation of solid faces acis/cdt.js64-bit- CadCraft
- ModelCraft
-
Do two segments cross
Whether edge c–d properly crosses boundary segment a–b.
Triangulation of solid faces acis/cdt.js64-bit- CadCraft
- ModelCraft
-
Face-frame default sizes
The stile and rail width, overlay and door gap a job uses when it sets none.
stile = rail = 38 mm; overlay = 12 mm; gap = 3 mm; inch job: round(mm ÷ 25.4 × 16) ÷ 16
CabinetCraft parts, fronts and face frames addons/cabinetcraft/lib/build.js64-bit- CadCraft
- BimCraft
- ModelCraft
- PartCraft
-
Carcass depth behind a face frame
The depth the carcass is built with when a face frame takes part of the cabinet's depth.
d = max(1, d − frame thickness)
CabinetCraft parts, fronts and face frames addons/cabinetcraft/lib/build.js64-bit- CadCraft
- BimCraft
- ModelCraft
- PartCraft
-
Face-frame openings and overlay fronts
The rails, the openings between them and the doors or drawer fronts that cover each opening.
opening h = (box h − (2 + mids) × rail) ÷ (mids + 1); front h = opening h + lap below + lap above; pair door w = (opening w + 2 × overlay − gap) ÷ 2
CabinetCraft parts, fronts and face frames addons/cabinetcraft/lib/build.js64-bit- CadCraft
- BimCraft
- ModelCraft
- PartCraft
-
Door and blind panel of a blind corner
The door over the open part of a blind corner cabinet and the panel over the blind part.
door w = (w − blind) − reveal; panel w = blind − reveal; h = box h − reveal
CabinetCraft parts, fronts and face frames addons/cabinetcraft/lib/build.js64-bit- CadCraft
- BimCraft
- ModelCraft
- PartCraft
-
Part size stored in the cut list
Adds one part with its length, width, thickness and material.
CabinetCraft parts, fronts and face frames addons/cabinetcraft/lib/build.js64-bit- CadCraft
- BimCraft
- ModelCraft
- PartCraft
-
Frame rail length and counts
The length of the frame's rails and how many rails and mid rails a cabinet needs.
rail length = w − 2 × stile − blind
CabinetCraft parts, fronts and face frames addons/cabinetcraft/lib/build.js64-bit- CadCraft
- BimCraft
- ModelCraft
- PartCraft
-
Doors and drawer fronts counted by size
Groups equal fronts into one cut-list line with a quantity.
CabinetCraft parts, fronts and face frames addons/cabinetcraft/lib/build.jsExact- CadCraft
- BimCraft
- ModelCraft
- PartCraft
-
Drawer boxes of a face-frame cabinet
The sides, ends and bottom of each drawer box behind a face frame.
box h = min(front h − clearance, opening h − 20 mm); end = bw − 2t; bottom = (bw − 2t + 2g) × (slide − 2t + 2g); bw = opening w − 2 × slide gap
CabinetCraft parts, fronts and face frames addons/cabinetcraft/lib/build.js64-bit- CadCraft
- BimCraft
- ModelCraft
- PartCraft
-
Dowels of a corner cabinet
The number of dowels a corner cabinet's drilling needs.
dowels = dowel holes ÷ 2
CabinetCraft parts, fronts and face frames addons/cabinetcraft/lib/build.js64-bit- CadCraft
- BimCraft
- ModelCraft
- PartCraft
-
Curved cabinet outline in the cell's own axes
The outline points of a made-to-order curved cabinet, measured from the cell's origin along its two axes.
(x′, y′) = ((q − o) · u, (q − o) · n)
CabinetCraft parts, fronts and face frames addons/cabinetcraft/lib/build.js64-bit- CadCraft
- BimCraft
- ModelCraft
- PartCraft
-
Closing panel of an angled corner
The height of the panel that closes a corner which is not a right angle.
height = cabinet h − plinth height
CabinetCraft parts, fronts and face frames addons/cabinetcraft/lib/build.js64-bit- CadCraft
- BimCraft
- ModelCraft
- PartCraft
-
Picked room corner
A corner of the room outline picked on the plan, snapped to the grid.
p = round(x ÷ g) × g; g = 50 (mm job) or 2 (inch job)
CabinetCraft room picking and dry-run units addons/cabinetcraft/main.js64-bit- CadCraft
- BimCraft
- ModelCraft
- PartCraft
-
Direction of the picked outline
Whether the corners were picked clockwise, which decides the sign of each arc's sweep.
Σ (xᵢ × yᵢ₊₁ − xᵢ₊₁ × yᵢ) < 0 means clockwise
CabinetCraft room picking and dry-run units addons/cabinetcraft/main.js64-bit- CadCraft
- BimCraft
- ModelCraft
- PartCraft
-
Sheet size in the program's units
The sheet size, thickness and rapid rate the dry run checks a G-code program against.
k = (1 ÷ 25.4 or 1) × (25.4 or 1); sheet = job sheet × k; rapid (inch program) = rapid ÷ 25.4
CabinetCraft room picking and dry-run units addons/cabinetcraft/main.js64-bit- CadCraft
- BimCraft
- ModelCraft
- PartCraft
-
Numbers on labels and the maker review
Writes a number with at most 2 decimals.
text = round(v × 100) ÷ 100
CabinetCraft room picking and dry-run units addons/cabinetcraft/main.js64-bit- CadCraft
- BimCraft
- ModelCraft
- PartCraft
-
Job converted to the other unit
Every size in the job converted from millimeters to inches or back when the job's unit is changed.
to inches: round(v × (1 ÷ 25.4) × 16) ÷ 16; to millimeters: round(v × 25.4)
Cabinet job edits that change sizes addons/cabinetcraft/lib/edit.js64-bit- CadCraft
- BimCraft
- ModelCraft
- PartCraft
-
Gap at a door or window
The width of the gap put in a run's floor row so that the cabinets after it clear an opening.
width = ⌈(at + w + clear − start) × 10⌉ ÷ 10
Cabinet job edits that change sizes addons/cabinetcraft/lib/edit.js64-bit- CadCraft
- BimCraft
- ModelCraft
- PartCraft
-
Filler for a leftover
Adds a filler as wide as the space a row leaves on its wall.
filler width = rest, when 0.5 < rest ≤ 75 mm
Cabinet job edits that change sizes addons/cabinetcraft/lib/edit.js64-bit- CadCraft
- BimCraft
- ModelCraft
- PartCraft
-
Notch of a new L or U room
The first size of the notch when a rectangular room is made L or U shaped.
notch width = round(W ÷ 3); notch depth = round(D ÷ 2)
Cabinet job edits that change sizes addons/cabinetcraft/lib/edit.js64-bit- CadCraft
- BimCraft
- ModelCraft
- PartCraft
-
Drilling distances in inches
The 32 mm system's drilling and hardware distances for the inch rule set.
value = round(mm × (1 ÷ 25.4) × 10⁴) ÷ 10⁴
Cabinet parts from a box and construction rules addons/cabinetcraft/lib/model.js64-bit- CadCraft
- BimCraft
- ModelCraft
- PartCraft
-
Box sizes
The box height without the plinth, the inside width and the depth the back takes.
boxH = h − kick; iw = w − 2t; backDepth = backSetback + backT
Cabinet parts from a box and construction rules addons/cabinetcraft/lib/model.js64-bit- CadCraft
- BimCraft
- ModelCraft
- PartCraft
-
Door and drawer front sizes
The size and position of every door and drawer front in the cabinet's front view.
one door: (w − reveal) × (boxH − reveal); a pair: each (w − 2·reveal) ÷ 2 wide; n drawer fronts: each (boxH − n·reveal) ÷ n high
Cabinet parts from a box and construction rules addons/cabinetcraft/lib/model.js64-bit- CadCraft
- BimCraft
- ModelCraft
- PartCraft
-
Longest drawer slide that fits
Picks the drawer slide length from the rule's list for the cabinet's inside depth.
room = panel depth − backDepth − drawerBackClear; the longest listed L with L ≤ room + 1e-9
Cabinet parts from a box and construction rules addons/cabinetcraft/lib/model.js64-bit- CadCraft
- BimCraft
- ModelCraft
- PartCraft
-
Part list of one cabinet
Every part of a cabinet with its length, width, thickness, material, quantity and banded edges.
back in grooves: (iw + 2·groove) × (boxH − n·t + n·groove); shelf: (iw − 2·shelfClear) × (inside depth − shelfFront); drawer end: iw − 2·slideGap − 2·drawerT
Cabinet parts from a box and construction rules addons/cabinetcraft/lib/model.js64-bit- CadCraft
- BimCraft
- ModelCraft
- PartCraft
-
Size checks on a cabinet
Reports a cabinet that is too narrow, too low or too shallow for its parts, or whose drawers do not fit.
iw ≤ 0; boxH ≤ 2t; inside depth ≤ shelfFront; Σ fronts + n·reveal > boxH + 1e-9
Cabinet parts from a box and construction rules addons/cabinetcraft/lib/model.js64-bit- CadCraft
- BimCraft
- ModelCraft
- PartCraft
-
Linear stock to buy
The number of pieces and the total length of each hardwood section in the job.
length = Σ qty × length; pieces = Σ qty
Cabinet job totals: linear stock and sheet count addons/cabinetcraft/lib/sheets.js64-bit- CadCraft
- BimCraft
- ModelCraft
- PartCraft
-
Sheets used by a nested job
The total number of sheets over all materials, with each material's own count and efficiency.
sheets = Σ sheets per material
Cabinet job totals: linear stock and sheet count addons/cabinetcraft/lib/sheets.jsExact- CadCraft
- BimCraft
- ModelCraft
- PartCraft
-
Label position on the sheet
Where each label is printed on the page, so that it lands on the die-cut label.
x = left + col × (label width + gap x); y = top + row × (label height + gap y)
Part labels on label sheets addons/cabinetcraft/lib/cutlist/labels.js64-bit- CadCraft
- BimCraft
- ModelCraft
- PartCraft
-
Bar code module width
The width of the narrowest bar of a label's Code 128 bar code, fitted to the space beside the id text.
module = min(0.33 mm, room ÷ (code width + 20))
Part labels on label sheets addons/cabinetcraft/lib/cutlist/labels.js64-bit- CadCraft
- BimCraft
- ModelCraft
- PartCraft
-
Pieces from quantities
One entry per piece to cut, from rows with a quantity.
Cutting profile pieces from stock bars addons/windows/lib/cutlist/bars.js64-bit- CadCraft
- BimCraft
- ModelCraft
- PartCraft
A calculation is added only after its source was read. Each statement can be checked in the code shown on its policy's page; the app repositories are public. When a release changes a calculation, its page says so until it has been read again.