// 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);