summaryrefslogtreecommitdiffabout
Unidiff
Diffstat (more/less context) (show whitespace changes)
-rw-r--r--delta.jscad20
1 files changed, 18 insertions, 2 deletions
diff --git a/delta.jscad b/delta.jscad
index ad19f88..eb538d2 100644
--- a/delta.jscad
+++ b/delta.jscad
@@ -1,190 +1,192 @@
1var PRINT = { 1var PRINT = {
2 layer_height: 0.2, 2 layer_height: 0.2,
3 extrusion_width: 0.4, 3 extrusion_width: 0.4,
4 4
5 fit_tolerance: .2, slide_tolerance: .4, play_tolerance: .6 5 fit_tolerance: .2, slide_tolerance: .4, play_tolerance: .6
6}; 6};
7 7
8var CONFIG = { 8var CONFIG = {
9 extrusion: { 9 extrusion: {
10 w: 20 10 w: 20
11 }, 11 },
12 base: { 12 base: {
13 el: 240, // side extrusion length 13 el: 240, // side extrusion length
14 sl: 240+2*70, // triangle side length 14 sl: 240+2*70, // triangle side length
15 gap: 9 // vertical gap between side extrusions 15 gap: 9 // vertical gap between side extrusions
16 }, 16 },
17 column: { 17 column: {
18 h: 600 // column height 18 h: 600 // column height
19 }, 19 },
20 heatbed: { 20 heatbed: {
21 r: 220/2, // heatbed radius 21 r: 220/2, // heatbed radius
22 sr: 220/2-4.5,// radius of the screwholes circle 22 sr: 220/2-4.5,// radius of the screwholes circle
23 h: 3+1.5 // thickness (including insulation) 23 h: 3+1.5 // thickness (including insulation)
24 }, 24 },
25 glass: { 25 glass: {
26 r: 195/2, // glass radius 26 r: 195/2, // glass radius
27 h: 3 // glass thickness 27 h: 3 // glass thickness
28 }, 28 },
29 duet: { 29 duet: {
30 pcb_size: { x: 124, y: 100, z: 1 }, 30 pcb_size: { x: 124, y: 100, z: 1 },
31 hole_spacing: { x: 115, y: 92 }, 31 hole_spacing: { x: 115, y: 92 },
32 h: 30 32 h: 30
33 }, 33 },
34 foot: { 34 foot: {
35 d: 20*Math.sqrt(2), h: 30, 35 d: 20*Math.sqrt(2), h: 30,
36 bolt: { d:5, l: 19, hd: 10 }, 36 bolt: { d:5, l: 19, hd: 10 },
37 margin: 2.5, 37 margin: 2.5,
38 nut: { d: 8.6 /* TODO: */, h: 3.5 }, 38 nut: { d: 8.6 /* TODO: */, h: 3.5 },
39 shell: 4, 39 shell: 4,
40 zscalefactor: 1.6 40 zscalefactor: 1.6,
41 foot: { ho: 2.5, hi: 5 }
41 }, 42 },
42 hotend: { 43 hotend: {
43 h: 62.4, // full assembly height 44 h: 62.4, // full assembly height
44 groove: { d:12, h:6 }, // grove diameter and height 45 groove: { d:12, h:6 }, // grove diameter and height
45 ungroove: { d:16, above:3.7, below: 3+4 } 46 ungroove: { d:16, above:3.7, below: 3+4 }
46 }, 47 },
47 effector: { 48 effector: {
48 h: 6, 49 h: 6,
49 o: 20,// offset to the rod mounts line 50 o: 20,// offset to the rod mounts line
50 rods_apart: 40, 51 rods_apart: 40,
51 cone: { shell: 1, angle: Math.PI/6 }, 52 cone: { shell: 1, angle: Math.PI/6 },
52 rodend: { 53 rodend: {
53 joint_w: 7,// thickness of the joint 54 joint_w: 7,// thickness of the joint
54 screw_l: 20-1, // 20 with the head 55 screw_l: 20-1, // 20 with the head
55 screw_d: 3 56 screw_d: 3
56 }, 57 },
57 hotend: { margin: 2 }, 58 hotend: { margin: 2 },
58 hinge: { 59 hinge: {
59 d: 3, w: 5, margin: 2.5, 60 d: 3, w: 5, margin: 2.5,
60 h: 1+(6+3.7)/2, // elevation + grove + top 61 h: 1+(6+3.7)/2, // elevation + grove + top
61 e: 1 // elevation 62 e: 1 // elevation
62 }, 63 },
63 clamp: { 64 clamp: {
64 shell: 4.6, 65 shell: 4.6,
65 d: 3, 66 d: 3,
66 margin: 2.5, 67 margin: 2.5,
67 split: 0.6 68 split: 0.6
68 }, 69 },
69 mswitch: { 70 mswitch: {
70 size: [ 19.8, 6, 10 ], 71 size: [ 19.8, 6, 10 ],
71 screw: { 72 screw: {
72 d: 2, h: 10/2-2, 73 d: 2, h: 10/2-2,
73 s: 1.3, // screw shell 74 s: 1.3, // screw shell
74 o: [-9.5/2,9.5/2].map(function(x) { 75 o: [-9.5/2,9.5/2].map(function(x) {
75 return -19.8/2+x; 76 return -19.8/2+x;
76 }) 77 })
77 }, 78 },
78 switch_x: 2.5 79 switch_x: 2.5
79 }, 80 },
80 guide: { 81 guide: {
81 width: 3, height: 5+1, length: 6 82 width: 3, height: 5+1, length: 6
82 }, 83 },
83 fanholder: { 84 fanholder: {
84 r: 30, 85 r: 30,
85 screw: { d: 3, m: 2.5/*margin*/ }, 86 screw: { d: 3, m: 2.5/*margin*/ },
86 w: 3 87 w: 3
87 } 88 }
88 }, 89 },
89 nut: { h: 2.3, w: 5.5 }, 90 nut: { h: 2.3, w: 5.5 },
90 color: { 91 color: {
91 extrusion: [0.8, 0.8, 0.8, 0.8], 92 extrusion: [0.8, 0.8, 0.8, 0.8],
92 pcb: [ 0, 0.3, 0.2, 0.8 ], 93 pcb: [ 0, 0.3, 0.2, 0.8 ],
93 bulk: [ .9, .9, .9, .2 ], 94 bulk: [ .9, .9, .9, .2 ],
94 parts: [ 0, 0.8, 0, 0.9 ] 95 parts: [ 0, 0.8, 0, 0.9 ],
96 softparts: [ 0, 0, 0.8, 0.9 ]
95 } 97 }
96}; 98};
97 99
98var CD = { 100var CD = {
99 base: (function(){ 101 base: (function(){
100 var rv = {}; 102 var rv = {};
101 rv.circumscription_r = 103 rv.circumscription_r =
102 CONFIG.base.sl/2/Math.cos(Math.PI/6); 104 CONFIG.base.sl/2/Math.cos(Math.PI/6);
103 rv.outer_inscription_r = 105 rv.outer_inscription_r =
104 Math.sqrt(Math.pow(rv.circumscription_r,2)- 106 Math.sqrt(Math.pow(rv.circumscription_r,2)-
105 Math.pow(CONFIG.base.sl/2,2)); 107 Math.pow(CONFIG.base.sl/2,2));
106 rv.mid_inscription_r = 108 rv.mid_inscription_r =
107 rv.outer_inscription_r-CONFIG.extrusion.w/2; 109 rv.outer_inscription_r-CONFIG.extrusion.w/2;
108 rv.inner_inscription_r = 110 rv.inner_inscription_r =
109 rv.outer_inscription_r-CONFIG.extrusion.w/2; 111 rv.outer_inscription_r-CONFIG.extrusion.w/2;
110 // TODO: properly calculate 112 // TODO: properly calculate
111 rv.column_r = rv.circumscription_r - 48.29; 113 rv.column_r = rv.circumscription_r - 48.29;
112 return rv; 114 return rv;
113 })() 115 })()
114}; 116};
115 117
116var U = { 118var U = {
117 hypotenuse: function(a,b) { 119 hypotenuse: function(a,b) {
118 return Math.sqrt(Math.pow(a,2)+Math.pow(b,2)); 120 return Math.sqrt(Math.pow(a,2)+Math.pow(b,2));
119 }, 121 },
120 peek: function(x,m) { 122 peek: function(x,m) {
121 console.log(x,m); 123 console.log(x,m);
122 return x; 124 return x;
123 } 125 }
124}; 126};
125 127
126/* {h:,w:} */ 128/* {h:,w:} */
127function nut(o) { 129function nut(o) {
128 var rv = CSG.cylinder({ 130 var rv = CSG.cylinder({
129 start:[0,0,0],end:[0,0,o.h], 131 start:[0,0,0],end:[0,0,o.h],
130 radius: o.w/2/Math.cos(Math.PI/6), 132 radius: o.w/2/Math.cos(Math.PI/6),
131 resolution: 6 133 resolution: 6
132 }); 134 });
133 rv.properties.axis_connector = new CSG.Connector([0,0,0],[0,0,1],[0,1,0]); 135 rv.properties.axis_connector = new CSG.Connector([0,0,0],[0,0,1],[0,1,0]);
134 return rv; 136 return rv;
135} 137}
136 138
137var E3DV6 = { 139var E3DV6 = {
138 dimensions: { 140 dimensions: {
139 big_d: 22.3, 141 big_d: 22.3,
140 142
141 }, 143 },
142 heatsink: function() { 144 heatsink: function() {
143 var fn = 16; 145 var fn = 16;
144 var z=0; 146 var z=0;
145 var unite = [ {d:16,h:3.7},{d:12,h:6},{d:16,h:3} ].map(function(x) { 147 var unite = [ {d:16,h:3.7},{d:12,h:6},{d:16,h:3} ].map(function(x) {
146 return CSG.cylinder({ 148 return CSG.cylinder({
147 start: [0,0,z], end: [0,0,z-=x.h], 149 start: [0,0,z], end: [0,0,z-=x.h],
148 radius: x.d/2, resolution: fn 150 radius: x.d/2, resolution: fn
149 }); 151 });
150 }); 152 });
151 unite.push(CSG.cylinder({ 153 unite.push(CSG.cylinder({
152 start:[0,0,z-=1.5], end:[0,0,z-=1], 154 start:[0,0,z-=1.5], end:[0,0,z-=1],
153 radius: 16/2, resolution: fn 155 radius: 16/2, resolution: fn
154 })); 156 }));
155 for(var i=0;i<11;++i) unite.push(CSG.cylinder({ 157 for(var i=0;i<11;++i) unite.push(CSG.cylinder({
156 start:[0,0,z-=1.5], end:[0,0,z-=1], 158 start:[0,0,z-=1.5], end:[0,0,z-=1],
157 radius: this.dimensions.big_d/2, resolution: fn 159 radius: this.dimensions.big_d/2, resolution: fn
158 })); 160 }));
159 unite.push(CSG.cylinder({ 161 unite.push(CSG.cylinder({
160 start:[0,0,z], end: [0,0,-12.7], 162 start:[0,0,z], end: [0,0,-12.7],
161 radiusStart: 10/2, radiusEnd: 8.5/2, /* pretty arbitrary */ 163 radiusStart: 10/2, radiusEnd: 8.5/2, /* pretty arbitrary */
162 resolution: fn 164 resolution: fn
163 })); 165 }));
164 var rv = union(unite); 166 var rv = union(unite);
165 rv = rv.subtract([CSG.cylinder({ 167 rv = rv.subtract([CSG.cylinder({
166 start:[0,0,1], end: [0,0,z-1], 168 start:[0,0,1], end: [0,0,z-1],
167 radius: 4.2/2, resolution: fn 169 radius: 4.2/2, resolution: fn
168 }),CSG.cylinder({ 170 }),CSG.cylinder({
169 start:[0,0,1], end: [0,0,-6.7/*somewhat arbitrary*/], 171 start:[0,0,1], end: [0,0,-6.7/*somewhat arbitrary*/],
170 radius: 8/2, resolution: fn 172 radius: 8/2, resolution: fn
171 }),CSG.cylinder({ 173 }),CSG.cylinder({
172 start:[0,0,z-1], end: [0,0,z+14.8], 174 start:[0,0,z-1], end: [0,0,z+14.8],
173 radius: 6/2 /*M7*/, resolution: fn 175 radius: 6/2 /*M7*/, resolution: fn
174 })]); 176 })]);
175 rv.properties.pushfit_connector = new CSG.Connector([0,0,0],[0,0,-1],[1,0,0]); 177 rv.properties.pushfit_connector = new CSG.Connector([0,0,0],[0,0,-1],[1,0,0]);
176 rv.properties.heatbreak_connector = new CSG.Connector([0,0,z+14.8],[0,0,-1],[1,0,0]); 178 rv.properties.heatbreak_connector = new CSG.Connector([0,0,z+14.8],[0,0,-1],[1,0,0]);
177 rv.properties.grove_connector = new CSG.Connector([0,0,-3.7-3],[0,0,1],[1,0,0]); 179 rv.properties.grove_connector = new CSG.Connector([0,0,-3.7-3],[0,0,1],[1,0,0]);
178 return rv.setColor([0.8,0.8,0.8,0.9]); 180 return rv.setColor([0.8,0.8,0.8,0.9]);
179 } 181 }
180}; 182};
181 183
182var EFFECTOR = { 184var EFFECTOR = {
183 /* {sd: screw diameter, l: cone length, s: screw shell, a: angle from axis} */ 185 /* {sd: screw diameter, l: cone length, s: screw shell, a: angle from axis} */
184 cone: function effector_cone(o) { 186 cone: function effector_cone(o) {
185 var re = o.sd/2+o.s, rs = re+o.l*Math.tan(o.a||(Math.PI/4)); 187 var re = o.sd/2+o.s, rs = re+o.l*Math.tan(o.a||(Math.PI/4));
186 var rv = CSG.cylinder({ 188 var rv = CSG.cylinder({
187 start: [0,0,0], end: [0,0,o.l], 189 start: [0,0,0], end: [0,0,o.l],
188 radiusStart: rs, radiusEnd: re, 190 radiusStart: rs, radiusEnd: re,
189 resolution: Math.floor(rs*2*2) 191 resolution: Math.floor(rs*2*2)
190 }).subtract(CSG.cylinder({ 192 }).subtract(CSG.cylinder({
@@ -543,192 +545,206 @@ var E2020 = {
543}; 545};
544 546
545var THREEWINDS = [0,120,240]; 547var THREEWINDS = [0,120,240];
546 548
547function base_sides() { 549function base_sides() {
548 return [0,1].map(function(l) { 550 return [0,1].map(function(l) {
549 return THREEWINDS.map(function(w) { 551 return THREEWINDS.map(function(w) {
550 var e = E2020.extrusion({l:CONFIG.base.el}); 552 var e = E2020.extrusion({l:CONFIG.base.el});
551 e = e.connectTo(e.properties.c_midway, 553 e = e.connectTo(e.properties.c_midway,
552 new CSG.Connector([0,-CD.base.mid_inscription_r,CONFIG.extrusion.w/2],[1,0,0],[0,0,1]), 554 new CSG.Connector([0,-CD.base.mid_inscription_r,CONFIG.extrusion.w/2],[1,0,0],[0,0,1]),
553 false, 0); 555 false, 0);
554 return ( e.translate([0,0,CONFIG.foot.h+l*(CONFIG.extrusion.w+CONFIG.base.gap)]) 556 return ( e.translate([0,0,CONFIG.foot.h+l*(CONFIG.extrusion.w+CONFIG.base.gap)])
555 .rotateZ(w) 557 .rotateZ(w)
556 .setColor(CONFIG.color.extrusion) ); 558 .setColor(CONFIG.color.extrusion) );
557 }); 559 });
558 }); 560 });
559} 561}
560function base_extrusions() { 562function base_extrusions() {
561 var rv = union( base_sides().map(function(x){return union(x)}) ); 563 var rv = union( base_sides().map(function(x){return union(x)}) );
562 rv.properties.P = new CSG.Connector([0,0,0],[0,0,1],[1,0,0]); 564 rv.properties.P = new CSG.Connector([0,0,0],[0,0,1],[1,0,0]);
563 return rv; 565 return rv;
564} 566}
565 567
566function columns() { 568function columns() {
567 return THREEWINDS.map(function(w) { 569 return THREEWINDS.map(function(w) {
568 return (E2020.extrusion({l:CONFIG.column.h}) 570 return (E2020.extrusion({l:CONFIG.column.h})
569 .translate([0,CD.base.column_r,CONFIG.foot.h]) 571 .translate([0,CD.base.column_r,CONFIG.foot.h])
570 .rotateZ(w).setColor(CONFIG.color.extrusion) 572 .rotateZ(w).setColor(CONFIG.color.extrusion)
571 ); 573 );
572 }); 574 });
573} 575}
574function column_extrusions() { 576function column_extrusions() {
575 var rv = union( columns() ); 577 var rv = union( columns() );
576 rv.properties.P = new CSG.Connector([0,0,0],[0,0,1],[1,0,0]); 578 rv.properties.P = new CSG.Connector([0,0,0],[0,0,1],[1,0,0]);
577 return rv; 579 return rv;
578} 580}
579 581
580function duet() { 582function duet() {
581 var C = CONFIG.duet; 583 var C = CONFIG.duet;
582 var pholes = new CSG.Properties(); 584 var pholes = new CSG.Properties();
583 var hx = C.hole_spacing.x/2; 585 var hx = C.hole_spacing.x/2;
584 var hy = C.hole_spacing.y/2; 586 var hy = C.hole_spacing.y/2;
585 var hh = { nw: [1,-1], ne: [1,1], se: [-1,1], sw: [-1,-1] }; 587 var hh = { nw: [1,-1], ne: [1,1], se: [-1,1], sw: [-1,-1] };
586 var holes = []; 588 var holes = [];
587 for(w in hh) { 589 for(w in hh) {
588 var h = hh[w],_x=h[0]*hx,_y=h[1]*hy; 590 var h = hh[w],_x=h[0]*hx,_y=h[1]*hy;
589 holes.push(CSG.cylinder({start:[_x,_y,-1],end:[_x,_y,C.pcb_size.z+1],radius:3/2})); 591 holes.push(CSG.cylinder({start:[_x,_y,-1],end:[_x,_y,C.pcb_size.z+1],radius:3/2}));
590 pholes['c_'+w] = new CSG.Connector([_x,_y,0],[0,0,1],[1,0,0]); 592 pholes['c_'+w] = new CSG.Connector([_x,_y,0],[0,0,1],[1,0,0]);
591 } 593 }
592 rv = CSG.cube({ 594 rv = CSG.cube({
593 corner1: [-C.pcb_size.x/2, -C.pcb_size.y/2, 0], 595 corner1: [-C.pcb_size.x/2, -C.pcb_size.y/2, 0],
594 corner2: [ C.pcb_size.x/2, C.pcb_size.y/2, C.pcb_size.z] 596 corner2: [ C.pcb_size.x/2, C.pcb_size.y/2, C.pcb_size.z]
595 }).subtract(holes).setColor(CONFIG.color.pcb).union( 597 }).subtract(holes).setColor(CONFIG.color.pcb).union(
596 CSG.cube({ 598 CSG.cube({
597 corner1: [-C.pcb_size.x/2,-C.hole_spacing.y/2+3,C.pcb_size.z], 599 corner1: [-C.pcb_size.x/2,-C.hole_spacing.y/2+3,C.pcb_size.z],
598 corner2: [ C.pcb_size.x/2, C.hole_spacing.y/2-3,C.h] 600 corner2: [ C.pcb_size.x/2, C.hole_spacing.y/2-3,C.h]
599 }).setColor(CONFIG.color.bulk) 601 }).setColor(CONFIG.color.bulk)
600 ); 602 );
601 rv.properties.holes = pholes; 603 rv.properties.holes = pholes;
602 rv.properties.P = new CSG.Connector([0,0,0],[0,0,1],[1,0,0]); 604 rv.properties.P = new CSG.Connector([0,0,0],[0,0,1],[1,0,0]);
603 rv.properties.vitamin = true; 605 rv.properties.vitamin = true;
604 return rv; 606 return rv;
605} 607}
606 608
607function foot() { 609function foot() {
608 var F = CONFIG.foot; 610 var F = CONFIG.foot;
609 var br = F.bolt.hd/2+F.margin; 611 var br = F.bolt.hd/2+F.margin;
610 var bh = F.zscalefactor*Math.sqrt(Math.pow(F.d/2,2)-Math.pow(br,2)); 612 var bh = F.zscalefactor*Math.sqrt(Math.pow(F.d/2,2)-Math.pow(br,2));
611 var th = F.h-bh; 613 var th = F.h-bh;
612 var r = 2*F.d; 614 var r = 2*F.d;
613 var rv = CSG.sphere({ // botom contorted sphere 615 var rv = CSG.sphere({ // botom contorted sphere
614 center: [0,0,0], radius: F.d/2, resolution: r 616 center: [0,0,0], radius: F.d/2, resolution: r
615 }).scale([1,1,F.zscalefactor]).translate([0,0,bh]).union(CSG.cylinder({ // top hat 617 }).scale([1,1,F.zscalefactor]).translate([0,0,bh]).union(CSG.cylinder({ // top hat
616 start: [0,0,bh], end: [0,0,F.h], radius: F.d/2, resolution: r 618 start: [0,0,bh], end: [0,0,F.h], radius: F.d/2, resolution: r
617 })).intersect(CSG.cylinder({ // cut off excess 619 })).intersect(CSG.cylinder({ // cut off excess
618 start: [0,0,0], end: [0,0,F.h], radius: F.d 620 start: [0,0,0], end: [0,0,F.h], radius: F.d
619 })).subtract([ 621 })).subtract([
620 CSG.cylinder({ // bolt hole 622 CSG.cylinder({ // bolt hole
621 start: [0,0,-1], end: [0,0,F.h+1], radius: F.bolt.d/2+PRINT.slide_tolerance 623 start: [0,0,-1], end: [0,0,F.h+1], radius: F.bolt.d/2+PRINT.slide_tolerance
622 }), CSG.cylinder({ // nut hole 624 }), CSG.cylinder({ // nut hole
623 start: [0,0,F.h-F.nut.h-PRINT.play_tolerance], 625 start: [0,0,F.h-F.nut.h-PRINT.play_tolerance],
624 end: [0,0,F.h], 626 end: [0,0,F.h],
625 radius: F.nut.d/2+PRINT.slide_tolerance, resolution: 6 627 radius: F.nut.d/2+PRINT.slide_tolerance, resolution: 6
626 }), CSG.cylinder({ // bolthead/washer hole 628 }), CSG.cylinder({ // bolthead/washer hole
627 start: [0,0,-1], end: [0,0,F.h-F.nut.h-PRINT.play_tolerance-F.shell], 629 start: [0,0,-1], end: [0,0,F.h-F.nut.h-PRINT.play_tolerance-F.shell],
628 radius: F.bolt.hd/2+PRINT.play_tolerance 630 radius: F.bolt.hd/2+PRINT.play_tolerance
629 }) 631 })
630 ]).union(CSG.cylinder({ // bridging patch 632 ]).union(CSG.cylinder({ // bridging patch
631 start: [0,0,F.h-F.nut.h-PRINT.play_tolerance-PRINT.layer_height], 633 start: [0,0,F.h-F.nut.h-PRINT.play_tolerance-PRINT.layer_height],
632 end: [0,0,F.h-F.nut.h-PRINT.play_tolerance], 634 end: [0,0,F.h-F.nut.h-PRINT.play_tolerance],
633 radius: F.nut.d/2 635 radius: F.nut.d/2
634 })); 636 }));
635 rv.properties.c_column = new CSG.Connector([0,0,F.h],[0,0,1],[1,0,0]); 637 rv.properties.c_column = new CSG.Connector([0,0,F.h],[0,0,1],[1,0,0]);
636 rv.properties.P = new CSG.Connector([0,0,F.h],[0,0,-1],[1,0,0]); 638 rv.properties.P = new CSG.Connector([0,0,F.h],[0,0,-1],[1,0,0]);
637 return rv.setColor(CONFIG.color.parts); 639 return rv.setColor(CONFIG.color.parts);
638} 640}
641function foot_foot() {
642 // TODO: connect in the altogethernow?
643 var F = CONFIG.foot;
644 var rv = CSG.cylinder({
645 start: [0,0,0], end: [0,0,F.foot.ho],
646 radius: F.bolt.hd/2+F.margin
647 }).union(CSG.cylinder({
648 start: [0,0,0], end: [0,0,F.foot.ho+F.foot.hi],
649 radius: F.bolt.hd/2+PRINT.play_tolerance-PRINT.fit_tolerance
650 }));
651 rv.properties.c_foot = new CSG.Connector([0,0,F.foot.ho],[0,0,1],[1,0,0]);
652 rv.properties.P = new CSG.Connector([0,0,0],[0,0,1],[1,0,0]);
653 return rv.setColor(CONFIG.color.softparts);
654}
639 655
640function refaxes(o) { 656function refaxes(o) {
641 if(!o) o = {}; 657 if(!o) o = {};
642 var l = o.l||20, g = o.g||0.7; 658 var l = o.l||20, g = o.g||0.7;
643 return union([ 659 return union([
644 CSG.roundedCylinder({start:[0,0,0],end:[l,0,0]}).setColor([1,0,0,g]), 660 CSG.roundedCylinder({start:[0,0,0],end:[l,0,0]}).setColor([1,0,0,g]),
645 CSG.roundedCylinder({start:[0,0,0],end:[0,l,0]}).setColor([0,1,0,g]), 661 CSG.roundedCylinder({start:[0,0,0],end:[0,l,0]}).setColor([0,1,0,g]),
646 CSG.roundedCylinder({start:[0,0,0],end:[0,0,l]}).setColor([0,0,1,g]) 662 CSG.roundedCylinder({start:[0,0,0],end:[0,0,l]}).setColor([0,0,1,g])
647 ]); 663 ]);
648} 664}
649 665
650function P(x) { 666function P(x) {
651 return x.connectTo(x.properties.P,new CSG.Connector([0,0,0],[0,0,1],[1,0,0]), false, 0); 667 return x.connectTo(x.properties.P,new CSG.Connector([0,0,0],[0,0,1],[1,0,0]), false, 0);
652} 668}
653 669
654var PARTS = { 670var PARTS = {
655 wip: function(params) { 671 wip: function(params) {
656 return foot(); 672 return foot();
657 return union(base_extrusions(),column_extrusions(),duet()); 673 return union(base_extrusions(),column_extrusions(),duet());
658 alltogethernow: function(params) { 674 alltogethernow: function(params) {
659 var cols = columns(); 675 var cols = columns();
660 var sides = base_sides(); 676 var sides = base_sides();
661 var feet = THREEWINDS.map(function(w,i) { 677 var feet = THREEWINDS.map(function(w,i) {
662 var rv = foot(); 678 var rv = foot();
663 rv = rv.connectTo(rv.properties.c_column,cols[i].properties.c_bottom,false,0); 679 rv = rv.connectTo(rv.properties.c_column,cols[i].properties.c_bottom,false,0);
664 return rv; 680 return rv;
665 }); 681 });
666 var rv = union(cols).union(sides.map(union)).union(feet); 682 var rv = union(cols).union(sides.map(union)).union(feet);
667 rv.properties.P = new CSG.Connector([0,0,0],[0,0,1],[1,0,0]); 683 rv.properties.P = new CSG.Connector([0,0,0],[0,0,1],[1,0,0]);
668 return rv; 684 return rv;
669 } 685 }
670}; 686};
671 687
672function main(params) { 688function main(params) {
673 var part = params.part && PARTS[params.part]; 689 var part = params.part && PARTS[params.part];
674 if(!part) return refaxes(); 690 if(!part) return refaxes();
675 var rv = P(part(params)); 691 var rv = P(part(params));
676 if(!params.print) rv = rv.union(refaxes()); 692 if(!params.print) rv = rv.union(refaxes());
677 return rv; 693 return rv;
678} 694}
679 695
680function _main(params) { 696function _main(params) {
681 var e = EFFECTOR.effector(); 697 var e = EFFECTOR.effector();
682 var hs = E3DV6.heatsink(); 698 var hs = E3DV6.heatsink();
683 hs = hs.connectTo(hs.properties.grove_connector,e.properties.grove_connector,false,0); 699 hs = hs.connectTo(hs.properties.grove_connector,e.properties.grove_connector,false,0);
684 var ms = microswitch(); 700 var ms = microswitch();
685 var hd = EFFECTOR.hinged({ 701 var hd = EFFECTOR.hinged({
686 microswitch:ms,effector:e 702 microswitch:ms,effector:e
687 }); 703 });
688 ms = ms.connectTo( 704 ms = ms.connectTo(
689 ms.properties.screw_connector[0], 705 ms.properties.screw_connector[0],
690 hd.properties.microswitch_screw_connector[0], 706 hd.properties.microswitch_screw_connector[0],
691 false, 0); 707 false, 0);
692 var hdhd = EFFECTOR.split_hinged(hd); 708 var hdhd = EFFECTOR.split_hinged(hd);
693 var fh = EFFECTOR.fanholder(); 709 var fh = EFFECTOR.fanholder();
694 return union({ 710 return union({
695 platform: e, 711 platform: e,
696 hinged: hdhd[1], 712 hinged: hdhd[1],
697 clamp: hdhd[0], 713 clamp: hdhd[0],
698 fanholder: fh, 714 fanholder: fh,
699 alltogethernow: [e,hdhd[0],hdhd[1], columns(),hs,ms,fh] 715 alltogethernow: [e,hdhd[0],hdhd[1], columns(),hs,ms,fh]
700 }[params.part||'alltogethernow']) 716 }[params.part||'alltogethernow'])
701 var rv = union( 717 var rv = union(
702 e, 718 e,
703 hs, 719 hs,
704 columns(), 720 columns(),
705 ///hd, 721 ///hd,
706 hdhd[0], hdhd[1], 722 hdhd[0], hdhd[1],
707 ms); 723 ms);
708 return rv; 724 return rv;
709} 725}
710 726
711function getParameterDefinitions() { 727function getParameterDefinitions() {
712 return [{ 728 return [{
713 name: 'part', 729 name: 'part',
714 type: 'choice', 730 type: 'choice',
715 values: [ 731 values: [
716 'platform', 732 'platform',
717 'hinged', 733 'hinged',
718 'clamp', 734 'clamp',
719 'fanholder', 735 'fanholder',
720 'alltogethernow', 736 'alltogethernow',
721 'wip' 737 'wip'
722 ], 738 ],
723 captions: [ 739 captions: [
724 'Effector platform', 740 'Effector platform',
725 'Hinged part', 741 'Hinged part',
726 'Clamp', 742 'Clamp',
727 'Fan holder', 743 'Fan holder',
728 'All together now!', 744 'All together now!',
729 'Work in progress' 745 'Work in progress'
730 ], 746 ],
731 caption: 'Part', 747 caption: 'Part',
732 initial: 'wip' 748 initial: 'wip'
733 },{ 749 },{
734 name: 'print', 750 name: 'print',