Compare commits
7 Commits
f4c9c91d91
...
ba3e77d0cd
Author | SHA1 | Date | |
---|---|---|---|
ba3e77d0cd | |||
c0ae73b139 | |||
b871963cf7 | |||
2c62c9119b | |||
b7910cdb44 | |||
0ac3e8433f | |||
2bbf69d9a0 |
@ -7,6 +7,9 @@ design before sending it to a custom builder? Do you just love having your space
|
||||
because you keep making different variants, colorways, and so on? Or do you simply want a good stick on the cheap, and
|
||||
know someone or a library with a 3D printer? The Buildable Stick System may be the project for you!
|
||||
|
||||
**Join the project IRC channel: [#buildable-stick-system @
|
||||
Randomus](https://webirc.randomus.net/#buildable-stick-system)!**
|
||||
|
||||
![An example of stick components displayed in OpenSCAD](docs/blown-up-demo.png)
|
||||
|
||||
[OpenSCAD-based illustration of how the components for an overhang panel-based stick fit together.]
|
||||
|
39
demo/all-together-demo-extended-with-windows.scad
Normal file
39
demo/all-together-demo-extended-with-windows.scad
Normal file
@ -0,0 +1,39 @@
|
||||
/*
|
||||
* SPDX-FileCopyrightText: © 2023 Brian S. Stephan <bss@incorporeal.org>
|
||||
* SPDX-License-Identifier: GPL-3.0-or-later
|
||||
*/
|
||||
|
||||
include <parameters.scad>
|
||||
include <components.scad>
|
||||
use <frames/pieces/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 <panels/inset/lever-and-dir_arc-plus-w-30mm-panel.scad>
|
||||
use <panels/inset/sega-2p-plus-one-plus-control-panel-with-mount.scad>
|
||||
use <misc/decorative-plate-24mm-button.scad>
|
||||
use <misc/decorative-plate-dir_arc-plus-w-30mm-and-sega-2p-plus-one.scad>
|
||||
use <misc/decorative-plate-dir_arc-plus-w-30mm-and-sega-2p-plus-one-plates.scad>
|
||||
use <misc/dustwasher-lsx-nobi.scad>
|
||||
|
||||
top_panel_color = "#5B6579";
|
||||
bottom_panel_color = "#8E9089";
|
||||
frame_top_bottom_color = "#8E9089";
|
||||
frame_side_color = "#8E9089";
|
||||
top_deco_color = "#8E9089";
|
||||
|
||||
color(top_panel_color) translate([-panel_x/2, 0, frame_z/2-panel_z+0.01]) lever_and_dir_arc_w_30mm_panel();
|
||||
color(top_panel_color) translate([panel_x/2, 0, frame_z/2-panel_z+0.01]) sega_2p_plus_one_plus_control_panel_with_mount();
|
||||
color(frame_side_color) translate([-frame_x/2+4, 0, -2.5]) extended_left_or_right_frame_piece();
|
||||
color(frame_side_color) translate([frame_x/2-4, 0, -2.5]) mirror([1, 0, 0]) extended_left_or_right_frame_piece();
|
||||
color(frame_top_bottom_color) translate([-frame_x/2+4, 0, -2.5]) horiz_striped_windowed_front_or_back_box_frame_piece_for_extended_side();
|
||||
color(frame_top_bottom_color) translate([frame_x/2-4, 0, -2.5]) horiz_striped_windowed_front_or_back_box_frame_piece_for_extended_side();
|
||||
color(frame_top_bottom_color) translate([-frame_x/2+4, 0, -2.5]) rotate([180, 0, 0]) front_or_back_aux_and_neutrik_box_frame_piece_for_extended_side();
|
||||
color(frame_top_bottom_color) translate([frame_x/2-4, 0, -2.5]) rotate([180, 180, 0]) front_or_back_aux_and_neutrik_box_frame_piece_for_extended_side();
|
||||
color(bottom_panel_color) translate([-panel_x/2, 0, -5-frame_z/2+5]) panel();
|
||||
color(bottom_panel_color) translate([panel_x/2, 0, -5-frame_z/2+5]) panel();
|
||||
|
||||
/* color(top_deco_color) translate([0, 0, 3+frame_z/2-4]) dir_arc_plus_w_30mm_and_sega_2p_plus_one_decorative_plate_of_plates(); */
|
||||
color(top_deco_color) translate([0, 0, 3+frame_z/2-panel_z]) dir_arc_plus_w_30mm_and_sega_2p_plus_one_decorative_plate();
|
||||
color(top_deco_color) translate([-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();
|
@ -8,6 +8,15 @@ My preferred settings are 3 wall loops with 20% gyroid sparse infill. This gives
|
||||
strength against bowing forces, but something more default, like 2 wall loops, 15% grid sparse infill, is fine and does
|
||||
not lead to a weak enclosure.
|
||||
|
||||
### Supports and Positioning
|
||||
|
||||
All of the parts are designed to be printed outside-face-down. The bevels are at an angle (45 degrees) that should print
|
||||
fine with no supports. Make sure everything is aligned properly on your plate so that the flat face you will look at the
|
||||
most is on the bottom.
|
||||
|
||||
The only exception to this is the interconnect piece(s), which are not visible and need a support to print. Maybe one
|
||||
day I'll rejigger these.
|
||||
|
||||
### Working With Flatness
|
||||
|
||||
A lot of the pieces are long and flat, so I recommend really dialing in your printer settings. The frame pieces make
|
||||
@ -20,15 +29,36 @@ uniform lines that create reflection patterns on long, flat surfaces. This can b
|
||||
panels and their decorative plates, since they're what you're looking at 90% of the time, and the holes break up a
|
||||
perfect pattern, making the long lines stand out even more.
|
||||
|
||||
* **Top panels:** using a non-uniform pattern reduces if not eliminates the problem of the surface catching the light,
|
||||
but for some patterns, it may come at the expense of time. Other patterns may improve beyond monotonic, but hilbert
|
||||
curve seems to be the gold standard.
|
||||
* **Circle-centric decorative plates:** don't use complex patterns like Archimedean chords on decorative plates, as they
|
||||
seem to have issues with filling curves and you still want to try to maximize contact with walls. Concentric is great
|
||||
here if you dial it in.
|
||||
Some specific parts are worth some additional notes:
|
||||
|
||||
The concentric pattern is a good default and prints awesome parts, with the only exception being the top panels, which
|
||||
benefit from using a Hilbert curve initial layer pattern instead of concentric.
|
||||
* **Top panels:** using a non-uniform pattern reduces if not eliminates the problem of the surface catching the light,
|
||||
but for some patterns, it may come at the expense of time.
|
||||
* **Avoid:** monotonic.
|
||||
* **Good for the time:** Archimedean chords create the look of a circular ripple radiating out the center, and
|
||||
depending on the material, you may not even notice it much, so it's a pretty good look/speed balance.
|
||||
* **Great if you can wait:** hilbert curve leaves no discernable pattern on most materials, but some high gloss,
|
||||
high contrast materials may show the winding pattern at some angles --- consider Archimedean chords for these.
|
||||
* **Circle-centric decorative plates:** simple ones could be fine in whatever, but the ones for action buttons end up
|
||||
having lots of weird interaction points.
|
||||
* **Avoid:** none; monotonic doesn't look *good*, but the plates don't have enough surface area for the pattern to
|
||||
stand out too much.
|
||||
* **Decent:** concentric is generally good, but you can get some pitting when the pattern radiating away from
|
||||
buttons collides with other patterns, because none of the geometry lines up well.
|
||||
* **Great:** Archimedean chords, just crank up the infill/wall overlap to avoid pits on the edges.
|
||||
* **Frame walls with Neutrik or aux button cutouts:** a reduced but similar problem with the action button decorative
|
||||
plates, the circles near each other create weird interactions with the walls.
|
||||
* **Avoid:** concentric, again, has problems with pitting where geometries clash.
|
||||
* **Decent:** monotonic is pretty decent here, and you probably won't look at the sides too much, so maybe it
|
||||
doesn't bother you.
|
||||
* **Great:** Archimedean chords again, with the same infill/wall overlap as decorative plates.
|
||||
* **Flush frame walls:** you can pretty much do whatever you like here.
|
||||
* **Great:** concentric produces an interesting pattern and you won't have collision problems in a rectangle.
|
||||
* **Essentially great:** Archimedean chords yet again, you may just not like the pattern as much as the end result
|
||||
of concentric.
|
||||
|
||||
The Archimedean chord pattern is a good default and prints awesome parts, with the only exception being the top panels,
|
||||
which benefit from using a Hilbert curve initial layer pattern instead, though you may be happy enough with Archimedean
|
||||
chord.
|
||||
|
||||
## Materials
|
||||
|
||||
|
@ -15,7 +15,7 @@ module mount_column_cutout() {
|
||||
}
|
||||
}
|
||||
|
||||
module front_or_back_inner_wall_frame_piece() {
|
||||
module front_or_back_inner_wall_frame_base_piece() {
|
||||
difference() {
|
||||
front_or_back_box_frame_piece();
|
||||
// minus the outer wall
|
||||
@ -28,4 +28,11 @@ module front_or_back_inner_wall_frame_piece() {
|
||||
}
|
||||
}
|
||||
|
||||
module front_or_back_inner_wall_frame_piece() {
|
||||
front_or_back_inner_wall_frame_base_piece();
|
||||
// extend the outward face 2mm in order to have it cut deeper into the frame outer wall
|
||||
translate([0, -(frame_y-frame_wall)/2, 0]) rotate([-90, 0, 0]) linear_extrude(height=2) projection()
|
||||
translate([0, 0, 50]) rotate([90, 0, 0]) front_or_back_inner_wall_frame_base_piece();
|
||||
}
|
||||
|
||||
front_or_back_inner_wall_frame_piece();
|
||||
|
@ -12,7 +12,7 @@ module front_stripe() {
|
||||
cube([frame_x-(frame_mount_column_width*1.75)*2, frame_wall, 6], center=true);
|
||||
}
|
||||
|
||||
module windowed_front_or_back_box_frame_piece() {
|
||||
module horiz_striped_windowed_front_or_back_box_frame_piece() {
|
||||
difference() {
|
||||
front_or_back_box_frame_piece();
|
||||
// subtract frame wall windows
|
||||
@ -26,4 +26,4 @@ module windowed_front_or_back_box_frame_piece() {
|
||||
}
|
||||
}
|
||||
|
||||
windowed_front_or_back_box_frame_piece();
|
||||
horiz_striped_windowed_front_or_back_box_frame_piece();
|
||||
|
@ -8,13 +8,17 @@ include <components.scad>
|
||||
use <front-or-back.scad>
|
||||
use <front-or-back-inner-wall.scad>
|
||||
|
||||
module front_or_back_window() {
|
||||
translate([0, -frame_y/2, 0])
|
||||
cube([frame_x-frame_mount_column_width*3.5, (frame_wall+panel_support_width)*2,
|
||||
frame_z-panel_z*3], center=true);
|
||||
}
|
||||
|
||||
module windowed_front_or_back_box_frame_piece() {
|
||||
difference() {
|
||||
front_or_back_box_frame_piece();
|
||||
// subtract frame wall window
|
||||
translate([0, -frame_y/2, 0])
|
||||
cube([frame_x-frame_mount_column_width*3.5, (frame_wall+panel_support_width)*2,
|
||||
frame_z-panel_z*3], center=true);
|
||||
front_or_back_window();
|
||||
// subtract the inner wall area that will be provided by the other piece
|
||||
front_or_back_inner_wall_frame_piece();
|
||||
}
|
||||
|
@ -15,7 +15,7 @@ module mount_column_cutout() {
|
||||
}
|
||||
}
|
||||
|
||||
module side_inner_wall_frame_piece() {
|
||||
module side_inner_wall_frame_base_piece() {
|
||||
difference() {
|
||||
side_box_frame_piece();
|
||||
// minus the outer wall
|
||||
@ -32,4 +32,11 @@ module side_inner_wall_frame_piece() {
|
||||
}
|
||||
}
|
||||
|
||||
module side_inner_wall_frame_piece() {
|
||||
side_inner_wall_frame_base_piece();
|
||||
// extend the outward face 2mm in order to have it cut deeper into the frame outer wall
|
||||
translate([-(frame_x-frame_wall)/2, 0, 0]) rotate([0, 90, 0]) linear_extrude(height=2) projection()
|
||||
translate([0, 0, 50]) rotate([0, -90, 0]) side_inner_wall_frame_base_piece();
|
||||
}
|
||||
|
||||
side_inner_wall_frame_piece();
|
||||
|
@ -12,7 +12,7 @@ module side_stripe() {
|
||||
cube([frame_wall, frame_y-(frame_mount_column_width*1.75)*2, 6], center=true);
|
||||
}
|
||||
|
||||
module windowed_side_box_frame_piece() {
|
||||
module horiz_striped_windowed_side_box_frame_piece() {
|
||||
difference() {
|
||||
side_box_frame_piece();
|
||||
// subtract frame wall windows
|
||||
@ -26,4 +26,4 @@ module windowed_side_box_frame_piece() {
|
||||
}
|
||||
}
|
||||
|
||||
windowed_side_box_frame_piece();
|
||||
horiz_striped_windowed_side_box_frame_piece();
|
||||
|
@ -0,0 +1,18 @@
|
||||
/*
|
||||
* 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();
|
@ -0,0 +1,18 @@
|
||||
/*
|
||||
* 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();
|
@ -0,0 +1,18 @@
|
||||
/*
|
||||
* 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();
|
@ -0,0 +1,18 @@
|
||||
/*
|
||||
* 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();
|
@ -25,7 +25,7 @@ module side_frame_piece_extension() {
|
||||
}
|
||||
}
|
||||
|
||||
module extended_bottom_left_or_right_frame_piece() {
|
||||
module extended_left_or_right_frame_piece() {
|
||||
difference() {
|
||||
side_box_frame_piece();
|
||||
// chop off the old edge which is getting replaced with the extension
|
||||
@ -34,4 +34,4 @@ module extended_bottom_left_or_right_frame_piece() {
|
||||
translate([-frame_x/2+frame_bevel_height*2, 0, 0]) rotate([0, -90, 0]) side_frame_piece_extension();
|
||||
}
|
||||
|
||||
extended_bottom_left_or_right_frame_piece();
|
||||
extended_left_or_right_frame_piece();
|
||||
|
Loading…
Reference in New Issue
Block a user