Table of Contents
- The Belfry OpenScad Library, v2. (BOSL2) Cheat Sheet
- LibFile: constants.scad
- LibFile: transforms.scad
- Section: Translations
- Section: Rotations
- Section: Scaling
- Section: Reflection (Mirroring)
- Section: Other Transformations
- Section: Applying transformation matrices to data
- LibFile: attachments.scad
- Section: Attachment Positioning
- Section: Tagging
- Section: Attachment Modifiers
- Section: Mask Attachment
- Section: Making your objects attachable
- Section: Visualizing Anchors
- Section: Attachable Descriptions for Operating on Attachables or Restoring a Previous State
- LibFile: shapes2d.scad
- Section: 2D Primitives
- Section: Polygons
- Section: Curved 2D Shapes
- Section: Text
- Section: Rounding 2D shapes
- LibFile: shapes3d.scad
- Section: Cuboids, Prismoids and Pyramids
- Section: Cylinders
- Section: Other Round Objects
- Section: Text
- Section: Miscellaneous
- LibFile: drawing.scad
- LibFile: masks2d.scad
- LibFile: masks3d.scad
- LibFile: distributors.scad
- Section: Translating copies of all the children
- Section: Rotating copies of all children
- Section: Placing copies of all children on a path
- Section: Making a copy of all children with reflection
- Section: Distributing children individually along a line
- LibFile: color.scad
- LibFile: partitions.scad
- LibFile: miscellaneous.scad
- Section: Extrusion
- Section: Bounding Box
- Section: Hull Based Modules
- Section: Minkowski and 3D Offset
- LibFile: paths.scad
- Section: Utility Functions
- Section: Path length calculation
- Section: Resampling - changing the number of points in a path
- Section: Path Geometry
- Section: Breaking paths up into subpaths
- LibFile: regions.scad
- Section: Regions
- Section: Turning a region into geometry
- Section: Geometrical calculations with regions
- Section: Breaking up regions into subregions
- Section: Offset and 2D Boolean Set Operations
- LibFile: skin.scad
- Section: Skin and sweep
- Section: Attaching children to sweeps
- Section: Functions for resampling and slicing profile lists
- Section: Texturing
- LibFile: vnf.scad
- Section: Creating Polyhedrons with VNF Structures
- Section: VNF Testing and Access
- Section: Altering the VNF Internals
- Section: Turning a VNF into geometry
- Section: Operations on VNFs
- Section: Debugging Polyhedrons
- LibFile: beziers.scad
- Section: Bezier Curves
- Section: Bezier Path Functions
- Section: Cubic Bezier Path Construction
- Section: Bezier Surfaces
- Section: Debugging Beziers
- LibFile: nurbs.scad
- LibFile: rounding.scad
- LibFile: turtle3d.scad
- LibFile: math.scad
- Section: Math Constants
- Section: Interpolation and Counting
- Section: Miscellaneous Functions
- Section: Hyperbolic Trigonometry
- Section: Quantization
- Section: Constraints and Modulos
- Section: Operations on Lists (Sums, Mean, Products)
- Section: Random Number Generation
- Section: Calculus
- Section: Complex Numbers
- Section: Polynomials
- Section: Operations on Functions
- LibFile: linalg.scad
- Section: Matrix testing and display
- Section: Matrix indexing
- Section: Matrix construction and modification
- Section: Solving Linear Equations and Matrix Factorizations
- Section: Matrix Properties: Determinants, Norm, Trace
- LibFile: vectors.scad
- Section: Vector Testing
- Section: Scalar operations on vectors
- Section: Vector Properties
- Section: Vector Searching
- LibFile: coords.scad
- LibFile: geometry.scad
- Section: Lines, Rays, and Segments
- Section: Planes
- Section: Circle Calculations
- Section: Sphere Calculations
- Section: Polygons
- Section: Convex Hull
- Section: Convex Sets
- Section: Rotation Decoding
- LibFile: trigonometry.scad
- LibFile: version.scad
- LibFile: comparisons.scad
- Section: List comparison operations
- Section: Finding the index of the minimum or maximum of a list
- Section: Dealing with duplicate list entries
- Section: Sorting
- LibFile: lists.scad
- Section: List Query Operations
- Section: List Indexing
- Section: List Construction
- Section: List Modification
- Section: List Iteration Index Helper
- Section: Lists of Subsets
- Section: Changing List Structure
- Section: Set Manipulation
- LibFile: utility.scad
- Section: Type Checking
- Section: Boolean list testing
- Section: Handling undefs.
- Section: Undef Safe Arithmetic
- Section: Processing Arguments to Functions and Modules
- Section: Testing Helpers
- Section: C-Style For Loop Helpers
- LibFile: strings.scad
- Section: Extracting substrings
- Section: String Searching
- Section: String modification
- Section: Random strings
- Section: Parsing strings into numbers
- Section: Formatting numbers into strings
- Section: Checking character class
- LibFile: structs.scad
- LibFile: fnliterals.scad
- Section: Function Literal Algorithms
- Section: Function Meta-Generators
- Section: Comparator Generators
- Section: Logic Operators
- Section: Math Operators
- Section: Min/Max Operators
- Section: Trigonometry Operators
- Section: String Operators
- Section: Miscellaneous Operators
- Section: Type Queries
- LibFile: threading.scad
- Section: Standard (UTS/ISO) Threading
- Section: Trapezoidal Threading
- Section: Pipe Threading
- Section: Buttress Threading
- Section: Square Threading
- Section: Ball Screws
- Section: Generic Threading
- LibFile: screws.scad
- LibFile: screw_drive.scad
- LibFile: bottlecaps.scad
- Section: PCO-1810 Bottle Threading
- Section: PCO-1881 Bottle Threading
- Section: Generic Bottle Connectors
- Section: SPI Bottle Threading
- LibFile: cubetruss.scad
- LibFile: gears.scad
- LibFile: hinges.scad
- LibFile: joiners.scad
- Section: Half Joiners
- Section: Full Joiners
- Section: Dovetails
- Section: Tension Clips
- Section: Splines
- LibFile: linear_bearings.scad
- LibFile: modular_hose.scad
- LibFile: nema_steppers.scad
- LibFile: polyhedra.scad
- LibFile: sliders.scad
- LibFile: tripod_mounts.scad
- LibFile: walls.scad
- LibFile: wiring.scad
The Belfry OpenScad Library, v2. (BOSL2) Cheat Sheet
LibFile: constants.scad
Section: General Constants
slop = get_slop();
Section: Directional Vectors
Constants: LEFT
RIGHT
FRONT
FWD
FORWARD
BACK
BOTTOM
BOT
DOWN
TOP
UP
CENTER
CTR
CENTRE
FACE(i)
Section: Line specifiers
LibFile: transforms.scad
Section: Translations
move(v) CHILDREN;
pts = move(v, p);
pts = move(STRING, p);
mat = move(v);
Section: Rotations
rot(a, [cp=], [reverse=]) CHILDREN;
rot([X,Y,Z], [cp=], [reverse=]) CHILDREN;
rot(a, v, [cp=], [reverse=]) CHILDREN;
rot(from=, to=, [a=], [reverse=]) CHILDREN;
pts = rot(a, p=, [cp=], [reverse=]);
pts = rot([X,Y,Z], p=, [cp=], [reverse=]);
pts = rot(a, v, p=, [cp=], [reverse=]);
pts = rot([a], from=, to=, p=, [reverse=]);
M = rot(a, [cp=], [reverse=]);
M = rot([X,Y,Z], [cp=], [reverse=]);
M = rot(a, v, [cp=], [reverse=]);
M = rot(from=, to=, [a=], [reverse=]);
xrot(a, [cp=]) CHILDREN;
rotated = xrot(a, p, [cp=]);
mat = xrot(a, [cp=]);
yrot(a, [cp=]) CHILDREN;
rotated = yrot(a, p, [cp=]);
mat = yrot(a, [cp=]);
zrot(a, [cp=]) CHILDREN;
rotated = zrot(a, p, [cp=]);
mat = zrot(a, [cp=]);
tilt(to=, [reverse=], [cp=]) CHILDREN;
pts = tilt(to=, p=, [reverse=], [cp=]);
M = tilt(to=, [reverse=], [cp=]);
Section: Scaling
scale(SCALAR) CHILDREN;
scale([X,Y,Z]) CHILDREN;
pts = scale(v, p, [cp=]);
mat = scale(v, [cp=]);
xscale(x, [cp=]) CHILDREN;
scaled = xscale(x, p, [cp=]);
mat = xscale(x, [cp=]);
yscale(y, [cp=]) CHILDREN;
scaled = yscale(y, p, [cp=]);
mat = yscale(y, [cp=]);
zscale(z, [cp=]) CHILDREN;
scaled = zscale(z, p, [cp=]);
mat = zscale(z, [cp=]);
Section: Reflection (Mirroring)
xflip([x=]) CHILDREN;
pt = xflip(p, [x]);
mat = xflip([x=]);
yflip([y=]) CHILDREN;
pt = yflip(p, [y]);
mat = yflip([y=]);
zflip([z=]) CHILDREN;
pt = zflip(p, [z]);
mat = zflip([z=]);
Section: Other Transformations
frame_map(v1, v2, v3, [reverse=]) CHILDREN;
transformed = frame_map(v1, v2, v3, p=points, [reverse=]);
map = frame_map(v1, v2, v3, [reverse=]);
map = frame_map(x=VECTOR1, y=VECTOR2, [reverse=]);
map = frame_map(x=VECTOR1, z=VECTOR2, [reverse=]);
map = frame_map(y=VECTOR1, z=VECTOR2, [reverse=]);
skew([sxy=]|[axy=], [sxz=]|[axz=], [syx=]|[ayx=], [syz=]|[ayz=], [szx=]|[azx=], [szy=]|[azy=]) CHILDREN;
pts = skew(p, [sxy=]|[axy=], [sxz=]|[axz=], [syx=]|[ayx=], [syz=]|[ayz=], [szx=]|[azx=], [szy=]|[azy=]);
mat = skew([sxy=]|[axy=], [sxz=]|[axz=], [syx=]|[ayx=], [syz=]|[ayz=], [szx=]|[azx=], [szy=]|[azy=]);
Section: Applying transformation matrices to data
pts = apply(transform, points);
LibFile: attachments.scad
Section: Attachment Positioning
PARENT() position(at) CHILDREN;
PARENT() orient(anchor, [spin]) CHILDREN;
PARENT() align(anchor, [align], [inside=], [inset=], [shiftout=], [overlap=]) CHILDREN;
PARENT() attach(parent, child, [align=], [spin=], [overlap=], [inside=], [inset=], [shiftout=]) CHILDREN;
PARENT() attach(parent, [overlap=], [spin=]) CHILDREN;
Section: Tagging
PARENT() tag(tag) CHILDREN;
PARENT() force_tag([tag]) CHILDREN;
PARENT() default_tag(tag) CHILDREN;
tag_scope([scope]) CHILDREN;
Section: Attachment Modifiers
diff([remove], [keep]) PARENT() CHILDREN;
tag_diff([tag], [remove], [keep]) PARENT() CHILDREN;
tag_intersect([tag], [intersect], [keep]) PARENT() CHILDREN;
conv_hull([keep]) CHILDREN;
tag_conv_hull([tag], [keep]) CHILDREN;
hide(tags) CHILDREN;
hide_this() CHILDREN;
show_only(tags) CHILDREN;
show_int(tags) CHILDREN;
Section: Mask Attachment
PARENT() face_mask(faces) CHILDREN;
PARENT() edge_mask([edges], [except]) CHILDREN;
PARENT() corner_mask([corners], [except]) CHILDREN;
PARENT() face_profile(faces, r|d=, [convexity=]) CHILDREN;
PARENT() edge_profile([edges], [except], [convexity]) CHILDREN;
PARENT() edge_profile([edges], [except], [convexity=], [flip=], [corner_type=]) CHILDREN;
PARENT() corner_profile([corners], [except], [r=|d=], [convexity=]) CHILDREN;
Section: Making your objects attachable
attachable(anchor, spin, two_d=true, size=, [size2=], [shift=], [override=], ...) {OBJECT; children();}
attachable(anchor, spin, two_d=true, r=|d=, ...) {OBJECT; children();}
attachable(anchor, spin, two_d=true, path=, [extent=], ...) {OBJECT; children();}
attachable(anchor, spin, two_d=true, region=, [extent=], ...) {OBJECT; children();}
attachable(anchor, spin, [orient], size=, [size2=], [shift=], [override=], ...) {OBJECT; children();}
attachable(anchor, spin, [orient], r=|d=, l=, [axis=], ...) {OBJECT; children();}
attachable(anchor, spin, [orient], r1=|d1=, r2=|d2=, l=, [axis=], ...) {OBJECT; children();}
attachable(anchor, spin, [orient], r=|d=, ...) {OBJECT; children();}
attachable(anchor, spin, path=, l=|h=, [extent=], ...) {OBJECT; children();}
attachable(anchor, spin, region=, l=|h=, [extent=], ...) {OBJECT; children();}
attachable(anchor, spin, [orient], vnf=, [extent=], ...) {OBJECT; children();}
attachable(anchor, spin, [orient], geom=) {OBJECT; children();}
mat = reorient(anchor, spin, [orient], two_d=true, size=, [size2=], [shift=], ...);
pts = reorient(anchor, spin, [orient], two_d=true, size=, [size2=], [shift=], p=, ...);
mat = reorient(anchor, spin, [orient], two_d=true, r=|d=, ...);
pts = reorient(anchor, spin, [orient], two_d=true, r=|d=, p=, ...);
mat = reorient(anchor, spin, [orient], two_d=true, path=, [extent=], ...);
pts = reorient(anchor, spin, [orient], two_d=true, path=, [extent=], p=, ...);
mat = reorient(anchor, spin, [orient], two_d=true, region=, [extent=], ...);
pts = reorient(anchor, spin, [orient], two_d=true, region=, [extent=], p=, ...);
mat = reorient(anchor, spin, [orient], size=, [size2=], [shift=], ...);
vnf = reorient(anchor, spin, [orient], size=, [size2=], [shift=], p=, ...);
mat = reorient(anchor, spin, [orient], r=|d=, l=, [axis=], ...);
vnf = reorient(anchor, spin, [orient], r=|d=, l=, [axis=], p=, ...);
mat = reorient(anchor, spin, [orient], r1=|d1=, r2=|d2=, l=, [axis=], ...);
vnf = reorient(anchor, spin, [orient], r1=|d1=, r2=|d2=, l=, [axis=], p=, ...);
mat = reorient(anchor, spin, [orient], r|d=, ...);
vnf = reorient(anchor, spin, [orient], r|d=, p=, ...);
mat = reorient(anchor, spin, [orient], path=, l=|h=, [extent=], ...);
vnf = reorient(anchor, spin, [orient], path=, l=|h=, [extent=], p=, ...);
mat = reorient(anchor, spin, [orient], region=, l=|h=, [extent=], ...);
vnf = reorient(anchor, spin, [orient], region=, l=|h=, [extent=], p=, ...);
mat = reorient(anchor, spin, [orient], vnf, [extent], ...);
vnf = reorient(anchor, spin, [orient], vnf, [extent], p=, ...);
a = named_anchor(name, pos, [orient], [spin]);
a = named_anchor(name, [pos], rot=, [flip=]);
geom = attach_geom(...);
geom = attach_geom(two_d=true, size=, [size2=], [shift=], ...);
geom = attach_geom(two_d=true, r=|d=, ...);
geom = attach_geom(two_d=true, region=, [extent=], ...);
geom = attach_geom(size=, [size2=], [shift=], ...);
geom = attach_geom(r=|d=, l=|h=, [axis=], ...);
geom = attach_geom(r1|d1=, r2=|d2=, l=, [axis=], ...);
geom = attach_geom(r=|d=, ...);
geom = attach_geom(region=, l=|h=, [extent=], [shift=], [scale=], [twist=], ...);
geom = attach_geom(vnf=, [extent=], ...);
Section: Visualizing Anchors
PARENT() show_anchors([s], [std=], [custom=]);
anchor_arrow([s], [color], [flag], [anchor=], [orient=], [spin=]) [ATTACHMENTS];
anchor_arrow2d([s], [color]);
expose_anchors(opacity) {child1() show_anchors(); child2() show_anchors(); ...}
show_transform_list(tlist, [s]);
show_transform_list(tlist) {CHILDREN};
generic_airplane([s]);
frame_ref(s, opacity);
Section: Attachable Descriptions for Operating on Attachables or Restoring a Previous State
PARENT() let( desc = parent() ) CHILDREN;
PARENT() { desc=parent(); CHILDREN; }
restore([desc]) CHILDREN;
LibFile: shapes2d.scad
Section: 2D Primitives
square(size, [center], ...);
square(size, [center], ...) [ATTACHMENTS];
path = square(size, [center], ...);
rect(size, [rounding], [chamfer], ...) [ATTACHMENTS];
path = rect(size, [rounding], [chamfer], ...);
circle(r|d=, ...) [ATTACHMENTS];
circle(points=) [ATTACHMENTS];
circle(r|d=, corner=) [ATTACHMENTS];
path = circle(r|d=, ...);
path = circle(points=);
path = circle(r|d=, corner=);
ellipse(r|d=, [realign=], [circum=], [uniform=], ...) [ATTACHMENTS];
path = ellipse(r|d=, [realign=], [circum=], [uniform=], ...);
Section: Polygons
regular_ngon(n, r|d=|or=|od=, [realign=]) [ATTACHMENTS];
regular_ngon(n, ir=|id=, [realign=]) [ATTACHMENTS];
regular_ngon(n, side=, [realign=]) [ATTACHMENTS];
pentagon(or|od=, [realign=], [align_tip=|align_side=]) [ATTACHMENTS];
pentagon(ir=|id=, [realign=], [align_tip=|align_side=]) [ATTACHMENTS];
pentagon(side=, [realign=], [align_tip=|align_side=]) [ATTACHMENTS];
path = pentagon(...);
hexagon(r/or, [realign=], <align_tip=|align_side=>, [rounding=], ...) [ATTACHMENTS];
hexagon(d=/od=, ...) [ATTACHMENTS];
hexagon(ir=/id=, ...) [ATTACHMENTS];
hexagon(side=, ...) [ATTACHMENTS];
path = hexagon(...);
octagon(r/or, [realign=], [align_tip=|align_side=], [rounding=], ...) [ATTACHMENTS];
octagon(d=/od=, ...) [ATTACHMENTS];
octagon(ir=/id=, ...) [ATTACHMENTS];
octagon(side=, ...) [ATTACHMENTS];
path = octagon(...);
right_triangle(size, [center], ...) [ATTACHMENTS];
path = right_triangle(size, [center], ...);
trapezoid(h, w1, w2, [shift=], [rounding=], [chamfer=], [flip=], ...) [ATTACHMENTS];
trapezoid(h, w1, ang=, [rounding=], [chamfer=], [flip=], ...) [ATTACHMENTS];
trapezoid(h, w2=, ang=, [rounding=], [chamfer=], [flip=], ...) [ATTACHMENTS];
trapezoid(w1=, w2=, ang=, [rounding=], [chamfer=], [flip=], ...) [ATTACHMENTS];
path = trapezoid(...);
star(n, r/or, ir, [realign=], [align_tip=], [align_pit=], ...) [ATTACHMENTS];
star(n, r/or, step=, ...) [ATTACHMENTS];
path = star(n, r/or, ir, [realign=], [align_tip=], [align_pit=], ...);
path = star(n, r/or, step=, ...);
jittered_poly(path, [dist]);
Section: Curved 2D Shapes
teardrop2d(r/d=, [ang], [cap_h]) [ATTACHMENTS];
path = teardrop2d(r|d=, [ang], [cap_h]);
egg(length, r1|d1=, r2|d2=, R|D=) [ATTACHMENTS];
path = egg(length, r1|d1=, r2|d2=, R|D=);
region=ring(n, r1=|d1=, r2=|d2=, [full=], [angle=], [start=]);
region=ring(n, ring_width, r=|d=, [full=], [angle=], [start=]);
region=ring(n, [ring_width], [r=,d=], points=[P0,P1,P2], [full=]);
region=ring(n, [ring_width], corner=[P0,P1,P2], [r=,d=], [r1|d1=], [r2=|d2=], [full=]);
region=ring(n, [ring_width], [r=|d=], width=, thickness=, [full=]);
ring(...) [ATTACHMENTS];
glued_circles(r/d=, [spread], [tangent], ...) [ATTACHMENTS];
path = glued_circles(r/d=, [spread], [tangent], ...);
squircle(size, [squareness], [style]) [ATTACHMENTS];
path = squircle(size, [squareness], [style]);
keyhole(l/length=, r1/d1=, r2/d2=, [shoulder_r=], ...) [ATTACHMENTS];
path = keyhole(l/length=, r1/d1=, r2/d2=, [shoulder_r=], ...);
supershape([step],[n=], [m1=], [m2=], [n1=], [n2=], [n3=], [a=], [b=], [r=/d=]) [ATTACHMENTS];
path = supershape([step], [n=], [m1=], [m2=], [n1=], [n2=], [n3=], [a=], [b=], [r=/d=]);
reuleaux_polygon(n, r|d=, ...) [ATTACHMENTS];
path = reuleaux_polygon(n, r|d=, ...);
Section: Text
Section: Rounding 2D shapes
round2d(r) [ATTACHMENTS];
round2d(or=) [ATTACHMENTS];
round2d(ir=) [ATTACHMENTS];
round2d(or=, ir=) [ATTACHMENTS];
shell2d(thickness, [or], [ir])
LibFile: shapes3d.scad
Section: Cuboids, Prismoids and Pyramids
cube(size, [center]);
cube(size, [center], [anchor=], [spin=], [orient=]) [ATTACHMENTS];
vnf = cube(size, ...);
cuboid(size, [anchor=], [spin=], [orient=]);
cuboid(size, p1=, ...);
cuboid(p1=, p2=, ...);
cuboid(size, [chamfer=], [edges=], [except=], [trimcorners=], ...);
cuboid(size, [rounding=], [teardrop=], [edges=], [except=], [trimcorners=], ...);
cuboid(...) ATTACHMENTS;
prismoid(size1, size2, [h|l|height|length], [shift], [xang=], [yang=], ...) [ATTACHMENTS];
prismoid(size1, size2, h|l|height|length, [chamfer=], [rounding=]...) [ATTACHMENTS];
prismoid(size1, size2, h|l|height|length, [chamfer1=], [chamfer2=], [rounding1=], [rounding2=], ...) [ATTACHMENTS];
vnf = prismoid(...);
octahedron(size, ...) [ATTACHMENTS];
vnf = octahedron(size, ...);
regular_prism(n, h|l=|height=|length=, r, [center=], [realign=]) [ATTACHMENTS];
regular_prism(n, h|l=|height=|length=, d=|id=|od=|ir=|or=|side=, ...) [ATTACHMENTS];
regular_prism(n, h|l=|height=|length=, r1=|d1=|id1=|od1=|ir1=|or1=|side1=,r2=|d2=|id2=|od2=|ir2=|or2=|side2=, ...) [ATTACHMENTS];
regular_prism(n, h, r, chamfer=, [chamfang=], [from_end=], ...);
regular_prism(n, h, r, chamfer1=, [chamfang1=], [from_end=], ...);
regular_prism(n, h, r, chamfer2=, [chamfang2=], [from_end=], ...);
regular_prism(n, h, r, chamfer1=, chamfer2=, [chamfang1=], [chamfang2=], [from_end=], ...);
regular_prism(n, h, r, rounding=, ...);
regular_prism(n, h, r, rounding1=, ...);
regular_prism(n, h, r, rounding2=, ...);
regular_prism(n, h, r, rounding1=, rounding2=, ...);
regular_prism(n, h, r, texture=, [tex_size=]|[tex_reps=], [tex_depth=], [tex_rot=], [tex_samples=], [style=], [tex_inset=], ...);
vnf = rounded_prism(...);
rect_tube(h, size, isize, [center], [shift]);
rect_tube(h, size, wall=, [center=]);
rect_tube(h, isize=, wall=, [center=]);
rect_tube(h, size1=, size2=, wall=, ...);
rect_tube(h, isize1=, isize2=, wall=, ...);
rect_tube(h, size1=, size2=, isize1=, isize2=, ...);
rect_tube(h, size, isize, chamfer=, ...);
rect_tube(h, size, isize, chamfer1=, chamfer2= ...);
rect_tube(h, size, isize, ichamfer=, ...);
rect_tube(h, size, isize, ichamfer1=, ichamfer2= ...);
rect_tube(h, size, isize, chamfer=, ichamfer=, ...);
rect_tube(h, size, isize, rounding=, ...);
rect_tube(h, size, isize, rounding1=, rounding2= ...);
rect_tube(h, size, isize, irounding=, ...);
rect_tube(h, size, isize, irounding1=, irounding2= ...);
rect_tube(h, size, isize, rounding=, irounding=, ...);
rect_tube(...) ATTACHMENTS;
wedge(size, [center], ...) [ATTACHMENTS];
vnf = wedge(size, [center], ...);
Section: Cylinders
cylinder(h, r=/d=, [center=]);
cylinder(h, r1/d1=, r2/d2=, [center=]);
cylinder(h, r=/d=, [center=], [anchor=], [spin=], [orient=]) [ATTACHMENTS];
cylinder(h, r1/d1=, r2/d2=, [center=], [anchor=], [spin=], [orient=]) [ATTACHMENTS];
vnf = cylinder(h, r=/d=, ...);
vnf = cylinder(h, r1/d1=, r2/d2=, ...);
cyl(l|h|length|height, r, [center], [circum=], [realign=]) [ATTACHMENTS];
cyl(l|h|length|height, d=, ...) [ATTACHMENTS];
cyl(l|h|length|height, r1=, r2=, ...) [ATTACHMENTS];
cyl(l|h|length|height, d1=, d2=, ...) [ATTACHMENTS];
cyl(l|h|length|height, r|d, chamfer=, [chamfang=], [from_end=], ...);
cyl(l|h|length|height, r|d, chamfer1=, [chamfang1=], [from_end=], ...);
cyl(l|h|length|height, r|d, chamfer2=, [chamfang2=], [from_end=], ...);
cyl(l|h|length|height, r|d, chamfer1=, chamfer2=, [chamfang1=], [chamfang2=], [from_end=], ...);
cyl(l|h|length|height, r|d, rounding=, ...);
cyl(l|h|length|height, r|d, rounding1=, ...);
cyl(l|h|length|height, r|d, rounding2=, ...);
cyl(l|h|length|height, r|d, rounding1=, rounding2=, ...);
cyl(l|h|length|height, r|d, texture=, [tex_size=]|[tex_reps=], [tex_depth=], [tex_rot=], [tex_samples=], [style=], [tex_taper=], [tex_inset=], ...);
cyl(l|h|length|height, r1=, r2=, texture=, [tex_size=]|[tex_reps=], [tex_depth=], [tex_rot=], [tex_samples=], [style=], [tex_taper=], [tex_inset=], ...);
cyl(l|h|length|height, d1=, d2=, texture=, [tex_size=]|[tex_reps=], [tex_depth=], [tex_rot=], [tex_samples=], [style=], [tex_taper=], [tex_inset=], ...);
vnf = cyl(...);
xcyl(l|h|length|height, r|d=, [anchor=], ...) [ATTACHMENTS];
xcyl(l|h|length|height, r1=|d1=, r2=|d2=, [anchor=], ...) [ATTACHMENTS];
ycyl(l|h|length|height, r|d=, [anchor=], ...) [ATTACHMENTS];
ycyl(l|h|length|height, r1=|d1=, r2=|d2=, [anchor=], ...) [ATTACHMENTS];
zcyl(l|h|length|height, r|d=, [anchor=],...) [ATTACHMENTS];
zcyl(l|h|length|height, r1=|d1=, r2=|d2=, [anchor=],...);
tube(h|l, or, ir, [center], [realign=], [anchor=], [spin=],[orient=]) [ATTACHMENTS];
tube(h|l, od=, id=, ...) [ATTACHMENTS];
tube(h|l, or|od=|ir=|id=, wall=, ...) [ATTACHMENTS];
tube(h|l, ir1=|id1=, ir2=|id2=, or1=|od1=, or2=|od2=, ...) [ATTACHMENTS];
tube(h|l, or1=|od1=, or2=|od2=, wall=, ...) [ATTACHMENTS];
tube(..., [rounding=], [irounding=], [orounding=], [rounding1=], [rounding2=], [irounding1=], [irounding2=], [orounding1=], [orounding2=], [teardrop=]);
tube(..., [chamfer=], [ichamfer=], [ochamfer=], [chamfer1=], [chamfer2=], [ichamfer1=], [ichamfer2=], [ochamfer1=], [ochamfer2=]);
pie_slice(l|h=|height=|length=, r, ang, [center]);
pie_slice(l|h=|height=|length=, d=, ang=, ...);
pie_slice(l|h=|height=|length=, r1=|d1=, r2=|d2=, ang=, ...);
vnf = pie_slice(l|h=|height=|length=, r, ang, [center]);
vnf = pie_slice(l|h=|height=|length=, d=, ang=, ...);
vnf = pie_slice(l|h=|height=|length=, r1=|d1=, r2=|d2=, ang=, ...);
pie_slice(l|h, r, ang, ...) ATTACHMENTS;
Section: Other Round Objects
sphere(r|d=);
sphere(r|d=, [anchor=], [spin=], [orient=]) [ATTACHMENTS];
vnf = sphere(r|d=, [anchor=], [spin=], [orient=]) [ATTACHMENTS];
spheroid(r|d, [circum], [style]) [ATTACHMENTS];
vnf = spheroid(r|d, [circum], [style]);
torus(r_maj|d_maj, r_min|d_min, [center], ...) [ATTACHMENTS];
torus(or|od, ir|id, ...) [ATTACHMENTS];
torus(r_maj|d_maj, or|od, ...) [ATTACHMENTS];
torus(r_maj|d_maj, ir|id, ...) [ATTACHMENTS];
torus(r_min|d_min, or|od, ...) [ATTACHMENTS];
torus(r_min|d_min, ir|id, ...) [ATTACHMENTS];
vnf = torus(r_maj|d_maj, r_min|d_min, [center], ...);
vnf = torus(or|od, ir|id, ...);
vnf = torus(r_maj|d_maj, or|od, ...);
vnf = torus(r_maj|d_maj, ir|id, ...);
vnf = torus(r_min|d_min, or|od, ...);
vnf = torus(r_min|d_min, ir|id, ...);
teardrop(h|l=|length=|height=, r, [ang], [cap_h], [chamfer=], ...) [ATTACHMENTS];
teardrop(h|l=|length=|height=, d=, [ang=], [cap_h=], [chamfer=], ...) [ATTACHMENTS];
teardrop(h|l=|height=|length=, r1=, r2=, [ang=], [cap_h1=], [cap_h2=], ...) [ATTACHMENTS];
teardrop(h|l=|height=|length=, d1=, d2=, [ang=], [cap_h1=], [cap_h2=], ...) [ATTACHMENTS];
vnf = teardrop(h|l=|height=|length=, r|d=, [ang=], [cap_h=], ...);
vnf = teardrop(h|l=|height=|length=, r1=|d1=, r2=|d2=, [ang=], [cap_h=], ...);
vnf = teardrop(h|l=|height=|length=, r1=|d1=, r2=|d2=, [ang=], [cap_h1=], [cap_h2=], ...);
onion(r|d=, [ang=], [cap_h=], [circum=], [realign=], ...) [ATTACHMENTS];
vnf = onion(r|d=, [ang=], [cap_h=], [circum=], [realign=], ...);
Section: Text
text3d(text, [h], [size], [font], [language=], [script=], [direction=], [atype=], [anchor=], [spin=], [orient=]);
path_text(path, text, [size], [thickness], [font], [lettersize=], [offset=], [reverse=], [normal=], [top=], [textmetrics=], [kern=])
Section: Miscellaneous
fillet(l|h=|length=|height=, r|d=, [ang=], [excess=], [rounding=|chamfer=]) [ATTACHMENTS];
fillet(l|h=|length=|height=, r1=|d1=, r2=|d2=, [ang=], [excess=], [rounding=|chamfer=]) [ATTACHMENTS];
heightfield(data, [size], [bottom], [maxz], [xrange], [yrange], [style], [convexity], ...) [ATTACHMENTS];
vnf = heightfield(data, [size], [bottom], [maxz], [xrange], [yrange], [style], ...);
vnf = cylindrical_heightfield(data, l|length=|h=|height=, r|d=, [base=], [transpose=], [aspect=]);
cylindrical_heightfield(data, l|length=|h=|height=, r|d=, [base=], [transpose=], [aspect=]) [ATTACHMENTS];
ruler(length, width, [thickness=], [depth=], [labels=], [pipscale=], [maxscale=], [colors=], [alpha=], [unit=], [inch=]) [ATTACHMENTS];
LibFile: drawing.scad
Section: Line Drawing
stroke(path, [width], [closed], [endcaps], [endcap_width], [endcap_length], [endcap_extent], [trim]);
stroke(path, [width], [closed], [endcap1], [endcap2], [endcap_width1], [endcap_width2], [endcap_length1], [endcap_length2], [endcap_extent1], [endcap_extent2], [trim1], [trim2]);
dashed_stroke(path, dashpat, [width=], [closed=]);
dashes = dashed_stroke(path, dashpat, [closed=]);
Section: Computing paths
path=arc(n, r|d=, angle);
path=arc(n, r|d=, angle=[START,END]);
path=arc(n, r|d=, start=, angle=);
path=arc(n, width=, thickness=);
path=arc(n, cp=, points=[P0,P1], [long=], [cw=], [ccw=]);
path=arc(n, points=[P0,P1,P2]);
path=arc(n, corner=[P0,P1,P2], r=);
path=arc(wedge=true,...)
arc(...) [ATTACHMENTS];
path = catenary(width, droop=|angle=, n=);
path = helix(l|h, [turns=], [angle=], r=|r1=|r2=, d=|d1=|d2=);
path = turtle(commands, [state], [full_state=], [repeat=])
Section: Debugging polygons
debug_polygon(points, paths, [vertices=], [edges=], [convexity=], [size=]);
LibFile: masks2d.scad
Section: 2D Masking Shapes
mask2d_roundover(r|d=|h=|height=|cut=|joint=, [inset], [mask_angle], [excess], [flat_top=], [quarter_round=]) [ATTACHMENTS];
path = mask2d_roundover(r|d=|h=|height=|cut=|joint=, [inset], [mask_angle], [excess], [flat_top=], [quarter_round=]);
mask2d_teardrop(r|d=, [angle], [inset] [mask_angle], [excess], [cut=], [joint=], [h=|height=]) [ATTACHMENTS];
path = mask2d_teardrop(r|d=, [angle], [inset], [mask_angle], [excess], [cut=], [joint=], [h=|height=]);
mask2d_cove(r|d=|h=|height=, [inset], [mask_angle], [excess], [bulge=], [flat_top=], [quarter_round=]) [ATTACHMENTS];
path = mask2d_cove(r|d=|h=, [inset], [mask_angle], [excess], [bulge=], [flat_top=]);
mask2d_chamfer(edge, [angle], [inset], [excess]) [ATTACHMENTS];
mask2d_chamfer(y=, [angle=], [inset=], [excess=]) [ATTACHMENTS];
mask2d_chamfer(x=, [angle=], [inset=], [excess=]) [ATTACHMENTS];
path = mask2d_chamfer(edge, [angle], [inset], [excess]);
path = mask2d_chamfer(y=, [angle=], [inset=], [excess=]);
path = mask2d_chamfer(x=, [angle=], [inset=], [excess=]);
mask2d_rabbet(size, [mask_angle], [excess]) [ATTACHMENTS];
path = mask2d_rabbet(size, [mask_angle], [excess]);
mask2d_dovetail(edge, angle, [inset], [shelf], [excess], ...) [ATTACHMENTS];
mask2d_dovetail(width=, angle=, [inset=], [shelf=], [excess=], ...) [ATTACHMENTS];
mask2d_dovetail(height=, angle=, [inset=], [shelf=], [excess=], ...) [ATTACHMENTS];
mask2d_dovetail(width=, height=, [inset=], [shelf=], [excess=], ...) [ATTACHMENTS];
path = mask2d_dovetail(edge, [angle], [inset], [shelf], [excess]);
mask2d_ogee(pattern, [excess], ...) [ATTAHCMENTS];
path = mask2d_ogee(pattern, [excess], ...);
LibFile: masks3d.scad
Section: Chamfer Masks
chamfer_edge_mask(l|h=|length=|height=, chamfer, [excess]) [ATTACHMENTS];
chamfer_corner_mask(chamfer) [ATTACHMENTS];
chamfer_cylinder_mask(r|d=, chamfer, [ang], [from_end]) [ATTACHMENTS];
Section: Rounding Masks
rounding_edge_mask(l|h=|length=|height=, r|d=, [ang], [excess=], [rounding=|chamfer=], ) [ATTACHMENTS];
rounding_edge_mask(l|h=|length=|height=, r1=|d1=, r2=|d2=, [ang=], [excess=], [rounding=|chamfer=]) [ATTACHMENTS];
rounding_corner_mask(r|d, [ang], [excess=], [style=]) [ATTACHMENTS];
rounding_cylinder_mask(r|d=, rounding);
rounding_hole_mask(r|d, rounding, [excess]) [ATTACHMENTS];
Section: Teardrop Masking
teardrop_edge_mask(l|h=|length=|height=, r|d=, [angle], [excess], [anchor], [spin], [orient]) [ATTACHMENTS];
teardrop_corner_mask(r|d=, [angle], [excess], [anchor], [spin], [orient]) [ATTACHMENTS];
LibFile: distributors.scad
Section: Translating copies of all the children
move_copies(a) CHILDREN;
copies = move_copies(a, p=);
mats = move_copies(a);
xcopies(spacing, [n], [sp=]) CHILDREN;
xcopies(l=, [n=], [sp=]) CHILDREN;
xcopies(LIST) CHILDREN;
copies = xcopies(spacing, [n], [sp=], p=);
copies = xcopies(l=, [n=], [sp=], p=);
copies = xcopies(LIST, p=);
mats = xcopies(spacing, [n], [sp=]);
mats = xcopies(l=, [n=], [sp=]);
mats = xcopies(LIST);
ycopies(spacing, [n], [sp=]) CHILDREN;
ycopies(l=, [n=], [sp=]) CHILDREN;
ycopies(LIST) CHILDREN;
copies = ycopies(spacing, [n], [sp=], p=);
copies = ycopies(l=, [n=], [sp=], p=);
copies = ycopies(LIST, p=);
mats = ycopies(spacing, [n], [sp=]);
mats = ycopies(l=, [n=], [sp=]);
mats = ycopies(LIST);
zcopies(spacing, [n], [sp=]) CHILDREN;
zcopies(l=, [n=], [sp=]) CHILDREN;
zcopies(LIST) CHILDREN;
copies = zcopies(spacing, [n], [sp=], p=);
copies = zcopies(l=, [n=], [sp=], p=);
copies = zcopies(LIST, p=);
mats = zcopies(spacing, [n], [sp=]);
mats = zcopies(l=, [n=], [sp=]);
mats = zcopies(LIST);
line_copies(spacing, [n], [p1=]) CHILDREN;
line_copies(spacing, [l=], [p1=]) CHILDREN;
line_copies([n=], [l=], [p1=]) CHILDREN;
line_copies([n=], [p1=], [p2=]) CHILDREN;
line_copies([spacing], [p1=], [p2=]) CHILDREN;
copies = line_copies([spacing], [n], [p1=], p=);
copies = line_copies([spacing], [l=], [p1=], p=);
copies = line_copies([n=], [l=], [p1=], p=);
copies = line_copies([n=], [p1=], [p2=], p=);
copies = line_copies([spacing], [p1=], [p2=], p=);
mats = line_copies([spacing], [n], [p1=]);
mats = line_copies([spacing], [l=], [p1=]);
mats = line_copies([n=], [l=], [p1=]);
mats = line_copies([n=], [p1=], [p2=]);
mats = line_copies([spacing], [p1=], [p2=]);
grid_copies(spacing, size=, [stagger=], [scale=], [inside=]) CHILDREN;
grid_copies(n=, size=, [stagger=], [scale=], [inside=]) CHILDREN;
grid_copies(spacing, [n], [stagger=], [scale=], [inside=]) CHILDREN;
grid_copies(n=, inside=, [stagger], [scale]) CHILDREN;
copies = grid_copies(spacing, size=, [stagger=], [scale=], [inside=], p=);
copies = grid_copies(n=, size=, [stagger=], [scale=], [inside=], p=);
copies = grid_copies(spacing, [n], [stagger=], [scale=], [inside=], p=);
copies = grid_copies(n=, inside=, [stagger], [scale], p=);
mats = grid_copies(spacing, size=, [stagger=], [scale=], [inside=]);
mats = grid_copies(n=, size=, [stagger=], [scale=], [inside=]);
mats = grid_copies(spacing, [n], [stagger=], [scale=], [inside=]);
mats = grid_copies(n=, inside=, [stagger], [scale]);
Section: Rotating copies of all children
rot_copies(rots, [cp=], [sa=], [delta=], [subrot=]) CHILDREN;
rot_copies(rots, v, [cp=], [sa=], [delta=], [subrot=]) CHILDREN;
rot_copies(n=, [v=], [cp=], [sa=], [delta=], [subrot=]) CHILDREN;
copies = rot_copies(rots, [cp=], [sa=], [delta=], [subrot=], p=);
copies = rot_copies(rots, v, [cp=], [sa=], [delta=], [subrot=], p=);
copies = rot_copies(n=, [v=], [cp=], [sa=], [delta=], [subrot=], p=);
mats = rot_copies(rots, [cp=], [sa=], [delta=], [subrot=]);
mats = rot_copies(rots, v, [cp=], [sa=], [delta=], [subrot=]);
mats = rot_copies(n=, [v=], [cp=], [sa=], [delta=], [subrot=]);
xrot_copies(rots, [cp], [r=|d=], [sa=], [subrot=]) CHILDREN;
xrot_copies(n=, [cp=], [r=|d=], [sa=], [subrot=]) CHILDREN;
copies = xrot_copies(rots, [cp], [r=|d=], [sa=], [subrot=], p=);
copies = xrot_copies(n=, [cp=], [r=|d=], [sa=], [subrot=], p=);
mats = xrot_copies(rots, [cp], [r=|d=], [sa=], [subrot=]);
mats = xrot_copies(n=, [cp=], [r=|d=], [sa=], [subrot=]);
yrot_copies(rots, [cp], [r=|d=], [sa=], [subrot=]) CHILDREN;
yrot_copies(n=, [cp=], [r=|d=], [sa=], [subrot=]) CHILDREN;
copies = yrot_copies(rots, [cp], [r=|d=], [sa=], [subrot=], p=);
copies = yrot_copies(n=, [cp=], [r=|d=], [sa=], [subrot=], p=);
mats = yrot_copies(rots, [cp], [r=|d=], [sa=], [subrot=]);
mats = yrot_copies(n=, [cp=], [r=|d=], [sa=], [subrot=]);
zrot_copies(rots, [cp], [r=|d=], [sa=], [subrot=]) CHILDREN;
zrot_copies(n=, [cp=], [r=|d=], [sa=], [subrot=]) CHILDREN;
copies = zrot_copies(rots, [cp], [r=|d=], [sa=], [subrot=], p=);
copies = zrot_copies(n=, [cp=], [r=|d=], [sa=], [subrot=], p=);
mats = zrot_copies(rots, [cp], [r=|d=], [sa=], [subrot=]);
mats = zrot_copies(n=, [cp=], [r=|d=], [sa=], [subrot=]);
arc_copies(n, r|d=, [sa=], [ea=], [rot=]) CHILDREN;
arc_copies(n, rx=|dx=, ry=|dy=, [sa=], [ea=], [rot=]) CHILDREN;
copies = arc_copies(n, r|d=, [sa=], [ea=], [rot=], p=);
copies = arc_copies(n, rx=|dx=, ry=|dy=, [sa=], [ea=], [rot=], p=);
mats = arc_copies(n, r|d=, [sa=], [ea=], [rot=]);
mats = arc_copies(n, rx=|dx=, ry=|dy=, [sa=], [ea=], [rot=]);
sphere_copies(n, r|d=, [cone_ang=], [scale=], [perp=]) CHILDREN;
copies = sphere_copies(n, r|d=, [cone_ang=], [scale=], [perp=], p=);
mats = sphere_copies(n, r|d=, [cone_ang=], [scale=], [perp=]);
Section: Placing copies of all children on a path
path_copies(path, [n], [spacing], [sp], [rotate_children], [closed=]) CHILDREN;
path_copies(path, dist=, [rotate_children=], [closed=]) CHILDREN;
copies = path_copies(path, [n], [spacing], [sp], [rotate_children], [closed=], p=);
copies = path_copies(path, dist=, [rotate_children=], [closed=], p=);
mats = path_copies(path, [n], [spacing], [sp], [rotate_children], [closed=]);
mats = path_copies(path, dist=, [rotate_children=], [closed=]);
Section: Making a copy of all children with reflection
xflip_copy([offset], [x]) CHILDREN;
copies = xflip_copy([offset], [x], p=);
mats = xflip_copy([offset], [x]);
yflip_copy([offset], [y]) CHILDREN;
copies = yflip_copy([offset], [y], p=);
mats = yflip_copy([offset], [y]);
zflip_copy([offset], [z]) CHILDREN;
copies = zflip_copy([offset], [z], p=);
mats = zflip_copy([offset], [z]);
mirror_copy(v, [cp], [offset]) CHILDREN;
copies = mirror_copy(v, [cp], [offset], p=);
mats = mirror_copy(v, [cp], [offset]);
Section: Distributing children individually along a line
xdistribute(spacing, [sizes]) CHILDREN;
xdistribute(l=, [sizes=]) CHILDREN;
ydistribute(spacing, [sizes]) CHILDREN;
ydistribute(l=, [sizes=]) CHILDREN;
zdistribute(spacing, [sizes]) CHILDREN;
zdistribute(l=, [sizes=]) CHILDREN;
distribute(spacing, sizes, dir) CHILDREN;
distribute(l=, [sizes=], [dir=]) CHILDREN;
LibFile: color.scad
Section: Coloring Objects
recolor([c]) CHILDREN;
color_this([c]) CHILDREN;
rainbow(list,[stride],[maxhues],[shuffle],[seed]) CHILDREN;
color_overlaps([color]) CHILDREN;
Section: Setting Object Modifiers
highlight_this() CHILDREN;
ghost_this() CHILDREN;
Section: Colorspace Conversion
LibFile: partitions.scad
Section: Planar Cutting
half_of(v, [cp], [s], [planar]) CHILDREN;
result = half_of(p,v,[cp]);
left_half([s], [x]) CHILDREN;
left_half(planar=true, [s], [x]) CHILDREN;
result = left_half(p, [x]);
right_half([s=], [x=]) CHILDREN;
right_half(planar=true, [s=], [x=]) CHILDREN;
result = right_half(p, [x=]);
front_half([s], [y]) CHILDREN;
front_half(planar=true, [s], [y]) CHILDREN;
result = front_half(p, [y]);
back_half([s], [y]) CHILDREN;
back_half(planar=true, [s], [y]) CHILDREN;
result = back_half(p, [y]);
bottom_half([s], [z]) CHILDREN;
result = bottom_half(p, [z]);
Section: Partioning into Interlocking Pieces
partition_mask(l, w, h, [cutsize], [cutpath], [gap], [inverse], [$slop=], [anchor=], [spin=], [orient=]) [ATTACHMENTS];
partition_cut_mask(l, [cutsize], [cutpath], [gap], [inverse], [$slop=], [anchor=], [spin=], [orient=]) [ATTACHMENTS];
partition(size, [spread], [cutsize], [cutpath], [gap], [spin], [$slop=]) CHILDREN;
LibFile: miscellaneous.scad
Section: Extrusion
extrude_from_to(pt1, pt2, [convexity=], [twist=], [scale=], [slices=]) 2D-CHILDREN;
path_extrude2d(path, [caps=], [closed=], [s=], [convexity=]) 2D-CHILDREN;
path_extrude(path, [convexity], [clipsize]) 2D-CHILDREN;
cylindrical_extrude(ir|id=, or|od=, [size=], [convexity=], [spin=], [orient=]) 2D-CHILDREN;
Section: Bounding Box
bounding_box([excess],[planar]) CHILDREN;
Section: Hull Based Modules
chain_hull() CHILDREN;
Section: Minkowski and 3D Offset
minkowski_difference() { BASE; DIFF1; DIFF2; ... }
offset3d(r, [size], [convexity]) CHILDREN;
round3d(r) CHILDREN;
round3d(or) CHILDREN;
round3d(ir) CHILDREN;
round3d(or, ir) CHILDREN;
LibFile: paths.scad
Section: Utility Functions
is_path(list, [dim], [fast])
bool = is_1region(path, [name])
outpath = force_path(path, [name])
path_merge_collinear(path, [eps])
Section: Path length calculation
path_length(path,[closed])
path_segment_lengths(path,[closed])
fracs = path_length_fractions(path, [closed]);
Section: Resampling - changing the number of points in a path
newpath = subdivide_path(path, n|refine=|maxlen=, [method=], [closed=], [exact=]);
newpath = resample_path(path, n|spacing=, [closed=]);
Section: Path Geometry
bool = is_path_simple(path, [closed], [eps]);
index_pt = path_closest_point(path, pt);
tangs = path_tangents(path, [closed], [uniform]);
norms = path_normals(path, [tangents], [closed]);
curvs = path_curvature(path, [closed]);
torsions = path_torsion(path, [closed]);
Section: Breaking paths up into subpaths
path_list = path_cut(path, cutdist, [closed]);
cuts = path_cut_points(path, cutdist, [closed=], [direction=]);
paths = split_path_at_self_crossings(path, [closed], [eps]);
splitpolys = polygon_parts(poly, [nonzero], [eps]);
LibFile: regions.scad
Section: Regions
bool = is_region(x);
bool = is_valid_region(region, [eps]);
bool = is_region_simple(region, [eps]);
region = make_region(polys, [nonzero], [eps]);
region = force_region(poly)
Section: Turning a region into geometry
region(r, [anchor], [spin=], [cp=], [atype=]) [ATTACHMENTS];
debug_region(region, [vertices=], [edges=], [convexity=], [size=]);
Section: Geometrical calculations with regions
check = point_in_region(point, region, [eps]);
area = region_area(region);
b = are_regions_equal(region1, region2, [either_winding])
Section: Breaking up regions into subregions
split_region = split_region_at_region_crossings(region1, region2, [closed1], [closed2], [eps])
rgns = region_parts(region);
Section: Offset and 2D Boolean Set Operations
offsetpath = offset(path, [r=|delta=], [chamfer=], [closed=], [check_valid=], [quality=], [same_length=])
path_faces = offset(path, return_faces=true, [r=|delta=], [chamfer=], [closed=], [check_valid=], [quality=], [firstface_index=], [flip_faces=])
union() CHILDREN;
region = union(regions);
region = union(REGION1,REGION2);
region = union(REGION1,REGION2,REGION3);
difference() CHILDREN;
region = difference(regions);
region = difference(REGION1,REGION2);
region = difference(REGION1,REGION2,REGION3);
intersection() CHILDREN;
region = intersection(regions);
region = intersection(REGION1,REGION2);
region = intersection(REGION1,REGION2,REGION3);
exclusive_or() CHILDREN;
region = exclusive_or(regions);
region = exclusive_or(REGION1,REGION2);
region = exclusive_or(REGION1,REGION2,REGION3);
path = hull_region(region);
hull_region(region);
LibFile: skin.scad
Section: Skin and sweep
skin(profiles, slices, [z=], [refine=], [method=], [sampling=], [caps=], [closed=], [style=], [convexity=], [anchor=],[cp=],[spin=],[orient=],[atype=]) [ATTACHMENTS];
vnf = skin(profiles, slices, [z=], [refine=], [method=], [sampling=], [caps=], [closed=], [style=], [anchor=],[cp=],[spin=],[orient=],[atype=]);
linear_sweep(region, [height], [center=], [slices=], [twist=], [scale=], [style=], [caps=], [convexity=]) [ATTACHMENTS];
linear_sweep(region, [height], [center=], texture=, [tex_size=]|[tex_reps=], [tex_depth=], [style=], [tex_samples=], ...) [ATTACHMENTS];
vnf = linear_sweep(region, [height], [center=], [slices=], [twist=], [scale=], [style=], [caps=]);
vnf = linear_sweep(region, [height], [center=], texture=, [tex_size=]|[tex_reps=], [tex_depth=], [style=], [tex_samples=], ...);
vnf = rotate_sweep(shape, [angle], ...);
rotate_sweep(shape, [angle], ...) [ATTACHMENTS];
rotate_sweep(shape, texture=, [tex_size=]|[tex_reps=], [tex_depth=], [tex_samples=], [tex_rot=], [tex_inset=], ...) [ATTACHMENTS];
spiral_sweep(poly, h, r|d=, turns, [taper=], [center=], [taper1=], [taper2=], [internal=], ...)[ATTACHMENTS];
spiral_sweep(poly, h, r1=|d1=, r2=|d2=, turns, [taper=], [center=], [taper1=], [taper2=], [internal=], ...)[ATTACHMENTS];
vnf = spiral_sweep(poly, h, r|d=, turns, ...);
vnf = spiral_sweep(poly, h, r1=|d1=, r1=|d2=, turns, ...);
path_sweep(shape, path, [method], [normal=], [closed=], [twist=], [twist_by_length=], [symmetry=], [scale=], [scale_by_length=], [last_normal=], [tangent=], [uniform=], [relaxed=], [caps=], [style=], [convexity=], [anchor=], [cp=], [spin=], [orient=], [atype=]) [ATTACHMENTS];
vnf = path_sweep(shape, path, [method], [normal=], [closed=], [twist=], [twist_by_length=], [symmetry=], [scale=], [scale_by_length=], [last_normal=], [tangent=], [uniform=], [relaxed=], [caps=], [style=], [transforms=], [anchor=], [cp=], [spin=], [orient=], [atype=]);
path_sweep2d(shape, path, [closed], [caps], [quality], [style], [convexity=], [anchor=], [spin=], [orient=], [atype=], [cp=]) [ATTACHMENTS];
vnf = path_sweep2d(shape, path, [closed], [caps], [quality], [style], [anchor=], [spin=], [orient=], [atype=], [cp=]);
sweep(shape, transforms, [closed], [caps], [style], [convexity=], [anchor=], [spin=], [orient=], [atype=]) [ATTACHMENTS];
vnf = sweep(shape, transforms, [closed], [caps], [style], [anchor=], [spin=], [orient=], [atype=]);
Section: Attaching children to sweeps
path_sweep(...) { sweep_attach(parent, [child], [frac], [idx=], [len=], [spin=], [overlap=], [atype=]) CHILDREN; }
sweep(...) { sweep_attach(parent, [child], [frac], [idx=], [len=], [spin=], [overlap=], [atype=]) CHILDREN; }
Section: Functions for resampling and slicing profile lists
newprof = subdivide_and_slice(profiles, slices, [numpoints], [method], [closed]);
profs = slice_profiles(profiles, slices, [closed]);
rlist = rot_resample(rotlist, n, [method=], [twist=], [scale=], [smoothlen=], [long=], [turns=], [closed=])
newpoly = associate_vertices(polygons, split);
Section: Texturing
tx = texture(tex, [n=], [inset=], [gap=], [roughness=]);
LibFile: vnf.scad
Section: Creating Polyhedrons with VNF Structures
vnf = vnf_vertex_array(points, [caps=], [cap1=], [cap2=], [style=], [reverse=], [col_wrap=], [row_wrap=], [triangulate=]);
vnf = vnf_tri_array(points, [caps=], [cap1=], [cap2=], [reverse=], [col_wrap=], [row_wrap=])
vnf = vnf_join([VNF, VNF, VNF, ...]);
vnf = vnf_from_polygons(polygons, [eps]);
vnf = vnf_from_region(region, [transform], [reverse]);
Section: VNF Testing and Access
bool = is_vnf(x);
Section: Altering the VNF Internals
rvnf = vnf_reverse_faces(vnf);
vnf2 = vnf_quantize(vnf,[q]);
new_vnf = vnf_merge_points(vnf, [eps]);
clean_vnf = vnf_drop_unused_points(vnf);
vnf2 = vnf_triangulate(vnf);
newvnf = vnf_unify_faces(vnf);
sliced = vnf_slice(vnf, dir, cuts);
Section: Turning a VNF into geometry
vnf_polyhedron(vnf) [ATTACHMENTS];
vnf_polyhedron([VNF, VNF, VNF, ...]) [ATTACHMENTS];
vnf_wireframe(vnf, [width]);
Section: Operations on VNFs
vol = vnf_volume(vnf);
area = vnf_area(vnf);
region = projection(vnf, [cut]);
newvnf = vnf_halfspace(plane, vnf, [closed], [boundary]);
bentvnf = vnf_bend(vnf,r|d=,[axis=]);
vnf_hull = hull_vnf(vnf);
hull_vnf(vnf,[fast]);
boundary = vnf_boundary(vnf, [merge=], [idx=]);
newvnf = vnf(vnf, delta, [merge=]);
newvnf = vnf_sheet(vnf, thickness, [style=], [merge=]);
Section: Debugging Polyhedrons
debug_vnf(vnfs, [faces=], [vertices=], [opacity=], [size=], [convexity=], [filter=]);
vnf_validate(vnf, [size], [show_warns=], [check_isects=], [opacity=], [adjacent=], [label_verts=], [label_faces=], [wireframe=]);
LibFile: beziers.scad
Section: Bezier Curves
pt = bezier_points(bezier, u);
ptlist = bezier_points(bezier, RANGE);
ptlist = bezier_points(bezier, LIST);
path = bezier_curve(bezier, [splinesteps], [endpoint]);
deriv = bezier_derivative(bezier, u, [order]);
derivs = bezier_derivative(bezier, LIST, [order]);
derivs = bezier_derivative(bezier, RANGE, [order]);
tanvec = bezier_tangent(bezier, u);
tanvecs = bezier_tangent(bezier, LIST);
tanvecs = bezier_tangent(bezier, RANGE);
crv = bezier_curvature(curve, u);
crvlist = bezier_curvature(curve, LIST);
crvlist = bezier_curvature(curve, RANGE);
u = bezier_closest_point(bezier, pt, [max_err]);
pathlen = bezier_length(bezier, [start_u], [end_u], [max_deflect]);
u = bezier_line_intersection(bezier, line);
Section: Bezier Path Functions
pt = bezpath_points(bezpath, curveind, u, [N]);
ptlist = bezpath_points(bezpath, curveind, LIST, [N]);
path = bezpath_points(bezpath, curveind, RANGE, [N]);
path = bezpath_curve(bezpath, [splinesteps], [N], [endpoint])
res = bezpath_closest_point(bezpath, pt, [N], [max_err]);
plen = bezpath_length(path, [N], [max_deflect]);
bezpath = path_to_bezpath(path, [closed], [tangents], [uniform], [size=]|[relsize=]);
bezpath = bezpath_close_to_axis(bezpath, [axis], [N]);
bezpath = bezpath_offset(offset, bezier, [N]);
Section: Cubic Bezier Path Construction
pts = bez_begin(pt, a, r, [p=]);
pts = bez_begin(pt, VECTOR, [r], [p=]);
pts = bez_tang(pt, a, r1, r2, [p=]);
pts = bez_tang(pt, VECTOR, [r1], [r2], [p=]);
pts = bez_joint(pt, a1, a2, r1, r2, [p1=], [p2=]);
pts = bez_joint(pt, VEC1, VEC2, [r1=], [r2=], [p1=], [p2=]);
pts = bez_end(pt, a, r, [p=]);
pts = bez_end(pt, VECTOR, [r], [p=]);
Section: Bezier Surfaces
bool = is_bezier_patch(x);
patch = bezier_patch_flat(size, [N=], [spin=], [orient=], [trans=]);
rpatch = bezier_patch_reverse(patch);
pt = bezier_patch_points(patch, u, v);
ptgrid = bezier_patch_points(patch, LIST, LIST);
ptgrid = bezier_patch_points(patch, RANGE, RANGE);
vnf = bezier_vnf(patches, [splinesteps], [style]);
vnf = bezier_vnf_degenerate_patch(patch, [splinesteps], [reverse]);
vnf_edges = bezier_vnf_degenerate_patch(patch, [splinesteps], [reverse], return_edges=true);
n = bezier_patch_normals(patch, u, v);
ngrid = bezier_patch_normals(patch, LIST, LIST);
ngrid = bezier_patch_normals(patch, RANGE, RANGE);
Section: Debugging Beziers
debug_bezier(bez, [size], [N=]);
debug_bezier_patches(patches, [size=], [splinesteps=], [showcps=], [showdots=], [showpatch=], [convexity=], [style=]);
LibFile: nurbs.scad
Section: NURBS Curves
pts = nurbs_curve(control, degree, splinesteps, [mult=], [weights=], [type=], [knots=]);
pts = nurbs_curve(control, degree, u=, [mult=], [weights=], [type=], [knots=]);
debug_nurbs(control, degree, [width], [splinesteps=], [type=], [mult=], [knots=], [size=], [show_weights=], [show_knots=], [show_idx=]);
Section: NURBS Surfaces
bool = is_nurbs_patch(x);
pointgrid = nurbs_patch_points(patch, degree, [splinesteps], [u=], [v=], [weights=], [type=], [mult=], [knots=]);
vnf = nurbs_vnf(patch, degree, [splinesteps], [mult=], [knots=], [weights=], [type=], [style=]);
LibFile: rounding.scad
Section: Rounding Paths
rounded_path = round_corners(path, [method], [radius=], [cut=], [joint=], [closed=], [verbose=]);
smoothed = smooth_path(path, [tangents], [size=|relsize=], [splinesteps=], [closed=], [uniform=]);
joined_path = path_join(paths, [joint], [k=], [relocate=], [closed=]);
offset_stroke(path, [width], [rounded=], [chamfer=], [start=], [end=], [check_valid=], [quality=], [closed=],...) [ATTACHMENTS];
path = offset_stroke(path, [width], closed=false, [rounded=], [chamfer=], [start=], [end=], [check_valid=], [quality=],...);
region = offset_stroke(path, [width], closed=true, [rounded=], [chamfer=], [start=], [end=], [check_valid=], [quality=],...);
Section: Three-Dimensional Rounding
offset_sweep(path, [height|length=|h=|l=], [bottom], [top], [offset=], [convexity=],...) [ATTACHMENTS];
vnf = offset_sweep(path, [height|length=|h=|l=], [bottom], [top], [offset=], ...);
convex_offset_extrude(height, [bottom], [top], ...) 2D-CHILDREN;
rounded_prism(bottom, [top], [height=|h=|length=|l=], [joint_top=], [joint_bot=], [joint_sides=], [k=], [k_top=], [k_bot=], [k_sides=], [splinesteps=], [debug=], [convexity=],...) [ATTACHMENTS];
vnf = rounded_prism(bottom, [top], [height=|h=|length=|l=], [joint_top=], [joint_bot=], [joint_sides=], [k=], [k_top=], [k_bot=], [k_sides=], [splinesteps=], [debug=]);
bent_cutout_mask(r|radius, thickness, path);
join_prism(polygon, base, length=|height=|l=|h=, fillet=, [base_T=], [scale=], [prism_end_T=], [short=], ...) [ATTACHMENTS];
join_prism(polygon, base, aux=, fillet=, [base_T=], [aux_T=], [scale=], [prism_end_T=], [short=], ...) [ATTACHMENTS];
vnf = join_prism( ... );
LibFile: turtle3d.scad
Section: Functions
path = turtle3d(commands, [state=], [repeat=]);
mats = turtle3d(commands, transforms=true, [state=], [repeat=]);
state = turtle3d(commands, full_state=true, [state=], [repeat=]);
LibFile: math.scad
Section: Math Constants
Constants: PHI
EPSILON
INF
NAN
Section: Interpolation and Counting
list = count(n, [s], [step], [reverse]);
Section: Miscellaneous Functions
x2 = sqr(x);
val = log2(x);
l = hypot(x, y, [z]);
x = factorial(n, [d]);
x = binomial(n);
x = binomial_coefficient(n, k);
x = gcd(a,b)
Section: Hyperbolic Trigonometry
a = sinh(x);
a = cosh(x);
a = tanh(x);
a = asinh(x);
a = acosh(x);
a = atanh(x);
Section: Quantization
num = quant(x, y);
num = quantdn(x, y);
num = quantup(x, y);
Section: Constraints and Modulos
val = constrain(v, minval, maxval);
mod = posmod(x, m)
ang = modang(x);
Section: Operations on Lists (Sums, Mean, Products)
x = sum(v, [dflt]);
x = mean(v);
middle = median(v)
delts = deltas(v,[wrap]);
sums = cumsum(v);
x = product(v);
prod_list = cumprod(list, [right]);
x = convolve(p,q);
sum_of_sines(a,sines)
Section: Random Number Generation
rand_int(minval, maxval, n, [seed]);
points = random_points(n, dim, [scale], [seed]);
arr = gaussian_rands([n],[mean], [cov], [seed]);
arr = exponential_rands([n], [lambda], [seed])
points = spherical_random_points([n], [radius], [seed]);
points = random_polygon([n], [size], [seed]);
Section: Calculus
x = deriv(data, [h], [closed])
x = deriv2(data, [h], [closed])
x = deriv3(data, [h], [closed])
Section: Complex Numbers
z = complex(list)
c = c_mul(z1,z2)
x = c_div(z1,z2)
w = c_conj(z)
x = c_real(z)
x = c_imag(z)
I = c_ident(n)
n = c_norm(z)
Section: Polynomials
roots = quadratic_roots(a, b, c, [real])
x = polynomial(p, z)
x = polymult(p,q)
x = polymult([p1,p2,p3,...])
[quotient,remainder] = poly_div(n,d)
sum = poly_add(p,q)
roots = poly_roots(p, [tol]);
roots = real_roots(p, [eps], [tol])
Section: Operations on Functions
x = root_find(f, x0, x1, [tol])
LibFile: linalg.scad
Section: Matrix testing and display
test = is_matrix(A, [m], [n], [square])
b = is_matrix_symmetric(A, [eps])
b = is_rotation(A, [dim], [centered])
echo_matrix(M, [description], [sig], [sep], [eps]);
dummy = echo_matrix(M, [description], [sig], [sep], [eps]),
Section: Matrix indexing
list = column(M, i);
mat = submatrix(M, idx1, idx2);
Section: Matrix construction and modification
mat = ident(n);
mat = diagonal_matrix(diag, [offdiag]);
M = transpose(M, [reverse]);
x = outer_product(u,v);
M = outer_product(u,v);
mat = submatrix_set(M, A, [m], [n]);
A = hstack(M1, M2)
A = hstack(M1, M2, M3)
A = hstack([M1, M2, M3, ...])
bmat = block_matrix([[M11, M12,...],[M21, M22,...], ... ]);
Section: Solving Linear Equations and Matrix Factorizations
solv = linear_solve(A,b,[pivot])
x = linear_solve3(A,b)
mat = matrix_inverse(A)
B = rot_inverse(A)
x = null_space(A)
qr = qr_factor(A,[pivot]);
x = back_substitute(R, b, [transpose]);
L = cholesky(A);
Section: Matrix Properties: Determinants, Norm, Trace
d = det2(M);
d = det3(M);
d = det4(M);
d = determinant(M);
norm_fro(A)
matrix_trace(M)
LibFile: vectors.scad
Section: Vector Testing
bool = is_vector(v, [length], [zero=], [all_nonzero=], [eps=]);
Section: Scalar operations on vectors
v_new = add_scalar(v, s);
v3 = v_mul(v1, v2);
v3 = v_div(v1, v2);
v2 = v_abs(v);
v2 = v_floor(v);
v2 = v_ceil(v);
v2 = v_lookup(x, v);
Section: Vector Properties
v = unit(v, [error]);
theta = v_theta([X,Y]);
ang = vector_angle(v1,v2);
ang = vector_angle([v1,v2]);
ang = vector_angle(PT1,PT2,PT3);
ang = vector_angle([PT1,PT2,PT3]);
axis = vector_axis(v1,v2);
axis = vector_axis([v1,v2]);
axis = vector_axis(PT1,PT2,PT3);
axis = vector_axis([PT1,PT2,PT3]);
newv = vector_bisect(v1,v2);
perp = vector_perp(v,w);
Section: Vector Searching
pt_pair = pointlist_bounds(pts);
index = closest_point(pt, points);
index = furthest_point(pt, points);
indices = vector_search(query, r, target);
tree = vector_search_tree(points,leafsize);
indices = vector_nearest(query, k, target);
LibFile: coords.scad
Section: Coordinate Manipulation
pt = point2d(p, [fill]);
pts = path2d(points);
pt = point3d(p, [fill]);
pts = path3d(points, [fill]);
pt = point4d(p, [fill]);
pt = path4d(points, [fill]);
Section: Coordinate Systems
pt = polar_to_xy(r, theta);
pt = polar_to_xy([R, THETA]);
pts = polar_to_xy([[R,THETA], [R,THETA], ...]);
r_theta = xy_to_polar(x,y);
r_theta = xy_to_polar([X,Y]);
r_thetas = xy_to_polar([[X,Y], [X,Y], ...]);
xy = project_plane(plane, p);
M = project_plane(plane)
xyz = lift_plane(plane, p);
M = lift_plane(plane);
pt = cylindrical_to_xyz(r, theta, z);
pt = cylindrical_to_xyz([RADIUS,THETA,Z]);
pts = cylindrical_to_xyz([[RADIUS,THETA,Z], [RADIUS,THETA,Z], ...]);
rtz = xyz_to_cylindrical(x,y,z);
rtz = xyz_to_cylindrical([X,Y,Z]);
rtzs = xyz_to_cylindrical([[X,Y,Z], [X,Y,Z], ...]);
pt = spherical_to_xyz(r, theta, phi);
pt = spherical_to_xyz([RADIUS,THETA,PHI]);
pts = spherical_to_xyz([[RADIUS,THETA,PHI], [RADIUS,THETA,PHI], ...]);
r_theta_phi = xyz_to_spherical(x,y,z)
r_theta_phi = xyz_to_spherical([X,Y,Z])
r_theta_phis = xyz_to_spherical([[X,Y,Z], [X,Y,Z], ...])
pt = altaz_to_xyz(alt, az, r);
pt = altaz_to_xyz([ALT,AZ,R]);
pts = altaz_to_xyz([[ALT,AZ,R], [ALT,AZ,R], ...]);
alt_az_r = xyz_to_altaz(x,y,z);
alt_az_r = xyz_to_altaz([X,Y,Z]);
alt_az_rs = xyz_to_altaz([[X,Y,Z], [X,Y,Z], ...]);
LibFile: geometry.scad
Section: Lines, Rays, and Segments
pt = is_point_on_line(point, line, [bounded], [eps]);
bool = is_collinear(a, [b, c], [eps]);
dist = point_line_distance(pt, line, [bounded]);
dist = segment_distance(seg1, seg2, [eps]);
vec = line_normal([P1,P2])
vec = line_normal(p1,p2)
pt = line_intersection(line1, line2, [bounded1], [bounded2], [bounded=], [eps=]);
pt = line_closest_point(line, pt, [bounded]);
line = line_from_points(points, [fast], [eps]);
Section: Planes
bool = is_coplanar(points,[eps]);
plane = plane3pt(p1, p2, p3);
plane = plane3pt([p1, p2, p3]);
plane = plane3pt_indexed(points, i1, i2, i3);
plane = plane_from_normal(normal, [pt])
plane = plane_from_points(points, [fast], [eps]);
plane = plane_from_polygon(points, [fast], [eps]);
vec = plane_normal(plane);
d = plane_offset(plane);
pt = plane_line_intersection(plane, line, [bounded], [eps]);
line = plane_intersection(plane1, plane2)
pt = plane_intersection(plane1, plane2, plane3)
angle = plane_line_angle(plane,line);
pts = plane_closest_point(plane, points);
dist = point_plane_distance(plane, point)
bool = are_points_on_plane(points, plane, [eps]);
Section: Circle Calculations
pts = circle_line_intersection(r|d=, cp, line, [bounded], [eps=]);
pts = circle_circle_intersection(r1|d1=, cp1, r2|d2=, cp2, [eps]);
circ = circle_2tangents(r|d=, pt1, pt2, pt3, [tangents=]);
circ = circle_2tangents(r|d=, [PT1, PT2, PT3], [tangents=]);
circ = circle_3points(pt1, pt2, pt3);
circ = circle_3points([PT1, PT2, PT3]);
tangents = circle_point_tangents(r|d=, cp, pt);
segs = circle_circle_tangents(r1|d1=, cp1, r2|d2=, cp2);
Section: Sphere Calculations
isect = sphere_line_intersection(r|d=, cp, line, [bounded], [eps=]);
Section: Polygons
area = polygon_area(poly, [signed]);
c = centroid(object, [eps]);
vec = polygon_normal(poly);
bool = point_in_polygon(point, poly, [nonzero], [eps])
pt = polygon_line_intersection(poly, line, [bounded], [nonzero], [eps]);
triangles = polygon_triangulate(poly, [ind], [error], [eps])
bool = is_polygon_clockwise(poly);
newpoly = clockwise_polygon(poly);
newpoly = ccw_polygon(poly);
newpoly = reverse_polygon(poly)
newpoly = reindex_polygon(reference, poly);
newpoly = align_polygon(reference, poly, [angles], [cp], [tran], [return_ind]);
bool = are_polygons_equal(poly1, poly2, [eps])
Section: Convex Hull
face_list_or_index_list = hull(points);
hull_points(points, [fast]);
index_list = hull2d_path(points,all)
faces = hull3d_faces(points)
Section: Convex Sets
bool = is_polygon_convex(poly, [eps]);
dist = convex_distance(points1, points2,eps);
bool = convex_collision(points1, points2, [eps]);
Section: Rotation Decoding
info = rot_decode(rotation,[long]); // Returns: [angle,axis,cp,translation]
LibFile: trigonometry.scad
Section: 2D General Triangle Functions
C = law_of_cosines(a, b, c);
c = law_of_cosines(a, b, C=);
B = law_of_sines(a, A, b);
b = law_of_sines(a, A, B=);
Section: 2D Right Triangle Functions
adj = hyp_opp_to_adj(hyp,opp);
adj = opp_hyp_to_adj(opp,hyp);
adj = hyp_ang_to_adj(hyp,ang);
adj = ang_hyp_to_adj(ang,hyp);
adj = opp_ang_to_adj(opp,ang);
adj = ang_opp_to_adj(ang,opp);
opp = hyp_adj_to_opp(hyp,adj);
opp = adj_hyp_to_opp(adj,hyp);
opp = hyp_ang_to_opp(hyp,ang);
opp = ang_hyp_to_opp(ang,hyp);
opp = adj_ang_to_opp(adj,ang);
opp = ang_adj_to_opp(ang,adj);
hyp = adj_opp_to_hyp(adj,opp);
hyp = opp_adj_to_hyp(opp,adj);
hyp = adj_ang_to_hyp(adj,ang);
hyp = ang_adj_to_hyp(ang,adj);
hyp = opp_ang_to_hyp(opp,ang);
hyp = ang_opp_to_hyp(ang,opp);
ang = hyp_adj_to_ang(hyp,adj);
ang = adj_hyp_to_ang(adj,hyp);
ang = hyp_opp_to_ang(hyp,opp);
ang = opp_hyp_to_ang(opp,hyp);
ang = adj_opp_to_ang(adj,opp);
ang = opp_adj_to_ang(opp,adj);
LibFile: version.scad
Section: BOSL Library Version Functions
ver = bosl_version();
ver = bosl_version_num();
ver = bosl_version_str();
bosl_required(version);
Section: Generic Version Functions
ver = version_to_list(x);
str = version_to_str(version);
str = version_to_num(version);
cmp = version_cmp(a,b);
LibFile: comparisons.scad
Section: List comparison operations
test = approx(a, b, [eps])
x = all_zero(x, [eps]);
test = all_nonzero(x, [eps]);
test = all_positive(x,[eps]);
test = all_negative(x, [eps]);
all_nonpositive(x, [eps]);
all_nonnegative(x, [eps]);
b = all_equal(vec, [eps]);
are_ends_equal(list, [eps]);
bool = is_increasing(list, [strict]);
bool = is_decreasing(list, [strict]);
test = compare_vals(a, b);
test = compare_lists(a, b)
Section: Finding the index of the minimum or maximum of a list
Section: Dealing with duplicate list entries
idx = find_approx(val, list, [start=], [eps=]);
indices = find_approx(val, list, all=true, [start=], [eps=]);
list = deduplicate(list, [closed], [eps]);
new_idxs = deduplicate_indexed(list, indices, [closed], [eps]);
list_wrap(path, [eps]);
list_unwrap(list, [eps]);
ulist = unique(list);
sorted_counts = unique_count(list);
Section: Sorting
slist = sort(list, [idx]);
idxlist = sortidx(list, [idx]);
ulist = group_sort(list,[idx]);
groupings = group_data(groups, values);
small = list_smallest(list, k)
LibFile: lists.scad
Section: List Query Operations
bool = is_homogeneous(list, [depth]);
llen = min_length(list);
llen = max_length(list);
dims = list_shape(v, [depth]);
bool = in_list(val, list, [idx]);
Section: List Indexing
item = select(list, start);
item = select(list, [s:d:e]);
item = select(list, [i0,i1...,ik]);
list = select(list, start, end);
list = slice(list, s, e);
item = last(list);
list = list_head(list, [to]);
list = list_tail(list, [from]);
sublist = bselect(list, index);
Section: List Construction
list = repeat(val, n);
arr = list_bset(indexset, valuelist, [dflt]);
list = force_list(value, [n], [fill]);
Section: List Modification
rlist = reverse(list);
rlist = list_rotate(list, [n]);
newlist = repeat_entries(list, N, [exact]);
newlist = list_pad(list, minlen, [fill]);
list = list_set(list, indices, values, [dflt], [minlen]);
list = list_insert(list, indices, values);
list = list_remove(list, ind);
list = list_remove_values(list, values, [all]);
Section: List Iteration Index Helper
range = idx(list, [s=], [e=], [step=]);
for(i=idx(list, [s=], [e=], [step=])) ...
Section: Lists of Subsets
p = pair(list, [wrap]);
for (p = pair(list, [wrap])) ... // On each iteration, p contains a list of two adjacent items.
list = triplet(list, [wrap]);
for (t = triplet(list, [wrap])) ...
list = combinations(l, [n]);
list = permutations(l, [n]);
Section: Changing List Structure
groups = list_to_matrix(v, cnt, [dflt]);
list = flatten(l);
list = full_flatten(l);
Section: Set Manipulation
s = set_union(a, b, [get_indices]);
s = set_difference(a, b);
s = set_intersection(a, b);
LibFile: utility.scad
Section: Type Checking
typ = typeof(x);
bool = is_type(x, types);
bool = is_def(x);
bool = is_str(x);
bool = all_integer(x);
bool = is_nan(x);
bool = is_finite(x);
bool = is_range(x);
bool = valid_range(x);
bool = is_func(x);
bool = is_consistent(list, [pattern]);
bool = same_shape(a,b);
check = is_bool_list(list,[length])
Section: Boolean list testing
bool = any(l);
bool = any(l, func); // Requires OpenSCAD 2021.01 or later.
bool = all(l);
bool = all(l, func); // Requires OpenSCAD 2021.01 or later.
seq = num_true(l);
seq = num_true(l, func); // Requires OpenSCAD 2021.01 or later.
Section: Handling undef
s.
val = default(val, dflt);
val = first_defined(v, [recursive]);
val = one_defined(vals, names, [dflt])
cnt = num_defined(v);
bool = any_defined(v, [recursive]);
bool = all_defined(v, [recursive]);
Section: Undef Safe Arithmetic
x = u_add(a, b);
x = u_sub(a, b);
x = u_mul(a, b);
x = u_div(a, b);
Section: Processing Arguments to Functions and Modules
anchr = get_anchor(anchor,center,[uncentered],[dflt]);
r = get_radius([r1=], [r2=], [r=], [d1=], [d2=], [d=], [dflt=]);
vec = scalar_vec3(v, [dflt]);
sides = segs(r);
no_children($children);
req_children($children);
dummy = no_function(name)
no_module();
deprecate(new_name);
Section: Testing Helpers
assert_approx(got, expected, [info]);
assert_equal(got, expected, [info]);
shape_compare([eps]) {TEST_SHAPE; EXPECTED_SHAPE;}
Section: C-Style For Loop Helpers
bool = looping(state);
state = loop_while(state, continue);
bool = loop_done(state);
LibFile: strings.scad
Section: Extracting substrings
newstr = substr(str, [pos], [len]);
newstr = suffix(str,len);
Section: String Searching
ind = str_find(str,pattern,[last=],[all=],[start=]);
bool = starts_with(str,pattern);
bool = ends_with(str,pattern);
string_list = str_split(str, sep, [keep_nulls]);
Section: String modification
str = str_join(list, [sep]);
str = str_strip(s,c,[start],[end]);
padded = str_pad(str, length, char, [left]);
newstr = str_replace_char(str, char, replace);
newstr = downcase(str);
newstr = upcase(str);
Section: Random strings
str = rand_str(n, [charset], [seed]);
Section: Parsing strings into numbers
num = parse_int(str, [base])
num = parse_float(str);
num = parse_frac(str,[mixed=],[improper=],[signed=]);
num = parse_num(str);
Section: Formatting numbers into strings
str = format_int(i, [mindigits]);
s = format_fixed(f, [digits]);
str = format_float(f,[sig]);
s = format(fmt, vals);
Section: Checking character class
x = is_lower(s);
x = is_upper(s);
x = is_digit(s);
x = is_hexdigit(s);
x = is_letter(s);
LibFile: structs.scad
Section: struct operations
struct2 = struct_set(struct, key, value, [grow=]);
struct2 = struct_set(struct, [key1, value1, key2, value2, ...], [grow=]);
struct2 = struct_remove(struct, key);
val = struct_val(struct, key, default);
keys = struct_keys(struct);
echo_struct(struct, [name]);
foo = echo_struct(struct, [name]);
bool = is_struct(struct);
LibFile: fnliterals.scad
Section: Function Literal Algorithms
lst = filter(func, list);
lst = filter(function (x) x>1, list);
res = reduce(func, list, [init]);
res = reduce(function (a,b) a+b, list, <init=);
res = accumulate(func, list, [init]);
res = accumulate(function (a,b) a+b, list, [init=]);
x = while(init, cond, func);
x = for_n(n, init, func);
indices = find_all(func, list);
indices = find_all(function (x) x>1, list);
idx = find_first(func, list, [start=]);
idx = binsearch(key,list, [cmp]);
hx = simple_hash(x);
hm = hashmap([hashsize=]);
hm = hashmap(items=KEYVAL_LIST, [hashsize=]);
hm2 = hm(key, val);
hm2 = hm(additems=KEYVAL_LIST);
hm2 = hm(del=KEY);
x = hm(key);
for (kv=hm()) let(k=kv[0], v=kv[1]) ...
Section: Function Meta-Generators
fn = f_1arg(func);
fn = f_2arg(target_func);
fn = f_2arg_simple(target_func);
fn = f_3arg(target_func);
newfunc = ival(func);
newfunc = xval(func);
Section: Comparator Generators
Section: Logic Operators
fn = f_or();
fn = f_or(a=);
fn = f_or(b=);
fn = f_or(a=,b=);
fn = f_and();
fn = f_and(a=);
fn = f_and(b=);
fn = f_and(a=,b=);
fn = f_nor();
fn = f_nor(a=);
fn = f_nor(b=);
fn = f_nor(a=,b=);
fn = f_nand();
fn = f_nand(a=);
fn = f_nand(b=);
fn = f_nand(a=,b=);
fn = f_xor();
fn = f_xor(a=);
fn = f_xor(b);
fn = f_xor(a=,b=);
Section: Math Operators
fn = f_add();
fn = f_add(a=);
fn = f_add(b);
fn = f_add(a=,b=);
fn = f_sub();
fn = f_sub(a=);
fn = f_sub(b);
fn = f_sub(a=,b=);
fn = f_mul();
fn = f_mul(a=);
fn = f_mul(b);
fn = f_mul(a=,b=);
fn = f_div();
fn = f_div(a=);
fn = f_div(b);
fn = f_div(a=,b=);
fn = f_mod();
fn = f_mod(a=);
fn = f_mod(b);
fn = f_mod(a=,b=);
fn = f_pow();
fn = f_pow(a=);
fn = f_pow(b);
fn = f_pow(a=,b=);
Section: Min/Max Operators
fn = f_min2();
fn = f_min2(a=);
fn = f_min2(b);
fn = f_min2(a=,b=);
fn = f_max2();
fn = f_max2(a=);
fn = f_max2(b);
fn = f_max2(a=,b=);
fn = f_min3();
fn = f_min3(a=);
fn = f_min3(b=);
fn = f_min3(c=);
fn = f_min3(a=,b=);
fn = f_min3(b=,c=);
fn = f_min3(a=,c=);
fn = f_min3(a=,b=,c=);
fn = f_max3();
fn = f_max3(a=);
fn = f_max3(b=);
fn = f_max3(c=);
fn = f_max3(a=,b=);
fn = f_max3(b=,c=);
fn = f_max3(a=,c=);
fn = f_max3(a=,b=,c=);
Section: Trigonometry Operators
fn = f_atan2();
fn = f_atan2(a=);
fn = f_atan2(b);
fn = f_atan2(a=,b=);
Section: String Operators
fn = f_str2();
fn = f_str2(a=);
fn = f_str2(b);
fn = f_str2(a=,b=);
fn = f_str3();
fn = f_str3(a=);
fn = f_str3(b=);
fn = f_str3(c=);
fn = f_str3(a=,b=);
fn = f_str3(b=,c=);
fn = f_str3(a=,c=);
fn = f_str3(a=,b=,c=);
Section: Miscellaneous Operators
fn = f_cross();
fn = f_cross(a=);
fn = f_cross(b);
fn = f_cross(a=,b=);
Section: Type Queries
fn = f_is_def();
fn = f_is_undef();
fn = f_is_bool();
fn = f_is_num();
fn = f_is_int();
fn = f_is_nan();
fn = f_is_finite();
fn = f_is_string();
fn = f_is_list();
fn = f_is_range();
fn = f_is_function();
fn = f_is_vector();
fn = f_is_path();
fn = f_is_region();
fn = f_is_vnf();
fn = f_is_patch();
LibFile: threading.scad
Section: Standard (UTS/ISO) Threading
threaded_rod(d, l|length, pitch, [internal=], ...) [ATTACHMENTS];
threaded_nut(nutwidth, id, h|height|thickness, pitch,...) [ATTACHMENTS];
Section: Trapezoidal Threading
trapezoidal_threaded_rod(d, l|length, pitch, [thread_angle=|flank_angle=], [thread_depth=], [internal=], ...) [ATTACHMENTS];
trapezoidal_threaded_nut(nutwidth, id, h|height|thickness, pitch, [thread_angle=|flank_angle=], [thread_depth], ...) [ATTACHMENTS];
acme_threaded_rod(d, l|length, tpi|pitch=, [internal=], ...) [ATTACHMENTS];
acme_threaded_nut(nutwidth, id, h|height|thickness, tpi|pitch=, [shape=], ...) [ATTACHMENTS];
Section: Pipe Threading
npt_threaded_rod(size, [internal=], ...) [ATTACHMENTS];
Section: Buttress Threading
buttress_threaded_rod(d, l|length, pitch, [internal=], ...) [ATTACHMENTS];
buttress_threaded_nut(nutwidth, id, h|height|thickness, pitch, ...) [ATTACHMENTS];
Section: Square Threading
square_threaded_rod(d, l|length, pitch, [internal=], ...) [ATTACHMENTS];
square_threaded_nut(nutwidth, id, h|height|thickness, pitch, ...) [ATTACHMENTS];
Section: Ball Screws
ball_screw_rod(d, l|length, pitch, [ball_diam], [ball_arc], [internal=], ...) [ATTACHMENTS];
Section: Generic Threading
generic_threaded_rod(d, l|length, pitch, profile, [internal=], ...) [ATTACHMENTS];
generic_threaded_nut(nutwidth, id, h|height|thickness, pitch, profile, [$slop], ...) [ATTACHMENTS];
thread_helix(d, pitch, turns=, [thread_depth=], [thread_angle=|flank_angle=], [profile=], [starts=], [internal=], ...) {ATTACHMENTS};
thread_helix(d1=,d2=, pitch=, turns=, [thread_depth=], [thread_angle=|flank_angle=], [profile=], [starts=], [internal=], ...) {ATTACHMENTS};
LibFile: screws.scad
Section: Making Screws
screw([spec], [head], [drive], [thread=], [drive_size=], [length=|l=], [thread_len=], [undersize=], [shaft_undersize=], [head_undersize=], [tolerance=], [blunt_start=], [details=], [anchor=], [atype=], [orient=], [spin=]) [ATTACHMENTS];
screw_hole([spec], [head], [thread=], [length=|l=], [oversize=], [hole_oversize=], [teardrop=], [head_oversize], [tolerance=], [$slop=], [blunt_start=], [anchor=], [atype=], [orient=], [spin=]) [ATTACHMENTS];
shoulder_screw(s, d, length, [head=], [thread_len=], [tolerance=], [head_size=], [drive=], [drive_size=], [thread=], [undersize=], [shaft_undersize=], [head_undersize=], [shoulder_undersize=],[atype=],[anchor=],[orient=],[spin=]) [ATTACHMENTS];
screw_head(screw_info, [details],[counterbore],[flat_height],[teardrop],[internal])
Section: Nuts and nut traps
nut([spec], [shape], [thickness], [nutwidth], [thread=], [tolerance=], [hole_oversize=], [bevel=], [$slop=], [anchor=], [spin=], [orient=]) [ATTACHMENTS];
nut_trap_side(trap_width, [spec], [shape], [thickness], [nutwidth=], [poke_len=], [poke_diam=], [$slop=], [anchor=], [orient=], [spin=]) [ATTACHMENTS];
nut_trap_inline(length|l|heigth|h, [spec], [shape], [$slop=], [anchor=], [orient=], [spin=]) [ATTACHMENTS];
Section: Screw and Nut Information
info = screw_info(name, [head], [drive], [thread=], [drive_size=], [oversize=], [head_oversize=])
nut_spec = nut_info(name, [shape], [thickness=], [thread=], [width=], [hole_oversize=]);
thread_specification(screw_spec, [tolerance], [internal])
LibFile: screw_drive.scad
Section: Phillips Drive
phillips_mask(size) [ATTACHMENTS];
depth = phillips_depth(size, d);
diam = phillips_diam(size, depth);
Section: Hex drive
hex_drive_mask(size, length, [anchor], [spin], [orient], [$slop]) [ATTACHMENTS];
Section: Torx Drive
torx_mask(size, l, [center]) [ATTACHMENTS];
torx_mask2d(size);
info = torx_info(size);
diam = torx_diam(size);
depth = torx_depth(size);
Section: Robertson/Square Drives
robertson_mask(size, [extra], [ang], [$slop=]);
LibFile: bottlecaps.scad
Section: PCO-1810 Bottle Threading
pco1810_neck([wall]) [ATTACHMENTS];
pco1810_cap([h], [r|d], [wall], [texture]) [ATTACHMENTS];
Section: PCO-1881 Bottle Threading
pco1881_neck([wall]) [ATTACHMENTS];
pco1881_cap(wall, [texture]) [ATTACHMENTS];
Section: Generic Bottle Connectors
generic_bottle_neck([wall], ...) [ATTACHMENTS];
generic_bottle_cap(wall, [texture], ...) [ATTACHMENTS];
bottle_adapter_neck_to_cap(wall, [texture], ...) [ATTACHMENTS];
bottle_adapter_cap_to_cap(wall, [texture]) [ATTACHMENTS];
bottle_adapter_neck_to_neck(...) [ATTACHMENTS];
Section: SPI Bottle Threading
sp_neck(diam, type, wall|id=, [style=], [bead=]) [ATTACHMENTS];
sp_cap(diam, type, wall, [style=], [top_adj=], [bot_adj=], [texture=], [$slop]) [ATTACHMENTS];
true_diam = sp_diameter(diam,type)
LibFile: cubetruss.scad
Section: Cube Trusses
cubetruss(extents, [clips=], [bracing=], [size=], [strut=], [clipthick=], ...) [ATTACHMENTS];
cubetruss_corner(h, extents, [bracing=], [size=], [strut=], [clipthick=]);
cubetruss_support([size=], [strut=], [extents=]) [ATTACHMENTS];
Section: Cubetruss Support
cubetruss_foot(w, [size=], [strut=], [clipthick=]) [ATTACHMENTS];
cubetruss_joiner([w=], [vert=], [size=], [strut=], [clipthick=]) [ATTACHMENTS];
cubetruss_uclip(dual, [size=], [strut=], [clipthick=]) [ATTACHMENTS];
Section: Cubetruss Primitives
cubetruss_segment([size=], [strut=], [bracing=]);
cubetruss_clip(extents, [size=], [strut=], [clipthick=]) [ATTACHMENTS];
length = cubetruss_dist(cubes, [gaps], [size=], [strut=]);
LibFile: gears.scad
Section: Gears
spur_gear(circ_pitch, teeth, [thickness], [helical=], [pressure_angle=], [profile_shift=], [backlash=], [shaft_diam=], [hide=], [clearance=], [slices=], [internal=], [herringbone=]) [ATTACHMENTS];
spur_gear(mod=|diam_pitch=, teeth=, [thickness=], ...) [ATTACHMENTS];
vnf = spur_gear(circ_pitch, teeth, [thickness], ...);
vnf = spur_gear(mod=|diam_pitch=, teeth=, [thickness=], ...);
spur_gear2d(circ_pitch, teeth, [pressure_angle=], [profile_shift=], [shorten=], [hide=], [shaft_diam=], [clearance=], [backlash=], [internal=]) [ATTACHMENTS];
spur_gear2d(mod=|diam_pitch=, teeth=, [pressure_angle=], [profile_shift=], [shorten=], [hide=], [shaft_diam=], [clearance=], [backlash=], [internal=]) [ATTACHMENTS];
rgn = spur_gear2d(circ_pitch, teeth, [pressure_angle=], [profile_shift=], [shorten=], [hide=], [shaft_diam=], [clearance=], [backlash=], [internal=]);
rgn = spur_gear2d(mod=, teeth=, [pressure_angle=], [profile_shift=], [shorten=], [hide=], [shaft_diam=], [clearance=], [backlash=], [internal=]);
ring_gear(circ_pitch, teeth, thickness, [backing|od=|or=|width=], [pressure_angle=], [helical=], [herringbone=], [profile_shift=], [clearance=], [backlash=]) [ATTACHMENTS];
ring_gear(mod=, teeth=, thickness=, [backing=|od=|or=|width=], [pressure_angle=], [helical=], [herringbone=], [profile_shift=], [clearance=], [backlash=]) [ATTACHMENTS];
ring_gear(diam_pitch=, teeth=, thickness=, [backing=|od=|or=|width=], [pressure_angle=], [helical=], [herringbone=], [profile_shift=], [clearance=], [backlash=]) [ATTACHMENTS];
ring_gear2d(circ_pitch, teeth, [backing|od=|or=|width=], [pressure_angle=], [helical=], [profile_shift=], [clearance=], [backlash=]) [ATTACHMENTS];
ring_gear2d(mod=, teeth=, [backing=|od=|or=|width=], [pressure_angle=], [helical=], [profile_shift=], [clearance=], [backlash=]) [ATTACHMENTS];
ring_gear2d(diam_pitch=, teeth=, [backing=|od=|or=|width=], [pressure_angle=], [helical=], [profile_shift=], [clearance=], [backlash=]) [ATTACHMENTS];
rack(pitch, teeth, thickness, [base|bottom=|width=], [helical=], [pressure_angle=], [backlash=], [clearance=]) [ATTACHMENTS];
rack(mod=, teeth=, thickness=, [base=|bottom=|width=], [helical=], [pressure_angle=], [backlash]=, [clearance=]) [ATTACHMENTS];
vnf = rack(pitch, teeth, thickness, [base|bottom=|width=], [helical=], [pressure_angle=], [backlash=], [clearance=]);
vnf = rack(mod=, teeth=, thickness=, [base=|bottom=|width=], [helical=], [pressure_angle=], [backlash=], [clearance=]);
rack2d(pitch, teeth, [base|bottom=|width=], [pressure_angle=], [backlash=], [clearance=]) [ATTACHMENTS];
rack2d(mod=, teeth=, [base=|bottom=|width=], [pressure_angle=], [backlash=], [clearance=]) [ATTACHMENTS];
path = rack2d(pitch, teeth, [base|bottom=|width=], [pressure_angle=], [backlash=], [clearance=]);
path = rack2d(mod=, teeth=, [base=|bottom=|width=], [pressure_angle=], [backlash=], [clearance=]);
crown_gear(circ_pitch, teeth, backing, face_width, [pressure_angle=], [clearance=], [backlash=], [profile_shift=], [slices=]);
crown_gear(diam_pitch=, teeth=, backing=, face_width=, [pressure_angle=], [clearance=], [backlash=], [profile_shift=], [slices=]);
crown_gear(mod=, teeth=, backing=, face_width=, [pressure_angle=], [clearance=], [backlash=], [profile_shift=], [slices=]);
vnf = crown_gear(circ_pitch, teeth, backing, face_width, [pressure_angle=], [clearance=], [backlash=], [profile_shift=], [slices=]);
vnf = crown_gear(diam_pitch=, teeth=, backing=, face_width=, [pressure_angle=], [clearance=], [backlash=], [profile_shift=], [slices=]);
vnf = crown_gear(mod=, teeth=, backing=, face_width=, [pressure_angle=], [clearance=], [backlash=], [profile_shift=], [slices=]);
gear_dist(mod=|diam_pitch=|circ_pitch=, teeth, mate_teeth, [shaft_angle], [shaft_diam], [face_width=], [hide=], [spiral=], [cutter_radius=], [right_handed=], [pressure_angle=], [backing=|thickness=|bottom=], [cone_backing=], [backlash=], [slices=], [internal=], [gear_spin=], ...) [ATTACHMENTS];
vnf = gear_dist(mod=|diam_pitch=|circ_pitch=, teeth, mate_teeth, [shaft_angle], [face_width=], [hide=], [spiral=], [cutter_radius=], [right_handed=], [pressure_angle=], , [backing=|thickness=|bottom=], [cone_backing=], [backlash=], [slices=], [internal=], [gear_spin=], ...);
worm(circ_pitch, d, l, [starts=], [left_handed=], [pressure_angle=], [backlash=], [clearance=]);
worm(mod=, d=, l=, [starts=], [left_handed=], [pressure_angle=], [backlash=], [clearance=]);
vnf = worm(circ_pitch, d, l, [starts=], [left_handed=], [pressure_angle=], [backlash=], [clearance=]);
vnf = worm(mod=, d=, l=, [starts=], [left_handed=], [pressure_angle=], [backlash=], [clearance=]);
enveloping_worm(circ_pitch, mate_teeth, d, [left_handed=], [starts=], [arc=], [pressure_angle=]);
enveloping_worm(mod=, mate_teeth=, d=, [left_handed=], [starts=], [arc=], [pressure_angle=]);
enveloping_worm(diam_pitch=, mate_teeth=, d=, [left_handed=], [starts=], [arc=], [pressure_angle=]);
vnf = enveloping_worm(circ_pitch, mate_teeth, d, [left_handed=], [starts=], [arc=], [pressure_angle=]);
vnf = enveloping_worm(mod=, mate_teeth=, d=, [left_handed=], [starts=], [arc=], [pressure_angle=]);
vnf = enveloping_worm(diam_pitch=, mate_teeth=, d=, [left_handed=], [starts=], [arc=], [pressure_angle=]);
worm_gear(circ_pitch, teeth, worm_diam, [worm_starts=], [worm_arc=], [crowning=], [left_handed=], [pressure_angle=], [backlash=], [clearance=], [slices=], [shaft_diam=]) [ATTACHMENTS];
worm_gear(mod=, teeth=, worm_diam=, [worm_starts=], [worm_arc=], [crowning=], [left_handed=], [pressure_angle=], [backlash=], [clearance=], [slices=], [shaft_diam=]) [ATTACHMENTS];
vnf = worm_gear(circ_pitch, teeth, worm_diam, [worm_starts=], [worm_arc=], [crowning=], [left_handed=], [pressure_angle=], [backlash=], [clearance=], [slices=]);
vnf = worm_gear(mod=, teeth=, worm_diam=, [worm_starts=], [worm_arc=], [crowning=], [left_handed=], [pressure_angle=], [backlash=], [clearance=], [slices=]);
Section: Gear Assemblies
gear_data = planetary_gears(mod=|circ_pitch=|diam_pitch=, n, max_teeth, ring_carrier=|carrier_ring=|sun_carrier=|carrier_sun=|sun_ring=|ring_sun=, [helical=], [gear_spin=]);
Section: Computing Gear Dimensions
circ_pitch = circular_pitch(circ_pitch);
circ_pitch = circular_pitch(mod=);
circ_pitch = circular_pitch(diam_pitch=);
dp = diametral_pitch(circ_pitch);
dp = diametral_pitch(mod=);
dp = diametral_pitch(diam_pitch=);
mod = module_value(circ_pitch);
mod = module_value(mod=);
mod = module_value(diam_pitch=);
pr = pitch_radius(pitch, teeth, [helical]);
pr = pitch_radius(mod=, teeth=, [helical=]);
or = outer_radius(circ_pitch, teeth, [helical=], [clearance=], [internal=], [profile_shift=], [shorten=]);
or = outer_radius(mod=, teeth=, [helical=], [clearance=], [internal=], [profile_shift=], [shorten=]);
or = outer_radius(diam_pitch=, teeth=, [helical=], [clearance=], [internal=], [profile_shift=], [shorten=]);
ang = bevel_pitch_angle(teeth, mate_teeth, [drive_angle=]);
thick = worm_gear_thickness(pitch, teeth, worm_diam, [worm_arc=], [crowning=], [clearance=]);
thick = worm_gear_thickness(mod=, teeth=, worm_diam=, [worm_arc=], [crowning=], [clearance=]);
dist = worm_dist(mod=|diam_pitch=|circ_pitch=, d, starts, teeth, [profile_shift], [pressure_angle=]);
dist = gear_dist(mod=|diam_pitch=|circ_pitch=, teeth1, teeth2, [helical], [profile_shift1], [profile_shift2], [pressure_angle=], [backlash=]);
dist = gear_dist_skew(mod=|diam_pitch=|circ_pitch=, teeth1, teeth2, helical1, helical2, [profile_shift1], [profile_shift2], [pressure_angle=]
ang = gear_skew_angle(teeth1, teeth2, helical1, helical2, [profile_shift1], [profile_shift2], [pressure_angle=]
total_shift = get_profile_shift(mod=|diam_pitch=|circ_pitch=, desired, teeth1, teeth2, [helical], [pressure_angle=],
x = auto_profile_shift(teeth, [pressure_angle], [helical], [profile_shift=]);
x = auto_profile_shift(teeth, [pressure_angle], [helical], get_min=);
x = auto_profile_shift(teeth, min_teeth=);
shorten = gear_shorten(teeth1, teeth2, [helical], [profile_shift1], [profile_shift2], [pressure_angle=]);
shorten = gear_shorten_skew(teeth1, teeth2, helical1, helical2, [profile_shift1], [profile_shift2], [pressure_angle=]);
LibFile: hinges.scad
Section: Hinges
knuckle_hinge(length, offset, segs, [inner], [arm_height=], [arm_angle=], [fill=], [clear_top=], [gap=], [round_top=], [round_bot=], [knuckle_diam=], [pin_diam=], [pin_fn=], [anchor=], [spin=], [orient=]) [ATTACHMENTS];
living_hinge_mask(l, thick, [layerheight=], [foldangle=], [hingegap=], [$slop=], [anchor=], [spin=], [orient=]) [ATTACHMENTS];
Section: Snap Locks
apply_folding_hinges_and_snaps(thick, [foldangle=], [hinges=], [snaps=], [sockets=], [snaplen=], [snapdiam=], [hingegap=], [layerheight=], [$slop=]) CHILDREN;
snap_lock(thick, [snaplen=], [snapdiam=], [layerheight=], [foldangle=], [hingegap=], [$slop=], [anchor=], [spin=], [orient=]) [ATTACHMENTS];
snap_socket(thick, [snaplen=], [snapdiam=], [layerheight=], [foldangle=], [hingegap=], [$slop=], [anchor=], [spin=], [orient=]) [ATTACHMENTS];
LibFile: joiners.scad
Section: Half Joiners
half_joiner_clear(l, w, [ang=], [clearance=], [overlap=]) [ATTACHMENTS];
vnf = half_joiner_clear(l, w, [ang=], [clearance=], [overlap=]);
half_joiner(l, w, [base=], [ang=], [screwsize=], [$slop=]) [ATTACHMENTS];
vnf = half_joiner(l, w, [base=], [ang=], [screwsize=], [$slop=]);
half_joiner2(l, w, [base=], [ang=], [screwsize=])
vnf = half_joiner2(l, w, [base=], [ang=], [screwsize=])
Section: Full Joiners
joiner_clear(l, w, [ang=], [clearance=], [overlap=]) [ATTACHMENTS];
joiner(l, w, base, [ang=], [screwsize=], [$slop=]) [ATTACHMENTS];
Section: Dovetails
dovetail(gender, w=|width, h=|height, slide|thickness=, [slope=|angle=], [taper=|back_width=], [chamfer=], [r=|radius=], [round=], [extra=], [$slop=])
Section: Tension Clips
snap_pin(size, [pointed=], [anchor=], [spin=], [orient]=) [ATTACHMENTS];
snap_pin(r=|radius=|d=|diameter=, l=|length=, nub_depth=, snap=, thickness=, [clearance=], [preload=], [pointed=]) [ATTACHMENTS];
snap_pin_socket(size, [fixed=], [fins=], [pointed=], [anchor=], [spin=], [orient=]) [ATTACHMENTS];
snap_pin_socket(r=|radius=|d=|diameter=, l=|length=, nub_depth=, snap=, [fixed=], [pointed=], [fins=]) [ATTACHMENTS];
rabbit_clip(type, length, width, snap, thickness, depth, [compression=], [clearance=], [lock=], [lock_clearance=], [splineteps=], [anchor=], [orient=], [spin=]) [ATTACHMENTS];
Section: Splines
hirth(n, ir|id=, or|od=, tooth_angle, [cone_angle=], [chamfer=], [rounding=], [base=], [crop=], [anchor=], [spin=], [orient=]
LibFile: linear_bearings.scad
Section: Generic Linear Bearings
linear_bearing_housing(d, l, tab, gap, wall, tabwall, screwsize) [ATTACHMENTS];
linear_bearing(l, od, id, length) [ATTACHMENTS];
Section: lmXuu Linear Bearings
lmXuu_housing(size, tab, gap, wall, tabwall, screwsize) [ATTACHMENTS];
lmXuu_bearing(size) [ATTACHMENTS];
Section: lmXuu Linear Bearing Info
diam_len = lmXuu_info(size);
LibFile: modular_hose.scad
Section: Modular Hose Parts
modular_hose(size, type, [clearance], [waist_len], [anchor], [spin], [orient]) [ATTACHMENTS];
r = modular_hose_radius(size, [outer]);
LibFile: nema_steppers.scad
Section: Motor Models
nema_stepper_motor(size, h, shaft_len, [$slop=], ...) [ATTACHMENTS];
Section: Masking Modules
nema_mount_mask(size, depth, l, [$slop], ...);
Section: Functions
info = nema_motor_info(size);
LibFile: polyhedra.scad
Section: Polyhedra
regular_polyhedron([name],[index=],[type=],[faces=],[facetype=],[hasfaces=],...) [CHILDREN];
regular_polyhedron(..., [or=|r=|d=],[ir=],[mr=],[side=],[facedown=],[anchor=], ...) [CHILDREN];]
regular_polyhedron(..., [draw=], [rounding=], [stellate=], [repeat=], [rotate_children=]) [CHILDREN];
regular_polyhedron("trapezohedron", [longside=],[h=], ...) [CHILDREN];
info = regular_polyhedron_info(info, ...);
LibFile: sliders.scad
Section: Modules
slider(l, w, h, [base=], [wall=], [ang=], [$slop=]) [ATTACHMENTS];
rail(l, w, h, [chamfer=], [ang=]) [ATTACHMENTS];
LibFile: tripod_mounts.scad
Section:
manfrotto_rc2_plate([chamfer],[anchor],[orient],[spin]) [ATTACHMENTS];
LibFile: walls.scad
Section: Walls
sparse_wall(h, l, thick, [maxang=], [strut=], [max_bridge=]) [ATTACHMENTS];
sparse_wall2d(size, [maxang=], [strut=], [max_bridge=]) [ATTACHMENTS];
sparse_cuboid(size, [dir], [maxang=], [struct=]
hex_panel(shape, wall, spacing, [frame=], [bevel=], [bevel_frame=], [h=|height=|l=|length=], [anchor=], [orient=], [spin=])
corrugated_wall(h, l, thick, [strut=], [wall=]) [ATTACHMENTS];
thinning_wall(h, l, thick, [ang=], [braces=], [strut=], [wall=]) [ATTACHMENTS];
thinning_triangle(h, l, thick, [ang=], [strut=], [wall=], [diagonly=], [center=]) [ATTACHMENTS];
narrowing_strut(w, l, wall, [ang=]) [ATTACHMENTS];
LibFile: wiring.scad
Section: Modules
wire_bundle(path, wires, [wirediam], [rounding], [wirenum=], [corner_steps=]);
Indices
Table of Contents
Function Index
Topics Index
Cheat Sheet
Tutorials
List of Files:
Basic Modeling:
- constants.scad STD
- transforms.scad STD
- attachments.scad STD
- shapes2d.scad STD
- shapes3d.scad STD
- drawing.scad STD
- masks2d.scad STD
- masks3d.scad STD
- distributors.scad STD
- color.scad STD
- partitions.scad STD
- miscellaneous.scad STD
Advanced Modeling:
- paths.scad STD
- regions.scad STD
- skin.scad STD
- vnf.scad STD
- beziers.scad
- nurbs.scad
- rounding.scad
- turtle3d.scad
Math:
- math.scad STD
- linalg.scad STD
- vectors.scad STD
- coords.scad STD
- geometry.scad STD
- trigonometry.scad STD
Data Management:
- version.scad STD
- comparisons.scad STD
- lists.scad STD
- utility.scad STD
- strings.scad STD
- structs.scad STD
- fnliterals.scad
Threaded Parts:
Parts:
- ball_bearings.scad
- cubetruss.scad
- gears.scad
- hinges.scad
- joiners.scad
- linear_bearings.scad
- modular_hose.scad
- nema_steppers.scad
- polyhedra.scad
- sliders.scad
- tripod_mounts.scad
- walls.scad
- wiring.scad
Footnotes:
STD = Included in std.scad