36 Commits

Author SHA1 Message Date
97a6f52e07 changelog for v4.6.0
Signed-off-by: Brian S. Stephan <bss@incorporeal.org>
2025-02-18 14:58:48 -06:00
ecc3ffbb54 restore side-windowed.scad lost from previous commit 2024-12-18 14:08:46 -06:00
73b55861b6 remove the box frame pieces, all pieces are of the extended lineage
Signed-off-by: Brian S. Stephan <bss@incorporeal.org>
2024-12-18 13:43:14 -06:00
439333c154 remove imports of the box pieces, and duplicate them into "extended" pieces
this is the next step in getting rid of the 45 degree angle "box" pieces

Signed-off-by: Brian S. Stephan <bss@incorporeal.org>
2024-12-18 13:27:24 -06:00
ef16559b95 ensure the frame solid has the proper, complete dimensions
something about the sharp corners of the default cylinder was slightly
shrinking the overall solid by a fraction of a mm. I thought this was a
defect of how I was chopping pieces, but no, it was the core solid. this
shouldn't be a reason to rebuild anything, but it makes the models
slightly more consistent, especially when looking at the STLs

Signed-off-by: Brian S. Stephan <bss@incorporeal.org>
2024-12-04 14:24:47 -06:00
2880018913 add a simple side for the extended frame pieces
I'm thinking the "extended" pieces become the only pieces soon, this is
one step closer to it

Signed-off-by: Brian S. Stephan <bss@incorporeal.org>
2024-12-04 13:36:33 -06:00
ca928932ba rename front/back pieces for clarity, part 1
Signed-off-by: Brian S. Stephan <bss@incorporeal.org>
2024-12-04 13:03:08 -06:00
8b4cc0b182 fail the build (and thus make) if openscad failed
Signed-off-by: Brian S. Stephan <bss@incorporeal.org>
2024-12-04 11:25:51 -06:00
a6b5d77671 rename some various extended pieces to make room for the simple side
Signed-off-by: Brian S. Stephan <bss@incorporeal.org>
2024-12-04 11:25:00 -06:00
fa05469e19 add a slightly extended side piece
adds a bit of length to the build but without the longer polygon
geometry. the name of this is terrible, I think I might get rid of the
angled corner pieces in a refactoring

Signed-off-by: Brian S. Stephan <bss@incorporeal.org>
2024-12-04 08:04:16 -06:00
9375a3a1b7 alignment tweaks for the rectangles plate to fit the famicom style
Signed-off-by: Brian S. Stephan <bss@incorporeal.org>
2024-12-02 08:22:29 -06:00
1557021be4 squeeze in one more slash in the slashes
Signed-off-by: Brian S. Stephan <bss@incorporeal.org>
2024-12-02 08:19:54 -06:00
9d109f1756 document v4.5.0
Signed-off-by: Brian S. Stephan <bss@incorporeal.org>
2024-10-07 10:33:11 -05:00
0ea02154b5 add the mount spacer to the BSS AE build notes
Signed-off-by: Brian S. Stephan <bss@incorporeal.org>
2024-10-07 10:32:54 -05:00
e29d9e6180 cut the horiz. stripes down to 5 to try to get them to print better
squeezing 6 in made the structure pretty stringy and unsatisfying to
handle, this should be better

Signed-off-by: Brian S. Stephan <bss@incorporeal.org>
2024-10-07 10:26:28 -05:00
f509b8df80 rename the q2009 project as the BSS AE 2024-10-07 09:28:02 -05:00
71b2c786be create a basic README for the project
will add more documentation if/when it is needed

Signed-off-by: Brian S. Stephan <bss@incorporeal.org>
2024-10-07 09:24:44 -05:00
5c542944d2 rename "sega 2P plus one" layouts + etc. as "sega 2P nine"
seems more coherent, and fits with the newer sega 2P eleven layout I
made, even if I'm going to end up sticking with nine in my builds

Signed-off-by: Brian S. Stephan <bss@incorporeal.org>
2024-09-24 08:21:41 -05:00
623e025566 break out the Sega 2P + 1 plate by itself, absent the dir_arc plate
now that the dir_arc plate is a separate piece, as it should be, we
don't need to duplicate it here.

Signed-off-by: Brian S. Stephan <bss@incorporeal.org>
2024-09-24 07:55:57 -05:00
d1a8f34c2a another aux panel, this with a hole for a rocker switch
I realized pretty late in the build here that I didn't have a way to
access the Fn switch, so I'm just going to try putting it away at the
top back for now

