Convered scoop param from boolean to real

Scoop parameter can now be any real number. Follows the same logic as before, where false (now 0) means no scoop, and true (now 1) means regular scoop. Any real number will scale the scoop value to preference.
This commit is contained in:
K Hodson 2023-02-14 09:55:29 -07:00
parent 7430123683
commit 831c7d6bf1
2 changed files with 17 additions and 18 deletions

View file

@ -26,7 +26,6 @@ https://github.com/kennetek/gridfinity-rebuilt-openscad
/* [Setup Parameters] */
$fa = 8;
$fs = 0.25;
$scoop_percentage = 100;
/* [General Settings] */
// number of bases along x-axis
@ -45,8 +44,6 @@ divx = 1;
divy = 1;
/* [Toggles] */
// internal fillet for easy part removal
enable_scoop = true;
// snap gridz height to nearest 7mm increment
enable_zsnap = false;
// enable upper lip for stacking other bins
@ -57,6 +54,8 @@ enable_lip = true;
gridz_define = 0; // [0:gridz is the height of bins in units of 7mm increments - Zack's method,1:gridz is the internal height in millimeters, 2:gridz is the overall external height of the bin in millimeters]
// the type of tabs
style_tab = 1; //[0:Full,1:Auto,2:Left,3:Center,4:Right,5:None]
// scoop weight percentage. 0 disables scoop, 1 is regualar scoop. Any real number will scale the effective scoop.
scoop = 1;
// overrides internal block height of bin (for solid containers). Leave zero for default height. Units: mm
height_internal = 0;
@ -72,14 +71,14 @@ div_base_y = 0;
// ===== IMPLEMENTATION ===== //
color("tomato") {
gridfinityInit(gridx, gridy, height(gridz, gridz_define, enable_lip, enable_zsnap), height_internal, length) {
cutEqual(n_divx = divx, n_divy = divy, style_tab = style_tab, enable_scoop = enable_scoop);
}
gridfinityBase(gridx, gridy, length, div_base_x, div_base_y, style_hole);
}
//color("tomato") {
//gridfinityInit(gridx, gridy, height(gridz, gridz_define, enable_lip, enable_zsnap), height_internal, length) {
//
// cutEqual(n_divx = divx, n_divy = divy, style_tab = style_tab, scoop_weight = scoop);
//}
//gridfinityBase(gridx, gridy, length, div_base_x, div_base_y, style_hole);
//
//}
// ===== EXAMPLES ===== //

View file

@ -15,11 +15,11 @@ function height (z,d=0,l=true,s=true) = (s?((abs(hf(z,d,l))%7==0)?hf(z,d,l):hf(z
// n_divy: number of y compartments (ideally, coprime w/ gridy)
// set n_div values to 0 for a solid bin
// style_tab: tab style for all compartments. see cut()
// enable_scoop: scoop toggle for all compartments. see cut()
module cutEqual(n_divx=1, n_divy=1, style_tab=1, enable_scoop=true) {
// scoop_weight: scoop toggle for all compartments. see cut()
module cutEqual(n_divx=1, n_divy=1, style_tab=1, scoop_weight=1) {
for (i = [1:n_divx])
for (j = [1:n_divy])
cut((i-1)*$gxx/n_divx,(j-1)*$gyy/n_divy, $gxx/n_divx, $gyy/n_divy, style_tab, enable_scoop);
cut((i-1)*$gxx/n_divx,(j-1)*$gyy/n_divy, $gxx/n_divx, $gyy/n_divy, style_tab, scoop_weight);
}
// initialize gridfinity
@ -53,7 +53,7 @@ module gridfinityInit(gx, gy, h, h0 = 0, l) {
// 0:full, 1:auto, 2:left, 3:center, 4:right, 5:none
// Automatic alignment will use left tabs for bins on the left edge, right tabs for bins on the right edge, and center tabs everywhere else.
// s: toggle the rounded back corner that allows for easy removal
module cut(x=0, y=0, w=1, h=1, t=1, s=true) {
module cut(x=0, y=0, w=1, h=1, t=1, s=1) {
translate([0,0,-$dh-h_base])
cut_move(x,y,w,h)
block_cutter(clp(x,0,$gxx), clp(y,0,$gyy), clp(w,0,$gxx-x), clp(h,0,$gyy-y), t, s);
@ -232,7 +232,7 @@ module block_cutter(x,y,w,h,t,s) {
xlen = w*($gxx*length+d_magic)/$gxx-d_div;
height = $dh;
extent = (s && ycutfirst ? d_wall2-d_wall-d_clear : 0);
extent = (abs(s) > 0 && ycutfirst ? d_wall2-d_wall-d_clear : 0);
tab = (zsmall || t == 5) ? (ycutlast?v_len_lip:0) : v_len_tab;
ang = (zsmall || t == 5) ? (ycutlast?v_ang_lip:0) : v_ang_tab;
cut = (zsmall || t == 5) ? (ycutlast?v_cut_lip:0) : v_cut_tab;
@ -298,7 +298,7 @@ module block_cutter(x,y,w,h,t,s) {
if (!((zsmall || t == 5) && !ycutlast))
profile_cutter_tab(height-h_bot, tab, ang);
if (!s && y == 0)
if (!(abs(s) > 0)&& y == 0)
translate([ylen-extent,0,0])
mirror([1,0,0])
profile_cutter_tab(height-h_bot, v_len_lip, v_ang_lip);
@ -346,7 +346,7 @@ module fillet_cutter(t = 0, c = "goldenrod") {
}
module profile_cutter(h, l, s) {
scoop = s ? (length*(($dh * ($scoop_percentage / 100)-2)/7+1)/12-r_f2) : 0;
scoop = max(s*$dh/2-r_f2,0);
translate([r_f2,r_f2])
hull() {
if (l-scoop-2*r_f2 > 0)