The Belfry OpenScad Library, v2.0. An OpenSCAD library of shapes, masks, and manipulators to make working with OpenSCAD easier. BETA
Find a file
RonaldoCMP c10a8b919d Extensive review of arrays.scad, vectors.scad, common.scad and their regression tests
Here is an extensive review of common.scad, vectors.scad, arrays.scad and their regression test codes. The changes were mostly in input data check and format. Some few functions got more changes either to adapt them to the new asserts or because a better (faster, simpler) code was found.

Another change was moving add_scalar from vectors.scad to arrays.scad. It is in fact an array operation. Some few documentation examples and test codes were added. Some function argument names were changed to keep them consistent with the names they have in other similar functions. That name changes were not as extensive as I would like but it is advisable to favor users.

Most, but not all, changed function codes are followed by a comment with a short summary of the changes done. Those comments always start with:
//***

I can eliminate those comments before a merge is done or in a second round.
2020-07-25 20:27:19 +01:00
.github Don't error out action when no file changes to commit. 2020-07-07 00:54:39 -07:00
changes Removed deprecations. 2019-04-18 21:16:10 -07:00
examples Standardize indention on spaces, not tabs. 2020-05-29 19:04:34 -07:00
githooks Added version.scad 2019-11-05 13:33:48 -08:00
scripts Tighten image comparison requirements. 2020-07-19 05:39:49 -07:00
tests Extensive review of arrays.scad, vectors.scad, common.scad and their regression tests 2020-07-25 20:27:19 +01:00
tutorials Update Basic_Shapes.md 2020-07-03 15:56:48 -06:00
.gitignore Added version.scad 2019-11-05 13:33:48 -08:00
affine.scad Bugfix for new unit() in affine_frame_map() 2020-07-19 23:05:54 -07:00
arrays.scad Extensive review of arrays.scad, vectors.scad, common.scad and their regression tests 2020-07-25 20:27:19 +01:00
attachments.scad Bugfix for unit() changes in attachment 2020-07-19 05:49:05 -07:00
beziers.scad Added polynomial root finding and complex math to math.scad. Changed 2020-06-18 17:50:25 -04:00
bosl1compat.scad Standardize indention on spaces, not tabs. 2020-05-29 19:04:34 -07:00
bottlecaps.scad Standardize indention on spaces, not tabs. 2020-05-29 19:04:34 -07:00
common.scad A broad review of input data check and code format 2020-07-24 22:54:34 +01:00
constants.scad Standardize indention on spaces, not tabs. 2020-05-29 19:04:34 -07:00
CONTRIBUTING.md Added CONTRIBUTING.md 2020-07-06 15:19:03 -07:00
coords.scad Standardize indention on spaces, not tabs. 2020-05-29 19:04:34 -07:00
cubetruss.scad Standardize indention on spaces, not tabs. 2020-05-29 19:04:34 -07:00
debug.scad Bad use of unit() in debug_polyhedron() 2020-07-19 06:24:16 -07:00
distributors.scad Standardize indention on spaces, not tabs. 2020-05-29 19:04:34 -07:00
edges.scad Standardize indention on spaces, not tabs. 2020-05-29 19:04:34 -07:00
errors.scad Standardize indention on spaces, not tabs. 2020-05-29 19:04:34 -07:00
geometry.scad Rewrote line_closest_point() and segment_closest_point() to support 3D. Added ray_closest_point(). 2020-07-19 23:07:49 -07:00
hingesnaps.scad Standardize indention on spaces, not tabs. 2020-05-29 19:04:34 -07:00
hull.scad Standardize indention on spaces, not tabs. 2020-05-29 19:04:34 -07:00
involute_gears.scad Standardize indention on spaces, not tabs. 2020-05-29 19:04:34 -07:00
joiners.scad Standardize indention on spaces, not tabs. 2020-05-29 19:04:34 -07:00
knurling.scad Standardize indention on spaces, not tabs. 2020-05-29 19:04:34 -07:00
LICENSE Updated copyright years. Split math.scad up. Enabled attach for lots of shapes. Removed backwards compatability. 2019-04-19 17:02:17 -07:00
linear_bearings.scad Standardize indention on spaces, not tabs. 2020-05-29 19:04:34 -07:00
masks.scad Standardize indention on spaces, not tabs. 2020-05-29 19:04:34 -07:00
math.scad Added error bounds to poly_roots, added poly_div, poly_mult and 2020-07-11 12:22:59 -04:00
metric_screws.scad Standardize indention on spaces, not tabs. 2020-05-29 19:04:34 -07:00
mutators.scad Standardize indention on spaces, not tabs. 2020-05-29 19:04:34 -07:00
nema_steppers.scad Standardize indention on spaces, not tabs. 2020-05-29 19:04:34 -07:00
partitions.scad Standardize indention on spaces, not tabs. 2020-05-29 19:04:34 -07:00
paths.scad Optimizations for is_vector(), is_matrix(). Added is_finite(). 2020-07-06 18:28:35 -07:00
phillips_drive.scad Standardize indention on spaces, not tabs. 2020-05-29 19:04:34 -07:00
polyhedra.scad Standardize indention on spaces, not tabs. 2020-05-29 19:04:34 -07:00
primitives.scad Standardize indention on spaces, not tabs. 2020-05-29 19:04:34 -07:00
quaternions.scad Changes in Q_Angle computation and formatting 2020-07-19 22:09:33 +01:00
queues.scad Standardize indention on spaces, not tabs. 2020-05-29 19:04:34 -07:00
README.md Update README.md files. 2020-02-13 22:25:41 -08:00
regions.scad Added cp= to attachable. Added "origin" standard named anchor. 2020-07-06 17:07:20 -07:00
rounding.scad Various doc fixes 2020-07-19 11:48:31 -04:00
screws.scad Fixed indentation in screws.scad 2020-06-11 21:40:52 -07:00
shapes.scad Fixed octahedral triangulated spheroid(). 2020-06-23 04:40:36 -07:00
shapes2d.scad unit() now asserts error for zero-length vector unless dflt= arg is given. 2020-07-10 00:03:55 -07:00
skin.scad fixed skin bug 2020-07-07 23:25:11 -04:00
sliders.scad Standardize indention on spaces, not tabs. 2020-05-29 19:04:34 -07:00
stacks.scad Standardize indention on spaces, not tabs. 2020-05-29 19:04:34 -07:00
std.scad Standardize indention on spaces, not tabs. 2020-05-29 19:04:34 -07:00
strings.scad Bugfix for suffix() when len is longer than the string length. 2020-06-15 01:24:57 -07:00
structs.scad Standardize indention on spaces, not tabs. 2020-05-29 19:04:34 -07:00
threading.scad Standardize indention on spaces, not tabs. 2020-05-29 19:04:34 -07:00
torx_drive.scad Standardize indention on spaces, not tabs. 2020-05-29 19:04:34 -07:00
transforms.scad Standardize indention on spaces, not tabs. 2020-05-29 19:04:34 -07:00
triangulation.scad Standardize indention on spaces, not tabs. 2020-05-29 19:04:34 -07:00
vectors.scad Extensive review of arrays.scad, vectors.scad, common.scad and their regression tests 2020-07-25 20:27:19 +01:00
version.scad Added zero=undef/true/false arg to is_vector. Bugfix for vector_axis() 2020-07-21 16:15:02 -07:00
vnf.scad speed improvement for vnf_centroid 2020-06-14 09:52:27 -04:00
walls.scad Standardize indention on spaces, not tabs. 2020-05-29 19:04:34 -07:00
wiring.scad Standardize indention on spaces, not tabs. 2020-05-29 19:04:34 -07:00
WRITING_DOCS.md Tweak docs gen to allow a lone period on a line to break a paragraph. 2020-05-23 19:17:32 -07:00

