round_cable_plane(300, 200, 5, 20, 20, 10, 40, 90); RESOLUTION=36; module base_plane(width, height, hole_size, hole_spacing_x, hole_spacing_y) { difference() { // base square square([width, height]); // holes translate([hole_spacing_x, hole_spacing_y]) circle(d=hole_size, $fn=RESOLUTION); translate([width - hole_spacing_x, hole_spacing_y]) circle(d=hole_size, $fn=RESOLUTION); translate([hole_spacing_x, height - hole_spacing_y]) circle(d=hole_size, $fn=RESOLUTION); translate([width - hole_spacing_x, height - hole_spacing_y]) circle(d=hole_size, $fn=RESOLUTION); } } module round_base_plane(width, height, hole_size, hole_spacing_x, hole_spacing_y, radius) { difference() { base_plane(width, height, hole_size, hole_spacing_x, hole_spacing_y); translate([width-radius, height-radius]) __radius_cutout(radius); translate([radius, height-radius]) rotate([0, 0, 90]) __radius_cutout(radius); translate([radius, radius]) rotate([0, 0, 180]) __radius_cutout(radius); translate([width-radius, radius]) rotate([0, 0, 270]) __radius_cutout(radius); } } module round_psu_plane(width, height, hole_size, hole_spacing_x, hole_spacing_y, radius, psu_width, psu_height) { difference() { round_base_plane(width, height, hole_size, hole_spacing_x, hole_spacing_y, radius); translate([width-psu_width, height/2-psu_height/2]) square([psu_width, psu_height]); } } module round_cable_plane(width, height, hole_size, hole_spacing_x, hole_spacing_y, radius, cable_width, cable_height) { difference() { round_base_plane(width, height, hole_size, hole_spacing_x, hole_spacing_y, radius); translate([0, height/2-cable_height/2]) square([cable_width, cable_height]); } } module __radius_cutout(radius) { difference() { translate([radius/2, radius/2, 0]) square([radius, radius], center=true); circle(radius, $fn=RESOLUTION); } }