From 3793f69c3f54ff5d3c8d95782cc67239fac1aed9 Mon Sep 17 00:00:00 2001 From: Garth Minette Date: Mon, 16 Nov 2020 15:32:26 -0800 Subject: [PATCH 1/2] Added mod_indent() and mod_trace() --- debug.scad | 42 ++++++++++++++++++++++++++++++++++++++++-- version.scad | 2 +- 2 files changed, 41 insertions(+), 3 deletions(-) diff --git a/debug.scad b/debug.scad index ada55e8..545e25e 100644 --- a/debug.scad +++ b/debug.scad @@ -254,11 +254,19 @@ module debug_polyhedron(points, faces, convexity=10, txtsize=1, disabled=false) // Function: standard_anchors() +// Usage: +// anchs = standard_anchors(); // Description: // Return the vectors for all standard anchors. -function standard_anchors() = [ +// Arguments: +// two_d = If true, returns only the anchors where the Z component is 0. Default: false +function standard_anchors(two_d=false) = [ for ( - zv = [TOP, CENTER, BOTTOM], + zv = [ + if (!two_d) TOP, + CENTER, + if (!two_d) BOTTOM + ], yv = [FRONT, CENTER, BACK], xv = [LEFT, CENTER, RIGHT] ) xv+yv+zv @@ -448,5 +456,35 @@ module ruler(length=100, width=undef, thickness=1, depth=3, labels=false, pipsca } +// Function: mod_indent() +// Usage: +// str = mod_indent(); +// Description: +// Returns a string that is the total indentation for the module level you are at. +// Arguments: +// indent = The string to indent each level by. Default: " " (Two spaces) +// Example: +// x = echo(str(mod_indent(), parent_module(0))); +function mod_indent(indent=" ") = + str_join([for (i=[1:1:$parent_modules-1]) indent]); + + +// Function: mod_trace() +// Usage: +// str = mod_trace(, ); +// Description: +// Returns a string that shows the current module and its parents, indented for each unprinted parent module. +// Arguments: +// levs = This is the number of levels to print the names of. Prints the N most nested module names. Default: 2 +// indent = The string to indent each level by. Default: " " (Two spaces) +// modsep = Multiple module names will be separated by this string. Default: "->" +// Example: +// x = echo(mod_trace()); +function mod_trace(levs=2, indent=" ", modsep="->") = + str( + str_join([for (i=[1:1:$parent_modules+1-levs]) indent]), + str_join([for (i=[min(levs-1,$parent_modules-1):-1:0]) parent_module(i)], modsep) + ); + // vim: expandtab tabstop=4 shiftwidth=4 softtabstop=4 nowrap diff --git a/version.scad b/version.scad index a676d9a..c6d9bde 100644 --- a/version.scad +++ b/version.scad @@ -8,7 +8,7 @@ ////////////////////////////////////////////////////////////////////// -BOSL_VERSION = [2,0,463]; +BOSL_VERSION = [2,0,464]; // Section: BOSL Library Version Functions From bf80c1193a9f7bc09bce448c328d0ef140f32bc0 Mon Sep 17 00:00:00 2001 From: Garth Minette Date: Mon, 16 Nov 2020 15:43:45 -0800 Subject: [PATCH 2/2] Fixups for hulling() --- attachments.scad | 48 ++++++++++++++++++++++++------------------------ version.scad | 2 +- 2 files changed, 25 insertions(+), 25 deletions(-) diff --git a/attachments.scad b/attachments.scad index 36ad4b3..112f173 100644 --- a/attachments.scad +++ b/attachments.scad @@ -1308,13 +1308,12 @@ module show(tags="") // diff(neg, [keep]) ... // diff(neg, pos, [keep]) ... // Description: -// If `neg` is given, takes the union of all children with tags -// that are in `neg`, and differences them from the union of all -// children with tags in `pos`. If `pos` is not given, then all -// items in `neg` are differenced from all items not in `neg`. If -// `keep` is given, all children with tags in `keep` are then unioned -// with the result. If `keep` is not given, all children without -// tags in `pos` or `neg` are then unioned with the result. +// If `neg` is given, takes the union of all children with tags that are in `neg`, and differences +// them from the union of all children with tags in `pos`. If `pos` is not given, then all items in +// `neg` are differenced from all items not in `neg`. If `keep` is given, all children with tags in +// `keep` are then unioned with the result. If `keep` is not given, all children without tags in +// `pos` or `neg` are then unioned with the result. +// Cannot be used in conjunction with `intersect()` or `hulling()` on the same parent object. // Arguments: // 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. @@ -1367,14 +1366,12 @@ module diff(neg, pos=undef, keep=undef) // intersect(a, [keep]) ... // intersect(a, b, [keep]) ... // Description: -// If `a` is given, takes the union of all children with tags that -// are in `a`, and intersection()s them with the union of all -// children with tags in `b`. If `b` is not given, then the union -// of all items with tags in `a` are intersection()ed with the union -// of all items without tags in `a`. If `keep` is given, then the -// result is unioned with all the children with tags in `keep`. If -// `keep` is not given, all children without tags in `a` or `b` are -// unioned with the result. +// If `a` is given, takes the union of all children with tags that are in `a`, and `intersection()`s +// them with the union of all children with tags in `b`. If `b` is not given, then the union of all +// items with tags in `a` are intersection()ed with the union of all items without tags in `a`. If +// `keep` is given, then the result is unioned with all the children with tags in `keep`. If `keep` +// is not given, all children without tags in `a` or `b` are unioned with the result. +// Cannot be used in conjunction with `diff()` or `hulling()` on the same parent object. // Arguments: // a = 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() // Usage: -// hulling(a, [keep]) ... +// hulling(a) ... // Description: -// Takes the union of all children with tags that are in `a`, and hull()s them. -// If `keep` is given, then the result is unioned with all the children with -// tags in `keep`. If `keep` is not given, all children without tags in `a` are -// unioned with the result. +// If `a` is not given, then all children are `hull()`ed together. +// If `a` is given as a string, then all children with `$tags` that are in `a` are +// `hull()`ed together and the result is then unioned with all the remaining children. +// Cannot be used in conjunction with `diff()` or `intersect()` on the same parent object. // Arguments: -// a = String containing space delimited set of tag names of children. -// keep = String containing space delimited set of tag names of children to keep whole. +// a = String containing space delimited set of tag names of children to hull. // Example: // hulling("body") // sphere(d=100, $tags="body") { @@ -1430,8 +1426,12 @@ module intersect(a, b=undef, keep=undef) // } module hulling(a) { - hull() show(a) children(); - children(); + if (is_undef(a)) { + hull() children(); + } else { + hull() show(a) children(); + children(); + } } diff --git a/version.scad b/version.scad index c6d9bde..f0e7380 100644 --- a/version.scad +++ b/version.scad @@ -8,7 +8,7 @@ ////////////////////////////////////////////////////////////////////// -BOSL_VERSION = [2,0,464]; +BOSL_VERSION = [2,0,465]; // Section: BOSL Library Version Functions