1.1 --- a/cartridge.scad Mon Nov 24 23:28:19 2014 +0100
1.2 +++ b/cartridge.scad Sat Dec 06 19:00:29 2014 +0100
1.3 @@ -181,6 +181,14 @@
1.4 int_payload_upper_extent = height / 2 - top;
1.5 int_payload_lower_extent = -height / 2 + int_connector_height + bottom;
1.6
1.7 + /* Where the payload is wider than the connector, the payload expands to the left. */
1.8 +
1.9 + int_payload_right_extent = int_connector_width / 2;
1.10 + int_payload_left_extent = int_payload_right_extent - int_payload_width;
1.11 + payload_left_extent = int_payload_left_extent - side;
1.12 + payload_right_extent = int_payload_right_extent + side;
1.13 + payload_centre = (payload_left_extent + payload_right_extent) / 2;
1.14 +
1.15 /* Cartridge surfaces. */
1.16
1.17 front_side = side;
1.18 @@ -196,11 +204,15 @@
1.19 front_label_height = 46.0;
1.20 front_label_depth = 1.0;
1.21 front_label_offset_from_bottom = 19.5;
1.22 + front_label_centre = payload_centre;
1.23 + front_label_left_extent = front_label_centre - front_label_width / 2;
1.24
1.25 top_label_width = front_label_width;
1.26 top_label_height = 11.5; /* the height as seen from above */
1.27 top_label_depth = front_label_depth;
1.28 top_label_offset_from_front = 2.5;
1.29 + top_label_centre = payload_centre;
1.30 + top_label_left_extent = top_label_centre - front_label_width / 2;
1.31
1.32 /*
1.33 The groove around the sides and top. This is extended to allow the
1.34 @@ -434,7 +446,7 @@
1.35
1.36 /* The actual shapes. */
1.37
1.38 - front_displacement = APART ? -payload_width * 0.6 : 0;
1.39 + front_displacement = APART ? -connector_width * 0.6 : 0;
1.40
1.41 if (FRONT)
1.42 translate([front_displacement, 0, 0])
1.43 @@ -452,15 +464,15 @@
1.44
1.45 cube_at(payload_width, front, payload_height,
1.46 0, -1, 1,
1.47 - 0, -int_front_depth, int_payload_lower_extent);
1.48 + payload_centre, -int_front_depth, int_payload_lower_extent);
1.49
1.50 cube_at(front_left, front_depth, payload_height,
1.51 -1, -1, 1,
1.52 - -int_payload_width / 2, 0, int_payload_lower_extent);
1.53 + int_payload_left_extent, 0, int_payload_lower_extent);
1.54
1.55 cube_at(front_right, front_depth, payload_height,
1.56 1, -1, 1,
1.57 - int_payload_width / 2, 0, int_payload_lower_extent);
1.58 + int_payload_right_extent, 0, int_payload_lower_extent);
1.59
1.60 /* Surfaces surrounding the connector. */
1.61
1.62 @@ -480,7 +492,7 @@
1.63
1.64 cube_at(payload_width, front_depth, top,
1.65 0, -1, 1,
1.66 - 0, 0, int_payload_upper_extent);
1.67 + payload_centre, 0, int_payload_upper_extent);
1.68 }
1.69
1.70 difference() {
1.71 @@ -543,7 +555,7 @@
1.72 /* Front label. */
1.73
1.74 if (FRONT_LABEL_INSET)
1.75 - translate([-front_label_width / 2, -front_depth,
1.76 + translate([front_label_left_extent, -front_depth,
1.77 front_label_offset_from_bottom - height / 2])
1.78 cube([front_label_width, front_label_depth,
1.79 front_label_height]);
1.80 @@ -551,7 +563,7 @@
1.81 /* Top label. See also the back piece. */
1.82
1.83 if (TOP_LABEL_INSET)
1.84 - translate([-top_label_width / 2,
1.85 + translate([top_label_left_extent,
1.86 -front_depth + top_label_offset_from_front,
1.87 height / 2 - top_label_depth])
1.88 cube([top_label_width, top_label_height,
1.89 @@ -575,20 +587,20 @@
1.90 cube_at(inner_top_front_cutout_width,
1.91 inner_top_front_cutout_depth,
1.92 inner_top_front_cutout_height,
1.93 - 0, -1, 1,
1.94 - 0, 0, int_payload_upper_extent);
1.95 + 1, -1, 1,
1.96 + int_payload_left_extent, 0, int_payload_upper_extent);
1.97
1.98 cube_at(inner_payload_front_cutout_width,
1.99 inner_payload_front_cutout_depth,
1.100 inner_payload_front_cutout_height,
1.101 1, -1, 1,
1.102 - int_payload_width / 2, 0, int_payload_lower_extent);
1.103 + int_payload_right_extent, 0, int_payload_lower_extent);
1.104
1.105 cube_at(inner_payload_front_cutout_width,
1.106 inner_payload_front_cutout_depth,
1.107 inner_payload_front_cutout_height,
1.108 -1, -1, 1,
1.109 - -int_payload_width / 2, 0, int_payload_lower_extent);
1.110 + int_payload_left_extent, 0, int_payload_lower_extent);
1.111
1.112 cube_at(inner_connector_front_cutout_width,
1.113 inner_connector_front_cutout_depth,
1.114 @@ -608,27 +620,27 @@
1.115
1.116 /* Top left and right rounding. */
1.117
1.118 - translate([-payload_width / 2 + ro, -front_depth / 2, height / 2 - ro])
1.119 + translate([payload_left_extent + ro, -front_depth / 2, height / 2 - ro])
1.120 rotate([0, 0, 180])
1.121 rotate([90, 0, 0])
1.122 fillet(rr, front_depth);
1.123 - translate([payload_width / 2 - ro, -front_depth / 2, height / 2 - ro])
1.124 + translate([payload_right_extent - ro, -front_depth / 2, height / 2 - ro])
1.125 rotate([90, 0, 0])
1.126 fillet(rr, front_depth);
1.127
1.128 /* Top front rounding. */
1.129
1.130 - translate([0, -front_depth + ro, height / 2 - ro])
1.131 + translate([payload_centre, -front_depth + ro, height / 2 - ro])
1.132 rotate([0, 0, 180])
1.133 rotate([0, -90, 0])
1.134 fillet(rr, payload_width);
1.135
1.136 /* Edge rounding. */
1.137
1.138 - translate([-payload_width / 2 + ro, -front_depth + ro, 0])
1.139 + translate([payload_left_extent + ro, -front_depth + ro, 0])
1.140 rotate([0, 0, 180])
1.141 fillet(rr, height);
1.142 - translate([payload_width / 2 - ro, -front_depth + ro, 0])
1.143 + translate([payload_right_extent - ro, -front_depth + ro, 0])
1.144 rotate([0, 0, 270])
1.145 fillet(rr, height);
1.146 }
1.147 @@ -639,7 +651,7 @@
1.148 the same way, if APART is defined.
1.149 */
1.150
1.151 - back_displacement = APART ? payload_width * 0.6 : 0;
1.152 + back_displacement = APART ? connector_width * 0.6 : 0;
1.153 back_rotation = APART ? 180 : 0;
1.154
1.155 if (BACK)
1.156 @@ -661,15 +673,15 @@
1.157
1.158 cube_at(payload_width, payload_back, payload_height,
1.159 0, 1, 1,
1.160 - 0, int_payload_back_depth, int_payload_lower_extent);
1.161 + payload_centre, int_payload_back_depth, int_payload_lower_extent);
1.162
1.163 cube_at(back_left, back_depth, payload_height,
1.164 -1, 1, 1,
1.165 - -int_payload_width / 2, 0, int_payload_lower_extent);
1.166 + int_payload_left_extent, 0, int_payload_lower_extent);
1.167
1.168 cube_at(back_right, back_depth, payload_height,
1.169 1, 1, 1,
1.170 - int_payload_width / 2, 0, int_payload_lower_extent);
1.171 + int_payload_right_extent, 0, int_payload_lower_extent);
1.172
1.173 /* Surfaces surrounding the connector. */
1.174
1.175 @@ -691,7 +703,7 @@
1.176
1.177 cube_at(payload_width, back_depth, top,
1.178 0, 1, 1,
1.179 - 0, 0, int_payload_upper_extent);
1.180 + payload_centre, 0, int_payload_upper_extent);
1.181
1.182 /*
1.183 The extension of the back to connect with the front. Here, the inside
1.184 @@ -707,8 +719,8 @@
1.185 difference() {
1.186 cube_at(back_left - groove_depth, groove_width_extra, inner_payload_front_cutout_height,
1.187 -1, 1, 1,
1.188 - -int_payload_width / 2, -groove_width_extra, int_payload_lower_extent);
1.189 - translate([-int_payload_width / 2 - groove_ro, -groove_width_extra + groove_ro,
1.190 + int_payload_left_extent, -groove_width_extra, int_payload_lower_extent);
1.191 + translate([int_payload_left_extent - groove_ro, -groove_width_extra + groove_ro,
1.192 int_payload_lower_extent])
1.193 rotate([0, 0, -90])
1.194 fillet_justified(groove_rr, inner_payload_front_cutout_height);
1.195 @@ -719,8 +731,8 @@
1.196 difference() {
1.197 cube_at(back_right - groove_depth, groove_width_extra, inner_payload_front_cutout_height,
1.198 1, 1, 1,
1.199 - int_payload_width / 2, -groove_width_extra, int_payload_lower_extent);
1.200 - translate([int_payload_width / 2 + groove_ro, -groove_width_extra + groove_ro,
1.201 + int_payload_right_extent, -groove_width_extra, int_payload_lower_extent);
1.202 + translate([int_payload_right_extent + groove_ro, -groove_width_extra + groove_ro,
1.203 int_payload_lower_extent])
1.204 rotate([0, 0, 180])
1.205 fillet_justified(groove_rr, inner_payload_front_cutout_height);
1.206 @@ -755,8 +767,8 @@
1.207 difference() {
1.208 cube_at(payload_width - groove_depth * 2, groove_width_extra, top - top_groove_depth,
1.209 0, 1, 1,
1.210 - 0, -groove_width_extra, int_payload_upper_extent);
1.211 - translate([0, -groove_width_extra + groove_ro,
1.212 + payload_centre, -groove_width_extra, int_payload_upper_extent);
1.213 + translate([payload_centre, -groove_width_extra + groove_ro,
1.214 int_payload_upper_extent + groove_ro])
1.215 rotate([0, 0, 180])
1.216 rotate([0, 90, 0])
1.217 @@ -801,7 +813,7 @@
1.218 /* Top label. See also the front piece. */
1.219
1.220 if (TOP_LABEL_INSET)
1.221 - translate([-top_label_width / 2,
1.222 + translate([top_label_left_extent,
1.223 -front_depth + top_label_offset_from_front,
1.224 height / 2 - top_label_depth])
1.225 cube([top_label_width, top_label_height,
1.226 @@ -816,23 +828,23 @@
1.227
1.228 cube_at(groove_depth, groove_width_normal, height,
1.229 1, 1, 0,
1.230 - -payload_width / 2, 0, 0);
1.231 + payload_left_extent, 0, 0);
1.232
1.233 /* Right groove. */
1.234
1.235 cube_at(groove_depth, groove_width_normal, height,
1.236 -1, 1, 0,
1.237 - payload_width / 2, 0, 0);
1.238 + payload_right_extent, 0, 0);
1.239
1.240 /* Top grooves. */
1.241
1.242 cube_at(payload_width, groove_width_normal, groove_depth,
1.243 0, 1, -1,
1.244 - 0, 0, height / 2);
1.245 + payload_centre, 0, height / 2);
1.246
1.247 cube_at(payload_width, top_groove_width, top_groove_depth,
1.248 0, 1, -1,
1.249 - 0, -groove_width_extra, height / 2);
1.250 + payload_centre, -groove_width_extra, height / 2);
1.251 }
1.252
1.253 /* Back cavity. */
1.254 @@ -913,26 +925,26 @@
1.255
1.256 /* Top left and right rounding. */
1.257
1.258 - translate([-payload_width / 2 + ro, back_depth / 2, height / 2 - ro])
1.259 + translate([payload_left_extent + ro, back_depth / 2, height / 2 - ro])
1.260 rotate([0, 0, 180])
1.261 rotate([90, 0, 0])
1.262 fillet(rr, back_depth);
1.263 - translate([payload_width / 2 - ro, back_depth / 2, height / 2 - ro])
1.264 + translate([payload_right_extent - ro, back_depth / 2, height / 2 - ro])
1.265 rotate([90, 0, 0])
1.266 fillet(rr, back_depth);
1.267
1.268 /* Top back rounding. */
1.269
1.270 - translate([0, back_depth - ro, height / 2 - ro])
1.271 + translate([payload_centre, back_depth - ro, height / 2 - ro])
1.272 rotate([0, -90, 0])
1.273 fillet(rr, payload_width);
1.274
1.275 /* Outer edge rounding. */
1.276
1.277 - translate([payload_width / 2 - ro, back_depth - ro, int_payload_lower_extent - extra])
1.278 + translate([payload_right_extent - ro, back_depth - ro, int_payload_lower_extent - extra])
1.279 fillet_justified(rr, payload_height + extra);
1.280
1.281 - translate([-payload_width / 2 + ro, back_depth - ro, int_payload_lower_extent - extra])
1.282 + translate([payload_left_extent + ro, back_depth - ro, int_payload_lower_extent - extra])
1.283 rotate([0, 0, 90])
1.284 fillet_justified(rr, payload_height + extra);
1.285
1.286 @@ -953,12 +965,12 @@
1.287 edges, the payload filleting is extended downwards.
1.288 */
1.289
1.290 - translate([-payload_width / 2 + groove_depth + groove_ro, -groove_width_extra + groove_ro,
1.291 + translate([payload_left_extent + groove_depth + groove_ro, -groove_width_extra + groove_ro,
1.292 int_payload_lower_extent - extra])
1.293 rotate([0, 0, 180])
1.294 fillet_justified(groove_rr, inner_payload_front_cutout_height + extra);
1.295
1.296 - translate([payload_width / 2 - groove_depth - groove_ro, -groove_width_extra + groove_ro,
1.297 + translate([payload_right_extent - groove_depth - groove_ro, -groove_width_extra + groove_ro,
1.298 int_payload_lower_extent - extra])
1.299 rotate([0, 0, -90])
1.300 fillet_justified(groove_rr, inner_payload_front_cutout_height + extra);
1.301 @@ -977,7 +989,7 @@
1.302
1.303 /* Top of payload. */
1.304
1.305 - translate([0, -groove_width_extra + groove_ro,
1.306 + translate([payload_centre, -groove_width_extra + groove_ro,
1.307 int_payload_upper_extent + inner_top_front_cutout_height - groove_ro])
1.308 rotate([0, 0, 180])
1.309 rotate([0, -90, 0])