Compare commits

..

No commits in common. "155cba6d85e89aebfde91d2656a8fadecfee38ba" and "365faebfcbb038a8f5ae1ed81382cb3b4074453c" have entirely different histories.

13 changed files with 49 additions and 197 deletions

View File

@ -8,7 +8,7 @@ include <components.scad>
module bottom_panel_solo() {
difference() {
rotate([180, 0, 0]) base_panel_with_raised_overhang();
overhang_plate();
rotate([180, 0, 0]) panel_holes();
}
}

View File

@ -57,7 +57,7 @@ module frame_hex_bolt_hole() {
}
module frame_interchange_hole() {
cylinder(r=18, h=50, $fn=4, center=true);
cylinder(r=15, h=50, $fn=50, center=true);
}
module neutrik_d_hole() {
@ -83,7 +83,7 @@ module rocker_20mm_mount() {
// space for a neutrik D mount or 24mm button - Z is to cut the whole inside without affecting panel lip
module frame_cutout() {
cube([30.5, 8, frame_z-(panel_z*2)], center=true);
cube([30.5, 8, frame_z-(panel_z*2)-2], center=true);
}
// bank of three 24mm buttons, commonly on a frame face
@ -195,7 +195,7 @@ module base_panel() {
}
module base_bottom_panel() {
mirror([0, 0, 1]) base_panel();
cube([panel_x, panel_y, panel_z], center=true);
}
module panel() {
@ -244,35 +244,15 @@ module panel_with_raised_overhang() {
module frame_box() {
difference() {
top_points = [
// top bevel
[(frame_x/2)-4, (frame_y/2)-4, frame_z/2-frame_bevel_height/2],
[-(frame_x/2)+4, (frame_y/2)-4, frame_z/2-frame_bevel_height/2],
[(frame_x/2)-4, -(frame_y/2)+4, frame_z/2-frame_bevel_height/2],
[-(frame_x/2)+4, -(frame_y/2)+4, frame_z/2-frame_bevel_height/2],
];
base_points = [
// majority of shape
[(frame_x/2)-2, (frame_y/2)-2, 0],
[-(frame_x/2)+2, (frame_y/2)-2, 0],
[(frame_x/2)-2, -(frame_y/2)+2, 0],
[-(frame_x/2)+2, -(frame_y/2)+2, 0],
];
bottom_points = [
// bottom bevel
[(frame_x/2)-4, (frame_y/2)-4, -frame_z/2+frame_bevel_height/2],
[-(frame_x/2)+4, (frame_y/2)-4, -frame_z/2+frame_bevel_height/2],
[(frame_x/2)-4, -(frame_y/2)+4, -frame_z/2+frame_bevel_height/2],
[-(frame_x/2)+4, -(frame_y/2)+4, -frame_z/2+frame_bevel_height/2],
// top part, majority of shape
[(frame_x/2)-3, (frame_y/2)-3, panel_z/2],
[-(frame_x/2)+3, (frame_y/2)-3, panel_z/2],
[(frame_x/2)-3, -(frame_y/2)+3, panel_z/2],
[-(frame_x/2)+3, -(frame_y/2)+3, panel_z/2],
];
hull() {
for (p = top_points) {
translate(p) cylinder(r=2, h=frame_bevel_height, center=true);
}
for (p = base_points) {
translate(p) cylinder(r=2, h=frame_z-(frame_bevel_height*2), center=true);
}
for (p = bottom_points) {
translate(p) cylinder(r=2, h=frame_bevel_height, center=true);
translate(p) cylinder(r=3, h=frame_z-panel_z, center=true);
}
}
// cut out the middle to make it a box
@ -320,12 +300,18 @@ module frame() {
difference() {
base_frame();
translate([0, 0, frame_z/2]) scale([1, 1, 2]) base_panel();
translate([0, 0, -frame_z/2]) scale([1, 1, 2]) bottom_panel();
translate([0, 0, -frame_z/2]) scale([1, 1, 2]) base_panel();
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();
// comfort bevel
translate([frame_x/2, 0, frame_z/2]) rotate([0, 45, 0]) cube([4, frame_y+0.01, 4], center=true);
translate([-frame_x/2, 0, frame_z/2]) rotate([0, 45, 0]) cube([4, frame_y+0.01, 4], center=true);
translate([0, frame_y/2, frame_z/2]) rotate([45, 0, 0]) cube([frame_x+0.01, 4, 4], center=true);
translate([0, -frame_y/2, frame_z/2]) rotate([45, 0, 0]) cube([frame_x+0.01, 4, 4], center=true);
// 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();

View File

@ -24,15 +24,15 @@ module left_frame() {
frame_cable_routing_hole();
// aux button holes
translate([-35, 101.5, 0]) rotate([270, 0, 0]) aux_control_three_button_cluster();
translate([-35, (frame_y/2)-neutrik_panel_thickness-4, 0]) frame_cutout();
translate([-72, (frame_y/2)-neutrik_panel_thickness-4, 0]) frame_cutout();
translate([2, (frame_y/2)-neutrik_panel_thickness-4, 0]) frame_cutout();
translate([-35, 101.5, panel_z/2]) rotate([270, 0, 0]) aux_control_three_button_cluster();
translate([-35, (frame_y/2)-neutrik_panel_thickness-4, 1]) frame_cutout();
translate([-72, (frame_y/2)-neutrik_panel_thickness-4, 1]) frame_cutout();
translate([2, (frame_y/2)-neutrik_panel_thickness-4, 1]) frame_cutout();
// neutrix button hole
translate([frame_center_to_neutrik, (frame_y/2)-neutrik_panel_thickness, 0])
translate([frame_center_to_neutrik, (frame_y/2)-neutrik_panel_thickness, panel_z/2])
rotate([90, 0, 0]) neutrik_d_mount();
translate([frame_center_to_neutrik, (frame_y/2)-neutrik_panel_thickness-4, 0])
translate([frame_center_to_neutrik, (frame_y/2)-neutrik_panel_thickness-4, 1])
frame_cutout();
}
}

View File

@ -27,15 +27,15 @@ module middle_frame() {
mirror([1, 0, 0]) frame_cable_routing_hole();
// neutrik mounts for connector, switches
translate([0, (frame_y/2)-neutrik_panel_thickness, 0])
translate([0, (frame_y/2)-neutrik_panel_thickness, panel_z/2])
rotate([90, 0, 0]) neutrik_d_mount();
translate([0, (frame_y/2)-neutrik_panel_thickness-4, 0]) frame_cutout();
translate([-40, (frame_y/2)-neutrik_panel_thickness, 0])
translate([0, (frame_y/2)-neutrik_panel_thickness-4, 1]) frame_cutout();
translate([-40, (frame_y/2)-neutrik_panel_thickness, panel_z/2])
rotate([90, 0, 0]) neutrik_d_mount();
translate([-40, (frame_y/2)-neutrik_panel_thickness-4, 0]) frame_cutout();
translate([40, (frame_y/2)-neutrik_panel_thickness, 0])
translate([-40, (frame_y/2)-neutrik_panel_thickness-4, 1]) frame_cutout();
translate([40, (frame_y/2)-neutrik_panel_thickness, panel_z/2])
rotate([90, 0, 0]) neutrik_d_mount();
translate([40, (frame_y/2)-neutrik_panel_thickness-4, 0]) frame_cutout();
translate([40, (frame_y/2)-neutrik_panel_thickness-4, 1]) frame_cutout();
}
}

View File

@ -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-left.scad>
module bottom_left_or_right_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 (lip) on the left but leaving the very bottom lip
translate([-frame_x/2+frame_wall/2, 0, 0])
cube([frame_wall, frame_y-(frame_wall*2), 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);
}
}
}
bottom_left_or_right_frame_piece();

View File

@ -1,28 +0,0 @@
/*
* SPDX-FileCopyrightText: © 2024 Brian S. Stephan <bss@incorporeal.org>
* SPDX-License-Identifier: GPL-3.0-or-later
*/
include <parameters.scad>
include <components.scad>
use <frame-piece-side.scad>
module interconnect_frame_half_piece() {
translate([frame_x/2-frame_wall, 0, 0]) difference() {
side_frame_piece();
rotate([0, 0, 180]) side_chopper();
}
}
module interconnect_frame_piece() {
difference() {
union() {
// slight translate is to make this a 2-manifold in OpenSCAD
translate([-0.01, 0, 0]) interconnect_frame_half_piece();
mirror([1, 0, 0]) interconnect_frame_half_piece();
}
translate([-frame_x/2, 0, 0]) frame_cable_routing_hole();
}
}
interconnect_frame_piece();

View File

@ -1,24 +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-piece-top-left.scad>
use <frame-piece-bottom-left-or-right.scad>
module side_frame_piece() {
piece_width = panel_support_width+frame_wall+frame_mount_column_width;
difference() {
// side piece is left/right agnostic
frame();
// minus the top and bottom
top_left_frame_piece();
bottom_left_or_right_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_frame_piece();

View File

@ -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-left.scad>
module top_left_frame_piece() {
piece_width = panel_support_width+frame_wall+frame_mount_column_width;
intersection() {
left_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 (lip) on the left but leaving the very top lip
translate([-frame_x/2+frame_wall/2, 0, 0])
cube([frame_wall, frame_y-(frame_wall*2), 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_left_frame_piece();

View File

@ -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 (lip) on the left but leaving the very top lip
translate([frame_x/2-frame_wall/2, 0, 0])
cube([frame_wall, frame_y-(frame_wall*2), 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();

View File

@ -24,15 +24,15 @@ module right_frame() {
mirror([1, 0, 0]) frame_cable_routing_hole();
// aux button holes
translate([35, 101.5, 0]) rotate([270, 0, 0]) aux_control_three_button_cluster();
translate([35, (frame_y/2)-neutrik_panel_thickness-4, 0]) frame_cutout();
translate([72, (frame_y/2)-neutrik_panel_thickness-4, 0]) frame_cutout();
translate([-2, (frame_y/2)-neutrik_panel_thickness-4, 0]) frame_cutout();
translate([35, 101.5, panel_z/2]) rotate([270, 0, 0]) aux_control_three_button_cluster();
translate([35, (frame_y/2)-neutrik_panel_thickness-4, 1]) frame_cutout();
translate([72, (frame_y/2)-neutrik_panel_thickness-4, 1]) frame_cutout();
translate([-2, (frame_y/2)-neutrik_panel_thickness-4, 1]) frame_cutout();
// neutrix button hole
translate([-frame_center_to_neutrik, (frame_y/2)-neutrik_panel_thickness, 0])
translate([-frame_center_to_neutrik, (frame_y/2)-neutrik_panel_thickness, panel_z/2])
rotate([90, 0, 0]) neutrik_d_mount();
translate([-frame_center_to_neutrik, (frame_y/2)-neutrik_panel_thickness-4, 0])
translate([-frame_center_to_neutrik, (frame_y/2)-neutrik_panel_thickness-4, 1])
frame_cutout();
}
}

View File

@ -11,25 +11,25 @@ module solo_frame() {
frame();
// neutrik mounts for connector, switches
translate([0, (frame_y/2)-2.5, 0]) rotate([90, 0, 0]) neutrik_d_mount();
translate([0, (frame_y/2)-neutrik_panel_thickness-4, 0]) frame_cutout();
translate([-40, (frame_y/2)-2.5, 0]) rotate([90, 0, 0]) neutrik_d_mount();
translate([-40, (frame_y/2)-neutrik_panel_thickness-4, 0]) frame_cutout();
translate([40, (frame_y/2)-2.5, 0]) rotate([90, 0, 0]) neutrik_d_mount();
translate([40, (frame_y/2)-neutrik_panel_thickness-4, 0]) frame_cutout();
translate([0, (frame_y/2)-2.5, panel_z/2]) rotate([90, 0, 0]) neutrik_d_mount();
translate([0, (frame_y/2)-neutrik_panel_thickness-4, 1]) frame_cutout();
translate([-40, (frame_y/2)-2.5, panel_z/2]) rotate([90, 0, 0]) neutrik_d_mount();
translate([-40, (frame_y/2)-neutrik_panel_thickness-4, 1]) frame_cutout();
translate([40, (frame_y/2)-2.5, panel_z/2]) rotate([90, 0, 0]) neutrik_d_mount();
translate([40, (frame_y/2)-neutrik_panel_thickness-4, 1]) frame_cutout();
// aux button holes
translate([-frame_x/2+2.5, 0, 0]) rotate([90, 0, 270])
translate([-frame_x/2+2.5, 0, panel_z/2]) rotate([90, 0, 270])
aux_control_three_button_cluster();
translate([(frame_x/2)-neutrik_panel_thickness-4, 0, 0]) rotate([0, 0, 90]) frame_cutout();
translate([(frame_x/2)-neutrik_panel_thickness-4, -37, 0]) rotate([0, 0, 90]) frame_cutout();
translate([(frame_x/2)-neutrik_panel_thickness-4, 37, 0]) rotate([0, 0, 90]) frame_cutout();
translate([(frame_x/2)-neutrik_panel_thickness-4, 0, 1]) rotate([0, 0, 90]) frame_cutout();
translate([(frame_x/2)-neutrik_panel_thickness-4, -37, 1]) rotate([0, 0, 90]) frame_cutout();
translate([(frame_x/2)-neutrik_panel_thickness-4, 37, 1]) rotate([0, 0, 90]) frame_cutout();
translate([frame_x/2+2.5, 0, 0]) rotate([90, 0, 270])
translate([frame_x/2+2.5, 0, panel_z/2]) rotate([90, 0, 270])
aux_control_three_button_cluster();
translate([-(frame_x/2)+neutrik_panel_thickness+4, 0, 0]) rotate([0, 0, 90]) frame_cutout();
translate([-(frame_x/2)+neutrik_panel_thickness+4, -37, 0]) rotate([0, 0, 90]) frame_cutout();
translate([-(frame_x/2)+neutrik_panel_thickness+4, 37, 0]) rotate([0, 0, 90]) frame_cutout();
translate([-(frame_x/2)+neutrik_panel_thickness+4, 0, 1]) rotate([0, 0, 90]) frame_cutout();
translate([-(frame_x/2)+neutrik_panel_thickness+4, -37, 1]) rotate([0, 0, 90]) frame_cutout();
translate([-(frame_x/2)+neutrik_panel_thickness+4, 37, 1]) rotate([0, 0, 90]) frame_cutout();
}
}

View File

@ -37,10 +37,6 @@ frame_x = 233;
frame_y = 208;
frame_z = 57;
// this sinks the bottom and top of the frame inward a bit, and is used to math out two shapes
// when creating the frame box
frame_bevel_height = 2;
frame_center_to_neutrik = 70;
// depth of the "lip" of the frame that the top plate sets into/supports the overhang