Files
OpenScad_Designs/bus_cabinet_door_2.scad
2021-03-27 10:11:26 +01:00

259 lines
7.8 KiB
OpenSCAD

// Door measurements
width = 516;
height = 767;
thickness = 18;
// Pattern parameters
border_margin = 60;
border_width = 40;
// border_angle = 30;
border_depth = 8;
border_depth_2 = 4;
small_border_width = 4;
small_border_thickness = 2;
outside_border_width = border_width / 2;
outside_border_depth_2 = 2;
inner_depth = 8;
round_radius = 8;
// Technical params
mill_diameter = 8;
module door(){
difference(){
cube(size=[width, height, thickness], center=false);
translate([border_margin, border_margin, thickness+0.01])
// outside_borders(height-2*border_margin, width-2*border_margin, border_width, border_depth, border_depth_2);
translate([border_margin-outside_border_width, 0, thickness-small_border_thickness+0.01])
cube(size=[small_border_width, height, small_border_thickness], center=false);
// lines
translate([width/2,border_margin+10,10.01])
carving_pattern(width-2*border_margin, height-2*border_margin-20, 10, 40);
translate([border_margin, border_margin, thickness-inner_depth])
cube(size=[width-2*border_margin, height-2*border_margin, 10], center=false);
// round inner edges
translate([width/2, height/2, thickness-round_radius])
rounded_square_cutter(width-2*border_margin, height-2*border_margin, round_radius);
// Custom small border
// translate([width-border_margin-small_border_width+outside_border_width, 0, thickness-small_border_thickness+0.01])
// cube(size=[small_border_width, height, small_border_thickness], center=false);
// translate([border_margin-border_depth_2, border_margin-border_depth_2, thickness-border_depth_2])
// cube(size=[width-2*border_margin+2*border_depth_2, height-2*border_margin+2*border_depth_2, border_depth_2+0.01], center=false);
}
}
module border(length, width, depth1, depth2, mill_dia){
points = [[0,depth2], [0,0], [width,0], [width, depth1], [width-mill_dia, depth1]];
rotate([-90,0,0])
linear_extrude(height=length){
polygon(points=points);
}
}
module outside_border(length, width, depth1, depth2) {
translate([0, length, 0])
rotate([0,0,180])
border(length, width, depth1, depth2, 0);
}
module borders(length_border, width_border, width, depth1, depth2){
union(){
translate([width_border-width, 0, 0])
border(length_border, width, depth1, depth2, mill_diameter);
translate([width, length_border, 0])
rotate([0,0,180])
border(length_border, width, depth1, depth2, mill_diameter);
translate([0, width, 0])
rotate([0,0,-90])
border(width_border, width, depth1, depth2, mill_diameter);
translate([width_border, length_border-width, 0])
rotate([0,0,90])
border(width_border, width, depth1, depth2, mill_diameter);
}
}
module outside_border_corner(length_border, width_border, width, depth1, depth2){
intersection(){
translate([-outside_border_width+0.01, length_border+outside_border_width, 0])
rotate([0,0,180])
outside_border(length_border+2*outside_border_width, outside_border_width, depth1, depth2);
translate([-outside_border_width, -outside_border_width+0.01, 0])
rotate([0,0,-90])
outside_border(width_border+2*outside_border_width, outside_border_width, depth1, depth2);
}
}
module outside_borders(length_border, width_border, width, depth1, depth2){
union(){
translate([width_border+outside_border_width-0.01, 0, 0])
outside_border(length_border, outside_border_width, depth1, outside_border_depth_2);
translate([-outside_border_width+0.01, length_border, 0])
rotate([0,0,180])
outside_border(length_border, outside_border_width, depth1, outside_border_depth_2);
translate([0, -outside_border_width+0.01, 0])
rotate([0,0,-90])
outside_border(width_border, outside_border_width, depth1, outside_border_depth_2);
translate([width_border, length_border+outside_border_width-0.01, 0])
rotate([0,0,90])
outside_border(width_border, outside_border_width, depth1, outside_border_depth_2);
// Now add the corners
outside_border_corner(length_border, width_border, width, depth1, outside_border_depth_2);
translate([width_border,0,0])
rotate([0,0,90])
outside_border_corner(length_border, width_border, width, depth1, outside_border_depth_2);
translate([width_border,length_border,0])
rotate([0,0,180])
outside_border_corner(length_border, width_border, width, depth1, outside_border_depth_2);
translate([0,length_border,0])
rotate([0,0,-90])
outside_border_corner(length_border, width_border, width, depth1, outside_border_depth_2);
}
}
module carving_face() {
difference(){
square(size=[10, 4], center=true);
translate([-4.5, -2, 0])
circle(r=4, $fn=50);
translate([4.5, -2, 0])
circle(r=4, $fn=50);
}
}
module carving_tip(){
translate([0,0,-2])
difference(){
rotate_extrude() {
difference(){
carving_face();
translate([0,-5,0])
square(size=[10, 10], center=false);
}
}
translate([0,5,0])
cube(size=[10, 10, 10], center=true);
}
}
module carving(length) {
translate([0,length,0])
rotate([0,0,180])
carving_tip();
carving_tip();
translate([0,length,-2])
rotate([90,0,0])
linear_extrude(height=length){
carving_face();
}
}
module carving_pattern(width, height, inter_dist_small, inter_dist_large) {
max_iter = floor(width/(2*(inter_dist_small+inter_dist_large)))+1;
for(i=[-max_iter:max_iter]) {
translate([i*inter_dist_large,0,0])
union(){
translate([-inter_dist_small/2,0,0])
carving(height);
translate([inter_dist_small/2,0,0])
carving(height);
}
}
}
module round_cutter(radius){
difference(){
square(size=[radius, radius], center=false);
circle(r=radius, $fn=50);
}
}
module round_long_cutter(length, radius){
translate([0, length, 0])
rotate([90,0,0]){
linear_extrude(height=length)
round_cutter(radius);
}
}
module round_corner(radius){
rotate_extrude(angle=90) {
translate([-radius,0,0])
round_cutter(radius);
}
}
module rounded_cutter(length, radius) {
translate([0, -length/2, 0])
union(){
translate([radius, length, 0])
rotate([0,0,180])
round_long_cutter(length, radius);
rotate([0,0,90])
round_corner(radius);
}
}
module rounded_square_cutter(width, height, radius) {
union(){
translate([width/2, 0, 0])
rounded_cutter(height, radius);
translate([0, height/2, 0])
rotate([0,0,90])
rounded_cutter(width, radius);
translate([-width/2, 0, 0])
rotate([0,0,180])
rounded_cutter(height, radius);
translate([0, -height/2, 0])
rotate([0,0,270])
rounded_cutter(width, radius);
}
}
color(c = [0.9, 0.9, 0.9]){
door();
}
// door();
// rotate([90,0,0])
// outside_border(500, border_width, border_depth, border_depth_2);
// outside_borders(height-2*border_margin, width-2*border_margin, border_width, border_depth, border_depth_2);
// borders(height, width, border_width, border_depth);
// carving_pattern(width, height, 20, 60);
// translate([width/2,border_margin,10])
// carving_pattern(width-2*border_margin, height-2*border_margin, 20, 80);
// carving_tip();
// carving(100);
// round_corner(5);
// round_long_cutter(100,5);
// rounded_cutter(200,5);
// rounded_square_cutter(200, 100, 5);
// translate([width/2, height/2, 0])
// rounded_square_cutter(width-2*border_margin, height-2*border_margin, 5);