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.

  • 6,917 calculations in 1,248 source files
  • 143 exact
  • 6,286 in 64-bit
  • 335 with a 32-bit step
  • Last reviewed

Calculations

  • Arc walls as chords

    Writes each arc wall out as short chords so the room can be tested as a polygon.

    step = 2 × acos(max(0, 1 − 0.5 ÷ r)); n = ⌈|sweep| ÷ step⌉, between 4 and 400

    Room outline, walls and openings addons/cabinetcraft/lib/room.js
    • CadCraft
    • BimCraft
    • ModelCraft
    • PartCraft
    64-bit
  • Free outline with slanted and arc walls

    Checks an outline of any angle with arc edges and returns its corners, arcs and overall width and depth.

    Room outline, walls and openings addons/cabinetcraft/lib/room.js
    • CadCraft
    • BimCraft
    • ModelCraft
    • PartCraft
    64-bit
  • Wall frames, lengths and corner turns

    For each wall: its length, direction, the frame cabinets are placed in, its angle and the turn at each corner.

    chord = √(Δx² + Δy²); u = Δ ÷ chord; n = (−u_y, uₓ); angle = atan2(u_y, uₓ) × 180 ÷ π

    Room outline, walls and openings addons/cabinetcraft/lib/room.js
    • CadCraft
    • BimCraft
    • ModelCraft
    • PartCraft
    64-bit
  • Point inside the room

    Tests whether a point is inside the outline; the boundary counts as inside.

    on edge when |cross| < 1e-4 × max(1, edge length); else even-odd count of edges crossed by a ray

    Room outline, walls and openings addons/cabinetcraft/lib/room.js
    • CadCraft
    • BimCraft
    • ModelCraft
    • PartCraft
    64-bit
  • Cabinet footprint inside the room

    Decides whether a polygon lies inside the room.

    Room outline, walls and openings addons/cabinetcraft/lib/room.js
    • CadCraft
    • BimCraft
    • ModelCraft
    • PartCraft
    64-bit
  • Distance from a point to a wall segment

    The shortest distance from a point to a segment.

    t = clamp((p − a)·(b − a) ÷ |b − a|², 0, 1); d = |p − (a + t (b − a))|

    Room outline, walls and openings addons/cabinetcraft/lib/room.js
    • CadCraft
    • BimCraft
    • ModelCraft
    • PartCraft
    64-bit
  • Clearance from a footprint to the nearest wall

    The smallest distance between a footprint and any wall, 0 when they touch or cross.

    Room outline, walls and openings addons/cabinetcraft/lib/room.js
    • CadCraft
    • BimCraft
    • ModelCraft
    • PartCraft
    64-bit
  • Door and window positions along a wall

    Clamps each opening's width, offset, height and sill to its wall and the room height.

    inch default = mm default × (1 ÷ 25.4); at ≤ chord − w

    Room outline, walls and openings addons/cabinetcraft/lib/room.js
    • CadCraft
    • BimCraft
    • ModelCraft
    • PartCraft
    64-bit
  • Floor strip in front of an opening

    The four corners of the strip of floor in front of a door or window, in room coordinates.

    P(s, o) = origin + u × s + n × o

    Room outline, walls and openings addons/cabinetcraft/lib/room.js
    • CadCraft
    • BimCraft
    • ModelCraft
    • PartCraft
    64-bit
  • Typed corner coordinates

    Reads x,y pairs typed by a person.

    Room outline, walls and openings addons/cabinetcraft/lib/room.js
    • CadCraft
    • BimCraft
    • ModelCraft
    • PartCraft
    64-bit
  • Outline from edge lengths and turns

    Corners of a right-angled outline from the length of each edge and a left or right turn at each corner.

    pᵢ₊₁ = pᵢ + dir × lengthᵢ; dir turns by ±90°

    Room outline, walls and openings addons/cabinetcraft/lib/room.js
    • CadCraft
    • BimCraft
    • ModelCraft
    • PartCraft
    64-bit
  • Outline from typed walls

    Corners and arcs of an outline from typed wall lengths, directions and arc radii.

    next = p + len × (cos θ, sin θ); arc chord = 2 r sin(|sweep| ÷ 2)

    Room outline, walls and openings addons/cabinetcraft/lib/room.js
    • CadCraft
    • BimCraft
    • ModelCraft
    • PartCraft
    64-bit
  • Room outline from a host model, cleaned

    Drops repeated and in-line points from a room outline given by the host app and makes it counter-clockwise.

    drop b when |ab| < 1 or |(b − a) × (c − b)| < 1e-3 × max(1, |ab| × |bc|)

    Room outline, walls and openings addons/cabinetcraft/lib/fromroom.js
    • CadCraft
    • BimCraft
    • ModelCraft
    • PartCraft
    64-bit
  • Host room moved to (0, 0) and rounded

    Shifts the host's outline so its lower-left corner is the origin and converts it to the job unit.

    mm job: round(v × 10) ÷ 10; inch job: round(v ÷ 25.4 × 16) ÷ 16

    Room outline, walls and openings addons/cabinetcraft/lib/fromroom.js
    • CadCraft
    • BimCraft
    • ModelCraft
    • PartCraft
    64-bit
  • Host doors and windows onto the nearest wall

    Puts each door or window of the host model on the room wall nearest its middle, with its offset along that wall.

    s = (p − a)·u; off = |(p − a) × u|; at = clamp(s − w ÷ 2, 0, len − w)

    Room outline, walls and openings addons/cabinetcraft/lib/fromroom.js
    • CadCraft
    • BimCraft
    • ModelCraft
    • PartCraft
    64-bit
  • Room point back in the host's axes

    Converts a point in the room's own axes to millimeters in the host model.

    X = ox + x × k, k = 25.4 for an inch job, else 1

    Room outline, walls and openings addons/cabinetcraft/lib/fromroom.js
    • CadCraft
    • BimCraft
    • ModelCraft
    • PartCraft
    64-bit
  • Island frames

    The origin and axes of each island's front row and back row.

    u = (cos a, sin a), a = rot × π ÷ 180; back row origin = o + u × len

    Cabinet run layout and countertops addons/cabinetcraft/lib/project.js
    • CadCraft
    • BimCraft
    • ModelCraft
    • PartCraft
    64-bit
  • Layout tolerance and largest automatic filler

    The two limits the layout compares against.

    tol = 0.01; maxFiller = conv(75, unit)

    Cabinet run layout and countertops addons/cabinetcraft/lib/project.js
    • CadCraft
    • BimCraft
    • ModelCraft
    • PartCraft
    64-bit
  • End-face swing of a cabinet on a bay

    How far the end face of a straight cabinet on a curved bay swings toward the neighboring run.

    tilt = d × sin(atan2(w ÷ 2, √(r² − w² ÷ 4)))

    Cabinet run layout and countertops addons/cabinetcraft/lib/project.js
    • CadCraft
    • BimCraft
    • ModelCraft
    • PartCraft
    64-bit
  • Is a corner a right angle

    Decides whether a corner cabinet fits a room corner.

    square when |turn − 90| < 0.01 degrees

    Cabinet run layout and countertops addons/cabinetcraft/lib/project.js
    • CadCraft
    • BimCraft
    • ModelCraft
    • PartCraft
    64-bit
  • Where the later run stops at a corner

    How far short of a room corner a run stops so it clears the run on the other wall.

    stop = flat + tilt(A) + tilt(B) + flat² ÷ (2r); flat = other run's depth at 90°

    Cabinet run layout and countertops addons/cabinetcraft/lib/project.js
    • CadCraft
    • BimCraft
    • ModelCraft
    • PartCraft
    64-bit
  • Wedge filler triangle at an angled corner

    The three corners of the triangular void left where two runs meet at an angle that is not 90 degrees.

    tri = [corner, corner ± u × leg1, corner + n × depth]

    Cabinet run layout and countertops addons/cabinetcraft/lib/project.js
    • CadCraft
    • BimCraft
    • ModelCraft
    • PartCraft
    64-bit
  • Automatic filler width

    The width of the filler that closes the gap between the last cabinet and the end of the span.

    rest = end − start − used; filler = rest when tol < rest ≤ maxFiller

    Cabinet run layout and countertops addons/cabinetcraft/lib/project.js
    • CadCraft
    • BimCraft
    • ModelCraft
    • PartCraft
    64-bit
  • Position of each cell along its run

    The distance from the start of the wall to each cabinet, filler and end panel.

    xᵢ₊₁ = xᵢ + wᵢ; stored xᵢ rounded to 6 decimals

    Cabinet run layout and countertops addons/cabinetcraft/lib/project.js
    • CadCraft
    • BimCraft
    • ModelCraft
    • PartCraft
    64-bit
  • First cabinet on a curve moved clear of the previous run

    On a curved wall that starts at a room corner, how far the first cabinet is moved along so it does not overlap the previous run's last cabinet.

    bisection on [0, 600 mm], 40 halvings; clash when overlap > 1e-6

    Cabinet run layout and countertops addons/cabinetcraft/lib/project.js
    • CadCraft
    • BimCraft
    • ModelCraft
    • PartCraft
    64-bit
  • Straight countertop length and width

    The length and width of a countertop over a straight run of base cabinets.

    length = x₁ − x₀ + overhang at each open end; width = depth + front overhang + seat

    Cabinet run layout and countertops addons/cabinetcraft/lib/project.js
    • CadCraft
    • BimCraft
    • ModelCraft
    • PartCraft
    64-bit
  • Countertop on a curved wall

    The outline and area of a one-piece countertop that follows cabinets stepped along a curved wall.

    area = |Σ (xᵢ yᵢ₊₁ − xᵢ₊₁ yᵢ)| ÷ 2

    Cabinet run layout and countertops addons/cabinetcraft/lib/project.js
    • CadCraft
    • BimCraft
    • ModelCraft
    • PartCraft
    64-bit
  • Corner cabinet countertop

    The outline and area of the countertop over a corner cabinet.

    area = shoelace of the outline; length = width = √area

    Cabinet run layout and countertops addons/cabinetcraft/lib/project.js
    • CadCraft
    • BimCraft
    • ModelCraft
    • PartCraft
    64-bit
  • Extent of a cell along its wall

    The stretch of wall each cell covers, used to test it against doors and windows.

    curved wall: min and max of (corner − a)·u; straight: [x, x + w]

    Cabinet run layout and countertops addons/cabinetcraft/lib/project.js
    • CadCraft
    • BimCraft
    • ModelCraft
    • PartCraft
    64-bit
  • End panel height

    The height of an end panel beside a cabinet.

    height = cabinet height − kick height

    Cabinet run layout and countertops addons/cabinetcraft/lib/project.js
    • CadCraft
    • BimCraft
    • ModelCraft
    • PartCraft
    64-bit
  • Wall frame to room coordinates

    Turns a distance along a wall and a distance out from it into a room point.

    p = o + u × s + n × o′

    Cabinet run layout and countertops addons/cabinetcraft/lib/footprint.js
    • CadCraft
    • BimCraft
    • ModelCraft
    • PartCraft
    64-bit
  • Floor footprint of each cell

    The polygon each cabinet and end panel covers on the floor, its bounding box and its height range.

    Cabinet run layout and countertops addons/cabinetcraft/lib/footprint.js
    • CadCraft
    • BimCraft
    • ModelCraft
    • PartCraft
    64-bit
  • How far two footprints overlap

    The penetration depth of two convex polygons, 0 when they are apart or only touch.

    for each edge normal n: overlap = min(a₁, b₁) − max(a₀, b₀) of the projections; result = smallest overlap

    Cabinet run layout and countertops addons/cabinetcraft/lib/footprint.js
    • CadCraft
    • BimCraft
    • ModelCraft
    • PartCraft
    64-bit
  • Gap between two rectangles

    The distance between two axis-aligned rectangles.

    gap = √(dx² + dy²), dx and dy the clear distances on each axis, 0 when they overlap on it

    Cabinet run layout and countertops addons/cabinetcraft/lib/footprint.js
    • CadCraft
    • BimCraft
    • ModelCraft
    • PartCraft
    64-bit
  • Gap between two sets of convex polygons

    The smallest distance between two footprints made of convex pieces, 0 when they touch or overlap.

    Cabinet run layout and countertops addons/cabinetcraft/lib/footprint.js
    • CadCraft
    • BimCraft
    • ModelCraft
    • PartCraft
    64-bit
  • One cabinet in plan

    The cabinet seen from above in its own frame, with its fronts, number and width label.

    W = w × k; D = d × k; label = round(w × 100) ÷ 100

    Cabinet plan, elevation, section and 3D boxes addons/cabinetcraft/lib/draw.js
    • CadCraft
    • BimCraft
    • ModelCraft
    • PartCraft
    64-bit
  • Front view of a run

    Each cabinet's box, plinth and fronts along the run, x along the wall and y up from the floor.

    X = x × k; front at (X + f.x × k, base + f.y × k)

    Cabinet plan, elevation, section and 3D boxes addons/cabinetcraft/lib/draw.js
    • CadCraft
    • BimCraft
    • ModelCraft
    • PartCraft
    64-bit
  • Frame of a run from two wall points

    The origin, angle and length of a run picked by two points on a wall and a point in the room.

    len = √(Δx² + Δy²); left = (room − a) × u; ang = atan2(u_y, uₓ)

    Cabinet plan, elevation, section and 3D boxes addons/cabinetcraft/lib/draw.js
    • CadCraft
    • BimCraft
    • ModelCraft
    • PartCraft
    64-bit
  • Point in a run's frame

    The distance along a run and out from the wall of a point.

    s = Δx cos a + Δy sin a; off = −Δx sin a + Δy cos a

    Cabinet plan, elevation, section and 3D boxes addons/cabinetcraft/lib/draw.js
    • CadCraft
    • BimCraft
    • ModelCraft
    • PartCraft
    64-bit
  • Cabinet in section

    The side panel, bottom, top or rails, back, shelves, plinth, fronts and drawer boxes of a cabinet cut through its middle.

    shelf i of n: y = bottom + (top − bottom) × (i + 1) ÷ (n + 1) − t ÷ 2

    Cabinet plan, elevation, section and 3D boxes addons/cabinetcraft/lib/draw.js
    • CadCraft
    • BimCraft
    • ModelCraft
    • PartCraft
    64-bit
  • Drawing extent and SVG coordinates

    The size of a drawing and the coordinates written into its SVG.

    W = x₁ − x₀; H = y₁ − y₀; each coordinate written as round(v × 1e6) ÷ 1e6

    Cabinet plan, elevation, section and 3D boxes addons/cabinetcraft/lib/drawings.js
    • CadCraft
    • BimCraft
    • ModelCraft
    • PartCraft
    64-bit
  • Cabinets placed on the room plan

    The rectangle of each cabinet, filler and end panel in room coordinates.

    corner = toWorld(frame, s + x, o)

    Cabinet plan, elevation, section and 3D boxes addons/cabinetcraft/lib/drawings.js
    • CadCraft
    • BimCraft
    • ModelCraft
    • PartCraft
    64-bit
  • Room dimensions on the plan

    The overall width and depth dimensions of the room.

    label = fmtLen(W, unit)

    Cabinet plan, elevation, section and 3D boxes addons/cabinetcraft/lib/drawings.js
    • CadCraft
    • BimCraft
    • ModelCraft
    • PartCraft
    64-bit
  • Foreshortened width on a curved wall

    The drawn width of a cabinet that is turned on a curved wall, in the elevation.

    kₓ = max(0.05, (ext₁ − ext₀) ÷ w); drawn width = w × kₓ

    Cabinet plan, elevation, section and 3D boxes addons/cabinetcraft/lib/drawings.js
    • CadCraft
    • BimCraft
    • ModelCraft
    • PartCraft
    64-bit
  • Overall run length and height in the elevation

    The total length of a run and the height to the top of its tallest cabinet.

    length = b − a; top = max(elevation + height)

    Cabinet plan, elevation, section and 3D boxes addons/cabinetcraft/lib/drawings.js
    • CadCraft
    • BimCraft
    • ModelCraft
    • PartCraft
    64-bit
  • Section of one cabinet with dimensions

    The section view of one cabinet with its face frame, fronts, overall depth and height.

    depth shown = d + frame thickness + front thickness

    Cabinet plan, elevation, section and 3D boxes addons/cabinetcraft/lib/drawings.js
    • CadCraft
    • BimCraft
    • ModelCraft
    • PartCraft
    64-bit
  • Cabinet panels as boxes

    The carcass panels, back, shelves, plinth and fronts of a cabinet as boxes in its own frame.

    shelf i of n: z = bottom + (top − bottom) × (i + 1) ÷ (n + 1) − t ÷ 2

    Cabinet plan, elevation, section and 3D boxes addons/cabinetcraft/lib/solid.js
    • CadCraft
    • BimCraft
    • ModelCraft
    • PartCraft
    64-bit
  • Boxes placed in the drawing

    The faces of each box in drawing coordinates, for the 3D tab.

    X = x + lx cos r − ly sin r; Y = y + lx sin r + ly cos r; Z = (z + elev) × k

    Cabinet plan, elevation, section and 3D boxes addons/cabinetcraft/lib/solid.js
    • CadCraft
    • BimCraft
    • ModelCraft
    • PartCraft
    64-bit
  • Numbers read from a G-code line

    Splits a line into its letter and number words.

    G-code dry run and hole check addons/cabinetcraft/lib/dryrun.js
    • CadCraft
    • BimCraft
    • ModelCraft
    • PartCraft
    64-bit
  • Arc move length

    The length of a G2 or G3 move in the XY plane, with any Z change.

    r = |start − center|; sweep = a₁ − a₀ wrapped to the move's direction; len = √((r × |sweep|)² + Δz²)

    G-code dry run and hole check addons/cabinetcraft/lib/dryrun.js
    • CadCraft
    • BimCraft
    • ModelCraft
    • PartCraft
    64-bit

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.