screw holes, file naming, and base dividing

- screw holes toggle
- renamed base file to utility to avoid confusion
- base dividing will now always be safe to use on baseplates (cannot divide into sections that cannot be multiplied by an integer to equal 1)
This commit is contained in:
kennetek 2022-10-01 23:10:19 -07:00
parent 754f7ec965
commit 5a4396f480
4 changed files with 145 additions and 112 deletions

View file

@ -1,22 +1,18 @@
// UTILITY FILE, DO NOT EDIT
// EDIT OTHER FILES IN REPO FOR RESULTS
// ===== Extra Math ===== //
gzd = gridz_define;
dht = (gzd==0)?gridz*7 : (gzd==1)?h_bot+gridz+h_base : gridz-(enable_lip?3.8:0);
assert(dht > 0, "Height is too small!");
dht2 = enable_zsnap?((abs(dht)%7==0)?dht:dht+7-abs(dht)%7):dht;
d_height = dht2-h_base;
r_scoop = length*((d_height-2)/7+1)/12 - r_f2; // scoop radius
dht = (gridz_define==0)?gridz*7 : (gridz_define==1)?h_bot+gridz+h_base : gridz-(enable_lip?3.8:0);
d_height = (enable_zsnap?((abs(dht)%7==0)?dht:dht+7-abs(dht)%7):dht)-h_base;
d_wall2 = r_base-r_c1-d_clear*sqrt(2);
xl = gridx*length-2*d_clear-2*d_wall+d_div;
yl = gridy*length-2*d_clear-2*d_wall+d_div;
echo("=====");
echo(height_total=d_height+h_base+(enable_lip?3.8:0));
echo(effective_units=(d_height+h_base)/7);
echo("=====");
//echo("=====");
//echo(height_total=d_height+h_base+(enable_lip?3.8:0));
//echo(effective_units=(d_height+h_base)/7);
//echo("=====");
// ===== User Modules ===== //
// Creates an equally divided gridfinity bin.
@ -37,7 +33,7 @@ module gridfinityEqual(n_divx=1, n_divy=1, style_tab=1, enable_scoop=true) {
// wrapper module
// DOES NOT CHECK FOR VALID COMPARTMENT STRUCTURE
module gridfinityCustom() {
if (gridz > 0) {
if (gridz > 0 && dht > 0) {
difference() {
color("firebrick") block_bottom(height_internal==0?d_height-0.1:height_internal);
children();
@ -72,48 +68,6 @@ module cut_move(x, y, w, h) {
children();
}
module block_negative_chamfer(depth = 10, top = 0, bot = 0) {
bc = abs(bot);
tc = abs(top);
hull() {
linear_extrude(2*(depth), center = true)
offset(-bc)
children();
linear_extrude(2*(depth-bc), center = true)
children();
}
if (tc != 0)
translate([0,0,tc])
block_negative_chamfer(depth = tc*2, bot = tc, top = 0)
offset(delta = tc-0.01)
children();
}
module block_negative_fillet(depth = 10, bot_fillet = 0) {
bf = abs(bot_fillet);
block_negative_chamfer(depth, 0, bf)
children();
minkowski() {
linear_extrude(2*(depth-bf), center = true)
offset(-bf)
children();
if (bf > 0) sphere(r = bf);
}
}
module block_negative(depth) {
linear_extrude(2*depth, center=true)
children();
}
// ===== Modules ===== //
module profile_base() {
@ -128,17 +82,24 @@ module profile_base() {
}
module block_base() {
dbnxt = [for (i=[1:10]) if (abs(gridx*i)%1 < 0.001 || abs(gridx*i)%1 > 0.999) i];
dbnyt = [for (i=[1:10]) if (abs(gridy*i)%1 < 0.001 || abs(gridy*i)%1 > 0.999) i];
dbnx = 1/(div_base_auto ? len(dbnxt) > 0 ? dbnxt[0] : 1 : round(div_base_x));
dbny = 1/(div_base_auto ? len(dbnyt) > 0 ? dbnyt[0] : 1 : round(div_base_y));
xx = gridx*length-0.5;
yy = gridy*length-0.5;
translate([0,0,h_base])
rounded_rectangle(gridx*length-0.5+0.002, gridy*length-0.5+0.002, h_bot/1.5, r_fo1/2+0.001);
rounded_rectangle(xx+0.002, yy+0.002, h_bot/1.5, r_fo1/2+0.001);
intersection(){
translate([0,0,-1])
rounded_rectangle(gridx*length-0.5+0.005, gridy*length-0.5+0.005, h_base+h_bot/2*10, r_fo1/2+0.001);
rounded_rectangle(xx+0.005, yy+0.005, h_base+h_bot/2*10, r_fo1/2+0.001);
render()
difference() {
pattern_linear2(gridx/divbasex, gridy/divbasey, divbasex*length, divbasey*length)
block_base_solid();
pattern_linear2(gridx/dbnx, gridy/dbny, dbnx*length, dbny*length)
block_base_solid(dbnx, dbny);
if (enable_holes)
@ -148,18 +109,20 @@ module block_base() {
}
}
module block_base_solid() {
module block_base_solid(dbnx, dbny) {
xx = dbnx*length-0.05;
yy = dbny*length-0.05;
translate([0,0,h_base])
mirror([0,0,1])
union() {
hull() {
rounded_rectangle(divbasex*length-0.05-2*r_c2-2*r_c1,divbasey*length-0.05-2*r_c2-2*r_c1, h_base, r_fo3/2);
rounded_rectangle(divbasex*length-0.05-2*r_c2, divbasey*length-0.05-2*r_c2, h_base-r_c1, r_fo2/2);
rounded_rectangle(xx-2*r_c2-2*r_c1,yy-2*r_c2-2*r_c1, h_base, r_fo3/2);
rounded_rectangle(xx-2*r_c2, yy-2*r_c2, h_base-r_c1, r_fo2/2);
}
hull() {
rounded_rectangle(divbasex*length-0.05-2*r_c2, divbasey*length-0.05-2*r_c2,r_c2, r_fo2/2);
rounded_rectangle(xx-2*r_c2, yy-2*r_c2,r_c2, r_fo2/2);
mirror([0,0,1])
rounded_rectangle(divbasex*length-0.05, divbasey*length-0.05, h_bot/2, r_fo1/2);
rounded_rectangle(xx, yy, h_bot/2, r_fo1/2);
}
}
}
@ -170,11 +133,12 @@ module block_base_hole() {
union() {
difference() {
cylinder(h = 2*(h_hole+(enable_hole_slit?0.2:0)), r = r_hole2, center=true);
if (enable_hole_slit)
if (enable_hole_slit && enable_screw)
copy_mirror([0,1,0])
translate([-1.5*r_hole2,r_hole1+0.1,h_hole])
cube([r_hole2*3,r_hole2*3, 0.4]);
}
if (enable_screw)
cylinder(h = 3*h_base, r = r_hole1, center=true);
}
}
@ -376,14 +340,14 @@ module fillet_cutter(t = 0, c = "goldenrod") {
}
}
module profile_cutter(h, length, s) {
scoop = s ? r_scoop : 0;
module profile_cutter(h, l, s) {
scoop = s ? (length*((d_height-2)/7+1)/12-r_f2) : 0;
translate([r_f2,r_f2])
hull() {
if (length-scoop-2*r_f2 > 0)
if (l-scoop-2*r_f2 > 0)
square(0.1);
if (scoop < h) {
translate([length-2*r_f2,h-r_f2/2])
translate([l-2*r_f2,h-r_f2/2])
mirror([1,1])
square(0.1);
@ -392,18 +356,18 @@ module profile_cutter(h, length, s) {
square(0.1);
}
difference() {
translate([length-scoop-2*r_f2, scoop])
translate([l-scoop-2*r_f2, scoop])
if (scoop != 0) {
intersection() {
circle(scoop);
mirror([0,1]) square(2*scoop);
}
} else mirror([1,0]) square(0.1);
translate([length-scoop-2*r_f2,-1])
square([-(length-scoop-2*r_f2),2*h]);
translate([l-scoop-2*r_f2,-1])
square([-(l-scoop-2*r_f2),2*h]);
translate([0,h])
square([2*length,scoop]);
square([2*l,scoop]);
}
}
}

View file

@ -27,7 +27,7 @@ $fs = 0.25;
/* [General Settings] */
// number of bases along x-axis
gridx = 2;
gridx = 2.5;
// number of bases along y-axis
gridy = 2;
// bin height. See bin height information and "gridz_define" below.
@ -50,6 +50,8 @@ enable_hole_slit = true;
enable_zsnap = false;
// enable upper lip for stacking other bins
enable_lip = true;
// disable the screw part of base holes
enable_screw = true;
// internal fillet for easy part removal
scoop = true;
@ -63,11 +65,12 @@ tab_style = 0; //[0:Full,1:Auto,2:Left,3:Center,4:Right,5:None]
// overrides internal block height of bin (for solid containers). Leave zero for default height. Units: mm
height_internal = 0;
/* [Test] */
// multiplier for bases along X axis. For example, if you wanted a gridx of 1.5, setting this to 0.5 would get you 3 bases divided along X that are compatible with the provided length. (default: 1, intended to work between 0 and 1)
divbasex = 1;
// multiplier for bases along Y axis. For example, if you wanted a gridy of 1.5, setting this to 0.5 would get you 3 bases divided along Y that are compatible with the provided length. (default: 1, intended to work between 0 and 1)
divbasey = 1;
// Automatically guess the ideal base dividing values based on gridx and gridy (if they are integers, defaults to 1)
div_base_auto = true;
// number of divisions per 1 unit of base along the X axis. For instance, a value of 3 would make 3 mini-bases per length. (default 1, only use integers)
div_base_x = 1;
// number of divisions per 1 unit of base along the Y axis. For instance, a value of 3 would make 3 mini-bases per length. (default 1, only use integers)
div_base_y = 1;
// ===== Commands ===== //
@ -76,34 +79,54 @@ color("tomato")
// ===== Reference Dimensions ===== //
/*[Other Miscellaneous Features]*/
h_base = 5; // height of the base
r_base = 4; // outside rounded radius of bin
r_c1 = 0.8; // lower base chamfer "radius"
r_c2 = 2.4; // upper base chamfer "radius"
h_bot = 2.2; // bottom thiccness of bin
r_fo1 = 7.5+1; // outside radii
// height of the base
h_base = 5;
// outside rounded radius of bin
r_base = 4;
// lower base chamfer "radius"
r_c1 = 0.8;
// upper base chamfer "radius"
r_c2 = 2.4;
// bottom thiccness of bin
h_bot = 2.2;
// outside radii 1
r_fo1 = 8.5;
// outside radii 2
r_fo2 = 3.2;
// outside radii 3
r_fo3 = 1.6;
r_hole1 = 1.5; // screw hole radius
r_hole2 = 3.25; // magnet hole radius
d_hole = 26; // center-to-center distance between holes
h_hole = 2.4; // magnet hole depth
// screw hole radius
r_hole1 = 1.5;
// magnet hole radius
r_hole2 = 3.25;
// center-to-center distance between holes
d_hole = 26;
// magnet hole depth
h_hole = 2.4;
r_f1 = 0.6; // top edge fillet radius
r_f2 = 2.8; // internal fillet radius
// top edge fillet radius
r_f1 = 0.6;
// internal fillet radius
r_f2 = 2.8;
d_div = 1.2; // width of divider between compartments
d_wall = 0.95; // minimum wall thickness
d_clear = 0.25; // tolerance fit factor
// width of divider between compartments
d_div = 1.2;
// minimum wall thickness
d_wall = 0.95;
// tolerance fit factor
d_clear = 0.25;
d_tabh = 15.85; // height of tab (yaxis, measured from inner wall)
d_tabw = length; // maximum width of tab
// height of tab (yaxis, measured from inner wall)
d_tabh = 15.85;
// maximum width of tab
d_tabw = 42;
// angle of tab
a_tab = 36;
// ===== Include ===== //
include <gridfinity-rebuilt-base.scad>
include <gridfinity-rebuilt-utility.scad>

View file

@ -0,0 +1,46 @@
{
"fileFormatVersion": "1",
"parameterSets": {
"New set 1": {
"$fa": "8",
"$fs": "0.25",
"a_tab": "40",
"bottom_layer": "3",
"d_clear": "0.25",
"d_div": "1.2",
"d_hole": "26",
"d_tabh": "15.85",
"d_wall": "0.94999999999999996",
"enable_funnel": "true",
"enable_holes": "true",
"enable_inset": "true",
"enable_lip": "true",
"enable_pinch": "true",
"enable_scoop_chamfer": "true",
"enable_zsnap": "false",
"gridx": "2",
"gridy": "2",
"gridz": "6",
"gridz_define": "0",
"h_base": "5",
"h_hole": "2.3999999999999999",
"layer": "0.34999999999999998",
"length": "42",
"n_divx": "3",
"nozzle": "0.59999999999999998",
"r_base": "4",
"r_c1": "0.80000000000000004",
"r_c2": "2.3999999999999999",
"r_f1": "0.59999999999999998",
"r_f2": "2.7999999999999998",
"r_fo1": "7.5",
"r_fo2": "3.2000000000000002",
"r_fo3": "1.6000000000000001",
"r_hole1": "1.5",
"r_hole2": "3.25",
"style_base": "0",
"style_tab": "0",
"type": "1"
}
}
}

View file

@ -2,15 +2,15 @@
$fa = 8;
$fs = 0.25;
/* [Bin or Base] */
type = 0; // [0:bin, 1:base]
// ===== COMMANDS ===== //
color("tomato")
// Generate a single base
//gridfinityBaseVase();
// Generate the bin
gridfinityVase();
if (type != 0) gridfinityBaseVase(); // Generate a single base
else gridfinityVase(); // Generate the bin
// ==================== //
@ -116,7 +116,7 @@ a_tab = 40;
// ===== Include ===== //
include <../gridfinity-rebuilt-base.scad>
include <../gridfinity-rebuilt-utility.scad>
// ===== Constants ===== //
@ -128,7 +128,7 @@ f2c = sqrt(2)*(sqrt(2)-1); // fillet to chamfer ratio
me = ((gridx*length-0.5)/n_divx)-nozzle*4-r_fo1-12.7-4;
me2 = min(d_tabw/1.8 + max(0,me), d_tabw/1.25);
m = me2;
d_ramp = f2c*r_scoop+d_wall2;
d_ramp = f2c*(length*((d_height-2)/7+1)/12-r_f2)+d_wall2;
d_edge = ((gridx*length-0.5)/n_divx-d_tabw-r_fo1)/2;
n_st = d_edge < 2 && style_tab != 0 && style_tab != 6 ? 1 : style_tab == 1 && n_divx <= 1? 0 : style_tab;