// -*- C -*- cover_ysz = 45; cover_len = 70; tube_dia = 21; attach_cx = -7; attach_cdy = 0; attach_w = 25; attach_inrad = 29; attach_hole_dist = 5; attach_hole_dia = 4 + 0.5; attach_ang = 45; attach_dz = 2; comp_dx = 22; comp_xsz = 45; comp_zsz = 28; comp_dy = 5; comp_slope = 60; leftend_zsz = 10; leftend_dz = comp_zsz * 0.6; min_thick = 4; rightend_thick = 10; bolthead_space = 4; // calculated cover_lcircle_r = cover_ysz / (1 + 1/sqrt(2)); base_len = cover_len - cover_lcircle_r; attach_end_r = attach_w/2; attach_straight_len = attach_inrad + tube_dia + attach_hole_dist + attach_hole_dia/2 - attach_end_r + attach_hole_dist; attach_down = tube_dia/2 + attach_dz; attach_xmax = attach_cx + cos(attach_ang) * attach_straight_len + attach_end_r; module RearSideTemplate(){ polygon([[0.1,0], [-base_len,0], [-base_len,-cover_ysz], [0.1, -cover_ysz]]); translate([-base_len, -cover_ysz + cover_lcircle_r]) circle(r=cover_lcircle_r); } module AttachTemplate(){ hull(){ polygon([[0, 0], [-0.1, 0], [-0.1, -cover_ysz], [0, -cover_ysz]]); translate([attach_cx, -attach_cdy]) rotate([0,0,-attach_ang]) { polygon([[-attach_cx, attach_w/2], [0, -attach_w/2], [attach_straight_len, -attach_w/2], [attach_straight_len, attach_w/2]]); translate([attach_straight_len, 0]) circle(r=attach_end_r); } } } module AttachElevation(anddown){ hull(){ translate([-cover_len - 0.5, leftend_dz - leftend_zsz/2]) square([1, leftend_zsz]); translate([-comp_dx - comp_xsz/2, -0.1]) square([comp_xsz, comp_zsz + min_thick]); translate([attach_xmax, 0]) square([1, rightend_thick + bolthead_space]); } if (anddown) translate([-comp_dx, -attach_down-5]) square([comp_dx + attach_xmax+2, attach_down+6]); } module AttachElevationSelector(anddown) { translate([0,100,0]) rotate([90,0,0]) linear_extrude(height=200) AttachElevation(anddown); } module BodyPositive(){ intersection(){ linear_extrude(height=60) RearSideTemplate(); AttachElevationSelector(false); } intersection(){ translate([0,0,-attach_down]) linear_extrude(height=100) AttachTemplate(); AttachElevationSelector(true); } } module Cutouts(){ Tube(); Bolts(); Computer(); } module Body(){ difference(){ intersection(){ BodyPositive(); translate([-100,-200,-100]) cube([200,200,200]); } Cutouts(); } } module Computer(){ multmatrix([[1,0,0,0], [0,1, tan(90-comp_slope), 0], [0,0,1,0], [0,0,0,1]]) translate([-comp_dx - comp_xsz/2, -cover_ysz + comp_dy, -50]) cube([comp_xsz, 100, comp_zsz + 50]); } module Tube(){ translate([attach_cx, -attach_cdy, -tube_dia/2 - 0.1 - attach_dz]) { rotate_extrude(convexity=10) { translate([attach_inrad + tube_dia/2, 0]) circle(r=tube_dia/2); } } } module Bolt(){ translate([0,0,-50]) linear_extrude(height=80) { circle(r=attach_hole_dia/2, $fn=20); } translate([0,0,rightend_thick]) linear_extrude(height=80) { circle(r=attach_hole_dia/2 * 2, $fn=20); } } module Bolts(){ translate([attach_cx, -attach_cdy]) rotate([0,0,-attach_ang]) { translate([attach_inrad - attach_hole_dist - attach_hole_dia/2, 0]) Bolt(); translate([attach_inrad + tube_dia +attach_hole_dist + attach_hole_dia/2, 0]) Bolt(); } } module Demo(){ Cutouts(); %BodyPositive(); } module Print(){ rotate([-90,00]) Body(); } //Demo(); //Body(); Print();