Signed-off-by: Brian S. Stephan <bss@incorporeal.org>
2024-09-24 07:51:57 -05:00
900ca8c751 add a three-button cluster for the aux buttons on a panel
Q2009-specific for now, though maybe one day I'll use the cluster on a
frame wall, in which case I'd move this to the "core" collection of
parts

Signed-off-by: Brian S. Stephan <bss@incorporeal.org>
2024-09-20 08:13:16 -05:00
d87794db59 make the mount spacers a separate piece
this was necessary for the back bottom pieces, so might as well simplify the
print of the front bottom pieces as well

Signed-off-by: Brian S. Stephan <bss@incorporeal.org>
2024-09-18 10:29:51 -05:00
f0d3f434a3 gitignore .stl files
why didn't I do this aeons ago!?

Signed-off-by: Brian S. Stephan <bss@incorporeal.org>
2024-09-17 16:21:16 -05:00
2f027ef1fe back pieces for extending the enclosure to the back edge of the base
these pieces are largely not used for anything, but the left/right have
mounting holes for securing the whole enclosure to the base, and
finishing the connection to where the monitor is mounted

Signed-off-by: Brian S. Stephan <bss@incorporeal.org>
2024-09-17 16:19:06 -05:00
b826ecaccf create a panel with three aux buttons in a tight cluster
the idea of this is to have Select, Home, and Start buttons accessible
via this panel away from the action panels, and the action pannels have
the L3, TP, and R3 buttons in the Sega 2P 11 layout, and then there is
no need for buttons on the back of the q2009 enclosure. I don't think
this would get used for any reason other than q2009 so it lives there.

Signed-off-by: Brian S. Stephan <bss@incorporeal.org>
2024-09-15 09:05:31 -05:00
0cdd0ae846 break out the angled dir_arc + W decorative plate
there's a decorative plate angled plate that includes the sega 2P + 1
buttons and dir_arc + W buttons as separate pieces in the same model.
this is a historical artifact that I will fix at some point, but for now
at least, here is the dir_arc + W split out

Signed-off-by: Brian S. Stephan <bss@incorporeal.org>
2024-09-15 09:03:47 -05:00
504dab935c create a Sega 2P-based 11 button layout
this allows for the traditional 8 buttons plus L3, R3, and TP, all on
one hand. I'm going to use this for the q2009 stuff, especially, but it
might be an interesting option for all arcade sticks

Signed-off-by: Brian S. Stephan <bss@incorporeal.org>
2024-09-15 09:00:44 -05:00
0de2505de2 q2009 specific extended side with a flush back
Signed-off-by: Brian S. Stephan <bss@incorporeal.org>
2024-08-21 13:19:02 -05:00
fd2193cc5a rename extended side piece to fit front/back naming idiom
Signed-off-by: Brian S. Stephan <bss@incorporeal.org>
2024-08-19 12:17:46 -05:00
766fbf2883 add a horizontal interconnect for extending a stick vertically
for purposes of creating one large item in the arcade base

Signed-off-by: Brian S. Stephan <bss@incorporeal.org>
2024-08-16 08:39:34 -05:00
7a03a1e38e create panels that can bolt to a arcade frame base
still working out all the kinks of this, but this would be something
that is part of a larger enclosure that is secured to a particular
vendor's pedestal

Signed-off-by: Brian S. Stephan <bss@incorporeal.org>
2024-08-15 08:23:54 -05:00
1083492ef8 tweak the wall stripes to be thinner and fit 6
why 6? just Sega Reasons

Signed-off-by: Brian S. Stephan <bss@incorporeal.org>
2024-07-25 09:07:12 -05:00
765ef689c5 rectangle dec. plate for a particular NES-ish stick style
Signed-off-by: Brian S. Stephan <bss@incorporeal.org>
2024-07-24 11:38:02 -05:00
055b103abd parameterize some button layout positions
I need to refer to the math of these in laying out some panels, so best
to just parameterize it in case I fiddle with stuff in the future

Signed-off-by: Brian S. Stephan <bss@incorporeal.org>
2024-07-16 14:35:53 -05:00
6ad801b8b2 use frame pieces for both sides of the all together demo
Signed-off-by: Brian S. Stephan <bss@incorporeal.org>
2024-07-16 14:20:50 -05:00
875513a3d3 add a dir_arc + W 30mm inset panel, since I already have the layout
Signed-off-by: Brian S. Stephan <bss@incorporeal.org>
2024-07-15 07:26:46 -05:00
67 changed files with 838 additions and 367 deletions

1
.gitignore vendored
View File

@@ -1,3 +1,4 @@
build/
*.stl
*.sw*

View File

@@ -2,6 +2,50 @@
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

