Compare commits
2 Commits
928065c2ef
...
bf90a512ef
| Author | SHA1 | Date | |
|---|---|---|---|
| bf90a512ef | |||
| 1136d03ffb |
29
.gitea/workflows/build.yaml
Normal file
29
.gitea/workflows/build.yaml
Normal file
@ -0,0 +1,29 @@
|
|||||||
|
name: deploy demo to Hetzner
|
||||||
|
on:
|
||||||
|
push:
|
||||||
|
permissions:
|
||||||
|
contents: read
|
||||||
|
jobs:
|
||||||
|
build:
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
steps:
|
||||||
|
- name: Checkout
|
||||||
|
uses: actions/checkout@v3
|
||||||
|
- name: install tools
|
||||||
|
run: |
|
||||||
|
sudo apt-get update
|
||||||
|
sudo apt-get install -y openscad prusa-slicer build-essential
|
||||||
|
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs >rustup.sh
|
||||||
|
sh rustup.sh -y
|
||||||
|
- name: render models
|
||||||
|
run: |
|
||||||
|
cd renderer && cargo run
|
||||||
|
./render.sh
|
||||||
|
- uses: actions/upload-artifact@v3
|
||||||
|
with:
|
||||||
|
name: bakjes
|
||||||
|
path: |
|
||||||
|
stl/**
|
||||||
|
bakje/**
|
||||||
|
grid/**
|
||||||
|
overwrite: true
|
||||||
20845
bakje/1x1/1-1h0m.gcode
20845
bakje/1x1/1-1h0m.gcode
File diff suppressed because it is too large
Load Diff
235765
bakje/1x1/12-5h56m.gcode
235765
bakje/1x1/12-5h56m.gcode
File diff suppressed because it is too large
Load Diff
313303
bakje/1x1/16-7h55m.gcode
313303
bakje/1x1/16-7h55m.gcode
File diff suppressed because it is too large
Load Diff
40706
bakje/1x1/2-1h13m.gcode
40706
bakje/1x1/2-1h13m.gcode
File diff suppressed because it is too large
Load Diff
79588
bakje/1x1/4-1h58m.gcode
79588
bakje/1x1/4-1h58m.gcode
File diff suppressed because it is too large
Load Diff
118699
bakje/1x1/6-2h57m.gcode
118699
bakje/1x1/6-2h57m.gcode
File diff suppressed because it is too large
Load Diff
176962
bakje/1x1/9-4h27m.gcode
176962
bakje/1x1/9-4h27m.gcode
File diff suppressed because it is too large
Load Diff
25195
bakje/1x2/1-1h9m.gcode
25195
bakje/1x2/1-1h9m.gcode
File diff suppressed because it is too large
Load Diff
49546
bakje/1x2/2-1h37m.gcode
49546
bakje/1x2/2-1h37m.gcode
File diff suppressed because it is too large
Load Diff
97301
bakje/1x2/4-3h8m.gcode
97301
bakje/1x2/4-3h8m.gcode
File diff suppressed because it is too large
Load Diff
144849
bakje/1x2/6-4h41m.gcode
144849
bakje/1x2/6-4h41m.gcode
File diff suppressed because it is too large
Load Diff
192465
bakje/1x2/8-6h14m.gcode
192465
bakje/1x2/8-6h14m.gcode
File diff suppressed because it is too large
Load Diff
29180
bakje/1x3/1-1h20m.gcode
29180
bakje/1x3/1-1h20m.gcode
File diff suppressed because it is too large
Load Diff
57533
bakje/1x3/2-2h8m.gcode
57533
bakje/1x3/2-2h8m.gcode
File diff suppressed because it is too large
Load Diff
85401
bakje/1x3/3-3h13m.gcode
85401
bakje/1x3/3-3h13m.gcode
File diff suppressed because it is too large
Load Diff
113817
bakje/1x3/4-4h18m.gcode
113817
bakje/1x3/4-4h18m.gcode
File diff suppressed because it is too large
Load Diff
33672
bakje/1x4/1-1h31m.gcode
33672
bakje/1x4/1-1h31m.gcode
File diff suppressed because it is too large
Load Diff
66087
bakje/1x4/2-2h43m.gcode
66087
bakje/1x4/2-2h43m.gcode
File diff suppressed because it is too large
Load Diff
130399
bakje/1x4/4-5h28m.gcode
130399
bakje/1x4/4-5h28m.gcode
File diff suppressed because it is too large
Load Diff
25848
bakje/2x1/1-1h10m.gcode
25848
bakje/2x1/1-1h10m.gcode
File diff suppressed because it is too large
Load Diff
50597
bakje/2x1/2-1h40m.gcode
50597
bakje/2x1/2-1h40m.gcode
File diff suppressed because it is too large
Load Diff
99198
bakje/2x1/4-3h15m.gcode
99198
bakje/2x1/4-3h15m.gcode
File diff suppressed because it is too large
Load Diff
148570
bakje/2x1/6-4h51m.gcode
148570
bakje/2x1/6-4h51m.gcode
File diff suppressed because it is too large
Load Diff
197515
bakje/2x1/8-6h27m.gcode
197515
bakje/2x1/8-6h27m.gcode
File diff suppressed because it is too large
Load Diff
34078
bakje/2x2/1-1h31m.gcode
34078
bakje/2x2/1-1h31m.gcode
File diff suppressed because it is too large
Load Diff
67202
bakje/2x2/2-2h32m.gcode
67202
bakje/2x2/2-2h32m.gcode
File diff suppressed because it is too large
Load Diff
132622
bakje/2x2/4-5h3m.gcode
132622
bakje/2x2/4-5h3m.gcode
File diff suppressed because it is too large
Load Diff
42363
bakje/2x3/1-1h52m.gcode
42363
bakje/2x3/1-1h52m.gcode
File diff suppressed because it is too large
Load Diff
83843
bakje/2x3/2-3h27m.gcode
83843
bakje/2x3/2-3h27m.gcode
File diff suppressed because it is too large
Load Diff
50616
bakje/2x4/1-2h14m.gcode
50616
bakje/2x4/1-2h14m.gcode
File diff suppressed because it is too large
Load Diff
100165
bakje/2x4/2-4h22m.gcode
100165
bakje/2x4/2-4h22m.gcode
File diff suppressed because it is too large
Load Diff
30405
bakje/3x1/1-1h21m.gcode
30405
bakje/3x1/1-1h21m.gcode
File diff suppressed because it is too large
Load Diff
59444
bakje/3x1/2-2h13m.gcode
59444
bakje/3x1/2-2h13m.gcode
File diff suppressed because it is too large
Load Diff
88397
bakje/3x1/3-3h21m.gcode
88397
bakje/3x1/3-3h21m.gcode
File diff suppressed because it is too large
Load Diff
117236
bakje/3x1/4-4h29m.gcode
117236
bakje/3x1/4-4h29m.gcode
File diff suppressed because it is too large
Load Diff
42976
bakje/3x2/1-1h53m.gcode
42976
bakje/3x2/1-1h53m.gcode
File diff suppressed because it is too large
Load Diff
84892
bakje/3x2/2-3h30m.gcode
84892
bakje/3x2/2-3h30m.gcode
File diff suppressed because it is too large
Load Diff
55258
bakje/3x3/1-2h26m.gcode
55258
bakje/3x3/1-2h26m.gcode
File diff suppressed because it is too large
Load Diff
68083
bakje/3x4/1-3h0m.gcode
68083
bakje/3x4/1-3h0m.gcode
File diff suppressed because it is too large
Load Diff
34776
bakje/4x1/1-1h33m.gcode
34776
bakje/4x1/1-1h33m.gcode
File diff suppressed because it is too large
Load Diff
68183
bakje/4x1/2-2h49m.gcode
68183
bakje/4x1/2-2h49m.gcode
File diff suppressed because it is too large
Load Diff
134706
bakje/4x1/4-5h41m.gcode
134706
bakje/4x1/4-5h41m.gcode
File diff suppressed because it is too large
Load Diff
51513
bakje/4x2/1-2h16m.gcode
51513
bakje/4x2/1-2h16m.gcode
File diff suppressed because it is too large
Load Diff
102076
bakje/4x2/2-4h26m.gcode
102076
bakje/4x2/2-4h26m.gcode
File diff suppressed because it is too large
Load Diff
68223
bakje/4x3/1-3h1m.gcode
68223
bakje/4x3/1-3h1m.gcode
File diff suppressed because it is too large
Load Diff
84793
bakje/4x4/1-3h50m.gcode
84793
bakje/4x4/1-3h50m.gcode
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
30
gf_sewing_spools.scad
Normal file
30
gf_sewing_spools.scad
Normal file
@ -0,0 +1,30 @@
|
|||||||
|
include <gridfinity.scad>
|
||||||
|
|
||||||
|
module gf_sewing_spools() {
|
||||||
|
difference() {
|
||||||
|
gf_bakje([2, 2, 4], mode=GF_BAKJE_MODE_PARFILL, fill_dis=6);
|
||||||
|
for(i = [-1,0,+1])
|
||||||
|
translate([-(62+2+12)/2, i*24, 11+6])
|
||||||
|
rotate([0, 90]) {
|
||||||
|
cylinder(h = 62, d = 24);
|
||||||
|
translate([0, 0, 62+2])
|
||||||
|
cylinder(h = 12, d = 24);
|
||||||
|
}
|
||||||
|
for(i = [-1,+1])
|
||||||
|
translate([0, i*12, 19])
|
||||||
|
scale([1, 9, 12])
|
||||||
|
rotate([45, 0]) {
|
||||||
|
cube([100, 1, 1], center=true);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
%for(i = [-1,0,+1])
|
||||||
|
translate([-(62+2+12)/2+1, i*24, 11+6])
|
||||||
|
rotate([0, 90]) {
|
||||||
|
cylinder(h = 60, d = 20);
|
||||||
|
translate([0, 0, 62+2])
|
||||||
|
cylinder(h = 11, d = 20);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
gf_sewing_spools();
|
||||||
4138
grid/1x1/1-8m.gcode
4138
grid/1x1/1-8m.gcode
File diff suppressed because it is too large
Load Diff
45746
grid/1x1/12-1h9m.gcode
45746
grid/1x1/12-1h9m.gcode
File diff suppressed because it is too large
Load Diff
60812
grid/1x1/16-1h32m.gcode
60812
grid/1x1/16-1h32m.gcode
File diff suppressed because it is too large
Load Diff
8058
grid/1x1/2-13m.gcode
8058
grid/1x1/2-13m.gcode
File diff suppressed because it is too large
Load Diff
15622
grid/1x1/4-24m.gcode
15622
grid/1x1/4-24m.gcode
File diff suppressed because it is too large
Load Diff
23164
grid/1x1/6-35m.gcode
23164
grid/1x1/6-35m.gcode
File diff suppressed because it is too large
Load Diff
34439
grid/1x1/9-52m.gcode
34439
grid/1x1/9-52m.gcode
File diff suppressed because it is too large
Load Diff
4138
grid/1x2/1-8m.gcode
4138
grid/1x2/1-8m.gcode
File diff suppressed because it is too large
Load Diff
8058
grid/1x2/2-13m.gcode
8058
grid/1x2/2-13m.gcode
File diff suppressed because it is too large
Load Diff
15622
grid/1x2/4-24m.gcode
15622
grid/1x2/4-24m.gcode
File diff suppressed because it is too large
Load Diff
23164
grid/1x2/6-35m.gcode
23164
grid/1x2/6-35m.gcode
File diff suppressed because it is too large
Load Diff
30679
grid/1x2/8-46m.gcode
30679
grid/1x2/8-46m.gcode
File diff suppressed because it is too large
Load Diff
4138
grid/1x3/1-8m.gcode
4138
grid/1x3/1-8m.gcode
File diff suppressed because it is too large
Load Diff
8058
grid/1x3/2-13m.gcode
8058
grid/1x3/2-13m.gcode
File diff suppressed because it is too large
Load Diff
11878
grid/1x3/3-18m.gcode
11878
grid/1x3/3-18m.gcode
File diff suppressed because it is too large
Load Diff
15622
grid/1x3/4-24m.gcode
15622
grid/1x3/4-24m.gcode
File diff suppressed because it is too large
Load Diff
4138
grid/1x4/1-8m.gcode
4138
grid/1x4/1-8m.gcode
File diff suppressed because it is too large
Load Diff
8058
grid/1x4/2-13m.gcode
8058
grid/1x4/2-13m.gcode
File diff suppressed because it is too large
Load Diff
15622
grid/1x4/4-24m.gcode
15622
grid/1x4/4-24m.gcode
File diff suppressed because it is too large
Load Diff
4138
grid/2x1/1-8m.gcode
4138
grid/2x1/1-8m.gcode
File diff suppressed because it is too large
Load Diff
8058
grid/2x1/2-13m.gcode
8058
grid/2x1/2-13m.gcode
File diff suppressed because it is too large
Load Diff
15622
grid/2x1/4-24m.gcode
15622
grid/2x1/4-24m.gcode
File diff suppressed because it is too large
Load Diff
23164
grid/2x1/6-35m.gcode
23164
grid/2x1/6-35m.gcode
File diff suppressed because it is too large
Load Diff
30679
grid/2x1/8-46m.gcode
30679
grid/2x1/8-46m.gcode
File diff suppressed because it is too large
Load Diff
4138
grid/2x2/1-8m.gcode
4138
grid/2x2/1-8m.gcode
File diff suppressed because it is too large
Load Diff
8058
grid/2x2/2-13m.gcode
8058
grid/2x2/2-13m.gcode
File diff suppressed because it is too large
Load Diff
15622
grid/2x2/4-24m.gcode
15622
grid/2x2/4-24m.gcode
File diff suppressed because it is too large
Load Diff
4138
grid/2x3/1-8m.gcode
4138
grid/2x3/1-8m.gcode
File diff suppressed because it is too large
Load Diff
8058
grid/2x3/2-13m.gcode
8058
grid/2x3/2-13m.gcode
File diff suppressed because it is too large
Load Diff
4138
grid/2x4/1-8m.gcode
4138
grid/2x4/1-8m.gcode
File diff suppressed because it is too large
Load Diff
8058
grid/2x4/2-13m.gcode
8058
grid/2x4/2-13m.gcode
File diff suppressed because it is too large
Load Diff
4138
grid/3x1/1-8m.gcode
4138
grid/3x1/1-8m.gcode
File diff suppressed because it is too large
Load Diff
8058
grid/3x1/2-13m.gcode
8058
grid/3x1/2-13m.gcode
File diff suppressed because it is too large
Load Diff
11878
grid/3x1/3-18m.gcode
11878
grid/3x1/3-18m.gcode
File diff suppressed because it is too large
Load Diff
15622
grid/3x1/4-24m.gcode
15622
grid/3x1/4-24m.gcode
File diff suppressed because it is too large
Load Diff
4138
grid/3x2/1-8m.gcode
4138
grid/3x2/1-8m.gcode
File diff suppressed because it is too large
Load Diff
8058
grid/3x2/2-13m.gcode
8058
grid/3x2/2-13m.gcode
File diff suppressed because it is too large
Load Diff
4138
grid/3x3/1-8m.gcode
4138
grid/3x3/1-8m.gcode
File diff suppressed because it is too large
Load Diff
4138
grid/3x4/1-8m.gcode
4138
grid/3x4/1-8m.gcode
File diff suppressed because it is too large
Load Diff
4138
grid/4x1/1-8m.gcode
4138
grid/4x1/1-8m.gcode
File diff suppressed because it is too large
Load Diff
8058
grid/4x1/2-13m.gcode
8058
grid/4x1/2-13m.gcode
File diff suppressed because it is too large
Load Diff
15622
grid/4x1/4-24m.gcode
15622
grid/4x1/4-24m.gcode
File diff suppressed because it is too large
Load Diff
4138
grid/4x2/1-8m.gcode
4138
grid/4x2/1-8m.gcode
File diff suppressed because it is too large
Load Diff
8058
grid/4x2/2-13m.gcode
8058
grid/4x2/2-13m.gcode
File diff suppressed because it is too large
Load Diff
4138
grid/4x3/1-8m.gcode
4138
grid/4x3/1-8m.gcode
File diff suppressed because it is too large
Load Diff
4138
grid/4x4/1-8m.gcode
4138
grid/4x4/1-8m.gcode
File diff suppressed because it is too large
Load Diff
34
gridfinity.json
Normal file
34
gridfinity.json
Normal file
@ -0,0 +1,34 @@
|
|||||||
|
{
|
||||||
|
"fileFormatVersion": "1",
|
||||||
|
"parameterSets": {
|
||||||
|
"New set 1": {
|
||||||
|
"$fn": "50",
|
||||||
|
"CLEARANCE": "0.25",
|
||||||
|
"CORNER_RADIUS": "4",
|
||||||
|
"DEPTH": "2",
|
||||||
|
"FILL_DEPTH": "10",
|
||||||
|
"HIEGHT": "3",
|
||||||
|
"MODE": "3",
|
||||||
|
"NESTING_DEPTH": "0",
|
||||||
|
"RENDER_GF_BASE": "true",
|
||||||
|
"RESTING_RIM_WIDTH": "2.3999999999999999",
|
||||||
|
"SLOT": "42",
|
||||||
|
"WIDTH": "3"
|
||||||
|
},
|
||||||
|
"New set 2": {
|
||||||
|
"$fn": "50",
|
||||||
|
"CLEARANCE": "0.25",
|
||||||
|
"CORNER_RADIUS": "4",
|
||||||
|
"DEPTH": "1",
|
||||||
|
"FILL_DEPTH": "12",
|
||||||
|
"HIEGHT": "3",
|
||||||
|
"MODE": "1",
|
||||||
|
"NESTING_DEPTH": "5",
|
||||||
|
"RENDER_GF_BASE": "true",
|
||||||
|
"RESTING_RIM_WIDTH": "2.3999999999999999",
|
||||||
|
"SLOT": "42",
|
||||||
|
"WALL_THIKNESS": "1",
|
||||||
|
"WIDTH": "1"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
281
gridfinity.scad
281
gridfinity.scad
@ -1,63 +1,266 @@
|
|||||||
|
|
||||||
$fn=50;
|
$fn=50;
|
||||||
|
|
||||||
HIEGHT = 1;
|
RENDER_GF_BAKJE = false;
|
||||||
|
RENDER_GF_GRID = false;
|
||||||
|
MODE = 0; // [0:default,1:deep,2:filled,3:partial filled]
|
||||||
|
WIDTH = 2;
|
||||||
|
DEPTH = 2;
|
||||||
|
HIEGHT = 3;
|
||||||
|
FILL_DEPTH = 0.0;
|
||||||
|
|
||||||
|
SLOT = 42;
|
||||||
|
NESTING_DEPTH = 5;
|
||||||
|
RESTING_RIM_WIDTH = 2.4;
|
||||||
|
CORNER_RADIUS = 4;
|
||||||
|
CLEARANCE = 0.25;
|
||||||
|
WALL_THIKNESS = 1;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
module square_rounded(size1, size2, r1, r2, h) {
|
module square_rounded(size1, size2, r1, r2, h) {
|
||||||
union() {
|
if (is_num(size1)) {
|
||||||
difference() {
|
size1 = [size1, size1];
|
||||||
translate([0, 0, h/2]) {
|
size2 = [size2, size2];
|
||||||
cube([size1-r1*2, size2, h], center=true);
|
square_rounded(size1, size2, r1, r2, h);
|
||||||
cube([size2, size1-r1*2, h], center=true);
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
union() {
|
||||||
|
difference() {
|
||||||
|
translate([0, 0, h/2]) {
|
||||||
|
cube([size1[0]-r1*2, size2[1], h], center=true);
|
||||||
|
cube([size2[0], size1[1]-r1*2, h], center=true);
|
||||||
|
}
|
||||||
|
for(r=[
|
||||||
|
[ 0, size1[0], size1[1]],
|
||||||
|
[ 90, size1[1], size1[0]],
|
||||||
|
[180, size1[0], size1[1]],
|
||||||
|
[-90, size1[1], size1[0]]
|
||||||
|
])
|
||||||
|
rotate([0, 0, r[0]])
|
||||||
|
translate([-r[1]/2, r[2]/2, 0])
|
||||||
|
rotate([-45, 0, 0])
|
||||||
|
cube([r[1], 2*h, 2*h]);
|
||||||
}
|
}
|
||||||
for(r=[0, 90, 180, -90])
|
for(r=[
|
||||||
rotate([0, 0, r])
|
[ 0, size1[0], size1[1]],
|
||||||
translate([-size2/2, size1/2, 0])
|
[ 90, size1[1], size1[0]],
|
||||||
rotate([-45, 0, 0])
|
[180, size1[0], size1[1]],
|
||||||
cube([size2, 100, 2*h]);
|
[-90, size1[1], size1[0]]
|
||||||
|
])
|
||||||
|
rotate([0, 0, r[0]])
|
||||||
|
translate([r[1]/2-r1, r[2]/2-r1])
|
||||||
|
cylinder(h=h, r1=r1, r2=r2);
|
||||||
}
|
}
|
||||||
for(r=[0, 90, 180, -90])
|
|
||||||
rotate([0, 0, r])
|
|
||||||
translate([size1/2-r1, size1/2-r1])
|
|
||||||
cylinder(h=h, r1=r1, r2=r2);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
module gf_bottom() {
|
module gf_bottom() {
|
||||||
union() {
|
union() {
|
||||||
square_rounded(size1=35.6, size2=37.2, r1=0.8, r2=1.6, h=0.8);
|
l3_r = CORNER_RADIUS;
|
||||||
|
l3_h = NESTING_DEPTH;
|
||||||
|
l1_cut = RESTING_RIM_WIDTH;
|
||||||
|
l1_r = l3_r-l1_cut;
|
||||||
|
l0_cut = l1_cut+0.8;
|
||||||
|
l0_r = l3_r-l0_cut;
|
||||||
|
square_rounded(
|
||||||
|
size1=SLOT-2*l0_cut, size2=SLOT-2*l1_cut,
|
||||||
|
r1=l0_r, r2=l1_r,
|
||||||
|
h=0.8+0.001);
|
||||||
translate([0, 0, 0.8])
|
translate([0, 0, 0.8])
|
||||||
square_rounded(size1=37.2, size2=37.2, r1=1.6, r2=1.6, h=1.8);
|
square_rounded(
|
||||||
translate([0, 0, 2.6])
|
size1=SLOT-2*l1_cut, size2=SLOT-2*l1_cut,
|
||||||
square_rounded(size1=37.2, size2=41.5, r1=1.6, r2=3.75, h=2.15);
|
r1=l1_r, r2=l1_r,
|
||||||
|
h=l3_h-l1_cut-0.8+0.001);
|
||||||
|
translate([0, 0, l3_h-l1_cut])
|
||||||
|
square_rounded(
|
||||||
|
size1=SLOT-2*l1_cut, size2=SLOT,
|
||||||
|
r1=l1_r, r2=l3_r,
|
||||||
|
h=l1_cut+0.001);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
module gf_socker_cut() {
|
module gf_grid_cut(size=[1,1]) {
|
||||||
t = 0.25;
|
a = CLEARANCE*sin(45);
|
||||||
a = sin(45)*t;
|
b = CLEARANCE*tan(22.5);
|
||||||
b = a*tan(22.5);
|
c = CLEARANCE/sin(45);
|
||||||
c = t/sin(45);
|
|
||||||
echo(a+b);
|
|
||||||
translate([0, 0, -a])
|
|
||||||
union() {
|
union() {
|
||||||
square_rounded(size1=35.6+a*2, size2=37.2+2*t, r1=0.8+a, r2=1.6+t, h=0.8+b);
|
l3_r = CORNER_RADIUS;
|
||||||
translate([0, 0, 0.8+b])
|
l3_h = NESTING_DEPTH-a;
|
||||||
square_rounded(size1=37.2+2*t, size2=37.2+2*t, r1=1.6+t, r2=1.6+t, h=1.8);
|
l1_cut = RESTING_RIM_WIDTH-CLEARANCE;
|
||||||
translate([0, 0, 2.6+b])
|
l1_r = l3_r-l1_cut;
|
||||||
square_rounded(size1=37.2+2*t, size2=41.5+2*c, r1=1.6+t, r2=3.75+c, h=2.15+a-b-0.001);
|
square_rounded(
|
||||||
|
size1=[size[0]*SLOT-2*l1_cut, size[1]*SLOT-2*l1_cut],
|
||||||
|
size2=[size[0]*SLOT-2*l1_cut, size[1]*SLOT-2*l1_cut],
|
||||||
|
r1=l1_r, r2=l1_r,
|
||||||
|
h=l3_h-l1_cut+0.001);
|
||||||
|
translate([0, 0, l3_h-l1_cut])
|
||||||
|
square_rounded(
|
||||||
|
size1=[size[0]*SLOT-2*l1_cut, size[1]*SLOT-2*l1_cut],
|
||||||
|
size2=[size[0]*SLOT, size[1]*SLOT],
|
||||||
|
r1=l1_r, r2=l3_r,
|
||||||
|
h=l1_cut+0.001);
|
||||||
|
translate([0, 0, l3_h+a/2])
|
||||||
|
cube([size[0]*SLOT, size[1]*SLOT, a], center=true);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// gf_bottom();
|
module gf_bakje_inside_cut(size, fill=0) {
|
||||||
// gf_socker_cut();
|
connecting_fillet = RESTING_RIM_WIDTH-WALL_THIKNESS-2*CLEARANCE;
|
||||||
|
inside_radius = CORNER_RADIUS-CLEARANCE-WALL_THIKNESS;
|
||||||
|
union() {
|
||||||
|
// bottom shapes
|
||||||
|
translate([0, 0, size[2]*7])
|
||||||
|
gf_grid_cut(size);
|
||||||
|
// connecting fillet
|
||||||
|
translate([0, 0, size[2]*7+0.001])
|
||||||
|
rotate([180, 0, 0])
|
||||||
|
square_rounded(
|
||||||
|
size1=[
|
||||||
|
SLOT*size[0]-2*RESTING_RIM_WIDTH+2*CLEARANCE,
|
||||||
|
SLOT*size[1]-2*RESTING_RIM_WIDTH+2*CLEARANCE
|
||||||
|
],
|
||||||
|
size2=[
|
||||||
|
SLOT*size[0]-2*WALL_THIKNESS-2*CLEARANCE,
|
||||||
|
SLOT*size[1]-2*WALL_THIKNESS-2*CLEARANCE
|
||||||
|
],
|
||||||
|
r1=CORNER_RADIUS-RESTING_RIM_WIDTH+CLEARANCE, r2=inside_radius,
|
||||||
|
h=connecting_fillet+0.002);
|
||||||
|
// main fill
|
||||||
|
translate([
|
||||||
|
-SLOT*size[0]/2+CORNER_RADIUS,
|
||||||
|
-SLOT*size[1]/2+CORNER_RADIUS,
|
||||||
|
NESTING_DEPTH+WALL_THIKNESS+fill])
|
||||||
|
linear_extrude(size[2]*7-NESTING_DEPTH-WALL_THIKNESS-fill-connecting_fillet+0.001)
|
||||||
|
minkowski() {
|
||||||
|
square([
|
||||||
|
SLOT*size[0]-2*CLEARANCE-inside_radius*2-2*WALL_THIKNESS,
|
||||||
|
SLOT*size[1]-2*CLEARANCE-inside_radius*2-2*WALL_THIKNESS]);
|
||||||
|
circle(r=inside_radius);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
difference() {
|
module gf_bakje_deep_cut() {
|
||||||
|
a = WALL_THIKNESS*sin(45);
|
||||||
|
b = WALL_THIKNESS*tan(22.5);
|
||||||
|
c = WALL_THIKNESS/sin(45);
|
||||||
union() {
|
union() {
|
||||||
gf_bottom();
|
l3_r = CORNER_RADIUS;
|
||||||
translate([0, 0, 4.75])
|
l3_h = NESTING_DEPTH+c;
|
||||||
square_rounded(size1=41.5, size2=41.5, r1=3.75, r2=3.75, h=HIEGHT*7+4.4-4.75);
|
l1_cut = RESTING_RIM_WIDTH+WALL_THIKNESS;
|
||||||
|
l1_r = l3_r-l1_cut;
|
||||||
|
l1_hd = l3_h-l1_cut-WALL_THIKNESS;
|
||||||
|
translate([0, 0, l3_h-l1_cut+0.001])
|
||||||
|
rotate([180,0,0])
|
||||||
|
linear_extrude(height = l1_hd, scale = 1-(2*l1_hd/(SLOT-2*l1_cut)))
|
||||||
|
translate(-[SLOT/2-l1_cut-l1_r, SLOT/2-l1_cut-l1_r])
|
||||||
|
minkowski() {
|
||||||
|
square([SLOT-2*l1_cut-2*l1_r, SLOT-2*l1_cut-2*l1_r]);
|
||||||
|
circle(r=l1_r);
|
||||||
|
}
|
||||||
|
translate([0, 0, l3_h-l1_cut])
|
||||||
|
square_rounded(
|
||||||
|
size1=SLOT-2*l1_cut,
|
||||||
|
size2=SLOT,
|
||||||
|
r1=l1_r, r2=l3_r,
|
||||||
|
h=l1_cut+0.001);
|
||||||
|
translate([0, 0, l3_h+a/2])
|
||||||
|
cube([SLOT, SLOT, a+0.001], center=true);
|
||||||
}
|
}
|
||||||
translate([0, 0, HIEGHT*7+4.4])
|
}
|
||||||
gf_socker_cut();
|
|
||||||
|
GF_BAKJE_MODE_DEFALT=0;
|
||||||
|
GF_BAKJE_MODE_DEEP=1;
|
||||||
|
GF_BAKJE_MODE_FILLED=2;
|
||||||
|
GF_BAKJE_MODE_PARFILL=3;
|
||||||
|
|
||||||
|
module gf_bakje(size=[1,1,4], mode=GF_BAKJE_MODE_DEFALT, fill_dis=0) {
|
||||||
|
intersection() {
|
||||||
|
difference() {
|
||||||
|
union() {
|
||||||
|
difference() {
|
||||||
|
union() {
|
||||||
|
// bottom shapes
|
||||||
|
translate(-[size[0]-1,size[1]-1]*SLOT/2)
|
||||||
|
for (x = [0:size[0]-1])
|
||||||
|
for (y = [0:size[1]-1])
|
||||||
|
translate([x*SLOT, y*SLOT])
|
||||||
|
gf_bottom();
|
||||||
|
// main fill
|
||||||
|
translate([
|
||||||
|
-SLOT*size[0]/2+CORNER_RADIUS,
|
||||||
|
-SLOT*size[1]/2+CORNER_RADIUS,
|
||||||
|
NESTING_DEPTH])
|
||||||
|
linear_extrude(size[2]*7-CLEARANCE)
|
||||||
|
minkowski() {
|
||||||
|
radius = CORNER_RADIUS-CLEARANCE;
|
||||||
|
square([SLOT*size[0]-2*CLEARANCE-radius*2, SLOT*size[1]-2*CLEARANCE-radius*2]);
|
||||||
|
circle(r=radius);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
fill = (mode==GF_BAKJE_MODE_PARFILL)
|
||||||
|
? fill_dis
|
||||||
|
: ((mode==GF_BAKJE_MODE_FILLED)
|
||||||
|
? 10
|
||||||
|
: 0);
|
||||||
|
gf_bakje_inside_cut(size, fill);
|
||||||
|
if (mode == GF_BAKJE_MODE_DEEP) {
|
||||||
|
intersection() {
|
||||||
|
translate(-[size[0]-1,size[1]-1]*21)
|
||||||
|
for (x = [0:size[0]-1])
|
||||||
|
for (y = [0:size[1]-1])
|
||||||
|
translate([x*42, y*42])
|
||||||
|
gf_bakje_deep_cut();
|
||||||
|
square_rounded(
|
||||||
|
size1 = [SLOT*size[0]-2*CLEARANCE-2*WALL_THIKNESS, SLOT*size[1]-2*CLEARANCE-2*WALL_THIKNESS],
|
||||||
|
size2 = [SLOT*size[0]-2*CLEARANCE-2*WALL_THIKNESS, SLOT*size[1]-2*CLEARANCE-2*WALL_THIKNESS],
|
||||||
|
r1 = CORNER_RADIUS-CLEARANCE-WALL_THIKNESS, r2 = CORNER_RADIUS-CLEARANCE-WALL_THIKNESS,
|
||||||
|
h = NESTING_DEPTH+WALL_THIKNESS);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
square_rounded(
|
||||||
|
size1 = [SLOT*size[0]-2*CLEARANCE, SLOT*size[1]-2*CLEARANCE],
|
||||||
|
size2 = [SLOT*size[0]-2*CLEARANCE, SLOT*size[1]-2*CLEARANCE],
|
||||||
|
r1 = CORNER_RADIUS-CLEARANCE, r2 = CORNER_RADIUS-CLEARANCE,
|
||||||
|
h = size[2]*7+NESTING_DEPTH);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
module gf_grid(size) {
|
||||||
|
difference() {
|
||||||
|
// block
|
||||||
|
translate([
|
||||||
|
-SLOT*size[0]/2+CORNER_RADIUS,
|
||||||
|
-SLOT*size[1]/2+CORNER_RADIUS,
|
||||||
|
0])
|
||||||
|
linear_extrude(NESTING_DEPTH-0.001)
|
||||||
|
minkowski() {
|
||||||
|
radius = CORNER_RADIUS-CLEARANCE;
|
||||||
|
square([SLOT*size[0]-2*CLEARANCE-radius*2, SLOT*size[1]-2*CLEARANCE-radius*2]);
|
||||||
|
circle(r=radius);
|
||||||
|
}
|
||||||
|
// cut
|
||||||
|
translate(-[size[0]-1,size[1]-1]*SLOT/2)
|
||||||
|
for (x = [0:size[0]-1])
|
||||||
|
for (y = [0:size[1]-1])
|
||||||
|
translate([x*SLOT, y*SLOT])
|
||||||
|
gf_grid_cut();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (RENDER_GF_BAKJE) {
|
||||||
|
// projection(true)
|
||||||
|
// rotate([0, 90, 0])
|
||||||
|
gf_bakje([WIDTH, DEPTH, HIEGHT], mode=MODE, fill_dis=FILL_DEPTH);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (RENDER_GF_GRID) {
|
||||||
|
// projection(true)
|
||||||
|
// rotate([0, 90, 0])
|
||||||
|
gf_grid([WIDTH, DEPTH]);
|
||||||
}
|
}
|
||||||
|
|||||||
73
render.sh
73
render.sh
@ -19,72 +19,17 @@ function slice(){
|
|||||||
}
|
}
|
||||||
|
|
||||||
function renderBakjes(){
|
function renderBakjes(){
|
||||||
for part in bakje grid ;
|
echo "$0: render bakje sewing_spools"
|
||||||
do
|
${OPENSCAD} -o "stl/bakje-gf_sewing_spools-2x2x4.stl" \
|
||||||
for x in {1..4}
|
"gf_sewing_spools.scad" || exit 1
|
||||||
do
|
rm bakje/gf_sewing_spools-2x2x4/*
|
||||||
for y in {1..4}
|
slice "bakje" "gf_sewing_spools-2x2x4" 1
|
||||||
do
|
slice "bakje" "gf_sewing_spools-2x2x4" 2
|
||||||
echo "$0: render $part ${x}x${y}"
|
slice "bakje" "gf_sewing_spools-2x2x4" 4
|
||||||
${OPENSCAD} -o stl/"${part}-${x}x${y}.stl" \
|
|
||||||
-D "RENDER=\"${part}\"" \
|
|
||||||
-D WIDTH=${x} \
|
|
||||||
-D DEPTH=${y} \
|
|
||||||
"bakje.scad" || exit 1
|
|
||||||
|
|
||||||
max=$(echo -e "$x\n$y" | sort --numeric-sort --reverse | head --lines 1)
|
|
||||||
min=$(echo -e "$x\n$y" | sort --numeric-sort | head --lines 1)
|
|
||||||
|
|
||||||
if [ "$max" == "$min" ]
|
|
||||||
then
|
|
||||||
if [ "${x}" == "1" ]
|
|
||||||
then
|
|
||||||
dubs=(1 2 4 6 9 12 16)
|
|
||||||
elif [ "${x}" == "2" ]
|
|
||||||
then
|
|
||||||
dubs=(1 2 4)
|
|
||||||
else
|
|
||||||
dubs=(1)
|
|
||||||
fi
|
|
||||||
elif [ "${min}" == "1" ]
|
|
||||||
then
|
|
||||||
if [ "${max}" == "2" ]
|
|
||||||
then
|
|
||||||
dubs=(1 2 4 6 8)
|
|
||||||
elif [ "${max}" == "3" ]
|
|
||||||
then
|
|
||||||
dubs=(1 2 3 4)
|
|
||||||
elif [ "${max}" == "4" ]
|
|
||||||
then
|
|
||||||
dubs=(1 2 4)
|
|
||||||
fi
|
|
||||||
elif [ "${min}" == "2" ]
|
|
||||||
then
|
|
||||||
dubs=(1 2)
|
|
||||||
else
|
|
||||||
dubs=(1)
|
|
||||||
fi
|
|
||||||
|
|
||||||
for dub in ${dubs[*]}
|
|
||||||
do
|
|
||||||
echo "$0: slice $dub dublicates of $part ${x}x${y}"
|
|
||||||
slice ${part} ${x}x${y} ${dub}
|
|
||||||
done
|
|
||||||
done
|
|
||||||
done
|
|
||||||
done
|
|
||||||
|
|
||||||
# bakje bobbin
|
|
||||||
echo "$0: render bakje bobbin"
|
|
||||||
${OPENSCAD} -o "stl/bakje-bobbin-2x2.stl" \
|
|
||||||
-D WIDTH=${x} \
|
|
||||||
-D DEPTH=${y} \
|
|
||||||
"bakje_bobbin.scad" || exit 1
|
|
||||||
slice "bakje" "bobbin-2x2" 1
|
|
||||||
}
|
}
|
||||||
|
|
||||||
mkdir -p stl bakje grid koffer
|
mkdir -p stl bakje grid koffer
|
||||||
rm stl/*
|
# rm stl/*
|
||||||
rm -r bakje/* grid/*
|
# rm -r bakje/* grid/*
|
||||||
|
|
||||||
renderBakjes
|
renderBakjes
|
||||||
|
|||||||
16
renderer/Cargo.lock
generated
Normal file
16
renderer/Cargo.lock
generated
Normal file
@ -0,0 +1,16 @@
|
|||||||
|
# This file is automatically @generated by Cargo.
|
||||||
|
# It is not intended for manual editing.
|
||||||
|
version = 4
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "renderer"
|
||||||
|
version = "0.1.0"
|
||||||
|
dependencies = [
|
||||||
|
"task_queue",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "task_queue"
|
||||||
|
version = "0.0.7"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "cc3565d761dd0dfe646e88991f89ea6d16c82268dcfd5d4c284d31a3b37bb63a"
|
||||||
7
renderer/Cargo.toml
Normal file
7
renderer/Cargo.toml
Normal file
@ -0,0 +1,7 @@
|
|||||||
|
[package]
|
||||||
|
name = "renderer"
|
||||||
|
version = "0.1.0"
|
||||||
|
edition = "2021"
|
||||||
|
|
||||||
|
[dependencies]
|
||||||
|
task_queue = "0.0.7"
|
||||||
Some files were not shown because too many files have changed in this diff Show More
Loading…
x
Reference in New Issue
Block a user