mirror of
https://github.com/BelfrySCAD/BOSL2.git
synced 2025-01-01 09:49:45 +00:00
Fix diff/intersect when some tags are hidden
When the first operand is hidden, some strange things happen, so this guards against that. Example: include <BOSL2/std.scad> part_to_show = "A"; // [A,B,C] part_to_hide = "B"; // [A,B,C] module my_part() { tags("A") left(10) cuboid(10); tags("B") diff("neg", "B") right(10) { cuboid(10); cyl(d=10, h=10, $tags="neg"); } tags("C") fwd(10) cuboid(10); } show(part_to_show) hide(part_to_hide) my_part(); Tag "B" here acts very strangely when it is supposed to be hidden, and never hides completely.
This commit is contained in:
parent
92d9c49b90
commit
e5a0a3cad7
1 changed files with 22 additions and 16 deletions
|
@ -1235,17 +1235,20 @@ module show(tags="")
|
||||||
// }
|
// }
|
||||||
module diff(neg, pos=undef, keep=undef)
|
module diff(neg, pos=undef, keep=undef)
|
||||||
{
|
{
|
||||||
difference() {
|
// Don't perform the operation if the current tags are hidden
|
||||||
if (pos != undef) {
|
if (attachment_is_shown($tags)) {
|
||||||
show(pos) children();
|
difference() {
|
||||||
} else {
|
if (pos != undef) {
|
||||||
if (keep == undef) {
|
show(pos) children();
|
||||||
hide(neg) children();
|
|
||||||
} else {
|
} else {
|
||||||
hide(str(neg," ",keep)) children();
|
if (keep == undef) {
|
||||||
|
hide(neg) children();
|
||||||
|
} else {
|
||||||
|
hide(str(neg," ",keep)) children();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
show(neg) children();
|
||||||
}
|
}
|
||||||
show(neg) children();
|
|
||||||
}
|
}
|
||||||
if (keep!=undef) {
|
if (keep!=undef) {
|
||||||
show(keep) children();
|
show(keep) children();
|
||||||
|
@ -1280,17 +1283,20 @@ module diff(neg, pos=undef, keep=undef)
|
||||||
// }
|
// }
|
||||||
module intersect(a, b=undef, keep=undef)
|
module intersect(a, b=undef, keep=undef)
|
||||||
{
|
{
|
||||||
intersection() {
|
// Don't perform the operation if the current tags are hidden
|
||||||
if (b != undef) {
|
if (attachment_is_shown($tags)) {
|
||||||
show(b) children();
|
intersection() {
|
||||||
} else {
|
if (b != undef) {
|
||||||
if (keep == undef) {
|
show(b) children();
|
||||||
hide(a) children();
|
|
||||||
} else {
|
} else {
|
||||||
hide(str(a," ",keep)) children();
|
if (keep == undef) {
|
||||||
|
hide(a) children();
|
||||||
|
} else {
|
||||||
|
hide(str(a," ",keep)) children();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
show(a) children();
|
||||||
}
|
}
|
||||||
show(a) children();
|
|
||||||
}
|
}
|
||||||
if (keep!=undef) {
|
if (keep!=undef) {
|
||||||
show(keep) children();
|
show(keep) children();
|
||||||
|
|
Loading…
Reference in a new issue