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 | |||
@@ -28,12 +28,20 @@ var CONFIG = { | |||
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: { |
@@ -79,13 +87,14 @@ var CONFIG = { | |||
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 = {}; |
@@ -581,12 +590,44 @@ function duet() { | |||
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]), |
@@ -597,12 +638,13 @@ function refaxes(o) { | |||
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]; |