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
|
// Толщина стенки
wall = 2;
// Высота внешняя
height = 12;
// Длина основной части (внутренняя)
l1 = 15;
// Длина носика (внутренняя)
l2 = 20;
// Ширина у основания (внутренняя)
w = 15;
// Толщина метала бокорезов
toolWidth = 2.1;
// Нижняя крышка
cover(0);
// Верхняя крышка
cover(height - wall);
// Корпус
difference() {
linear_extrude(height)
polygon(
[ // Полигон идёт против часовой стрелки
[0, 0],
[wall, 0],
[wall, l1],
[w / 2 + wall, l1 + l2], // Внутренний кончик носика
[w + wall, l1],
[w + wall, 0],
[w + wall * 2, 0],
[w + wall * 2, l1],
[w / 2 + wall / 2 + wall, l1 + l2 + wall], // Внешний кончик носика
[w / 2 - wall / 2 + wall, l1 + l2 + wall],
[0, l1],
]
);
// Вырезы
translate([w + wall, 0, height / 2 - toolWidth]) // Правый вырез чуть ниже середины
cube([wall, l1 / 2, toolWidth]);
translate([0, 0, height / 2]) // Левый вырез чуть выше середины
cube([wall, l1 / 2, toolWidth]);
}
// Крышка
module cover(z) {
translate([0, 0, z])
linear_extrude(wall)
polygon(
[ // Полигон идёт против часовой стрелки
[0, 0],
[w + wall * 2, 0],
[w + wall * 2, l1],
[w / 2 + wall / 2 + wall, l1 + l2 + wall],
[w / 2 - wall / 2 + wall, l1 + l2 + wall],
[0, l1],
]
);
}
|