mirror of
https://github.com/kennetek/gridfinity-rebuilt-openscad.git
synced 2024-12-22 14:53:25 +00:00
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:
parent
754f7ec965
commit
5a4396f480
4 changed files with 145 additions and 112 deletions
|
@ -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;
|
||||
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,20 +109,22 @@ 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);
|
||||
}
|
||||
hull() {
|
||||
rounded_rectangle(divbasex*length-0.05-2*r_c2, divbasey*length-0.05-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);
|
||||
}
|
||||
mirror([0,0,1])
|
||||
union() {
|
||||
hull() {
|
||||
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(xx-2*r_c2, yy-2*r_c2,r_c2, r_fo2/2);
|
||||
mirror([0,0,1])
|
||||
rounded_rectangle(xx, yy, h_bot/2, r_fo1/2);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
module block_base_hole() {
|
||||
|
@ -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]);
|
||||
}
|
||||
}
|
||||
}
|
|
@ -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>
|
||||
|
||||
|
||||
|
||||
|
|
46
gridfinity-spiral-vase/gridfinity-spiral-vase.json
Normal file
46
gridfinity-spiral-vase/gridfinity-spiral-vase.json
Normal 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"
|
||||
}
|
||||
}
|
||||
}
|
|
@ -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;
|
||||
|
||||
|
|
Loading…
Reference in a new issue