// -*- C -*- cover_ysz = 45; cover_len = 70; attach_tube_dia = 18; attach_cx = -15; attach_cdy = -5; attach_w = 25; attach_inrad = 25; /// attach_hole_dist = 5; /// attach_hole_dia = 4 + 0.5; /// attach_ang = 45; // calculated cover_lcircle_r = cover_ysz / (1 + 1/sqrt(2)); base_len = cover_len - cover_lcircle_r; attach_straight_len = attach_inrad + attach_tube_dia + attach_hole_dist + attach_hole_dia/2 - attach_w / 2 + attach_hole_dist; attach_down = tube_dia + attach_hole_dist; 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_w/2); } } } module BodyPositive(){ color("blue") linear_extrude(height=60) RearSideTemplate(); translate([0,0,-attach_down]) linear_extrude(height=100) AttachTemplate(); } module Tube(){ %translate([attach_cx, -attach_cdy, -20]) { rotate_extrude(convexity=10) { translate([attach_inrad + attach_tube_dia/2, 0]) circle(r=attach_tube_dia/2); } } } module Bolt(){ %translate([0,0,-50]) linear_extrude(height=80) { circle(r=attach_hole_dia/2, $fn=20); } %translate([0,0,10]) linear_extrude(height=20) { 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 + attach_tube_dia +attach_hole_dist + attach_hole_dia/2, 0]) Bolt(); } } Tube(); Bolts(); BodyPositive();