From a92c740c0d7fba24e3a936ab4b5b45275f9019d9 Mon Sep 17 00:00:00 2001 From: Jannes Magnusson Date: Mon, 23 Oct 2023 21:38:02 +0200 Subject: [PATCH 1/5] add cylindrical cutouts --- gridfinity-rebuilt-bins.scad | 42 ++++++++++++++++++++++++++++-------- 1 file changed, 33 insertions(+), 9 deletions(-) diff --git a/gridfinity-rebuilt-bins.scad b/gridfinity-rebuilt-bins.scad index fc18129..3986c8a 100644 --- a/gridfinity-rebuilt-bins.scad +++ b/gridfinity-rebuilt-bins.scad @@ -29,17 +29,29 @@ $fs = 0.25; /* [General Settings] */ // number of bases along x-axis -gridx = 5; +gridx = 3; // number of bases along y-axis -gridy = 5; +gridy = 2; // bin height. See bin height information and "gridz_define" below. gridz = 6; -/* [Compartments] */ +/* [Linear Compartments] */ // number of X Divisions (set to zero to have solid bin) -divx = 1; -// number of y Divisions (set to zero to have solid bin) -divy = 1; +divx = 0; +// number of Y Divisions (set to zero to have solid bin) +divy = 0; + +/* [Cylindrical Compartments] */ +// number of cylindrical X Divisions (mutually exclusive to Linear Compartments) +cdivx = 0; +// number of cylindrical Y Divisions (mutually exclusive to Linear Compartments) +cdivy = 0; +// orientation +c_orientation = 2; // [0: x direction, 1: y direction, 2: z direction] +// radius of cylindrical cut outs +r = 10; +// cylinder height +ch = 10; /* [Height] */ // determine what the variable "gridz" applies to based on your use case @@ -73,11 +85,23 @@ div_base_y = 0; color("tomato") { gridfinityInit(gridx, gridy, height(gridz, gridz_define, style_lip, enable_zsnap), height_internal) { - if (divx > 0 && divy > 0) - cutEqual(n_divx = divx, n_divy = divy, style_tab = style_tab, scoop_weight = scoop); + if (divx > 0 && divy > 0) { + + cutEqual(n_divx = divx, n_divy = divy, style_tab = style_tab, scoop_weight = scoop); + + } else if (cdivx > 0 && cdivy > 0) { + rotation = (c_orientation == 0) + ? [0,90,0] + : (c_orientation == 1) + ? [90,0,0] + : [0,0,0]; + cut_move(x=0, y=0, w=gridx, h=gridy) + pattern_linear(x=cdivx, y=cdivy, sx=42*gridx/cdivx, sy=42*gridy/cdivy) + rotate(rotation) + cylinder(r=r, h=ch, center=true); + } } gridfinityBase(gridx, gridy, l_grid, div_base_x, div_base_y, style_hole, only_corners=only_corners); - } From a8066f511e51af1f1ed4102b991c9e713b01b7fe Mon Sep 17 00:00:00 2001 From: Jannes Magnusson Date: Wed, 25 Oct 2023 20:58:55 +0200 Subject: [PATCH 2/5] add spacing for cylinders --- gridfinity-rebuilt-bins.scad | 28 +++++++++++++++++++++------- 1 file changed, 21 insertions(+), 7 deletions(-) diff --git a/gridfinity-rebuilt-bins.scad b/gridfinity-rebuilt-bins.scad index 3986c8a..bf80489 100644 --- a/gridfinity-rebuilt-bins.scad +++ b/gridfinity-rebuilt-bins.scad @@ -48,10 +48,12 @@ cdivx = 0; cdivy = 0; // orientation c_orientation = 2; // [0: x direction, 1: y direction, 2: z direction] -// radius of cylindrical cut outs -r = 10; +// diameter of cylindrical cut outs +cd = 10; // cylinder height -ch = 10; +ch = 1; +// spacing to lid +c_depth = 1; /* [Height] */ // determine what the variable "gridz" applies to based on your use case @@ -95,10 +97,22 @@ gridfinityInit(gridx, gridy, height(gridz, gridz_define, style_lip, enable_zsnap : (c_orientation == 1) ? [90,0,0] : [0,0,0]; - cut_move(x=0, y=0, w=gridx, h=gridy) - pattern_linear(x=cdivx, y=cdivy, sx=42*gridx/cdivx, sy=42*gridy/cdivy) - rotate(rotation) - cylinder(r=r, h=ch, center=true); + + gridx_mm = gridx*l_grid; + gridy_mm = gridy*l_grid; + padding = 2; + cutout_x = [gridx_mm-d_wall*2]; + cutout_y = [gridy_mm-d_wall*2]; + + cut_move(x=0, y=0, w=gridx, h=gridy) { + translate([0,0,-c_depth]) { + rounded_rectangle(cutout_x, cutout_y, c_depth*2, r_base); + + pattern_linear(x=cdivx, y=cdivy, sx=(gridx_mm - 2)/cdivx, sy=(gridy_mm - 2)/cdivy) + rotate(rotation) + cylinder(r=cd/2, h=ch*2, center=true); + } + } } } gridfinityBase(gridx, gridy, l_grid, div_base_x, div_base_y, style_hole, only_corners=only_corners); From 41cdc2a46d9859a923e04ad61899fbf724436a8f Mon Sep 17 00:00:00 2001 From: Jannes Magnusson Date: Mon, 23 Oct 2023 21:38:02 +0200 Subject: [PATCH 3/5] add cylindrical cutouts --- gridfinity-rebuilt-bins.scad | 42 ++++++++++++++++++++++++++++-------- 1 file changed, 33 insertions(+), 9 deletions(-) diff --git a/gridfinity-rebuilt-bins.scad b/gridfinity-rebuilt-bins.scad index de9dc1e..c5a1694 100644 --- a/gridfinity-rebuilt-bins.scad +++ b/gridfinity-rebuilt-bins.scad @@ -29,17 +29,29 @@ $fs = 0.25; /* [General Settings] */ // number of bases along x-axis -gridx = 5; +gridx = 3; // number of bases along y-axis -gridy = 5; +gridy = 2; // bin height. See bin height information and "gridz_define" below. gridz = 6; -/* [Compartments] */ +/* [Linear Compartments] */ // number of X Divisions (set to zero to have solid bin) -divx = 1; -// number of y Divisions (set to zero to have solid bin) -divy = 1; +divx = 0; +// number of Y Divisions (set to zero to have solid bin) +divy = 0; + +/* [Cylindrical Compartments] */ +// number of cylindrical X Divisions (mutually exclusive to Linear Compartments) +cdivx = 0; +// number of cylindrical Y Divisions (mutually exclusive to Linear Compartments) +cdivy = 0; +// orientation +c_orientation = 2; // [0: x direction, 1: y direction, 2: z direction] +// radius of cylindrical cut outs +r = 10; +// cylinder height +ch = 10; /* [Height] */ // determine what the variable "gridz" applies to based on your use case @@ -73,11 +85,23 @@ div_base_y = 0; color("tomato") { gridfinityInit(gridx, gridy, height(gridz, gridz_define, style_lip, enable_zsnap), height_internal) { - if (divx > 0 && divy > 0) - cutEqual(n_divx = divx, n_divy = divy, style_tab = style_tab, scoop_weight = scoop); + if (divx > 0 && divy > 0) { + + cutEqual(n_divx = divx, n_divy = divy, style_tab = style_tab, scoop_weight = scoop); + + } else if (cdivx > 0 && cdivy > 0) { + rotation = (c_orientation == 0) + ? [0,90,0] + : (c_orientation == 1) + ? [90,0,0] + : [0,0,0]; + cut_move(x=0, y=0, w=gridx, h=gridy) + pattern_linear(x=cdivx, y=cdivy, sx=42*gridx/cdivx, sy=42*gridy/cdivy) + rotate(rotation) + cylinder(r=r, h=ch, center=true); + } } gridfinityBase(gridx, gridy, l_grid, div_base_x, div_base_y, style_hole, only_corners=only_corners); - } From 3324c6b2a7b5089d4a06bc5fadc919b48b756741 Mon Sep 17 00:00:00 2001 From: Jannes Magnusson Date: Wed, 25 Oct 2023 20:58:55 +0200 Subject: [PATCH 4/5] add spacing for cylinders --- gridfinity-rebuilt-bins.scad | 28 +++++++++++++++++++++------- 1 file changed, 21 insertions(+), 7 deletions(-) diff --git a/gridfinity-rebuilt-bins.scad b/gridfinity-rebuilt-bins.scad index c5a1694..4c4e3f2 100644 --- a/gridfinity-rebuilt-bins.scad +++ b/gridfinity-rebuilt-bins.scad @@ -48,10 +48,12 @@ cdivx = 0; cdivy = 0; // orientation c_orientation = 2; // [0: x direction, 1: y direction, 2: z direction] -// radius of cylindrical cut outs -r = 10; +// diameter of cylindrical cut outs +cd = 10; // cylinder height -ch = 10; +ch = 1; +// spacing to lid +c_depth = 1; /* [Height] */ // determine what the variable "gridz" applies to based on your use case @@ -95,10 +97,22 @@ gridfinityInit(gridx, gridy, height(gridz, gridz_define, style_lip, enable_zsnap : (c_orientation == 1) ? [90,0,0] : [0,0,0]; - cut_move(x=0, y=0, w=gridx, h=gridy) - pattern_linear(x=cdivx, y=cdivy, sx=42*gridx/cdivx, sy=42*gridy/cdivy) - rotate(rotation) - cylinder(r=r, h=ch, center=true); + + gridx_mm = gridx*l_grid; + gridy_mm = gridy*l_grid; + padding = 2; + cutout_x = [gridx_mm-d_wall*2]; + cutout_y = [gridy_mm-d_wall*2]; + + cut_move(x=0, y=0, w=gridx, h=gridy) { + translate([0,0,-c_depth]) { + rounded_rectangle(cutout_x, cutout_y, c_depth*2, r_base); + + pattern_linear(x=cdivx, y=cdivy, sx=(gridx_mm - 2)/cdivx, sy=(gridy_mm - 2)/cdivy) + rotate(rotation) + cylinder(r=cd/2, h=ch*2, center=true); + } + } } } gridfinityBase(gridx, gridy, l_grid, div_base_x, div_base_y, style_hole, only_corners=only_corners); From 6202c73b213f77c25e5b4e1be63015756b2e2517 Mon Sep 17 00:00:00 2001 From: Jannes Date: Tue, 21 Nov 2023 21:41:08 +0100 Subject: [PATCH 5/5] move cylindrical cutouts to utility --- gridfinity-rebuilt-bins.scad | 21 +------------------- gridfinity-rebuilt-utility.scad | 35 ++++++++++++++++++++++++++++++++- 2 files changed, 35 insertions(+), 21 deletions(-) diff --git a/gridfinity-rebuilt-bins.scad b/gridfinity-rebuilt-bins.scad index 4c4e3f2..51fd2d4 100644 --- a/gridfinity-rebuilt-bins.scad +++ b/gridfinity-rebuilt-bins.scad @@ -92,27 +92,8 @@ gridfinityInit(gridx, gridy, height(gridz, gridz_define, style_lip, enable_zsnap cutEqual(n_divx = divx, n_divy = divy, style_tab = style_tab, scoop_weight = scoop); } else if (cdivx > 0 && cdivy > 0) { - rotation = (c_orientation == 0) - ? [0,90,0] - : (c_orientation == 1) - ? [90,0,0] - : [0,0,0]; - gridx_mm = gridx*l_grid; - gridy_mm = gridy*l_grid; - padding = 2; - cutout_x = [gridx_mm-d_wall*2]; - cutout_y = [gridy_mm-d_wall*2]; - - cut_move(x=0, y=0, w=gridx, h=gridy) { - translate([0,0,-c_depth]) { - rounded_rectangle(cutout_x, cutout_y, c_depth*2, r_base); - - pattern_linear(x=cdivx, y=cdivy, sx=(gridx_mm - 2)/cdivx, sy=(gridy_mm - 2)/cdivy) - rotate(rotation) - cylinder(r=cd/2, h=ch*2, center=true); - } - } + cutCylinders(n_divx=cdivx, n_divy=cdivy, cylinder_diameter=cd, cylinder_height=ch, coutout_depth=c_depth, orientation=c_orientation); } } gridfinityBase(gridx, gridy, l_grid, div_base_x, div_base_y, style_hole, only_corners=only_corners); diff --git a/gridfinity-rebuilt-utility.scad b/gridfinity-rebuilt-utility.scad index 67a43e1..8bcef9d 100644 --- a/gridfinity-rebuilt-utility.scad +++ b/gridfinity-rebuilt-utility.scad @@ -22,6 +22,39 @@ module cutEqual(n_divx=1, n_divy=1, style_tab=1, scoop_weight=1) { cut((i-1)*$gxx/n_divx,(j-1)*$gyy/n_divy, $gxx/n_divx, $gyy/n_divy, style_tab, scoop_weight); } +// Creates equally divided cylindrical cutouts +// +// n_divx: number of x cutouts +// n_divy: number of y cutouts +// set n_div values to 0 for a solid bin +// cylinder_diameter: diameter of cutouts +// cylinder_height: height of cutouts +// coutout_depth: offset from top to solid part of container +// orientation: orientation of cylinder cutouts (0 = x direction, 1 = y direction, 2 = z direction) +module cutCylinders(n_divx=1, n_divy=1, cylinder_diameter=1, cylinder_height=1, coutout_depth=0, orientation=0) { + rotation = (orientation == 0) + ? [0,90,0] + : (orientation == 1) + ? [90,0,0] + : [0,0,0]; + + gridx_mm = $gxx*l_grid; + gridy_mm = $gyy*l_grid; + padding = 2; + cutout_x = gridx_mm - d_wall*2; + cutout_y = gridy_mm - d_wall*2; + + cut_move(x=0, y=0, w=$gxx, h=$gyy) { + translate([0,0,-coutout_depth]) { + rounded_rectangle(cutout_x, cutout_y, coutout_depth*2, r_base); + + pattern_linear(x=n_divx, y=n_divy, sx=(gridx_mm - 2)/n_divx, sy=(gridy_mm - 2)/n_divy) + rotate(rotation) + cylinder(r=cylinder_diameter/2, h=cylinder_height*2, center=true); + } + } +} + // initialize gridfinity module gridfinityInit(gx, gy, h, h0 = 0, l = l_grid) { $gxx = gx; @@ -65,7 +98,7 @@ module cut_move(x, y, w, h) { translate([0,0,$dh0==0?$dh+h_base:$dh0+h_base]) cut_move_unsafe(clp(x,0,$gxx), clp(y,0,$gyy), clp(w,0,$gxx-x), clp(h,0,$gyy-y)) children(); -} +} // ===== Modules ===== //