# HG changeset patch # User Paul Boddie # Date 1417888829 -3600 # Node ID 8aa91be70ce826355164cfbf8c0141f1385c8f89 # Parent 127c1ea316e15a8d2460356688c118530956cabe Introduced support for "left-justifying" a widened cartridge. diff -r 127c1ea316e1 -r 8aa91be70ce8 cartridge.scad --- a/cartridge.scad Mon Nov 24 23:28:19 2014 +0100 +++ b/cartridge.scad Sat Dec 06 19:00:29 2014 +0100 @@ -181,6 +181,14 @@ int_payload_upper_extent = height / 2 - top; int_payload_lower_extent = -height / 2 + int_connector_height + bottom; + /* Where the payload is wider than the connector, the payload expands to the left. */ + + int_payload_right_extent = int_connector_width / 2; + int_payload_left_extent = int_payload_right_extent - int_payload_width; + payload_left_extent = int_payload_left_extent - side; + payload_right_extent = int_payload_right_extent + side; + payload_centre = (payload_left_extent + payload_right_extent) / 2; + /* Cartridge surfaces. */ front_side = side; @@ -196,11 +204,15 @@ front_label_height = 46.0; front_label_depth = 1.0; front_label_offset_from_bottom = 19.5; + front_label_centre = payload_centre; + front_label_left_extent = front_label_centre - front_label_width / 2; top_label_width = front_label_width; top_label_height = 11.5; /* the height as seen from above */ top_label_depth = front_label_depth; top_label_offset_from_front = 2.5; + top_label_centre = payload_centre; + top_label_left_extent = top_label_centre - front_label_width / 2; /* The groove around the sides and top. This is extended to allow the @@ -434,7 +446,7 @@ /* The actual shapes. */ - front_displacement = APART ? -payload_width * 0.6 : 0; + front_displacement = APART ? -connector_width * 0.6 : 0; if (FRONT) translate([front_displacement, 0, 0]) @@ -452,15 +464,15 @@ cube_at(payload_width, front, payload_height, 0, -1, 1, - 0, -int_front_depth, int_payload_lower_extent); + payload_centre, -int_front_depth, int_payload_lower_extent); cube_at(front_left, front_depth, payload_height, -1, -1, 1, - -int_payload_width / 2, 0, int_payload_lower_extent); + int_payload_left_extent, 0, int_payload_lower_extent); cube_at(front_right, front_depth, payload_height, 1, -1, 1, - int_payload_width / 2, 0, int_payload_lower_extent); + int_payload_right_extent, 0, int_payload_lower_extent); /* Surfaces surrounding the connector. */ @@ -480,7 +492,7 @@ cube_at(payload_width, front_depth, top, 0, -1, 1, - 0, 0, int_payload_upper_extent); + payload_centre, 0, int_payload_upper_extent); } difference() { @@ -543,7 +555,7 @@ /* Front label. */ if (FRONT_LABEL_INSET) - translate([-front_label_width / 2, -front_depth, + translate([front_label_left_extent, -front_depth, front_label_offset_from_bottom - height / 2]) cube([front_label_width, front_label_depth, front_label_height]); @@ -551,7 +563,7 @@ /* Top label. See also the back piece. */ if (TOP_LABEL_INSET) - translate([-top_label_width / 2, + translate([top_label_left_extent, -front_depth + top_label_offset_from_front, height / 2 - top_label_depth]) cube([top_label_width, top_label_height, @@ -575,20 +587,20 @@ cube_at(inner_top_front_cutout_width, inner_top_front_cutout_depth, inner_top_front_cutout_height, - 0, -1, 1, - 0, 0, int_payload_upper_extent); + 1, -1, 1, + int_payload_left_extent, 0, int_payload_upper_extent); cube_at(inner_payload_front_cutout_width, inner_payload_front_cutout_depth, inner_payload_front_cutout_height, 1, -1, 1, - int_payload_width / 2, 0, int_payload_lower_extent); + int_payload_right_extent, 0, int_payload_lower_extent); cube_at(inner_payload_front_cutout_width, inner_payload_front_cutout_depth, inner_payload_front_cutout_height, -1, -1, 1, - -int_payload_width / 2, 0, int_payload_lower_extent); + int_payload_left_extent, 0, int_payload_lower_extent); cube_at(inner_connector_front_cutout_width, inner_connector_front_cutout_depth, @@ -608,27 +620,27 @@ /* Top left and right rounding. */ - translate([-payload_width / 2 + ro, -front_depth / 2, height / 2 - ro]) + translate([payload_left_extent + ro, -front_depth / 2, height / 2 - ro]) rotate([0, 0, 180]) rotate([90, 0, 0]) fillet(rr, front_depth); - translate([payload_width / 2 - ro, -front_depth / 2, height / 2 - ro]) + translate([payload_right_extent - ro, -front_depth / 2, height / 2 - ro]) rotate([90, 0, 0]) fillet(rr, front_depth); /* Top front rounding. */ - translate([0, -front_depth + ro, height / 2 - ro]) + translate([payload_centre, -front_depth + ro, height / 2 - ro]) rotate([0, 0, 180]) rotate([0, -90, 0]) fillet(rr, payload_width); /* Edge rounding. */ - translate([-payload_width / 2 + ro, -front_depth + ro, 0]) + translate([payload_left_extent + ro, -front_depth + ro, 0]) rotate([0, 0, 180]) fillet(rr, height); - translate([payload_width / 2 - ro, -front_depth + ro, 0]) + translate([payload_right_extent - ro, -front_depth + ro, 0]) rotate([0, 0, 270]) fillet(rr, height); } @@ -639,7 +651,7 @@ the same way, if APART is defined. */ - back_displacement = APART ? payload_width * 0.6 : 0; + back_displacement = APART ? connector_width * 0.6 : 0; back_rotation = APART ? 180 : 0; if (BACK) @@ -661,15 +673,15 @@ cube_at(payload_width, payload_back, payload_height, 0, 1, 1, - 0, int_payload_back_depth, int_payload_lower_extent); + payload_centre, int_payload_back_depth, int_payload_lower_extent); cube_at(back_left, back_depth, payload_height, -1, 1, 1, - -int_payload_width / 2, 0, int_payload_lower_extent); + int_payload_left_extent, 0, int_payload_lower_extent); cube_at(back_right, back_depth, payload_height, 1, 1, 1, - int_payload_width / 2, 0, int_payload_lower_extent); + int_payload_right_extent, 0, int_payload_lower_extent); /* Surfaces surrounding the connector. */ @@ -691,7 +703,7 @@ cube_at(payload_width, back_depth, top, 0, 1, 1, - 0, 0, int_payload_upper_extent); + payload_centre, 0, int_payload_upper_extent); /* The extension of the back to connect with the front. Here, the inside @@ -707,8 +719,8 @@ difference() { cube_at(back_left - groove_depth, groove_width_extra, inner_payload_front_cutout_height, -1, 1, 1, - -int_payload_width / 2, -groove_width_extra, int_payload_lower_extent); - translate([-int_payload_width / 2 - groove_ro, -groove_width_extra + groove_ro, + int_payload_left_extent, -groove_width_extra, int_payload_lower_extent); + translate([int_payload_left_extent - groove_ro, -groove_width_extra + groove_ro, int_payload_lower_extent]) rotate([0, 0, -90]) fillet_justified(groove_rr, inner_payload_front_cutout_height); @@ -719,8 +731,8 @@ difference() { cube_at(back_right - groove_depth, groove_width_extra, inner_payload_front_cutout_height, 1, 1, 1, - int_payload_width / 2, -groove_width_extra, int_payload_lower_extent); - translate([int_payload_width / 2 + groove_ro, -groove_width_extra + groove_ro, + int_payload_right_extent, -groove_width_extra, int_payload_lower_extent); + translate([int_payload_right_extent + groove_ro, -groove_width_extra + groove_ro, int_payload_lower_extent]) rotate([0, 0, 180]) fillet_justified(groove_rr, inner_payload_front_cutout_height); @@ -755,8 +767,8 @@ difference() { cube_at(payload_width - groove_depth * 2, groove_width_extra, top - top_groove_depth, 0, 1, 1, - 0, -groove_width_extra, int_payload_upper_extent); - translate([0, -groove_width_extra + groove_ro, + payload_centre, -groove_width_extra, int_payload_upper_extent); + translate([payload_centre, -groove_width_extra + groove_ro, int_payload_upper_extent + groove_ro]) rotate([0, 0, 180]) rotate([0, 90, 0]) @@ -801,7 +813,7 @@ /* Top label. See also the front piece. */ if (TOP_LABEL_INSET) - translate([-top_label_width / 2, + translate([top_label_left_extent, -front_depth + top_label_offset_from_front, height / 2 - top_label_depth]) cube([top_label_width, top_label_height, @@ -816,23 +828,23 @@ cube_at(groove_depth, groove_width_normal, height, 1, 1, 0, - -payload_width / 2, 0, 0); + payload_left_extent, 0, 0); /* Right groove. */ cube_at(groove_depth, groove_width_normal, height, -1, 1, 0, - payload_width / 2, 0, 0); + payload_right_extent, 0, 0); /* Top grooves. */ cube_at(payload_width, groove_width_normal, groove_depth, 0, 1, -1, - 0, 0, height / 2); + payload_centre, 0, height / 2); cube_at(payload_width, top_groove_width, top_groove_depth, 0, 1, -1, - 0, -groove_width_extra, height / 2); + payload_centre, -groove_width_extra, height / 2); } /* Back cavity. */ @@ -913,26 +925,26 @@ /* Top left and right rounding. */ - translate([-payload_width / 2 + ro, back_depth / 2, height / 2 - ro]) + translate([payload_left_extent + ro, back_depth / 2, height / 2 - ro]) rotate([0, 0, 180]) rotate([90, 0, 0]) fillet(rr, back_depth); - translate([payload_width / 2 - ro, back_depth / 2, height / 2 - ro]) + translate([payload_right_extent - ro, back_depth / 2, height / 2 - ro]) rotate([90, 0, 0]) fillet(rr, back_depth); /* Top back rounding. */ - translate([0, back_depth - ro, height / 2 - ro]) + translate([payload_centre, back_depth - ro, height / 2 - ro]) rotate([0, -90, 0]) fillet(rr, payload_width); /* Outer edge rounding. */ - translate([payload_width / 2 - ro, back_depth - ro, int_payload_lower_extent - extra]) + translate([payload_right_extent - ro, back_depth - ro, int_payload_lower_extent - extra]) fillet_justified(rr, payload_height + extra); - translate([-payload_width / 2 + ro, back_depth - ro, int_payload_lower_extent - extra]) + translate([payload_left_extent + ro, back_depth - ro, int_payload_lower_extent - extra]) rotate([0, 0, 90]) fillet_justified(rr, payload_height + extra); @@ -953,12 +965,12 @@ edges, the payload filleting is extended downwards. */ - translate([-payload_width / 2 + groove_depth + groove_ro, -groove_width_extra + groove_ro, + translate([payload_left_extent + groove_depth + groove_ro, -groove_width_extra + groove_ro, int_payload_lower_extent - extra]) rotate([0, 0, 180]) fillet_justified(groove_rr, inner_payload_front_cutout_height + extra); - translate([payload_width / 2 - groove_depth - groove_ro, -groove_width_extra + groove_ro, + translate([payload_right_extent - groove_depth - groove_ro, -groove_width_extra + groove_ro, int_payload_lower_extent - extra]) rotate([0, 0, -90]) fillet_justified(groove_rr, inner_payload_front_cutout_height + extra); @@ -977,7 +989,7 @@ /* Top of payload. */ - translate([0, -groove_width_extra + groove_ro, + translate([payload_centre, -groove_width_extra + groove_ro, int_payload_upper_extent + inner_top_front_cutout_height - groove_ro]) rotate([0, 0, 180]) rotate([0, -90, 0])