# BOSL The Belfry OpenScad Library - A library of tools, shapes, and helpers to make OpenScad easier to use. This library is a set of useful tools, shapes and manipulators that I developed while working on various projects, including large ones like the Snappy-Reprap printed 3D printer. # Overview The library files are as follows: - `transforms.scad`: The most commonly used transformations, manipulations, and shortcuts are in this file. - `shapes.scad`: Common useful shapes and structured objects. - `masks.scad`: Shapes that are useful for masking with `difference()` and `intersect()`. - `math.scad`: Useful helper functions and constants. - `paths.scad`: Functions and modules to work with arbitrary 3D paths. - `bezier.scad`: Functions and modules to work with bezier curves. - `involute_gears.scad`: Modules and functions to make involute gears and racks. - `metric_screws.scad`: Functions and modules to make holes for metric screws and nuts. - `joiners.scad`: Modules to make joiner shapes for connecting separately printed objects. - `sliders.scad`: Modules for creating simple sliders and rails. - `acme_screws.scad`: Modules to make trapezoidal (ACME) threaded rods and nuts. - `nema_steppers.scad`: Modules to make mounting holes for NEMA motors. - `linear_bearings.scad`: Modules to make mounts for LMxUU style linear bearings. - `wiring.scad`: Modules to render routed bundles of wires. - `quaternions.scad`: Functions to work with quaternion rotations. ## transforms.scad The most commonly useful of the library files is `transforms.scad`. It provides features such as: - `up()`, `down()`, `left()`, `right()`, `fwd()`, `back()` as more readable alternatives to `translate()`. - `xrot()`, `yrot()`, `zrot()` as single-axis alternatives to `rotate`. - `xspread()`, `yspread()`, and `zspread()` to evenly space copies of an item along an axis. - `xring()`, `yring()`, `zring()` to evenly space copies of an item around a circle. - `skewxy()` that let you skew objects without using a `multmatrix()`. - Easy mirroring with `xflip()`, `xflip_copy()`, etc. - Slice items in half with `top_half()`, `left_half()`, `back_half()`, etc. ## shapes.scad The `shapes.scad` library file provides useful compound shapes, such as: - `upcube()` a ridiculously useful version of `cube()` that is centered on top of the XY plane. - Filleted (rounded) and Chamferred (bevelled) cubes and cylinders. - `pyramid()` and `prism()` - The incredibly useful `trapezoid()` for non-parallelogram cubes. - `right_triangle()` for the obvious shape. - `teardrop()` and `onion()` for making more 3D printable holes. - `tube()` and `torus()` for donut shapes. - `slot()` and `arced_slot()` for making things like screw slots. - `thinning_wall()` makes a vertical wall which thins in the middle, to reduce print volume. - `thinning_triangle()` makes a right triangle which thins in the middle, to reduce print volume. - `sparse_strut()` makes a cross-braced open strut wall, optimized for support-less 3D printing. - `corrugated_wall()` makes a corrugated wall to reduce print volume while keeping strength. ## masks.scad The `masks.scad` library file provides mask shapes like: - `angle_pie_mask()` to mask a pie-slice shape. - `chamfer_mask_x()`, `chamfer_mask_y()`, and `chamfer_mask_z()` to chamfer (bevel) an axis aligned 90 degree edge. - `fillet_mask_x()`, `fillet_mask_y()`, and `fillet_mask_z()` to fillet (round) an axis aligned 90 degree edge. - `fillet_corner_mask()` to fillet a 90 degree corner. - `fillet_angled_edge_mask()` to fillet an acute or obtuse vertical edge. - `fillet_angled_corner_mask()` to fillet the corner of two acute or obtuse planes. - `fillet_cylinder_mask()` to fillet the end of a cylinder. - `fillet_hole_mask()` to fillet the edge of a cylindrical hole. ## Documentation The full library docs can be found at https://github.com/revarbat/BOSL/wiki