Fixups for hulling()

This commit is contained in:
Garth Minette 2020-11-16 15:43:45 -08:00
parent 3793f69c3f
commit bf80c1193a
2 changed files with 25 additions and 25 deletions

View file

@ -1308,13 +1308,12 @@ module show(tags="")
// diff(neg, [keep]) ... // diff(neg, [keep]) ...
// diff(neg, pos, [keep]) ... // diff(neg, pos, [keep]) ...
// Description: // Description:
// If `neg` is given, takes the union of all children with tags // If `neg` is given, takes the union of all children with tags that are in `neg`, and differences
// that are in `neg`, and differences them from the union of all // them from the union of all children with tags in `pos`. If `pos` is not given, then all items in
// children with tags in `pos`. If `pos` is not given, then all // `neg` are differenced from all items not in `neg`. If `keep` is given, all children with tags in
// items in `neg` are differenced from all items not in `neg`. If // `keep` are then unioned with the result. If `keep` is not given, all children without tags in
// `keep` is given, all children with tags in `keep` are then unioned // `pos` or `neg` are then unioned with the result.
// with the result. If `keep` is not given, all children without // Cannot be used in conjunction with `intersect()` or `hulling()` on the same parent object.
// tags in `pos` or `neg` are then unioned with the result.
// Arguments: // Arguments:
// neg = String containing space delimited set of tag names of children to difference away. // neg = String containing space delimited set of tag names of children to difference away.
// pos = String containing space delimited set of tag names of children to be differenced away from. // pos = String containing space delimited set of tag names of children to be differenced away from.
@ -1367,14 +1366,12 @@ module diff(neg, pos=undef, keep=undef)
// intersect(a, [keep]) ... // intersect(a, [keep]) ...
// intersect(a, b, [keep]) ... // intersect(a, b, [keep]) ...
// Description: // Description:
// If `a` is given, takes the union of all children with tags that // If `a` is given, takes the union of all children with tags that are in `a`, and `intersection()`s
// are in `a`, and intersection()s them with the union of all // them with the union of all children with tags in `b`. If `b` is not given, then the union of all
// children with tags in `b`. If `b` is not given, then the union // items with tags in `a` are intersection()ed with the union of all items without tags in `a`. If
// of all items with tags in `a` are intersection()ed with the union // `keep` is given, then the result is unioned with all the children with tags in `keep`. If `keep`
// of all items without tags in `a`. If `keep` is given, then the // is not given, all children without tags in `a` or `b` are unioned with the result.
// result is unioned with all the children with tags in `keep`. If // Cannot be used in conjunction with `diff()` or `hulling()` on the same parent object.
// `keep` is not given, all children without tags in `a` or `b` are
// unioned with the result.
// Arguments: // Arguments:
// a = String containing space delimited set of tag names of children. // a = String containing space delimited set of tag names of children.
// b = String containing space delimited set of tag names of children. // b = String containing space delimited set of tag names of children.
@ -1413,15 +1410,14 @@ module intersect(a, b=undef, keep=undef)
// Module: hulling() // Module: hulling()
// Usage: // Usage:
// hulling(a, [keep]) ... // hulling(a) ...
// Description: // Description:
// Takes the union of all children with tags that are in `a`, and hull()s them. // If `a` is not given, then all children are `hull()`ed together.
// If `keep` is given, then the result is unioned with all the children with // If `a` is given as a string, then all children with `$tags` that are in `a` are
// tags in `keep`. If `keep` is not given, all children without tags in `a` are // `hull()`ed together and the result is then unioned with all the remaining children.
// unioned with the result. // Cannot be used in conjunction with `diff()` or `intersect()` on the same parent object.
// Arguments: // Arguments:
// a = String containing space delimited set of tag names of children. // a = String containing space delimited set of tag names of children to hull.
// keep = String containing space delimited set of tag names of children to keep whole.
// Example: // Example:
// hulling("body") // hulling("body")
// sphere(d=100, $tags="body") { // sphere(d=100, $tags="body") {
@ -1430,8 +1426,12 @@ module intersect(a, b=undef, keep=undef)
// } // }
module hulling(a) module hulling(a)
{ {
hull() show(a) children(); if (is_undef(a)) {
children(); hull() children();
} else {
hull() show(a) children();
children();
}
} }

View file

@ -8,7 +8,7 @@
////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////
BOSL_VERSION = [2,0,464]; BOSL_VERSION = [2,0,465];
// Section: BOSL Library Version Functions // Section: BOSL Library Version Functions