Compare commits
12 Commits
bcf2adcaa2
...
main
| Author | SHA1 | Date | |
|---|---|---|---|
|
0fd3880fa2
|
|||
|
d028736d5a
|
|||
|
80ce81c465
|
|||
|
8b5d994847
|
|||
|
852cef821c
|
|||
|
bf2f8a8a17
|
|||
|
1aea9221ff
|
|||
|
ea4beca89d
|
|||
|
aa92e57fe0
|
|||
|
0d121e834a
|
|||
|
d187312cd3
|
|||
|
4c045951c7
|
14
README.md
14
README.md
@@ -16,7 +16,7 @@ Randomus](https://webirc.randomus.net/#buildable-stick-system)!**
|
||||
|
||||

|
||||
|
||||
[Photo of a completed inset panel-based stick.]
|
||||
[Photo of a completed overhang panel-based stick.]
|
||||
|
||||
Originally an attempt to make a couple customized STL files for the [OpenStickCommunity Fightstick
|
||||
Case](https://github.com/OpenStickCommunity/Hardware/tree/main/Fightstick%20Case), the changes ballooned to fit my
|
||||
@@ -57,11 +57,15 @@ about what the types of parts are and how to use them:
|
||||
these is that they aren't as reusable as the inset panels, since the inset panels can go anywhere, but the
|
||||
overhang panels must be designed to not overlap with other overhang panels, so you might have to make more custom
|
||||
variants depending on where you put things.
|
||||
* `misc/`
|
||||
* Pieces that I haven't organized better (yet) --- there are decorative plates for top buttons and similar to give
|
||||
* `plates/`
|
||||
* Flat pieces used for cosmetic or connective reasons --- decorative plates for top buttons and similar to give
|
||||
more color variance and some layers to the arcade stick, some very simple dustwashers, plates that fit rocker
|
||||
switches and the like in Neutrik D or 20mm holes, and a lever mount spacer for getting your lever shaft at the
|
||||
desired height. You don't *need* any of these, but you'll probably use a few.
|
||||
* `misc/`
|
||||
* Pieces that I haven't organized better (yet) --- odd things and scratch ideas, mostly. There are some decorative
|
||||
corners for a bit more height/nicer seams, a sleeve to make smaller hex spacers fit in the hole as they're
|
||||
supposed to, things of that nature.
|
||||
* `extras/`
|
||||
* Various experiments and things not directly related to making an arcade stick. At time of writing, there's a
|
||||
couple pieces for a little stand for the stick, solely for vanity purposes.
|
||||
@@ -141,9 +145,9 @@ will probably save you around $5 of material, and you can probably decide what y
|
||||
|
||||
OpenSCAD pathing is relative to the current working directory by default, which is probably not the `src/` directory.
|
||||
When you start OpenSCAD, you must either start it from inside the project's `src/` directory, or point it at the path to
|
||||
the source files via e.g. `OPENSCADPATH=path/to/buildable-stick-system/src/` openscad`.
|
||||
the source files via e.g. `OPENSCADPATH=path/to/buildable-stick-system/src/ openscad`.
|
||||
|
||||
See https://en.wikibooks.org/wiki/OpenSCAD_User_Manual/Include_Statement.
|
||||
See <https://en.wikibooks.org/wiki/OpenSCAD_User_Manual/Include_Statement>.
|
||||
|
||||
## Miscellany
|
||||
|
||||
|
||||
@@ -10,9 +10,9 @@ 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-aux-button-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>
|
||||
use <plates/decorative-plate-24mm-button.scad>
|
||||
use <plates/decorative-plate-dir_arc-plus-w-30mm-and-sega-2p-nine.scad>
|
||||
use <plates/dustwasher-lsx-nobi.scad>
|
||||
|
||||
top_panel_color = "#5B6579";
|
||||
bottom_panel_color = "#8E9089";
|
||||
|
||||
@@ -5,14 +5,14 @@
|
||||
|
||||
include <parameters.scad>
|
||||
include <components.scad>
|
||||
use <frames/pieces/front-or-back-aux-and-neutrik.scad>
|
||||
use <frames/pieces/front-or-back-trapezoid.scad>
|
||||
use <frames/pieces/side-trapezoid-extended-to-front-trapezoid.scad>
|
||||
use <panels/inset/lever-and-dir_arc-plus-w-30mm-panel-with-oled.scad>
|
||||
use <panels/inset/sega-2p-nine-plus-aux-button-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>
|
||||
use <frames/pieces/front-or-back-trapezoid.scad>
|
||||
use <frames/pieces/front-or-back-aux-and-neutrik.scad>
|
||||
use <panels/inset/lever-and-ergo-wasd-five-panel-with-oled.scad>
|
||||
use <panels/inset/ergo-nine-plus-aux-button-with-mount.scad>
|
||||
use <plates/decorative-plate-24mm-button.scad>
|
||||
use <plates/decorative-plate-ergo-wasd-five-30mm-and-ergo-nine-30mm.scad>
|
||||
use <plates/dustwasher-lsx-nobi.scad>
|
||||
|
||||
top_panel_color = "#0086D6";
|
||||
bottom_panel_color = "white";
|
||||
@@ -21,17 +21,17 @@ frame_back_color = "white";
|
||||
frame_side_color = "yellow";
|
||||
top_deco_color = "white";
|
||||
|
||||
color(top_panel_color) translate([-panel_x/2, 0, frame_z/2-panel_z+0.01]) lever_and_dir_arc_w_30mm_panel_with_oled();
|
||||
color(top_panel_color) translate([panel_x/2, 0, frame_z/2-panel_z+0.01]) sega_2p_nine_plus_aux_button_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_front_color) translate([-frame_x/2+4, 0, -2.5]) front_or_back_trapezoid_frame_piece();
|
||||
color(frame_front_color) translate([frame_x/2-4, 0, -2.5]) front_or_back_trapezoid_frame_piece();
|
||||
color(frame_back_color) translate([-frame_x/2+4, 0, -2.5]) rotate([180, 0, 0]) front_or_back_aux_and_neutrik_frame_piece();
|
||||
color(frame_back_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_panel_color) translate([-panel_x/2, 0, frame_z/2-panel_z/2+0.001]) lever_and_ergo_wasd_five_panel_with_oled();
|
||||
color(top_panel_color) translate([panel_x/2, 0, frame_z/2-panel_z/2+0.001]) ergo_nine_plus_aux_button_panel_with_mount();
|
||||
color(frame_side_color) translate([-frame_x/2+4, 0, 0]) side_trapezoid_extended_to_front_frame_piece();
|
||||
color(frame_side_color) translate([frame_x/2-4, 0, 0]) mirror([1, 0, 0]) side_trapezoid_extended_to_front_frame_piece();
|
||||
color(frame_front_color) translate([-frame_x/2+4, 0, 0]) front_or_back_trapezoid_frame_piece();
|
||||
color(frame_front_color) translate([frame_x/2-4, 0, 0]) front_or_back_trapezoid_frame_piece();
|
||||
color(frame_back_color) translate([-frame_x/2+4, 0, 0]) rotate([180, 0, 0]) front_or_back_aux_and_neutrik_frame_piece();
|
||||
color(frame_back_color) translate([frame_x/2-4, 0, 0]) 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-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]) rotate([180, 0, 0]) lsx_nobi_dustwasher();
|
||||
color(top_deco_color) translate([panel_x-24, 30, 3+frame_z/2-panel_z]) button_24mm_decorative_plate();
|
||||
color(top_deco_color) translate([0, 0, 4+frame_z/2-panel_z/2+0.001]) ergo_wasd_five_30mm_and_ergo_nine_30mm_decorative_plate();
|
||||
color(top_deco_color) translate([-170, 25, 4+frame_z/2-panel_z/2+0.001]) lsx_nobi_dustwasher();
|
||||
color(top_deco_color) translate([panel_x-24, 30, 4+frame_z/2-panel_z/2+0.001]) button_24mm_decorative_plate();
|
||||
|
||||
@@ -10,7 +10,7 @@ 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>
|
||||
use <plates/dustwasher-jlf.scad>
|
||||
|
||||
top_panel_color = "#5B6579";
|
||||
bottom_panel_color = "#8E9089";
|
||||
|
||||
@@ -8,28 +8,28 @@ include <components.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-nine-plus-aux-button-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>
|
||||
use <panels/inset/lever-and-ergo-wasd-five-panel-with-oled.scad>
|
||||
use <panels/inset/ergo-nine-plus-aux-button-with-mount.scad>
|
||||
use <plates/decorative-plate-24mm-button.scad>
|
||||
use <plates/decorative-plate-ergo-wasd-five-30mm-and-ergo-nine-30mm.scad>
|
||||
use <plates/dustwasher-lsx-nobi.scad>
|
||||
|
||||
panel_color = "red";
|
||||
base_color = "gray";
|
||||
top_deco_color = "white";
|
||||
brace_color = "gray";
|
||||
|
||||
color(panel_color) translate([-panel_x/2, 0, frame_z/2-panel_z/2+0.001]) lever_and_dir_arc_w_30mm_panel();
|
||||
color(panel_color) translate([panel_x/2, 0, frame_z/2-panel_z/2+0.001]) sega_2p_nine_plus_aux_button_with_mount();
|
||||
color(panel_color) translate([-panel_x/2, 0, frame_z/2-panel_z/2+0.001]) lever_and_ergo_wasd_five_panel_with_oled();
|
||||
color(panel_color) translate([panel_x/2, 0, frame_z/2-panel_z/2+0.001]) ergo_nine_plus_aux_button_panel_with_mount();
|
||||
color(base_color) translate([panel_x/2, 0, 0]) rotate([0, 180, 0]) side_frame_piece();
|
||||
color(base_color) translate([-panel_x/2, 0, 0]) side_frame_piece();
|
||||
color(base_color) translate([panel_x/2, 0, 0]) front_or_back_frame_piece();
|
||||
color(base_color) translate([-panel_x/2, 0, 0]) front_or_back_frame_piece();
|
||||
color(base_color) translate([panel_x/2, 0, 0]) clean_edge_front_or_back_frame_piece();
|
||||
color(base_color) translate([-panel_x/2, 0, 0]) clean_edge_front_or_back_frame_piece();
|
||||
color(base_color) translate([panel_x/2, 0, 0]) rotate([180, 180, 0]) front_or_back_aux_and_neutrik_frame_piece();
|
||||
color(base_color) translate([-panel_x/2, 0, 0]) rotate([180, 0, 0]) front_or_back_aux_and_neutrik_frame_piece();
|
||||
color(base_color) translate([-panel_x/2, 0, -frame_z/2+panel_z/2]) panel();
|
||||
color(base_color) translate([panel_x/2, 0, -frame_z/2+panel_z/2]) panel();
|
||||
/* color(base_color) translate([-panel_x/2, 0, -frame_z/2+panel_z/2]) panel(); */
|
||||
/* color(base_color) translate([panel_x/2, 0, -frame_z/2+panel_z/2]) panel(); */
|
||||
|
||||
color(top_deco_color) translate([0, 0, 4+frame_z/2-panel_z/2+0.001]) dir_arc_plus_w_30mm_and_sega_2p_nine_decorative_plate();
|
||||
color(top_deco_color) translate([-170, 20, 4+frame_z/2-panel_z/2+0.001]) lsx_nobi_dustwasher();
|
||||
color(top_deco_color) translate([0, 0, 4+frame_z/2-panel_z/2+0.001]) ergo_wasd_five_30mm_and_ergo_nine_30mm_decorative_plate();
|
||||
color(top_deco_color) translate([-170, 25, 4+frame_z/2-panel_z/2+0.001]) lsx_nobi_dustwasher();
|
||||
color(top_deco_color) translate([panel_x-24, 30, 4+frame_z/2-panel_z/2+0.001]) button_24mm_decorative_plate();
|
||||
|
||||
@@ -12,14 +12,14 @@ 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-nine-plus-aux-button-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-nine.scad>
|
||||
use <misc/dustwasher-lsx-nobi.scad>
|
||||
use <plates/decorative-plate-24mm-button.scad>
|
||||
use <plates/decorative-plate-dir_arc-plus-w-30mm-and-sega-2p-nine.scad>
|
||||
use <plates/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_nine_plus_aux_button_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-25, -55, -2.5]) clean_edge_front_or_back_frame_piece();
|
||||
color("black") rotate([0, 180, 0]) translate([-frame_x/2+5-25, -55, -2.5]) clean_edge_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();
|
||||
|
||||
@@ -27,17 +27,17 @@ The pieces you need to print (all colors to your taste):
|
||||
The above gets you the basics. Some common things you may also want:
|
||||
|
||||
* **Mounting Neutrik connectors:** Neutrik D connectors can mount flush to the inside of the frame, but you can choose
|
||||
to have a little decorative plate (`misc/neutrik-d-plate.stl` for added depth or color choices on the outside of the
|
||||
to have a little decorative plate (`plates/neutrik-d-plate.stl` for added depth or color choices on the outside of the
|
||||
frame, if you'd like.
|
||||
* **Mounting a 24mm switch:** a rocker switch can also be mounted in the Neutrik D connector, but it needs to be placed
|
||||
into a `misc/neutrik-d-plate-24mm-hole.stl` plate, and the plate mounted to the frame.
|
||||
into a `plates/neutrik-d-plate-24mm-hole.stl` plate, and the plate mounted to the frame.
|
||||
* **Flair for the auxillary buttons:** the three buttons in a row on the back of the frame can also get some style, just
|
||||
place a `misc/decorative-plate-aux-control-three-button-cluster.stl` between the buttons and the frame. This only
|
||||
place a `plates/decorative-plate-aux-control-three-button-cluster.stl` between the buttons and the frame. This only
|
||||
works for screw-in buttons.
|
||||
* **Flair for the top buttons:** same as above, a decorative plate for top panel layouts --- e.g.
|
||||
`misc/decorative-plate-sega-2p.stl` --- can be sandwiched between the buttons and panel to add some style. This also
|
||||
`plates/decorative-plate-sega-2p.stl` --- can be sandwiched between the buttons and panel to add some style. This also
|
||||
only tends to work on screw-in buttons.
|
||||
* **Dustwashers/flair:** same deal, if you want to print one, use e.g. `misc/dustwasher-jlf.stl`.
|
||||
* **Dustwashers/flair:** same deal, if you want to print one, use e.g. `plates/dustwasher-jlf.stl`.
|
||||
|
||||
## Putting a BSS Stick Together
|
||||
|
||||
@@ -53,9 +53,9 @@ following is the most consistent way I've found to put one together.
|
||||
overall assembly works with your components, so again get your buttons, lever, etc., in place. You can secure them at
|
||||
this point.
|
||||
1. If you are using a button decorative plate that spans two panels --- e.g.
|
||||
`misc/decorative-plate-dir_arc-plus-w-30mm-and-sega-2p-plus-one` --- take care to align the two panels as tightly
|
||||
`plates/decorative-plate-dir_arc-plus-w-30mm-and-sega-2p-plus-one` --- take care to align the two panels as tightly
|
||||
as possible, and accurately, as they will be hard to adjust once everything is secured and in the frame.
|
||||
2. If using a lever, don't forget the lever mount spacer --- `misc/lever-mount-sanwa-seimitsu` --- if you want it,
|
||||
2. If using a lever, don't forget the lever mount spacer --- `plates/lever-mount-sanwa-seimitsu` --- if you want it,
|
||||
and tighten those mounting bolts now as well.
|
||||
3. Create the frame box by combining your frame piece parts, box or extended, together. This will be relatively stable
|
||||
just via friction fit.
|
||||
|
||||
@@ -510,6 +510,82 @@ module sega_2p_eleven() {
|
||||
translate([sega_2p_column_5_offset, -19-9-11, 0]) sega_2p_p1();
|
||||
}
|
||||
|
||||
// BSS ERGO - 30mm
|
||||
|
||||
module wasd_30mm() {
|
||||
button_30mm_hole(); // W
|
||||
translate([0, -36, 0]) button_30mm_hole(); // S
|
||||
translate([-34.5, -36-9, 0]) button_30mm_hole(); // A
|
||||
translate([34.5, -36-9, 0]) button_30mm_hole(); // D
|
||||
}
|
||||
|
||||
module wasd_six_30mm() {
|
||||
wasd_30mm();
|
||||
translate([-34.5, -9, 0]) button_30mm_hole(); // left of W
|
||||
translate([34.5, -9, 0]) button_30mm_hole(); // right of W
|
||||
}
|
||||
|
||||
module wasd_eight_30mm() {
|
||||
wasd_six_30mm();
|
||||
translate([34.5*1.9, -9*3, 0]) button_30mm_hole(); // top right of right of W
|
||||
translate([34.5*1.9, -36-9*3, 0]) button_30mm_hole(); // right of D
|
||||
}
|
||||
|
||||
module ergo_wasd_five_30mm() {
|
||||
translate([-51.75, 65.5, 0]) rotate([0, 0, 10]) {
|
||||
wasd_30mm();
|
||||
}
|
||||
translate([0, 0, 0]) sega_2p_nine_thumb_button();
|
||||
}
|
||||
|
||||
module ergo_wasd_seven_30mm() {
|
||||
translate([-51.75, 65.5, 0]) rotate([0, 0, 10]) {
|
||||
wasd_six_30mm();
|
||||
}
|
||||
translate([0, 0, 0]) sega_2p_nine_thumb_button();
|
||||
}
|
||||
|
||||
module ergo_nine_30mm() {
|
||||
translate([-51.75, 65.5, 0]) rotate([0, 0, 10]) {
|
||||
wasd_eight_30mm();
|
||||
}
|
||||
translate([0, 0, 0]) sega_2p_nine_thumb_button();
|
||||
}
|
||||
|
||||
// BSS ERGO - 24mm
|
||||
module wasd_24mm() {
|
||||
button_24mm_hole(); // W
|
||||
translate([0, -27, 0]) button_24mm_hole(); // S
|
||||
translate([-26, -27-7, 0]) button_24mm_hole(); // A
|
||||
translate([26, -27-7, 0]) button_24mm_hole(); // D
|
||||
}
|
||||
|
||||
module wasd_six_24mm() {
|
||||
wasd_24mm();
|
||||
translate([-26, -7, 0]) button_24mm_hole(); // left of W
|
||||
translate([26, -7, 0]) button_24mm_hole(); // right of W
|
||||
}
|
||||
|
||||
module wasd_eight_24mm() {
|
||||
wasd_six_24mm();
|
||||
translate([26*2-2, -7*3, 0]) button_24mm_hole(); // top right of right of W
|
||||
translate([26*2-2, -27-7*3, 0]) button_24mm_hole(); // top right of right of W
|
||||
}
|
||||
|
||||
module ergo_wasd_five_24mm() {
|
||||
translate([-63.25, 65.5, 0]) rotate([0, 0, 10]) {
|
||||
wasd_24mm();
|
||||
}
|
||||
translate([0, 0, 0]) sega_2p_nine_thumb_button();
|
||||
}
|
||||
|
||||
module ergo_nine_24mm() {
|
||||
translate([-63.25, 65.5, 0]) rotate([0, 0, 10]) {
|
||||
wasd_eight_24mm();
|
||||
}
|
||||
translate([0, 0, 0]) sega_2p_nine_thumb_button();
|
||||
}
|
||||
|
||||
module shiokenstar() {
|
||||
translate([-172, 32, 0]) dir_arc_24mm_directionals();
|
||||
sega_2p();
|
||||
|
||||
@@ -10,7 +10,7 @@ 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();
|
||||
clean_edge_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);
|
||||
}
|
||||
|
||||
@@ -9,7 +9,7 @@ use <front-or-back.scad>
|
||||
|
||||
module front_or_back_aux_and_neutrik_frame_piece() {
|
||||
difference() {
|
||||
front_or_back_frame_piece();
|
||||
clean_edge_front_or_back_frame_piece();
|
||||
|
||||
// aux button holes
|
||||
translate([-35.25, -101.5, 0]) rotate([90, 0, 0]) aux_control_three_button_cluster();
|
||||
|
||||
@@ -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_frame_piece();
|
||||
scale([1, 1, inner_frame_z_decorative_scale]) clean_edge_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)
|
||||
|
||||
@@ -17,7 +17,7 @@ module clean_front_or_back() {
|
||||
|
||||
module bottom_piece_wall() {
|
||||
// get a slice of the piece (before the bevel), to use it in extruding
|
||||
projection(cut=true) rotate([-90, 0, 0]) translate([0, frame_y/2-(frame_wall-frame_bevel_height)*3/2, 0])
|
||||
projection(cut=true) rotate([-90, 0, 0]) translate([0, frame_y/2-frame_wall+0.01, 0])
|
||||
clean_front_or_back();
|
||||
}
|
||||
|
||||
@@ -25,12 +25,12 @@ module bottom_piece_extension() {
|
||||
// combine the original with a shrunken piece to "pull" the wall out
|
||||
hull() {
|
||||
linear_extrude(height=frame_extension_y) scale([1, 0.5, 1]) bottom_piece_wall();
|
||||
linear_extrude(height=(frame_wall-frame_bevel_height)) bottom_piece_wall();
|
||||
linear_extrude(height=frame_wall) bottom_piece_wall();
|
||||
}
|
||||
}
|
||||
|
||||
module front_or_back_trapezoid_frame_piece() {
|
||||
clean_front_or_back();
|
||||
clean_edge_front_or_back_frame_piece();
|
||||
translate([0, -frame_y/2+frame_wall, 0]) rotate([90, 0, 0]) bottom_piece_extension();
|
||||
}
|
||||
|
||||
|
||||
@@ -21,7 +21,7 @@ module backslashes() {
|
||||
|
||||
module backslashes_windowed_front_or_back_frame_piece() {
|
||||
difference() {
|
||||
front_or_back_frame_piece();
|
||||
clean_edge_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
|
||||
@@ -29,12 +29,4 @@ module backslashes_windowed_front_or_back_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();
|
||||
backslashes_windowed_front_or_back_frame_piece();
|
||||
|
||||
@@ -11,7 +11,7 @@ use <front-or-back-windowed-backslashes.scad>
|
||||
|
||||
module forwardslashes_windowed_front_or_back_frame_piece() {
|
||||
difference() {
|
||||
front_or_back_frame_piece();
|
||||
clean_edge_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,12 +19,4 @@ module forwardslashes_windowed_front_or_back_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();
|
||||
forwardslashes_windowed_front_or_back_frame_piece();
|
||||
|
||||
@@ -22,7 +22,7 @@ module front_horiz_stripes() {
|
||||
|
||||
module horiz_striped_windowed_front_or_back_frame_piece() {
|
||||
difference() {
|
||||
front_or_back_frame_piece();
|
||||
clean_edge_front_or_back_frame_piece();
|
||||
// subtract frame wall windows
|
||||
front_horiz_stripes();
|
||||
// subtract the inner wall area that will be provided by the other piece
|
||||
|
||||
@@ -16,7 +16,7 @@ module front_or_back_window() {
|
||||
|
||||
module windowed_front_or_back_frame_piece() {
|
||||
difference() {
|
||||
front_or_back_frame_piece();
|
||||
clean_edge_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
|
||||
|
||||
@@ -8,8 +8,8 @@ include <components.scad>
|
||||
use <frames/complete/left-frame.scad>
|
||||
use <side.scad>
|
||||
|
||||
piece_width = panel_support_width+frame_wall+frame_mount_column_width;
|
||||
module front_or_back_frame_piece() {
|
||||
piece_width = panel_support_width+frame_wall+frame_mount_column_width;
|
||||
intersection() {
|
||||
left_frame();
|
||||
difference() {
|
||||
@@ -22,4 +22,21 @@ module front_or_back_frame_piece() {
|
||||
}
|
||||
}
|
||||
|
||||
front_or_back_frame_piece();
|
||||
// there's something with the print quality/slicing where a couple layers
|
||||
// around the hex hole get fat in the walls, making this not flush with a
|
||||
// sibling piece. this removal makes it so the pieces don't touch
|
||||
// HOWEVER, the side piece uses front_or_back_frame_piece() as a difference,
|
||||
// so if we removed the little chop from that piece, it'd make the
|
||||
// side_frame_piece() bigger, defeating the purpose, so what we'll actually
|
||||
// print is this one and there'll be a little gap in between as desired
|
||||
//
|
||||
// front/back pieces that build on this shape should inherit from clean_edge_
|
||||
module clean_edge_front_or_back_frame_piece() {
|
||||
difference() {
|
||||
front_or_back_frame_piece();
|
||||
translate([panel_x/2, -(panel_y/2-15), 0]) cube([5, 30, inner_frame_z*2], center=true);
|
||||
translate([-panel_x/2, -(panel_y/2-15), 0]) cube([5, 30, inner_frame_z*2], center=true);
|
||||
}
|
||||
}
|
||||
|
||||
clean_edge_front_or_back_frame_piece();
|
||||
|
||||
@@ -11,18 +11,15 @@ use <front-or-back-trapezoid.scad>
|
||||
|
||||
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
|
||||
projection(cut=true) rotate([0, 90, 0]) translate([frame_x/2-frame_wall-(frame_bevel_height/2), 0, 0])
|
||||
left_frame();
|
||||
projection(cut=true) translate([0, -frame_y/2+frame_wall, 0]) rotate([90, 90, 0]) bottom_piece_extension();
|
||||
projection(cut=true) rotate([0, 90, 0]) translate([frame_x/2-frame_wall+0.01, 0, 0]) side_frame_piece();
|
||||
projection(cut=true) translate([0, -frame_y/2+frame_wall+0.01, 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_bevel_height) side_and_bottom_frame_piece_wall();
|
||||
linear_extrude(height=frame_wall) side_and_bottom_frame_piece_wall();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -32,7 +29,7 @@ module side_trapezoid_extended_to_front_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();
|
||||
translate([-frame_x/2+frame_wall, 0, 0]) rotate([0, -90, 0]) side_and_bottom_frame_piece_extension();
|
||||
}
|
||||
|
||||
side_trapezoid_extended_to_front_frame_piece();
|
||||
|
||||
@@ -10,17 +10,14 @@ 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();
|
||||
projection(cut=true) rotate([0, 90, 0]) translate([frame_x/2-frame_wall+0.01, 0, 0]) side_frame_piece();
|
||||
}
|
||||
|
||||
module side_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.85, 1]) side_frame_piece_wall();
|
||||
linear_extrude(height=frame_bevel_height) side_frame_piece_wall();
|
||||
linear_extrude(height=frame_wall) side_frame_piece_wall();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -30,7 +27,7 @@ module side_trapezoid_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();
|
||||
translate([-frame_x/2+frame_wall, 0, 0]) rotate([0, -90, 0]) side_frame_piece_extension();
|
||||
}
|
||||
|
||||
side_trapezoid_frame_piece();
|
||||
|
||||
15
src/panels/inset/ergo-nine-plus-aux-button-with-mount.scad
Normal file
15
src/panels/inset/ergo-nine-plus-aux-button-with-mount.scad
Normal file
@@ -0,0 +1,15 @@
|
||||
/*
|
||||
* SPDX-FileCopyrightText: © 2025 Brian S. Stephan <bss@incorporeal.org>
|
||||
* SPDX-License-Identifier: GPL-3.0-or-later
|
||||
*/
|
||||
|
||||
include <parameters.scad>
|
||||
include <components.scad>
|
||||
use <ergo-nine-plus-aux-button.scad>
|
||||
|
||||
module ergo_nine_plus_aux_button_panel_with_mount() {
|
||||
ergo_nine_plus_aux_button_panel();
|
||||
translate([20, -50, -(panel_z/2) - 3]) pcb_mount();
|
||||
}
|
||||
|
||||
ergo_nine_plus_aux_button_panel_with_mount();
|
||||
17
src/panels/inset/ergo-nine-plus-aux-button.scad
Normal file
17
src/panels/inset/ergo-nine-plus-aux-button.scad
Normal file
@@ -0,0 +1,17 @@
|
||||
/*
|
||||
* SPDX-FileCopyrightText: © 2025 Brian S. Stephan <bss@incorporeal.org>
|
||||
* SPDX-License-Identifier: GPL-3.0-or-later
|
||||
*/
|
||||
|
||||
include <parameters.scad>
|
||||
include <components.scad>
|
||||
|
||||
module ergo_nine_plus_aux_button_panel() {
|
||||
difference() {
|
||||
panel();
|
||||
ergo_nine_30mm();
|
||||
translate([89, 30, 0]) button_24mm_hole();
|
||||
}
|
||||
}
|
||||
|
||||
ergo_nine_plus_aux_button_panel();
|
||||
@@ -0,0 +1,18 @@
|
||||
/*
|
||||
* SPDX-FileCopyrightText: © 2025 Brian S. Stephan <bss@incorporeal.org>
|
||||
* SPDX-License-Identifier: GPL-3.0-or-later
|
||||
*/
|
||||
|
||||
include <parameters.scad>
|
||||
include <components.scad>
|
||||
use <lever-and-ergo-wasd-five-panel.scad>
|
||||
|
||||
module lever_and_ergo_wasd_five_panel_with_oled() {
|
||||
difference() {
|
||||
lever_and_ergo_wasd_five_panel();
|
||||
translate([0, -(panel_y/2 - 22), 0]) adafruit_pid_326_oled_ssd1306_mount_cutout();
|
||||
}
|
||||
translate([0, -(panel_y/2 - 22), 0]) adafruit_pid_326_oled_ssd1306_mount();
|
||||
}
|
||||
|
||||
lever_and_ergo_wasd_five_panel_with_oled();
|
||||
18
src/panels/inset/lever-and-ergo-wasd-five-panel.scad
Normal file
18
src/panels/inset/lever-and-ergo-wasd-five-panel.scad
Normal file
@@ -0,0 +1,18 @@
|
||||
/*
|
||||
* SPDX-FileCopyrightText: © 2025 Brian S. Stephan <bss@incorporeal.org>
|
||||
* SPDX-License-Identifier: GPL-3.0-or-later
|
||||
*/
|
||||
|
||||
include <parameters.scad>
|
||||
include <components.scad>
|
||||
|
||||
module lever_and_ergo_wasd_five_panel() {
|
||||
difference() {
|
||||
panel();
|
||||
mirror([1, 0, 0]) ergo_wasd_five_30mm();
|
||||
translate([(-panel_x/2)+55, (panel_y/2)-75, 0]) levermountholes();
|
||||
translate([(-panel_x/2)+55, (panel_y/2)-75, 0]) levermountcountersinks();
|
||||
}
|
||||
}
|
||||
|
||||
lever_and_ergo_wasd_five_panel();
|
||||
@@ -10,7 +10,7 @@ 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();
|
||||
translate([20, -50, -(panel_z/2) - 3]) pcb_mount();
|
||||
}
|
||||
|
||||
sega_2p_eleven_panel_with_mount();
|
||||
|
||||
@@ -9,7 +9,7 @@ use <sega-2p-nine-plus-aux-button.scad>
|
||||
|
||||
module sega_2p_nine_plus_aux_button_with_mount() {
|
||||
sega_2p_nine_plus_aux_button();
|
||||
translate([30, -50, -(panel_z/2) - 3]) pcb_mount();
|
||||
translate([20, -50, -(panel_z/2) - 3]) pcb_mount();
|
||||
}
|
||||
|
||||
sega_2p_nine_plus_aux_button_with_mount();
|
||||
|
||||
@@ -9,7 +9,7 @@ use <right-sega-2p-nine-panel.scad>
|
||||
|
||||
module sega_2p_nine_with_mount_right_overhang_panel() {
|
||||
sega_2p_nine_right_overhang_panel();
|
||||
translate([30, -50, -(panel_z/2) - 3]) pcb_mount();
|
||||
translate([20, -50, -(panel_z/2) - 3]) pcb_mount();
|
||||
}
|
||||
|
||||
sega_2p_nine_with_mount_right_overhang_panel();
|
||||
|
||||
@@ -9,7 +9,7 @@ use <right-sega-2p-nine-plus-aux-button.scad>
|
||||
|
||||
module sega_2p_nine_plus_aux_button_right_overhang_panel_with_mount() {
|
||||
sega_2p_nine_plus_aux_button_right_overhang_panel();
|
||||
translate([30, -50, -(panel_z/2) - 3]) pcb_mount();
|
||||
translate([20, -50, -(panel_z/2) - 3]) pcb_mount();
|
||||
}
|
||||
|
||||
sega_2p_nine_plus_aux_button_right_overhang_panel_with_mount();
|
||||
|
||||
@@ -74,7 +74,7 @@ frame_extension_y = 25;
|
||||
|
||||
// this sinks the bottom and top of the frame inward a bit, and is used to math out two shapes
|
||||
// when creating the frame box / overhang panel
|
||||
frame_bevel_height = 2;
|
||||
frame_bevel_height = 1.25;
|
||||
overhang_panel_bevel_height = 1;
|
||||
|
||||
frame_center_to_neutrik = 70;
|
||||
|
||||
24
src/plates/decorative-plate-ergo-nine-30mm-plate.scad
Normal file
24
src/plates/decorative-plate-ergo-nine-30mm-plate.scad
Normal file
@@ -0,0 +1,24 @@
|
||||
/* Decorative plate for ergo action buttons.
|
||||
*
|
||||
* SPDX-FileCopyrightText: © 2025 Brian S. Stephan <bss@incorporeal.org>
|
||||
* SPDX-License-Identifier: GPL-3.0-or-later
|
||||
*/
|
||||
|
||||
include <parameters.scad>
|
||||
decorative_radius_scale = 1.5;
|
||||
include <components.scad>
|
||||
|
||||
module ergo_nine_30mm_plate_decorative_plate() {
|
||||
difference() {
|
||||
hull() difference() {
|
||||
// get a 2mm slice of the decorative button cylinders
|
||||
translate([0, 0, -50]) ergo_nine_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([0, 0, -1]) ergo_nine_30mm();
|
||||
}
|
||||
}
|
||||
|
||||
ergo_nine_30mm_plate_decorative_plate();
|
||||
@@ -0,0 +1,24 @@
|
||||
/*
|
||||
* SPDX-FileCopyrightText: © 2025 Brian S. Stephan <bss@incorporeal.org>
|
||||
* SPDX-License-Identifier: GPL-3.0-or-later
|
||||
*/
|
||||
|
||||
include <parameters.scad>
|
||||
include <components.scad>
|
||||
|
||||
module ergo_wasd_five_30mm_and_ergo_nine_30mm_decorative_plate() {
|
||||
difference() {
|
||||
// get a 2mm slice of the jumbo decorative button cylinders
|
||||
union() {
|
||||
translate([-panel_x/2, 0, -70]) mirror([1, 0, 0]) ergo_wasd_five_30mm();
|
||||
translate([panel_x/2, 0, -70]) ergo_nine_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]) mirror([1, 0, 0]) ergo_wasd_five_30mm();
|
||||
translate([panel_x/2, 0, -1]) ergo_nine_30mm();
|
||||
}
|
||||
}
|
||||
|
||||
ergo_wasd_five_30mm_and_ergo_nine_30mm_decorative_plate();
|
||||
24
src/plates/decorative-plate-ergo-wasd-five-30mm-plate.scad
Normal file
24
src/plates/decorative-plate-ergo-wasd-five-30mm-plate.scad
Normal file
@@ -0,0 +1,24 @@
|
||||
/* Decorative plate for ergo WASD directional buttons.
|
||||
*
|
||||
* SPDX-FileCopyrightText: © 2025 Brian S. Stephan <bss@incorporeal.org>
|
||||
* SPDX-License-Identifier: GPL-3.0-or-later
|
||||
*/
|
||||
|
||||
include <parameters.scad>
|
||||
decorative_radius_scale = 1.5;
|
||||
include <components.scad>
|
||||
|
||||
module ergo_wasd_five_30mm_plate_decorative_plate() {
|
||||
difference() {
|
||||
hull() difference() {
|
||||
// get a 2mm slice of the decorative button cylinders
|
||||
translate([0, 0, -50]) ergo_wasd_seven_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([0, 0, -1]) ergo_wasd_five_30mm();
|
||||
}
|
||||
}
|
||||
|
||||
ergo_wasd_five_30mm_plate_decorative_plate();
|
||||
Reference in New Issue
Block a user