author | Michael Krelin <hacker@klever.net> | 2016-01-06 23:46:23 (UTC) |
---|---|---|
committer | Michael Krelin <hacker@klever.net> | 2016-01-06 23:46:23 (UTC) |
commit | 8cd03b0c3f807d552a6721886a3af0af8b592a1c (patch) (unidiff) | |
tree | 79ce55cc3f5cb564be9801f5ac276db649ad4d4b | |
parent | 70e08848566d909a76fa3f611d35570c57f8e048 (diff) | |
download | redelta-8cd03b0c3f807d552a6721886a3af0af8b592a1c.zip redelta-8cd03b0c3f807d552a6721886a3af0af8b592a1c.tar.gz redelta-8cd03b0c3f807d552a6721886a3af0af8b592a1c.tar.bz2 |
column extrusions
-rw-r--r-- | delta.jscad | 8 |
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 | |||
@@ -456,171 +456,179 @@ function microswitch() { | |||
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() { | ||
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 | |||
552 | function refaxes(o) { | 560 | function 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 | ||
562 | function P(x) { | 570 | function 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 | ||
566 | function main(params) { | 574 | function main(params) { |
567 | return refaxes().union(P(base_extrusions())); | 575 | return refaxes().union(P(base_extrusions())); |
568 | } | 576 | } |
569 | 577 | ||
570 | function _main(params) { | 578 | function _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 | ||
601 | function getParameterDefinitions() { | 609 | function 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: */ |