-
Notifications
You must be signed in to change notification settings - Fork 0
/
utils.scad
121 lines (108 loc) · 3.09 KB
/
utils.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
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
module clock_words(
from_edge=4,
letter_depth=2.25, //disc_thickness+1,
center_offset=0,
font_size=11.5,
words
) {
for (i = [0 : len(words) - 1]) {
angle = (i + 1) * 360 / len(words);
rotate(90 - angle) {
translate([-clock_r + from_edge, center_offset,-0.1]) {
linear_extrude(height=letter_depth+0.2) {
text(words[i], size=font_size, font="Gunplay");
}
}
}
}
}
module fillet(r) {
translate([r / 2, r / 2, 0]) difference() {
square([r + 0.01, r + 0.01], center = true);
translate([r/2, r/2]) circle(r = r, center = true);
}
}
module rounded_rect(w=51, l=21, h=2.25, r=6) {
translate([r, r, 0]) linear_extrude(height = h) minkowski() {
square([w-r*2, l-r*2]);
circle(r);
}
}
module ring(r1=104, r2=101, h=2.25) {
difference() {
cylinder(h, r1, r1, $fn = 400);
translate([0,0,-0.5]) cylinder(h + 1, r2, r2, $fn = 400);
}
}
module disc_with_pattern(r=104, h=2.25) {
difference() {
cylinder(h, r1=r, r2=r, $fn = 200);
translate([-r-1,-r-4,2]) scale(3) linear_extrude(height = h, center = true, convexity = 10) {
// TODO: figure out pattern from radius
for (k = [0:5:r / 1.4]) {
for (i = [0:3:r / 1.4]) {
translate([k, i]) import (file = "egypt pattern.dxf");
}
for (j = [0:3:r / 1.4]) {
translate([k + 2.5, j+1.5]) import (file = "egypt pattern.dxf");
}
}
}
}
}
module disc_with_slots(r=104, h=2.25, slots=12, slot_width=100, slot_r=5, offset=[50,0,-0.5]){
difference() {
cylinder(h, r, r, $fn=300);
// see-through slots
for (i = [0 : slots - 1]) {
angle = (i + 1) * 360 / slots;
rotate(90 - angle) {
translate(offset) {
linear_extrude(height=h + 1) {
hull() {
translate([0, slot_r]) circle(slot_r);
translate([slot_width - (slot_r*2), slot_r]) circle(slot_r);
}
}
}
}
}
}
}
module chamfer(apply = false, outline_z = 2.45, outline_r=0.6) {
children();
if (apply) {
// subtract some of the hours text from the first layer
// text is offset by -0.5 and first layer is 0.3mm -> want to offset by:
outline_z = disc_thickness + 0.2;
// outline distance away from main text
outline_r = 0.8;
for (theta = [0 : 30 : 359]) {
translate([outline_r * cos(theta), outline_r * sin(theta), outline_z]) {
children();
}
}
}
}
module rotate_360(count = 12) {
for (i = [0 : count - 1]) {
angle = (i + 1) * 360 / count;
rotate(90 - angle) {
children();
}
}
}
module straight_nub(w = 2, h = 4, l = 10) {
difference() {
cube([w,l*2,h]);
rotate([45,0,0])cube([w+1,l*2,h]);
}
}
module circular_nub(r = 100, w = 2, h = 6.75) {
intersection() {
ring(r,r-w,h);
translate([r-1,0,0]) cylinder(h, 8, 2, $fn=20);
}
}
//rounded_rect(50, 100, 4, 6);
//cube([50, 100, 4]);