summaryrefslogtreecommitdiff
path: root/content/posts/files/lets-code-3d_source.scad
blob: b651cb308f9b72ba93895918251d4a08357e741a (plain) (blame)
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],
        ]
    );
}