diff --git a/scad/config.scad b/scad/config.scad index 45eb825..31741fa 100644 --- a/scad/config.scad +++ b/scad/config.scad @@ -46,12 +46,16 @@ sheet_thickness = 16; // raw sheet thickness pockets_depth = 6; // pockets depth pockets_color = "RoyalBlue"; // pockets color connector_size = [20, sheet_thickness]; // pockets/fingers [width, height] +cutter_size = 3.175/2; // size of the smallest cutter you are using 1/4" R = 3.175 +dogbone = false; // cut dogbones? + // ---------------------------------------------------------------- // // shortcuts // ---------------------------------------------------------------- // m3_screw_radius = 1.5; m4_screw_radius = 2; +dogbone_offset = sqrt(cutter_size*cutter_size/2); // ---------------------------------------------------------------- // // horizontal plate diff --git a/scad/parts/feet.scad b/scad/parts/feet.scad index d9d1c62..5d01d1c 100644 --- a/scad/parts/feet.scad +++ b/scad/parts/feet.scad @@ -12,17 +12,34 @@ use <../shapes.scad> // feet module feet_2D() { - render() difference() { - rounded_square(feet_width, feet_height, corner_radius = [0, 0, feet_corners[3], feet_corners[0]]); - translate([foot_width, 0, 0]) - y_mount(feet_width - (foot_width * 2), feet_gap_height, [feet_corners[1], feet_corners[2], feet_corners[3], feet_corners[0]]); - } - translate([feet_connectors_margin[3], feet_height, 0]) - square(connector_size); - translate([(horizontal_plate_width - connector_size[0]) / 2, feet_height, 0]) - square(connector_size); - translate([horizontal_plate_width - connector_size[0] - feet_connectors_margin[1], feet_height, 0]) - square(connector_size); + render() difference(){ union() { + difference() { + rounded_square(feet_width, feet_height, corner_radius = [0, 0, feet_corners[3], feet_corners[0]]); + translate([foot_width, 0, 0]) + y_mount(feet_width - (foot_width * 2), feet_gap_height, [feet_corners[1], feet_corners[2], feet_corners[3], feet_corners[0]]); + } + translate([feet_connectors_margin[3], feet_height, 0]) + square(connector_size); + translate([(horizontal_plate_width - connector_size[0]) / 2, feet_height, 0]) + square(connector_size); + translate([horizontal_plate_width - connector_size[0] - feet_connectors_margin[1], feet_height, 0]) + square(connector_size); + } + if(dogbone==true){ + translate([feet_connectors_margin[3], feet_height, 0]){ + translate([connector_size[0] + dogbone_offset,dogbone_offset,0]) circle(r=cutter_size); + translate([- dogbone_offset,+dogbone_offset,0]) circle(r=cutter_size); + } + translate([(horizontal_plate_width - connector_size[0]) / 2, feet_height, 0]){ + translate([connector_size[0] + dogbone_offset,dogbone_offset,0]) circle(r=cutter_size); + translate([- dogbone_offset,+dogbone_offset,0]) circle(r=cutter_size); + } + translate([horizontal_plate_width - connector_size[0] - feet_connectors_margin[1], feet_height, 0]){ + translate([connector_size[0] + dogbone_offset,dogbone_offset,0]) circle(r=cutter_size); + translate([- dogbone_offset,+dogbone_offset,0]) circle(r=cutter_size); + } + } + } } module feet_3D() { diff --git a/scad/parts/horizontal_plate.scad b/scad/parts/horizontal_plate.scad index 146ef40..13d58e2 100644 --- a/scad/parts/horizontal_plate.scad +++ b/scad/parts/horizontal_plate.scad @@ -59,12 +59,35 @@ module horizontal_base_plate() { // feet holes module _feet_connectors_holes() { // feet connector holes - translate([feet_connectors_margin[3], 0, 0]) - square(feet_connectors_size); - translate([(horizontal_plate_width - feet_connectors_size[0]) / 2, 0, 0]) - square(feet_connectors_size); - translate([horizontal_plate_width - feet_connectors_size[0] - feet_connectors_margin[1], 0, 0]) - square(feet_connectors_size); + translate([feet_connectors_margin[3], 0, 0]){ + square(feet_connectors_size); + if(dogbone==true){ + translate([dogbone_offset,dogbone_offset,0]) circle(r=cutter_size); + translate([feet_connectors_size[0] - dogbone_offset,dogbone_offset,0]) circle(r=cutter_size); + translate([dogbone_offset,feet_connectors_size[1] - dogbone_offset,0]) circle(r=cutter_size); + translate([feet_connectors_size[0] - dogbone_offset,feet_connectors_size[1] - dogbone_offset,0]) circle(r=cutter_size); + } + } + + translate([(horizontal_plate_width - feet_connectors_size[0]) / 2, 0, 0]){ + square(feet_connectors_size); + if(dogbone==true){ + translate([dogbone_offset,dogbone_offset,0]) circle(r=cutter_size); + translate([feet_connectors_size[0] - dogbone_offset,dogbone_offset,0]) circle(r=cutter_size); + translate([dogbone_offset,feet_connectors_size[1] - dogbone_offset,0]) circle(r=cutter_size); + translate([feet_connectors_size[0] - dogbone_offset,feet_connectors_size[1] - dogbone_offset,0]) circle(r=cutter_size); + } + } + + translate([horizontal_plate_width - feet_connectors_size[0] - feet_connectors_margin[1], 0, 0]){ + square(feet_connectors_size); + if(dogbone==true){ + translate([dogbone_offset,dogbone_offset,0]) circle(r=cutter_size); + translate([feet_connectors_size[0] - dogbone_offset,dogbone_offset,0]) circle(r=cutter_size); + translate([dogbone_offset,feet_connectors_size[1] - dogbone_offset,0]) circle(r=cutter_size); + translate([feet_connectors_size[0] - dogbone_offset,feet_connectors_size[1] - dogbone_offset,0]) circle(r=cutter_size); + } + } // feet screws holes center = horizontal_plate_width / 2; half_pocket = feet_connectors_size[0] / 2; @@ -101,20 +124,43 @@ module triangle_connectors_holes() { margin_top = horizontal_plate_height - triangle_connectors_size[1] - triangle_connectors_margin[0]; translate([triangle_connectors_margin[3], margin_top, 0]) { square(triangle_connectors_size); + if(dogbone==true){ + translate([dogbone_offset,dogbone_offset,0]) circle(r=cutter_size); + translate([triangle_connectors_size[0] - dogbone_offset,dogbone_offset,0]) circle(r=cutter_size); + translate([dogbone_offset,triangle_connectors_size[1] - dogbone_offset,0]) circle(r=cutter_size); + translate([triangle_connectors_size[0] - dogbone_offset,triangle_connectors_size[1] - dogbone_offset,0]) circle(r=cutter_size); + } triangle_screws_holes(); } translate([horizontal_plate_width - triangle_connectors_size[0] - triangle_connectors_margin[1], margin_top, 0]) { square(triangle_connectors_size); + if(dogbone==true){ + translate([dogbone_offset,dogbone_offset,0]) circle(r=cutter_size); + translate([triangle_connectors_size[0] - dogbone_offset,dogbone_offset,0]) circle(r=cutter_size); + translate([dogbone_offset,triangle_connectors_size[1] - dogbone_offset,0]) circle(r=cutter_size); + translate([triangle_connectors_size[0] - dogbone_offset,triangle_connectors_size[1] - dogbone_offset,0]) circle(r=cutter_size); + } triangle_screws_holes(); } } // vertical plate connectors holes module vertical_plate_holes() { - translate([0, vertical_plate_y_position, 0]) - square([foot_width, sheet_thickness]); - translate([horizontal_plate_width - foot_width, vertical_plate_y_position, 0]) - square([foot_width, sheet_thickness]); + translate([0, vertical_plate_y_position, 0]){ + square([foot_width, sheet_thickness]); + if(dogbone==true){ + translate([foot_width - dogbone_offset,dogbone_offset,0]) circle(r=cutter_size); + translate([foot_width - dogbone_offset,sheet_thickness - dogbone_offset,0]) circle(r=cutter_size); + } + } + + translate([horizontal_plate_width - foot_width, vertical_plate_y_position, 0]){ + square([foot_width, sheet_thickness]); + if(dogbone==true){ + translate([dogbone_offset,dogbone_offset,0]) circle(r=cutter_size); + translate([dogbone_offset,sheet_thickness - dogbone_offset,0]) circle(r=cutter_size); + } + } } // motor mount & z rod pockets diff --git a/scad/parts/triangle.scad b/scad/parts/triangle.scad index f2fa1ce..064b709 100644 --- a/scad/parts/triangle.scad +++ b/scad/parts/triangle.scad @@ -22,6 +22,24 @@ module triangle_connectors() { square([triangle_connectors_size[1], triangle_connectors_size[0]]); } +module triangle_connectors_dogbone(){ + translate([-triangle_connectors_size[0], 20, 0]){ + translate([triangle_connectors_size[0] - dogbone_offset,-dogbone_offset,0]) circle(r=cutter_size); + translate([triangle_connectors_size[0] - dogbone_offset,triangle_connectors_size[1]+dogbone_offset,0]) circle(r=cutter_size); + } + translate([-triangle_connectors_size[0], (_triangle_height - 20 + triangle_connectors_size[1]) / 2, 0]){ + translate([triangle_connectors_size[0] - dogbone_offset,-dogbone_offset,0]) circle(r=cutter_size); + translate([triangle_connectors_size[0] - dogbone_offset,triangle_connectors_size[1]+dogbone_offset,0]) circle(r=cutter_size); + } + translate([-triangle_connectors_size[0], _triangle_height - triangle_connectors_size[1], 0]){ + translate([triangle_connectors_size[0] - dogbone_offset,-dogbone_offset,0]) circle(r=cutter_size); + } + translate([_triangle_width - triangle_connectors_size[1] - triangle_connectors_margin[0], -triangle_connectors_size[0], 0]){ + translate([- dogbone_offset,triangle_connectors_size[0]-dogbone_offset,0]) circle(r=cutter_size); + translate([triangle_connectors_size[1] + dogbone_offset,triangle_connectors_size[0]-dogbone_offset,0]) circle(r=cutter_size); + } +} + // rear triangle module triangle_base(width, height, angle) { render() difference() { @@ -48,12 +66,19 @@ module triangle_corner(){ module triangle_2D() { translate([triangle_connectors_size[0], triangle_connectors_size[0], 0]) { render() difference() { - triangle_base(_triangle_width, _triangle_height, _triangle_angle); - translate([triangle_radius, _triangle_height / 2, 0]) - square([_triangle_width, _triangle_height / 2]); - } - triangle_corner(); - triangle_connectors(); + union() { + difference() { + triangle_base(_triangle_width, _triangle_height, _triangle_angle); + translate([triangle_radius, _triangle_height / 2, 0]) + square([_triangle_width, _triangle_height / 2]); + } + triangle_corner(); + triangle_connectors(); + } + if(dogbone==true){ + triangle_connectors_dogbone(); + } + } } } diff --git a/scad/parts/vertical_plate.scad b/scad/parts/vertical_plate.scad index bf34332..73fae4d 100644 --- a/scad/parts/vertical_plate.scad +++ b/scad/parts/vertical_plate.scad @@ -69,12 +69,35 @@ module z_rod_holder_holes() { // triangle pockets module _triangle_connectors_holes() { - translate([-triangle_connectors_size[0], 20, 0]) - square([triangle_connectors_size[0], triangle_connectors_size[1]]); - translate([-triangle_connectors_size[0], (_triangle_height - 20 + triangle_connectors_size[1]) / 2, 0]) - square([triangle_connectors_size[0], triangle_connectors_size[1]]); - translate([-triangle_connectors_size[0], _triangle_height - triangle_connectors_size[1], 0]) + translate([-triangle_connectors_size[0], 20, 0]){ square([triangle_connectors_size[0], triangle_connectors_size[1]]); + if(dogbone==true){ + translate([dogbone_offset,dogbone_offset,0]) circle(r=cutter_size); + translate([triangle_connectors_size[0] - dogbone_offset,dogbone_offset,0]) circle(r=cutter_size); + translate([dogbone_offset,triangle_connectors_size[1] - dogbone_offset,0]) circle(r=cutter_size); + translate([triangle_connectors_size[0] - dogbone_offset,triangle_connectors_size[1] - dogbone_offset,0]) circle(r=cutter_size); + } + } + translate([-triangle_connectors_size[0], (_triangle_height - 20 + triangle_connectors_size[1]) / 2, 0]){ + square([triangle_connectors_size[0], triangle_connectors_size[1]]); + if(dogbone==true){ + translate([dogbone_offset,dogbone_offset,0]) circle(r=cutter_size); + translate([triangle_connectors_size[0] - dogbone_offset,dogbone_offset,0]) circle(r=cutter_size); + translate([dogbone_offset,triangle_connectors_size[1] - dogbone_offset,0]) circle(r=cutter_size); + translate([triangle_connectors_size[0] - dogbone_offset,triangle_connectors_size[1] - dogbone_offset,0]) circle(r=cutter_size); + } + } + + translate([-triangle_connectors_size[0], _triangle_height - triangle_connectors_size[1], 0]){ + square([triangle_connectors_size[0], triangle_connectors_size[1]]); + if(dogbone==true){ + translate([dogbone_offset,dogbone_offset,0]) circle(r=cutter_size); + translate([triangle_connectors_size[0] - dogbone_offset,dogbone_offset,0]) circle(r=cutter_size); + translate([dogbone_offset,triangle_connectors_size[1] - dogbone_offset,0]) circle(r=cutter_size); + translate([triangle_connectors_size[0] - dogbone_offset,triangle_connectors_size[1] - dogbone_offset,0]) circle(r=cutter_size); + } + } + } module triangle_connectors_holes() {