Refine the open box
This commit is contained in:
@@ -11,9 +11,9 @@ cutout_threshold = 1;
|
||||
battery_length = 71;
|
||||
battery_width = 18.75;
|
||||
|
||||
cell_holder_length = battery_length + wall_thickness * 2;
|
||||
cell_holder_width = battery_width + wall_thickness * 2;
|
||||
cell_holder_height = battery_width + wall_thickness;
|
||||
battery_holder_length = battery_length + wall_thickness * 2;
|
||||
battery_holder_width = battery_width + wall_thickness * 2;
|
||||
battery_holder_height = battery_width + wall_thickness;
|
||||
|
||||
battery_contact_thickness = .6;
|
||||
// battery_contact_thickness = 1;
|
||||
@@ -27,11 +27,12 @@ converter_length = 22.25;
|
||||
converter_height = 5;
|
||||
|
||||
|
||||
include <./common.scad>;
|
||||
include <../common/lib.scad>;
|
||||
|
||||
// box(20, 10, 10);
|
||||
// color("blue", 0.5) cube([10, 20, 10], center = true);
|
||||
|
||||
/*
|
||||
module cell_cradle(width, height) {
|
||||
difference() {
|
||||
translate([0, 0, -height / 2]) cube([width,
|
||||
@@ -103,9 +104,10 @@ module battery_slot() {
|
||||
}
|
||||
}
|
||||
|
||||
module converter_box() {
|
||||
module converter_slot() {
|
||||
box_length = wall_thickness * 2 + converter_height;
|
||||
box_width = cell_holder_width * 2 - wall_thickness;
|
||||
|
||||
difference() {
|
||||
box(box_length, box_width, cell_holder_height);
|
||||
|
||||
@@ -154,5 +156,14 @@ module battery_case() {
|
||||
}
|
||||
|
||||
|
||||
battery_case();
|
||||
// battery_case();
|
||||
battery_slot();
|
||||
*/
|
||||
|
||||
module battery_slot() {
|
||||
open_box([battery_holder_length, battery_holder_width, battery_holder_height], bevel=1);
|
||||
}
|
||||
|
||||
// battery_slot();
|
||||
|
||||
open_box([battery_holder_length, battery_holder_width, battery_holder_height], thickness = 2, bevel = 1);
|
||||
96
3d-models/common/lib.scad
Normal file
96
3d-models/common/lib.scad
Normal file
@@ -0,0 +1,96 @@
|
||||
|
||||
module hexagon(r, h) {
|
||||
cylinder(r = r, h = h, center = 2, $fn = 6);
|
||||
}
|
||||
|
||||
// A rounded cube is a cube with a bevel on all of the corners.
|
||||
// dimensions -- [x, y, z], centered around the origin.
|
||||
// bevel -- default 0, the radius of the bevel.
|
||||
module rounded_cube(dimensions, bevel = 0) {
|
||||
x = dimensions[0];
|
||||
y = dimensions[1];
|
||||
z = dimensions[2];
|
||||
|
||||
adjusted_bevel = bevel*2 >= x ? x / 2
|
||||
: bevel*2 >= y ? y / 2
|
||||
: bevel*2 >= z ? z / 2
|
||||
: bevel;
|
||||
|
||||
if (adjusted_bevel > 0) {
|
||||
hull() {
|
||||
translate([-x / 2 + adjusted_bevel, -y / 2 + adjusted_bevel, -z / 2 + adjusted_bevel]) sphere(r = adjusted_bevel);
|
||||
translate([ x / 2 - adjusted_bevel, -y / 2 + adjusted_bevel, -z / 2 + adjusted_bevel]) sphere(r = adjusted_bevel);
|
||||
translate([ x / 2 - adjusted_bevel, y / 2 - adjusted_bevel, -z / 2 + adjusted_bevel]) sphere(r = adjusted_bevel);
|
||||
translate([-x / 2 + adjusted_bevel, y / 2 - adjusted_bevel, -z / 2 + adjusted_bevel]) sphere(r = adjusted_bevel);
|
||||
translate([-x / 2 + adjusted_bevel, -y / 2 + adjusted_bevel, z / 2 - adjusted_bevel]) sphere(r = adjusted_bevel);
|
||||
translate([ x / 2 - adjusted_bevel, -y / 2 + adjusted_bevel, z / 2 - adjusted_bevel]) sphere(r = adjusted_bevel);
|
||||
translate([ x / 2 - adjusted_bevel, y / 2 - adjusted_bevel, z / 2 - adjusted_bevel]) sphere(r = adjusted_bevel);
|
||||
translate([-x / 2 + adjusted_bevel, y / 2 - adjusted_bevel, z / 2 - adjusted_bevel]) sphere(r = adjusted_bevel);
|
||||
}
|
||||
} else {
|
||||
cube(dimensions, center = true);
|
||||
}
|
||||
}
|
||||
|
||||
// A channel is a three-sided box. It has an open top and open ends so that wires
|
||||
// could go directly through it. The dimensions specify the outer size of the box.
|
||||
// dimensions -- [x, y, z], centered around the origin
|
||||
// thickness -- the thickness of the walls of the box. Effectively the thickness
|
||||
// should never be less then or equal to zero. The thickness subtracts from the interior
|
||||
// of the box so that the exterior dimensions do not change no matter the thickness.
|
||||
// bevel -- optional, the radius of the bevel
|
||||
module channel(dimensions, thickness, bevel = 0) {
|
||||
length = dimensions[0];
|
||||
width = dimensions[1];
|
||||
height = dimensions[2];
|
||||
|
||||
y_offset = width - thickness;
|
||||
z_offset = height - thickness;
|
||||
|
||||
union() {
|
||||
translate([0, 0, -z_offset / 2]) rounded_cube([length, width, thickness], bevel);
|
||||
|
||||
translate([0, -y_offset / 2, 0])
|
||||
rotate([90, 0, 0])
|
||||
rounded_cube([length, height, thickness], bevel);
|
||||
|
||||
translate([0, y_offset / 2, 0])
|
||||
rotate([90, 0, 0])
|
||||
rounded_cube([length, height, thickness], bevel);
|
||||
}
|
||||
}
|
||||
|
||||
module open_box(dimensions, thickness, bevel = 0) {
|
||||
length = dimensions[0];
|
||||
width = dimensions[1];
|
||||
height = dimensions[2];
|
||||
|
||||
x_offset = length - thickness;
|
||||
|
||||
union() {
|
||||
channel(dimensions, thickness, bevel);
|
||||
|
||||
translate([-x_offset / 2, 0, 0])
|
||||
rotate([90, 0, 0])
|
||||
rotate([0, 90, 0])
|
||||
rounded_cube([width, height, wall_thickness], bevel);
|
||||
|
||||
translate([x_offset / 2, 0, 0])
|
||||
rotate([90, 0, 0])
|
||||
rotate([0, 90, 0])
|
||||
rounded_cube([width, height, wall_thickness], bevel);
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
module box_side_slider(dimensions) {
|
||||
length = dimensions[0];
|
||||
width = dimensions[1];
|
||||
height = dimensions[2];
|
||||
difference() {
|
||||
box_face([width - wall_thickness * 2 + 4, height, wall_thickness], bevel);
|
||||
translate([-1, -1, 1]) cube([4-threshold, height+2, 4-threshold]);
|
||||
color("red") translate([width - wall_thickness * 2 + 1, -1, 1]) cube([4-threshold, height+2, 4-threshold]);
|
||||
}
|
||||
}
|
||||
*/
|
||||
@@ -1,92 +0,0 @@
|
||||
|
||||
module hexagon(r, h) {
|
||||
cylinder(r = r, h = h, center = 2, $fn = 6);
|
||||
}
|
||||
|
||||
module pill(length, bevel) {
|
||||
hull() {
|
||||
translate([0, 0, (-length / 2) + bevel]) sphere(r = bevel);
|
||||
translate([0, 0, (length / 2) - bevel]) sphere(r = bevel);
|
||||
}
|
||||
}
|
||||
|
||||
module rounded_cube(dimensions, bevel = 0) {
|
||||
x = dimensions[0];
|
||||
y = dimensions[1];
|
||||
z = dimensions[2];
|
||||
|
||||
if (bevel > 0) {
|
||||
hull() {
|
||||
translate([-x / 2 + bevel, -y / 2 + bevel, -z / 2 + bevel]) sphere(r = bevel);
|
||||
translate([ x / 2 - bevel, -y / 2 + bevel, -z / 2 + bevel]) sphere(r = bevel);
|
||||
translate([ x / 2 - bevel, y / 2 - bevel, -z / 2 + bevel]) sphere(r = bevel);
|
||||
translate([-x / 2 + bevel, y / 2 - bevel, -z / 2 + bevel]) sphere(r = bevel);
|
||||
translate([-x / 2 + bevel, -y / 2 + bevel, z / 2 - bevel]) sphere(r = bevel);
|
||||
translate([ x / 2 - bevel, -y / 2 + bevel, z / 2 - bevel]) sphere(r = bevel);
|
||||
translate([ x / 2 - bevel, y / 2 - bevel, z / 2 - bevel]) sphere(r = bevel);
|
||||
translate([-x / 2 + bevel, y / 2 - bevel, z / 2 - bevel]) sphere(r = bevel);
|
||||
}
|
||||
} else {
|
||||
cube(dimensions, center = true);
|
||||
}
|
||||
}
|
||||
|
||||
module box_face(dimensions, bevel = 0) {
|
||||
x = dimensions[0];
|
||||
y = dimensions[1];
|
||||
z = dimensions[2];
|
||||
|
||||
if (bevel > 0) {
|
||||
translate([0, 0, z / 2])
|
||||
hull() {
|
||||
pill(z, bevel);
|
||||
translate([x, 0, 0])
|
||||
pill(z, bevel);
|
||||
translate([x, y, 0])
|
||||
pill(z, bevel);
|
||||
translate([0, y, 0])
|
||||
pill(z, bevel);
|
||||
}
|
||||
} else {
|
||||
cube(dimensions);
|
||||
}
|
||||
}
|
||||
|
||||
module channel(length, width, height, bevel) {
|
||||
union() {
|
||||
box_face([length, width, wall_thickness], bevel);
|
||||
|
||||
translate([0, wall_thickness - bevel, bevel])
|
||||
rotate([90, 0, 0])
|
||||
box_face([length, height, wall_thickness], bevel);
|
||||
|
||||
translate([0, width + bevel, bevel])
|
||||
rotate([90, 0, 0])
|
||||
box_face([length, height, wall_thickness], bevel);
|
||||
}
|
||||
}
|
||||
|
||||
module box(length, width, height, bevel = 0) {
|
||||
union() {
|
||||
channel(length, width, height, bevel);
|
||||
|
||||
translate([-bevel, 0, bevel])
|
||||
rotate([90, 0, 0])
|
||||
rotate([0, 90, 0])
|
||||
box_face([width, height, wall_thickness], bevel);
|
||||
|
||||
translate([length - wall_thickness + bevel, 0, bevel])
|
||||
rotate([90, 0, 0])
|
||||
rotate([0, 90, 0])
|
||||
box_face([width, height, wall_thickness], bevel);
|
||||
}
|
||||
}
|
||||
|
||||
module box_side_slider(length, width, height) {
|
||||
difference() {
|
||||
box_face([width - wall_thickness * 2 + 4, height, wall_thickness], bevel);
|
||||
translate([-1, -1, 1]) cube([4-threshold, height+2, 4-threshold]);
|
||||
color("red") translate([width - wall_thickness * 2 + 1, -1, 1]) cube([4-threshold, height+2, 4-threshold]);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user