Compare commits
14 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
dabfc4258b
|
|||
|
a7206add7c
|
|||
|
d70a2f90c6
|
|||
|
0513da125f
|
|||
|
e7543dceb0
|
|||
|
45439cbf6d
|
|||
|
b21cb75816
|
|||
|
882a34db55
|
|||
|
90f5670c2a
|
|||
|
96342f1b16
|
|||
|
7bc6acfb93
|
|||
|
16f41fe245
|
|||
|
c8881fc172
|
|||
|
1f8b5d527b
|
28
Makefile
28
Makefile
@@ -1,15 +1,19 @@
|
|||||||
SRC_FILES := $(wildcard ./src/*.scad)
|
EXCLUDES = blown-up-demo components parameters
|
||||||
SRC_FILES := $(filter-out ./src/all-together-demo.scad, $(SRC_FILES))
|
OBJECTS := $(filter-out $(EXCLUDES),$(patsubst src/%.scad,%,$(wildcard src/*.scad)))
|
||||||
SRC_FILES := $(filter-out ./src/blown-up-demo.scad, $(SRC_FILES))
|
dir_guard=@mkdir -p ./build
|
||||||
SRC_FILES := $(filter-out ./src/components.scad, $(SRC_FILES))
|
|
||||||
SRC_FILES := $(filter-out ./src/roundedcube.scad, $(SRC_FILES))
|
all: $(OBJECTS)
|
||||||
all: $(SRC_FILES)
|
$(dir_guard)
|
||||||
mkdir -p ./build
|
mkdir -p ./build/docs
|
||||||
for file in $^ ; do \
|
cp ./docs/README-objects.md ./build/README.md
|
||||||
openscad -o $${file}.stl $${file} ; \
|
cp ./docs/assembly-and-tips.md ./build/docs/assembly-and-tips.md
|
||||||
mv $${file}.stl ./build/ ; \
|
cp ./docs/printing-and-materials.md ./build/docs/printing-and-materials.md
|
||||||
done
|
cp ./LICENSE ./build/LICENSE
|
||||||
zip ./build/buildable-stick-system-`git describe --dirty`-stls.zip ./build/*
|
pushd ./build; zip ./buildable-stick-system-`git describe --dirty`-stls.zip . -r; popd
|
||||||
|
|
||||||
|
$(OBJECTS):
|
||||||
|
$(dir_guard)
|
||||||
|
openscad -o build/$@.stl src/$@.scad
|
||||||
|
|
||||||
clean:
|
clean:
|
||||||
rm -rf ./build
|
rm -rf ./build
|
||||||
|
|||||||
41
README.md
41
README.md
@@ -11,7 +11,7 @@ know someone or a library with a 3D printer? The Buildable Stick System may be t
|
|||||||
|
|
||||||
[OpenSCAD-based illustration of how the components for an overhang panel-based stick fit together.]
|
[OpenSCAD-based illustration of how the components for an overhang panel-based stick fit together.]
|
||||||
|
|
||||||

|

|
||||||
|
|
||||||
[Photo of a completed inset panel-based stick.]
|
[Photo of a completed inset panel-based stick.]
|
||||||
|
|
||||||
@@ -47,12 +47,8 @@ about when/how to use specific parts:
|
|||||||
## Printing
|
## 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
|
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 for my purposes, though the slicer has done a couple
|
OpenStickCommunity. Standard settings seem sufficiently sturdy, but see `docs/materials-and-printing.md` for more
|
||||||
weird things, in my experience.
|
thoughts and settings based on my tinkering with prints.
|
||||||
|
|
||||||
My preferred settings are 3 wall loops with 20% gyroid sparse infill. This gives the models a bit more weight and
|
|
||||||
stability, but something like 2 wall loops, 15% grid sparse infill is fine and does not lead to a weak enclosure. The
|
|
||||||
costs below have been made against my settings.
|
|
||||||
|
|
||||||
## Assembling
|
## Assembling
|
||||||
|
|
||||||
@@ -83,7 +79,7 @@ What you'll need beyond these objects:
|
|||||||
## Rough Costs
|
## Rough Costs
|
||||||
|
|
||||||
This is a rough estimate of the cost to produce one of these sticks, assuming a usual 2-frame design and layout.
|
This is a rough estimate of the cost to produce one of these sticks, assuming a usual 2-frame design and layout.
|
||||||
Filament masses from Bambu Studio estimates, using Bambu PLA Basic.
|
Filament masses from Bambu Studio estimates, using Bambu PLA Basic, 20% gyroid infill and 3 wall loops.
|
||||||
|
|
||||||
* Left and right frame: **$10.42 USD** (208.50g each, as of 2024-02-22)
|
* Left and right frame: **$10.42 USD** (208.50g each, as of 2024-02-22)
|
||||||
* Left and right (inset) top panels: **~$6.40 USD** (~128g each, as of 2024-02-22)
|
* Left and right (inset) top panels: **~$6.40 USD** (~128g each, as of 2024-02-22)
|
||||||
@@ -138,14 +134,7 @@ to hang out and discuss issues and features and whatnot.
|
|||||||
|
|
||||||
## Attribution
|
## Attribution
|
||||||
|
|
||||||
Inspired by the incredible work of [TheTrain](https://github.com/TheTrainGoes) on the [OpenStickCommunity Fightstick
|
### Author and Licensing
|
||||||
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/).
|
|
||||||
|
|
||||||
## Author and Licensing
|
|
||||||
|
|
||||||
Written by and copyright Brian S. Stephan (<bss@incorporeal.org>).
|
Written by and copyright Brian S. Stephan (<bss@incorporeal.org>).
|
||||||
|
|
||||||
@@ -158,3 +147,23 @@ warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Gen
|
|||||||
|
|
||||||
You should have received a copy of the GNU General Public License along with the Buildable Stick System. If not, see
|
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/>.
|
<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
|
||||||
|
a bit of a gray area for physical objects, but likely applies to distribution of modified or unmodified STL, STEP, etc.
|
||||||
|
files at a minimum. The easiest way to satisfy the GPLv3 in either situation is to provide a link to the source code
|
||||||
|
(either the unmodified mainline project, or your copy, with modifications listed in a "prominent notice"); something
|
||||||
|
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].
|
||||||
|
|||||||
65
docs/README-objects.md
Normal file
65
docs/README-objects.md
Normal file
@@ -0,0 +1,65 @@
|
|||||||
|
# The Buildable Stick System
|
||||||
|
|
||||||
|
Files for 3D printing an arcade stick.
|
||||||
|
|
||||||
|
## Objects
|
||||||
|
|
||||||
|
The following notes document the objects in the Buildable Stick System and how you can use them:
|
||||||
|
|
||||||
|
* `bottom-panel-inset`: a simple solid panel that fits into the bottom of a frame box.
|
||||||
|
* `bottom-panel-overhang-*`: solid panels whose base fits into the bottom of a frame box, but have a longer sheet that
|
||||||
|
extends beyond the frame, creating a sandwich kind of look; the various forms hang over more or less of the frame,
|
||||||
|
expecting it will be connected to other frames.
|
||||||
|
* `frame-{left,middle,right,solo}`: the core frame of the stick, these are complete boxes; since they are long and
|
||||||
|
narrow, and need supports to print the space for the insets, these may be difficult to print nicely.
|
||||||
|
* `frame-piece-*`: the core frame broken up by individual faces, which are easier to print and essentially just as
|
||||||
|
sturdy.
|
||||||
|
* `frame-piece-*-extended*`: frame pieces that have been stretched out beyond the normal frame dimensions in order to
|
||||||
|
make a nice bevel on the sides and/or bottom; this, interestingly, tends to make the stick look a bit thinner than if
|
||||||
|
it was just a simple box.
|
||||||
|
* `misc-decorative-plate-*`: things you can print to snazz up face buttons mounting, auxillary button points, etc..
|
||||||
|
* `misc-dustwasher-*`: simple dustwashers for levers.
|
||||||
|
* `misc-lever-mount-*`: lever mounts of various shapes and depths to get the desired lever height when mounting a lever
|
||||||
|
to a panel (with the appropriate cutouts).
|
||||||
|
* `misc-neutrik-*`: like the decorative plates, but these are a bit more necessary by their design.
|
||||||
|
* `misc-rocker-*`: rocker SPDT switches don't have mounting holes, this allows you to attach them to the frame.
|
||||||
|
* `top-panel-inset-*`: various lever and/or button layouts for using as the face(s) of a stick.
|
||||||
|
* `top-panel-overhang-`: same idea as the inset top panels, but overhung over the frame to make the sandwich look; these
|
||||||
|
also leave a bit more space inside the frame, which might accommodate a taller lever.
|
||||||
|
|
||||||
|
Feel free to request or contribute to more objects, see the links to Git repos below.
|
||||||
|
|
||||||
|
## Printing and Assembling
|
||||||
|
|
||||||
|
Additional documentation regarding printing the objects and assembling the stick are available in
|
||||||
|
`docs/printing-and-materials.md` and `docs/assembly-and-tips.md`, respectively.
|
||||||
|
|
||||||
|
## Author and Licensing
|
||||||
|
|
||||||
|
Written by and copyright Brian S. Stephan (<bss@incorporeal.org>).
|
||||||
|
|
||||||
|
These arcade stick parts are from the Buildable Stick System; the source code to this program is available under the
|
||||||
|
terms of the GNU General Public License, at:
|
||||||
|
|
||||||
|
* <https://github.com/bsstephan/buildable-stick-system>, or
|
||||||
|
* <https://git.incorporeal.org/bss/buildable-stick-system>
|
||||||
|
|
||||||
|
See the tags/releases for the version of the source code corresponding to the STLs you received.
|
||||||
|
|
||||||
|
The Buildable Stick System is free software: you can redistribute it and/or modify it under the terms of the GNU General
|
||||||
|
Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any
|
||||||
|
later version.
|
||||||
|
|
||||||
|
The Buildable Stick System is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the
|
||||||
|
implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
|
||||||
|
details.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU General Public License along with 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/).
|
||||||
@@ -2,6 +2,39 @@
|
|||||||
|
|
||||||
Just some miscellaneous notes for any dear reader, or more likely, my own forgetful self.
|
Just some miscellaneous notes for any dear reader, or more likely, my own forgetful self.
|
||||||
|
|
||||||
|
## 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.
|
||||||
|
|
||||||
|
1. Prepare the frame top pieces --- `frame-piece-top-left-or-right`: this is your best shot to get auxillary buttons,
|
||||||
|
panel connectors, and the like installed, so do it now, and give them a good tighten. You shouldn't need to adjust
|
||||||
|
these again, so finish their installation while the pieces are free.
|
||||||
|
1. This of course includes decorative plates --- e.g. `misc-decorative-plate-aux-control-three-button-cluster` ---
|
||||||
|
you may choose to use. These are held to the top pieces by the buttons or component mounting screws.
|
||||||
|
2. Start the top panels --- `top-panel-(inset|overhang)-*`: you want both to get the components installed now
|
||||||
|
when it's easy, and to make sure that the overall assembly works with your components, so again get your buttons,
|
||||||
|
lever, etc., in place. You can secure them at this point.
|
||||||
|
1. If you are using a button decorative plate that spans two panels --- e.g.
|
||||||
|
`src/misc-decorative-plate-dir_arc-plus-w-30mm-and-sega-2p-plus-one` --- take care to align the two panels as
|
||||||
|
tightly as possible, and accurately, as they will be hard to adjust once everything is secured and in the frame.
|
||||||
|
2. If using a lever, don't forget the lever mount spacer --- `src/misc-lever-mount-sanwa-seimitsu` --- if you want
|
||||||
|
it, and tighten those mounting bolts now as well.
|
||||||
|
3. Create the frame box by combining your `frame-piece-*` parts together. This will be relatively stable just via
|
||||||
|
friction fit.
|
||||||
|
4. Rest the frame top-up on a desk, and put the standoffs through the holes. This will probably be tight, and you may
|
||||||
|
even need a rubber mallet or similar to drive the standoffs through the holes.
|
||||||
|
5. Insert the top panels into the frame.
|
||||||
|
6. Insert the bolts for the top panels, make any last adjustments, and tighten them.
|
||||||
|
7. At this point you have an open box with access to all your components. Do all of your wiring.
|
||||||
|
1. Tighten the buttons and etc. if you didn't in step 2.
|
||||||
|
8. Insert the bottom panels into the frame.
|
||||||
|
9. Insert the bottom bolts for the bottom panels, and tighten them.
|
||||||
|
|
||||||
|
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
|
## 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
|
As of v4.1 (or in v3), the top and bottom inset panels both insert into the frame, inside the frame "lip", meaning that
|
||||||
|
|||||||
BIN
docs/finished-v4.2.jpg
Normal file
BIN
docs/finished-v4.2.jpg
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 277 KiB |
@@ -1,25 +0,0 @@
|
|||||||
# Materials
|
|
||||||
|
|
||||||
bss's random thoughts and notes on 3D printing materials.
|
|
||||||
|
|
||||||
## Bambu Lab PLA
|
|
||||||
|
|
||||||
### Basic
|
|
||||||
|
|
||||||
* In general, nice texture, but under direct light, you can see a bit of the infill pattern through the walls. Not super
|
|
||||||
distracting, but it's there.
|
|
||||||
|
|
||||||
#### White
|
|
||||||
|
|
||||||
* Walls are practically translucent, you can almost always see the infill. Do not use for major components.
|
|
||||||
* Looks perfectly good for thin things like the Neutrik plates, decorative pieces, that kind of thing.
|
|
||||||
|
|
||||||
### Matte
|
|
||||||
|
|
||||||
* I don't like the texture as much, but they do produce nice non-primary color colorways, and you don't see the infill.
|
|
||||||
* Seems like their plastic treatment leaves some plate residue, so be better about cleaning it or you'll get ghosts.
|
|
||||||
|
|
||||||
## Hatchbox PLA
|
|
||||||
|
|
||||||
* **Blue:** very blue. Wife likes it.
|
|
||||||
* **White:** more opaque than the Bambu PLA mentioned above, makes a pretty decent (still slightly translucent) frame.
|
|
||||||
58
docs/printing-and-materials.md
Normal file
58
docs/printing-and-materials.md
Normal file
@@ -0,0 +1,58 @@
|
|||||||
|
# Printing and Materials
|
||||||
|
|
||||||
|
bss's random thoughts and notes on the actual printing of the Buildable Stick System.
|
||||||
|
|
||||||
|
## Printing Settings
|
||||||
|
|
||||||
|
My preferred settings are 3 wall loops with 20% 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.
|
||||||
|
|
||||||
|
### Working With Flatness
|
||||||
|
|
||||||
|
A lot of the pieces are long and flat, so I recommend really dialing in your printer settings. The frame pieces make
|
||||||
|
corner curling of the frame less of a problem, but you may still get it on the panels and the beveled frame pieces.
|
||||||
|
|
||||||
|
#### Bottom Layer Notes
|
||||||
|
|
||||||
|
Considering the visible layer (usually, the bottom layer) pattern is ideal. Monotonic prints fast but creates long,
|
||||||
|
uniform lines that create reflection patterns on long, flat surfaces. This can be especially distracting for the top
|
||||||
|
panels and their decorative plates, since they're what you're looking at 90% of the time, and the holes break up a
|
||||||
|
perfect pattern, making the long lines stand out even more.
|
||||||
|
|
||||||
|
* **Top panels:** using a non-uniform pattern reduces if not eliminates the problem of the surface catching the light,
|
||||||
|
but for some patterns, it may come at the expense of time. Other patterns may improve beyond monotonic, but hilbert
|
||||||
|
curve seems to be the gold standard.
|
||||||
|
* **Circle-centric decorative plates:** don't use complex patterns like Archimedean chords on decorative plates, as they
|
||||||
|
seem to have issues with filling curves and you still want to try to maximize contact with walls. Concentric is great
|
||||||
|
here if you dial it in.
|
||||||
|
|
||||||
|
The concentric pattern is a good default and prints awesome parts, with the only exception being the top panels, which
|
||||||
|
benefit from using a Hilbert curve initial layer pattern instead of concentric.
|
||||||
|
|
||||||
|
## Materials
|
||||||
|
|
||||||
|
Some notes on PLA brands, usages, etc.
|
||||||
|
|
||||||
|
### Bambu Lab PLA
|
||||||
|
|
||||||
|
#### Basic
|
||||||
|
|
||||||
|
* In general, nice texture, but under direct light, you can see a bit of the infill pattern through the walls. Not super
|
||||||
|
distracting, but it's there.
|
||||||
|
|
||||||
|
##### White
|
||||||
|
|
||||||
|
* Walls are practically translucent, you can almost always see the infill. 3 wall loops and a varying infill pattern
|
||||||
|
definitely help here.
|
||||||
|
* Looks perfectly good for thin things like the Neutrik plates, decorative pieces, that kind of thing.
|
||||||
|
|
||||||
|
#### Matte
|
||||||
|
|
||||||
|
* I don't like the texture as much, but they do produce nice non-primary color colorways, and you don't see the infill.
|
||||||
|
* Seems like their plastic treatment leaves some plate residue, so be better about cleaning it or you'll get ghosts.
|
||||||
|
|
||||||
|
### Hatchbox PLA
|
||||||
|
|
||||||
|
* **Blue:** very blue. Wife likes it.
|
||||||
|
* **White:** more opaque than the Bambu PLA mentioned above, makes a pretty decent (still slightly translucent) frame.
|
||||||
@@ -164,32 +164,7 @@ module levermountcountersinks() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
module base_panel() {
|
module base_panel() {
|
||||||
difference() {
|
|
||||||
union() {
|
|
||||||
cube([panel_x, panel_y, panel_z], center=true);
|
cube([panel_x, panel_y, panel_z], center=true);
|
||||||
// add posts that sink into the frame, just to give
|
|
||||||
// a somewhat more sturdy/tight connection
|
|
||||||
translate([panel_to_frame_point_x, panel_to_frame_point_y, -panel_z])
|
|
||||||
scale([1.5, 1.5, 0.1]) frame_hex_bolt_hole();
|
|
||||||
translate([-panel_to_frame_point_x, panel_to_frame_point_y, -panel_z])
|
|
||||||
scale([1.5, 1.5, 0.1]) frame_hex_bolt_hole();
|
|
||||||
translate([panel_to_frame_point_x, -panel_to_frame_point_y, -panel_z])
|
|
||||||
scale([1.5, 1.5, 0.1]) frame_hex_bolt_hole();
|
|
||||||
translate([-panel_to_frame_point_x, -panel_to_frame_point_y, -panel_z])
|
|
||||||
scale([1.5, 1.5, 0.1]) frame_hex_bolt_hole();
|
|
||||||
}
|
|
||||||
// the posts mentioned above need space for the actual hex bolts
|
|
||||||
// used in connecting to the frame
|
|
||||||
translate([panel_to_frame_point_x, panel_to_frame_point_y, -panel_z])
|
|
||||||
scale([1, 1, 0.1]) frame_hex_bolt_hole();
|
|
||||||
translate([-panel_to_frame_point_x, panel_to_frame_point_y, -panel_z])
|
|
||||||
scale([1, 1, 0.1]) frame_hex_bolt_hole();
|
|
||||||
translate([panel_to_frame_point_x, -panel_to_frame_point_y, -panel_z])
|
|
||||||
scale([1, 1, 0.1]) frame_hex_bolt_hole();
|
|
||||||
translate([-panel_to_frame_point_x, -panel_to_frame_point_y, -panel_z])
|
|
||||||
scale([1, 1, 0.1]) frame_hex_bolt_hole();
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
module base_bottom_panel() {
|
module base_bottom_panel() {
|
||||||
@@ -360,16 +335,6 @@ module frame() {
|
|||||||
translate([-panel_to_frame_point_x, panel_to_frame_point_y, 0]) frame_hex_bolt_hole();
|
translate([-panel_to_frame_point_x, panel_to_frame_point_y, 0]) frame_hex_bolt_hole();
|
||||||
translate([panel_to_frame_point_x, -panel_to_frame_point_y, 0]) frame_hex_bolt_hole();
|
translate([panel_to_frame_point_x, -panel_to_frame_point_y, 0]) frame_hex_bolt_hole();
|
||||||
translate([-panel_to_frame_point_x, -panel_to_frame_point_y, 0]) frame_hex_bolt_hole();
|
translate([-panel_to_frame_point_x, -panel_to_frame_point_y, 0]) frame_hex_bolt_hole();
|
||||||
|
|
||||||
// slightly larger holes than the posts in the base_panel
|
|
||||||
translate([panel_to_frame_point_x, panel_to_frame_point_y, frame_z/2-panel_z-5])
|
|
||||||
scale([1.55, 1.55, 0.2]) frame_hex_bolt_hole();
|
|
||||||
translate([-panel_to_frame_point_x, panel_to_frame_point_y, frame_z/2-panel_z-5])
|
|
||||||
scale([1.55, 1.55, 0.2]) frame_hex_bolt_hole();
|
|
||||||
translate([panel_to_frame_point_x, -panel_to_frame_point_y, frame_z/2-panel_z-5])
|
|
||||||
scale([1.55, 1.55, 0.2]) frame_hex_bolt_hole();
|
|
||||||
translate([-panel_to_frame_point_x, -panel_to_frame_point_y, frame_z/2-panel_z-5])
|
|
||||||
scale([1.55, 1.55, 0.2]) frame_hex_bolt_hole();
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -5,7 +5,7 @@
|
|||||||
|
|
||||||
include <parameters.scad>
|
include <parameters.scad>
|
||||||
include <components.scad>
|
include <components.scad>
|
||||||
use <frame-piece-top-left.scad>
|
use <frame-piece-top-left-or-right.scad>
|
||||||
use <frame-piece-bottom-left-or-right.scad>
|
use <frame-piece-bottom-left-or-right.scad>
|
||||||
|
|
||||||
module side_frame_piece() {
|
module side_frame_piece() {
|
||||||
@@ -14,7 +14,7 @@ module side_frame_piece() {
|
|||||||
// side piece is left/right agnostic
|
// side piece is left/right agnostic
|
||||||
frame();
|
frame();
|
||||||
// minus the top and bottom
|
// minus the top and bottom
|
||||||
top_left_frame_piece();
|
top_left_or_right_frame_piece();
|
||||||
bottom_left_or_right_frame_piece();
|
bottom_left_or_right_frame_piece();
|
||||||
// and just chop out the rest of the frame
|
// 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);
|
translate([piece_width, 0, 0]) cube([frame_x, frame_y+1, frame_z+1], center=true);
|
||||||
|
|||||||
@@ -7,7 +7,7 @@ include <parameters.scad>
|
|||||||
include <components.scad>
|
include <components.scad>
|
||||||
use <frame-left.scad>
|
use <frame-left.scad>
|
||||||
|
|
||||||
module top_left_frame_piece() {
|
module top_left_or_right_frame_piece() {
|
||||||
piece_width = panel_support_width+frame_wall+frame_mount_column_width;
|
piece_width = panel_support_width+frame_wall+frame_mount_column_width;
|
||||||
intersection() {
|
intersection() {
|
||||||
left_frame();
|
left_frame();
|
||||||
@@ -23,4 +23,4 @@ module top_left_frame_piece() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
top_left_frame_piece();
|
top_left_or_right_frame_piece();
|
||||||
@@ -1,26 +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 <frame-right.scad>
|
|
||||||
|
|
||||||
module top_right_frame_piece() {
|
|
||||||
piece_width = panel_support_width+frame_wall+frame_mount_column_width;
|
|
||||||
intersection() {
|
|
||||||
right_frame();
|
|
||||||
difference() {
|
|
||||||
// include the whole top 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 right
|
|
||||||
translate([frame_x/2-frame_wall/2, 0, 0])
|
|
||||||
cube([frame_wall, frame_y, frame_z], center=true);
|
|
||||||
// ...minus a slot for the combining piece to go into
|
|
||||||
cube([frame_x, frame_y-(panel_support_width+frame_wall)*2, frame_z/4], center=true);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
top_right_frame_piece();
|
|
||||||
Reference in New Issue
Block a user