side=40; material=2; kerf=0.05; thickness=material-2*kerf; $fn=120; difference() { circle(side/2, true); square([side,thickness],true); square([thickness,side],true); } square(side/2+1,true); translate([0,50,0]) { difference() { circle(side/2, true); rotate([0,0,90]) translate([0,side/2,0]) square([thickness,side/2],true); rotate([0,0,-90]) translate([0,side/2,0]) square([thickness,side/2],true); rotate([0,0,0]) translate([0,side/2,0]) square([thickness,side/2],true); } } translate([0,100,0]) { difference() { circle(side/2, true); rotate([0,0,90]) translate([0,side/2,0]) square([thickness,side/2],true); rotate([0,0,-90]) translate([0,side/2,0]) square([thickness,side/2],true); } } translate([0,150,0]) { difference() { circle(side/2, true); rotate([0,0,0]) translate([0,side/2,0]) square([thickness,side/2],true); } } translate([0,-50,0]) { difference() { circle(side/2, true); rotate([0,0,0]) translate([0,side/2,0]) square([thickness,side/2],true); rotate([0,0,30]) translate([0,side/2,0]) square([thickness,side/2],true); rotate([0,0,60]) translate([0,side/2,0]) square([thickness,side/2],true); rotate([0,0,90]) translate([0,side/2,0]) square([thickness,side/2],true); rotate([0,0,120]) translate([0,side/2,0]) square([thickness,side/2],true); rotate([0,0,150]) translate([0,side/2,0]) square([thickness,side/2],true); rotate([0,0,180]) translate([0,side/2,0]) square([thickness,side/2],true); rotate([0,0,0]) translate([0,side/2,0]) square([thickness,side/2],true); rotate([0,0,210]) translate([0,side/2,0]) square([thickness,side/2],true); rotate([0,0,240]) translate([0,side/2,0]) square([thickness,side/2],true); rotate([0,0,270]) translate([0,side/2,0]) square([thickness,side/2],true); rotate([0,0,300]) translate([0,side/2,0]) square([thickness,side/2],true); rotate([0,0,330]) translate([0,side/2,0]) square([thickness,side/2],true); rotate([0,0,360]) translate([0,side/2,0]) square([thickness,side/2],true); } }