Status: pre-alpha. Based on OpenSCAD cheatsheet v2021.01.
Missing primitives
- [x]
text(text, size, font, direction, language, script, halign, valign, spacing)— 2D text generation (v1: direction/language/script not implemented) - [x]
surface(file, center, invert, convexity)— heightmap from DAT/PNG files- [x] Basic implementation: PNG (grayscale) + DAT, planar merge, UnifySameDomain
- [x]
center— center on XY (via bbox translation in scl.py) - [x] Closed solid body: bottom face at
z = min(data) - 1, vertical side walls, Sewing → MakeSolid → OrientClosedSolid - [x] PNG luminance formula — OpenSCAD linear sRGB:
Y = 0.2126R + 0.7152G + 0.0722B
Missing transformations
- [x]
resize(newsize, auto, convexity)— scale to absolute dimensions - [x]
multmatrix(m)— arbitrary 4×4 affine matrix (shear, skew)
Missing linear_extrude parameters
- [x]
center— center on Z axis - [x]
slices— segment count for twist (accepted, ignored for OCCT) - [x]
scale— scale along height (tapered extrusion)
Missing import() parameters
- [x]
center— center imported geometry
Missing control flow / list comprehension features
- [x]
intersection_for(i = ...) { ... }— loop with intersection of results - [x]
eachin list comprehensions — unwrap inner list:[for (a = list) each a] - [x] C-style
forin list comprehensions —[for (a=0,b=1; a<10; a=a+1) expr] - [x] Multi-generator list comprehensions —
[for (a = list1), for (b = list2) expr]
Missing functions
- [x]
search(match_value, string_or_vector, num_returns_per_match, index_col_num)— search in strings/lists/tables - [x]
lookup(key, key_value_pairs)— linear interpolation lookup table - [x]
parent_module(n)— name of module n levels up in instantiation stack
Missing special variables
- [ ]
$vpr— viewport rotation - [ ]
$vpt— viewport translation - [ ]
$vpd— viewport camera distance - [ ]
$vpf— viewport field of view - [x]
$parent_modules— number of modules in instantiation stack
Missing animation
- [ ]
$tspecial variable (0..1) — animation time parameter, set by GUI - [ ] Animation controls (play/pause, FPS, frame count) — re-renders scene with
$tadvancing from 0 to 1 - [ ]
$vpr/$vpt/$vpd/$vpf— viewport variables usable in animation context
$fn polygon threshold (bcad-specific)
$fn in OpenSCAD has dual meaning: small values (3-12) specify polygon geometry (hexagonal prisms, etc.), while large values (20, 32, 100) specify rendering quality (smoothness). bcad resolves this ambiguity with a configurable threshold (Preferences > General):
$fn <= threshold→ polygon (hexagon, octagon, etc.)$fn > threshold→ ideal geometry (smooth circle/cylinder)$fn == 0→ always ideal geometry
Default threshold: 12. Applied in cylinder(), circle(), and rotate_extrude() context methods.
rotate_extrude with $fn <= threshold creates a polygonal revolution path (N flat segments) via ThruSections(ruled=True), matching OpenSCAD behavior. Segment count uses OpenSCAD formula: ceil(max($fn, 3)) * abs(angle) / 360.