eps = 0.01; infty = 100; base_d = 26; screw_d1 = 19; screw_d2 = 16; screw_hole = 3.5; base_wall = 2.0; motor_angle = 4; tube_d = 8+0.3; tube_h = 20; tube_wall = 1.5; cable_slot_w = 5; cable_slot_h = 3; module body() { // base cylinder(r = base_d/2, h = base_wall); // tube intersection() { rotate([0, motor_angle, 0]) cylinder(r = tube_d/2 + tube_wall, h = tube_h); translate([-infty/2, -infty/2, 0]) cube(infty); } // tube supports for (angle = [45, 135, 225, 315]) rotate([0, 0, angle]) hull() { translate([-eps/2, -tube_d/2, -eps/2]) cube([eps, tube_d, eps]); translate([base_d/2, -eps/2, -eps/2]) cube(eps); translate([tube_d/2, -eps/2, 0.9*tube_h]) cube(eps); } } module screw_hole() { translate([0, 0, -eps]) cylinder(r = screw_hole/2, h = base_wall + 2*eps, $fn = 6); translate([0, 0, base_wall/2]) cylinder(r1 = screw_hole/2, r2 = screw_hole/2 + base_wall/2, h = base_wall/2+eps, $fn = 6); } difference() { body(); // screw holes for (x = [-1, 1]) translate([x*screw_d1/2, 0, 0]) screw_hole(); for (y = [-1, 1]) translate([0, y*screw_d2/2, 0]) screw_hole(); // tube hole rotate([0, motor_angle, 0]) translate([0, 0, -infty/2]) cylinder(r = tube_d/2, h = infty); // cable slot rotate([0, 0, -45]) translate([-cable_slot_w/2, base_d/2-cable_slot_h, -eps]) cube([cable_slot_w, 2*cable_slot_h, infty]); }