mirror of
https://github.com/BelfrySCAD/BOSL2.git
synced 2024-12-29 16:29:40 +00:00
The Belfry OpenScad Library, v2.0. An OpenSCAD library of shapes, masks, and manipulators to make working with OpenSCAD easier. BETA
bbe4ad1467
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 |
||
---|---|---|
.github | ||
changes | ||
examples | ||
githooks | ||
scripts | ||
tests | ||
tutorials | ||
.gitignore | ||
affine.scad | ||
arrays.scad | ||
attachments.scad | ||
beziers.scad | ||
bosl1compat.scad | ||
bottlecaps.scad | ||
common.scad | ||
constants.scad | ||
CONTRIBUTING.md | ||
coords.scad | ||
cubetruss.scad | ||
debug.scad | ||
distributors.scad | ||
edges.scad | ||
geometry.scad | ||
hingesnaps.scad | ||
hull.scad | ||
involute_gears.scad | ||
joiners.scad | ||
knurling.scad | ||
LICENSE | ||
linear_bearings.scad | ||
masks.scad | ||
math.scad | ||
metric_screws.scad | ||
mutators.scad | ||
nema_steppers.scad | ||
partitions.scad | ||
paths.scad | ||
phillips_drive.scad | ||
polyhedra.scad | ||
primitives.scad | ||
quaternions.scad | ||
queues.scad | ||
README.md | ||
regions.scad | ||
rounding.scad | ||
screws.scad | ||
shapes.scad | ||
shapes2d.scad | ||
skin.scad | ||
sliders.scad | ||
stacks.scad | ||
std.scad | ||
strings.scad | ||
structs.scad | ||
threading.scad | ||
torx_drive.scad | ||
transforms.scad | ||
triangulation.scad | ||
vectors.scad | ||
version.scad | ||
vnf.scad | ||
walls.scad | ||
wiring.scad | ||
WRITING_DOCS.md |
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!
Installation
- Download the .zip or .tar.gz release file for this library.
- Unpack it. It should create a
BOSL-v2.0
directory with the library files within it. - Rename the directory to
BOSL2
. - 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/
- Windows:
- 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)
transforms.scad
: Commonly used transformations shortcuts.distributors.scad
: Modules and Functions to distribute items.mutators.scad
: Modules and Functions to mutate items.attachments.scad
: Modules and functions to enable attachments.primitives.scad
: Attachment aware replacements for built-in shapes.shapes.scad
: Common useful 3D shapes and structured objects.shapes2d.scad
: Common useful 2D shapes and drawing helpers.masks.scad
: Shapes that are useful for masking withdifference()
andintersect()
.
Math (Imported via std.scad)
math.scad
: Useful math helper functions.vectors.scad
: Functions for vector math.arrays.scad
: Functions to manipulate lists and arrays.quaternions.scad
: Functions to work with quaternion rotations.affine.scad
: Functions for affine transformation matrix math.coords.scad
: Functions for coordinate system conversions and transformations.
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 creatingpolyhedron()
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)
common.scad
: Useful helpers for argument processing.constants.scad
: Useful constants for vectors, edges, etc.errors.scad
: Routines to help print out warnings and errors.version.scad
: Ways to parse and compare semantic versions.
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 triangulatepolyhedron()
faces.debug.scad
: Modules to help debugpolygons()
s andpolyhedron()
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
polyhedra.scad
: Modules to create various regular and stellated polyhedra.walls.scad
: Modules to create walls and structural elements for 3D printing.cubetruss.scad
: Modules to create modular open-framed trusses and joiners.involute_gears.scad
: Modules and functions to make involute gears and racks.joiners.scad
: Modules to make joiner shapes for connecting separately printed objects.sliders.scad
: Modules for creating simple sliders and rails.metric_screws.scad
: Functions and modules to make metric screws, nuts, and screwholes.linear_bearings.scad
: Modules to make mounts for LMxUU style linear bearings.nema_steppers.scad
: Modules to make mounting holes for NEMA motors.phillips_drive.scad
: Modules to create Phillips screwdriver tips.torx_drive.scad
: Functions and Modules to create Torx bit drive holes.wiring.scad
: Modules to render routed bundles of wires.hingesnaps.scad
: Modules to make foldable, snap-locking parts.bottlecaps.scad
: Modules to make standard beverage bottle caps and necks.
Documentation
The full library docs can be found at https://github.com/revarbat/BOSL2/wiki