Compare commits
46 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
97a6f52e07
|
|||
|
ecc3ffbb54
|
|||
|
73b55861b6
|
|||
|
439333c154
|
|||
|
ef16559b95
|
|||
|
2880018913
|
|||
|
ca928932ba
|
|||
|
8b4cc0b182
|
|||
|
a6b5d77671
|
|||
|
fa05469e19
|
|||
|
9375a3a1b7
|
|||
|
1557021be4
|
|||
|
9d109f1756
|
|||
|
0ea02154b5
|
|||
|
e29d9e6180
|
|||
|
f509b8df80
|
|||
|
71b2c786be
|
|||
|
5c542944d2
|
|||
|
623e025566
|
|||
|
d1a8f34c2a
|
|||
|
900ca8c751
|
|||
|
d87794db59
|
|||
|
f0d3f434a3
|
|||
|
2f027ef1fe
|
|||
|
b826ecaccf
|
|||
|
0cdd0ae846
|
|||
|
504dab935c
|
|||
|
0de2505de2
|
|||
|
fd2193cc5a
|
|||
|
766fbf2883
|
|||
|
7a03a1e38e
|
|||
|
1083492ef8
|
|||
|
765ef689c5
|
|||
|
055b103abd
|
|||
|
6ad801b8b2
|
|||
|
875513a3d3
|
|||
|
7e67c15c13
|
|||
|
e426e15884
|
|||
|
ba3e77d0cd
|
|||
|
c0ae73b139
|
|||
|
b871963cf7
|
|||
|
2c62c9119b
|
|||
|
b7910cdb44
|
|||
|
0ac3e8433f
|
|||
|
2bbf69d9a0
|
|||
|
f4c9c91d91
|
1
.gitignore
vendored
1
.gitignore
vendored
@@ -1,3 +1,4 @@
|
||||
build/
|
||||
*.stl
|
||||
|
||||
*.sw*
|
||||
|
||||
71
CHANGELOG.md
71
CHANGELOG.md
@@ -2,6 +2,77 @@
|
||||
|
||||
Included is a summary of changes to the project, by version. Details can be found in the commit history.
|
||||
|
||||
## v4.6.0
|
||||
|
||||
### Features
|
||||
|
||||
* All frame pieces were updated to have flush edges, a la the "extended" sides, rather than the seam between the
|
||||
front/back and the sides being at a 45 degree angle on some pieces, with the latter meaning that we were maintaining
|
||||
two (complicated) duplicates of the same pieces because both 45 degree and 90 degree angles were necessary. This does
|
||||
not affect the look of the build much, but simplifies the print and the maintenance of the project.
|
||||
* A slightly-extended flat side piece was added, to add just a bit of length to the overall build.
|
||||
|
||||
### Improvements
|
||||
|
||||
* One more slash has been added to the frame pieces, just for more interesting visuals.
|
||||
* The rectangle plates' positioning was tweaked slightly.
|
||||
|
||||
### Fixes
|
||||
|
||||
* The frame solid was very slightly shorter than it should have been as the corners relied on cylinders. The core solid
|
||||
is now at its proper dimensions.
|
||||
|
||||
## v4.5.0
|
||||
|
||||
### Features
|
||||
|
||||
* Many components for the Buildable Stick System - Arcade Edition --- pieces to create a control enclosure for the Qanba
|
||||
2009 base! These pieces live in `extras/bss-ae/` but do use some parts from the base project; check that subdir's
|
||||
README.
|
||||
* Created a Sega 2P 11 button layout, basically following the curve of the fourth column and adding a fifth, plus one
|
||||
extra button
|
||||
* More decorative plates, this time square ones for an NES-styled project.
|
||||
|
||||
### Improvements
|
||||
|
||||
* Button layout positions for Sega 2P and directional arc layouts have been parameterized.
|
||||
* The decorative plates for the directional arc + W and Sega 2P 9 layout have been split into two files, since there was
|
||||
no reason to keep them as one with multiple pieces anymore.
|
||||
* Tweaks to the horizontal stripes in order to get them to print better.
|
||||
* Renamed "Sega 2P plus one" to Sega 2P 9, following the pattern of the 11 layout.
|
||||
|
||||
### Miscellaneous
|
||||
|
||||
* Renaming of extended side pieces to fit the front/back idiom.
|
||||
* Cleanups to the demos.
|
||||
|
||||
## v4.4.3
|
||||
|
||||
### Features
|
||||
|
||||
* Windowed frame wall pieces were made for the "clean" front/back walls that line up with the extended sides.
|
||||
|
||||
### Improvements
|
||||
|
||||
* The inner wall piece has been thickened, bringing its surface closer to the end of the outer wall windowed frame
|
||||
pieces, making the window less deep and the inner wall easier to see.
|
||||
* The inner wall piece has been shrunken on the Z in order to leave some material on the outer wall and thus improve the
|
||||
friction fit and clamp of the outer wall piece, which was too weakened by the unsupported top and bottom otherwise.
|
||||
|
||||
### Miscellaneous
|
||||
|
||||
* Documentation updates, especially around the printing of parts.
|
||||
* Corrected the names of some pieces that were accidentally duplicated from the file they were copied from rather than
|
||||
what they were, or otherwise didn't match the standard pattern (such as it is).
|
||||
|
||||
## v4.4.2
|
||||
|
||||
### Bugfixes
|
||||
|
||||
* Fix a regression with the small button screw-in space cutting into the frame wall supports. The screw-in space is
|
||||
potentially more important for some nuts than the thickness of the frame wall supports, so the latter have been
|
||||
thinned slightly.
|
||||
|
||||
## v4.4.1
|
||||
|
||||
### Features
|
||||
|
||||
@@ -7,6 +7,9 @@ design before sending it to a custom builder? Do you just love having your space
|
||||
because you keep making different variants, colorways, and so on? Or do you simply want a good stick on the cheap, and
|
||||
know someone or a library with a 3D printer? The Buildable Stick System may be the project for you!
|
||||
|
||||
**Join the project IRC channel: [#buildable-stick-system @
|
||||
Randomus](https://webirc.randomus.net/#buildable-stick-system)!**
|
||||
|
||||

|
||||
|
||||
[OpenSCAD-based illustration of how the components for an overhang panel-based stick fit together.]
|
||||
|
||||
2
build.py
2
build.py
@@ -48,3 +48,5 @@ for root, dirs, files in os.walk('.'):
|
||||
|
||||
for process in processes:
|
||||
process.wait()
|
||||
if process.returncode != 0:
|
||||
raise Exception(f"building {process.args} failed")
|
||||
|
||||
37
demo/all-together-demo-extended-with-windows.scad
Normal file
37
demo/all-together-demo-extended-with-windows.scad
Normal file
@@ -0,0 +1,37 @@
|
||||
/*
|
||||
* SPDX-FileCopyrightText: © 2023 Brian S. Stephan <bss@incorporeal.org>
|
||||
* SPDX-License-Identifier: GPL-3.0-or-later
|
||||
*/
|
||||
|
||||
include <parameters.scad>
|
||||
include <components.scad>
|
||||
use <frames/pieces/side-trapezoid.scad>
|
||||
use <frames/pieces/front-or-back-aux-and-neutrik.scad>
|
||||
use <frames/pieces/front-or-back-windowed-horiz-stripes.scad>
|
||||
use <panels/inset/lever-and-dir_arc-plus-w-30mm-panel.scad>
|
||||
use <panels/inset/sega-2p-nine-plus-control-panel-with-mount.scad>
|
||||
use <misc/decorative-plate-24mm-button.scad>
|
||||
use <misc/decorative-plate-dir_arc-plus-w-30mm-and-sega-2p-nine.scad>
|
||||
use <misc/dustwasher-lsx-nobi.scad>
|
||||
|
||||
top_panel_color = "#5B6579";
|
||||
bottom_panel_color = "#8E9089";
|
||||
frame_top_bottom_color = "#8E9089";
|
||||
frame_side_color = "#8E9089";
|
||||
top_deco_color = "#8E9089";
|
||||
|
||||
color(top_panel_color) translate([-panel_x/2, 0, frame_z/2-panel_z+0.01]) lever_and_dir_arc_w_30mm_panel();
|
||||
color(top_panel_color) translate([panel_x/2, 0, frame_z/2-panel_z+0.01]) sega_2p_nine_plus_control_panel_with_mount();
|
||||
color(frame_side_color) translate([-frame_x/2+4, 0, -2.5]) side_trapezoid_frame_piece();
|
||||
color(frame_side_color) translate([frame_x/2-4, 0, -2.5]) mirror([1, 0, 0]) side_trapezoid_frame_piece();
|
||||
color(frame_top_bottom_color) translate([-frame_x/2+4, 0, -2.5]) horiz_striped_windowed_front_or_back_frame_piece();
|
||||
color(frame_top_bottom_color) translate([frame_x/2-4, 0, -2.5]) horiz_striped_windowed_front_or_back_frame_piece();
|
||||
color(frame_top_bottom_color) translate([-frame_x/2+4, 0, -2.5]) rotate([180, 0, 0]) front_or_back_aux_and_neutrik_frame_piece();
|
||||
color(frame_top_bottom_color) translate([frame_x/2-4, 0, -2.5]) rotate([180, 180, 0]) front_or_back_aux_and_neutrik_frame_piece();
|
||||
color(bottom_panel_color) translate([-panel_x/2, 0, -5-frame_z/2+5]) panel();
|
||||
color(bottom_panel_color) translate([panel_x/2, 0, -5-frame_z/2+5]) panel();
|
||||
|
||||
/* color(top_deco_color) translate([0, 0, 3+frame_z/2-4]) dir_arc_plus_w_30mm_and_sega_2p_nine_decorative_plate_of_plates(); */
|
||||
color(top_deco_color) translate([0, 0, 3+frame_z/2-panel_z]) dir_arc_plus_w_30mm_and_sega_2p_nine_decorative_plate();
|
||||
color(top_deco_color) translate([-170, 20, 3+frame_z/2-panel_z]) lsx_nobi_dustwasher();
|
||||
color(top_deco_color) translate([panel_x-24, 30, 3+frame_z/2-panel_z]) button_24mm_decorative_plate();
|
||||
@@ -5,14 +5,13 @@
|
||||
|
||||
include <parameters.scad>
|
||||
include <components.scad>
|
||||
use <frames/pieces/extended/front-or-back.scad>
|
||||
use <frames/pieces/extended/side-extended-to-bottom.scad>
|
||||
use <frames/pieces/extended/front-or-back-clean-for-extended-side-aux-and-neutrik.scad>
|
||||
use <frames/pieces/front-or-back-trapezoid.scad>
|
||||
use <frames/pieces/side-trapezoid-extended-to-front-trapezoid.scad>
|
||||
use <frames/pieces/front-or-back-aux-and-neutrik.scad>
|
||||
use <panels/inset/lever-and-dir_arc-plus-w-30mm-panel.scad>
|
||||
use <panels/inset/sega-2p-plus-one-plus-control-panel-with-mount.scad>
|
||||
use <panels/inset/sega-2p-nine-plus-control-panel-with-mount.scad>
|
||||
use <misc/decorative-plate-24mm-button.scad>
|
||||
use <misc/decorative-plate-dir_arc-plus-w-30mm-and-sega-2p-plus-one.scad>
|
||||
use <misc/decorative-plate-dir_arc-plus-w-30mm-and-sega-2p-plus-one-plates.scad>
|
||||
use <misc/decorative-plate-dir_arc-plus-w-30mm-and-sega-2p-nine.scad>
|
||||
use <misc/dustwasher-lsx-nobi.scad>
|
||||
|
||||
top_panel_color = "#5B6579";
|
||||
@@ -22,17 +21,16 @@ frame_side_color = "#8E9089";
|
||||
top_deco_color = "#8E9089";
|
||||
|
||||
color(top_panel_color) translate([-panel_x/2, 0, frame_z/2-panel_z+0.01]) lever_and_dir_arc_w_30mm_panel();
|
||||
color(top_panel_color) translate([panel_x/2, 0, frame_z/2-panel_z+0.01]) sega_2p_plus_one_plus_control_panel_with_mount();
|
||||
color(frame_side_color) translate([-frame_x/2+4, 0, -2.5]) extra_extended_left_or_right_frame_piece();
|
||||
color(frame_side_color) translate([frame_x/2-4, 0, -2.5]) mirror([1, 0, 0]) extra_extended_left_or_right_frame_piece();
|
||||
color(frame_top_bottom_color) translate([-frame_x/2+4, 0, -2.5]) extended_front_or_back_frame_piece();
|
||||
color(frame_top_bottom_color) translate([frame_x/2-4, 0, -2.5]) extended_front_or_back_frame_piece();
|
||||
color(frame_top_bottom_color) translate([-frame_x/2+4, 0, -2.5]) rotate([180, 0, 0]) front_or_back_aux_and_neutrik_box_frame_piece_for_extended_side();
|
||||
color(frame_top_bottom_color) translate([frame_x/2-4, 0, -2.5]) rotate([180, 180, 0]) front_or_back_aux_and_neutrik_box_frame_piece_for_extended_side();
|
||||
color(top_panel_color) translate([panel_x/2, 0, frame_z/2-panel_z+0.01]) sega_2p_nine_plus_control_panel_with_mount();
|
||||
color(frame_side_color) translate([-frame_x/2+4, 0, -2.5]) side_trapezoid_extended_to_front_frame_piece();
|
||||
color(frame_side_color) translate([frame_x/2-4, 0, -2.5]) mirror([1, 0, 0]) side_trapezoid_extended_to_front_frame_piece();
|
||||
color(frame_top_bottom_color) translate([-frame_x/2+4, 0, -2.5]) front_or_back_trapezoid_frame_piece();
|
||||
color(frame_top_bottom_color) translate([frame_x/2-4, 0, -2.5]) front_or_back_trapezoid_frame_piece();
|
||||
color(frame_top_bottom_color) translate([-frame_x/2+4, 0, -2.5]) rotate([180, 0, 0]) front_or_back_aux_and_neutrik_frame_piece();
|
||||
color(frame_top_bottom_color) translate([frame_x/2-4, 0, -2.5]) rotate([180, 180, 0]) front_or_back_aux_and_neutrik_frame_piece();
|
||||
color(bottom_panel_color) translate([-panel_x/2, 0, -5-frame_z/2+5]) panel();
|
||||
color(bottom_panel_color) translate([panel_x/2, 0, -5-frame_z/2+5]) panel();
|
||||
|
||||
/* color(top_deco_color) translate([0, 0, 3+frame_z/2-4]) dir_arc_plus_w_30mm_and_sega_2p_plus_one_decorative_plate_of_plates(); */
|
||||
color(top_deco_color) translate([0, 0, 3+frame_z/2-panel_z]) dir_arc_plus_w_30mm_and_sega_2p_plus_one_decorative_plate();
|
||||
color(top_deco_color) translate([0, 0, 3+frame_z/2-panel_z]) dir_arc_plus_w_30mm_and_sega_2p_nine_decorative_plate();
|
||||
color(top_deco_color) translate([-170, 20, 3+frame_z/2-panel_z]) lsx_nobi_dustwasher();
|
||||
color(top_deco_color) translate([panel_x-24, 30, 3+frame_z/2-panel_z]) button_24mm_decorative_plate();
|
||||
|
||||
@@ -5,9 +5,9 @@
|
||||
|
||||
include <parameters.scad>
|
||||
include <components.scad>
|
||||
use <frames/pieces/extended/front-or-back.scad>
|
||||
use <frames/pieces/extended/side-extended-to-bottom.scad>
|
||||
use <frames/pieces/extended/front-or-back-clean-for-extended-side-aux-and-neutrik.scad>
|
||||
use <frames/pieces/front-or-back-trapezoid.scad>
|
||||
use <frames/pieces/side-trapezoid-extended-to-front-trapezoid.scad>
|
||||
use <frames/pieces/front-or-back-aux-and-neutrik.scad>
|
||||
use <panels/inset/lever-and-dir_arc-plus-w-30mm-panel.scad>
|
||||
use <panels/inset/lever-and-sega-2p-6-button-panel-with-aux-with-mount.scad>
|
||||
use <misc/dustwasher-jlf.scad>
|
||||
@@ -19,10 +19,10 @@ frame_side_color = "#8E9089";
|
||||
top_deco_color = "#000000";
|
||||
|
||||
color(top_panel_color) translate([0, 0, frame_z/2-panel_z+0.01]) lever_and_sega_2p_6_button_panel_with_aux_with_mount();
|
||||
color(frame_side_color) translate([0, 0, -2.5]) extra_extended_left_or_right_frame_piece();
|
||||
color(frame_side_color) translate([0, 0, -2.5]) mirror([1, 0, 0]) extra_extended_left_or_right_frame_piece();
|
||||
color(frame_top_bottom_color) translate([0, 0, -2.5]) extended_front_or_back_frame_piece();
|
||||
color(frame_top_bottom_color) translate([0, 0, -2.5]) rotate([180, 0, 0]) front_or_back_aux_and_neutrik_box_frame_piece_for_extended_side();
|
||||
color(frame_side_color) translate([0, 0, -2.5]) side_trapezoid_extended_to_front_frame_piece();
|
||||
color(frame_side_color) translate([0, 0, -2.5]) mirror([1, 0, 0]) side_trapezoid_extended_to_front_frame_piece();
|
||||
color(frame_top_bottom_color) translate([0, 0, -2.5]) front_or_back_trapezoid_frame_piece();
|
||||
color(frame_top_bottom_color) translate([0, 0, -2.5]) rotate([180, 0, 0]) front_or_back_aux_and_neutrik_frame_piece();
|
||||
color(bottom_panel_color) translate([0, 0, -5-frame_z/2+5]) panel();
|
||||
|
||||
color(top_deco_color) translate([-65, 5, 3+frame_z/2-panel_z]) jlf_dustwasher();
|
||||
|
||||
@@ -5,15 +5,13 @@
|
||||
|
||||
include <parameters.scad>
|
||||
include <components.scad>
|
||||
use <frames/complete/left-frame.scad>
|
||||
use <frames/pieces/box/side.scad>
|
||||
use <frames/pieces/box/front-or-back.scad>
|
||||
use <frames/pieces/box/front-or-back-aux-and-neutrik.scad>
|
||||
use <frames/pieces/side.scad>
|
||||
use <frames/pieces/front-or-back.scad>
|
||||
use <frames/pieces/front-or-back-aux-and-neutrik.scad>
|
||||
use <panels/inset/lever-and-dir_arc-plus-w-30mm-panel.scad>
|
||||
use <panels/inset/sega-2p-plus-one-plus-control-panel-with-mount.scad>
|
||||
use <panels/inset/sega-2p-nine-plus-control-panel-with-mount.scad>
|
||||
use <misc/decorative-plate-24mm-button.scad>
|
||||
use <misc/decorative-plate-dir_arc-plus-w-30mm-and-sega-2p-plus-one.scad>
|
||||
use <misc/decorative-plate-dir_arc-plus-w-30mm-and-sega-2p-plus-one-plates.scad>
|
||||
use <misc/decorative-plate-dir_arc-plus-w-30mm-and-sega-2p-nine.scad>
|
||||
use <misc/dustwasher-lsx-nobi.scad>
|
||||
|
||||
panel_color = "red";
|
||||
@@ -21,15 +19,16 @@ base_color = "gray";
|
||||
top_deco_color = "white";
|
||||
|
||||
color(panel_color) translate([-panel_x/2, 0, frame_z/2-panel_z+0.01]) lever_and_dir_arc_w_30mm_panel();
|
||||
color(panel_color) translate([panel_x/2, 0, frame_z/2-panel_z+0.01]) sega_2p_plus_one_plus_control_panel_with_mount();
|
||||
color(base_color) translate([-frame_x/2+5, 0, -2.5]) left_frame();
|
||||
color(base_color) translate([panel_x/2, 0, -2.5]) rotate([0, 180, 0]) side_box_frame_piece();
|
||||
color(base_color) translate([panel_x/2, 0, -2.5]) front_or_back_box_frame_piece();
|
||||
color(base_color) translate([panel_x/2, 0, -2.5]) rotate([180, 180, 0]) front_or_back_aux_and_neutrik_box_frame_piece();
|
||||
color(panel_color) translate([panel_x/2, 0, frame_z/2-panel_z+0.01]) sega_2p_nine_plus_control_panel_with_mount();
|
||||
color(base_color) translate([panel_x/2, 0, -2.5]) rotate([0, 180, 0]) side_frame_piece();
|
||||
color(base_color) translate([-panel_x/2, 0, -2.5]) side_frame_piece();
|
||||
color(base_color) translate([panel_x/2, 0, -2.5]) front_or_back_frame_piece();
|
||||
color(base_color) translate([-panel_x/2, 0, -2.5]) front_or_back_frame_piece();
|
||||
color(base_color) translate([panel_x/2, 0, -2.5]) rotate([180, 180, 0]) front_or_back_aux_and_neutrik_frame_piece();
|
||||
color(base_color) translate([-panel_x/2, 0, -2.5]) rotate([180, 180, 0]) front_or_back_aux_and_neutrik_frame_piece();
|
||||
color(base_color) translate([-panel_x/2, 0, -5-frame_z/2+5]) panel();
|
||||
color(base_color) translate([panel_x/2, 0, -5-frame_z/2+5]) panel();
|
||||
|
||||
/* color(top_deco_color) translate([0, 0, 3+frame_z/2-4]) dir_arc_plus_w_30mm_and_sega_2p_plus_one_decorative_plate_of_plates(); */
|
||||
color(top_deco_color) translate([0, 0, 3+frame_z/2-panel_z]) dir_arc_plus_w_30mm_and_sega_2p_plus_one_decorative_plate();
|
||||
color(top_deco_color) translate([0, 0, 3+frame_z/2-panel_z]) dir_arc_plus_w_30mm_and_sega_2p_nine_decorative_plate();
|
||||
color(top_deco_color) translate([-170, 20, 3+frame_z/2-panel_z]) lsx_nobi_dustwasher();
|
||||
color(top_deco_color) translate([panel_x-24, 30, 3+frame_z/2-panel_z]) button_24mm_decorative_plate();
|
||||
|
||||
@@ -6,29 +6,29 @@
|
||||
include <parameters.scad>
|
||||
include <components.scad>
|
||||
use <frames/pieces/interconnect.scad>
|
||||
use <frames/pieces/box/side.scad>
|
||||
use <frames/pieces/box/front-or-back.scad>
|
||||
use <frames/pieces/box/front-or-back-aux-and-neutrik.scad>
|
||||
use <frames/pieces/side.scad>
|
||||
use <frames/pieces/front-or-back.scad>
|
||||
use <frames/pieces/front-or-back-aux-and-neutrik.scad>
|
||||
use <panels/overhang/left-lever-and-dir_arc-plus-w-30mm-panel.scad>
|
||||
use <panels/overhang/right-sega-2p-plus-one-plus-control-panel-with-mount.scad>
|
||||
use <panels/overhang/right-sega-2p-nine-plus-control-panel-with-mount.scad>
|
||||
use <panels/overhang/left-or-right-panel.scad>
|
||||
use <misc/decorative-plate-24mm-button.scad>
|
||||
use <misc/decorative-plate-dir_arc-plus-w-30mm-and-sega-2p-plus-one.scad>
|
||||
use <misc/decorative-plate-dir_arc-plus-w-30mm-and-sega-2p-nine.scad>
|
||||
use <misc/dustwasher-lsx-nobi.scad>
|
||||
|
||||
color("#C12E1F") translate([-panel_x/2-25, 0, frame_z/2+75]) lever_and_dir_arc_w_30mm_left_overhang_panel();
|
||||
color("#C12E1F") translate([panel_x/2+25, 0, frame_z/2+75]) sega_2p_plus_one_plus_control_right_overhang_panel_with_mount();
|
||||
color("black") translate([-frame_x/2+5-25, -55, -2.5]) front_or_back_box_frame_piece();
|
||||
color("black") rotate([0, 180, 0]) translate([-frame_x/2+5-25, -55, -2.5]) front_or_back_box_frame_piece();
|
||||
color("black") translate([-frame_x/2+5-50, 0, -2.5]) side_box_frame_piece();
|
||||
color("black") rotate([0, 180, 0]) translate([-frame_x/2+5-50, 0, -2.5]) side_box_frame_piece();
|
||||
color("black") rotate([180, 0, 0]) translate([-frame_x/2+5-25, -55, -2.5]) front_or_back_aux_and_neutrik_box_frame_piece();
|
||||
color("black") rotate([180, 0, 0]) rotate([0, 180, 0]) translate([-frame_x/2+5-25, -55, -2.5]) front_or_back_aux_and_neutrik_box_frame_piece();
|
||||
color("#C12E1F") translate([panel_x/2+25, 0, frame_z/2+75]) sega_2p_nine_plus_control_right_overhang_panel_with_mount();
|
||||
color("black") translate([-frame_x/2+5-25, -55, -2.5]) front_or_back_frame_piece();
|
||||
color("black") rotate([0, 180, 0]) translate([-frame_x/2+5-25, -55, -2.5]) front_or_back_frame_piece();
|
||||
color("black") translate([-frame_x/2+5-50, 0, -2.5]) side_frame_piece();
|
||||
color("black") rotate([0, 180, 0]) translate([-frame_x/2+5-50, 0, -2.5]) side_frame_piece();
|
||||
color("black") rotate([180, 0, 0]) translate([-frame_x/2+5-25, -55, -2.5]) front_or_back_aux_and_neutrik_frame_piece();
|
||||
color("black") rotate([180, 0, 0]) rotate([0, 180, 0]) translate([-frame_x/2+5-25, -55, -2.5]) front_or_back_aux_and_neutrik_frame_piece();
|
||||
color("black") rotate([0, 180, 0]) interconnect_frame_piece();
|
||||
color("#C12E1F") translate([-panel_x/2-25, 0, -5-frame_z/2-75]) left_or_right_overhang_panel();
|
||||
color("#C12E1F") mirror([0, 1, 0]) translate([panel_x/2+25, 0, -5-frame_z/2-75]) rotate([0, 0, 180])
|
||||
left_or_right_overhang_panel();
|
||||
|
||||
color("black") translate([0, 0, 3+frame_z/2+150]) dir_arc_plus_w_30mm_and_sega_2p_plus_one_decorative_plate();
|
||||
color("black") translate([0, 0, 3+frame_z/2+150]) dir_arc_plus_w_30mm_and_sega_2p_nine_decorative_plate();
|
||||
color("black") translate([-195, 25, 3+frame_z/2+150]) lsx_nobi_dustwasher();
|
||||
color("black") translate([panel_x, 25, 3+frame_z/2+150]) button_24mm_decorative_plate();
|
||||
|
||||
@@ -8,6 +8,15 @@ My preferred settings are 3 wall loops with 20% gyroid sparse infill. This gives
|
||||
strength against bowing forces, but something more default, like 2 wall loops, 15% grid sparse infill, is fine and does
|
||||
not lead to a weak enclosure.
|
||||
|
||||
### Supports and Positioning
|
||||
|
||||
All of the parts are designed to be printed outside-face-down. The bevels are at an angle (45 degrees) that should print
|
||||
fine with no supports. Make sure everything is aligned properly on your plate so that the flat face you will look at the
|
||||
most is on the bottom.
|
||||
|
||||
The only exception to this is the interconnect piece(s), which are not visible and need a support to print. Maybe one
|
||||
day I'll rejigger these.
|
||||
|
||||
### Working With Flatness
|
||||
|
||||
A lot of the pieces are long and flat, so I recommend really dialing in your printer settings. The frame pieces make
|
||||
@@ -20,15 +29,36 @@ uniform lines that create reflection patterns on long, flat surfaces. This can b
|
||||
panels and their decorative plates, since they're what you're looking at 90% of the time, and the holes break up a
|
||||
perfect pattern, making the long lines stand out even more.
|
||||
|
||||
* **Top panels:** using a non-uniform pattern reduces if not eliminates the problem of the surface catching the light,
|
||||
but for some patterns, it may come at the expense of time. Other patterns may improve beyond monotonic, but hilbert
|
||||
curve seems to be the gold standard.
|
||||
* **Circle-centric decorative plates:** don't use complex patterns like Archimedean chords on decorative plates, as they
|
||||
seem to have issues with filling curves and you still want to try to maximize contact with walls. Concentric is great
|
||||
here if you dial it in.
|
||||
Some specific parts are worth some additional notes:
|
||||
|
||||
The concentric pattern is a good default and prints awesome parts, with the only exception being the top panels, which
|
||||
benefit from using a Hilbert curve initial layer pattern instead of concentric.
|
||||
* **Top panels:** using a non-uniform pattern reduces if not eliminates the problem of the surface catching the light,
|
||||
but for some patterns, it may come at the expense of time.
|
||||
* **Avoid:** monotonic.
|
||||
* **Good for the time:** Archimedean chords create the look of a circular ripple radiating out the center, and
|
||||
depending on the material, you may not even notice it much, so it's a pretty good look/speed balance.
|
||||
* **Great if you can wait:** hilbert curve leaves no discernable pattern on most materials, but some high gloss,
|
||||
high contrast materials may show the winding pattern at some angles --- consider Archimedean chords for these.
|
||||
* **Circle-centric decorative plates:** simple ones could be fine in whatever, but the ones for action buttons end up
|
||||
having lots of weird interaction points.
|
||||
* **Avoid:** none; monotonic doesn't look *good*, but the plates don't have enough surface area for the pattern to
|
||||
stand out too much.
|
||||
* **Decent:** concentric is generally good, but you can get some pitting when the pattern radiating away from
|
||||
buttons collides with other patterns, because none of the geometry lines up well.
|
||||
* **Great:** Archimedean chords, just crank up the infill/wall overlap to avoid pits on the edges.
|
||||
* **Frame walls with Neutrik or aux button cutouts:** a reduced but similar problem with the action button decorative
|
||||
plates, the circles near each other create weird interactions with the walls.
|
||||
* **Avoid:** concentric, again, has problems with pitting where geometries clash.
|
||||
* **Decent:** monotonic is pretty decent here, and you probably won't look at the sides too much, so maybe it
|
||||
doesn't bother you.
|
||||
* **Great:** Archimedean chords again, with the same infill/wall overlap as decorative plates.
|
||||
* **Flush frame walls:** you can pretty much do whatever you like here.
|
||||
* **Great:** concentric produces an interesting pattern and you won't have collision problems in a rectangle.
|
||||
* **Essentially great:** Archimedean chords yet again, you may just not like the pattern as much as the end result
|
||||
of concentric.
|
||||
|
||||
The Archimedean chord pattern is a good default and prints awesome parts, with the only exception being the top panels,
|
||||
which benefit from using a Hilbert curve initial layer pattern instead, though you may be happy enough with Archimedean
|
||||
chord.
|
||||
|
||||
## Materials
|
||||
|
||||
|
||||
@@ -11,6 +11,10 @@ module m4_hole_countersink() {
|
||||
cylinder(r1=m4_bolt_radius, r2=m4_bolt_countersink_radius, h=3.2, $fn=50, center=true);
|
||||
}
|
||||
|
||||
module m6_hole() {
|
||||
cylinder(r=m6_bolt_radius, h=100, $fn=50, center=true);
|
||||
}
|
||||
|
||||
module panel_holes() {
|
||||
// holes for mount bolts
|
||||
translate([panel_to_frame_point_x, panel_to_frame_point_y, 0]) m4_hole();
|
||||
@@ -80,7 +84,7 @@ module rocker_20mm_mount() {
|
||||
// space for a neutrik D mount or 24mm button --- Z is meant to leave some lip now that frames
|
||||
// are primarily printed on their side
|
||||
module frame_cutout() {
|
||||
cube([30.5, 8, frame_z-(panel_z*3)], center=true);
|
||||
cube([35, 8, frame_z-(panel_z*3)], center=true);
|
||||
}
|
||||
|
||||
// bank of three 24mm buttons, commonly on a frame face
|
||||
@@ -90,6 +94,12 @@ module aux_control_three_button_cluster() {
|
||||
translate([37, 0, 0]) button_24mm_hole();
|
||||
}
|
||||
|
||||
module aux_control_three_button_tight_cluster() {
|
||||
translate([-32, 0, 0]) button_24mm_hole();
|
||||
translate([0, 0, 0]) button_24mm_hole();
|
||||
translate([32, 0, 0]) button_24mm_hole();
|
||||
}
|
||||
|
||||
module m2_mount_post() {
|
||||
difference() {
|
||||
cylinder(r=m2_screw_selftap_radius*2.25, h=3, $fn=6, center=true);
|
||||
@@ -264,13 +274,13 @@ module frame_solid() {
|
||||
];
|
||||
hull() {
|
||||
for (p = top_points) {
|
||||
translate(p) cylinder(r=2, h=frame_bevel_height, center=true);
|
||||
translate(p) cylinder(r=2, h=frame_bevel_height, center=true, $fn=4);
|
||||
}
|
||||
for (p = base_points) {
|
||||
translate(p) cylinder(r=2, h=frame_z-(frame_bevel_height*2), center=true);
|
||||
translate(p) cylinder(r=2, h=frame_z-(frame_bevel_height*2), center=true, $fn=4);
|
||||
}
|
||||
for (p = bottom_points) {
|
||||
translate(p) cylinder(r=2, h=frame_bevel_height, center=true);
|
||||
translate(p) cylinder(r=2, h=frame_bevel_height, center=true, $fn=4);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -396,24 +406,24 @@ module dir_arc_plus_w_24mm_8_button() {
|
||||
|
||||
module dir_arc_30mm_thumb_button() {
|
||||
// just my guesstimate on this one, but note that this is the same position as sega 2p (just mirrored)
|
||||
translate([(panel_x/2)-28.06, (-panel_y/2)+62, 0]) button_30mm_hole();
|
||||
translate([(panel_x/2)-sega_2p_column_1_left_panel_edge_offset, (-panel_y/2)+62, 0]) button_30mm_hole();
|
||||
}
|
||||
|
||||
module dir_arc_30mm_finger_buttons() {
|
||||
translate([0, 57.2, 0]) dir_arc_30mm_thumb_button();
|
||||
translate([-33.8, 57.2+12.9, 0]) dir_arc_30mm_thumb_button();
|
||||
translate([-33.8-34.8, 57.2+12.9, 0]) dir_arc_30mm_thumb_button();
|
||||
translate([0, dir_arc_30mm_row_2_offset, 0]) dir_arc_30mm_thumb_button();
|
||||
translate([-dir_arc_30mm_column_2_offset, dir_arc_30mm_row_3_offset, 0]) dir_arc_30mm_thumb_button();
|
||||
translate([-dir_arc_30mm_column_3_offset, dir_arc_30mm_row_3_offset, 0]) dir_arc_30mm_thumb_button();
|
||||
}
|
||||
|
||||
module dir_arc_w_30mm() {
|
||||
dir_arc_30mm_thumb_button();
|
||||
dir_arc_30mm_finger_buttons();
|
||||
translate([-26.8, 57.2+12.9+34.5, 0]) dir_arc_30mm_thumb_button();
|
||||
translate([-26.8, dir_arc_w_30mm_row_4_offset, 0]) dir_arc_30mm_thumb_button();
|
||||
}
|
||||
|
||||
module dir_arc_w_30mm_plus_one() {
|
||||
dir_arc_w_30mm();
|
||||
translate([-33.8-34.8-33.8, 57.2, 0]) dir_arc_30mm_thumb_button();
|
||||
translate([-dir_arc_30mm_column_3_offset-33.8, dir_arc_30mm_row_2_offset, 0]) dir_arc_30mm_thumb_button();
|
||||
}
|
||||
|
||||
// Namco Noir (right hand)
|
||||
@@ -440,31 +450,38 @@ module noir_plus_one() {
|
||||
// Sega Astro City 2P (right hand)
|
||||
|
||||
module sega_2p_p1() {
|
||||
translate([-panel_x/2, -panel_y/2, 0]) translate([28.06, 140, 0]) button_30mm_hole();
|
||||
translate([-panel_x/2, -panel_y/2, 0]) translate([sega_2p_column_1_left_panel_edge_offset, 140, 0])
|
||||
button_30mm_hole();
|
||||
}
|
||||
|
||||
module sega_2p_6_button() {
|
||||
// via slagcoin
|
||||
sega_2p_p1();
|
||||
translate([30.5, 11+9, 0]) sega_2p_p1();
|
||||
translate([30.5+36, 11+9, 0]) sega_2p_p1();
|
||||
translate([sega_2p_column_2_offset, 11+9, 0]) sega_2p_p1();
|
||||
translate([sega_2p_column_3_offset, 11+9, 0]) sega_2p_p1();
|
||||
translate([0, -19-9-11, 0]) sega_2p_p1();
|
||||
translate([30.5, -19, 0]) sega_2p_p1();
|
||||
translate([30.5+36, -19, 0]) sega_2p_p1();
|
||||
translate([sega_2p_column_2_offset, -19, 0]) sega_2p_p1();
|
||||
translate([sega_2p_column_3_offset, -19, 0]) sega_2p_p1();
|
||||
}
|
||||
|
||||
module sega_2p() {
|
||||
sega_2p_6_button();
|
||||
translate([30.5+36+36, 11, 0]) sega_2p_p1();
|
||||
translate([30.5+36+36, -19-9, 0]) sega_2p_p1();
|
||||
translate([sega_2p_column_4_offset, 11, 0]) sega_2p_p1();
|
||||
translate([sega_2p_column_4_offset, -19-9, 0]) sega_2p_p1();
|
||||
}
|
||||
|
||||
module sega_2p_plus_one() {
|
||||
module sega_2p_nine() {
|
||||
sega_2p();
|
||||
// just my guesstimate on this one
|
||||
translate([0, -19-9-11-19-9-11, 0]) sega_2p_p1();
|
||||
}
|
||||
|
||||
module sega_2p_eleven() {
|
||||
sega_2p_nine();
|
||||
translate([sega_2p_column_5_offset, 0, 0]) sega_2p_p1();
|
||||
translate([sega_2p_column_5_offset, -19-9-11, 0]) sega_2p_p1();
|
||||
}
|
||||
|
||||
module shiokenstar() {
|
||||
translate([-172, 32, 0]) dir_arc_24mm_directionals();
|
||||
sega_2p();
|
||||
|
||||
38
src/extras/bss-ae/README.md
Normal file
38
src/extras/bss-ae/README.md
Normal file
@@ -0,0 +1,38 @@
|
||||
# BSS Arcade Edition
|
||||
|
||||
Pieces for mounting to a Qanba 2009 in order to create the Buildable Stick System - Arcade Edition.
|
||||
|
||||
## Pieces
|
||||
|
||||
* 4 `interconnect-x` --- creating the internal support for joining two rows of panels
|
||||
* 6 `frames/pieces/interconnect` --- (core project) the standard piece for joining two+ columns of panels
|
||||
* 4 `extended-side-no-back` --- the extended side pieces, flush on the back to connect to each other
|
||||
* 4 `frames/pieces/extended/front-or-back` --- (core project) the front extended piece
|
||||
* 2 `extended-back` --- a small piece that fits into the Qanba 2009 "lip" for running cables
|
||||
* 1 `extended-back-left-mount`
|
||||
* 1 `extended-back-right-mount` --- extended back pieces that can be mounted to the Qanba 2009 base
|
||||
* 1 `panel-front-left-mount`
|
||||
* 1 `panel-front-right-mount` --- blank panels that can be mounted to the Qanba 2009 base
|
||||
* 6 `panels/inset/panel` --- the rest of the bottom panels
|
||||
* 4 `panels/inset/` panels of your choice for the front controls
|
||||
* 2 `panel-three-aux-buttons` --- for aux controls in the back row
|
||||
* 2 `panel-three-aux-buttons-and-rocker-hole` --- for aux controls and the wired rocker in the back row
|
||||
* 4 `decorative-plate-aux-control-tight-three-button-cluster` --- for decorating the aux control clusters
|
||||
* 4 `src/misc/` decorative plates of your choice for the front controls, and similar miscellany
|
||||
* 4 `mount-spacer` --- making a flush mount between the enclosure and the base
|
||||
|
||||
## Hardware
|
||||
|
||||
* 32 45mm M4 hex brass standoffs (or equivalent) for each panel/frame compartment
|
||||
* 64 8-12mm M4 countersunk hex bolts for attaching panels to the compartments
|
||||
* 4 8-12mm M3 hex bolts and 4 M3 flange nuts for attaching rocker switches to the back panels
|
||||
* 4 40mm M6 bolts for connecting the enclosure to the base
|
||||
* 4 M6 flange nuts
|
||||
|
||||
## Components
|
||||
|
||||
* 2 controller boards, e.g. the RP2040 Advanced Breakout Board
|
||||
* buttons and/or levers as desired
|
||||
* necessary wiring
|
||||
|
||||
For the rest of the build (e.g. mounting a level to a panel), see the core README.
|
||||
@@ -0,0 +1,24 @@
|
||||
/* Decorative plate for aux buttons.
|
||||
*
|
||||
* SPDX-FileCopyrightText: © 2024 Brian S. Stephan <bss@incorporeal.org>
|
||||
* SPDX-License-Identifier: GPL-3.0-or-later
|
||||
*/
|
||||
|
||||
include <parameters.scad>
|
||||
decorative_radius_scale = 1.5;
|
||||
jumbo_decorative_radius_scale = 0;
|
||||
include <components.scad>
|
||||
|
||||
module aux_control_three_button_tight_cluster_decorative_plate() {
|
||||
difference() {
|
||||
// get a 2mm slice of the bigger button cylinders
|
||||
translate([0, 0, -25]) hull() aux_control_three_button_tight_cluster();
|
||||
// keep a thin slice
|
||||
translate([0, 0, -100]) cube([500, 500, 198], center=true);
|
||||
translate([0, 0, 100]) cube([500, 500, 198], center=true);
|
||||
// cut out the normal holes
|
||||
translate([0, 0, -1]) aux_control_three_button_tight_cluster();
|
||||
}
|
||||
}
|
||||
|
||||
aux_control_three_button_tight_cluster_decorative_plate();
|
||||
26
src/extras/bss-ae/extended-back-left-mount.scad
Normal file
26
src/extras/bss-ae/extended-back-left-mount.scad
Normal file
@@ -0,0 +1,26 @@
|
||||
/* A back piece of the enclosure, with a mounting hole.
|
||||
*
|
||||
* SPDX-FileCopyrightText: © 2024 Brian S. Stephan <bss@incorporeal.org>
|
||||
* SPDX-License-Identifier: GPL-3.0-or-later
|
||||
*/
|
||||
|
||||
include <parameters.scad>
|
||||
include <components.scad>
|
||||
use <extended-back.scad>
|
||||
|
||||
// X: inner post to post (inclusive) is approx. 428.625mm, so half that, minus half the post itself
|
||||
// (41.28mm) is how much in from a normal panel to put the M6 mounting hole
|
||||
// Y: eyeballed it to 30mm
|
||||
mount_hole_x = (panel_x / 2) - (panel_x - ((428.625 / 2) - (41.28 / 2)));
|
||||
mount_hole_y = (panel_y / 2) + 30;
|
||||
|
||||
module left_mount_extended_back() {
|
||||
difference() {
|
||||
extended_back();
|
||||
translate([mount_hole_x, -mount_hole_y, -30]) m6_hole();
|
||||
// punch out the back for cables
|
||||
cube([frame_x-70, frame_y+160, frame_z-20], center=true);
|
||||
}
|
||||
}
|
||||
|
||||
left_mount_extended_back();
|
||||
15
src/extras/bss-ae/extended-back-right-mount.scad
Normal file
15
src/extras/bss-ae/extended-back-right-mount.scad
Normal file
@@ -0,0 +1,15 @@
|
||||
/* A back piece of the enclosure, with a mounting hole.
|
||||
*
|
||||
* SPDX-FileCopyrightText: © 2024 Brian S. Stephan <bss@incorporeal.org>
|
||||
* SPDX-License-Identifier: GPL-3.0-or-later
|
||||
*/
|
||||
|
||||
include <parameters.scad>
|
||||
include <components.scad>
|
||||
use <extended-back-left-mount.scad>
|
||||
|
||||
module right_mount_extended_back() {
|
||||
mirror([1, 0, 0]) left_mount_extended_back();
|
||||
}
|
||||
|
||||
right_mount_extended_back();
|
||||
30
src/extras/bss-ae/extended-back.scad
Normal file
30
src/extras/bss-ae/extended-back.scad
Normal file
@@ -0,0 +1,30 @@
|
||||
/* A back piece extended the rest of the depth of the base.
|
||||
*
|
||||
* SPDX-FileCopyrightText: © 2024 Brian S. Stephan <bss@incorporeal.org>
|
||||
* SPDX-License-Identifier: GPL-3.0-or-later
|
||||
*/
|
||||
|
||||
include <parameters.scad>
|
||||
include <components.scad>
|
||||
use <frames/pieces/front-or-back-trapezoid.scad>
|
||||
|
||||
module back_piece_extension() {
|
||||
// combine the original wall with a copy to "pull" the wall out
|
||||
hull() {
|
||||
linear_extrude(height=80) bottom_piece_wall();
|
||||
linear_extrude(height=(frame_wall-frame_bevel_height)) bottom_piece_wall();
|
||||
}
|
||||
}
|
||||
|
||||
module extended_back() {
|
||||
difference() {
|
||||
union() {
|
||||
clean_front_or_back();
|
||||
translate([0, -frame_y/2+frame_wall, 0]) rotate([90, 0, 0]) back_piece_extension();
|
||||
}
|
||||
cube([frame_x-60, frame_y+160-10, frame_z-10], center=true);
|
||||
translate([0, -frame_y/2-35, 0]) cube([frame_x-20, 70, frame_z-10], center=true);
|
||||
}
|
||||
}
|
||||
|
||||
extended_back();
|
||||
60
src/extras/bss-ae/extended-side-no-back.scad
Normal file
60
src/extras/bss-ae/extended-side-no-back.scad
Normal file
@@ -0,0 +1,60 @@
|
||||
/* Create an extended side that is flush on the back to lay against another side.
|
||||
*
|
||||
* SPDX-FileCopyrightText: © 2024 Brian S. Stephan <bss@incorporeal.org>
|
||||
* SPDX-License-Identifier: GPL-3.0-or-later
|
||||
*/
|
||||
|
||||
include <parameters.scad>
|
||||
include <components.scad>
|
||||
use <frames/complete/left-frame.scad>
|
||||
use <frames/pieces/side.scad>
|
||||
use <frames/pieces/front-or-back-trapezoid.scad>
|
||||
|
||||
module side_frame_piece_wall() {
|
||||
// this doesn't use the side_frame_piece because of the 45 degree angle geometry
|
||||
// not creating a clean thing to cut, so we just take the whole wall and use that
|
||||
projection(cut=true) rotate([0, 90, 0]) translate([frame_x/2-frame_wall-(frame_bevel_height/2), 0, 0])
|
||||
left_frame();
|
||||
}
|
||||
|
||||
module side_and_bottom_frame_piece_wall() {
|
||||
// get a slice of the pieces, to use it in extruding
|
||||
// this doesn't use the side_frame_piece because of the 45 degree angle geometry
|
||||
// not creating a clean thing to cut, so we just take the whole wall and use that
|
||||
side_frame_piece_wall();
|
||||
projection(cut=true) translate([0, -frame_y/2+frame_wall, 0]) rotate([90, 90, 0]) bottom_piece_extension();
|
||||
}
|
||||
|
||||
module side_and_bottom_frame_piece_extension() {
|
||||
// combine the original with a shrunken piece to "pull" the wall out
|
||||
hull() {
|
||||
linear_extrude(height=frame_extension_y) scale([0.5, 0.90, 1]) side_and_bottom_frame_piece_wall();
|
||||
linear_extrude(height=frame_extension_y) scale([0.5, 1, 1])
|
||||
difference() {
|
||||
side_frame_piece_wall();
|
||||
// remove the front piece so it doesn't interfere with the front extend
|
||||
translate([0, -frame_y/2, 0]) square([frame_x, frame_y], center=true);
|
||||
}
|
||||
linear_extrude(height=frame_bevel_height) side_and_bottom_frame_piece_wall();
|
||||
}
|
||||
}
|
||||
|
||||
module extra_extended_left_or_right_frame_piece() {
|
||||
difference() {
|
||||
union() {
|
||||
difference() {
|
||||
side_frame_piece();
|
||||
// chop off the old edge which is getting replaced with the extension
|
||||
translate([-frame_x/2+frame_bevel_height/2, 0, 0])
|
||||
cube([frame_bevel_height, frame_y, frame_z], center=true);
|
||||
}
|
||||
translate([-frame_x/2+frame_bevel_height*2, 0, 0])
|
||||
rotate([0, -90, 0]) side_and_bottom_frame_piece_extension();
|
||||
}
|
||||
// minus the back piece where the wall would be, since there is no wall and the pieces and panels
|
||||
// go flush against one another
|
||||
translate([0, frame_y/2-(frame_wall/2), 0]) cube([frame_x*2, frame_wall, frame_z], center=true);
|
||||
}
|
||||
}
|
||||
|
||||
extra_extended_left_or_right_frame_piece();
|
||||
30
src/extras/bss-ae/interconnect-x.scad
Normal file
30
src/extras/bss-ae/interconnect-x.scad
Normal file
@@ -0,0 +1,30 @@
|
||||
/* Interconnect frames along the x-axis (the longer side)
|
||||
*
|
||||
* SPDX-FileCopyrightText: © 2024 Brian S. Stephan <bss@incorporeal.org>
|
||||
* SPDX-License-Identifier: GPL-3.0-or-later
|
||||
*/
|
||||
|
||||
include <parameters.scad>
|
||||
include <components.scad>
|
||||
use <frames/pieces/front-or-back.scad>
|
||||
|
||||
module interconnect_frame_half_piece() {
|
||||
translate([0, frame_y/2-frame_wall, 0]) difference() {
|
||||
front_or_back_frame_piece();
|
||||
translate([0, (-frame_y+frame_wall)/2-panel_overhang_amount, 0])
|
||||
cube([overhang_panel_x, frame_wall+panel_overhang_amount*2, frame_z], center=true);
|
||||
}
|
||||
}
|
||||
|
||||
module interconnect_frame_piece() {
|
||||
difference() {
|
||||
union() {
|
||||
// slight translate is to make this a 2-manifold in OpenSCAD
|
||||
translate([0, -0.01, 0]) interconnect_frame_half_piece();
|
||||
mirror([0, 1, 0]) interconnect_frame_half_piece();
|
||||
}
|
||||
rotate([0, 0, 90]) translate([-frame_y/2, 0, 0]) frame_cable_routing_hole();
|
||||
}
|
||||
}
|
||||
|
||||
interconnect_frame_piece();
|
||||
17
src/extras/bss-ae/mount-spacer.scad
Normal file
17
src/extras/bss-ae/mount-spacer.scad
Normal file
@@ -0,0 +1,17 @@
|
||||
/* Just a simple washer to go between the frame post and the arcade enclosure.
|
||||
*
|
||||
* SPDX-FileCopyrightText: © 2024 Brian S. Stephan <bss@incorporeal.org>
|
||||
* SPDX-License-Identifier: GPL-3.0-or-later
|
||||
*/
|
||||
|
||||
include <parameters.scad>
|
||||
include <components.scad>
|
||||
|
||||
module mount_spacer() {
|
||||
difference() {
|
||||
cylinder(r=25, h=1.25, $fn=50, center=true);
|
||||
m6_hole();
|
||||
}
|
||||
}
|
||||
|
||||
mount_spacer();
|
||||
24
src/extras/bss-ae/panel-front-left-mount.scad
Normal file
24
src/extras/bss-ae/panel-front-left-mount.scad
Normal file
@@ -0,0 +1,24 @@
|
||||
/* A panel with a mount point for the front left of the enclosure.
|
||||
*
|
||||
* SPDX-FileCopyrightText: © 2024 Brian S. Stephan <bss@incorporeal.org>
|
||||
* SPDX-License-Identifier: GPL-3.0-or-later
|
||||
*/
|
||||
|
||||
include <parameters.scad>
|
||||
include <components.scad>
|
||||
use <panels/inset/panel.scad>
|
||||
|
||||
// X: inner post to post (inclusive) is approx. 428.625mm, so half that, minus half the post itself
|
||||
// (41.28mm) is how much in from a normal panel to put the M6 mounting hole
|
||||
// Y: eyeballed it to 2": 50.80mm
|
||||
mount_hole_x = (panel_x / 2) - (panel_x - ((428.625 / 2) - (41.28 / 2)));
|
||||
mount_hole_y = (panel_y / 2) - 50.80;
|
||||
|
||||
module front_left_mount_panel() {
|
||||
difference() {
|
||||
panel();
|
||||
translate([-mount_hole_x, -mount_hole_y, 0]) m6_hole();
|
||||
}
|
||||
}
|
||||
|
||||
front_left_mount_panel();
|
||||
14
src/extras/bss-ae/panel-front-right-mount.scad
Normal file
14
src/extras/bss-ae/panel-front-right-mount.scad
Normal file
@@ -0,0 +1,14 @@
|
||||
/*
|
||||
* SPDX-FileCopyrightText: © 2024 Brian S. Stephan <bss@incorporeal.org>
|
||||
* SPDX-License-Identifier: GPL-3.0-or-later
|
||||
*/
|
||||
|
||||
include <parameters.scad>
|
||||
include <components.scad>
|
||||
use <panel-front-left-mount.scad>
|
||||
|
||||
module front_right_mount_panel() {
|
||||
mirror([1, 0, 0]) front_left_mount_panel();
|
||||
}
|
||||
|
||||
front_right_mount_panel();
|
||||
@@ -0,0 +1,18 @@
|
||||
/* A panel for mounting a couple aux buttons in a out of the way spot.
|
||||
*
|
||||
* SPDX-FileCopyrightText: © 2024 Brian S. Stephan <bss@incorporeal.org>
|
||||
* SPDX-License-Identifier: GPL-3.0-or-later
|
||||
*/
|
||||
|
||||
include <parameters.scad>
|
||||
include <components.scad>
|
||||
|
||||
module three_aux_button_and_20mm_panel() {
|
||||
difference() {
|
||||
panel();
|
||||
translate([0, -70, 0]) aux_control_three_button_tight_cluster();
|
||||
translate([0, frame_y/2-30, 0]) rotate([180, 0, 0]) neutrik_d_mount();
|
||||
}
|
||||
}
|
||||
|
||||
three_aux_button_and_20mm_panel();
|
||||
17
src/extras/bss-ae/panel-three-aux-buttons.scad
Normal file
17
src/extras/bss-ae/panel-three-aux-buttons.scad
Normal file
@@ -0,0 +1,17 @@
|
||||
/* A panel for mounting a couple aux buttons in a out of the way spot.
|
||||
*
|
||||
* SPDX-FileCopyrightText: © 2024 Brian S. Stephan <bss@incorporeal.org>
|
||||
* SPDX-License-Identifier: GPL-3.0-or-later
|
||||
*/
|
||||
|
||||
include <parameters.scad>
|
||||
include <components.scad>
|
||||
|
||||
module three_aux_button_panel() {
|
||||
difference() {
|
||||
panel();
|
||||
translate([0, -70, 0]) aux_control_three_button_tight_cluster();
|
||||
}
|
||||
}
|
||||
|
||||
three_aux_button_panel();
|
||||
@@ -1,31 +0,0 @@
|
||||
/*
|
||||
* SPDX-FileCopyrightText: © 2024 Brian S. Stephan <bss@incorporeal.org>
|
||||
* SPDX-License-Identifier: GPL-3.0-or-later
|
||||
*/
|
||||
|
||||
include <parameters.scad>
|
||||
include <components.scad>
|
||||
use <front-or-back.scad>
|
||||
use <front-or-back-inner-wall.scad>
|
||||
|
||||
module backslashes() {
|
||||
translate([-60, -(frame_y-frame_wall)/2, 0]) slash_cutout();
|
||||
translate([-40, -(frame_y-frame_wall)/2, 0]) slash_cutout();
|
||||
translate([-20, -(frame_y-frame_wall)/2, 0]) slash_cutout();
|
||||
translate([0, -(frame_y-frame_wall)/2, 0]) slash_cutout();
|
||||
translate([20, -(frame_y-frame_wall)/2, 0]) slash_cutout();
|
||||
translate([40, -(frame_y-frame_wall)/2, 0]) slash_cutout();
|
||||
translate([60, -(frame_y-frame_wall)/2, 0]) slash_cutout();
|
||||
}
|
||||
|
||||
module backslashes_windowed_front_or_back_box_frame_piece() {
|
||||
difference() {
|
||||
front_or_back_box_frame_piece();
|
||||
// subtract slashes from the frame wall
|
||||
backslashes();
|
||||
// subtract the inner wall area that will be provided by the other piece
|
||||
front_or_back_inner_wall_frame_piece();
|
||||
}
|
||||
}
|
||||
|
||||
backslashes_windowed_front_or_back_box_frame_piece();
|
||||
@@ -1,23 +0,0 @@
|
||||
/*
|
||||
* SPDX-FileCopyrightText: © 2024 Brian S. Stephan <bss@incorporeal.org>
|
||||
* SPDX-License-Identifier: GPL-3.0-or-later
|
||||
*/
|
||||
|
||||
include <parameters.scad>
|
||||
include <components.scad>
|
||||
use <front-or-back.scad>
|
||||
use <front-or-back-inner-wall.scad>
|
||||
|
||||
module windowed_front_or_back_box_frame_piece() {
|
||||
difference() {
|
||||
front_or_back_box_frame_piece();
|
||||
// subtract frame wall window
|
||||
translate([0, -frame_y/2, 0])
|
||||
cube([frame_x-frame_mount_column_width*3.5, (frame_wall+panel_support_width)*2,
|
||||
frame_z-panel_z*3], center=true);
|
||||
// subtract the inner wall area that will be provided by the other piece
|
||||
front_or_back_inner_wall_frame_piece();
|
||||
}
|
||||
}
|
||||
|
||||
windowed_front_or_back_box_frame_piece();
|
||||
@@ -1,29 +0,0 @@
|
||||
/*
|
||||
* SPDX-FileCopyrightText: © 2024 Brian S. Stephan <bss@incorporeal.org>
|
||||
* SPDX-License-Identifier: GPL-3.0-or-later
|
||||
*/
|
||||
|
||||
include <parameters.scad>
|
||||
include <components.scad>
|
||||
use <side.scad>
|
||||
use <side-inner-wall.scad>
|
||||
|
||||
module backslashes() {
|
||||
translate([-(frame_x-frame_wall)/2, -40, 0]) rotate([0, 0, -90]) slash_cutout();
|
||||
translate([-(frame_x-frame_wall)/2, -20, 0]) rotate([0, 0, -90]) slash_cutout();
|
||||
translate([-(frame_x-frame_wall)/2, 0, 0]) rotate([0, 0, -90]) slash_cutout();
|
||||
translate([-(frame_x-frame_wall)/2, 20, 0]) rotate([0, 0, -90]) slash_cutout();
|
||||
translate([-(frame_x-frame_wall)/2, 40, 0]) rotate([0, 0, -90]) slash_cutout();
|
||||
}
|
||||
|
||||
module backslashes_windowed_side_box_frame_piece() {
|
||||
difference() {
|
||||
side_box_frame_piece();
|
||||
// subtract slashes from the frame wall
|
||||
backslashes();
|
||||
// subtract the inner wall area that will be provided by the other piece
|
||||
side_inner_wall_frame_piece();
|
||||
}
|
||||
}
|
||||
|
||||
backslashes_windowed_side_box_frame_piece();
|
||||
@@ -1,28 +0,0 @@
|
||||
/*
|
||||
* SPDX-FileCopyrightText: © 2024 Brian S. Stephan <bss@incorporeal.org>
|
||||
* SPDX-License-Identifier: GPL-3.0-or-later
|
||||
*/
|
||||
|
||||
include <parameters.scad>
|
||||
include <components.scad>
|
||||
use <front-or-back-clean-for-extended-side.scad>
|
||||
|
||||
module front_or_back_aux_and_neutrik_box_frame_piece_for_extended_side() {
|
||||
difference() {
|
||||
front_or_back_box_frame_piece_for_extended_side();
|
||||
|
||||
// aux button holes
|
||||
translate([-35.25, -101.5, 0]) rotate([90, 0, 0]) aux_control_three_button_cluster();
|
||||
translate([-35.25, -(frame_y/2)+neutrik_panel_thickness+4, 0]) frame_cutout();
|
||||
translate([-72.25, -(frame_y/2)+neutrik_panel_thickness+4, 0]) frame_cutout();
|
||||
translate([2, -(frame_y/2)+neutrik_panel_thickness+4, 0]) frame_cutout();
|
||||
|
||||
// neutrix button hole
|
||||
translate([frame_center_to_neutrik, -(frame_y/2)+neutrik_panel_thickness, 0])
|
||||
rotate([270, 0, 0]) neutrik_d_mount();
|
||||
translate([frame_center_to_neutrik, -(frame_y/2)+neutrik_panel_thickness+4, 0])
|
||||
frame_cutout();
|
||||
}
|
||||
}
|
||||
|
||||
front_or_back_aux_and_neutrik_box_frame_piece_for_extended_side();
|
||||
@@ -1,18 +0,0 @@
|
||||
/*
|
||||
* SPDX-FileCopyrightText: © 2024 Brian S. Stephan <bss@incorporeal.org>
|
||||
* SPDX-License-Identifier: GPL-3.0-or-later
|
||||
*/
|
||||
|
||||
include <parameters.scad>
|
||||
include <components.scad>
|
||||
use <frames/pieces/box/front-or-back.scad>
|
||||
|
||||
module front_or_back_box_frame_piece_for_extended_side() {
|
||||
difference() {
|
||||
front_or_back_box_frame_piece();
|
||||
// ...minus the frame wall and lip on the left
|
||||
translate([-frame_x/2+frame_wall/2, 0, 0]) cube([frame_wall, frame_y, frame_z], center=true);
|
||||
}
|
||||
}
|
||||
|
||||
front_or_back_box_frame_piece_for_extended_side();
|
||||
@@ -7,9 +7,9 @@ include <parameters.scad>
|
||||
include <components.scad>
|
||||
use <front-or-back.scad>
|
||||
|
||||
module front_or_back_aux_and_neutrik_box_frame_piece() {
|
||||
module front_or_back_aux_and_neutrik_frame_piece() {
|
||||
difference() {
|
||||
front_or_back_box_frame_piece();
|
||||
front_or_back_frame_piece();
|
||||
|
||||
// aux button holes
|
||||
translate([-35.25, -101.5, 0]) rotate([90, 0, 0]) aux_control_three_button_cluster();
|
||||
@@ -25,4 +25,4 @@ module front_or_back_aux_and_neutrik_box_frame_piece() {
|
||||
}
|
||||
}
|
||||
|
||||
front_or_back_aux_and_neutrik_box_frame_piece();
|
||||
front_or_back_aux_and_neutrik_frame_piece();
|
||||
@@ -15,9 +15,10 @@ module mount_column_cutout() {
|
||||
}
|
||||
}
|
||||
|
||||
module front_or_back_inner_wall_frame_piece() {
|
||||
module front_or_back_inner_wall_frame_base_piece() {
|
||||
difference() {
|
||||
front_or_back_box_frame_piece();
|
||||
// Z is scaled so that some part of the original part inner wall is retained
|
||||
scale([1, 1, inner_frame_z_decorative_scale]) front_or_back_frame_piece();
|
||||
// minus the outer wall
|
||||
translate([0, -(frame_y-frame_wall)/2, 0]) cube([frame_x, frame_wall, frame_z], center=true);
|
||||
// minus half of the mounting posts (the other half provided by the outer wall)
|
||||
@@ -28,4 +29,11 @@ module front_or_back_inner_wall_frame_piece() {
|
||||
}
|
||||
}
|
||||
|
||||
module front_or_back_inner_wall_frame_piece() {
|
||||
front_or_back_inner_wall_frame_base_piece();
|
||||
// extend the outward face 2mm in order to have it cut deeper into the frame outer wall
|
||||
translate([0, -(frame_y-frame_wall)/2, 0]) rotate([-90, 0, 0]) linear_extrude(height=2) projection()
|
||||
translate([0, 0, 50]) rotate([90, 0, 0]) front_or_back_inner_wall_frame_base_piece();
|
||||
}
|
||||
|
||||
front_or_back_inner_wall_frame_piece();
|
||||
@@ -5,11 +5,11 @@
|
||||
|
||||
include <parameters.scad>
|
||||
include <components.scad>
|
||||
use <front-or-back-clean-for-extended-side.scad>
|
||||
use <front-or-back.scad>
|
||||
|
||||
module clean_front_or_back() {
|
||||
difference() {
|
||||
front_or_back_box_frame_piece_for_extended_side();
|
||||
front_or_back_frame_piece();
|
||||
// chop off the lip we left on the basic piece
|
||||
translate([-frame_x/2+frame_wall/2, 0, 0]) cube([frame_wall, frame_y, frame_z], center=true);
|
||||
};
|
||||
@@ -29,9 +29,9 @@ module bottom_piece_extension() {
|
||||
}
|
||||
}
|
||||
|
||||
module extended_front_or_back_frame_piece() {
|
||||
module front_or_back_trapezoid_frame_piece() {
|
||||
clean_front_or_back();
|
||||
translate([0, -frame_y/2+frame_wall, 0]) rotate([90, 0, 0]) bottom_piece_extension();
|
||||
}
|
||||
|
||||
extended_front_or_back_frame_piece();
|
||||
front_or_back_trapezoid_frame_piece();
|
||||
40
src/frames/pieces/front-or-back-windowed-backslashes.scad
Normal file
40
src/frames/pieces/front-or-back-windowed-backslashes.scad
Normal file
@@ -0,0 +1,40 @@
|
||||
/*
|
||||
* SPDX-FileCopyrightText: © 2024 Brian S. Stephan <bss@incorporeal.org>
|
||||
* SPDX-License-Identifier: GPL-3.0-or-later
|
||||
*/
|
||||
|
||||
include <parameters.scad>
|
||||
include <components.scad>
|
||||
use <front-or-back.scad>
|
||||
use <front-or-back-inner-wall.scad>
|
||||
|
||||
module backslashes() {
|
||||
translate([-70, -(frame_y-frame_wall)/2, 0]) slash_cutout();
|
||||
translate([-50, -(frame_y-frame_wall)/2, 0]) slash_cutout();
|
||||
translate([-30, -(frame_y-frame_wall)/2, 0]) slash_cutout();
|
||||
translate([-10, -(frame_y-frame_wall)/2, 0]) slash_cutout();
|
||||
translate([10, -(frame_y-frame_wall)/2, 0]) slash_cutout();
|
||||
translate([30, -(frame_y-frame_wall)/2, 0]) slash_cutout();
|
||||
translate([50, -(frame_y-frame_wall)/2, 0]) slash_cutout();
|
||||
translate([70, -(frame_y-frame_wall)/2, 0]) slash_cutout();
|
||||
}
|
||||
|
||||
module backslashes_windowed_front_or_back_frame_piece() {
|
||||
difference() {
|
||||
front_or_back_frame_piece();
|
||||
// subtract slashes from the frame wall
|
||||
backslashes();
|
||||
// subtract the inner wall area that will be provided by the other piece
|
||||
front_or_back_inner_wall_frame_piece();
|
||||
}
|
||||
}
|
||||
|
||||
module backslashes_windowed_front_or_back_frame_piece_for_extended_side() {
|
||||
difference() {
|
||||
backslashes_windowed_front_or_back_frame_piece();
|
||||
// ...minus the frame wall and lip on the left
|
||||
translate([-frame_x/2+frame_wall/2, 0, 0]) cube([frame_wall, frame_y, frame_z], center=true);
|
||||
}
|
||||
}
|
||||
|
||||
backslashes_windowed_front_or_back_frame_piece_for_extended_side();
|
||||
@@ -9,9 +9,9 @@ use <front-or-back.scad>
|
||||
use <front-or-back-inner-wall.scad>
|
||||
use <front-or-back-windowed-backslashes.scad>
|
||||
|
||||
module forwardslashes_windowed_front_or_back_box_frame_piece() {
|
||||
module forwardslashes_windowed_front_or_back_frame_piece() {
|
||||
difference() {
|
||||
front_or_back_box_frame_piece();
|
||||
front_or_back_frame_piece();
|
||||
// subtract slashes from the frame wall
|
||||
mirror([0, 0, 1]) backslashes();
|
||||
// subtract the inner wall area that will be provided by the other piece
|
||||
@@ -19,4 +19,12 @@ module forwardslashes_windowed_front_or_back_box_frame_piece() {
|
||||
}
|
||||
}
|
||||
|
||||
forwardslashes_windowed_front_or_back_box_frame_piece();
|
||||
module forwardslashes_windowed_front_or_back_frame_piece_for_extended_side() {
|
||||
difference() {
|
||||
forwardslashes_windowed_front_or_back_frame_piece();
|
||||
// ...minus the frame wall and lip on the left
|
||||
translate([-frame_x/2+frame_wall/2, 0, 0]) cube([frame_wall, frame_y, frame_z], center=true);
|
||||
}
|
||||
}
|
||||
|
||||
forwardslashes_windowed_front_or_back_frame_piece_for_extended_side();
|
||||
@@ -9,12 +9,12 @@ use <front-or-back.scad>
|
||||
use <front-or-back-inner-wall.scad>
|
||||
|
||||
module front_stripe() {
|
||||
cube([frame_x-(frame_mount_column_width*1.75)*2, frame_wall, 6], center=true);
|
||||
cube([frame_x-(frame_mount_column_width*1.75)*2, frame_wall, 5], center=true);
|
||||
}
|
||||
|
||||
module windowed_front_or_back_box_frame_piece() {
|
||||
module horiz_striped_windowed_front_or_back_frame_piece() {
|
||||
difference() {
|
||||
front_or_back_box_frame_piece();
|
||||
front_or_back_frame_piece();
|
||||
// subtract frame wall windows
|
||||
translate([0, -(frame_y-frame_wall)/2, 18]) front_stripe();
|
||||
translate([0, -(frame_y-frame_wall)/2, 9]) front_stripe();
|
||||
@@ -26,4 +26,12 @@ module windowed_front_or_back_box_frame_piece() {
|
||||
}
|
||||
}
|
||||
|
||||
windowed_front_or_back_box_frame_piece();
|
||||
module horiz_striped_windowed_front_or_back_frame_piece_for_extended_side() {
|
||||
difference() {
|
||||
horiz_striped_windowed_front_or_back_frame_piece();
|
||||
// ...minus the frame wall and lip on the left
|
||||
translate([-frame_x/2+frame_wall/2, 0, 0]) cube([frame_wall, frame_y, frame_z], center=true);
|
||||
}
|
||||
}
|
||||
|
||||
horiz_striped_windowed_front_or_back_frame_piece_for_extended_side();
|
||||
35
src/frames/pieces/front-or-back-windowed.scad
Normal file
35
src/frames/pieces/front-or-back-windowed.scad
Normal file
@@ -0,0 +1,35 @@
|
||||
/*
|
||||
* SPDX-FileCopyrightText: © 2024 Brian S. Stephan <bss@incorporeal.org>
|
||||
* SPDX-License-Identifier: GPL-3.0-or-later
|
||||
*/
|
||||
|
||||
include <parameters.scad>
|
||||
include <components.scad>
|
||||
use <front-or-back.scad>
|
||||
use <front-or-back-inner-wall.scad>
|
||||
|
||||
module front_or_back_window() {
|
||||
translate([0, -frame_y/2, 0])
|
||||
cube([frame_x-frame_mount_column_width*3.5, (frame_wall+panel_support_width)*2,
|
||||
frame_z-panel_z*3], center=true);
|
||||
}
|
||||
|
||||
module windowed_front_or_back_frame_piece() {
|
||||
difference() {
|
||||
front_or_back_frame_piece();
|
||||
// subtract frame wall window
|
||||
front_or_back_window();
|
||||
// subtract the inner wall area that will be provided by the other piece
|
||||
front_or_back_inner_wall_frame_piece();
|
||||
}
|
||||
}
|
||||
|
||||
module windowed_front_or_back_frame_piece_for_extended_side() {
|
||||
difference() {
|
||||
windowed_front_or_back_frame_piece();
|
||||
// ...minus the frame wall and lip on the left
|
||||
translate([-frame_x/2+frame_wall/2, 0, 0]) cube([frame_wall, frame_y, frame_z], center=true);
|
||||
}
|
||||
}
|
||||
|
||||
windowed_front_or_back_frame_piece_for_extended_side();
|
||||
@@ -6,8 +6,9 @@
|
||||
include <parameters.scad>
|
||||
include <components.scad>
|
||||
use <frames/complete/left-frame.scad>
|
||||
use <side.scad>
|
||||
|
||||
module front_or_back_box_frame_piece() {
|
||||
module front_or_back_frame_piece() {
|
||||
piece_width = panel_support_width+frame_wall+frame_mount_column_width;
|
||||
intersection() {
|
||||
left_frame();
|
||||
@@ -16,15 +17,11 @@ module front_or_back_box_frame_piece() {
|
||||
translate([0, -(frame_y/2)+(piece_width/2), 0]) cube([frame_x, piece_width, frame_z], center=true);
|
||||
// ...minus the frame wall and lip on the left
|
||||
translate([-frame_x/2+frame_wall/2, 0, 0])
|
||||
cube([frame_wall, frame_y-frame_wall*2, frame_z], center=true);
|
||||
linear_extrude(height=frame_z, center=true) polygon([
|
||||
[-frame_x/2, -frame_y/2], [-frame_x/2+frame_wall, -frame_y/2+frame_wall],
|
||||
[-frame_x/2, -frame_y/2+frame_wall]
|
||||
]);
|
||||
cube([frame_wall, frame_y, frame_z], center=true);
|
||||
// ...minus a slot for the combining piece to go into
|
||||
cube([frame_x, frame_y-(panel_support_width+frame_wall)*2, inner_frame_z/3], center=true);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
front_or_back_box_frame_piece();
|
||||
front_or_back_frame_piece();
|
||||
@@ -5,11 +5,11 @@
|
||||
|
||||
include <parameters.scad>
|
||||
include <components.scad>
|
||||
use <box/side.scad>
|
||||
use <side.scad>
|
||||
|
||||
module interconnect_frame_half_piece() {
|
||||
translate([frame_x/2-frame_wall, 0, 0]) difference() {
|
||||
side_box_frame_piece();
|
||||
side_frame_piece();
|
||||
rotate([0, 0, 180]) side_chopper();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -15,9 +15,10 @@ module mount_column_cutout() {
|
||||
}
|
||||
}
|
||||
|
||||
module side_inner_wall_frame_piece() {
|
||||
module side_inner_wall_frame_base_piece() {
|
||||
difference() {
|
||||
side_box_frame_piece();
|
||||
// Z is scaled so that some part of the original part inner wall is retained
|
||||
scale([1, 1, inner_frame_z_decorative_scale]) side_frame_piece();
|
||||
// minus the outer wall
|
||||
translate([-(frame_x-frame_wall)/2, 0, 0]) cube([frame_wall, frame_y, frame_z], center=true);
|
||||
// minus half of the mounting posts (the other half provided by the outer wall)
|
||||
@@ -32,4 +33,11 @@ module side_inner_wall_frame_piece() {
|
||||
}
|
||||
}
|
||||
|
||||
module side_inner_wall_frame_piece() {
|
||||
side_inner_wall_frame_base_piece();
|
||||
// extend the outward face 2mm in order to have it cut deeper into the frame outer wall
|
||||
translate([-(frame_x-frame_wall)/2, 0, 0]) rotate([0, 90, 0]) linear_extrude(height=2) projection()
|
||||
translate([0, 0, 50]) rotate([0, -90, 0]) side_inner_wall_frame_base_piece();
|
||||
}
|
||||
|
||||
side_inner_wall_frame_piece();
|
||||
38
src/frames/pieces/side-longish.scad
Normal file
38
src/frames/pieces/side-longish.scad
Normal file
@@ -0,0 +1,38 @@
|
||||
/*
|
||||
* SPDX-FileCopyrightText: © 2024 Brian S. Stephan <bss@incorporeal.org>
|
||||
* SPDX-License-Identifier: GPL-3.0-or-later
|
||||
*/
|
||||
|
||||
include <parameters.scad>
|
||||
include <components.scad>
|
||||
use <frames/complete/left-frame.scad>
|
||||
use <side.scad>
|
||||
|
||||
module side_frame_piece_wall() {
|
||||
// get a slice of the piece, to use it in extruding
|
||||
// this doesn't use the side_frame_piece because of the 45 degree angle geometry
|
||||
// not creating a clean thing to cut, so we just take the whole wall and use that
|
||||
projection(cut=true) rotate([0, 90, 0]) translate([frame_x/2-frame_wall-(frame_bevel_height/2), 0, 0])
|
||||
left_frame();
|
||||
}
|
||||
|
||||
module side_frame_piece_extension() {
|
||||
// combine the original with a shrunken piece to "pull" the wall out
|
||||
hull() {
|
||||
linear_extrude(height=frame_bevel_height*4)
|
||||
square([frame_z-(frame_bevel_height*2), frame_y-(frame_bevel_height*2)], center=true);
|
||||
linear_extrude(height=frame_bevel_height*3) side_frame_piece_wall();
|
||||
linear_extrude(height=frame_bevel_height) side_frame_piece_wall();
|
||||
}
|
||||
}
|
||||
|
||||
module side_longish_frame_piece() {
|
||||
difference() {
|
||||
side_frame_piece();
|
||||
// chop off the old edge which is getting replaced with the extension
|
||||
translate([-frame_x/2+frame_bevel_height/2, 0, 0]) cube([frame_bevel_height, frame_y, frame_z], center=true);
|
||||
}
|
||||
translate([-frame_x/2+frame_bevel_height*2, 0, 0]) rotate([0, -90, 0]) side_frame_piece_extension();
|
||||
}
|
||||
|
||||
side_longish_frame_piece();
|
||||
@@ -6,8 +6,8 @@
|
||||
include <parameters.scad>
|
||||
include <components.scad>
|
||||
use <frames/complete/left-frame.scad>
|
||||
use <frames/pieces/box/side.scad>
|
||||
use <front-or-back.scad>
|
||||
use <side.scad>
|
||||
use <front-or-back-trapezoid.scad>
|
||||
|
||||
module side_and_bottom_frame_piece_wall() {
|
||||
// get a slice of the pieces, to use it in extruding
|
||||
@@ -26,13 +26,13 @@ module side_and_bottom_frame_piece_extension() {
|
||||
}
|
||||
}
|
||||
|
||||
module extra_extended_left_or_right_frame_piece() {
|
||||
module side_trapezoid_extended_to_front_frame_piece() {
|
||||
difference() {
|
||||
side_box_frame_piece();
|
||||
side_frame_piece();
|
||||
// chop off the old edge which is getting replaced with the extension
|
||||
translate([-frame_x/2+frame_bevel_height/2, 0, 0]) cube([frame_bevel_height, frame_y, frame_z], center=true);
|
||||
}
|
||||
translate([-frame_x/2+frame_bevel_height*2, 0, 0]) rotate([0, -90, 0]) side_and_bottom_frame_piece_extension();
|
||||
}
|
||||
|
||||
extra_extended_left_or_right_frame_piece();
|
||||
side_trapezoid_extended_to_front_frame_piece();
|
||||
@@ -6,8 +6,7 @@
|
||||
include <parameters.scad>
|
||||
include <components.scad>
|
||||
use <frames/complete/left-frame.scad>
|
||||
use <frames/pieces/box/side.scad>
|
||||
use <front-or-back-clean-for-extended-side.scad>
|
||||
use <side.scad>
|
||||
|
||||
module side_frame_piece_wall() {
|
||||
// get a slice of the piece, to use it in extruding
|
||||
@@ -25,13 +24,13 @@ module side_frame_piece_extension() {
|
||||
}
|
||||
}
|
||||
|
||||
module extended_bottom_left_or_right_frame_piece() {
|
||||
module side_trapezoid_frame_piece() {
|
||||
difference() {
|
||||
side_box_frame_piece();
|
||||
side_frame_piece();
|
||||
// chop off the old edge which is getting replaced with the extension
|
||||
translate([-frame_x/2+frame_bevel_height/2, 0, 0]) cube([frame_bevel_height, frame_y, frame_z], center=true);
|
||||
}
|
||||
translate([-frame_x/2+frame_bevel_height*2, 0, 0]) rotate([0, -90, 0]) side_frame_piece_extension();
|
||||
}
|
||||
|
||||
extended_bottom_left_or_right_frame_piece();
|
||||
side_trapezoid_frame_piece();
|
||||
30
src/frames/pieces/side-windowed-backslashes.scad
Normal file
30
src/frames/pieces/side-windowed-backslashes.scad
Normal file
@@ -0,0 +1,30 @@
|
||||
/*
|
||||
* SPDX-FileCopyrightText: © 2024 Brian S. Stephan <bss@incorporeal.org>
|
||||
* SPDX-License-Identifier: GPL-3.0-or-later
|
||||
*/
|
||||
|
||||
include <parameters.scad>
|
||||
include <components.scad>
|
||||
use <side.scad>
|
||||
use <side-inner-wall.scad>
|
||||
|
||||
module backslashes() {
|
||||
translate([-(frame_x-frame_wall)/2, -50, 0]) rotate([0, 0, -90]) slash_cutout();
|
||||
translate([-(frame_x-frame_wall)/2, -30, 0]) rotate([0, 0, -90]) slash_cutout();
|
||||
translate([-(frame_x-frame_wall)/2, -10, 0]) rotate([0, 0, -90]) slash_cutout();
|
||||
translate([-(frame_x-frame_wall)/2, 10, 0]) rotate([0, 0, -90]) slash_cutout();
|
||||
translate([-(frame_x-frame_wall)/2, 30, 0]) rotate([0, 0, -90]) slash_cutout();
|
||||
translate([-(frame_x-frame_wall)/2, 50, 0]) rotate([0, 0, -90]) slash_cutout();
|
||||
}
|
||||
|
||||
module backslashes_windowed_side_frame_piece() {
|
||||
difference() {
|
||||
side_frame_piece();
|
||||
// subtract slashes from the frame wall
|
||||
backslashes();
|
||||
// subtract the inner wall area that will be provided by the other piece
|
||||
side_inner_wall_frame_piece();
|
||||
}
|
||||
}
|
||||
|
||||
backslashes_windowed_side_frame_piece();
|
||||
@@ -9,9 +9,9 @@ use <side.scad>
|
||||
use <side-inner-wall.scad>
|
||||
use <side-windowed-backslashes.scad>
|
||||
|
||||
module forwardslashes_windowed_side_box_frame_piece() {
|
||||
module forwardslashes_windowed_side_frame_piece() {
|
||||
difference() {
|
||||
side_box_frame_piece();
|
||||
side_frame_piece();
|
||||
// subtract slashes from the frame wall
|
||||
mirror([0, 0, 1]) backslashes();
|
||||
// subtract the inner wall area that will be provided by the other piece
|
||||
@@ -19,4 +19,4 @@ module forwardslashes_windowed_side_box_frame_piece() {
|
||||
}
|
||||
}
|
||||
|
||||
forwardslashes_windowed_side_box_frame_piece();
|
||||
forwardslashes_windowed_side_frame_piece();
|
||||
@@ -9,12 +9,12 @@ use <side.scad>
|
||||
use <side-inner-wall.scad>
|
||||
|
||||
module side_stripe() {
|
||||
cube([frame_wall, frame_y-(frame_mount_column_width*1.75)*2, 6], center=true);
|
||||
cube([frame_wall, frame_y-(frame_mount_column_width*1.75)*2, 5], center=true);
|
||||
}
|
||||
|
||||
module windowed_side_box_frame_piece() {
|
||||
module horiz_striped_windowed_side_frame_piece() {
|
||||
difference() {
|
||||
side_box_frame_piece();
|
||||
side_frame_piece();
|
||||
// subtract frame wall windows
|
||||
translate([-(frame_x-frame_wall)/2, 0, 18]) side_stripe();
|
||||
translate([-(frame_x-frame_wall)/2, 0, 9]) side_stripe();
|
||||
@@ -26,4 +26,4 @@ module windowed_side_box_frame_piece() {
|
||||
}
|
||||
}
|
||||
|
||||
windowed_side_box_frame_piece();
|
||||
horiz_striped_windowed_side_frame_piece();
|
||||
@@ -8,9 +8,9 @@ include <components.scad>
|
||||
use <side.scad>
|
||||
use <side-inner-wall.scad>
|
||||
|
||||
module windowed_side_box_frame_piece() {
|
||||
module windowed_side_frame_piece() {
|
||||
difference() {
|
||||
side_box_frame_piece();
|
||||
side_frame_piece();
|
||||
// subtract frame wall window
|
||||
translate([-frame_x/2, 0, 0])
|
||||
cube([(frame_wall+panel_support_width)*2, frame_y-frame_mount_column_width*3.5,
|
||||
@@ -20,4 +20,4 @@ module windowed_side_box_frame_piece() {
|
||||
}
|
||||
}
|
||||
|
||||
windowed_side_box_frame_piece();
|
||||
windowed_side_frame_piece();
|
||||
@@ -7,17 +7,17 @@ include <parameters.scad>
|
||||
include <components.scad>
|
||||
use <front-or-back.scad>
|
||||
|
||||
module side_box_frame_piece() {
|
||||
module side_frame_piece() {
|
||||
piece_width = panel_support_width+frame_wall+frame_mount_column_width;
|
||||
difference() {
|
||||
// side piece is left/right agnostic
|
||||
frame();
|
||||
// minus the top and bottom
|
||||
front_or_back_box_frame_piece();
|
||||
rotate([180, 0, 0]) front_or_back_box_frame_piece();
|
||||
front_or_back_frame_piece();
|
||||
rotate([180, 0, 0]) front_or_back_frame_piece();
|
||||
// and just chop out the rest of the frame
|
||||
translate([piece_width, 0, 0]) cube([frame_x, frame_y+1, frame_z+1], center=true);
|
||||
}
|
||||
}
|
||||
|
||||
side_box_frame_piece();
|
||||
side_frame_piece();
|
||||
@@ -0,0 +1,36 @@
|
||||
/*
|
||||
* SPDX-FileCopyrightText: © 2024 Brian S. Stephan <bss@incorporeal.org>
|
||||
* SPDX-License-Identifier: GPL-3.0-or-later
|
||||
*/
|
||||
|
||||
include <parameters.scad>
|
||||
decorative_radius_scale = 1.5;
|
||||
jumbo_decorative_radius_scale = 0;
|
||||
include <components.scad>
|
||||
|
||||
module dir_arc_plus_w_30mm_and_sega_2p_nine_decorative_plate_of_plates() {
|
||||
difference() {
|
||||
// layout offset + 30 = width for layout plus button width + 19+3 = space around button
|
||||
left_plate_x = dir_arc_30mm_column_3_offset + 30 + 19;
|
||||
// layout offset + 30 = width for layout plus button width + 19+3 = space around button
|
||||
left_plate_y = dir_arc_w_30mm_row_4_offset + 30 + 19;
|
||||
left_plate_center_x = (left_plate_x + sega_2p_column_1_left_panel_edge_offset - 22)/2;
|
||||
// layout offset + 30 = width for layout plus button width + 19+3 = space around button
|
||||
right_plate_x = sega_2p_column_4_offset + 30 + 19;
|
||||
right_plate_center_x = (right_plate_x + sega_2p_column_1_left_panel_edge_offset - 22)/2;
|
||||
|
||||
union() {
|
||||
// y values are based on the other half below
|
||||
translate([right_plate_center_x, 15, 0]) linear_extrude(2) offset(r=3, $fn=50)
|
||||
square([right_plate_x, left_plate_y], center=true);
|
||||
translate([-left_plate_center_x, 15, 0]) linear_extrude(2) offset(r=3, $fn=50)
|
||||
square([left_plate_x, left_plate_y], center=true);
|
||||
/* translate([-50, 0, 0]) cube([200, 200, 2], center=true); */
|
||||
}
|
||||
// cut out the normal holes
|
||||
translate([-panel_x/2, 0, -1]) dir_arc_w_30mm();
|
||||
translate([panel_x/2, 0, -1]) sega_2p_nine();
|
||||
}
|
||||
}
|
||||
|
||||
dir_arc_plus_w_30mm_and_sega_2p_nine_decorative_plate_of_plates();
|
||||
@@ -6,19 +6,19 @@
|
||||
include <parameters.scad>
|
||||
include <components.scad>
|
||||
|
||||
module dir_arc_plus_w_30mm_and_sega_2p_plus_one_decorative_plate() {
|
||||
module dir_arc_plus_w_30mm_and_sega_2p_nine_decorative_plate() {
|
||||
difference() {
|
||||
// get a 2mm slice of the bigger button cylinders
|
||||
union() {
|
||||
translate([-panel_x/2, 0, -65]) dir_arc_w_30mm();
|
||||
translate([panel_x/2, 0, -65]) sega_2p_plus_one();
|
||||
translate([panel_x/2, 0, -65]) sega_2p_nine();
|
||||
}
|
||||
translate([0, 0, -100]) cube([500, 500, 198], center=true);
|
||||
translate([0, 0, 100]) cube([500, 500, 198], center=true);
|
||||
// cut out the normal holes
|
||||
translate([-panel_x/2, 0, -1]) dir_arc_w_30mm();
|
||||
translate([panel_x/2, 0, -1]) sega_2p_plus_one();
|
||||
translate([panel_x/2, 0, -1]) sega_2p_nine();
|
||||
}
|
||||
}
|
||||
|
||||
dir_arc_plus_w_30mm_and_sega_2p_plus_one_decorative_plate();
|
||||
dir_arc_plus_w_30mm_and_sega_2p_nine_decorative_plate();
|
||||
@@ -1,4 +1,5 @@
|
||||
/*
|
||||
/* Decorative plate for directional buttons.
|
||||
*
|
||||
* SPDX-FileCopyrightText: © 2024 Brian S. Stephan <bss@incorporeal.org>
|
||||
* SPDX-License-Identifier: GPL-3.0-or-later
|
||||
*/
|
||||
@@ -8,19 +9,15 @@ decorative_radius_scale = 1.5;
|
||||
jumbo_decorative_radius_scale = 0;
|
||||
include <components.scad>
|
||||
|
||||
module dir_arc_plus_w_30mm_and_sega_2p_plus_one_decorative_plate_of_plates() {
|
||||
module dir_arc_plus_w_30mm_plate_decorative_plate() {
|
||||
difference() {
|
||||
// get a 2mm slice of the bigger button cylinders
|
||||
union() {
|
||||
translate([-panel_x/2, 0, -25]) hull() dir_arc_w_30mm();
|
||||
translate([panel_x/2, 0, -25]) hull() sega_2p_plus_one();
|
||||
}
|
||||
translate([-panel_x/2, 0, -25]) hull() dir_arc_w_30mm();
|
||||
translate([0, 0, -100]) cube([500, 500, 198], center=true);
|
||||
translate([0, 0, 100]) cube([500, 500, 198], center=true);
|
||||
// cut out the normal holes
|
||||
translate([-panel_x/2, 0, -1]) dir_arc_w_30mm();
|
||||
translate([panel_x/2, 0, -1]) sega_2p_plus_one();
|
||||
}
|
||||
}
|
||||
|
||||
dir_arc_plus_w_30mm_and_sega_2p_plus_one_decorative_plate_of_plates();
|
||||
dir_arc_plus_w_30mm_plate_decorative_plate();
|
||||
23
src/misc/decorative-plate-sega-2p-eleven-plate.scad
Normal file
23
src/misc/decorative-plate-sega-2p-eleven-plate.scad
Normal file
@@ -0,0 +1,23 @@
|
||||
/* Decorative plate for directional buttons.
|
||||
*
|
||||
* SPDX-FileCopyrightText: © 2024 Brian S. Stephan <bss@incorporeal.org>
|
||||
* SPDX-License-Identifier: GPL-3.0-or-later
|
||||
*/
|
||||
|
||||
include <parameters.scad>
|
||||
decorative_radius_scale = 1.5;
|
||||
jumbo_decorative_radius_scale = 0;
|
||||
include <components.scad>
|
||||
|
||||
module sega_2p_eleven_plate_decorative_plate() {
|
||||
difference() {
|
||||
// get a 2mm slice of the bigger button cylinders
|
||||
translate([panel_x/2, 0, -25]) hull() sega_2p_eleven();
|
||||
translate([0, 0, -100]) cube([500, 500, 198], center=true);
|
||||
translate([0, 0, 100]) cube([500, 500, 198], center=true);
|
||||
// cut out the normal holes
|
||||
translate([panel_x/2, 0, -1]) sega_2p_eleven();
|
||||
}
|
||||
}
|
||||
|
||||
sega_2p_eleven_plate_decorative_plate();
|
||||
25
src/misc/decorative-plate-sega-2p-nine-plate.scad
Normal file
25
src/misc/decorative-plate-sega-2p-nine-plate.scad
Normal file
@@ -0,0 +1,25 @@
|
||||
/* A rounded corner decorative plate for the Sega 2P + 1 button layout.
|
||||
*
|
||||
* SPDX-FileCopyrightText: © 2024 Brian S. Stephan <bss@incorporeal.org>
|
||||
* SPDX-License-Identifier: GPL-3.0-or-later
|
||||
*/
|
||||
|
||||
include <parameters.scad>
|
||||
decorative_radius_scale = 1.5;
|
||||
jumbo_decorative_radius_scale = 0;
|
||||
include <components.scad>
|
||||
|
||||
module sega_2p_nine_decorative_plate_of_plates() {
|
||||
difference() {
|
||||
// get a 2mm slice of the bigger button cylinders
|
||||
union() {
|
||||
translate([panel_x/2, 0, -25]) hull() sega_2p_nine();
|
||||
}
|
||||
translate([0, 0, -100]) cube([500, 500, 198], center=true);
|
||||
translate([0, 0, 100]) cube([500, 500, 198], center=true);
|
||||
// cut out the normal holes
|
||||
translate([panel_x/2, 0, -1]) sega_2p_nine();
|
||||
}
|
||||
}
|
||||
|
||||
sega_2p_nine_decorative_plate_of_plates();
|
||||
@@ -6,15 +6,15 @@
|
||||
include <parameters.scad>
|
||||
include <components.scad>
|
||||
|
||||
module sega_2p_plus_one_decorative_plate() {
|
||||
module sega_2p_nine_decorative_plate() {
|
||||
difference() {
|
||||
// get a 2mm slice of the bigger button cylinders
|
||||
translate([0, 0, -55]) sega_2p_plus_one();
|
||||
translate([0, 0, -55]) sega_2p_nine();
|
||||
translate([0, 0, -100]) cube([500, 500, 198], center=true);
|
||||
translate([0, 0, 100]) cube([500, 500, 198], center=true);
|
||||
// cut out the normal holes
|
||||
translate([0, 0, -1]) sega_2p_plus_one();
|
||||
translate([0, 0, -1]) sega_2p_nine();
|
||||
}
|
||||
}
|
||||
|
||||
sega_2p_plus_one_decorative_plate();
|
||||
sega_2p_nine_decorative_plate();
|
||||
@@ -6,11 +6,11 @@
|
||||
include <parameters.scad>
|
||||
include <components.scad>
|
||||
|
||||
module sega_2p_plus_one_panel() {
|
||||
module dir_arc_w_30mm_panel() {
|
||||
difference() {
|
||||
panel();
|
||||
sega_2p_plus_one();
|
||||
dir_arc_w_30mm();
|
||||
}
|
||||
}
|
||||
|
||||
sega_2p_plus_one_panel();
|
||||
dir_arc_w_30mm_panel();
|
||||
16
src/panels/inset/sega-2p-eleven-panel-with-mount.scad
Normal file
16
src/panels/inset/sega-2p-eleven-panel-with-mount.scad
Normal file
@@ -0,0 +1,16 @@
|
||||
/* 11-button Sega 2P panel with PCB mount
|
||||
*
|
||||
* SPDX-FileCopyrightText: © 2023 Brian S. Stephan <bss@incorporeal.org>
|
||||
* SPDX-License-Identifier: GPL-3.0-or-later
|
||||
*/
|
||||
|
||||
include <parameters.scad>
|
||||
include <components.scad>
|
||||
use <sega-2p-eleven-panel.scad>
|
||||
|
||||
module sega_2p_eleven_panel_with_mount() {
|
||||
sega_2p_eleven_panel();
|
||||
translate([30, -50, -(panel_z/2) - 3]) pcb_mount();
|
||||
}
|
||||
|
||||
sega_2p_eleven_panel_with_mount();
|
||||
17
src/panels/inset/sega-2p-eleven-panel.scad
Normal file
17
src/panels/inset/sega-2p-eleven-panel.scad
Normal file
@@ -0,0 +1,17 @@
|
||||
/* A panel with the Sega 2P button layout plus three extra buttons for whatever purpose.
|
||||
*
|
||||
* SPDX-FileCopyrightText: © 2024 Brian S. Stephan <bss@incorporeal.org>
|
||||
* SPDX-License-Identifier: GPL-3.0-or-later
|
||||
*/
|
||||
|
||||
include <parameters.scad>
|
||||
include <components.scad>
|
||||
|
||||
module sega_2p_eleven_panel() {
|
||||
difference() {
|
||||
panel();
|
||||
sega_2p_eleven();
|
||||
}
|
||||
}
|
||||
|
||||
sega_2p_eleven_panel();
|
||||
16
src/panels/inset/sega-2p-nine-panel.scad
Normal file
16
src/panels/inset/sega-2p-nine-panel.scad
Normal file
@@ -0,0 +1,16 @@
|
||||
/*
|
||||
* SPDX-FileCopyrightText: © 2023 Brian S. Stephan <bss@incorporeal.org>
|
||||
* SPDX-License-Identifier: GPL-3.0-or-later
|
||||
*/
|
||||
|
||||
include <parameters.scad>
|
||||
include <components.scad>
|
||||
|
||||
module sega_2p_nine_panel() {
|
||||
difference() {
|
||||
panel();
|
||||
sega_2p_nine();
|
||||
}
|
||||
}
|
||||
|
||||
sega_2p_nine_panel();
|
||||
@@ -5,11 +5,11 @@
|
||||
|
||||
include <parameters.scad>
|
||||
include <components.scad>
|
||||
use <right-sega-2p-plus-one-panel.scad>
|
||||
use <sega-2p-nine-plus-control-panel.scad>
|
||||
|
||||
module sega_2p_plus_one_with_mount_right_overhang_panel() {
|
||||
sega_2p_plus_one_right_overhang_panel();
|
||||
module sega_2p_nine_plus_control_panel_with_mount() {
|
||||
sega_2p_nine_plus_control_panel();
|
||||
translate([30, -50, -(panel_z/2) - 3]) pcb_mount();
|
||||
}
|
||||
|
||||
sega_2p_plus_one_with_mount_right_overhang_panel();
|
||||
sega_2p_nine_plus_control_panel_with_mount();
|
||||
@@ -6,13 +6,13 @@
|
||||
include <parameters.scad>
|
||||
include <components.scad>
|
||||
|
||||
module sega_2p_plus_one_plus_control_panel() {
|
||||
module sega_2p_nine_plus_control_panel() {
|
||||
difference() {
|
||||
panel();
|
||||
sega_2p_plus_one();
|
||||
sega_2p_nine();
|
||||
rotate([0, 0, 180]) side_chopper();
|
||||
translate([89, 30, 0]) button_24mm_hole();
|
||||
}
|
||||
}
|
||||
|
||||
sega_2p_plus_one_plus_control_panel();
|
||||
sega_2p_nine_plus_control_panel();
|
||||
@@ -5,14 +5,14 @@
|
||||
|
||||
include <parameters.scad>
|
||||
include <components.scad>
|
||||
use <right-sega-2p-plus-one-plus-control-panel-with-mount.scad>
|
||||
use <right-sega-2p-nine-plus-control-panel-with-mount.scad>
|
||||
|
||||
module sega_2p_plus_one_plus_control_right_overhang_panel_with_mount_with_oled() {
|
||||
module sega_2p_nine_plus_control_right_overhang_panel_with_mount_with_oled() {
|
||||
difference() {
|
||||
sega_2p_plus_one_plus_control_right_overhang_panel_with_mount();
|
||||
sega_2p_nine_plus_control_right_overhang_panel_with_mount();
|
||||
translate([75, 77.5, 0]) oled_ssd1306_mount_cutout();
|
||||
}
|
||||
translate([75, 77.5, 0.5]) oled_ssd1306_mount();
|
||||
}
|
||||
|
||||
sega_2p_plus_one_plus_control_right_overhang_panel_with_mount_with_oled();
|
||||
sega_2p_nine_plus_control_right_overhang_panel_with_mount_with_oled();
|
||||
@@ -5,11 +5,11 @@
|
||||
|
||||
include <parameters.scad>
|
||||
include <components.scad>
|
||||
use <sega-2p-plus-one-plus-control-panel.scad>
|
||||
use <right-sega-2p-nine-panel.scad>
|
||||
|
||||
module sega_2p_plus_one_plus_control_panel_with_mount() {
|
||||
sega_2p_plus_one_plus_control_panel();
|
||||
module sega_2p_nine_with_mount_right_overhang_panel() {
|
||||
sega_2p_nine_right_overhang_panel();
|
||||
translate([30, -50, -(panel_z/2) - 3]) pcb_mount();
|
||||
}
|
||||
|
||||
sega_2p_plus_one_plus_control_panel_with_mount();
|
||||
sega_2p_nine_with_mount_right_overhang_panel();
|
||||
@@ -6,12 +6,12 @@
|
||||
include <parameters.scad>
|
||||
include <components.scad>
|
||||
|
||||
module sega_2p_plus_one_right_overhang_panel() {
|
||||
module sega_2p_nine_right_overhang_panel() {
|
||||
difference() {
|
||||
panel_with_raised_overhang();
|
||||
sega_2p_plus_one();
|
||||
sega_2p_nine();
|
||||
rotate([0, 0, 180]) side_chopper();
|
||||
}
|
||||
}
|
||||
|
||||
sega_2p_plus_one_right_overhang_panel();
|
||||
sega_2p_nine_right_overhang_panel();
|
||||
@@ -0,0 +1,15 @@
|
||||
/*
|
||||
* SPDX-FileCopyrightText: © 2023 Brian S. Stephan <bss@incorporeal.org>
|
||||
* SPDX-License-Identifier: GPL-3.0-or-later
|
||||
*/
|
||||
|
||||
include <parameters.scad>
|
||||
include <components.scad>
|
||||
use <right-sega-2p-nine-plus-control-panel.scad>
|
||||
|
||||
module sega_2p_nine_plus_control_right_overhang_panel_with_mount() {
|
||||
sega_2p_nine_plus_control_right_overhang_panel();
|
||||
translate([30, -50, -(panel_z/2) - 3]) pcb_mount();
|
||||
}
|
||||
|
||||
sega_2p_nine_plus_control_right_overhang_panel_with_mount();
|
||||
@@ -6,13 +6,13 @@
|
||||
include <parameters.scad>
|
||||
include <components.scad>
|
||||
|
||||
module sega_2p_plus_one_plus_control_right_overhang_panel() {
|
||||
module sega_2p_nine_plus_control_right_overhang_panel() {
|
||||
difference() {
|
||||
panel_with_raised_overhang();
|
||||
sega_2p_plus_one();
|
||||
sega_2p_nine();
|
||||
rotate([0, 0, 180]) side_chopper();
|
||||
translate([89, 30, 0]) button_24mm_hole();
|
||||
}
|
||||
}
|
||||
|
||||
sega_2p_plus_one_plus_control_right_overhang_panel();
|
||||
sega_2p_nine_plus_control_right_overhang_panel();
|
||||
@@ -1,15 +0,0 @@
|
||||
/*
|
||||
* SPDX-FileCopyrightText: © 2023 Brian S. Stephan <bss@incorporeal.org>
|
||||
* SPDX-License-Identifier: GPL-3.0-or-later
|
||||
*/
|
||||
|
||||
include <parameters.scad>
|
||||
include <components.scad>
|
||||
use <right-sega-2p-plus-one-plus-control-panel.scad>
|
||||
|
||||
module sega_2p_plus_one_plus_control_right_overhang_panel_with_mount() {
|
||||
sega_2p_plus_one_plus_control_right_overhang_panel();
|
||||
translate([30, -50, -(panel_z/2) - 3]) pcb_mount();
|
||||
}
|
||||
|
||||
sega_2p_plus_one_plus_control_right_overhang_panel_with_mount();
|
||||
@@ -17,6 +17,9 @@ m4_bolt_radius = 2 + hole_tolerance;
|
||||
m4_bolt_countersink_radius = 6.1 + hole_tolerance;
|
||||
m4_bolt_hex_exterior_radius = 3.6 + hole_tolerance;
|
||||
|
||||
// M6
|
||||
m6_bolt_radius = 3 + hole_tolerance;
|
||||
|
||||
// 24mm button
|
||||
small_button_radius = 12 + hole_tolerance;
|
||||
|
||||
@@ -75,6 +78,12 @@ panel_z = 5;
|
||||
// inside the frame
|
||||
inner_frame_z = frame_z - (panel_z * 2);
|
||||
|
||||
// "windowed" pieces chop out the inner wall of the frame as a separate piece in order
|
||||
// to print it a different color/way/style. to improve friction fit, it is only the below
|
||||
// value scale of the whole wall, so that the rest of the wall is retained on the outer
|
||||
// piece, which helps clamp the two together (and helps the panels clamp it all)
|
||||
inner_frame_z_decorative_scale = 0.95;
|
||||
|
||||
// how much the top plate x/y is expanded to overhang the frame
|
||||
// note that this is relative to the top plate (so the wall is added back)
|
||||
panel_overhang_amount = 8.5;
|
||||
@@ -99,3 +108,19 @@ jumbo_decorative_radius_scale = 2;
|
||||
slash_inner_displacement = 10;
|
||||
slash_width = 15;
|
||||
slash_height = frame_z-panel_z*3;
|
||||
|
||||
// LAYOUTS
|
||||
|
||||
sega_2p_column_2_offset = 30.5;
|
||||
sega_2p_column_3_offset = sega_2p_column_2_offset + 36;
|
||||
sega_2p_column_4_offset = sega_2p_column_3_offset + 36;
|
||||
sega_2p_column_5_offset = sega_2p_column_4_offset + 36;
|
||||
|
||||
// this offset is from the left edge of the panel
|
||||
sega_2p_column_1_left_panel_edge_offset = 28.06;
|
||||
|
||||
dir_arc_30mm_column_2_offset = 33.8;
|
||||
dir_arc_30mm_column_3_offset = dir_arc_30mm_column_2_offset + 34.8;
|
||||
dir_arc_30mm_row_2_offset = 57.2;
|
||||
dir_arc_30mm_row_3_offset = dir_arc_30mm_row_2_offset + 12.9;
|
||||
dir_arc_w_30mm_row_4_offset = dir_arc_30mm_row_3_offset + 34.5;
|
||||
|
||||
Reference in New Issue
Block a user