summaryrefslogtreecommitdiffabout
Unidiff
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--delta.jscad8
1 files changed, 8 insertions, 0 deletions
diff --git a/delta.jscad b/delta.jscad
index 9941125..043f6f8 100644
--- a/delta.jscad
+++ b/delta.jscad
@@ -360,267 +360,275 @@ var EFFECTOR = {
360 rv = rv.union(CSG.cube({ // connect clamp with microswitch 360 rv = rv.union(CSG.cube({ // connect clamp with microswitch
361 corner1: [-ms.properties.microswitch.size.x/2,-msedge+.1,e.h+e.hinge.e], 361 corner1: [-ms.properties.microswitch.size.x/2,-msedge+.1,e.h+e.hinge.e],
362 corner2: [+ms.properties.microswitch.size.x/2,-CONFIG.hotend.ungroove.d/2-PRINT.fit_tolerance,e.h+e.hinge.e+hhh] 362 corner2: [+ms.properties.microswitch.size.x/2,-CONFIG.hotend.ungroove.d/2-PRINT.fit_tolerance,e.h+e.hinge.e+hhh]
363 })).union([-msh/2,msh/2].map(function(x) { // shell for microswitch screws 363 })).union([-msh/2,msh/2].map(function(x) { // shell for microswitch screws
364 return CSG.roundedCylinder({ 364 return CSG.roundedCylinder({
365 start: [x,-CONFIG.hotend.ungroove.d/2-PRINT.fit_tolerance-(e.mswitch.screw.d/2+e.mswitch.screw.s),e.h+e.hinge.e+mshh], 365 start: [x,-CONFIG.hotend.ungroove.d/2-PRINT.fit_tolerance-(e.mswitch.screw.d/2+e.mswitch.screw.s),e.h+e.hinge.e+mshh],
366 end: [x,-msedge+ms.properties.microswitch.size.y,e.h+e.hinge.e+mshh], 366 end: [x,-msedge+ms.properties.microswitch.size.y,e.h+e.hinge.e+mshh],
367 radius: e.mswitch.screw.d/2+e.mswitch.screw.s 367 radius: e.mswitch.screw.d/2+e.mswitch.screw.s
368 }); 368 });
369 })).subtract(CSG.cube({ // cut off excess if any 369 })).subtract(CSG.cube({ // cut off excess if any
370 corner1:[-hhr,-msedge+ms.properties.microswitch.size.y,e.h+e.hinge.e-1], 370 corner1:[-hhr,-msedge+ms.properties.microswitch.size.y,e.h+e.hinge.e-1],
371 corner2:[hhr,-msedge-1,e.h+e.hinge.e+hhh+e.mswitch.screw.d+e.mswitch.screw.s+1] 371 corner2:[hhr,-msedge-1,e.h+e.hinge.e+hhh+e.mswitch.screw.d+e.mswitch.screw.s+1]
372 })).subtract([-msh/2,msh/2].map(function(x) { return CSG.roundedCylinder({ // screwholes 372 })).subtract([-msh/2,msh/2].map(function(x) { return CSG.roundedCylinder({ // screwholes
373 start: [x,-CONFIG.hotend.ungroove.d/2-PRINT.fit_tolerance-(e.mswitch.screw.d/2+e.mswitch.screw.s),e.h+e.hinge.e+mshh], 373 start: [x,-CONFIG.hotend.ungroove.d/2-PRINT.fit_tolerance-(e.mswitch.screw.d/2+e.mswitch.screw.s),e.h+e.hinge.e+mshh],
374 end: [x,-msedge+ms.properties.microswitch.size.y,e.h+e.hinge.e+mshh], 374 end: [x,-msedge+ms.properties.microswitch.size.y,e.h+e.hinge.e+mshh],
375 radius: e.mswitch.screw.d/2 375 radius: e.mswitch.screw.d/2
376 })})).subtract(CSG.cylinder({ // pulldown screw 376 })})).subtract(CSG.cylinder({ // pulldown screw
377 start:[0,-msedge+ms.properties.microswitch.size.y+3/2/*XXX:config*/+PRINT.extrusion_width,e.h+e.hinge.e-1], 377 start:[0,-msedge+ms.properties.microswitch.size.y+3/2/*XXX:config*/+PRINT.extrusion_width,e.h+e.hinge.e-1],
378 end:[0,-msedge+ms.properties.microswitch.size.y+3/2/*XXX:config*/+PRINT.extrusion_width,e.h+e.hinge.e+hhh+1], 378 end:[0,-msedge+ms.properties.microswitch.size.y+3/2/*XXX:config*/+PRINT.extrusion_width,e.h+e.hinge.e+hhh+1],
379 radius: 3/2/*XXX:config*/ 379 radius: 3/2/*XXX:config*/
380 })); 380 }));
381 rv.properties.microswitch_screw_connector = new CSG.Properties(); 381 rv.properties.microswitch_screw_connector = new CSG.Properties();
382 [-msh/2,msh/2].forEach(function(x,i) { 382 [-msh/2,msh/2].forEach(function(x,i) {
383 rv.properties.microswitch_screw_connector[i] = new CSG.Connector( 383 rv.properties.microswitch_screw_connector[i] = new CSG.Connector(
384 [x,-msedge,e.h+e.hinge.e+mshh], 384 [x,-msedge,e.h+e.hinge.e+mshh],
385 [0,1,0], [0,0,-1] 385 [0,1,0], [0,0,-1]
386 ); 386 );
387 }); 387 });
388 return rv.setColor([0.3,0.8,0.3,0.9]); 388 return rv.setColor([0.3,0.8,0.3,0.9]);
389 }, 389 },
390 split_hinged: function effector_split_hinged(hinged) { 390 split_hinged: function effector_split_hinged(hinged) {
391 var e = CONFIG.effector; 391 var e = CONFIG.effector;
392 var b = hinged.getBounds(); 392 var b = hinged.getBounds();
393 var ymax = Math.max(Math.abs(b[0].y),Math.abs(b[1].y)); 393 var ymax = Math.max(Math.abs(b[0].y),Math.abs(b[1].y));
394 var zmax = Math.max(b[0].z,b[1].z); 394 var zmax = Math.max(b[0].z,b[1].z);
395 return [-1,1].map(function(s) { 395 return [-1,1].map(function(s) {
396 return hinged.intersect(CSG.cube({ 396 return hinged.intersect(CSG.cube({
397 corner1: [Math.min(b[0].x,b[1].x)-1,s*e.clamp.split/2,-zmax-1], 397 corner1: [Math.min(b[0].x,b[1].x)-1,s*e.clamp.split/2,-zmax-1],
398 corner2: [Math.max(b[0].x,b[1].x)+1,s*(ymax+1),zmax+1] 398 corner2: [Math.max(b[0].x,b[1].x)+1,s*(ymax+1),zmax+1]
399 })); 399 }));
400 }); 400 });
401 }, 401 },
402 fanholder: function effector_fanholder() { 402 fanholder: function effector_fanholder() {
403 var fh = CONFIG.effector.fanholder; 403 var fh = CONFIG.effector.fanholder;
404 var od = fh.screw.d+2*fh.screw.m; 404 var od = fh.screw.d+2*fh.screw.m;
405 return linear_extrude({height:fh.w},hull( 405 return linear_extrude({height:fh.w},hull(
406 CAG.circle({center:[0,-this.rmount],radius:od/2}), 406 CAG.circle({center:[0,-this.rmount],radius:od/2}),
407 CAG.circle({center:[0,-fh.r+od/2+fh.w/2],radius:fh.w/2}) 407 CAG.circle({center:[0,-fh.r+od/2+fh.w/2],radius:fh.w/2})
408 )).translate([0,0,-fh.w]).union( 408 )).translate([0,0,-fh.w]).union(
409 linear_extrude({height:fh.w},hull( 409 linear_extrude({height:fh.w},hull(
410 CAG.circle({center:[fh.w/2,-this.rmount-od/2-fh.w/2],radius:fh.w/2}), 410 CAG.circle({center:[fh.w/2,-this.rmount-od/2-fh.w/2],radius:fh.w/2}),
411 CAG.circle({center:[od/2,-fh.r],radius:od/2}) 411 CAG.circle({center:[od/2,-fh.r],radius:od/2})
412 )).rotateY(90).translate([-fh.w/2,0,0]) 412 )).rotateY(90).translate([-fh.w/2,0,0])
413 ).subtract( CSG.cylinder({ 413 ).subtract( CSG.cylinder({
414 start: [-fh.w,-fh.r,-od/2], 414 start: [-fh.w,-fh.r,-od/2],
415 end: [fh.w,-fh.r,-od/2], 415 end: [fh.w,-fh.r,-od/2],
416 radius: fh.screw.d/2 416 radius: fh.screw.d/2
417 })).subtract( CSG.cylinder({ 417 })).subtract( CSG.cylinder({
418 start: [0,-this.rmount,1], 418 start: [0,-this.rmount,1],
419 end: [0,-this.rmount,-fh.w-1], 419 end: [0,-this.rmount,-fh.w-1],
420 radius: fh.screw.d/2 420 radius: fh.screw.d/2
421 })).setColor([0.3,0.8,0.3,0.9]).rotateZ(-120); 421 })).setColor([0.3,0.8,0.3,0.9]).rotateZ(-120);
422 } 422 }
423}; 423};
424 424
425function columns() { 425function columns() {
426 var rv = [0,1,2].map(function(x) { 426 var rv = [0,1,2].map(function(x) {
427 return union(vector_char(0,0,String.fromCharCode('A'.charCodeAt(0)+x)).segments.map(function(x) { 427 return union(vector_char(0,0,String.fromCharCode('A'.charCodeAt(0)+x)).segments.map(function(x) {
428 return rectangular_extrude(x,{w:2,h:1}); 428 return rectangular_extrude(x,{w:2,h:1});
429 })).center().rotateX(90).translate([0,50,0]).rotateZ(x*120+120); 429 })).center().rotateX(90).translate([0,50,0]).rotateZ(x*120+120);
430 }); 430 });
431 return union(rv); 431 return union(rv);
432} 432}
433 433
434function microswitch() { 434function microswitch() {
435 var screw_connector = new CSG.Properties(); 435 var screw_connector = new CSG.Properties();
436 var rv = CSG.cube({ center:[0,0,2.5],radius: [19.8/2,6/2,10/2] }).union( 436 var rv = CSG.cube({ center:[0,0,2.5],radius: [19.8/2,6/2,10/2] }).union(
437 CSG.cube({ center: [2.5,0.5,6], radius: [2/2,3.5/2,5/2] }) 437 CSG.cube({ center: [2.5,0.5,6], radius: [2/2,3.5/2,5/2] })
438 ).union( 438 ).union(
439 [-8,-1,8].map(function(x) { 439 [-8,-1,8].map(function(x) {
440 return CSG.cube({ center:[x,0,0], radius: [0.6/2,3.2/2,13/2] }) 440 return CSG.cube({ center:[x,0,0], radius: [0.6/2,3.2/2,13/2] })
441 }) 441 })
442 ).subtract( 442 ).subtract(
443 [-9.5/2,9.5/2].map(function(x,i) { 443 [-9.5/2,9.5/2].map(function(x,i) {
444 screw_connector[i] = new CSG.Connector([x,6/2,0],[0,-1,0],[0,0,1]); 444 screw_connector[i] = new CSG.Connector([x,6/2,0],[0,-1,0],[0,0,1]);
445 return CSG.cylinder({ 445 return CSG.cylinder({
446 start: [x,-4,0], end: [x,4,0], 446 start: [x,-4,0], end: [x,4,0],
447 radius: 2/2 447 radius: 2/2
448 }) 448 })
449 }) 449 })
450 ); 450 );
451 rv.properties.switch_connector = new CSG.Connector([2.5,0.5,6+5/2],[0,0,1],[0,-1,0]); 451 rv.properties.switch_connector = new CSG.Connector([2.5,0.5,6+5/2],[0,0,1],[0,-1,0]);
452 rv.properties.screw_connector = screw_connector; 452 rv.properties.screw_connector = screw_connector;
453 rv.properties.microswitch = new CSG.Properties(); 453 rv.properties.microswitch = new CSG.Properties();
454 rv.properties.microswitch.size = new CSG.Vector3D( 454 rv.properties.microswitch.size = new CSG.Vector3D(
455 19.8,6,10 455 19.8,6,10
456 ); 456 );
457 return rv; 457 return rv;
458} 458}
459 459
460var FOURWINDS = [0,90,180,270]; 460var FOURWINDS = [0,90,180,270];
461 461
462var E2020 = { 462var E2020 = {
463 outer: 20, thickness: 1.8, 463 outer: 20, thickness: 1.8,
464 roundius: 1, centerhole: 5, 464 roundius: 1, centerhole: 5,
465 slot_width: 6, 465 slot_width: 6,
466 T: { width: 10, thickness: 1.5, depth: 6.5 }, 466 T: { width: 10, thickness: 1.5, depth: 6.5 },
467 467
468 extrusion: function(o) { 468 extrusion: function(o) {
469 if(!o) o = {}; 469 if(!o) o = {};
470 var e = o.extrusion || this; 470 var e = o.extrusion || this;
471 var l = o.l||5; 471 var l = o.l||5;
472 var iy = e.outer/2-e.T.depth; 472 var iy = e.outer/2-e.T.depth;
473 var ix = e.T.width/2-(e.outer/2-iy-e.thickness-e.T.thickness); 473 var ix = e.T.width/2-(e.outer/2-iy-e.thickness-e.T.thickness);
474 var rv = CAG.roundedRectangle({ 474 var rv = CAG.roundedRectangle({
475 corner1: [-e.outer/2,-e.outer/2], corner2: [e.outer/2,e.outer/2], 475 corner1: [-e.outer/2,-e.outer/2], corner2: [e.outer/2,e.outer/2],
476 roundradius: e.roundius 476 roundradius: e.roundius
477 }).subtract( 477 }).subtract(
478 FOURWINDS.map(function(w) { 478 FOURWINDS.map(function(w) {
479 return CAG.fromPoints([ 479 return CAG.fromPoints([
480 [ e.slot_width/2,e.outer/2+1], 480 [ e.slot_width/2,e.outer/2+1],
481 [ e.slot_width/2,e.outer/2-e.thickness], 481 [ e.slot_width/2,e.outer/2-e.thickness],
482 [ e.T.width/2,e.outer/2-e.thickness], 482 [ e.T.width/2,e.outer/2-e.thickness],
483 [ e.T.width/2,e.outer/2-e.thickness-e.T.thickness], 483 [ e.T.width/2,e.outer/2-e.thickness-e.T.thickness],
484 [ ix, iy ], 484 [ ix, iy ],
485 [ -ix, iy ], 485 [ -ix, iy ],
486 [ -e.T.width/2,e.outer/2-e.thickness-e.T.thickness], 486 [ -e.T.width/2,e.outer/2-e.thickness-e.T.thickness],
487 [ -e.T.width/2,e.outer/2-e.thickness], 487 [ -e.T.width/2,e.outer/2-e.thickness],
488 [ -e.slot_width/2,e.outer/2-e.thickness], 488 [ -e.slot_width/2,e.outer/2-e.thickness],
489 [ -e.slot_width/2,e.outer/2+1], 489 [ -e.slot_width/2,e.outer/2+1],
490 ]).rotateZ(w); 490 ]).rotateZ(w);
491 }) 491 })
492 ).subtract(CAG.circle({ 492 ).subtract(CAG.circle({
493 center: [0,0], radius: e.centerhole/2 493 center: [0,0], radius: e.centerhole/2
494 })).extrude({offset:[0,0,l]}); 494 })).extrude({offset:[0,0,l]});
495 rv.properties.c_top=rv.properties.c_left 495 rv.properties.c_top=rv.properties.c_left
496 = new CSG.Connector([0,0,l],[0,0,-1],[1,0,0]); 496 = new CSG.Connector([0,0,l],[0,0,-1],[1,0,0]);
497 rv.properties.c_bottom=rv.properties.c_right 497 rv.properties.c_bottom=rv.properties.c_right
498 = new CSG.Connector([0,0,0],[0,0,1],[1,0,0]); 498 = new CSG.Connector([0,0,0],[0,0,1],[1,0,0]);
499 rv.properties.c_midway = new CSG.Connector([0,0,l/2],[0,0,1],[1,0,0]); 499 rv.properties.c_midway = new CSG.Connector([0,0,l/2],[0,0,1],[1,0,0]);
500 rv.properties.P = new CSG.Connector([0,0,0],[0,0,1],[1,0,0]); 500 rv.properties.P = new CSG.Connector([0,0,0],[0,0,1],[1,0,0]);
501 rv.properties.vitamin = true; 501 rv.properties.vitamin = true;
502 return rv; 502 return rv;
503 }, 503 },
504 504
505 cap: function extrusion_cap(o) { 505 cap: function extrusion_cap(o) {
506 if(!o) o = {}; 506 if(!o) o = {};
507 var e = o.extrusion || this; 507 var e = o.extrusion || this;
508 var thickness = o.thickness||2, l = o.l||5; 508 var thickness = o.thickness||2, l = o.l||5;
509 var rv = CSG.roundedCube({ 509 var rv = CSG.roundedCube({
510 corner1: [-e.outer/2,-e.outer/2,thickness], 510 corner1: [-e.outer/2,-e.outer/2,thickness],
511 corner2: [e.outer/2,e.outer/2,0], 511 corner2: [e.outer/2,e.outer/2,0],
512 roundradius: [e.roundius,e.roundius,0] 512 roundradius: [e.roundius,e.roundius,0]
513 }); 513 });
514 var fw = [0,90,180,270]; // four winds 514 var fw = [0,90,180,270]; // four winds
515 var iy = e.outer/2-e.T.depth; 515 var iy = e.outer/2-e.T.depth;
516 var ix = e.T.width/2-(e.outer/2-iy-e.thickness-e.T.thickness); 516 var ix = e.T.width/2-(e.outer/2-iy-e.thickness-e.T.thickness);
517 rv = rv.union(fw.map(function(w) { 517 rv = rv.union(fw.map(function(w) {
518 return CAG.fromPoints([ 518 return CAG.fromPoints([
519 [ e.slot_width/2,e.outer/2], 519 [ e.slot_width/2,e.outer/2],
520 [ e.slot_width/2,e.outer/2-e.thickness], 520 [ e.slot_width/2,e.outer/2-e.thickness],
521 [ e.T.width/2,e.outer/2-e.thickness], 521 [ e.T.width/2,e.outer/2-e.thickness],
522 [ e.T.width/2,e.outer/2-e.thickness-e.T.thickness], 522 [ e.T.width/2,e.outer/2-e.thickness-e.T.thickness],
523 [ ix, iy ], 523 [ ix, iy ],
524 [ -ix, iy ], 524 [ -ix, iy ],
525 [ -e.T.width/2,e.outer/2-e.thickness-e.T.thickness], 525 [ -e.T.width/2,e.outer/2-e.thickness-e.T.thickness],
526 [ -e.T.width/2,e.outer/2-e.thickness], 526 [ -e.T.width/2,e.outer/2-e.thickness],
527 [ -e.slot_width/2,e.outer/2-e.thickness], 527 [ -e.slot_width/2,e.outer/2-e.thickness],
528 [ -e.slot_width/2,e.outer/2], 528 [ -e.slot_width/2,e.outer/2],
529 ]).extrude({offset:[0,0,l+thickness]}).rotateZ(w); 529 ]).extrude({offset:[0,0,l+thickness]}).rotateZ(w);
530 })); 530 }));
531 rv.properties.P = new CSG.Connector([0,0,0],[0,0,1],[1,0,0]); 531 rv.properties.P = new CSG.Connector([0,0,0],[0,0,1],[1,0,0]);
532 return rv; 532 return rv;
533 } 533 }
534}; 534};
535 535
536var THREEWINDS = [0,120,240]; 536var THREEWINDS = [0,120,240];
537 537
538function base_extrusions() { 538function base_extrusions() {
539 var rv = union( THREEWINDS.map(function(w) { 539 var rv = union( THREEWINDS.map(function(w) {
540 var e = E2020.extrusion({l:CONFIG.base.el}); 540 var e = E2020.extrusion({l:CONFIG.base.el});
541 e = e.connectTo(e.properties.c_midway, 541 e = e.connectTo(e.properties.c_midway,
542 new CSG.Connector([0,-CD.base.mid_inscription_r,CONFIG.extrusion.w/2],[1,0,0],[0,0,1]), 542 new CSG.Connector([0,-CD.base.mid_inscription_r,CONFIG.extrusion.w/2],[1,0,0],[0,0,1]),
543 false, 0); 543 false, 0);
544 return union( [0,CONFIG.extrusion.w+CONFIG.base.gap].map(function(z) { 544 return union( [0,CONFIG.extrusion.w+CONFIG.base.gap].map(function(z) {
545 return e.translate([0,0,z]); 545 return e.translate([0,0,z]);
546 }) ).rotateZ(w); 546 }) ).rotateZ(w);
547 }) ); 547 }) );
548 rv.properties.P = new CSG.Connector([0,0,0],[0,0,1],[1,0,0]); 548 rv.properties.P = new CSG.Connector([0,0,0],[0,0,1],[1,0,0]);
549 return rv.setColor(CONFIG.color.extrusion); 549 return rv.setColor(CONFIG.color.extrusion);
550} 550}
551 551
552function column_extrusions() {
553 var rv = union( THREEWINDS.map(function(w) {
554 return E2020.extrusion({l:CONFIG.column.h}).translate([0,CD.base.column_r,0]).rotateZ(w);
555 }) );
556 rv.properties.P = new CSG.Connector([0,0,0],[0,0,1],[1,0,0]);
557 return rv.setColor(CONFIG.color.extrusion);
558}
559
552function refaxes(o) { 560function refaxes(o) {
553 if(!o) o = {}; 561 if(!o) o = {};
554 var l = o.l||20, g = o.g||0.7; 562 var l = o.l||20, g = o.g||0.7;
555 return union([ 563 return union([
556 CSG.cylinder({start:[0,0,0],end:[l,0,0]}).setColor([1,0,0,g]), 564 CSG.cylinder({start:[0,0,0],end:[l,0,0]}).setColor([1,0,0,g]),
557 CSG.cylinder({start:[0,0,0],end:[0,l,0]}).setColor([0,1,0,g]), 565 CSG.cylinder({start:[0,0,0],end:[0,l,0]}).setColor([0,1,0,g]),
558 CSG.cylinder({start:[0,0,0],end:[0,0,l]}).setColor([0,0,1,g]) 566 CSG.cylinder({start:[0,0,0],end:[0,0,l]}).setColor([0,0,1,g])
559 ]); 567 ]);
560} 568}
561 569
562function P(x) { 570function P(x) {
563 return x.connectTo(x.properties.P,new CSG.Connector([0,0,0],[0,0,1],[1,0,0]), false, 0); 571 return x.connectTo(x.properties.P,new CSG.Connector([0,0,0],[0,0,1],[1,0,0]), false, 0);
564} 572}
565 573
566function main(params) { 574function main(params) {
567 return refaxes().union(P(base_extrusions())); 575 return refaxes().union(P(base_extrusions()));
568} 576}
569 577
570function _main(params) { 578function _main(params) {
571 var e = EFFECTOR.effector(); 579 var e = EFFECTOR.effector();
572 var hs = E3DV6.heatsink(); 580 var hs = E3DV6.heatsink();
573 hs = hs.connectTo(hs.properties.grove_connector,e.properties.grove_connector,false,0); 581 hs = hs.connectTo(hs.properties.grove_connector,e.properties.grove_connector,false,0);
574 var ms = microswitch(); 582 var ms = microswitch();
575 var hd = EFFECTOR.hinged({ 583 var hd = EFFECTOR.hinged({
576 microswitch:ms,effector:e 584 microswitch:ms,effector:e
577 }); 585 });
578 ms = ms.connectTo( 586 ms = ms.connectTo(
579 ms.properties.screw_connector[0], 587 ms.properties.screw_connector[0],
580 hd.properties.microswitch_screw_connector[0], 588 hd.properties.microswitch_screw_connector[0],
581 false, 0); 589 false, 0);
582 var hdhd = EFFECTOR.split_hinged(hd); 590 var hdhd = EFFECTOR.split_hinged(hd);
583 var fh = EFFECTOR.fanholder(); 591 var fh = EFFECTOR.fanholder();
584 return union({ 592 return union({
585 platform: e, 593 platform: e,
586 hinged: hdhd[1], 594 hinged: hdhd[1],
587 clamp: hdhd[0], 595 clamp: hdhd[0],
588 fanholder: fh, 596 fanholder: fh,
589 alltogethernow: [e,hdhd[0],hdhd[1], columns(),hs,ms,fh] 597 alltogethernow: [e,hdhd[0],hdhd[1], columns(),hs,ms,fh]
590 }[params.part||'alltogethernow']) 598 }[params.part||'alltogethernow'])
591 var rv = union( 599 var rv = union(
592 e, 600 e,
593 hs, 601 hs,
594 columns(), 602 columns(),
595 ///hd, 603 ///hd,
596 hdhd[0], hdhd[1], 604 hdhd[0], hdhd[1],
597 ms); 605 ms);
598 return rv; 606 return rv;
599} 607}
600 608
601function getParameterDefinitions() { 609function getParameterDefinitions() {
602 return [{ 610 return [{
603 name: 'part', 611 name: 'part',
604 type: 'choice', 612 type: 'choice',
605 values: [ 613 values: [
606 'platform', 614 'platform',
607 'hinged', 615 'hinged',
608 'clamp', 616 'clamp',
609 'fanholder', 617 'fanholder',
610 'alltogethernow', 618 'alltogethernow',
611 'wip' 619 'wip'
612 ], 620 ],
613 captions: [ 621 captions: [
614 'Effector platform', 622 'Effector platform',
615 'Hinged part', 623 'Hinged part',
616 'Clamp', 624 'Clamp',
617 'Fan holder', 625 'Fan holder',
618 'All together now!', 626 'All together now!',
619 'Work in progress' 627 'Work in progress'
620 ], 628 ],
621 caption: 'Part', 629 caption: 'Part',
622 initial: 'wip' 630 initial: 'wip'
623 }]; 631 }];
624} 632}
625 633
626/* vim:set ft=javascript ai: */ 634/* vim:set ft=javascript ai: */