View File

@@ -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")

View File

@@ -5,15 +5,13 @@
include <parameters.scad>
include <components.scad>
use <frames/pieces/extended/front-or-back.scad>
use <frames/pieces/extended/side.scad>
use <frames/pieces/extended/front-or-back-clean-for-extended-side-aux-and-neutrik.scad>
use <frames/pieces/extended/front-or-back-clean-for-extended-side-windowed-horiz-stripes.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-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";
@@ -23,17 +21,17 @@ 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]) extended_left_or_right_frame_piece();
color(frame_side_color) translate([frame_x/2-4, 0, -2.5]) mirror([1, 0, 0]) extended_left_or_right_frame_piece();
color(frame_top_bottom_color) translate([-frame_x/2+4, 0, -2.5]) horiz_striped_windowed_front_or_back_box_frame_piece_for_extended_side();
color(frame_top_bottom_color) translate([frame_x/2-4, 0, -2.5]) horiz_striped_windowed_front_or_back_box_frame_piece_for_extended_side();
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_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_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-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();

View File

@@ -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();

View File

@@ -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();

View File

@@ -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();

View File

@@ -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();

View File

@@ -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();
@@ -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();

View 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.

View File

@@ -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();

View 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();

View 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();

View 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();

View 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();

View 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();

View 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();

View 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();

View 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();

View File

@@ -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();

View 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();

View File

@@ -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();

View File

@@ -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();

View File

@@ -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();

View File

@@ -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-windowed-backslashes.scad>
module backslashes_windowed_front_or_back_box_frame_piece_for_extended_side() {
difference() {
backslashes_windowed_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);
}
}
backslashes_windowed_front_or_back_box_frame_piece_for_extended_side();

View File

@@ -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-windowed-forwardslashes.scad>
module forwardslashes_windowed_front_or_back_box_frame_piece_for_extended_side() {
difference() {
forwardslashes_windowed_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);
}
}
forwardslashes_windowed_front_or_back_box_frame_piece_for_extended_side();

View File

@@ -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-windowed-horiz-stripes.scad>
module horiz_striped_windowed_front_or_back_box_frame_piece_for_extended_side() {
difference() {
horiz_striped_windowed_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);
}
}
horiz_striped_windowed_front_or_back_box_frame_piece_for_extended_side();

View File

@@ -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-windowed.scad>
module windowed_front_or_back_box_frame_piece_for_extended_side() {
difference() {
windowed_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);
}
}
windowed_front_or_back_box_frame_piece_for_extended_side();

View File

@@ -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();

View File

@@ -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();

View File

@@ -18,7 +18,7 @@ module mount_column_cutout() {
module front_or_back_inner_wall_frame_base_piece() {
difference() {
// 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_box_frame_piece();
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)

View File

@@ -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();

View 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();

View File

@@ -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();

View File

@@ -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 horiz_striped_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 horiz_striped_windowed_front_or_back_box_frame_piece() {
}
}
horiz_striped_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();

View File

@@ -14,9 +14,9 @@ module front_or_back_window() {
frame_z-panel_z*3], center=true);
}
module windowed_front_or_back_box_frame_piece() {
module windowed_front_or_back_frame_piece() {
difference() {
front_or_back_box_frame_piece();
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
@@ -24,4 +24,12 @@ module windowed_front_or_back_box_frame_piece() {
}
}
windowed_front_or_back_box_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();

View File

@@ -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();

View File

@@ -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();
}
}

View File

@@ -18,7 +18,7 @@ module mount_column_cutout() {
module side_inner_wall_frame_base_piece() {
difference() {
// Z is scaled so that some part of the original part inner wall is retained
scale([1, 1, inner_frame_z_decorative_scale]) side_box_frame_piece();
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)

View 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();

View File

@@ -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();

View File

@@ -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_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_left_or_right_frame_piece();
side_trapezoid_frame_piece();

View 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();

View File

@@ -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();

View File

@@ -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 horiz_striped_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 horiz_striped_windowed_side_box_frame_piece() {
}
}
horiz_striped_windowed_side_box_frame_piece();
horiz_striped_windowed_side_frame_piece();

View File

@@ -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();

View File

@@ -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();

View File

@@ -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();

View File

@@ -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();

View File

@@ -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();

View 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();

View 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();

View File

@@ -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();

View File

@@ -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();

View 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();

View 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();

View 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();

View File

@@ -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();

View File

@@ -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();

View File

@@ -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();

View File

@@ -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();

View File

@@ -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();

View File

@@ -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();

View File

@@ -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();

View File

@@ -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();

View File

@@ -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;
@@ -105,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;