$fn=100; width = 520; depth = 320; gauge = 0.2; //Corners. Always include for scale corners(); // VERTICAL LINES if(true)vertical(); // HORIZONTAL LINES if(true) horizontal(); // NUMBERS AND CIRCLES if(true){ numbers(); circles(); } module corners(){ translate([0,0]) {square([10,gauge]);} translate([0,depth-gauge]) {square([10,gauge]);} translate([0,0]) {square([gauge,10]);} translate([width-gauge,0]) {square([gauge,10]);} translate([width-10,0]) {square([10,gauge]);} translate([width-10,depth-gauge]) {square([10,gauge]);} translate([0,depth-10]) {square([gauge,10]);} translate([width-gauge,depth-10]) {square([gauge,10]);} } module horizontal(){ for(i=[0:10:depth-20]){ translate([10,10+i-gauge/2]){ square([width-20,gauge]); } } } module vertical(){ for(i=[0:10:width-20]){ translate([i-gauge/2+10,10]){ square([gauge,depth-20]); } } } module numbers(){ for(i=[1:depth/10-1]){ if(i<11){ translate([3,7.5+(i-1)*10]){txt(i-1);} }else{ translate([1,7.5+(i-1)*10]){txt(i-1);} } } for(i=[1:width/10-1]){ if(i<11){ translate([8.1+(i-1)*10,2.5]){txt(i-1);} }else{ translate([6+(i-1)*10,2.5]){txt(i-1);} } } } module circles(){ projection(cut=true){ //comment this until the final render m = min(width-20,depth); ma = max(width-20,depth); x = width-20-((width-20)%50)+20; y = depth-20-((depth-20)%50)+20; for(i=[50:100:ma]){ intersection(){ translate([10,10,-5]){cube([width-20,depth-20,10]);} translate([x/2,y/2,-1]){ difference(){ cylinder(d=i+gauge,h=2); translate([0,0,-1]){ cylinder(d=i-gauge,h=4);} } } } } } } module txt(i){ text(str((i)),size=5); }