Compare commits
59 Commits
v4.5.0
...
aa92e57fe0
| Author | SHA1 | Date | |
|---|---|---|---|
|
aa92e57fe0
|
|||
|
0d121e834a
|
|||
|
d187312cd3
|
|||
|
4c045951c7
|
|||
|
bcf2adcaa2
|
|||
|
5e25a27d58
|
|||
|
462b4d45e0
|
|||
|
b0e5082064
|
|||
|
6df2d7a84f
|
|||
|
ef32076d98
|
|||
|
d9d1183488
|
|||
|
fe8826d86f
|
|||
|
8b96f60f37
|
|||
|
5675921875
|
|||
|
d70ccf6491
|
|||
|
432e6e74d5
|
|||
|
1e64f59134
|
|||
|
a4f2650f00
|
|||
|
c9a74ebb18
|
|||
|
0d8f74bef8
|
|||
|
29fb93ee51
|
|||
|
4564f29ef1
|
|||
|
29b7f4a828
|
|||
|
15acfdcef4
|
|||
|
b457441e9f
|
|||
|
5cdac31eeb
|
|||
|
a0fe108471
|
|||
|
4405c299b0
|
|||
|
3c1dadc917
|
|||
|
665674367c
|
|||
|
579d943268
|
|||
|
b5805b1e66
|
|||
|
c19542bb66
|
|||
|
84fb2876ad
|
|||
|
3ca41bdb47
|
|||
|
03737e2385
|
|||
|
ef68dbca48
|
|||
|
4336098fe8
|
|||
|
a67c3a3d7f
|
|||
|
950346f85a
|
|||
|
c99a18d30f
|
|||
|
3153564ad4
|
|||
|
0129cf6ce6
|
|||
|
c79427052e
|
|||
|
623118b627
|
|||
|
aff6efebb3
|
|||
|
f3d0d4b6e2
|
|||
|
97a6f52e07
|
|||
|
ecc3ffbb54
|
|||
|
73b55861b6
|
|||
|
439333c154
|
|||
|
ef16559b95
|
|||
|
2880018913
|
|||
|
ca928932ba
|
|||
|
8b4cc0b182
|
|||
|
a6b5d77671
|
|||
|
fa05469e19
|
|||
|
9375a3a1b7
|
|||
|
1557021be4
|
68
CHANGELOG.md
68
CHANGELOG.md
@@ -2,6 +2,74 @@
|
||||
|
||||
Included is a summary of changes to the project, by version. Details can be found in the commit history.
|
||||
|
||||
## v4.7.1
|
||||
|
||||
### Fixes
|
||||
|
||||
* Hull-based decorative plates were accidentally grown in v4.7.0 due to ye olde refactoring. They are back to the
|
||||
dimensions they should be (give or take) because there was an underlying bug in how they were geometried pre-v4.7.1.
|
||||
* The docs/ directory in the build now includes the images referred to, especially in the README.
|
||||
|
||||
### Miscellaneous
|
||||
|
||||
* Some README tweaks, including another demonstrative photo.
|
||||
* The build creates both a ZIP of everything, including docs, for humans to download, and also a ZIP of *just* the STLs,
|
||||
to ease uploading to Printables.
|
||||
|
||||
## v4.7.0
|
||||
|
||||
### Features
|
||||
|
||||
* Inner wall pieces where the horizontal stripes jut through the horizontal stripe windows have been added, these look
|
||||
decent and avoid the outer wall feeling extremely flimsy. This piece uses a "longish" front/back piece which isn't
|
||||
retained as a separate piece, because the latter is not meant to be printed itself.
|
||||
* I somehow went this whole time without creating a simple Sega 2P layout panel and decorative plate; those have been
|
||||
added.
|
||||
* Prototype (still literally a bit rough) braces for the corners and middle have been added. These pieces cover up the
|
||||
seams of the frame, and add some visual depth and distinction, but are not for everyone. YMMV.
|
||||
* A new "superplate" of the "directional arc + W" plus "sega 2P nine" layouts combined has been added, this is a piece I
|
||||
ended up not using in a build, but it functions as well as any of the plates, so why not.
|
||||
|
||||
### Improvements
|
||||
|
||||
* Visible round edges have been made more round.
|
||||
* The single-24mm-button decorative disc has been shrunk a bit, since (IMO) it stood out a bit too much relative to the
|
||||
button.
|
||||
* The "longish" extended side has been made a bit simpler to construct.
|
||||
* The side piece construction has been reworked, making it a bit simpler to construct and reducing the build complexity,
|
||||
though preview mode still complains about 2-manifold errors.
|
||||
* The assembly documentation has been cleaned up, with more pieces explained a bit better as well.
|
||||
* Dustwashers got some small updates to shrink the size of the disc to the normal JLF dustwasher size, and to fit the
|
||||
shaft a bit tighter without obstructing the lever's ability to... be a lever.
|
||||
|
||||
### Miscellaneous
|
||||
|
||||
* The build has been improved to error when there are issues in the .scad files, to keep me from making bad packages.
|
||||
* The back pieces are aligned properly in the all together demo.
|
||||
* Updates to the docs on my preferred printing settings.
|
||||
* README updates following the previous releases' reorganizations.
|
||||
* Objects README update to add attribution to TheTrain.
|
||||
|
||||
## 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
|
||||
|
||||
6
Makefile
6
Makefile
@@ -3,11 +3,11 @@ all:
|
||||
mkdir -p ./build/docs
|
||||
cp ./README.md ./build/README.md
|
||||
cp ./docs/README-objects.md ./build/README-objects.md
|
||||
cp ./docs/assembly-and-tips.md ./build/docs/assembly-and-tips.md
|
||||
cp ./docs/printing-and-materials.md ./build/docs/printing-and-materials.md
|
||||
cp ./docs/* ./build/docs/
|
||||
cp ./LICENSE ./build/LICENSE
|
||||
cp ./CHANGELOG.md ./build/CHANGELOG.md
|
||||
pushd ./build; zip ./buildable-stick-system-`git describe --dirty`-stls.zip . -r; popd
|
||||
pushd ./build; zip ./buildable-stick-system-`git describe --dirty`-stls-and-docs.zip . -r; popd
|
||||
pushd ./build; zip ./buildable-stick-system-`git describe --dirty`-stls.zip extras frames misc panels -r; popd
|
||||
|
||||
clean:
|
||||
rm -rf ./build
|
||||
|
||||
44
README.md
44
README.md
@@ -1,6 +1,6 @@
|
||||
# The Buildable Stick System
|
||||
|
||||
Files for 3D printing an arcade stick.
|
||||
Files for 3D printing and building an arcade stick enclosure.
|
||||
|
||||
Have you ever wanted to conjure your own arcade stick out of the ether (well, plastic), or to prototype a new layout or
|
||||
design before sending it to a custom builder? Do you just love having your space filled with arcade stick enclosures,
|
||||
@@ -40,21 +40,17 @@ about what the types of parts are and how to use them:
|
||||
larger arcade sticks. They are simple to assemble, but you have fewer modularity/customization options, and they
|
||||
are harder to print because the physics of the material cooling will probably pull the corners up. They also need
|
||||
supports, since the top and bottom of the frame both have trays for panels to go into. Use at your own risk.
|
||||
* `pieces/`
|
||||
* `box/` --- these are the same four walls (generally speaking) as in the complete frames above, broken out into
|
||||
modular pieces to print separately. Because they are separate pieces, you can mix and match colors, and you
|
||||
can lay them all face down on the print surface for better adhesion and surface patterns. There are also
|
||||
variants here, the "windowed" pieces, for doing two-tone variants and that kind of thing.
|
||||
* `extended/` --- the frame walls are pulled out to create MCZ TE-style extended sides. Rather than getting a
|
||||
box look, you get a longer slab with nice bevels. These look nice, but slightly fiddily to print (and of
|
||||
course need more material) --- watch your surface adhesion.
|
||||
* `interconnect` --- complete frames are bolted to one another, but for frame pieces, there is an interconnect
|
||||
that stands in for the joined inner wall. You need this if you are combining multiple sets of walls, e.g. for
|
||||
a two-panel-long stick.
|
||||
* `pieces/` these are the same four walls (generally speaking) as in the complete frames above, broken out into
|
||||
modular pieces to print separately. Because they are separate pieces, you can mix and match colors, and you can
|
||||
lay them all face down on the print surface for better adhesion and surface patterns. There are also variants
|
||||
here, the "windowed" pieces, for doing two-tone variants and that kind of thing. There are also frame walls pulled
|
||||
out to create MCZ TE-style extended sides. There is an interconnect that stands in for the joined inner wall
|
||||
between boxes of the overall unit. You need this if you are combining multiple sets of walls, e.g. for a
|
||||
two-panel-long stick.
|
||||
* `panels/`
|
||||
* `inset/` --- various panels, all of the same size, that fit into and flush with the frame, making the arcade stick
|
||||
top or bottom. These work equally well with box or extended frames, and aside from using up a bit of the space
|
||||
inside the frame, come with no downsides --- they print easily and are a pretty simple shape to tweak and remix.
|
||||
top or bottom. Aside from using up a bit of the space for components inside the frame, come with no downsides ---
|
||||
they print easily and are a pretty simple shape to tweak and remix.
|
||||
* `overhang/` --- overhang panels have their plane extending over the edge of the frame, creating a bit of a
|
||||
sandwich look. This is mostly an aesthetic choice, but they sit higher in the frame as well, the main panel being
|
||||
over/under the frame rather than within it. This extra space is useful for taller levers. The only downside to
|
||||
@@ -69,6 +65,8 @@ about what the types of parts are and how to use them:
|
||||
* `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.
|
||||
* `bss-ae/` --- these are pieces for an arcade control panel that fits on the Qanba 2009. See the docs in that
|
||||
directory for details.
|
||||
|
||||
Feel free to request or contribute to more objects. Additional documentation regarding assembling the stick is available
|
||||
in `docs/assembly-and-tips.md`.
|
||||
@@ -76,7 +74,7 @@ in `docs/assembly-and-tips.md`.
|
||||
## Printing
|
||||
|
||||
These items all fit on a 256mm^2 print bed; I use a Bambu Lab P1P based on what I've learned from the
|
||||
OpenStickCommunity. Standard settings seem sufficiently sturdy, but see `docs/materials-and-printing.md` for more
|
||||
OpenStickCommunity. Standard settings seem sufficiently sturdy, but see `docs/printing-and-materials.md` for more
|
||||
thoughts and settings based on my tinkering with prints.
|
||||
|
||||
## Assembling
|
||||
@@ -137,6 +135,16 @@ Board, ~$60 for Sanwa buttons and a lever, and ~$20 for miscellaneous connectors
|
||||
full-featured controller with an open source foundation together for around $140. Reducing wall and infill settings
|
||||
will probably save you around $5 of material, and you can probably decide what you want to do from there.
|
||||
|
||||
## FAQ
|
||||
|
||||
### I get a bunch of warnings on not being able to include files when I open them in OpenSCAD, what do I do?
|
||||
|
||||
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`.
|
||||
|
||||
See <https://en.wikibooks.org/wiki/OpenSCAD_User_Manual/Include_Statement>.
|
||||
|
||||
## Miscellany
|
||||
|
||||
See the `/docs/` directory for more thoughts too scattered for this document.
|
||||
@@ -197,3 +205,9 @@ like the below should suffice in either electronic or printed form:
|
||||
|
||||
> This arcade stick is part of the Buildable Stick System, version X.Y.Z; the source code to this program is available
|
||||
> under the terms of the GNU General Public License, at [LINK].
|
||||
|
||||
## Gallery
|
||||
|
||||
More photos.
|
||||
|
||||

|
||||
|
||||
4
build.py
4
build.py
@@ -42,9 +42,11 @@ for root, dirs, files in os.walk('.'):
|
||||
stl_file = re.sub(r'\.scad$', '.stl', file)
|
||||
input_ = os.path.join(input_dir, file)
|
||||
output = os.path.join(output_dir, stl_file)
|
||||
cmd = f'openscad -o {output} {input_}'
|
||||
cmd = f'openscad --hardwarnings -o {output} {input_}'
|
||||
print(cmd)
|
||||
processes.append(subprocess.Popen(cmd.split(' ')))
|
||||
|
||||
for process in processes:
|
||||
process.wait()
|
||||
if process.returncode != 0:
|
||||
raise Exception(f"building {process.args} failed")
|
||||
|
||||
@@ -5,12 +5,11 @@
|
||||
|
||||
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-nine-plus-control-panel-with-mount.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>
|
||||
@@ -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_nine_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_aux_button_with_mount();
|
||||
color(frame_side_color) translate([-frame_x/2+4, 0, -2.5]) side_trapezoid_frame_piece();
|
||||
color(frame_side_color) translate([frame_x/2-4, 0, -2.5]) mirror([1, 0, 0]) side_trapezoid_frame_piece();
|
||||
color(frame_top_bottom_color) translate([-frame_x/2+4, 0, -2.5]) horiz_striped_windowed_front_or_back_frame_piece();
|
||||
color(frame_top_bottom_color) translate([frame_x/2-4, 0, -2.5]) horiz_striped_windowed_front_or_back_frame_piece();
|
||||
color(frame_top_bottom_color) translate([-frame_x/2+4, 0, -2.5]) rotate([180, 0, 0]) front_or_back_aux_and_neutrik_frame_piece();
|
||||
color(frame_top_bottom_color) translate([frame_x/2-4, 0, -2.5]) rotate([180, 180, 0]) front_or_back_aux_and_neutrik_frame_piece();
|
||||
color(bottom_panel_color) translate([-panel_x/2, 0, -5-frame_z/2+5]) panel();
|
||||
color(bottom_panel_color) translate([panel_x/2, 0, -5-frame_z/2+5]) panel();
|
||||
|
||||
/* color(top_deco_color) translate([0, 0, 3+frame_z/2-4]) dir_arc_plus_w_30mm_and_sega_2p_nine_decorative_plate_of_plates(); */
|
||||
color(top_deco_color) translate([0, 0, 3+frame_z/2-panel_z]) dir_arc_plus_w_30mm_and_sega_2p_nine_decorative_plate();
|
||||
color(top_deco_color) translate([-170, 20, 3+frame_z/2-panel_z]) lsx_nobi_dustwasher();
|
||||
color(top_deco_color) translate([panel_x-24, 30, 3+frame_z/2-panel_z]) button_24mm_decorative_plate();
|
||||
|
||||
@@ -5,32 +5,33 @@
|
||||
|
||||
include <parameters.scad>
|
||||
include <components.scad>
|
||||
use <frames/pieces/extended/front-or-back.scad>
|
||||
use <frames/pieces/extended/side-extended-to-front.scad>
|
||||
use <frames/pieces/extended/front-or-back-clean-for-extended-side-aux-and-neutrik.scad>
|
||||
use <panels/inset/lever-and-dir_arc-plus-w-30mm-panel.scad>
|
||||
use <panels/inset/sega-2p-nine-plus-control-panel-with-mount.scad>
|
||||
use <frames/pieces/side-trapezoid-extended-to-front-trapezoid.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 <misc/decorative-plate-24mm-button.scad>
|
||||
use <misc/decorative-plate-dir_arc-plus-w-30mm-and-sega-2p-nine.scad>
|
||||
use <misc/decorative-plate-ergo-wasd-five-30mm-and-ergo-nine-30mm.scad>
|
||||
use <misc/dustwasher-lsx-nobi.scad>
|
||||
|
||||
top_panel_color = "#5B6579";
|
||||
bottom_panel_color = "#8E9089";
|
||||
frame_top_bottom_color = "#8E9089";
|
||||
frame_side_color = "#8E9089";
|
||||
top_deco_color = "#8E9089";
|
||||
top_panel_color = "#0086D6";
|
||||
bottom_panel_color = "white";
|
||||
frame_front_color = "white";
|
||||
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();
|
||||
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]) 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(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]) 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();
|
||||
|
||||
@@ -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-front.scad>
|
||||
use <frames/pieces/extended/front-or-back-clean-for-extended-side-aux-and-neutrik.scad>
|
||||
use <frames/pieces/front-or-back-trapezoid.scad>
|
||||
use <frames/pieces/side-trapezoid-extended-to-front-trapezoid.scad>
|
||||
use <frames/pieces/front-or-back-aux-and-neutrik.scad>
|
||||
use <panels/inset/lever-and-dir_arc-plus-w-30mm-panel.scad>
|
||||
use <panels/inset/lever-and-sega-2p-6-button-panel-with-aux-with-mount.scad>
|
||||
use <misc/dustwasher-jlf.scad>
|
||||
@@ -19,10 +19,10 @@ frame_side_color = "#8E9089";
|
||||
top_deco_color = "#000000";
|
||||
|
||||
color(top_panel_color) translate([0, 0, frame_z/2-panel_z+0.01]) lever_and_sega_2p_6_button_panel_with_aux_with_mount();
|
||||
color(frame_side_color) translate([0, 0, -2.5]) extra_extended_left_or_right_frame_piece();
|
||||
color(frame_side_color) translate([0, 0, -2.5]) mirror([1, 0, 0]) extra_extended_left_or_right_frame_piece();
|
||||
color(frame_top_bottom_color) translate([0, 0, -2.5]) extended_front_or_back_frame_piece();
|
||||
color(frame_top_bottom_color) translate([0, 0, -2.5]) rotate([180, 0, 0]) front_or_back_aux_and_neutrik_box_frame_piece_for_extended_side();
|
||||
color(frame_side_color) translate([0, 0, -2.5]) side_trapezoid_extended_to_front_frame_piece();
|
||||
color(frame_side_color) translate([0, 0, -2.5]) mirror([1, 0, 0]) side_trapezoid_extended_to_front_frame_piece();
|
||||
color(frame_top_bottom_color) translate([0, 0, -2.5]) front_or_back_trapezoid_frame_piece();
|
||||
color(frame_top_bottom_color) translate([0, 0, -2.5]) rotate([180, 0, 0]) front_or_back_aux_and_neutrik_frame_piece();
|
||||
color(bottom_panel_color) translate([0, 0, -5-frame_z/2+5]) panel();
|
||||
|
||||
color(top_deco_color) translate([-65, 5, 3+frame_z/2-panel_z]) jlf_dustwasher();
|
||||
|
||||
@@ -5,30 +5,31 @@
|
||||
|
||||
include <parameters.scad>
|
||||
include <components.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 <panels/inset/lever-and-dir_arc-plus-w-30mm-panel.scad>
|
||||
use <panels/inset/sega-2p-nine-plus-control-panel-with-mount.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-ergo-wasd-five-panel-with-oled.scad>
|
||||
use <panels/inset/ergo-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/decorative-plate-ergo-wasd-five-30mm-and-ergo-nine-30mm.scad>
|
||||
use <misc/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+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_nine_plus_control_panel_with_mount();
|
||||
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]) 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]) 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(base_color) translate([-panel_x/2, 0, -2.5]) rotate([180, 180, 0]) front_or_back_aux_and_neutrik_box_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(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]) 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(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();
|
||||
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();
|
||||
|
||||
@@ -6,24 +6,24 @@
|
||||
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-nine-plus-control-panel-with-mount.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>
|
||||
|
||||
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_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_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-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])
|
||||
|
||||
@@ -28,6 +28,15 @@ details.
|
||||
You should have received a copy of the GNU General Public License along with the Buildable Stick System. If not, see
|
||||
<https://www.gnu.org/licenses/>.
|
||||
|
||||
### Lineage
|
||||
|
||||
Inspired by the incredible work of [TheTrain](https://github.com/TheTrainGoes) on the [OpenStickCommunity Fightstick
|
||||
Case](https://github.com/OpenStickCommunity/Hardware/tree/main/Fightstick%20Case), itself based on the incredible work
|
||||
by [Dash n'Mash](https://twitter.com/Dash_xx_Mash?s=20). Original work Copyright 2023 TheTrain, [licensed under CC BY
|
||||
4.0](https://creativecommons.org/licenses/by/4.0/).
|
||||
|
||||
Made possible by the amazing efforts of [slagcoin](https://www.slagcoin.com/).
|
||||
|
||||
### Distributing BSS Sticks
|
||||
|
||||
Under the terms of the GPLv3, you must inform the receiver of the "object code" of their rights under the GPLv3. This is
|
||||
|
||||
@@ -1,12 +1,48 @@
|
||||
# Assembly and Tips
|
||||
|
||||
Just some miscellaneous notes for any dear reader, or more likely, my own forgetful self.
|
||||
These are the parts you need and instructions for creating a simple two panel arcade stick. The end product is a
|
||||
rectangular prism roughly 18" long, with ample space for back buttons and enough top panel space for almost any layout
|
||||
you can imagine. There are more pieces and designs to experiment with, but this will get you an awesome "standard"
|
||||
build.
|
||||
|
||||
## Parts for a Basic Enclosure
|
||||
|
||||
The pieces you need to print (all colors to your taste):
|
||||
|
||||
* **The base frame:** `frame/pieces/front-or-back.stl` x2 + `frame/pieces/front-or-back-aux-and-neutrik.stl` x2 +
|
||||
`frame/pieces/interconnect.stl`. This creates a large "H" with six 24mm button holes and two Neutrik D holes on the
|
||||
back, which can mount USB connectors or rocker switches, or be covered if not used. All four of the front or back
|
||||
pieces connect to the interconnect piece, which creates one frame out of the individual pieces, and also adds some
|
||||
support to the center of the enclosure. The interconnect has a large hole that can either make wire routing easier, or
|
||||
leave space in the center for button layouts that span it.
|
||||
* **The frame sides:** `frame/pieces/side.stl` x2. These cap the "H", completing the overall frame.
|
||||
* **The top:** `panels/inset/[LAYOUTS].stl`. These panels go on the top of the frame and are where you mount all of your
|
||||
main buttons and levers and whatnot. There are a couple layouts whose panels are meant to be paired (e.g.
|
||||
`shiokenstar-left-panel.stl` and `shiokenstar-right-panel.stl`), but usually you simply pick a left panel (e.g.
|
||||
`lever-panel-with-mount.stl`) and right panel (e.g. `sega-2p-panel.stl`) based on what you want. Note that one of your
|
||||
choices should be "with mount", which is where the usually-sized PCB will screw into inside the box.
|
||||
* **The bottom:** `panels/inset/panel.stl` x2. Other than being the color of your choice, these just close the box.
|
||||
You could put foam pads or something on these if you wanted.
|
||||
|
||||
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
|
||||
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.
|
||||
* **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
|
||||
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
|
||||
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`.
|
||||
|
||||
## Putting a BSS Stick Together
|
||||
|
||||
Assembly of a stick is pretty straightforward, but there are some choices that can make it easier or harder. The
|
||||
following is the most consistent way I've found to put one together. This is assuming a v4.2 or beyond stick, with two
|
||||
panels to make a long standard stick, and the frame made of pieces.
|
||||
following is the most consistent way I've found to put one together.
|
||||
|
||||
1. Prepare the frame pieces: this is your best shot to get the e.g. Neutrik plates for the USB mount, SPDT switches, etc.
|
||||
installed, so do it now, and give them a good tighten. You shouldn't need to adjust these again, so finish their
|
||||
@@ -34,19 +70,3 @@ panels to make a long standard stick, and the frame made of pieces.
|
||||
|
||||
In the end, this should be extremely sturdy. None of the frame or panels should be loose at all, and you should be able
|
||||
to move, flip, gently toss, etc. the stick without anything moving or feeling loose.
|
||||
|
||||
## Removing Inset Panels
|
||||
|
||||
As of v4.1 (or in v3), the top and bottom inset panels both insert into the frame, inside the frame "lip", meaning that
|
||||
when everything is put together, they create a flush surface (more or less). This can make them hard to get out, as you
|
||||
can't grab anything to get any leverage, and especially with v4.1, the plastic posts to aid the friction fit make it
|
||||
even harder to muscle out --- in fact, even if you could get an edge and start yanking, you'd probably just break some
|
||||
of the plastic.
|
||||
|
||||
You can instead use the reverse side and the hex standoffs to push a panel out, as so:
|
||||
|
||||
1. Loosen, or completely remove, the hex bolts for the panel you would like to remove.
|
||||
2. Flip the stick over, and remove the hex bolts on the opposite side.
|
||||
3. Screw in longer bolts, or anything else that'll fit into the hole without going flush against the panel.
|
||||
4. Push the long bolts in, thus pushing the standoffs, thus pushing the desired panel out from within.
|
||||
5. You may have to even get a mallet and tap on a bolt, occasionally, as everything can be *pretty* tight.
|
||||
|
||||
BIN
docs/finished-v4.7-x3.jpg
Normal file
BIN
docs/finished-v4.7-x3.jpg
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 416 KiB |
@@ -4,7 +4,7 @@ bss's random thoughts and notes on the actual printing of the Buildable Stick Sy
|
||||
|
||||
## Printing Settings
|
||||
|
||||
My preferred settings are 3 wall loops with 20% gyroid sparse infill. This gives the models a bit more weight and
|
||||
My preferred settings are 3 wall loops with 25% gyroid sparse infill. This gives the models a bit more weight and
|
||||
strength against bowing forces, but something more default, like 2 wall loops, 15% grid sparse infill, is fine and does
|
||||
not lead to a weak enclosure.
|
||||
|
||||
|
||||
@@ -31,25 +31,25 @@ module panel_holes() {
|
||||
// button hole, with extra wide bits for various uses (cutting out space
|
||||
// for snap-ins, etc.
|
||||
module button_24mm_hole() {
|
||||
cylinder(r=small_button_radius, h=100, $fn=50, center=true);
|
||||
cylinder(r=small_button_radius, h=100, $fn=100, center=true);
|
||||
// carve out space for snap-ins and screw-in nuts
|
||||
// translation is to leave 3mm thickness in the plate without recentering anything
|
||||
translate([0, 0, -25]) cylinder(r=small_button_radius+button_radius_connector_space, h=49, $fn=50, center=true);
|
||||
translate([0, 0, -25]) cylinder(r=small_button_radius+button_radius_connector_space, h=49, $fn=100, center=true);
|
||||
// space for decorative button surround stuff
|
||||
translate([0, 0, 50]) cylinder(r=small_button_radius*decorative_radius_scale, h=20, $fn=50, center=true);
|
||||
translate([0, 0, 70]) cylinder(r=small_button_radius*jumbo_decorative_radius_scale, h=20, $fn=50, center=true);
|
||||
translate([0, 0, 50]) cylinder(r=small_button_radius*decorative_radius_scale, h=20, $fn=100, center=true);
|
||||
translate([0, 0, 70]) cylinder(r=small_button_radius*jumbo_decorative_radius_scale, h=20, $fn=100, center=true);
|
||||
}
|
||||
|
||||
// button hole, with extra wide bits for various uses (cutting out space
|
||||
// for snap-ins, etc.
|
||||
module button_30mm_hole() {
|
||||
cylinder(r=big_button_radius, h=100, $fn=50, center=true);
|
||||
cylinder(r=big_button_radius, h=100, $fn=100, center=true);
|
||||
// carve out space for snap-ins and screw-in nuts
|
||||
// translation is to leave 3mm thickness in the plate without recentering anything
|
||||
translate([0, 0, -25]) cylinder(r=big_button_radius+button_radius_connector_space, h=49, $fn=50, center=true);
|
||||
translate([0, 0, -25]) cylinder(r=big_button_radius+button_radius_connector_space, h=49, $fn=100, center=true);
|
||||
// space for decorative button surround stuff
|
||||
translate([0, 0, 50]) cylinder(r=big_button_radius*decorative_radius_scale, h=20, $fn=50, center=true);
|
||||
translate([0, 0, 70]) cylinder(r=big_button_radius*jumbo_decorative_radius_scale, h=20, $fn=50, center=true);
|
||||
translate([0, 0, 50]) cylinder(r=big_button_radius*decorative_radius_scale, h=20, $fn=100, center=true);
|
||||
translate([0, 0, 70]) cylinder(r=big_button_radius*jumbo_decorative_radius_scale, h=20, $fn=100, center=true);
|
||||
}
|
||||
|
||||
module frame_hex_bolt_hole() {
|
||||
@@ -107,16 +107,24 @@ module m2_mount_post() {
|
||||
}
|
||||
}
|
||||
|
||||
module oled_ssd1306_mount() {
|
||||
translate([11.5, 12, 0]) m2_mount_post();
|
||||
translate([11.5, -12, 0]) m2_mount_post();
|
||||
translate([-11.5, 12, 0]) m2_mount_post();
|
||||
translate([-11.5, -12, 0]) m2_mount_post();
|
||||
module adafruit_pid_326_oled_ssd1306_mount_post() {
|
||||
cylinder(r=2.25/2, h=8, $fn=50, center=true);
|
||||
}
|
||||
|
||||
module oled_ssd1306_mount_cutout() {
|
||||
translate([0, 1.9, 0]) cube([25, 14, 5], center=true);
|
||||
translate([0, 0, -1.0]) cube([35, 35, 4], center=true);
|
||||
// aligned to the cutout below
|
||||
module adafruit_pid_326_oled_ssd1306_mount() {
|
||||
translate([12, 13.25, -2]) adafruit_pid_326_oled_ssd1306_mount_post();
|
||||
translate([12, -13.25, -2]) adafruit_pid_326_oled_ssd1306_mount_post();
|
||||
translate([-12, 13.25, -2]) adafruit_pid_326_oled_ssd1306_mount_post();
|
||||
translate([-12, -13.25, -2]) adafruit_pid_326_oled_ssd1306_mount_post();
|
||||
}
|
||||
|
||||
module adafruit_pid_326_oled_ssd1306_mount_cutout() {
|
||||
translate([0, 3.5, 0]) cube([ssd1306_x, ssd1306_y, panel_z+0.1], center=true);
|
||||
translate([0, 0, -ssd1306_z/2]) cube([adafruit_pid_326_oled_ssd1306_cutout_x,
|
||||
adafruit_pid_326_oled_ssd1306_cutout_y, panel_z-ssd1306_z+0.1], center=true);
|
||||
translate([0, 0, -ssd1306_z/2-2]) cube([adafruit_pid_326_oled_ssd1306_cutout_x*3/2,
|
||||
adafruit_pid_326_oled_ssd1306_cutout_y/2, panel_z/2+0.1], center=true);
|
||||
}
|
||||
|
||||
module m3_mount_post() {
|
||||
@@ -274,13 +282,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);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -352,14 +360,14 @@ module frame() {
|
||||
// for cutting out slashes from the frame outer wall
|
||||
module slash_cutout() {
|
||||
polyhedron([
|
||||
[slash_inner_displacement/2, -frame_wall/2, -slash_height/2],
|
||||
[(slash_inner_displacement/2+slash_width), -frame_wall/2, -slash_height/2],
|
||||
[(slash_inner_displacement/2+slash_width), frame_wall/2, -slash_height/2],
|
||||
[slash_inner_displacement/2, frame_wall/2, -slash_height/2],
|
||||
[-(slash_inner_displacement/2+slash_width), -frame_wall/2, slash_height/2],
|
||||
[-slash_inner_displacement/2, -frame_wall/2, slash_height/2],
|
||||
[-slash_inner_displacement/2, frame_wall/2, slash_height/2],
|
||||
[-(slash_inner_displacement/2+slash_width), frame_wall/2, slash_height/2]
|
||||
[slash_inner_displacement/2, -wall_cutout_depth, -slash_height/2],
|
||||
[(slash_inner_displacement/2+slash_width), -wall_cutout_depth, -slash_height/2],
|
||||
[(slash_inner_displacement/2+slash_width), wall_cutout_depth, -slash_height/2],
|
||||
[slash_inner_displacement/2, wall_cutout_depth, -slash_height/2],
|
||||
[-(slash_inner_displacement/2+slash_width), -wall_cutout_depth, slash_height/2],
|
||||
[-slash_inner_displacement/2, -wall_cutout_depth, slash_height/2],
|
||||
[-slash_inner_displacement/2, wall_cutout_depth, slash_height/2],
|
||||
[-(slash_inner_displacement/2+slash_width), wall_cutout_depth, slash_height/2]
|
||||
], [[0, 1, 2, 3], [4, 5, 1, 0], [7, 6, 5, 4], [5, 6, 2, 1], [6, 7, 3, 2], [7, 4, 0, 3]]);
|
||||
}
|
||||
|
||||
@@ -409,16 +417,32 @@ module dir_arc_30mm_thumb_button() {
|
||||
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, 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();
|
||||
module dir_arc_30mm_fingers_left_button() {
|
||||
translate([-dir_arc_30mm_column_3_offset, dir_arc_30mm_row_3_offset, 0]) dir_arc_30mm_thumb_button();
|
||||
}
|
||||
|
||||
module dir_arc_30mm_fingers_middle_button() {
|
||||
translate([-dir_arc_30mm_column_2_offset, dir_arc_30mm_row_3_offset, 0]) dir_arc_30mm_thumb_button();
|
||||
}
|
||||
|
||||
module dir_arc_30mm_fingers_right_button() {
|
||||
translate([0, dir_arc_30mm_row_2_offset, 0]) dir_arc_30mm_thumb_button();
|
||||
}
|
||||
|
||||
module dir_arc_30mm_finger_buttons() {
|
||||
dir_arc_30mm_fingers_left_button();
|
||||
dir_arc_30mm_fingers_middle_button();
|
||||
dir_arc_30mm_fingers_right_button();
|
||||
}
|
||||
|
||||
module dir_arc_30mm_w_button() {
|
||||
translate([-26.8, dir_arc_w_30mm_row_4_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, dir_arc_w_30mm_row_4_offset, 0]) dir_arc_30mm_thumb_button();
|
||||
dir_arc_30mm_w_button();
|
||||
}
|
||||
|
||||
module dir_arc_w_30mm_plus_one() {
|
||||
@@ -470,18 +494,92 @@ module sega_2p() {
|
||||
translate([sega_2p_column_4_offset, -19-9, 0]) sega_2p_p1();
|
||||
}
|
||||
|
||||
module sega_2p_nine() {
|
||||
sega_2p();
|
||||
module sega_2p_nine_thumb_button() {
|
||||
// just my guesstimate on this one
|
||||
translate([0, -19-9-11-19-9-11, 0]) sega_2p_p1();
|
||||
}
|
||||
|
||||
module sega_2p_nine() {
|
||||
sega_2p();
|
||||
sega_2p_nine_thumb_button();
|
||||
}
|
||||
|
||||
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();
|
||||
}
|
||||
|
||||
// BSS ERGO - 30mm
|
||||
|
||||
module ergo_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 ergo_six_30mm() {
|
||||
ergo_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 ergo_eight_30mm() {
|
||||
ergo_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]) {
|
||||
ergo_wasd_30mm();
|
||||
}
|
||||
translate([0, 0, 0]) sega_2p_nine_thumb_button();
|
||||
}
|
||||
|
||||
module ergo_nine_30mm() {
|
||||
translate([-51.75, 65.5, 0]) rotate([0, 0, 10]) {
|
||||
ergo_eight_30mm();
|
||||
}
|
||||
translate([0, 0, 0]) sega_2p_nine_thumb_button();
|
||||
}
|
||||
|
||||
// untested
|
||||
// BSS ERGO - 24mm
|
||||
/* module ergo_wasd() { */
|
||||
/* 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 ergo_six() { */
|
||||
/* ergo_wasd(); */
|
||||
/* translate([-26, -7, 0]) button_24mm_hole(); // left of W */
|
||||
/* translate([26, -7, 0]) button_24mm_hole(); // right of W */
|
||||
/* } */
|
||||
|
||||
/* module ergo_eight() { */
|
||||
/* ergo_six(); */
|
||||
/* 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() { */
|
||||
/* translate([-63.25, 65.5, 0]) rotate([0, 0, 10]) { */
|
||||
/* ergo_wasd(); */
|
||||
/* } */
|
||||
/* translate([0, 0, 0]) sega_2p_nine_thumb_button(); */
|
||||
/* } */
|
||||
|
||||
/* module ergo_nine() { */
|
||||
/* translate([-63.25, 65.5, 0]) rotate([0, 0, 10]) { */
|
||||
/* ergo_eight(); */
|
||||
/* } */
|
||||
/* translate([0, 0, 0]) sega_2p_nine_thumb_button(); */
|
||||
/* } */
|
||||
|
||||
module shiokenstar() {
|
||||
translate([-172, 32, 0]) dir_arc_24mm_directionals();
|
||||
sega_2p();
|
||||
|
||||
@@ -6,16 +6,17 @@
|
||||
|
||||
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);
|
||||
hull() difference() {
|
||||
// get a 2mm slice of the decorative button cylinders
|
||||
translate([0, 0, -50]) 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();
|
||||
}
|
||||
|
||||
@@ -6,7 +6,7 @@
|
||||
|
||||
include <parameters.scad>
|
||||
include <components.scad>
|
||||
use <frames/pieces/extended/front-or-back.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
|
||||
|
||||
@@ -7,8 +7,8 @@
|
||||
include <parameters.scad>
|
||||
include <components.scad>
|
||||
use <frames/complete/left-frame.scad>
|
||||
use <frames/pieces/box/side.scad>
|
||||
use <frames/pieces/extended/front-or-back.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
|
||||
@@ -43,7 +43,7 @@ module extra_extended_left_or_right_frame_piece() {
|
||||
difference() {
|
||||
union() {
|
||||
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);
|
||||
|
||||
@@ -6,11 +6,11 @@
|
||||
|
||||
include <parameters.scad>
|
||||
include <components.scad>
|
||||
use <frames/pieces/box/front-or-back.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_box_frame_piece();
|
||||
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);
|
||||
}
|
||||
|
||||
@@ -1,31 +0,0 @@
|
||||
/*
|
||||
* SPDX-FileCopyrightText: © 2024 Brian S. Stephan <bss@incorporeal.org>
|
||||
* SPDX-License-Identifier: GPL-3.0-or-later
|
||||
*/
|
||||
|
||||
include <parameters.scad>
|
||||
include <components.scad>
|
||||
use <front-or-back.scad>
|
||||
use <front-or-back-inner-wall.scad>
|
||||
|
||||
module backslashes() {
|
||||
translate([-60, -(frame_y-frame_wall)/2, 0]) slash_cutout();
|
||||
translate([-40, -(frame_y-frame_wall)/2, 0]) slash_cutout();
|
||||
translate([-20, -(frame_y-frame_wall)/2, 0]) slash_cutout();
|
||||
translate([0, -(frame_y-frame_wall)/2, 0]) slash_cutout();
|
||||
translate([20, -(frame_y-frame_wall)/2, 0]) slash_cutout();
|
||||
translate([40, -(frame_y-frame_wall)/2, 0]) slash_cutout();
|
||||
translate([60, -(frame_y-frame_wall)/2, 0]) slash_cutout();
|
||||
}
|
||||
|
||||
module backslashes_windowed_front_or_back_box_frame_piece() {
|
||||
difference() {
|
||||
front_or_back_box_frame_piece();
|
||||
// subtract slashes from the frame wall
|
||||
backslashes();
|
||||
// subtract the inner wall area that will be provided by the other piece
|
||||
front_or_back_inner_wall_frame_piece();
|
||||
}
|
||||
}
|
||||
|
||||
backslashes_windowed_front_or_back_box_frame_piece();
|
||||
@@ -1,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 <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, 5], center=true);
|
||||
}
|
||||
|
||||
module horiz_striped_windowed_front_or_back_box_frame_piece() {
|
||||
difference() {
|
||||
front_or_back_box_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();
|
||||
translate([0, -(frame_y-frame_wall)/2, 0]) front_stripe();
|
||||
translate([0, -(frame_y-frame_wall)/2, -9]) front_stripe();
|
||||
translate([0, -(frame_y-frame_wall)/2, -18]) front_stripe();
|
||||
// subtract the inner wall area that will be provided by the other piece
|
||||
front_or_back_inner_wall_frame_piece();
|
||||
}
|
||||
}
|
||||
|
||||
horiz_striped_windowed_front_or_back_box_frame_piece();
|
||||
@@ -1,29 +0,0 @@
|
||||
/*
|
||||
* SPDX-FileCopyrightText: © 2024 Brian S. Stephan <bss@incorporeal.org>
|
||||
* SPDX-License-Identifier: GPL-3.0-or-later
|
||||
*/
|
||||
|
||||
include <parameters.scad>
|
||||
include <components.scad>
|
||||
use <side.scad>
|
||||
use <side-inner-wall.scad>
|
||||
|
||||
module backslashes() {
|
||||
translate([-(frame_x-frame_wall)/2, -40, 0]) rotate([0, 0, -90]) slash_cutout();
|
||||
translate([-(frame_x-frame_wall)/2, -20, 0]) rotate([0, 0, -90]) slash_cutout();
|
||||
translate([-(frame_x-frame_wall)/2, 0, 0]) rotate([0, 0, -90]) slash_cutout();
|
||||
translate([-(frame_x-frame_wall)/2, 20, 0]) rotate([0, 0, -90]) slash_cutout();
|
||||
translate([-(frame_x-frame_wall)/2, 40, 0]) rotate([0, 0, -90]) slash_cutout();
|
||||
}
|
||||
|
||||
module backslashes_windowed_side_box_frame_piece() {
|
||||
difference() {
|
||||
side_box_frame_piece();
|
||||
// subtract slashes from the frame wall
|
||||
backslashes();
|
||||
// subtract the inner wall area that will be provided by the other piece
|
||||
side_inner_wall_frame_piece();
|
||||
}
|
||||
}
|
||||
|
||||
backslashes_windowed_side_box_frame_piece();
|
||||
@@ -1,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 side_stripe() {
|
||||
cube([frame_wall, frame_y-(frame_mount_column_width*1.75)*2, 5], center=true);
|
||||
}
|
||||
|
||||
module horiz_striped_windowed_side_box_frame_piece() {
|
||||
difference() {
|
||||
side_box_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();
|
||||
translate([-(frame_x-frame_wall)/2, 0, 0]) side_stripe();
|
||||
translate([-(frame_x-frame_wall)/2, 0, -9]) side_stripe();
|
||||
translate([-(frame_x-frame_wall)/2, 0, -18]) side_stripe();
|
||||
// subtract the inner wall area that will be provided by the other piece
|
||||
side_inner_wall_frame_piece();
|
||||
}
|
||||
}
|
||||
|
||||
horiz_striped_windowed_side_box_frame_piece();
|
||||
@@ -1,23 +0,0 @@
|
||||
/*
|
||||
* SPDX-FileCopyrightText: © 2024 Brian S. Stephan <bss@incorporeal.org>
|
||||
* SPDX-License-Identifier: GPL-3.0-or-later
|
||||
*/
|
||||
|
||||
include <parameters.scad>
|
||||
include <components.scad>
|
||||
use <front-or-back.scad>
|
||||
|
||||
module side_box_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();
|
||||
// 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();
|
||||
@@ -1,28 +0,0 @@
|
||||
/*
|
||||
* SPDX-FileCopyrightText: © 2024 Brian S. Stephan <bss@incorporeal.org>
|
||||
* SPDX-License-Identifier: GPL-3.0-or-later
|
||||
*/
|
||||
|
||||
include <parameters.scad>
|
||||
include <components.scad>
|
||||
use <front-or-back-clean-for-extended-side.scad>
|
||||
|
||||
module front_or_back_aux_and_neutrik_box_frame_piece_for_extended_side() {
|
||||
difference() {
|
||||
front_or_back_box_frame_piece_for_extended_side();
|
||||
|
||||
// aux button holes
|
||||
translate([-35.25, -101.5, 0]) rotate([90, 0, 0]) aux_control_three_button_cluster();
|
||||
translate([-35.25, -(frame_y/2)+neutrik_panel_thickness+4, 0]) frame_cutout();
|
||||
translate([-72.25, -(frame_y/2)+neutrik_panel_thickness+4, 0]) frame_cutout();
|
||||
translate([2, -(frame_y/2)+neutrik_panel_thickness+4, 0]) frame_cutout();
|
||||
|
||||
// neutrix button hole
|
||||
translate([frame_center_to_neutrik, -(frame_y/2)+neutrik_panel_thickness, 0])
|
||||
rotate([270, 0, 0]) neutrik_d_mount();
|
||||
translate([frame_center_to_neutrik, -(frame_y/2)+neutrik_panel_thickness+4, 0])
|
||||
frame_cutout();
|
||||
}
|
||||
}
|
||||
|
||||
front_or_back_aux_and_neutrik_box_frame_piece_for_extended_side();
|
||||
@@ -1,18 +0,0 @@
|
||||
/*
|
||||
* SPDX-FileCopyrightText: © 2024 Brian S. Stephan <bss@incorporeal.org>
|
||||
* SPDX-License-Identifier: GPL-3.0-or-later
|
||||
*/
|
||||
|
||||
include <parameters.scad>
|
||||
include <components.scad>
|
||||
use <frames/pieces/box/front-or-back-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();
|
||||
@@ -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();
|
||||
@@ -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();
|
||||
@@ -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();
|
||||
@@ -1,18 +0,0 @@
|
||||
/*
|
||||
* SPDX-FileCopyrightText: © 2024 Brian S. Stephan <bss@incorporeal.org>
|
||||
* SPDX-License-Identifier: GPL-3.0-or-later
|
||||
*/
|
||||
|
||||
include <parameters.scad>
|
||||
include <components.scad>
|
||||
use <frames/pieces/box/front-or-back.scad>
|
||||
|
||||
module front_or_back_box_frame_piece_for_extended_side() {
|
||||
difference() {
|
||||
front_or_back_box_frame_piece();
|
||||
// ...minus the frame wall and lip on the left
|
||||
translate([-frame_x/2+frame_wall/2, 0, 0]) cube([frame_wall, frame_y, frame_z], center=true);
|
||||
}
|
||||
}
|
||||
|
||||
front_or_back_box_frame_piece_for_extended_side();
|
||||
@@ -7,9 +7,9 @@ include <parameters.scad>
|
||||
include <components.scad>
|
||||
use <front-or-back.scad>
|
||||
|
||||
module front_or_back_aux_and_neutrik_box_frame_piece() {
|
||||
module front_or_back_aux_and_neutrik_frame_piece() {
|
||||
difference() {
|
||||
front_or_back_box_frame_piece();
|
||||
front_or_back_frame_piece();
|
||||
|
||||
// aux button holes
|
||||
translate([-35.25, -101.5, 0]) rotate([90, 0, 0]) aux_control_three_button_cluster();
|
||||
@@ -25,4 +25,4 @@ module front_or_back_aux_and_neutrik_box_frame_piece() {
|
||||
}
|
||||
}
|
||||
|
||||
front_or_back_aux_and_neutrik_box_frame_piece();
|
||||
front_or_back_aux_and_neutrik_frame_piece();
|
||||
@@ -0,0 +1,31 @@
|
||||
/* The inner top/bottom wall of the frame, for being displayed through a horizontal stripe windowed part.
|
||||
*
|
||||
* SPDX-FileCopyrightText: © 2025 Brian S. Stephan <bss@incorporeal.org>
|
||||
* SPDX-License-Identifier: GPL-3.0-or-later
|
||||
*/
|
||||
|
||||
include <parameters.scad>
|
||||
include <components.scad>
|
||||
use <front-or-back-inner-wall.scad>
|
||||
use <front-or-back-windowed-horiz-stripes.scad>
|
||||
|
||||
// for stability's sake, this piece juts out a bit from the outside of the wall, so we
|
||||
// need to hack the window piece a bit to subtract from the longer and get ours longer
|
||||
module horiz_striped_windowed_front_or_back_frame_piece() {
|
||||
difference() {
|
||||
front_or_back_longish_frame_piece();
|
||||
// subtract frame wall windows
|
||||
front_horiz_stripes();
|
||||
// subtract the inner wall area that will be provided by the other piece
|
||||
front_or_back_inner_wall_frame_piece();
|
||||
}
|
||||
}
|
||||
|
||||
module front_or_back_windowed_horiz_stripes_inner_wall_frame_piece() {
|
||||
difference() {
|
||||
front_or_back_longish_frame_piece();
|
||||
horiz_striped_windowed_front_or_back_frame_piece();
|
||||
}
|
||||
}
|
||||
|
||||
front_or_back_windowed_horiz_stripes_inner_wall_frame_piece();
|
||||
@@ -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)
|
||||
@@ -36,4 +36,30 @@ module front_or_back_inner_wall_frame_piece() {
|
||||
translate([0, 0, 50]) rotate([90, 0, 0]) front_or_back_inner_wall_frame_base_piece();
|
||||
}
|
||||
|
||||
// this is here for use in inner wall pieces, but unlike the side longish piece (in its own
|
||||
// .scad), front_or_back_longish_frame_piece is not printable so we'll just stash it here
|
||||
module front_or_back_frame_piece_wall() {
|
||||
// get a slice of the whole wall, to use it for making the extended version
|
||||
difference() {
|
||||
front_or_back_frame_piece();
|
||||
cube([frame_x, frame_y-frame_wall*2, frame_z], center=true);
|
||||
}
|
||||
}
|
||||
|
||||
// this is here for use in inner wall pieces, but unlike the side longish piece (in its own
|
||||
// .scad), front_or_back_longish_frame_piece is not printable so we'll just stash it here
|
||||
module front_or_back_frame_piece_extension() {
|
||||
hull() {
|
||||
front_or_back_frame_piece_wall();
|
||||
translate([0, -frame_bevel_height*2, 0]) front_or_back_frame_piece_wall();
|
||||
}
|
||||
}
|
||||
|
||||
// this is here for use in inner wall pieces, but unlike the side longish piece (in its own
|
||||
// .scad), front_or_back_longish_frame_piece is not printable so we'll just stash it here
|
||||
module front_or_back_longish_frame_piece() {
|
||||
front_or_back_frame_piece_extension();
|
||||
front_or_back_frame_piece();
|
||||
}
|
||||
|
||||
front_or_back_inner_wall_frame_piece();
|
||||
@@ -5,11 +5,11 @@
|
||||
|
||||
include <parameters.scad>
|
||||
include <components.scad>
|
||||
use <front-or-back-clean-for-extended-side.scad>
|
||||
use <front-or-back.scad>
|
||||
|
||||
module clean_front_or_back() {
|
||||
difference() {
|
||||
front_or_back_box_frame_piece_for_extended_side();
|
||||
front_or_back_frame_piece();
|
||||
// chop off the lip we left on the basic piece
|
||||
translate([-frame_x/2+frame_wall/2, 0, 0]) cube([frame_wall, frame_y, frame_z], center=true);
|
||||
};
|
||||
@@ -29,9 +29,9 @@ module bottom_piece_extension() {
|
||||
}
|
||||
}
|
||||
|
||||
module extended_front_or_back_frame_piece() {
|
||||
module front_or_back_trapezoid_frame_piece() {
|
||||
clean_front_or_back();
|
||||
translate([0, -frame_y/2+frame_wall, 0]) rotate([90, 0, 0]) bottom_piece_extension();
|
||||
}
|
||||
|
||||
extended_front_or_back_frame_piece();
|
||||
front_or_back_trapezoid_frame_piece();
|
||||
40
src/frames/pieces/front-or-back-windowed-backslashes.scad
Normal file
40
src/frames/pieces/front-or-back-windowed-backslashes.scad
Normal file
@@ -0,0 +1,40 @@
|
||||
/*
|
||||
* SPDX-FileCopyrightText: © 2024 Brian S. Stephan <bss@incorporeal.org>
|
||||
* SPDX-License-Identifier: GPL-3.0-or-later
|
||||
*/
|
||||
|
||||
include <parameters.scad>
|
||||
include <components.scad>
|
||||
use <front-or-back.scad>
|
||||
use <front-or-back-inner-wall.scad>
|
||||
|
||||
module backslashes() {
|
||||
translate([-70, -(frame_y-frame_wall)/2, 0]) slash_cutout();
|
||||
translate([-50, -(frame_y-frame_wall)/2, 0]) slash_cutout();
|
||||
translate([-30, -(frame_y-frame_wall)/2, 0]) slash_cutout();
|
||||
translate([-10, -(frame_y-frame_wall)/2, 0]) slash_cutout();
|
||||
translate([10, -(frame_y-frame_wall)/2, 0]) slash_cutout();
|
||||
translate([30, -(frame_y-frame_wall)/2, 0]) slash_cutout();
|
||||
translate([50, -(frame_y-frame_wall)/2, 0]) slash_cutout();
|
||||
translate([70, -(frame_y-frame_wall)/2, 0]) slash_cutout();
|
||||
}
|
||||
|
||||
module backslashes_windowed_front_or_back_frame_piece() {
|
||||
difference() {
|
||||
front_or_back_frame_piece();
|
||||
// subtract slashes from the frame wall
|
||||
backslashes();
|
||||
// subtract the inner wall area that will be provided by the other piece
|
||||
front_or_back_inner_wall_frame_piece();
|
||||
}
|
||||
}
|
||||
|
||||
module backslashes_windowed_front_or_back_frame_piece_for_extended_side() {
|
||||
difference() {
|
||||
backslashes_windowed_front_or_back_frame_piece();
|
||||
// ...minus the frame wall and lip on the left
|
||||
translate([-frame_x/2+frame_wall/2, 0, 0]) cube([frame_wall, frame_y, frame_z], center=true);
|
||||
}
|
||||
}
|
||||
|
||||
backslashes_windowed_front_or_back_frame_piece_for_extended_side();
|
||||
@@ -9,9 +9,9 @@ use <front-or-back.scad>
|
||||
use <front-or-back-inner-wall.scad>
|
||||
use <front-or-back-windowed-backslashes.scad>
|
||||
|
||||
module forwardslashes_windowed_front_or_back_box_frame_piece() {
|
||||
module forwardslashes_windowed_front_or_back_frame_piece() {
|
||||
difference() {
|
||||
front_or_back_box_frame_piece();
|
||||
front_or_back_frame_piece();
|
||||
// subtract slashes from the frame wall
|
||||
mirror([0, 0, 1]) backslashes();
|
||||
// subtract the inner wall area that will be provided by the other piece
|
||||
@@ -19,4 +19,12 @@ module forwardslashes_windowed_front_or_back_box_frame_piece() {
|
||||
}
|
||||
}
|
||||
|
||||
forwardslashes_windowed_front_or_back_box_frame_piece();
|
||||
module forwardslashes_windowed_front_or_back_frame_piece_for_extended_side() {
|
||||
difference() {
|
||||
forwardslashes_windowed_front_or_back_frame_piece();
|
||||
// ...minus the frame wall and lip on the left
|
||||
translate([-frame_x/2+frame_wall/2, 0, 0]) cube([frame_wall, frame_y, frame_z], center=true);
|
||||
}
|
||||
}
|
||||
|
||||
forwardslashes_windowed_front_or_back_frame_piece_for_extended_side();
|
||||
33
src/frames/pieces/front-or-back-windowed-horiz-stripes.scad
Normal file
33
src/frames/pieces/front-or-back-windowed-horiz-stripes.scad
Normal file
@@ -0,0 +1,33 @@
|
||||
/*
|
||||
* SPDX-FileCopyrightText: © 2024 Brian S. Stephan <bss@incorporeal.org>
|
||||
* SPDX-License-Identifier: GPL-3.0-or-later
|
||||
*/
|
||||
|
||||
include <parameters.scad>
|
||||
include <components.scad>
|
||||
use <front-or-back.scad>
|
||||
use <front-or-back-inner-wall.scad>
|
||||
|
||||
module front_horiz_stripe() {
|
||||
cube([frame_x-(frame_mount_column_width*1.75)*2, wall_cutout_depth, 5], center=true);
|
||||
}
|
||||
|
||||
module front_horiz_stripes() {
|
||||
translate([0, -(frame_y-frame_wall)/2, 18]) front_horiz_stripe();
|
||||
translate([0, -(frame_y-frame_wall)/2, 9]) front_horiz_stripe();
|
||||
translate([0, -(frame_y-frame_wall)/2, 0]) front_horiz_stripe();
|
||||
translate([0, -(frame_y-frame_wall)/2, -9]) front_horiz_stripe();
|
||||
translate([0, -(frame_y-frame_wall)/2, -18]) front_horiz_stripe();
|
||||
}
|
||||
|
||||
module horiz_striped_windowed_front_or_back_frame_piece() {
|
||||
difference() {
|
||||
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
|
||||
front_or_back_inner_wall_frame_piece();
|
||||
}
|
||||
}
|
||||
|
||||
horiz_striped_windowed_front_or_back_frame_piece();
|
||||
@@ -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();
|
||||
@@ -6,25 +6,20 @@
|
||||
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();
|
||||
difference() {
|
||||
// include the whole bottom wall (including mount columns)
|
||||
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]
|
||||
]);
|
||||
translate([0, -(frame_y/2)+(piece_width/2), 0])
|
||||
cube([frame_piece_x_x, piece_width, frame_z], center=true);
|
||||
// ...minus a slot for the combining piece to go into
|
||||
cube([frame_x, frame_y-(panel_support_width+frame_wall)*2, inner_frame_z/3], center=true);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
front_or_back_box_frame_piece();
|
||||
front_or_back_frame_piece();
|
||||
@@ -5,11 +5,11 @@
|
||||
|
||||
include <parameters.scad>
|
||||
include <components.scad>
|
||||
use <box/side.scad>
|
||||
use <side.scad>
|
||||
|
||||
module interconnect_frame_half_piece() {
|
||||
translate([frame_x/2-frame_wall, 0, 0]) difference() {
|
||||
side_box_frame_piece();
|
||||
side_frame_piece();
|
||||
rotate([0, 0, 180]) side_chopper();
|
||||
}
|
||||
}
|
||||
|
||||
32
src/frames/pieces/side-inner-wall-for-horiz-stripes.scad
Normal file
32
src/frames/pieces/side-inner-wall-for-horiz-stripes.scad
Normal file
@@ -0,0 +1,32 @@
|
||||
/* The inner side wall of the frame, for being displayed through a horizontal stripe windowed part.
|
||||
*
|
||||
* SPDX-FileCopyrightText: © 2025 Brian S. Stephan <bss@incorporeal.org>
|
||||
* SPDX-License-Identifier: GPL-3.0-or-later
|
||||
*/
|
||||
|
||||
include <parameters.scad>
|
||||
include <components.scad>
|
||||
use <side-inner-wall.scad>
|
||||
use <side-longish.scad>
|
||||
use <side-windowed-horiz-stripes.scad>
|
||||
|
||||
// for stability's sake, this piece juts out a bit from the outside of the wall, so we
|
||||
// need to hack the window piece a bit to subtract from the longer and get ours longer
|
||||
module horiz_striped_windowed_side_frame_piece() {
|
||||
difference() {
|
||||
side_longish_frame_piece();
|
||||
// subtract frame wall windows
|
||||
side_horiz_stripes();
|
||||
// subtract the inner wall area that will be provided by the other piece
|
||||
side_inner_wall_frame_piece();
|
||||
}
|
||||
}
|
||||
|
||||
module side_windowed_horiz_stripes_inner_wall_frame_piece() {
|
||||
difference() {
|
||||
side_longish_frame_piece();
|
||||
horiz_striped_windowed_side_frame_piece();
|
||||
}
|
||||
}
|
||||
|
||||
side_windowed_horiz_stripes_inner_wall_frame_piece();
|
||||
@@ -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)
|
||||
32
src/frames/pieces/side-longish.scad
Normal file
32
src/frames/pieces/side-longish.scad
Normal file
@@ -0,0 +1,32 @@
|
||||
/*
|
||||
* 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>
|
||||
|
||||
module side_frame_piece_wall() {
|
||||
// get a slice of the whole wall, to use it for making the extended version
|
||||
difference() {
|
||||
side_frame_piece();
|
||||
cube([frame_x-frame_wall*2, frame_y, frame_z], center=true);
|
||||
}
|
||||
}
|
||||
|
||||
module side_frame_piece_extension() {
|
||||
// hulling the two walls provides a wall with a thicker x
|
||||
hull() {
|
||||
side_frame_piece_wall();
|
||||
translate([-frame_bevel_height*2, 0, 0]) side_frame_piece_wall();
|
||||
}
|
||||
}
|
||||
|
||||
module side_longish_frame_piece() {
|
||||
// combine the wider wall and the original piece
|
||||
side_frame_piece_extension();
|
||||
side_frame_piece();
|
||||
}
|
||||
|
||||
side_longish_frame_piece();
|
||||
@@ -6,8 +6,8 @@
|
||||
include <parameters.scad>
|
||||
include <components.scad>
|
||||
use <frames/complete/left-frame.scad>
|
||||
use <frames/pieces/box/side.scad>
|
||||
use <front-or-back.scad>
|
||||
use <side.scad>
|
||||
use <front-or-back-trapezoid.scad>
|
||||
|
||||
module side_and_bottom_frame_piece_wall() {
|
||||
// get a slice of the pieces, to use it in extruding
|
||||
@@ -26,13 +26,13 @@ module side_and_bottom_frame_piece_extension() {
|
||||
}
|
||||
}
|
||||
|
||||
module extra_extended_left_or_right_frame_piece() {
|
||||
module side_trapezoid_extended_to_front_frame_piece() {
|
||||
difference() {
|
||||
side_box_frame_piece();
|
||||
side_frame_piece();
|
||||
// chop off the old edge which is getting replaced with the extension
|
||||
translate([-frame_x/2+frame_bevel_height/2, 0, 0]) cube([frame_bevel_height, frame_y, frame_z], center=true);
|
||||
}
|
||||
translate([-frame_x/2+frame_bevel_height*2, 0, 0]) rotate([0, -90, 0]) side_and_bottom_frame_piece_extension();
|
||||
}
|
||||
|
||||
extra_extended_left_or_right_frame_piece();
|
||||
side_trapezoid_extended_to_front_frame_piece();
|
||||
@@ -6,8 +6,7 @@
|
||||
include <parameters.scad>
|
||||
include <components.scad>
|
||||
use <frames/complete/left-frame.scad>
|
||||
use <frames/pieces/box/side.scad>
|
||||
use <front-or-back-clean-for-extended-side.scad>
|
||||
use <side.scad>
|
||||
|
||||
module side_frame_piece_wall() {
|
||||
// get a slice of the piece, to use it in extruding
|
||||
@@ -25,13 +24,13 @@ module side_frame_piece_extension() {
|
||||
}
|
||||
}
|
||||
|
||||
module extended_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();
|
||||
30
src/frames/pieces/side-windowed-backslashes.scad
Normal file
30
src/frames/pieces/side-windowed-backslashes.scad
Normal file
@@ -0,0 +1,30 @@
|
||||
/*
|
||||
* SPDX-FileCopyrightText: © 2024 Brian S. Stephan <bss@incorporeal.org>
|
||||
* SPDX-License-Identifier: GPL-3.0-or-later
|
||||
*/
|
||||
|
||||
include <parameters.scad>
|
||||
include <components.scad>
|
||||
use <side.scad>
|
||||
use <side-inner-wall.scad>
|
||||
|
||||
module backslashes() {
|
||||
translate([-(frame_x-frame_wall)/2, -50, 0]) rotate([0, 0, -90]) slash_cutout();
|
||||
translate([-(frame_x-frame_wall)/2, -30, 0]) rotate([0, 0, -90]) slash_cutout();
|
||||
translate([-(frame_x-frame_wall)/2, -10, 0]) rotate([0, 0, -90]) slash_cutout();
|
||||
translate([-(frame_x-frame_wall)/2, 10, 0]) rotate([0, 0, -90]) slash_cutout();
|
||||
translate([-(frame_x-frame_wall)/2, 30, 0]) rotate([0, 0, -90]) slash_cutout();
|
||||
translate([-(frame_x-frame_wall)/2, 50, 0]) rotate([0, 0, -90]) slash_cutout();
|
||||
}
|
||||
|
||||
module backslashes_windowed_side_frame_piece() {
|
||||
difference() {
|
||||
side_frame_piece();
|
||||
// subtract slashes from the frame wall
|
||||
backslashes();
|
||||
// subtract the inner wall area that will be provided by the other piece
|
||||
side_inner_wall_frame_piece();
|
||||
}
|
||||
}
|
||||
|
||||
backslashes_windowed_side_frame_piece();
|
||||
@@ -9,9 +9,9 @@ use <side.scad>
|
||||
use <side-inner-wall.scad>
|
||||
use <side-windowed-backslashes.scad>
|
||||
|
||||
module forwardslashes_windowed_side_box_frame_piece() {
|
||||
module forwardslashes_windowed_side_frame_piece() {
|
||||
difference() {
|
||||
side_box_frame_piece();
|
||||
side_frame_piece();
|
||||
// subtract slashes from the frame wall
|
||||
mirror([0, 0, 1]) backslashes();
|
||||
// subtract the inner wall area that will be provided by the other piece
|
||||
@@ -19,4 +19,4 @@ module forwardslashes_windowed_side_box_frame_piece() {
|
||||
}
|
||||
}
|
||||
|
||||
forwardslashes_windowed_side_box_frame_piece();
|
||||
forwardslashes_windowed_side_frame_piece();
|
||||
33
src/frames/pieces/side-windowed-horiz-stripes.scad
Normal file
33
src/frames/pieces/side-windowed-horiz-stripes.scad
Normal file
@@ -0,0 +1,33 @@
|
||||
/*
|
||||
* 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 side_horiz_stripe() {
|
||||
cube([wall_cutout_depth, frame_y-(frame_mount_column_width*1.75)*2, 5], center=true);
|
||||
}
|
||||
|
||||
module side_horiz_stripes() {
|
||||
translate([-(frame_x-frame_wall)/2, 0, 18]) side_horiz_stripe();
|
||||
translate([-(frame_x-frame_wall)/2, 0, 9]) side_horiz_stripe();
|
||||
translate([-(frame_x-frame_wall)/2, 0, 0]) side_horiz_stripe();
|
||||
translate([-(frame_x-frame_wall)/2, 0, -9]) side_horiz_stripe();
|
||||
translate([-(frame_x-frame_wall)/2, 0, -18]) side_horiz_stripe();
|
||||
}
|
||||
|
||||
module horiz_striped_windowed_side_frame_piece() {
|
||||
difference() {
|
||||
side_frame_piece();
|
||||
// subtract frame wall windows
|
||||
side_horiz_stripes();
|
||||
// subtract the inner wall area that will be provided by the other piece
|
||||
side_inner_wall_frame_piece();
|
||||
}
|
||||
}
|
||||
|
||||
horiz_striped_windowed_side_frame_piece();
|
||||
@@ -8,9 +8,9 @@ include <components.scad>
|
||||
use <side.scad>
|
||||
use <side-inner-wall.scad>
|
||||
|
||||
module windowed_side_box_frame_piece() {
|
||||
module windowed_side_frame_piece() {
|
||||
difference() {
|
||||
side_box_frame_piece();
|
||||
side_frame_piece();
|
||||
// subtract frame wall window
|
||||
translate([-frame_x/2, 0, 0])
|
||||
cube([(frame_wall+panel_support_width)*2, frame_y-frame_mount_column_width*3.5,
|
||||
@@ -20,4 +20,4 @@ module windowed_side_box_frame_piece() {
|
||||
}
|
||||
}
|
||||
|
||||
windowed_side_box_frame_piece();
|
||||
windowed_side_frame_piece();
|
||||
26
src/frames/pieces/side.scad
Normal file
26
src/frames/pieces/side.scad
Normal file
@@ -0,0 +1,26 @@
|
||||
/*
|
||||
* 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 <front-or-back.scad>
|
||||
|
||||
module side_frame_piece() {
|
||||
piece_width = panel_support_width+frame_wall+frame_mount_column_width;
|
||||
difference() {
|
||||
intersection() {
|
||||
left_frame();
|
||||
// include the whole left wall (including mount columns)
|
||||
translate([-(frame_x/2)+(piece_width/2), 0, 0])
|
||||
cube([piece_width, frame_piece_y_y, frame_z], center=true);
|
||||
}
|
||||
// minus the top and bottom
|
||||
front_or_back_frame_piece();
|
||||
rotate([180, 0, 0]) front_or_back_frame_piece();
|
||||
}
|
||||
}
|
||||
|
||||
side_frame_piece();
|
||||
31
src/misc/decorative-corner.scad
Normal file
31
src/misc/decorative-corner.scad
Normal file
@@ -0,0 +1,31 @@
|
||||
/* A bit of plastic to put on the corners of a case, just for more flair and seam hiding.
|
||||
*
|
||||
* Note: this only works on the standard side and front/back pieces, not the longish/extended pieces.
|
||||
*
|
||||
* SPDX-FileCopyrightText: © 2025 Brian S. Stephan <bss@incorporeal.org>
|
||||
* SPDX-License-Identifier: GPL-3.0-or-later
|
||||
*/
|
||||
|
||||
include <parameters.scad>
|
||||
include <components.scad>
|
||||
|
||||
module decorative_corner() {
|
||||
deco_thickness = 2;
|
||||
difference() {
|
||||
// start with the frame shape itself, just grown a bit
|
||||
resize(newsize=[frame_x+(deco_thickness*2), frame_y+(deco_thickness*2), frame_z+(deco_thickness*2)])
|
||||
frame_solid();
|
||||
// lob off the pieces to make a corner
|
||||
translate([(panel_to_frame_point_offset+deco_thickness*2)*1.5, 0, 0])
|
||||
cube([frame_x, frame_y*2, frame_z*2], center=true);
|
||||
translate([0, (panel_to_frame_point_offset+deco_thickness*2)*1.5, 0])
|
||||
cube([frame_x*2, frame_y, frame_z*2], center=true);
|
||||
// carve out the inside
|
||||
frame_solid();
|
||||
// holes for bolts
|
||||
translate([0, 0, frame_z/2]) panel_holes();
|
||||
translate([0, 0, -frame_z/2]) rotate([0, 180, 0]) panel_holes();
|
||||
}
|
||||
}
|
||||
|
||||
decorative_corner();
|
||||
36
src/misc/decorative-middle.scad
Normal file
36
src/misc/decorative-middle.scad
Normal file
@@ -0,0 +1,36 @@
|
||||
/* A bit of plastic to put on the center of a case front, just for more flair and seam hiding.
|
||||
*
|
||||
* SPDX-FileCopyrightText: © 2025 Brian S. Stephan <bss@incorporeal.org>
|
||||
* SPDX-License-Identifier: GPL-3.0-or-later
|
||||
*/
|
||||
|
||||
include <parameters.scad>
|
||||
include <components.scad>
|
||||
|
||||
module decorative_half_middle() {
|
||||
deco_thickness = 2;
|
||||
translate([-frame_x/2+frame_wall, 0, 0]) difference() {
|
||||
// start with the frame shape itself, just grown a bit
|
||||
resize(newsize=[frame_x+(deco_thickness*2), frame_y+(deco_thickness*2), frame_z+(deco_thickness*2)])
|
||||
frame_solid();
|
||||
// make this appropriate for the middle
|
||||
scale([1, 1, 2]) side_chopper();
|
||||
// lob off the pieces to make a cornerish piece
|
||||
translate([-(panel_to_frame_point_offset+deco_thickness*2)*1.65, 0, 0])
|
||||
cube([frame_x, frame_y*2, frame_z*2], center=true);
|
||||
translate([0, (panel_to_frame_point_offset+deco_thickness*2)*1.5, 0])
|
||||
cube([frame_x*2, frame_y, frame_z*2], center=true);
|
||||
// carve out the inside
|
||||
frame_solid();
|
||||
// holes for bolts
|
||||
translate([0, 0, frame_z/2]) panel_holes();
|
||||
translate([0, 0, -frame_z/2]) rotate([0, 180, 0]) panel_holes();
|
||||
}
|
||||
}
|
||||
|
||||
module decorative_middle() {
|
||||
decorative_half_middle();
|
||||
mirror([1, 0, 0]) decorative_half_middle();
|
||||
}
|
||||
|
||||
decorative_middle();
|
||||
@@ -4,12 +4,13 @@
|
||||
*/
|
||||
|
||||
include <parameters.scad>
|
||||
decorative_radius_scale = 1.5;
|
||||
include <components.scad>
|
||||
|
||||
module button_24mm_decorative_plate() {
|
||||
difference() {
|
||||
// get a 2mm slice of the bigger button cylinders
|
||||
translate([0, 0, -55]) button_24mm_hole();
|
||||
// get a 2mm slice of the decorative button cylinders
|
||||
translate([0, 0, -50]) button_24mm_hole();
|
||||
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
|
||||
|
||||
@@ -8,8 +8,8 @@ include <components.scad>
|
||||
|
||||
module dir_arc_plus_w_24mm_8_button_decorative_plate() {
|
||||
difference() {
|
||||
// get a 2mm slice of the bigger button cylinders
|
||||
translate([0, 0, -55]) dir_arc_plus_w_24mm_8_button();
|
||||
// get a 2mm slice of the decorative button cylinders
|
||||
translate([0, 0, -50]) dir_arc_plus_w_24mm_8_button();
|
||||
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
|
||||
|
||||
@@ -5,25 +5,24 @@
|
||||
|
||||
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 + 12+3 = space around button
|
||||
left_plate_x = dir_arc_30mm_column_3_offset + 30 + 12;
|
||||
// layout offset + 30 = width for layout plus button width + 12+3 = space around button
|
||||
left_plate_y = dir_arc_w_30mm_row_4_offset + 30 + 12;
|
||||
left_plate_center_x = (left_plate_x + sega_2p_column_1_left_panel_edge_offset - 15)/2;
|
||||
// layout offset + 30 = width for layout plus button width + 12+3 = space around button
|
||||
right_plate_x = sega_2p_column_4_offset + 30 + 12;
|
||||
right_plate_center_x = (right_plate_x + sega_2p_column_1_left_panel_edge_offset - 15)/2;
|
||||
// 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)
|
||||
translate([right_plate_center_x, 15, 0]) linear_extrude(2) offset(r=3, $fn=100)
|
||||
square([right_plate_x, left_plate_y], center=true);
|
||||
translate([-left_plate_center_x, 15, 0]) linear_extrude(2) offset(r=3, $fn=50)
|
||||
translate([-left_plate_center_x, 15, 0]) linear_extrude(2) offset(r=3, $fn=100)
|
||||
square([left_plate_x, left_plate_y], center=true);
|
||||
/* translate([-50, 0, 0]) cube([200, 200, 2], center=true); */
|
||||
}
|
||||
|
||||
@@ -0,0 +1,34 @@
|
||||
/* decorative plate for directional and 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 dir_arc_plus_w_30mm_and_sega_2p_nine_decorative_superplate() {
|
||||
difference() {
|
||||
union() {
|
||||
hull() difference() {
|
||||
// get a 2mm slice of the decorative button cylinders
|
||||
union() {
|
||||
translate([-panel_x/2, 0, -50]) dir_arc_w_30mm();
|
||||
translate([panel_x/2, 0, -50]) sega_2p_nine();
|
||||
// customized position to make a top point even with the
|
||||
// top of the dir_arc_w_30mm piece, because it being
|
||||
// at an angle otherwise looks silly IMO
|
||||
translate([panel_x*23/32, 26.6, -50]) sega_2p_p1();
|
||||
}
|
||||
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_nine();
|
||||
}
|
||||
}
|
||||
|
||||
dir_arc_plus_w_30mm_and_sega_2p_nine_decorative_superplate();
|
||||
@@ -8,10 +8,10 @@ include <components.scad>
|
||||
|
||||
module dir_arc_plus_w_30mm_and_sega_2p_nine_decorative_plate() {
|
||||
difference() {
|
||||
// get a 2mm slice of the bigger button cylinders
|
||||
// get a 2mm slice of the jumbo decorative button cylinders
|
||||
union() {
|
||||
translate([-panel_x/2, 0, -65]) dir_arc_w_30mm();
|
||||
translate([panel_x/2, 0, -65]) sega_2p_nine();
|
||||
translate([-panel_x/2, 0, -70]) dir_arc_w_30mm();
|
||||
translate([panel_x/2, 0, -70]) sega_2p_nine();
|
||||
}
|
||||
translate([0, 0, -100]) cube([500, 500, 198], center=true);
|
||||
translate([0, 0, 100]) cube([500, 500, 198], center=true);
|
||||
|
||||
@@ -6,15 +6,16 @@
|
||||
|
||||
include <parameters.scad>
|
||||
decorative_radius_scale = 1.5;
|
||||
jumbo_decorative_radius_scale = 0;
|
||||
include <components.scad>
|
||||
|
||||
module dir_arc_plus_w_30mm_plate_decorative_plate() {
|
||||
difference() {
|
||||
// get a 2mm slice of the bigger button cylinders
|
||||
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);
|
||||
hull() difference() {
|
||||
// get a 2mm slice of the decorative button cylinders
|
||||
translate([-panel_x/2, 0, -50]) 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();
|
||||
}
|
||||
|
||||
@@ -8,8 +8,8 @@ include <components.scad>
|
||||
|
||||
module dir_arc_plus_w_30mm_decorative_plate() {
|
||||
difference() {
|
||||
// get a 2mm slice of the bigger button cylinders
|
||||
translate([0, 0, -55]) dir_arc_w_30mm();
|
||||
// get a 2mm slice of the decorative button cylinders
|
||||
translate([0, 0, -50]) 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
|
||||
|
||||
@@ -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();
|
||||
@@ -8,8 +8,8 @@ include <components.scad>
|
||||
|
||||
module sega_2p_6_button_decorative_plate() {
|
||||
difference() {
|
||||
// get a 2mm slice of the bigger button cylinders
|
||||
translate([0, 0, -55]) sega_2p_6_button();
|
||||
// get a 2mm slice of the decorative button cylinders
|
||||
translate([0, 0, -50]) sega_2p_6_button();
|
||||
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
|
||||
|
||||
@@ -6,15 +6,16 @@
|
||||
|
||||
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);
|
||||
hull() difference() {
|
||||
// get a 2mm slice of the decorative button cylinders
|
||||
translate([panel_x/2, 0, -50]) 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();
|
||||
}
|
||||
|
||||
@@ -6,20 +6,19 @@
|
||||
|
||||
include <parameters.scad>
|
||||
decorative_radius_scale = 1.5;
|
||||
jumbo_decorative_radius_scale = 0;
|
||||
include <components.scad>
|
||||
|
||||
module sega_2p_nine_decorative_plate_of_plates() {
|
||||
module sega_2p_nine_decorative_plate() {
|
||||
difference() {
|
||||
// get a 2mm slice of the bigger button cylinders
|
||||
union() {
|
||||
translate([panel_x/2, 0, -25]) hull() sega_2p_nine();
|
||||
hull() difference() {
|
||||
// get a 2mm slice of the decorative button cylinders
|
||||
translate([panel_x/2, 0, -50]) sega_2p_nine();
|
||||
translate([0, 0, -100]) cube([500, 500, 198], center=true);
|
||||
translate([0, 0, 100]) cube([500, 500, 198], center=true);
|
||||
}
|
||||
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();
|
||||
sega_2p_nine_decorative_plate();
|
||||
|
||||
@@ -8,8 +8,8 @@ include <components.scad>
|
||||
|
||||
module sega_2p_nine_decorative_plate() {
|
||||
difference() {
|
||||
// get a 2mm slice of the bigger button cylinders
|
||||
translate([0, 0, -55]) sega_2p_nine();
|
||||
// get a 2mm slice of the decorative button cylinders
|
||||
translate([0, 0, -50]) 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
|
||||
|
||||
21
src/misc/decorative-plate-sega-2p.scad
Normal file
21
src/misc/decorative-plate-sega-2p.scad
Normal file
@@ -0,0 +1,21 @@
|
||||
/* A decorative plate for the Sega 2P layout.
|
||||
*
|
||||
* 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_decorative_plate() {
|
||||
difference() {
|
||||
// get a 2mm slice of the decorative button cylinders
|
||||
translate([0, 0, -50]) sega_2p();
|
||||
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();
|
||||
}
|
||||
}
|
||||
|
||||
sega_2p_decorative_plate();
|
||||
@@ -8,9 +8,9 @@ include <components.scad>
|
||||
|
||||
module jlf_dustwasher() {
|
||||
difference() {
|
||||
cylinder(r=lever_plate_hole*decorative_radius_scale, h=2, $fn=50, center=true);
|
||||
// 5.25 = 4.55 (diameter of shaft is 9.10mm) + .25 to let it take an angle
|
||||
cylinder(r=4.8, h=2.1, $fn=50, center=true);
|
||||
cylinder(r=jlf_dustwasher_radius, h=2, $fn=100, center=true);
|
||||
cylinder(r1=jlf_shaft_inner_radius, r2=jlf_shaft_inner_radius+shaft_position_tolerance,
|
||||
h=2.001, $fn=100, center=true);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -8,9 +8,9 @@ include <components.scad>
|
||||
|
||||
module lsx_nobi_dustwasher() {
|
||||
difference() {
|
||||
cylinder(r=lever_plate_hole*decorative_radius_scale, h=2, $fn=50, center=true);
|
||||
// 5.25 = 5 (diameter of shaft is 10mm) + .25 to let it take an angle
|
||||
cylinder(r=5.25+hole_tolerance, h=2.1, $fn=50, center=true);
|
||||
cylinder(r=lsx_nobi_dustwasher_radius, h=2, $fn=100, center=true);
|
||||
cylinder(r1=lsx_nobi_shaft_inner_radius, r2=lsx_nobi_shaft_inner_radius+shaft_position_tolerance,
|
||||
h=2.001, $fn=100, center=true);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
24
src/misc/m4-hex-spacer-sleeve.scad
Normal file
24
src/misc/m4-hex-spacer-sleeve.scad
Normal file
@@ -0,0 +1,24 @@
|
||||
/* Wrap a smaller width hex spacer with plastic to get it to fit in our standard post hole.
|
||||
*
|
||||
* Since the hex spacers can vary in width, you may have to adjust the inner dimensions
|
||||
* to make this work right for your piece, but this worked right for mine. YMMV.
|
||||
*
|
||||
* SPDX-FileCopyrightText: © 2025 Brian S. Stephan <bss@incorporeal.org>
|
||||
* SPDX-License-Identifier: GPL-3.0-or-later
|
||||
*/
|
||||
include <parameters.scad>
|
||||
include <components.scad>
|
||||
|
||||
module small_m4_hole() {
|
||||
scale([1, 1, 2]) cylinder(r=3.25, h=frame_z, $fn=6, center=true);
|
||||
}
|
||||
|
||||
module m4_hex_spacer_sleeve() {
|
||||
difference() {
|
||||
resize([0, 0, 45]) frame_hex_bolt_hole();
|
||||
small_m4_hole();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
m4_hex_spacer_sleeve();
|
||||
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: © 2023 Brian S. Stephan <bss@incorporeal.org>
|
||||
* SPDX-License-Identifier: GPL-3.0-or-later
|
||||
*/
|
||||
|
||||
include <parameters.scad>
|
||||
include <components.scad>
|
||||
use <lever-and-dir_arc-plus-w-30mm-panel.scad>
|
||||
|
||||
module lever_and_dir_arc_w_30mm_panel_with_oled() {
|
||||
difference() {
|
||||
lever_and_dir_arc_w_30mm_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_dir_arc_w_30mm_panel_with_oled();
|
||||
@@ -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();
|
||||
|
||||
@@ -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 <sega-2p-nine-plus-aux-button.scad>
|
||||
|
||||
module sega_2p_nine_plus_aux_button_with_mount() {
|
||||
sega_2p_nine_plus_aux_button();
|
||||
translate([20, -50, -(panel_z/2) - 3]) pcb_mount();
|
||||
}
|
||||
|
||||
sega_2p_nine_plus_aux_button_with_mount();
|
||||
@@ -6,13 +6,12 @@
|
||||
include <parameters.scad>
|
||||
include <components.scad>
|
||||
|
||||
module sega_2p_nine_plus_control_panel() {
|
||||
module sega_2p_nine_plus_aux_button() {
|
||||
difference() {
|
||||
panel();
|
||||
sega_2p_nine();
|
||||
rotate([0, 0, 180]) side_chopper();
|
||||
translate([89, 30, 0]) button_24mm_hole();
|
||||
}
|
||||
}
|
||||
|
||||
sega_2p_nine_plus_control_panel();
|
||||
sega_2p_nine_plus_aux_button();
|
||||
@@ -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 <sega-2p-nine-plus-control-panel.scad>
|
||||
|
||||
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_nine_plus_control_panel_with_mount();
|
||||
17
src/panels/inset/sega-2p-panel.scad
Normal file
17
src/panels/inset/sega-2p-panel.scad
Normal file
@@ -0,0 +1,17 @@
|
||||
/* A top panel in the very popular Sega 2P layout.
|
||||
*
|
||||
* SPDX-FileCopyrightText: © 2025 Brian S. Stephan <bss@incorporeal.org>
|
||||
* SPDX-License-Identifier: GPL-3.0-or-later
|
||||
*/
|
||||
|
||||
include <parameters.scad>
|
||||
include <components.scad>
|
||||
|
||||
module sega_2p_panel() {
|
||||
difference() {
|
||||
panel();
|
||||
sega_2p();
|
||||
}
|
||||
}
|
||||
|
||||
sega_2p_panel();
|
||||
@@ -1,18 +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-nine-plus-control-panel-with-mount.scad>
|
||||
|
||||
module sega_2p_nine_plus_control_right_overhang_panel_with_mount_with_oled() {
|
||||
difference() {
|
||||
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_nine_plus_control_right_overhang_panel_with_mount_with_oled();
|
||||
@@ -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();
|
||||
|
||||
@@ -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-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([20, -50, -(panel_z/2) - 3]) pcb_mount();
|
||||
}
|
||||
|
||||
sega_2p_nine_plus_aux_button_right_overhang_panel_with_mount();
|
||||
@@ -6,7 +6,7 @@
|
||||
include <parameters.scad>
|
||||
include <components.scad>
|
||||
|
||||
module sega_2p_nine_plus_control_right_overhang_panel() {
|
||||
module sega_2p_nine_plus_aux_button_right_overhang_panel() {
|
||||
difference() {
|
||||
panel_with_raised_overhang();
|
||||
sega_2p_nine();
|
||||
@@ -15,4 +15,4 @@ module sega_2p_nine_plus_control_right_overhang_panel() {
|
||||
}
|
||||
}
|
||||
|
||||
sega_2p_nine_plus_control_right_overhang_panel();
|
||||
sega_2p_nine_plus_aux_button_right_overhang_panel();
|
||||
@@ -1,15 +0,0 @@
|
||||
/*
|
||||
* SPDX-FileCopyrightText: © 2023 Brian S. Stephan <bss@incorporeal.org>
|
||||
* SPDX-License-Identifier: GPL-3.0-or-later
|
||||
*/
|
||||
|
||||
include <parameters.scad>
|
||||
include <components.scad>
|
||||
use <right-sega-2p-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();
|
||||
@@ -3,6 +3,10 @@
|
||||
* SPDX-License-Identifier: GPL-3.0-or-later
|
||||
*/
|
||||
|
||||
|
||||
// CONNECTION POINT SIZES
|
||||
|
||||
|
||||
// adjustments
|
||||
hole_tolerance = 0.15;
|
||||
|
||||
@@ -31,24 +35,38 @@ big_button_radius = 15 + hole_tolerance;
|
||||
// radius + value below should leave space for the nut and for fingers to grab the nut
|
||||
button_radius_connector_space = 5;
|
||||
|
||||
// standard lever hole
|
||||
lever_plate_hole = 12;
|
||||
|
||||
// neutrik D screw holes
|
||||
neutrik_d_screw_radius = 1.6 + hole_tolerance;
|
||||
neutrik_d_radius = 12 + hole_tolerance;
|
||||
|
||||
|
||||
// ELEMENT DIMENSIONS
|
||||
|
||||
|
||||
// JLF mount dimensions
|
||||
lever_mount_x = 53;
|
||||
lever_mount_y = 95;
|
||||
lever_mount_z = 2;
|
||||
|
||||
// standard lever hole
|
||||
lever_plate_hole = 12;
|
||||
|
||||
// case dimensions
|
||||
// base frame box. reminder: top of inside (including mounts) is chopped by panel_z for plates
|
||||
// base frame box. reminder: inside top and bottom (including mounts) are chopped by panel_z for plates
|
||||
frame_x = 233;
|
||||
frame_y = 208;
|
||||
frame_z = 57;
|
||||
|
||||
// stand dimensions to display a stick
|
||||
stand_x = 5;
|
||||
stand_y = frame_z;
|
||||
stand_z = 15;
|
||||
// depth of the "lip" of the frame that the top plate sets into/supports the overhang
|
||||
frame_wall = 4;
|
||||
|
||||
// top plate, which can either be the whole plate ("inset") or the mounting frame for a plate that overhangs
|
||||
panel_x = frame_x - (frame_wall * 2);
|
||||
panel_y = frame_y - (frame_wall * 2);
|
||||
panel_z = 5;
|
||||
|
||||
// some dimensions for frame pieces, useful in doing some intersections and chopping
|
||||
frame_piece_x_x = frame_x - (frame_wall * 2); // essentially panel_x, yes
|
||||
frame_piece_y_y = frame_y; // the whole y of the frame, yes
|
||||
|
||||
// degree to which the extended frame pieces stick out from the end of the frame
|
||||
frame_extension_x = 25;
|
||||
@@ -61,20 +79,12 @@ overhang_panel_bevel_height = 1;
|
||||
|
||||
frame_center_to_neutrik = 70;
|
||||
|
||||
// depth of the "lip" of the frame that the top plate sets into/supports the overhang
|
||||
frame_wall = 4;
|
||||
|
||||
// width of the column in the frame corners to support the hex bolt
|
||||
frame_mount_column_width = 20;
|
||||
|
||||
// per neutrik (mm)
|
||||
neutrik_panel_thickness = 3;
|
||||
|
||||
// top plate, which can either be the whole plate ("inset") or the mounting frame for a plate that overhangs
|
||||
panel_x = frame_x - (frame_wall * 2);
|
||||
panel_y = frame_y - (frame_wall * 2);
|
||||
panel_z = 5;
|
||||
|
||||
// inside the frame
|
||||
inner_frame_z = frame_z - (panel_z * 2);
|
||||
|
||||
@@ -90,27 +100,51 @@ panel_overhang_amount = 8.5;
|
||||
overhang_panel_x = panel_x + (frame_wall * 2) + (panel_overhang_amount * 2);
|
||||
overhang_panel_y = panel_y + (frame_wall * 2) + (panel_overhang_amount * 2);
|
||||
|
||||
panel_to_frame_point_x = (panel_x/2)-10;
|
||||
panel_to_frame_point_y = (panel_y/2)-10;
|
||||
panel_to_frame_point_offset = 10;
|
||||
panel_to_frame_point_x = (panel_x/2) - panel_to_frame_point_offset;
|
||||
panel_to_frame_point_y = (panel_y/2) - panel_to_frame_point_offset;
|
||||
|
||||
// frame interior that supports the top plates
|
||||
panel_support_width = 5;
|
||||
|
||||
// neutrik D screw holes
|
||||
neutrik_d_screw_radius = 1.6 + hole_tolerance;
|
||||
neutrik_d_radius = 12 + hole_tolerance;
|
||||
|
||||
// additional button radius for decorative panels, etc.
|
||||
decorative_radius_scale = 1.75;
|
||||
jumbo_decorative_radius_scale = 2;
|
||||
|
||||
// decorative wall cutout parameters
|
||||
// thicker than the actual base wall to account for the longish pieces
|
||||
wall_cutout_depth = frame_wall * 3;
|
||||
|
||||
// decorative slash parameters
|
||||
slash_inner_displacement = 10;
|
||||
slash_width = 15;
|
||||
slash_height = frame_z-panel_z*3;
|
||||
|
||||
// dustwasher parameters
|
||||
jlf_dustwasher_radius = 19;
|
||||
jlf_shaft_inner_radius = 4.55;
|
||||
|
||||
lsx_nobi_dustwasher_radius = jlf_dustwasher_radius;
|
||||
lsx_nobi_shaft_inner_radius = 5;
|
||||
|
||||
shaft_position_tolerance = 2;
|
||||
|
||||
// stand dimensions to display a stick
|
||||
stand_x = 5;
|
||||
stand_y = frame_z;
|
||||
stand_z = 15;
|
||||
|
||||
// oled cutout stuff
|
||||
ssd1306_x = 23;
|
||||
ssd1306_y = 12;
|
||||
ssd1306_z = 1;
|
||||
adafruit_pid_326_oled_ssd1306_cutout_x = 30;
|
||||
adafruit_pid_326_oled_ssd1306_cutout_y = 32;
|
||||
|
||||
|
||||
// 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;
|
||||
|
||||
Reference in New Issue
Block a user