Add 'test.scad'
parent
453333a69c
commit
ef5328e295
@ -0,0 +1,164 @@
|
||||
// mathgrrl punch card maker
|
||||
|
||||
/////////////////////////////////////////////////////////////////////
|
||||
// parameters
|
||||
|
||||
$fn=48; // resolution
|
||||
|
||||
rows = 48; // number of pattern rows
|
||||
cols = 24; // 24 is standard
|
||||
|
||||
p = 3.75; // punch diameter
|
||||
r = p/2; // punch radius
|
||||
h = 4.5; // horizontal distance between punch centers
|
||||
v = 5; // vertical distance between punch centers
|
||||
|
||||
b = 16; // horizontal card border
|
||||
c = 11; // vertical card border
|
||||
|
||||
width = cols*h+2*b; // card width - should be 140 for 24 punches
|
||||
height = rows*v+2*c; // card height - should be 322 for 60 rows
|
||||
|
||||
gaugerows = 6; // test gauge and enter here
|
||||
gaugestitches = 5; // test gauge and enter here
|
||||
|
||||
x = 1; // allows x in visual punch layout
|
||||
|
||||
%color("white") card(width,height); // makes gray background for F5
|
||||
|
||||
/////////////////////////////////////////////////////////////////////
|
||||
// punch the BORDER HOLES
|
||||
|
||||
edge(width,height);
|
||||
belt(rows);
|
||||
loop(rows);
|
||||
overlap(rows);
|
||||
|
||||
/////////////////////////////////////////////////////////////////////
|
||||
// punch a PATTERN (choose one)
|
||||
|
||||
// one-line experiments
|
||||
//punch(offdiagonals(6,rows));
|
||||
//punch(squares(4,4,rows));
|
||||
//punch(diagonals(6,10),shift=1,reverse="yes");
|
||||
|
||||
// diamonds
|
||||
//punch(diagonals(6,rows));
|
||||
//punch(offdiagonals(6,rows));
|
||||
|
||||
// uneven diamonds
|
||||
//punch(diagonals(6,rows));
|
||||
//punch(offdiagonals(5,rows));
|
||||
|
||||
// baby squares
|
||||
//punch(diagonals(3,rows));
|
||||
//punch(offdiagonals(3,rows));
|
||||
|
||||
// baby square diagonal mixup
|
||||
//punch(offdiagonals(12,rows));
|
||||
//punch(offdiagonals(8,rows));
|
||||
//punch(diagonals(3,rows));
|
||||
|
||||
// zipper
|
||||
//punch(dots(4,1,rows));
|
||||
//punch(dots(6,4,rows));
|
||||
//punch(square(4,rows));
|
||||
punch(fil());
|
||||
|
||||
/////////////////////////////////////////////////////////////////////
|
||||
// FUNCTIONS for patterns
|
||||
include <patterndata.scad>;
|
||||
function fil(filename) =
|
||||
datas;
|
||||
|
||||
// multiple rows of dots every "size" starting at "shift"
|
||||
function dots(size,shift,length) =
|
||||
[ for (j=[length-1:-1:0])
|
||||
[ for (i=[0:cols-1]) (i+j*(size-shift))%size==0 ? 0 : 1 ] ];
|
||||
|
||||
function diagonals(size,length) = // size div by 24
|
||||
[ for (j=[length-1:-1:0])
|
||||
[ for (i=[0:cols-1]) (i+j)%size==0 ? 0 : 1 ] ];
|
||||
|
||||
function offdiagonals(size,length) = // size div by 24
|
||||
[ for (j=[length-1:-1:0])
|
||||
[ for (i=[cols-1:-1:0]) (i+j+1)%size==0 ? 0 : 1 ] ];
|
||||
|
||||
function squares(across,high,length) = // across div by 24
|
||||
[ for (j=[length-1:-1:0])
|
||||
[ for (i=[0:cols-1]) (j%high==0 || i%across==0) ? 0 : 1 ] ];
|
||||
|
||||
/////////////////////////////////////////////////////////////////////
|
||||
// MODULES for patterns
|
||||
|
||||
module gauge(col=3,row=4){
|
||||
linear_extrude(2)
|
||||
translate([0,c])
|
||||
scale([1,(h/v)*(gaugestitches/gaugerows)])
|
||||
translate([0,-c])
|
||||
children();
|
||||
}
|
||||
|
||||
module punch(pattern,start=0,shift=0,reverse="no"){
|
||||
|
||||
// convert to coordinate list
|
||||
// if/else requires updated OpenSCAD and lc-else setting in preferences
|
||||
coords = [ for (i=[0:len(pattern[0])-1], j=[0:len(pattern)-1])
|
||||
if (reverse=="no" && pattern[j][i]==0)
|
||||
[(i+shift)%cols,len(pattern)-1-j]
|
||||
else if (reverse=="yes" && pattern[j][i]!=0)
|
||||
[(i+shift)%cols,len(pattern)-1-j] ];
|
||||
|
||||
// place punches according to dimensions
|
||||
place = [for (i=[0:len(coords)-1])
|
||||
[h*coords[i][0]+b+h/2,v*coords[i][1]+c+v/2]];
|
||||
|
||||
// put the punches on the card
|
||||
for (i=[0:len(place)-1]) translate(place[i]) color("gray") circle(r);
|
||||
|
||||
}
|
||||
|
||||
/////////////////////////////////////////////////////////////////////
|
||||
// MODULES for border punches
|
||||
|
||||
module belt(rows){
|
||||
color("lightgreen")
|
||||
for (j=[-2:rows+1]){
|
||||
translate([b+h/2-5.5,(c+v/2)+j*v]) circle(r-0.25);
|
||||
translate([b+h/2+(cols-1)*h+5.5,(c+v/2)+j*v]) circle(r-0.25);
|
||||
}
|
||||
}
|
||||
|
||||
module loop(rows){
|
||||
color("lightgreen")
|
||||
for (j=[-1,0,rows/2-1,rows/2]){ // use this for two at top and bottom
|
||||
//for (j=[-1:rows/2]){ // use this for all the way up and down
|
||||
translate([b-10.5,c+v+j*2*v]) circle(r);
|
||||
translate([b+cols*h+10.5,c+(j*2+1)*v]) circle(r);
|
||||
}
|
||||
}
|
||||
|
||||
module overlap(rows){
|
||||
color("lightgreen")
|
||||
for (i=[0:cols-1],j=[1,2]){
|
||||
translate([b+h/2+i*h,c+v/2-j*v]) circle(r);
|
||||
translate([b+h/2+i*h,c+v/2+(rows-1+j)*v]) circle(r);
|
||||
}
|
||||
}
|
||||
|
||||
/////////////////////////////////////////////////////////////////////
|
||||
// MODULES for card
|
||||
|
||||
// card outline (inside edge is the desired punch card outline)
|
||||
module edge(width,height){
|
||||
extra = 2;
|
||||
translate([-extra,-extra]) square([width+2*extra,extra]);
|
||||
translate([-extra,-extra]) square([extra,height+2*extra]);
|
||||
translate([-extra,height]) square([width+2*extra,extra]);
|
||||
translate([width,-extra]) square([extra,height+2*extra]);
|
||||
}
|
||||
|
||||
// card shading (display only)
|
||||
module card(width,height){
|
||||
linear_extrude(.1) square([width,height]);
|
||||
}
|
Loading…
Reference in New Issue