-
Notifications
You must be signed in to change notification settings - Fork 0
/
Plaque.scad
62 lines (54 loc) · 1.75 KB
/
Plaque.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
DEFAULT_SIZE = [20, 10, 1]; // Height value includes frame height
DEFAULT_FRAME_SIZE = [2, 2, 0.5];
DEFAULT_COLOUR = "grey";
DEFAULT_RIVET_RADIUS = 0.3;
DEFAULT_RIVET_HEIGHT = 0.2;
DEFAULT_RIVET_SIDES = 6;
DEFAULT_NUM_X_RIVETS = 9;
DEFAULT_NUM_Y_RIVETS = 5;
module Rivet(rivetRadius, rivetHeight, rivetSides)
{
cylinder(r = rivetRadius, h = rivetHeight, $fn = rivetSides);
}
module Plaque(
size = DEFAULT_SIZE,
frameSize = DEFAULT_FRAME_SIZE,
rivetRadius = DEFAULT_RIVET_RADIUS,
rivetHeight = DEFAULT_RIVET_HEIGHT,
rivetSides = DEFAULT_RIVET_SIDES,
numXRivets = DEFAULT_NUM_X_RIVETS,
numYRivets = DEFAULT_NUM_Y_RIVETS,
colour = DEFAULT_COLOUR)
{
color(colour)
translate([0, 0, size[2] / 2])
difference()
{
// Main body
cube(size, center = true);
// Frame
translate([0, 0, frameSize[2] / 2 + 0.05])
cube(size - frameSize + [0, 0, + 0.1], center = true);
}
// Rivets - X
y = size[1] / 2 - frameSize[1] / 4;
color(colour)
translate([-size[0] / 2 + frameSize[0] / 4, 0, size[2]])
for (x = [0 : numXRivets - 1])
{
xPos = x / (numXRivets - 1) * (size[0] - frameSize[0] / 2);
translate([xPos, y, 0]) Rivet(rivetRadius, rivetHeight, rivetSides);
translate([xPos, -y, 0]) Rivet(rivetRadius, rivetHeight, rivetSides);
}
// Rivets - Y
x = size[0] / 2 - frameSize[0] / 4;
color(colour)
translate([0, -size[1] / 2 + frameSize[1] / 4, size[2]])
for (y = [0 : numYRivets - 1])
{
yPos = y / (numYRivets - 1) * (size[1] - frameSize[1] / 2);
translate([ x, yPos, 0]) Rivet(rivetRadius, rivetHeight, rivetSides);
translate([-x, yPos, 0]) Rivet(rivetRadius, rivetHeight, rivetSides);
}
}
Plaque();