BOSL2

The Belfry OpenScad Library, v2

A library for OpenSCAD, filled with useful tools, shapes, masks, math and manipulators, designed to make OpenSCAD easier to use.

  • NOTE: BOSL2 IS PRE-ALPHA CODE. THE CODE IS STILL BEING REORGANIZED.
  • NOTE2: CODE WRITTEN FOR BOSLv1 PROBABLY WON'T WORK WITH BOSL2!

Join the chat at https://gitter.im/revarbat/BOSL2 BOSL2 Docs

Installation

  1. Download the .zip or .tar.gz release file for this library.
  2. Unpack it. It should create a BOSL-v2.0 directory with the library files within it.
  3. Rename the directory to BOSL2.
  4. Move the BOSL2 directory into the apropriate OpenSCAD library directory for your platform:
    • Windows: My Documents\OpenSCAD\libraries\
    • Linux: $HOME/.local/share/OpenSCAD/libraries/
    • Mac OS X: $HOME/Documents/OpenSCAD/libraries/
  5. Restart OpenSCAD.

Terminology

For purposes of the BOSL2 library, the following terms apply:

  • Left: Towards X-
  • Right: Towards X+
  • Front/Forward: Towards Y-
  • Back/Behind: Towards Y+
  • Bottom/Down/Below: Towards Z-
  • Top/Up/Above: Towards Z+

