summaryrefslogtreecommitdiffabout
Unidiff
Diffstat (more/less context) (show whitespace changes)
-rw-r--r--fanduct.scad1
1 files changed, 1 insertions, 0 deletions
diff --git a/fanduct.scad b/fanduct.scad
index 6eef682..d467c60 100644
--- a/fanduct.scad
+++ b/fanduct.scad
@@ -50,192 +50,193 @@ module fanduct(type=type) {
50 50
51 // ***bumps for easier position adjustments in line with hotend 51 // ***bumps for easier position adjustments in line with hotend
52 module marks(what) { 52 module marks(what) {
53 if(what=="in") { 53 if(what=="in") {
54 for(y=[-1,1]) translate([0,y*(fanduct_ir+fanduct_shell+fanduct_w/2),fanduct_shell*2+fanduct_h]) 54 for(y=[-1,1]) translate([0,y*(fanduct_ir+fanduct_shell+fanduct_w/2),fanduct_shell*2+fanduct_h])
55 rotate([90,0,0]) { 55 rotate([90,0,0]) {
56 cylinder(r=fanduct_shell,h=fanduct_w,center=true,$fn=30); 56 cylinder(r=fanduct_shell,h=fanduct_w,center=true,$fn=30);
57 for(z=[-1,1]) translate([0,0,z*fanduct_w/2]) 57 for(z=[-1,1]) translate([0,0,z*fanduct_w/2])
58 sphere(r=fanduct_shell,$fn=30); 58 sphere(r=fanduct_shell,$fn=30);
59 } 59 }
60 } 60 }
61 } 61 }
62 62
63 // ***output 63 // ***output
64 module output(what,type=type) { 64 module output(what,type=type) {
65 module guideline(xyxy) { 65 module guideline(xyxy) {
66 module pin(xy) { 66 module pin(xy) {
67 translate([xy[0],xy[1],0]) 67 translate([xy[0],xy[1],0])
68 cylinder(d=2*extrusion_width,h=2*fanduct_shell+inlet_h,$fn=6); 68 cylinder(d=2*extrusion_width,h=2*fanduct_shell+inlet_h,$fn=6);
69 } 69 }
70 xyxyxy=concat(xyxy,[[0,0]]); 70 xyxyxy=concat(xyxy,[[0,0]]);
71 for(i=[0:1:len(xyxyxy)-2]) 71 for(i=[0:1:len(xyxyxy)-2])
72 hull() for(j=[i,i+1]) pin(xyxyxy[j]); 72 hull() for(j=[i,i+1]) pin(xyxyxy[j]);
73 } 73 }
74 74
75 module circus(what) { 75 module circus(what) {
76 if(what=="in") { 76 if(what=="in") {
77 difference() { 77 difference() {
78 rotate_extrude($fn=smooth_f) 78 rotate_extrude($fn=smooth_f)
79 polygon([ 79 polygon([
80 [0,-fanduct_elevation], 80 [0,-fanduct_elevation],
81 [fanduct_ir+fanduct_shell,fanduct_shell+fanduct_h/2], 81 [fanduct_ir+fanduct_shell,fanduct_shell+fanduct_h/2],
82 [fanduct_ir+fanduct_shell,0], 82 [fanduct_ir+fanduct_shell,0],
83 [0,-fanduct_elevation-.1]]); 83 [0,-fanduct_elevation-.1]]);
84 translate([0,0,-1]) 84 translate([0,0,-1])
85 cylinder(r=hotend_clearance,h=fanduct_h+2*fanduct_shell+2,$fn=smooth_f); 85 cylinder(r=hotend_clearance,h=fanduct_h+2*fanduct_shell+2,$fn=smooth_f);
86 mirror([0,0,1]) 86 mirror([0,0,1])
87 translate([0,0,-epsilon]) 87 translate([0,0,-epsilon])
88 cylinder(r=fanduct_ir+fanduct_shell+1,h=fanduct_elevation+.1+2); 88 cylinder(r=fanduct_ir+fanduct_shell+1,h=fanduct_elevation+.1+2);
89 } 89 }
90 }else if(what=="out") { 90 }else if(what=="out") {
91 difference() { 91 difference() {
92 rotate_extrude($fn=smooth_f) 92 rotate_extrude($fn=smooth_f)
93 polygon([ 93 polygon([
94 [0,-fanduct_elevation], 94 [0,-fanduct_elevation],
95 [fanduct_ir+fanduct_shell+1,fanduct_h/2], 95 [fanduct_ir+fanduct_shell+1,fanduct_h/2],
96 [fanduct_ir+fanduct_shell+1,fanduct_shell], 96 [fanduct_ir+fanduct_shell+1,fanduct_shell],
97 [0,-fanduct_elevation-.1]]); 97 [0,-fanduct_elevation-.1]]);
98 circus("airguides"); 98 circus("airguides");
99 } 99 }
100 }else if(what=="airguides") { 100 }else if(what=="airguides") {
101 inr = fanduct_ir+fanduct_shell; our = inr+fanduct_w; 101 inr = fanduct_ir+fanduct_shell; our = inr+fanduct_w;
102 union() { 102 union() {
103 for(my=[0,1]) mirror([0,my,0]) { 103 for(my=[0,1]) mirror([0,my,0]) {
104 guideline([ 104 guideline([
105 [-our,inlet_w/6], 105 [-our,inlet_w/6],
106 [-inr*sin(60),inr*cos(60)] 106 [-inr*sin(60),inr*cos(60)]
107 ]); 107 ]);
108 a0=30; as=15; a1=180; 108 a0=30; as=15; a1=180;
109 for(a=[a0+as:as:a1]) { 109 for(a=[a0+as:as:a1]) {
110 f = as/(a1-a+as); 110 f = as/(a1-a+as);
111 rotate([0,0,a]) guideline([[-inr-fanduct_w*f,0]]); 111 rotate([0,0,a]) guideline([[-inr-fanduct_w*f,0]]);
112 } 112 }
113 guideline([ 113 guideline([
114 [-our+fanduct_w*cos(30)*3/4,fanduct_w*sin(30)*3/4], 114 [-our+fanduct_w*cos(30)*3/4,fanduct_w*sin(30)*3/4],
115 [-inr*cos(10),inr*sin(10)] 115 [-inr*cos(10),inr*sin(10)]
116 ]); 116 ]);
117 } 117 }
118 }/*union*/ 118 }/*union*/
119 }/*airguides*/ 119 }/*airguides*/
120 } 120 }
121 121
122 module jets(what) { 122 module jets(what) {
123 od = fanduct_h/2+fanduct_shell; 123 od = fanduct_h/2+fanduct_shell;
124 difference() { 124 difference() {
125 for(a=[0:120:359]) rotate([0,0,a]) { 125 for(a=[0:120:359]) rotate([0,0,a]) {
126 if(what=="in") { 126 if(what=="in") {
127 hull() { 127 hull() {
128 translate([fanduct_ir+od/2,0,od/2]) 128 translate([fanduct_ir+od/2,0,od/2])
129 rotate([90,0,0]) 129 rotate([90,0,0])
130 cylinder(d=od,h=2*(fanduct_ir+fanduct_shell+fanduct_w/2)*sin(jet_angle/2)-3,center=true,$fn=36); 130 cylinder(d=od,h=2*(fanduct_ir+fanduct_shell+fanduct_w/2)*sin(jet_angle/2)-3,center=true,$fn=36);
131 translate([0,0,-fanduct_elevation]) sphere(r=.5); 131 translate([0,0,-fanduct_elevation]) sphere(r=.5);
132 } 132 }
133 }else if(what=="out") { 133 }else if(what=="out") {
134 hull() { 134 hull() {
135 translate([fanduct_ir+od/2,0,od/2]) 135 translate([fanduct_ir+od/2,0,od/2])
136 rotate([90,0,0]) 136 rotate([90,0,0])
137 cylinder(d=od-2*fanduct_shell,h=2*(fanduct_ir+fanduct_shell+fanduct_w/2)*sin(jet_angle/2)-3-2*fanduct_shell,center=true); 137 cylinder(d=od-2*fanduct_shell,h=2*(fanduct_ir+fanduct_shell+fanduct_w/2)*sin(jet_angle/2)-3-2*fanduct_shell,center=true);
138 translate([0,0,-fanduct_elevation]) sphere(r=.2); 138 translate([0,0,-fanduct_elevation]) sphere(r=.2);
139 } 139 }
140 140
141 type="3jets"; 141 type="3jets";
142 } 142 }
143 } 143 }
144 if(what=="in") { 144 if(what=="in") {
145 translate([0,0,-fanduct_elevation-2+epsilon]) 145 translate([0,0,-fanduct_elevation-2+epsilon])
146 cylinder(r=fanduct_ir+fanduct_shell*2+fanduct_w+1,h=fanduct_elevation+2); 146 cylinder(r=fanduct_ir+fanduct_shell*2+fanduct_w+1,h=fanduct_elevation+2);
147 translate([0,0,-hotend_clearance]) 147 translate([0,0,-hotend_clearance])
148 rotate([0,0,30]) 148 rotate([0,0,30])
149 cylinder(r1=hotend_clearance*2,r2=0,h=hotend_clearance*2,$fn=6); 149 cylinder(r1=hotend_clearance*2,r2=0,h=hotend_clearance*2,$fn=6);
150 } 150 }
151 } 151 }
152 } 152 }
153 153
154 if(type=="circular") circus(what); 154 if(type=="circular") circus(what);
155 else if(type=="3jets") jets(what); 155 else if(type=="3jets") jets(what);
156 } 156 }
157 157
158 // ***air intake 158 // ***air intake
159 module intake(what) { 159 module intake(what) {
160 module placeit() { 160 module placeit() {
161 translate([-fanduct_ir-2*fanduct_shell-fanduct_w-inlet_away,0,fanduct_shell]) 161 translate([-fanduct_ir-2*fanduct_shell-fanduct_w-inlet_away,0,fanduct_shell])
162 rotate([0,-90,0]) 162 rotate([0,-90,0])
163 children(); 163 children();
164 } 164 }
165 if(what=="in") { 165 if(what=="in") {
166 placeit() translate([0,-inlet_w/2,0]) { 166 placeit() translate([0,-inlet_w/2,0]) {
167 cube(size=[inlet_h,inlet_w,inlet_l+fanduct_shell]); 167 cube(size=[inlet_h,inlet_w,inlet_l+fanduct_shell]);
168 // supports 168 // supports
169 for(i=[-1,0,1]) 169 for(i=[-1,0,1])
170 translate([-fanduct_shell, 170 translate([-fanduct_shell,
171 (i+1)*(inlet_w-extrusion_width)/2, 171 (i+1)*(inlet_w-extrusion_width)/2,
172 -inlet_away-fanduct_w/2]) 172 -inlet_away-fanduct_w/2])
173 cube(size=[fanduct_shell, 173 cube(size=[fanduct_shell,
174 extrusion_width, 174 extrusion_width,
175 inlet_l+fanduct_shell+inlet_away+fanduct_w/2]); 175 inlet_l+fanduct_shell+inlet_away+fanduct_w/2]);
176 } 176 }
177 hull() { 177 hull() {
178 placeit() translate([-fanduct_shell,-inlet_w/2-fanduct_shell,0]) 178 placeit() translate([-fanduct_shell,-inlet_w/2-fanduct_shell,0])
179 cube(size=[inlet_h+2*fanduct_shell,inlet_w+2*fanduct_shell,fanduct_shell]); 179 cube(size=[inlet_h+2*fanduct_shell,inlet_w+2*fanduct_shell,fanduct_shell]);
180 translate([-fanduct_ir-fanduct_shell-fanduct_w/2,0,0]) 180 translate([-fanduct_ir-fanduct_shell-fanduct_w/2,0,0])
181 translate([0,-inlet_w/2-fanduct_shell/2,0]) 181 translate([0,-inlet_w/2-fanduct_shell/2,0])
182 cube(size=[1,inlet_w+fanduct_shell,fanduct_shell*2+fanduct_h]); 182 cube(size=[1,inlet_w+fanduct_shell,fanduct_shell*2+fanduct_h]);
183 } 183 }
184 }else if(what=="out") { 184 }else if(what=="out") {
185 placeit() translate([fanduct_shell,-inlet_w/2+fanduct_shell,0]) 185 placeit() translate([fanduct_shell,-inlet_w/2+fanduct_shell,0])
186 cube(size=[inlet_h-2*fanduct_shell,inlet_w-2*fanduct_shell,inlet_l+fanduct_shell+1]); 186 cube(size=[inlet_h-2*fanduct_shell,inlet_w-2*fanduct_shell,inlet_l+fanduct_shell+1]);
187 hull() { 187 hull() {
188 placeit() translate([fanduct_shell,-inlet_w/2+fanduct_shell,0]) 188 placeit() translate([fanduct_shell,-inlet_w/2+fanduct_shell,0])
189 cube(size=[inlet_h-2*fanduct_shell,inlet_w-2*fanduct_shell,fanduct_shell]); 189 cube(size=[inlet_h-2*fanduct_shell,inlet_w-2*fanduct_shell,fanduct_shell]);
190 translate([-fanduct_ir-fanduct_shell-fanduct_w/2,0,fanduct_shell]) 190 translate([-fanduct_ir-fanduct_shell-fanduct_w/2,0,fanduct_shell])
191 translate([0,-inlet_w/2,0]) 191 translate([0,-inlet_w/2,0])
192 cube(size=[1,inlet_w,fanduct_h]); 192 cube(size=[1,inlet_w,fanduct_h]);
193 } 193 }
194 } 194 }
195 } 195 }
196 196
197 // ***DUCT TAILS!!! WOO-OO! (every day they're out there making duct tails…) 197 // ***DUCT TAILS!!! WOO-OO! (every day they're out there making duct tails…)
198 module tails(what) { 198 module tails(what) {
199 if(what=="in") { 199 if(what=="in") {
200 for(mx=[0,1]) mirror([mx,0,0]) 200 for(mx=[0,1]) mirror([mx,0,0])
201 translate([fanduct_ir+fanduct_shell+fanduct_w/2,0,fanduct_shell+fanduct_h]) 201 translate([fanduct_ir+fanduct_shell+fanduct_w/2,0,fanduct_shell+fanduct_h])
202 rotate([90,0,90]) 202 rotate([90,0,90])
203 translate([0,0,-snapper_d/2]) 203 translate([0,0,-snapper_d/2])
204 snapper(d=snapper_d,o=snapper_overlap,side=0,l=fanduct_h+fanduct_shell); 204 snapper(d=snapper_d,o=snapper_overlap,side=0,l=fanduct_h+fanduct_shell);
205 } 205 }
206 } 206 }
207 207
208 module parts(what) { 208 module parts(what) {
209 union() { 209 union() {
210 duct(what); 210 duct(what);
211 marks(what); 211 marks(what);
212 output(what); 212 output(what);
213 intake(what); 213 intake(what);
214 tails(what); 214 tails(what);
215 } 215 }
216 } 216 }
217 217
218 difference() { 218 difference() {
219 parts("in"); 219 parts("in");
220 parts("out"); 220 parts("out");
221 } 221 }
222 222
223} 223}
224 224
225view="full"; // hcut|vcut|* 225view="full"; // hcut|vcut|*
226 226
227hinfinity=4*(fanduct_ir+fanduct_shell*2+fanduct_w+inlet_away); 227hinfinity=4*(fanduct_ir+fanduct_shell*2+fanduct_w+inlet_away);
228vinfinity=2*(fanduct_shell*2+fanduct_h+inlet_h); 228vinfinity=2*(fanduct_shell*2+fanduct_h+inlet_h);
229if(view=="hcut") { 229if(view=="hcut") {
230 difference() { 230 difference() {
231 fanduct(); 231 fanduct();
232 translate([-hinfinity/2,-hinfinity/2,fanduct_shell+fanduct_h/2]) 232 translate([-hinfinity/2,-hinfinity/2,fanduct_shell+fanduct_h/2])
233 cube(size=[hinfinity,hinfinity,vinfinity]); 233 cube(size=[hinfinity,hinfinity,vinfinity]);
234 } 234 }
235}else if(view=="vcut") { 235}else if(view=="vcut") {
236 difference() { 236 difference() {
237 fanduct(); 237 fanduct();
238 translate([-hinfinity/2,0,-vinfinity/2]) 238 translate([-hinfinity/2,0,-vinfinity/2])
239 cube(size=[hinfinity,hinfinity,vinfinity]); 239 cube(size=[hinfinity,hinfinity,vinfinity]);
240 } 240 }
241}else fanduct(); 241}else fanduct();
242/* vim:set sw=1 ai: */