$triangle_width = 65; $triangle_height = 40; $triangle_thickness = 5.87; $triangle_screw_hole_diameter = 4.7; $triangle_x_hole_gap = 40; $triangle_y_hole_gap = 20; $triangle_x_offset = 19; $triangle_y_offset = 5; $fn=10; use camera_mount(); $camera_mount_thickness = 1; $camera_screw_gap_y = 25.2; $camera_screw_diameter = 2.75; module camera_mount() { difference() { cylinder(h=$camera_mount_thickness, d=$camera_screw_gap_y); translate([0, 0, -0.1]) cylinder(h=3 * $camera_mount_thickness, d=$camera_screw_gap_y - $camera_screw_diameter * 3); rotate([0, 0, 90]) translate([$camera_screw_gap_y / 2 - $camera_screw_diameter / 1.33, 0, -0.1]) cylinder(h=3 * $camera_mount_thickness, d=$camera_screw_diameter); rotate([0, 0, -90]) translate([$camera_screw_gap_y / 2 - $camera_screw_diameter / 1.33, 0, -0.1]) cylinder(h=3 * $camera_mount_thickness, d=$camera_screw_diameter); translate([-1 * $camera_screw_gap_y - $camera_screw_diameter / 1.33, -1 * $camera_screw_gap_y / 2, -0.1]) cube([$camera_screw_gap_y, $camera_screw_gap_y, 3 * $camera_mount_thickness]); }; } module attachment_point() { difference() { linear_extrude($triangle_thickness) polygon([[0, 0], [$triangle_width, $triangle_height], [$triangle_width, 0]]); translate([$triangle_x_offset, $triangle_y_offset, 0]) union() { hole_puncher(); translate([$triangle_x_hole_gap, 0, 0]) hole_puncher(); translate([$triangle_x_hole_gap, $triangle_y_hole_gap, 0]) hole_puncher(); }; translate([$rounded_nose, 4.234, -0.2]) rotate([0, 0, 120]) nose_rounding(); translate([0, $triangle_height - $triangle_y_offset * 1.5, -0.1]) cube([100, 100, $triangle_thickness * 3]); translate([45, 12, -0.1]) cylinder(h=100, r=10); translate([28, 8, -0.1]) cylinder(h=100, r=4); }; }; $screen_enter_diameter = 10; $screen_lock_diameter = 6.25; $screen_enter_gap = 30 + $screen_lock_diameter; $screen_enter_y_offset = 14; $screen_mount_width = 50; $screen_mount_height = 60; $screen_mount_thickness = 5; $screen_side_cutout_size = 36; module screen_mount() { difference() { cube([$screen_mount_width, $screen_mount_height, $screen_mount_thickness]); translate([$screen_mount_width / 2, $screen_enter_y_offset, -0.1]) cylinder(h=$screen_mount_thickness * 2, d=$screen_enter_diameter); translate([$screen_mount_width / 2, $screen_enter_y_offset + $screen_enter_gap, -0.1]) cylinder(h=$screen_mount_thickness * 2, d=$screen_enter_diameter); for (i = [0:1:7]) { mount_hole_puncher(i * -1); }; translate([$screen_mount_width, $screen_mount_height / 2, -0.1]) cylinder(h=$screen_mount_thickness * 2, d=$screen_side_cutout_size); translate([0, $screen_mount_height / 2, -0.1]) cylinder(h=$screen_mount_thickness * 2, d=$screen_side_cutout_size); /* translate([25, 0, -0.1]) rotate([0, 0, -30]) cube([$screen_mount_width, $screen_mount_height, $screen_mount_thickness * 2]); translate([-10, -20, -0.1]) rotate([0, 0, 30]) cube([$screen_mount_width, $screen_mount_height, $screen_mount_thickness * 2]); translate([0, $screen_mount_height, 0]) mirror([0, 1, 0]) union() { translate([25, 0, -0.1]) rotate([0, 0, -30]) cube([$screen_mount_width, $screen_mount_height, $screen_mount_thickness * 2]); translate([-10, -20, -0.1]) rotate([0, 0, 30]) cube([$screen_mount_width, $screen_mount_height, $screen_mount_thickness * 2]); }; */ }; }; module mount_hole_puncher($gap) { translate([$screen_mount_width / 2, $screen_enter_y_offset + $gap, -0.1]) cylinder(h=$screen_mount_thickness * 2, d=$screen_lock_diameter); translate([$screen_mount_width / 2, $screen_enter_y_offset + $screen_enter_gap + $gap, -0.1]) cylinder(h=$screen_mount_thickness * 2, d=$screen_lock_diameter); }; module hole_puncher() { translate([0, 0, $triangle_thickness * -1]) cylinder(h=$triangle_thickness * 3, d=$triangle_screw_hole_diameter); }; $rounded_nose = 25; module nose_rounding() { difference() { color("red") cube([$rounded_nose, $rounded_nose, $triangle_thickness * 2]); translate([-3, 0, $triangle_thickness / -2]) color("blue") cylinder(h=$triangle_thickness * 3, d=$rounded_nose); }; };