infty = 100; eps = 0.01; wall = 1.5; lens_size = 9.2; lens_depth = 3; lens_side = 0.9; lens_angle = -10; cable_w = 7; servo_hole = 5.2; servo_base_w = lens_size + 2*wall; servo_base_l = 15 + servo_base_w/2; servo_base_h = 2*wall; rotate([lens_angle, 0, 0]) difference() { translate([-lens_size/2-wall, 0, 0]) cube([lens_size+2*wall, 2*wall+lens_depth, wall+lens_size]); // bottom rotate([-lens_angle, 0, 0]) translate([-infty/2, -infty/2, -infty]) cube(infty); // lens body translate([-lens_size/2, wall, wall+(wall+lens_depth)*tan(-lens_angle)]) cube([lens_size, lens_depth, lens_size + eps]); // lens front translate([-lens_size/2+lens_side, wall, wall+(wall+lens_depth)*tan(-lens_angle)]) cube([lens_size-2*lens_side, lens_depth+wall+eps, lens_size + wall + 2*eps]); // cable hole translate([-cable_w/2, wall, -eps]) cube([cable_w, lens_depth+wall+eps, lens_size+wall+2*eps]); } difference() { hull() { translate([-servo_base_w/2, -servo_base_l+servo_base_w/2, 0]) cube([servo_base_w, servo_base_l-servo_base_w/2+wall+eps, servo_base_h]); translate([0, -servo_base_l+servo_base_w/2, 0]) cylinder(r = servo_base_w/2, h = servo_base_h); } translate([0, -servo_base_l+servo_base_w/2, -eps]) cylinder(r = servo_hole/2, h = servo_base_h + 2*eps); }