-
Notifications
You must be signed in to change notification settings - Fork 3
/
Copy pathcookie_cutter.scad
57 lines (51 loc) · 1.45 KB
/
cookie_cutter.scad
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
// Cookie cutter generator
// Pau Fernández <[email protected]>
// GNU GPL v2
module dxf(file, layer, height) {
orig = dxf_cross(file = file, layer = layer);
translate([-orig[0], -orig[1], 0])
linear_extrude(height = height)
import(file = file, layer = layer);
}
module needle(height, thin, edge_height) {
H1 = height - edge_height;
H2 = edge_height;
union() {
cylinder(r = thin, h = H1, $fn = 6);
translate([0, 0, H1]) {
cylinder(r1 = thin, r2 = 0, h = H2, $fn = 6);
}
}
}
module wall(file, layer, height, thin) {
difference() {
minkowski() {
dxf(file, layer, 0.01);
cylinder(r = thin, h = height, $fn = 6);
}
translate([0, 0, -1]) dxf(file, layer, height + 2);
}
}
module cutter(file, layer, height, edge_height, wall_thickness) {
thin = wall_thickness * 1.1;
difference() {
minkowski() {
dxf(file, layer, 0.01);
needle(height, thin, edge_height);
}
translate([0, 0, -1]) dxf(file, layer, height + 2);
}
}
module cookie_cutter(file, height, edge_height, wall_thickness) {
union () {
cutter(file, "cutter", height, edge_height, wall_thickness);
wall(file, "outer", 1, 5);
}
}
module cookie_cutter_join(file, height, edge_height, wall_thickness) {
mirror([1, 0, 0]) union () {
cutter(file, "cutter", height, edge_height, wall_thickness);
wall(file, "outer", 1.5, 6);
dxf(file, "join", 1.5);
}
}