// Parameters $fn = 360; kerf = 0.1; width = 4 - kerf; height = 15; chamfer = 2; size = 30; module cut(width, height,chamfer){ polygon(points=[ [-width/2, 0], [-width/2, height-chamfer], [-width/2-chamfer, height], [width/2+chamfer, height], [width/2, height-chamfer], [width/2, 0] ]); } module piece(radius,ncuts,width,height,chamfer){ difference(){ circle(radius); for (i = [0 : 360/ncuts : 359]) { // Loop from 0 to 360 degrees rotate([0, 0, i]) // 2nd: Rotate the moved object around the center translate([0,radius-height,0]) cut(width,height,chamfer); } } } margin = 10; translate([0, size*2+margin, 0]) piece(size,2,width,height,chamfer); translate([size*2+margin, size*2+margin, 0]) piece(size,3,width,height,chamfer); //translate([0, 0, 0]) piece(size,5,width,height,chamfer); translate([size*2+margin, 0, 0]) piece(size,6,width,height,chamfer); // adding more shapes translate([-size, -size *2 - margin, 0]) square([size*4+margin, 30]); translate([0,-size*4 - margin,0]) polygon(points = [[-size,0],[0,size * sqrt(3)],[size,0]]); translate([size+margin,-size*4 - margin,0]) square(size*2-margin);