diff --git a/src/components.scad b/src/components.scad
index d79c285..e591e15 100644
--- a/src/components.scad
+++ b/src/components.scad
@@ -123,6 +123,13 @@ module topplate() {
}
}
+module frame_box() {
+ difference() {
+ cube([frame_x, frame_y, frame_z], center=true);
+ cube([160, 185, frame_z+5], center=true);
+ }
+}
+
module frame_mount_column() {
cube([20, 20, frame_z], center=true);
}
@@ -133,3 +140,31 @@ module frame_panel_surround() {
scale([1, 1, 2]) base_topplate();
}
}
+
+module base_frame() {
+ frame_box();
+ translate([0, 0, frame_z/2 + top_plate_z/2])
+ frame_panel_surround();
+ translate([(top_plate_x/2)-10, (top_plate_y/2)-10, 0])
+ frame_mount_column();
+ translate([-((top_plate_x/2)-10), (top_plate_y/2)-10, 0])
+ frame_mount_column();
+ translate([(top_plate_x/2)-10, -((top_plate_y/2)-10), 0])
+ frame_mount_column();
+ translate([-((top_plate_x/2)-10), -((top_plate_y/2)-10), 0])
+ frame_mount_column();
+}
+
+module frame() {
+ difference() {
+ base_frame();
+ translate([(top_plate_x/2)-10, (top_plate_y/2)-10, 0])
+ frame_hex_bolt_hole();
+ translate([-((top_plate_x/2)-10), (top_plate_y/2)-10, 0])
+ frame_hex_bolt_hole();
+ translate([(top_plate_x/2)-10, -((top_plate_y/2)-10), 0])
+ frame_hex_bolt_hole();
+ translate([-((top_plate_x/2)-10), -((top_plate_y/2)-10), 0])
+ frame_hex_bolt_hole();
+ }
+}
diff --git a/src/left-frame.scad b/src/left-frame.scad
new file mode 100644
index 0000000..850f1f2
--- /dev/null
+++ b/src/left-frame.scad
@@ -0,0 +1,44 @@
+/* Copyright Brian Stephan 2023
+ *
+ * This file is part of bullet-system-stick.
+ *
+ * bullet-system-stick is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by the
+ * Free Software Foundation, either version 3 of the License, or (at your
+ * option) any later version.
+ *
+ * bullet-system-stick is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+ * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
+ * more details.
+ *
+ * You should have received a copy of the GNU General Public License along with
+ * bullet-system-stick. If not, see .
+ */
+
+include
+
+module left_frame() {
+ difference() {
+ frame();
+ // chop the right edge off
+ translate([frame_x/2, 0, 0]) cube([10.001, 2*(frame_y+top_plate_y), 2*(frame_z+top_plate_z)], center=true);
+ }
+}
+
+difference() {
+ left_frame();
+ // connection hole to other frames
+ translate([frame_x/2, (frame_y/4)+10, (frame_z/4)]) rotate([0, 90, 0]) m4_hole();
+ translate([frame_x/2, (frame_y/4)+10, -(frame_z/4)]) rotate([0, 90, 0]) m4_hole();
+ translate([frame_x/2, (frame_y/4)-10, (frame_z/4)]) rotate([0, 90, 0]) m4_hole();
+ translate([frame_x/2, (frame_y/4)-10, -(frame_z/4)]) rotate([0, 90, 0]) m4_hole();
+
+ translate([frame_x/2, -((frame_y/4)+10), (frame_z/4)]) rotate([0, 90, 0]) m4_hole();
+ translate([frame_x/2, -((frame_y/4)+10), -(frame_z/4)]) rotate([0, 90, 0]) m4_hole();
+ translate([frame_x/2, -((frame_y/4)-10), (frame_z/4)]) rotate([0, 90, 0]) m4_hole();
+ translate([frame_x/2, -((frame_y/4)-10), -(frame_z/4)]) rotate([0, 90, 0]) m4_hole();
+
+ // cable routing hole
+ translate([frame_x/2, 0, 0]) rotate([0, 90, 0]) frame_interchange_hole();
+}