// Parameters
$fn = 150;
width = 18;
height = 12;
holes = 5; // Holes per edge
diameter = 3.75; // Hole diameter
separation = 6.25; // Separation between holes
edge = 4.2; // Edge roundness
cube_size = [66, 2, 18]; // Dimensions of the cube
edge_radius = 0.5; // Radius of the rounded edges
union(){
difference(){
cube([diameter*holes+separation*(holes+1),width,height]);
// Loop to create rounded holes on the first edge
for(i=[0:holes-1]){
hull(){
translate([(separation+diameter/2)+(separation+diameter)*i,0.1+diameter/2,-0.05])
cylinder(r=diameter/2, h=height+0.1); // Create the first cylinder for each hole
translate([(separation+diameter/2)+(separation+diameter)*i,-diameter/3,-0.05])
cylinder(r=diameter/2, h=height+0.1); // Create the second cylinder to be connected with the first to create the rounded hole
}
}
// Loop to create rounded holes on the opposite edge
for(i=[0:holes-1]){
hull(){
translate([(separation+diameter/2)+(separation+diameter)*i, width-diameter/2-0.1, -0.05])
cylinder(r=diameter/2, h=height+0.1); // Create the first cylinder for each hole
translate([(separation+diameter/2)+(separation+diameter)*i,width+diameter/3,-0.05])
cylinder(r=diameter/2, h=height+0.1); // Create the second cylinder to be connected with the first to create the rounded hole
}
}
}
// Adding edges to one side
for(i=[0:holes]){
translate([separation/2+(diameter+separation)*i,0,0])
cylinder(r=edge, h=height);
}
// Adding edges to the opposite side (cut into half)
for (i = [0 : holes]) {
translate([separation / 2 + (diameter + separation) * i, width, 0])
translate([0, -edge / 2, 0]) // Offset the position for half-cut edges
scale([1, 0.5, 1]) // Scale the edge in the Y direction
cylinder(r = edge, h = height);
}
translate([-5,17.25,-3])
minkowski() {
cube(cube_size, center = false);
sphere(r = edge_radius);
}
| }