author | Michael Krelin <hacker@klever.net> | 2016-01-07 17:31:31 (UTC) |
---|---|---|
committer | Michael Krelin <hacker@klever.net> | 2016-01-07 17:31:31 (UTC) |
commit | 5980d4a6d0f40119a633020146b861a805b108c8 (patch) (unidiff) | |
tree | 5418575f9c072d57fe7afb38e26525653e41e262 | |
parent | 8366ce3996a539918b7a3e04fa6b5d9cdce580ad (diff) | |
download | redelta-5980d4a6d0f40119a633020146b861a805b108c8.zip redelta-5980d4a6d0f40119a633020146b861a805b108c8.tar.gz redelta-5980d4a6d0f40119a633020146b861a805b108c8.tar.bz2 |
feet
-rw-r--r-- | delta.jscad | 44 |
1 files changed, 43 insertions, 1 deletions
diff --git a/delta.jscad b/delta.jscad index b718fd4..fa33a0d 100644 --- a/delta.jscad +++ b/delta.jscad | |||
@@ -22,24 +22,32 @@ var CONFIG = { | |||
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: { | ||
35 | d: 20*Math.sqrt(2), h: 30, | ||
36 | bolt: { d:5, l: 19, hd: 10 }, | ||
37 | margin: 2.5, | ||
38 | nut: { d: 8.6 /* TODO: */, h: 3.5 }, | ||
39 | shell: 4, | ||
40 | zscalefactor: 1.6 | ||
41 | }, | ||
34 | hotend: { | 42 | hotend: { |
35 | h: 62.4, // full assembly height | 43 | h: 62.4, // full assembly height |
36 | groove: { d:12, h:6 }, // grove diameter and height | 44 | groove: { d:12, h:6 }, // grove diameter and height |
37 | ungroove: { d:16, above:3.7, below: 3+4 } | 45 | ungroove: { d:16, above:3.7, below: 3+4 } |
38 | }, | 46 | }, |
39 | effector: { | 47 | effector: { |
40 | h: 6, | 48 | h: 6, |
41 | o: 20,// offset to the rod mounts line | 49 | o: 20,// offset to the rod mounts line |
42 | rods_apart: 40, | 50 | rods_apart: 40, |
43 | cone: { shell: 1, angle: Math.PI/6 }, | 51 | cone: { shell: 1, angle: Math.PI/6 }, |
44 | rodend: { | 52 | rodend: { |
45 | joint_w: 7,// thickness of the joint | 53 | joint_w: 7,// thickness of the joint |
@@ -73,25 +81,26 @@ var CONFIG = { | |||
73 | width: 3, height: 5+1, length: 6 | 81 | width: 3, height: 5+1, length: 6 |
74 | }, | 82 | }, |
75 | fanholder: { | 83 | fanholder: { |
76 | r: 30, | 84 | r: 30, |
77 | screw: { d: 3, m: 2.5/*margin*/ }, | 85 | screw: { d: 3, m: 2.5/*margin*/ }, |
78 | w: 3 | 86 | w: 3 |
79 | } | 87 | } |
80 | }, | 88 | }, |
81 | nut: { h: 2.3, w: 5.5 }, | 89 | nut: { h: 2.3, w: 5.5 }, |
82 | color: { | 90 | color: { |
83 | extrusion: [0.8, 0.8, 0.8, 0.8], | 91 | extrusion: [0.8, 0.8, 0.8, 0.8], |
84 | pcb: [ 0, 0.3, 0.2, 0.8 ], | 92 | pcb: [ 0, 0.3, 0.2, 0.8 ], |
85 | bulk: [ .9, .9, .9, .2 ] | 93 | bulk: [ .9, .9, .9, .2 ], |
94 | parts: [ 0, 0.8, 0, 0.9 ] | ||
86 | } | 95 | } |
87 | }; | 96 | }; |
88 | 97 | ||
89 | var CD = { | 98 | var CD = { |
90 | base: (function(){ | 99 | base: (function(){ |
91 | var rv = {}; | 100 | var rv = {}; |
92 | rv.circumscription_r = | 101 | rv.circumscription_r = |
93 | CONFIG.base.sl/2/Math.cos(Math.PI/6); | 102 | CONFIG.base.sl/2/Math.cos(Math.PI/6); |
94 | rv.outer_inscription_r = | 103 | rv.outer_inscription_r = |
95 | Math.sqrt(Math.pow(rv.circumscription_r,2)- | 104 | Math.sqrt(Math.pow(rv.circumscription_r,2)- |
96 | Math.pow(CONFIG.base.sl/2,2)); | 105 | Math.pow(CONFIG.base.sl/2,2)); |
97 | rv.mid_inscription_r = | 106 | rv.mid_inscription_r = |
@@ -575,40 +584,73 @@ function duet() { | |||
575 | }).subtract(holes).setColor(CONFIG.color.pcb).union( | 584 | }).subtract(holes).setColor(CONFIG.color.pcb).union( |
576 | CSG.cube({ | 585 | CSG.cube({ |
577 | corner1: [-C.pcb_size.x/2,-C.hole_spacing.y/2+3,C.pcb_size.z], | 586 | corner1: [-C.pcb_size.x/2,-C.hole_spacing.y/2+3,C.pcb_size.z], |
578 | corner2: [ C.pcb_size.x/2, C.hole_spacing.y/2-3,C.h] | 587 | corner2: [ C.pcb_size.x/2, C.hole_spacing.y/2-3,C.h] |
579 | }).setColor(CONFIG.color.bulk) | 588 | }).setColor(CONFIG.color.bulk) |
580 | ); | 589 | ); |
581 | rv.properties.holes = pholes; | 590 | rv.properties.holes = pholes; |
582 | rv.properties.P = new CSG.Connector([0,0,0],[0,0,1],[1,0,0]); | 591 | rv.properties.P = new CSG.Connector([0,0,0],[0,0,1],[1,0,0]); |
583 | rv.properties.vitamin = true; | 592 | rv.properties.vitamin = true; |
584 | return rv; | 593 | return rv; |
585 | } | 594 | } |
586 | 595 | ||
596 | function foot() { | ||
597 | var F = CONFIG.foot; | ||
598 | var br = F.bolt.hd/2+F.margin; | ||
599 | var bh = F.zscalefactor*Math.sqrt(Math.pow(F.d/2,2)-Math.pow(br,2)); | ||
600 | var th = F.h-bh; | ||
601 | var r = 2*F.d; | ||
602 | var rv = CSG.sphere({ // botom contorted sphere | ||
603 | center: [0,0,0], radius: F.d/2, resolution: r | ||
604 | }).scale([1,1,F.zscalefactor]).translate([0,0,bh]).union(CSG.cylinder({ // top hat | ||
605 | start: [0,0,bh], end: [0,0,F.h], radius: F.d/2, resolution: r | ||
606 | })).intersect(CSG.cylinder({ // cut off excess | ||
607 | start: [0,0,0], end: [0,0,F.h], radius: F.d | ||
608 | })).subtract([ | ||
609 | CSG.cylinder({ // bolt hole | ||
610 | start: [0,0,-1], end: [0,0,F.h+1], radius: F.bolt.d/2+PRINT.slide_tolerance | ||
611 | }), CSG.cylinder({ // nut hole | ||
612 | start: [0,0,F.h-F.nut.h-PRINT.play_tolerance], | ||
613 | end: [0,0,F.h], | ||
614 | radius: F.nut.d/2+PRINT.slide_tolerance, resolution: 6 | ||
615 | }), CSG.cylinder({ // bolthead/washer hole | ||
616 | start: [0,0,-1], end: [0,0,F.h-F.nut.h-PRINT.play_tolerance-F.shell], | ||
617 | radius: F.bolt.hd/2+PRINT.play_tolerance | ||
618 | }) | ||
619 | ]).union(CSG.cylinder({ // bridging patch | ||
620 | start: [0,0,F.h-F.nut.h-PRINT.play_tolerance-PRINT.layer_height], | ||
621 | end: [0,0,F.h-F.nut.h-PRINT.play_tolerance], | ||
622 | radius: F.nut.d/2 | ||
623 | })); | ||
624 | rv.properties.P = new CSG.Connector([0,0,F.h],[0,0,-1],[1,0,0]); | ||
625 | return rv.setColor(CONFIG.color.parts); | ||
626 | } | ||
627 | |||
587 | function refaxes(o) { | 628 | function refaxes(o) { |
588 | if(!o) o = {}; | 629 | if(!o) o = {}; |
589 | var l = o.l||20, g = o.g||0.7; | 630 | var l = o.l||20, g = o.g||0.7; |
590 | return union([ | 631 | return union([ |
591 | CSG.cylinder({start:[0,0,0],end:[l,0,0]}).setColor([1,0,0,g]), | 632 | CSG.cylinder({start:[0,0,0],end:[l,0,0]}).setColor([1,0,0,g]), |
592 | CSG.cylinder({start:[0,0,0],end:[0,l,0]}).setColor([0,1,0,g]), | 633 | CSG.cylinder({start:[0,0,0],end:[0,l,0]}).setColor([0,1,0,g]), |
593 | CSG.cylinder({start:[0,0,0],end:[0,0,l]}).setColor([0,0,1,g]) | 634 | CSG.cylinder({start:[0,0,0],end:[0,0,l]}).setColor([0,0,1,g]) |
594 | ]); | 635 | ]); |
595 | } | 636 | } |
596 | 637 | ||
597 | function P(x) { | 638 | function P(x) { |
598 | return x.connectTo(x.properties.P,new CSG.Connector([0,0,0],[0,0,1],[1,0,0]), false, 0); | 639 | return x.connectTo(x.properties.P,new CSG.Connector([0,0,0],[0,0,1],[1,0,0]), false, 0); |
599 | } | 640 | } |
600 | 641 | ||
601 | var PARTS = { | 642 | var PARTS = { |
602 | wip: function(params) { | 643 | wip: function(params) { |
644 | return foot(); | ||
603 | return union(base_extrusions(),column_extrusions(),duet()); | 645 | return union(base_extrusions(),column_extrusions(),duet()); |
604 | } | 646 | } |
605 | }; | 647 | }; |
606 | 648 | ||
607 | function main(params) { | 649 | function main(params) { |
608 | var part = params.part && PARTS[params.part]; | 650 | var part = params.part && PARTS[params.part]; |
609 | if(!part) return refaxes(); | 651 | if(!part) return refaxes(); |
610 | var rv = P(part(params)); | 652 | var rv = P(part(params)); |
611 | if(!params.print) rv = rv.union(refaxes()); | 653 | if(!params.print) rv = rv.union(refaxes()); |
612 | return rv; | 654 | return rv; |
613 | } | 655 | } |
614 | 656 | ||