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 bbe4ad1467 Sort debugging and optimizing
There were bugs in the previous sorting functions. They didn't check the homogeneity of the input list before calling _sort_scalars and _sort_vectors. The bug might result in wrong order and missing list elements in the output.
Besides correcting the bug a recode of all sorting functions result in better performance and a enlargement of their scope. With the new functions, list of vectors of any dimension may be sorted, even with idx given, with the native comparison operators. The scope of indexed sorting is also extended.

The file test_arrays has been extended to check the new funcionality.

New functions:

is_homogeneous - checks if a list has elements of the same type (although not distinguing booleans from numbers) up to a given depth
_sort_vectors - internal function to sort homgeneous lists of vectors using native comparison operators; extends the scope of the previous _sort_vectors# functions with better performance
_lexical_sort - internal function to sort non-homogeneous lists; uses compare_vals
_indexed_sort - internal function to perform indexed sorting of non-homogeneous lists; uses compar_vals

Changed/reviewed functions:
_valid_idx - doesn't requires the input of imin and imax args
sort - explores the internal functions to get better performance and an enlarged scope
sortidx - explores the internal functions to get better performance and an enlarged scope
_sort_general - just for sortings of non-homogeneous lists using compare_vals
_array_dim_recurse - changed for bit better performance

Functions eliminated:
 _sort_vectors1
 _sort_vectors2
 _sort_vectors3
 _sort_vectors4
2020-08-30 12:12:36 +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 Fixed cheatsheet index link. 2020-08-28 00:06:28 -07:00
tests Sort debugging and optimizing 2020-08-30 12:12:36 +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 Sort debugging and optimizing 2020-08-30 12:12:36 +01:00
attachments.scad Fixed broken line-plane intersections. Attachment enhanced vnf_polyhedron(). 2020-08-28 19:07:10 -07:00
beziers.scad Implement Issue #2. Added diameter alternates for most radius options. 2020-08-26 20:39:45 -07: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 added no_children checks, and attachable to vnf_polyhedron 2020-08-27 19:25:41 -04: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 Fixed docs for path2d. 2020-07-24 16:36:57 -04: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 Implement Issue #2. Added diameter alternates for most radius options. 2020-08-26 20:39:45 -07:00
edges.scad Standardize indention on spaces, not tabs. 2020-05-29 19:04:34 -07:00
geometry.scad Fixed broken line-plane intersections. Attachment enhanced vnf_polyhedron(). 2020-08-28 19:07:10 -07:00
hingesnaps.scad Standardize indention on spaces, not tabs. 2020-05-29 19:04:34 -07:00
hull.scad Changes to noncollinear_triple 2020-08-16 23:34:31 +01:00
involute_gears.scad docs_gen.py now shows more docs errors. 2020-07-27 15:15:34 -07:00
joiners.scad Added rabbit clips. 2020-08-17 20:44:42 -04: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 Implement Issue #2. Added diameter alternates for most radius options. 2020-08-26 20:39:45 -07:00
math.scad Merge branch 'master' of https://github.com/RonaldoCMP/BOSL2 2020-08-27 11:51:10 +01:00
metric_screws.scad Standardize indention on spaces, not tabs. 2020-05-29 19:04:34 -07:00
mutators.scad Implement Issue #2. Added diameter alternates for most radius options. 2020-08-26 20:39:45 -07:00
nema_steppers.scad Standardize indention on spaces, not tabs. 2020-05-29 19:04:34 -07:00
partitions.scad Fixed calls to vmul() with heteerogenous vector sizes. 2020-08-02 23:23:50 -07:00
paths.scad Implement Issue #2. Added diameter alternates for most radius options. 2020-08-26 20:39:45 -07:00
phillips_drive.scad Standardize indention on spaces, not tabs. 2020-05-29 19:04:34 -07:00
polyhedra.scad small tweak to hide two functions 2020-08-27 17:07:12 -04:00
primitives.scad Standardize indention on spaces, not tabs. 2020-05-29 19:04:34 -07:00
quaternions.scad Revert "Revert "Revert "Correction of C_times validation""" 2020-08-26 14:09:32 +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 Removed bogus median function 2020-08-02 01:20:11 -04:00
rounding.scad added os_mask to rounding and tweaked error messages in transpose 2020-08-28 23:16:11 -04:00
screws.scad Fixed indentation in screws.scad 2020-06-11 21:40:52 -07:00
shapes.scad Implement Issue #2. Added diameter alternates for most radius options. 2020-08-26 20:39:45 -07:00
shapes2d.scad Fixed calls to vmul() with heteerogenous vector sizes. 2020-08-02 23:23:50 -07:00
skin.scad Revert "Revert "Merge remote-tracking branch 'upstream/revarbat_dev'"" 2020-08-18 11:04:56 +01: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 remove error.scad include 2020-08-01 15:56:40 -04:00
strings.scad added no_children checks, and attachable to vnf_polyhedron 2020-08-27 19:25:41 -04:00
structs.scad added no_children checks, and attachable to vnf_polyhedron 2020-08-27 19:25:41 -04: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 Fix for #243. Added better docs and asserts to rot() 2020-08-26 15:59:35 -07:00
triangulation.scad Standardize indention on spaces, not tabs. 2020-05-29 19:04:34 -07:00
vectors.scad Fixed calls to vmul() with heteerogenous vector sizes. 2020-08-02 23:23:50 -07:00
version.scad Merge branch 'master' of github.com:revarbat/BOSL2 into revarbat_dev 2020-08-28 19:19:04 -07:00
vnf.scad Merge branch 'master' of github.com:revarbat/BOSL2 into revarbat_dev 2020-08-28 19:19:04 -07: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