From 372b3ae857fd998498055ca6ba5935cf3af51038 Mon Sep 17 00:00:00 2001 From: Adrian Mariano <avm4@cornell.edu> Date: Sat, 19 Mar 2022 22:16:50 -0400 Subject: [PATCH] Add support for different color schemes with color_this() --- attachments.scad | 43 +++++++++++++++++++++++++++++++++++-------- 1 file changed, 35 insertions(+), 8 deletions(-) diff --git a/attachments.scad b/attachments.scad index 6210dab..5a7f8d6 100644 --- a/attachments.scad +++ b/attachments.scad @@ -17,8 +17,27 @@ $tags = ""; $overlap = 0; $color = undef;//"yellow"; -$save_color = undef; // Saved color to revert back for children -_DEFAULT_COLOR = "#f9d72c"; // Maybe the same as "gold" +$save_color = undef; // Saved color to revert back for children +$color_scheme = "cornfield"; // Default color scheme + +_default_colors = [ + ["cornfield", "#f9d72c"], + ["metallic", "#ddddff"], + ["sunset", "#ffaaaa"], + ["starnight", "#ffffe0"], + ["beforedawn", "#cccccc"], + ["nature", "#16a085"], + ["deepocean", "#eeeeee"], + ["solarized", "#b58800"], + ["tomorrow", "#4271ae"], + ["tomorrow night", "#81a2be"], + ["monotone", "#f9d72c"] +]; + +function _default_color() = + let(ind = search([downcase($color_scheme)], _default_colors, 1, 0)) + assert(ind[0]!=[], str("$color_scheme set to unknown value ",$color_scheme)) + _default_colors[ind[0]][1]; $attach_to = undef; $attach_anchor = [CENTER, CENTER, UP, 0]; @@ -830,9 +849,9 @@ module hulling(a) // attach(TOP,BOT) cuboid([6,6,3]) // recolor("cyan")attach(TOP,BOT) cuboid([5,5,2.5]) // attach(TOP,BOT) cuboid([4,4,2]); -module recolor(c=_DEFAULT_COLOR) +module recolor(c) { - $color = c; + $color = default(c,_default_color()); children(); } @@ -845,11 +864,19 @@ module recolor(c=_DEFAULT_COLOR) // Description: // Sets the color for children at one level, reverting to the previous color for further descendants. // This works only with attachables and you cannot have any color() modules above it in any parents, -// only recolor() or other color_this() modules. +// only recolor() or other color_this() modules. +// . +// This module works by saving the current color, which means it needs to know the current color. If you have +// not yet set the color with {{recolor()}} then the current color is the default color. +// OpenSCAD provides no method for learning the value of the default color, so if you don't use the default +// "cornfield" color scheme you should set $color_scheme to the color scheme you are using. +// Alternatively, always use {{recolor()}} on a parent before using color_this(). +// . // For a more step-by-step explanation of attachments, see the [[Attachments Tutorial|Tutorial-Attachments]]. // Arguments: // c = Color name or RGBA vector. Default: the standard OpenSCAD yellow // Example: +// $color_scheme = "cornfield"; // Change this if necessary // cuboid([10,10,5]) // color_this("green")attach(TOP,BOT) cuboid([9,9,4.5]) // attach(TOP,BOT) cuboid([8,8,4]) @@ -857,10 +884,10 @@ module recolor(c=_DEFAULT_COLOR) // attach(TOP,BOT) cuboid([6,6,3]) // color_this("cyan")attach(TOP,BOT) cuboid([5,5,2.5]) // attach(TOP,BOT) cuboid([4,4,2]); -module color_this(c=_DEFAULT_COLOR) +module color_this(c) { - $save_color=default($color, _DEFAULT_COLOR); - $color=c; + $save_color=default($color, _default_color()); + $color=default(c, _default_color()); children(); }