]> www.fi.muni.cz Git - things.git/blob - firefly-q6-case.scad
Firefly Q6 case - lighter approach
[things.git] / firefly-q6-case.scad
1 infty = 200;
2 eps = 0.01;
3
4 wall = 1;
5
6 body_l = 70 + 0.5;
7 body_w = 33 + 0.5;
8 body_h = 28 + 0.5;
9 corner_r = 8;
10 corner_side_h = 12;
11
12 hook_w = 3.5;
13 hook_l = 6;
14 hook_hole_l = 3;
15 hook_hole_w = 2;
16 hook_h = 3;
17
18 bottom_hole_l = body_l - 2*corner_r - 2*hook_l;
19 bottom_hole_w = body_w - 4*wall;
20
21 side_hole_l1 = body_l - 4*corner_r;
22 side_hole_l2 = body_l - corner_r;
23 side_hole_bot = 2*wall;
24
25 lens_d = 23;
26 lens_hole_l = 3;
27 lens_zoff = 8;
28
29
30 difference() {
31         // outer body
32         hull() {
33                 for (x = [-1, 1]) for (y = [-1, 1]) scale([x, y, 1])
34                         translate([body_l/2 - corner_r,
35                                 body_w/2 - corner_r, 0])
36                         cylinder(r = corner_r + wall, h = corner_side_h + wall);
37         }
38         // hole for the camera body
39         hull() {
40                 for (x = [-1, 1]) for (y = [-1, 1]) scale([x, y, 1])
41                         translate([body_l/2 - corner_r,
42                                 body_w/2 - corner_r, wall])
43                         cylinder(r = corner_r, h = body_h);
44         }
45         // hole in the bottom
46         translate([-bottom_hole_l/2, -bottom_hole_w/2, -eps])
47                 cube([bottom_hole_l, bottom_hole_w, body_h]);
48         // side hole
49         hull() {
50                 translate([-side_hole_l1/2, -body_w/2-wall-eps, side_hole_bot+wall])
51                         cube([side_hole_l1, body_w+2*wall+2*eps, wall]);
52                 translate([-side_hole_l2/2, -body_w/2-wall-eps, corner_side_h+wall])
53                         cube([side_hole_l2, body_w+2*wall+2*eps, wall]);
54         }
55         // lens holes
56         for (x = [-1, 1]) scale([x, 1, 1]) {
57                 translate([body_l/2-lens_hole_l, 0, lens_zoff + wall])
58                         rotate([0, 90, 0])
59                         cylinder(r = lens_d/2, h = lens_hole_l + wall + eps);
60                 translate([body_l/2-lens_hole_l, -lens_d/2, lens_zoff + wall])
61                         cube([lens_hole_l + wall + eps, lens_d, lens_d/2]);
62         }
63 }
64
65 // rubber band hooks
66 for (x = [-1, 1]) for (y = [-1, 1]) scale([x, y, 1])
67         difference() {
68                 translate([body_l/2 - corner_r - hook_l,
69                         body_w/2, 0])
70                         cube([hook_l, hook_w + wall, hook_h]);
71                 translate([body_l/2 - corner_r - hook_hole_l,
72                         body_w/2 + wall, -eps])
73                         cube([hook_hole_l + eps, hook_hole_w, hook_h+2*eps]);
74         }
75
76 if (0) {
77 // base plate
78 difference() {
79         hull() {
80                 for (x = [-1, 1]) for (y = [-1, 1]) scale([x, y, 1])
81                         translate([body_l/2 - corner_r,
82                                 body_w/2 - corner_r, 0])
83                         cylinder(r = corner_r + wall, h = wall);
84         }
85         // translate([-body_l/2+corner_r + hook_l, -body_w/2+corner_r, -eps])
86         //      cube([body_l-2*corner_r-2*hook_l, body_w - 2*corner_r, wall +2*eps]);
87         translate([-body_l/2+corner_r, -body_w/2+corner_r, -eps])
88                 cube([body_l-2*corner_r, body_w - 2*corner_r, wall +2*eps]);
89
90         // more space for lens
91         for (x = [-1, 1]) scale([x, 1, 1])
92                 translate([body_l/2, -body_w/2+corner_r, -eps])
93                         cube([wall+eps, body_w-2*corner_r, wall+2*eps]);
94 }
95
96 // raised corner bottom
97 for (x = [-1, 1]) for (y = [-1, 1]) scale([x, y, 1])
98         translate([body_l/2 - corner_r,
99                 body_w/2 - corner_r, wall-eps])
100         difference() {
101                 cylinder(r = corner_r + wall, h = wall+eps);
102                 translate([-infty, -infty/2, -infty/2]) cube(infty);
103                 translate([-infty/2, -infty, -infty/2]) cube(infty);
104         }
105
106
107 // raised corner side
108 for (x = [-1, 1]) for (y = [-1, 1]) scale([x, y, 1])
109         translate([body_l/2 - corner_r,
110                 body_w/2 - corner_r, 2*wall-eps])
111         difference() {
112                 cylinder(r = corner_r + wall, h = corner_side_h+eps);
113                 translate([0, 0,-eps])
114                         cylinder(r = corner_r, h = infty);
115                 translate([-infty, -infty/2, -infty/2]) cube(infty);
116                 // front edges cut
117                 rotate([-30, 0, 0])
118                 translate([-infty/2, -infty, -infty/2]) cube(infty);
119         }
120 }
121