mirror of
https://github.com/BelfrySCAD/BOSL2.git
synced 2024-12-29 16:29:40 +00:00
Added bounding_cube() and minkowski_difference()
This commit is contained in:
parent
e21a384ae1
commit
197167225d
2 changed files with 87 additions and 3 deletions
|
@ -9,9 +9,61 @@
|
||||||
|
|
||||||
|
|
||||||
//////////////////////////////////////////////////////////////////////
|
//////////////////////////////////////////////////////////////////////
|
||||||
// Section: Halving Mutators
|
// Section: Volume Division Mutators
|
||||||
//////////////////////////////////////////////////////////////////////
|
//////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
// Module: bounding_box()
|
||||||
|
// Usage:
|
||||||
|
// bounding_box() ...
|
||||||
|
// Description:
|
||||||
|
// Returns an axis-aligned cube shape that exactly contains all the 3D children given.
|
||||||
|
// Arguments:
|
||||||
|
// excess = The amount that the bounding box should be larger than needed to bound the children, in each axis.
|
||||||
|
// Example:
|
||||||
|
// #bounding_box() {
|
||||||
|
// translate([10,8,4]) cube(5);
|
||||||
|
// translate([3,0,12]) cube(2);
|
||||||
|
// }
|
||||||
|
// translate([10,8,4]) cube(5);
|
||||||
|
// translate([3,0,12]) cube(2);
|
||||||
|
module bounding_box(excess=0) {
|
||||||
|
xs = excess>0? excess : 1;
|
||||||
|
// a 3D approx. of the children projection on X axis
|
||||||
|
module _xProjection()
|
||||||
|
linear_extrude(xs, center=true)
|
||||||
|
hull()
|
||||||
|
projection()
|
||||||
|
rotate([90,0,0])
|
||||||
|
linear_extrude(xs, center=true)
|
||||||
|
projection()
|
||||||
|
children();
|
||||||
|
|
||||||
|
// a bounding box with an offset of 1 in all axis
|
||||||
|
module _oversize_bbox() {
|
||||||
|
minkowski() {
|
||||||
|
_xProjection() children(); // x axis
|
||||||
|
rotate(-90) _xProjection() rotate(90) children(); // y axis
|
||||||
|
rotate([0,-90,0]) _xProjection() rotate([0,90,0]) children(); // z axis
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// offset children() (a cube) by -1 in all axis
|
||||||
|
module _shrink_cube() {
|
||||||
|
intersection() {
|
||||||
|
translate([ 1, 1, 1]) children();
|
||||||
|
translate([-1,-1,-1]) children();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
render(convexity=2)
|
||||||
|
if (excess>0) {
|
||||||
|
_oversize_bbox() children();
|
||||||
|
} else {
|
||||||
|
_shrink_cube() _oversize_bbox() children();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
// Module: half_of()
|
// Module: half_of()
|
||||||
//
|
//
|
||||||
// Usage:
|
// Usage:
|
||||||
|
@ -445,7 +497,6 @@ module offset3d(r=1, size=100, convexity=10) {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
// Module: round2d()
|
// Module: round2d()
|
||||||
// Usage:
|
// Usage:
|
||||||
// round2d(r) ...
|
// round2d(r) ...
|
||||||
|
@ -512,6 +563,39 @@ module shell2d(thickness, or=0, ir=0, fill=0, round=0)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// Module: minkowski_difference()
|
||||||
|
// Usage:
|
||||||
|
// minkowski_difference() { base_shape(); diff_shape(); ... }
|
||||||
|
// Description:
|
||||||
|
// Takes a 3D base shape and one or more 3D diff shapes, carves out the diff shapes from the
|
||||||
|
// surface of the base shape, in a way complementary to how `minkowski()` unions shapes to the
|
||||||
|
// surface of its base shape.
|
||||||
|
// Example:
|
||||||
|
// minkowski_difference() {
|
||||||
|
// union() {
|
||||||
|
// cube([120,70,70], center=true);
|
||||||
|
// cube([70,120,70], center=true);
|
||||||
|
// cube([70,70,120], center=true);
|
||||||
|
// }
|
||||||
|
// sphere(r=10);
|
||||||
|
// }
|
||||||
|
module minkowski_difference() {
|
||||||
|
difference() {
|
||||||
|
bounding_box(excess=0) children(0);
|
||||||
|
render(convexity=10) {
|
||||||
|
minkowski() {
|
||||||
|
difference() {
|
||||||
|
bounding_box(excess=1) children(0);
|
||||||
|
children(0);
|
||||||
|
}
|
||||||
|
for (i=[1,1,$children-1]) children(i);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
//////////////////////////////////////////////////////////////////////
|
//////////////////////////////////////////////////////////////////////
|
||||||
// Section: Colors
|
// Section: Colors
|
||||||
//////////////////////////////////////////////////////////////////////
|
//////////////////////////////////////////////////////////////////////
|
||||||
|
|
|
@ -8,7 +8,7 @@
|
||||||
//////////////////////////////////////////////////////////////////////
|
//////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
|
||||||
BOSL_VERSION = [2,0,421];
|
BOSL_VERSION = [2,0,422];
|
||||||
|
|
||||||
|
|
||||||
// Section: BOSL Library Version Functions
|
// Section: BOSL Library Version Functions
|
||||||
|
|
Loading…
Reference in a new issue