Common Arguments:

Args What it is
rounding Radius of rounding for interior or exterior edges.
chamfer Size of chamfers/bevels for interior or exterior edges.
orient Axis a part should be oriented along. Given as an XYZ triplet of rotation angles. It is recommended that you use the ORIENT_ constants from constants.scad. Default is usually ORIENT_Z for vertical orientation.
anchor Side of the object that should be anchored to the origin. Given as a vector towards the side of the part to align with the origin. It is recommended that you use the directional constants from constants.scad. Default is usually CENTER for centered.

Examples

A lot of the features of this library are to allow shorter, easier-to-read, intent-based coding. For example:

BOSL2/transforms.scad Examples Raw OpenSCAD Equivalent
up(5) translate([0,0,5])
xrot(30,cp=[0,10,20]) translate([0,10,20]) rotate([30,0,0]) translate([0,-10,-20])
xspread(20,n=3) for (dx=[-20,0,20]) translate([dx,0,0])
zring(n=6,r=20) for (zr=[0:5]) rotate([0,0,zr*60]) translate([20,0,0])
skew_xy(xa=30,ya=45) multmatrix([[1,0,tan(30),0],[0,1,tan(45),0],[0,0,1,0],[0,0,0,1]])
BOSL2/shapes.scad Examples Raw OpenSCAD Equivalent
cube([10,20,30], anchor=BOTTOM); translate([0,0,15]) cube([10,20,30], center=true);
cuboid([20,20,30], fillet=5, edges=EDGES_Z_ALL); minkowski() {cube([10,10,20], center=true); sphere(r=5, $fn=32);}
prismoid([30,40],[20,30],h=10); hull() {translate([0,0,0.005]) cube([30,40,0.01], center=true); translate([0,0,9.995]) cube([20,30,0.01],center=true);}
xcyl(l=20,d=4); rotate([0,90,0]) cylinder(h=20, d=4, center=true);
cyl(l=100, d=40, fillet=5); translate([0,0,50]) minkowski() {cylinder(h=90, d=30, center=true); sphere(r=5);}
BOSL2/masks.scad Examples Raw Openscad Equivalent
chamfer_mask_z(l=20,chamfer=5); rotate(45) cube([5*sqrt(2), 5*sqrt(2), 20], center=true);
fillet_mask_z(l=20,fillet=5); difference() {cube([10,10,20], center=true); for(dx=[-5,5],dy=[-5,5]) translate([dx,dy,0]) cylinder(h=20.1, r=5, center=true);}
fillet_hole_mask(r=30,fillet=5); difference() {cube([70,70,10], center=true); translate([0,0,-5]) rotate_extrude(convexity=4) translate([30,0,0]) circle(r=5);}

The Library Files

The library files are as follows:

Basics (Imported via std.scad)

Math (Imported via std.scad)

Geometry (Imported via std.scad)

  • geometry.scad: Functions to find line intersections, circles from 3 points, etc.
  • edges.scad: Constants and functions to specify edges and corners.
  • vnf.scad: Vertices 'n' Faces structure to make creating polyhedron()s easier.
  • paths.scad: Functions and modules to work with arbitrary 3D paths.
  • regions.scad: Perform offsets and boolean geometry on 2D paths and regions.

Common (Imported via std.scad)

Processes

  • beziers.scad: Functions and modules to work with bezier curves.
  • threading.scad: Modules to make triangular and trapezoidal threaded rods and nuts.
  • rounding.scad: Functions to help rounding corners in a path.
  • knurling.scad: Masks and shapes to help with knurling.
  • partitions.scad: Modules to help partition large objects into smaller assembled parts.
  • rounding.scad: Functions and modules to create rounded paths and boxes.
  • skin.scad: Functions to skin surfaces between 2D cross-section paths.
  • hull.scad: Functions to create 2D and 3D convex hulls.
  • triangulation.scad: Functions to triangulate polyhedron() faces.
  • debug.scad: Modules to help debug polygons()s and polyhedron()s

Data Structures

  • strings.scad: String manipulation functions.
  • stacks.scad: Functions to manipulate stack data structures.
  • queues.scad: Functions to manipulate queue data structures.
  • structs.scad: Structure/Dictionary creation and manipulation functions.

Miscellaneous Parts

Documentation

The full library docs can be found at https://github.com/revarbat/BOSL2/wiki