chiark / gitweb /
cable-hole-trunking-cover: sides using polygon
[reprap-play.git] / cable-hole-trunking-cover.scad
1 // -*- C -*-
2
3 holedia = 25.4;
4
5 sidewidth = 5;
6 tapewidth = 7;
7 tapethick = 1;
8
9 cutoutsz= 10;
10
11 innerz = 10;
12
13 basex = holedia + sidewidth*2;
14 basey = holedia + tapewidth*2;
15
16 bevelz = 3;
17 bevelslope = 0.75;
18 bevely = bevelz * bevelslope;
19
20 sideslop = 0.5;
21
22 basebaset = 2;
23 sidewallt = 3;
24
25 lidt = 2;
26 endwallt = 2;
27 zslop = 0.75;
28 endslop = 0.75;
29
30 module sheared_cube(sz, xperz, yperz) {
31   multmatrix([[1,0,xperz,0],
32               [0,1,yperz,0],
33               [0,0,1,    0],
34               [0,0,0,    1]])
35     cube(sz);
36 }
37
38 module Base(cutouty){
39   echo(cutouty);
40   difference(){
41     union(){
42       for (mir=[0,1]) mirror([0,mir,0]) {
43         translate([0, basey/2 - sidewallt, 0])
44           sheared_cube([basex, sidewallt, bevelz], 0, bevelslope);
45         cube([basex, basey/2, basebaset]);
46       }
47     }
48     translate([basex/2, 0, -1])
49       cylinder(r=holedia/2, h=bevelz+2);
50   }
51   rotate([90, 0, 90]) {
52     linear_extrude(height=endwallt) {
53       difference(){
54         for (mir=[0,1]) mirror([mir,0,0]) {
55             polygon([[-0.1,             0],
56                      [basey/2,          0],
57                      [basey/2 + bevely, bevelz],
58                      [basey/2 + bevely, innerz],
59                      [-0.1,             innerz]]);
60         }
61         translate([cutouty, 0])
62           square(size=[cutoutsz, 3*innerz], center=true);
63       }
64     }
65   }
66 }
67
68 module Lid(){
69   lidx = basex + endslop + endwallt;
70   for (mir=[0,1]) mirror([0,mir,0]) {
71     translate([0, basey/2 + sideslop + bevely, 0])
72       rotate([90,0,90])
73       linear_extrude(height = lidx)
74       polygon([[0,         0],
75                [-bevely,   0],
76                [0,         bevelz],
77                [0,         innerz + lidt + zslop],
78                [sidewallt, innerz + lidt + zslop],
79                [sidewallt, -tapethick],
80                [0,         -tapethick]]);
81     translate([0, -1, innerz + zslop])
82       cube([lidx, 1 + basey/2 + sideslop + bevely + sidewallt, lidt]);
83     translate([basex + endslop, -1, -tapethick])
84       cube([endwallt, 1 + basey/2 + sideslop + bevely + sidewallt,
85             tapethick + innerz + zslop + 0.1]);
86   }
87 }
88
89 module LidT(){ ////toplevel
90   rotate([180,0,0]) Lid();
91 }
92
93 module BaseCMid(){ ////toplevel
94   Base(0);
95 }
96
97 module BaseCTop(){ ////toplevel
98   Base(basey/2 + bevely - cutoutsz/2);
99 }
100
101 module BaseCBot(){ ////toplevel
102   Base(-(basey/2 + bevely - cutoutsz/2));
103 }
104
105 //BaseCTop();
106 //BaseCMid();
107 //BaseCBot();
108 //LidT();