summaryrefslogtreecommitdiffabout
authorMichael Krelin <hacker@klever.net>2016-01-13 15:20:12 (UTC)
committer Michael Krelin <hacker@klever.net>2016-01-13 15:20:12 (UTC)
commit4463cba1eed4a59d4eba588389a169481798a73c (patch) (side-by-side diff)
treed97866dcfc591ee507cc008c820ce11054187169
parent991ce4f32ed5ea178c20454fab902e11e8472524 (diff)
downloadredelta-4463cba1eed4a59d4eba588389a169481798a73c.zip
redelta-4463cba1eed4a59d4eba588389a169481798a73c.tar.gz
redelta-4463cba1eed4a59d4eba588389a169481798a73c.tar.bz2
first attempt on bed holder
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--delta.jscad57
1 files changed, 54 insertions, 3 deletions
diff --git a/delta.jscad b/delta.jscad
index 24c1c7e..0e8fd62 100644
--- a/delta.jscad
+++ b/delta.jscad
@@ -24,48 +24,54 @@ var CONFIG = {
},
glass: {
r: 195/2, // glass radius
h: 3 // glass thickness
},
duet: {
pcb_size: { x: 124, y: 100, z: 1 },
hole_spacing: { x: 115, y: 92 },
h: 30
},
foot: {
d: 20*Math.sqrt(2), h: 30,
bolt: { d:5, l: 19, hd: 10 },
margin: 2.5,
nut: { d: 8.6 /* TODO: */, h: 3.5 },
shell: 4,
zscalefactor: 1.6,
foot: { ho: 2.5, hi: 5 }
},
duetholder: {
bolt: { d: 3, l: 10, head: { d: 5.33, h: 3 } },
margin: 3,
s: 2.5
},
+ bedholder: {
+ h: 15,
+ margin: 3,
+ nut: { w: 5.4, h: 2.5 },
+ bolt: { d: 3, l: 10, head: { d: 5.33, h: 3 } }
+ },
hotend: {
h: 62.4, // full assembly height
groove: { d:12, h:6 }, // grove diameter and height
ungroove: { d:16, above:3.7, below: 3+4 }
},
effector: {
h: 6,
o: 20, // offset to the rod mounts line
rods_apart: 40,
cone: { shell: 1, angle: Math.PI/6 },
rodend: {
joint_w: 7, // thickness of the joint
screw_l: 20-1, // 20 with the head
screw_d: 3
},
hotend: { margin: 2 },
hinge: {
d: 3, w: 5, margin: 2.5,
h: 1+(6+3.7)/2, // elevation + grove + top
e: 1 // elevation
},
clamp: {
shell: 4.6,
d: 3,
@@ -743,88 +749,132 @@ function heatbed() {
rv.properties.c_glass = new CSG.Connector([0,0,CONFIG.heatbed.h],[0,0,1],[1,0,0]);
rv.properties.P = new CSG.Connector(
[0,0,-CONFIG.foot.h-CONFIG.extrusion.w*2-CONFIG.base.gap-CONFIG.bedholder.h],
[0,0,1],[1,0,0]);
rv.properties.vitamin = true;
return rv.setColor(CONFIG.color.heatbed);
}
function glass() {
var rv = CSG.cylinder({
start: [0,0,0], end: [0,0,CONFIG.glass.h],
radius: CONFIG.glass.r, resolution: 72
});
rv.properties.c_bed = new CSG.Connector([0,0,0],[0,0,1],[1,0,0]);
rv.properties.P = new CSG.Connector([0,0,-CONFIG.foot.h-CONFIG.heatbed.h],[0,0,1],[1,0,0]);
rv.properties.vitamin = true;
return rv.setColor(CONFIG.color.glass);
}
function platform() {
var b = heatbed();
var g = glass();
g = g.connectTo(g.properties.c_bed,b.properties.c_glass,false,0);
return b.union(g);
}
+function bedholder(params) {
+ var h0 = CONFIG.foot.h+CONFIG.extrusion.w*2+CONFIG.base.gap;
+ var bolt_s = CONFIG.bedholder.bolt.l-CONFIG.extrusion.slotdepth+PRINT.play_tolerance*2;
+ var nuth=h0+CONFIG.bedholder.h*3/4;
+ var nutth = nuth+CONFIG.bedholder.nut.h/2+PRINT.slide_tolerance/2;
+ var rv = CSG.roundedCube({
+ corner1: [-CONFIG.extrusion.w/2,-CD.base.inner_inscription_r,h0],
+ corner2: [ CONFIG.extrusion.w/2,-CONFIG.heatbed.sr-3/2-CONFIG.bedholder.margin,h0+CONFIG.bedholder.h],
+ roundradius: CONFIG.bedholder.margin
+ });
+ rv = rv.subtract([
+ CSG.cylinder({ // base screw
+ start: [0,-CD.base.mid_inscription_r,h0-1],
+ end: [0,-CD.base.mid_inscription_r,h0+CONFIG.bedholder.h+1],
+ radius: CONFIG.bedholder.bolt.d/2+PRINT.screw_tolerance/2
+ }),
+ CSG.cylinder({ // bed screw
+ start: [0,-CONFIG.heatbed.sr,h0-1],
+ end: [0,-CONFIG.heatbed.sr,h0+CONFIG.bedholder.h+1],
+ radius: CONFIG.bedholder.bolt.d/2+PRINT.screw_tolerance/2
+ }),
+ CSG.cube({ // nut pocket
+ center: [0,-CONFIG.heatbed.sr,nuth],
+ radius: [CONFIG.extrusion.w/2+1,(CONFIG.bedholder.nut.w+PRINT.slide_tolerance)/2,(CONFIG.bedholder.nut.h+PRINT.slide_tolerance)/2]
+ }),
+ CSG.cylinder({ // sink base screw
+ start: [0,-CD.base.mid_inscription_r,h0+bolt_s],
+ end: [0,-CD.base.mid_inscription_r,h0+CONFIG.bedholder.h+1],
+ radius: CONFIG.bedholder.bolt.head.d/2+PRINT.play_tolerance
+ })
+ ]);
+ rv = rv.union(CSG.cylinder({
+ start: [0,-CONFIG.heatbed.sr,nutth], end: [0,-CONFIG.heatbed.sr,nutth+PRINT.layer_height],
+ radius: (CONFIG.bedholder.nut.w+PRINT.slide_tolerance)/2+PRINT.extrusion_width
+ }));
+ rv = rv.intersect(CSG.cylinder({
+ start: [0,0,h0-1], end: [0,0,h0+CONFIG.bedholder.h+1],
+ radius: CONFIG.heatbed.r, resolution: 270
+ }));
+ rv.properties.P = new CSG.Connector([0,-CD.base.mid_inscription_r,h0],[0,0,1],[1,0,0]);
+ return rv.setColor(CONFIG.color.parts);
+}
+
var PARTS = {
wip: function(params) {
return duetholder(params);
return PARTS.alltogethernow(params);
return base_extrusions();
return foot();
return union(base_extrusions(),column_extrusions(),duet().translate([0,-20,0]));
},
alltogethernow: function(params) {
var cols = columns();
var sides = base_sides();
var feet = THREEWINDS.map(function(w,i) {
var rv = foot();
rv = rv.connectTo(rv.properties.c_column,cols[i].properties.c_bottom,false,0);
var s = shoe();
s = s.connectTo(s.properties.c_foot,rv.properties.c_shoe,false,0);
return rv.union(s);
});
var dh = duetholder();
var dhsw = dh.connectTo(dh.properties.c_h,
new CSG.Connector([-CONFIG.duet.hole_spacing.x/2,-CD.base.mid_inscription_r,CONFIG.foot.h],[0,0,1],[1,0,0]),
false,0);
var d = duet();
d = d.connectTo(d.properties.holes.c_sw,dhsw.properties.duet.c_sw,false,0);
var dhse = dh.connectTo(dh.properties.duet.c_se,d.properties.holes.c_se,false,0);
var dhne = dh.connectTo(dh.properties.duet.c_ne,d.properties.holes.c_ne,false,0);
var dhnw = dh.connectTo(dh.properties.duet.c_nw,d.properties.holes.c_nw,false,0);
var rv = union(cols).union(sides.map(union)).union(feet).union([
d,dhsw,dhse,dhne,dhnw
]);
var p = P(platform());
rv = rv.union(p);
rv.properties.P = new CSG.Connector([0,0,0],[0,0,1],[1,0,0]);
return rv;
},
duetholder: function(params) {
return duetholder();
},
foot: foot,
- shoe: shoe
+ shoe: shoe,
+ bedholder: bedholder
};
function main(params) {
var part = params.part && PARTS[params.part];
if(!part) return refaxes();
var rv = P(part(params));
if(!params.print) rv = rv.union(refaxes());
return rv;
}
function _main(params) {
var e = EFFECTOR.effector();
var hs = E3DV6.heatsink();
hs = hs.connectTo(hs.properties.grove_connector,e.properties.grove_connector,false,0);
var ms = microswitch();
var hd = EFFECTOR.hinged({
microswitch:ms,effector:e
});
ms = ms.connectTo(
ms.properties.screw_connector[0],
hd.properties.microswitch_screw_connector[0],
false, 0);
var hdhd = EFFECTOR.split_hinged(hd);
var fh = EFFECTOR.fanholder();
@@ -850,49 +900,50 @@ function refaxes(o) {
var l = o.l||20, g = o.g||0.7;
return union([
CSG.roundedCylinder({start:[0,0,0],end:[l,0,0]}).setColor([1,0,0,g]),
CSG.roundedCylinder({start:[0,0,0],end:[0,l,0]}).setColor([0,1,0,g]),
CSG.roundedCylinder({start:[0,0,0],end:[0,0,l]}).setColor([0,0,1,g])
]);
}
function P(x) {
return x.connectTo(x.properties.P,new CSG.Connector([0,0,0],[0,0,1],[1,0,0]), false, 0);
}
function getParameterDefinitions() {
return [{
name: 'part',
type: 'choice',
values: [
'platform',
'hinged',
'clamp',
'fanholder',
'duetholder',
'foot', 'shoe',
+ 'bedholder',
'alltogethernow',
'wip'
],
captions: [
'Effector platform',
'Hinged part',
'Clamp',
'Fan holder',
'Duet holder',
- 'Foot',
- 'Shoe',
+ 'Foot', 'Shoe',
+ 'Bed holder',
'All together now!',
'Work in progress'
],
caption: 'Part',
initial: 'wip'
},{
name: 'print',
type: 'checkbox',
caption: 'For print, no nonsense',
initial: false
}];
}
/* vim:set ft=javascript ai: */