-rw-r--r-- | delta.jscad | 27 |
1 files changed, 27 insertions, 0 deletions
diff --git a/delta.jscad b/delta.jscad index 043f6f8..b3bb3d3 100644 --- a/delta.jscad +++ b/delta.jscad | |||
@@ -368,267 +368,294 @@ var EFFECTOR = { | |||
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 | ||
425 | function columns() { | 425 | function 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 | ||
434 | function microswitch() { | 434 | function 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 | ||
460 | var FOURWINDS = [0,90,180,270]; | 460 | var FOURWINDS = [0,90,180,270]; |
461 | 461 | ||
462 | var E2020 = { | 462 | var 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 | ||
536 | var THREEWINDS = [0,120,240]; | 536 | var THREEWINDS = [0,120,240]; |
537 | 537 | ||
538 | function base_extrusions() { | 538 | function 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 | ||
552 | function column_extrusions() { | 552 | function column_extrusions() { |
553 | var rv = union( THREEWINDS.map(function(w) { | 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); | 554 | return E2020.extrusion({l:CONFIG.column.h}).translate([0,CD.base.column_r,0]).rotateZ(w); |
555 | }) ); | 555 | }) ); |
556 | rv.properties.P = new CSG.Connector([0,0,0],[0,0,1],[1,0,0]); | 556 | rv.properties.P = new CSG.Connector([0,0,0],[0,0,1],[1,0,0]); |
557 | return rv.setColor(CONFIG.color.extrusion); | 557 | return rv.setColor(CONFIG.color.extrusion); |
558 | } | 558 | } |
559 | 559 | ||
560 | function duet() { | ||
561 | var C = CONFIG.duet; | ||
562 | var pholes = new CSG.Properties(); | ||
563 | var hx = C.hole_spacing.x/2; | ||
564 | var hy = C.hole_spacing.y/2; | ||
565 | var hh = { nw: [1,-1], ne: [1,1], se: [-1,1], sw: [-1,-1] }; | ||
566 | var holes = []; | ||
567 | for(w in hh) { | ||
568 | var h = hh[w],_x=h[0]*hx,_y=h[1]*hy; | ||
569 | holes.push(CSG.cylinder({start:[_x,_y,-1],end:[_x,_y,C.pcb_size.z+1],radius:3/2})); | ||
570 | pholes['c_'+w] = new CSG.Connector([_x,_y,0],[0,0,1],[1,0,0]); | ||
571 | } | ||
572 | rv = CSG.cube({ | ||
573 | corner1: [-C.pcb_size.x/2, -C.pcb_size.y/2, 0], | ||
574 | corner2: [ C.pcb_size.x/2, C.pcb_size.y/2, C.pcb_size.z] | ||
575 | }).subtract(holes).setColor(CONFIG.color.pcb).union( | ||
576 | CSG.cube({ | ||
577 | 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] | ||
579 | }).setColor(CONFIG.color.bulk) | ||
580 | ); | ||
581 | rv.properties.holes = pholes; | ||
582 | rv.properties.P = new CSG.Connector([0,0,0],[0,0,1],[1,0,0]); | ||
583 | rv.properties.vitamin = true; | ||
584 | return rv; | ||
585 | } | ||
586 | |||
560 | function refaxes(o) { | 587 | function refaxes(o) { |
561 | if(!o) o = {}; | 588 | if(!o) o = {}; |
562 | var l = o.l||20, g = o.g||0.7; | 589 | var l = o.l||20, g = o.g||0.7; |
563 | return union([ | 590 | return union([ |
564 | CSG.cylinder({start:[0,0,0],end:[l,0,0]}).setColor([1,0,0,g]), | 591 | CSG.cylinder({start:[0,0,0],end:[l,0,0]}).setColor([1,0,0,g]), |
565 | CSG.cylinder({start:[0,0,0],end:[0,l,0]}).setColor([0,1,0,g]), | 592 | CSG.cylinder({start:[0,0,0],end:[0,l,0]}).setColor([0,1,0,g]), |
566 | CSG.cylinder({start:[0,0,0],end:[0,0,l]}).setColor([0,0,1,g]) | 593 | CSG.cylinder({start:[0,0,0],end:[0,0,l]}).setColor([0,0,1,g]) |
567 | ]); | 594 | ]); |
568 | } | 595 | } |
569 | 596 | ||
570 | function P(x) { | 597 | function P(x) { |
571 | return x.connectTo(x.properties.P,new CSG.Connector([0,0,0],[0,0,1],[1,0,0]), false, 0); | 598 | return x.connectTo(x.properties.P,new CSG.Connector([0,0,0],[0,0,1],[1,0,0]), false, 0); |
572 | } | 599 | } |
573 | 600 | ||
574 | function main(params) { | 601 | function main(params) { |
575 | return refaxes().union(P(base_extrusions())); | 602 | return refaxes().union(P(base_extrusions())); |
576 | } | 603 | } |
577 | 604 | ||
578 | function _main(params) { | 605 | function _main(params) { |
579 | var e = EFFECTOR.effector(); | 606 | var e = EFFECTOR.effector(); |
580 | var hs = E3DV6.heatsink(); | 607 | var hs = E3DV6.heatsink(); |
581 | hs = hs.connectTo(hs.properties.grove_connector,e.properties.grove_connector,false,0); | 608 | hs = hs.connectTo(hs.properties.grove_connector,e.properties.grove_connector,false,0); |
582 | var ms = microswitch(); | 609 | var ms = microswitch(); |
583 | var hd = EFFECTOR.hinged({ | 610 | var hd = EFFECTOR.hinged({ |
584 | microswitch:ms,effector:e | 611 | microswitch:ms,effector:e |
585 | }); | 612 | }); |
586 | ms = ms.connectTo( | 613 | ms = ms.connectTo( |
587 | ms.properties.screw_connector[0], | 614 | ms.properties.screw_connector[0], |
588 | hd.properties.microswitch_screw_connector[0], | 615 | hd.properties.microswitch_screw_connector[0], |
589 | false, 0); | 616 | false, 0); |
590 | var hdhd = EFFECTOR.split_hinged(hd); | 617 | var hdhd = EFFECTOR.split_hinged(hd); |
591 | var fh = EFFECTOR.fanholder(); | 618 | var fh = EFFECTOR.fanholder(); |
592 | return union({ | 619 | return union({ |
593 | platform: e, | 620 | platform: e, |
594 | hinged: hdhd[1], | 621 | hinged: hdhd[1], |
595 | clamp: hdhd[0], | 622 | clamp: hdhd[0], |
596 | fanholder: fh, | 623 | fanholder: fh, |
597 | alltogethernow: [e,hdhd[0],hdhd[1], columns(),hs,ms,fh] | 624 | alltogethernow: [e,hdhd[0],hdhd[1], columns(),hs,ms,fh] |
598 | }[params.part||'alltogethernow']) | 625 | }[params.part||'alltogethernow']) |
599 | var rv = union( | 626 | var rv = union( |
600 | e, | 627 | e, |
601 | hs, | 628 | hs, |
602 | columns(), | 629 | columns(), |
603 | ///hd, | 630 | ///hd, |
604 | hdhd[0], hdhd[1], | 631 | hdhd[0], hdhd[1], |
605 | ms); | 632 | ms); |
606 | return rv; | 633 | return rv; |
607 | } | 634 | } |
608 | 635 | ||
609 | function getParameterDefinitions() { | 636 | function getParameterDefinitions() { |
610 | return [{ | 637 | return [{ |
611 | name: 'part', | 638 | name: 'part', |
612 | type: 'choice', | 639 | type: 'choice', |
613 | values: [ | 640 | values: [ |
614 | 'platform', | 641 | 'platform', |
615 | 'hinged', | 642 | 'hinged', |
616 | 'clamp', | 643 | 'clamp', |
617 | 'fanholder', | 644 | 'fanholder', |
618 | 'alltogethernow', | 645 | 'alltogethernow', |
619 | 'wip' | 646 | 'wip' |
620 | ], | 647 | ], |
621 | captions: [ | 648 | captions: [ |
622 | 'Effector platform', | 649 | 'Effector platform', |
623 | 'Hinged part', | 650 | 'Hinged part', |
624 | 'Clamp', | 651 | 'Clamp', |
625 | 'Fan holder', | 652 | 'Fan holder', |
626 | 'All together now!', | 653 | 'All together now!', |
627 | 'Work in progress' | 654 | 'Work in progress' |
628 | ], | 655 | ], |
629 | caption: 'Part', | 656 | caption: 'Part', |
630 | initial: 'wip' | 657 | initial: 'wip' |
631 | }]; | 658 | }]; |
632 | } | 659 | } |
633 | 660 | ||
634 | /* vim:set ft=javascript ai: */ | 661 | /* vim:set ft=javascript ai: */ |