-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 | |||
@@ -31,6 +31,14 @@ var CONFIG = { | |||
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 |
@@ -82,7 +90,8 @@ var CONFIG = { | |||
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 | ||
@@ -584,6 +593,38 @@ function duet() { | |||
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; |
@@ -600,6 +641,7 @@ function P(x) { | |||
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 | }; |