chiark / gitweb /
4cdac3e9e80968b1a5caeaa7cf2a75beb9e3ca3c
[reprap-play.git] / pull-cord-keeper.scad
1 // -*- C -*-
2
3 hoopthick = 3;
4
5 hinnerrad = 15;
6 houterrad = hinnerrad + hoopthick;
7 hcentredist = 10;
8
9 blockdepth = 5;
10 blockwidth = hcentredist*2 + 6;
11
12 height = 20;
13
14 ziglen = hcentredist/2;
15
16 feedxgap = 5;
17 feedzgap = 5;
18 ribsgap = 1;
19
20 ribdepth = 3;
21 ribheight = 4;
22
23 module Oval(centredist, rad) {
24   hull() {
25     translate([-centredist/2,0,0]) circle(r=rad);
26     translate([+centredist/2,0,0]) circle(r=rad);
27   }
28 }  
29
30 module Hoop(){
31   difference(){
32     hull(){
33       Oval(hcentredist, houterrad);
34       translate([0, (blockdepth + hoopthick)/2 + hinnerrad])
35         square([blockwidth,
36                 blockdepth + hoopthick],
37                center=true);
38     }
39     Oval(hcentredist, hinnerrad);
40   }
41 }
42
43 module Positive(){
44   translate([0,0, -height/2])
45     linear_extrude(height=20)
46     Hoop();
47 }
48
49 module Ribs(){
50   imax = ceil(height*2 / ribheight);
51   for (i=[-imax:imax]) {
52     hull(){
53       translate([-ribdepth/2,
54                  ribheight*i,
55                  0])
56         polygon([[0,          0],
57                  [ribdepth, -ribheight],
58                  [ribdepth, +ribheight]]);
59       translate([50, 0])
60         square([1, height*2], center=true);
61     }
62   }
63 }           
64
65 module Division(biggerpi) {
66   xgap = feedxgap * biggerpi;
67   zgap = feedzgap * biggerpi;
68
69   mirror([0,0,1])
70     translate([-ziglen + xgap/2, -100, zgap/2])
71     cube([100, 100, 50]);
72
73   translate([50, houterrad + blockdepth/2 + ribsgap * biggerpi, 0])
74     rotate([-90,0,90])
75     linear_extrude(height=100)
76     Ribs();
77 }
78
79 module Demo(){
80   //difference(){
81   %  Positive();
82   //  Division(0);
83   //}
84   Division(0);
85 }
86
87 //Ribs();
88 Demo();