mirror of https://github.com/vitalif/openscad
Change behavior of intersection: intersecting something with an empty object will be empty
parent
1fc52f8cd4
commit
bf0d9edf38
|
@ -61,6 +61,11 @@ void CGALEvaluator::process(CGAL_Nef_polyhedron &target, const CGAL_Nef_polyhedr
|
|||
if (target.dim != 2 && target.dim != 3) {
|
||||
assert(false && "Dimension of Nef polyhedron must be 2 or 3");
|
||||
}
|
||||
// Intersecting something with nothing results in nothing
|
||||
if (src.isEmpty() && op == CGE_INTERSECTION) {
|
||||
target = src;
|
||||
return;
|
||||
}
|
||||
if (src.isEmpty()) return; // Empty polyhedron. This can happen for e.g. square([0,0])
|
||||
if (target.isEmpty() && op != CGE_UNION) return; // empty op <something> => empty
|
||||
if (target.dim != src.dim) return; // If someone tries to e.g. union 2d and 3d objects
|
||||
|
|
|
@ -39,3 +39,22 @@ translate([-12,12,0]) intersection() {
|
|||
cube([10,10,10], center=true);
|
||||
translate([0,-9.99,-9.99]) cube([10,10,10], center=true);
|
||||
}
|
||||
|
||||
// Intersecting something with nothing
|
||||
translate([0,-12,0]) intersection() {
|
||||
cylinder(r=4, h=5, center=true);
|
||||
cube(0);
|
||||
}
|
||||
|
||||
// Intersecting 2D with 3D
|
||||
translate([12,-12,0]) intersection() {
|
||||
cube([5,5,5], center=true);
|
||||
circle(r=2);
|
||||
}
|
||||
|
||||
// Non-geometry (echo) statement as first child should be ignored
|
||||
translate([24,-12,0]) intersection() {
|
||||
echo("difference-tests");
|
||||
cube([5,5,5], center=true);
|
||||
cylinder(r=2, h=20, center=true);
|
||||
}
|
||||
|
|
Binary file not shown.
Before Width: | Height: | Size: 7.3 KiB After Width: | Height: | Size: 7.7 KiB |
|
@ -54,4 +54,23 @@ group() {
|
|||
}
|
||||
}
|
||||
}
|
||||
multmatrix([[1, 0, 0, 0], [0, 1, 0, -12], [0, 0, 1, 0], [0, 0, 0, 1]]) {
|
||||
intersection() {
|
||||
cylinder($fn = 0, $fa = 12, $fs = 2, h = 5, r1 = 4, r2 = 4, center = true);
|
||||
cube(size = [0, 0, 0], center = false);
|
||||
}
|
||||
}
|
||||
multmatrix([[1, 0, 0, 12], [0, 1, 0, -12], [0, 0, 1, 0], [0, 0, 0, 1]]) {
|
||||
intersection() {
|
||||
cube(size = [5, 5, 5], center = true);
|
||||
circle($fn = 0, $fa = 12, $fs = 2, r = 2);
|
||||
}
|
||||
}
|
||||
multmatrix([[1, 0, 0, 24], [0, 1, 0, -12], [0, 0, 1, 0], [0, 0, 0, 1]]) {
|
||||
intersection() {
|
||||
group();
|
||||
cube(size = [5, 5, 5], center = true);
|
||||
cylinder($fn = 0, $fa = 12, $fs = 2, h = 20, r1 = 2, r2 = 2, center = true);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
Binary file not shown.
Before Width: | Height: | Size: 7.1 KiB After Width: | Height: | Size: 7.3 KiB |
Binary file not shown.
Before Width: | Height: | Size: 11 KiB After Width: | Height: | Size: 12 KiB |
Loading…
Reference in New Issue