// Door measurements width = 516; height = 766; thickness = 18; // Pattern parameters border_margin = 80; border_width = 40; // border_angle = 30; border_depth = 10; 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 = 2; // Technical params mill_diameter = 8; module door(){ difference(){ cube(size=[width, height, thickness], center=false); translate([border_margin, border_margin, thickness+0.01]) union(){ borders(height-2*border_margin, width-2*border_margin, border_width, border_depth, border_depth_2); 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); 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_margin, thickness-inner_depth]) cube(size=[width-2*border_margin, height-2*border_margin, 10], center=false); // Custom small border // 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); } } 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);