%% To be used with the minim-mp metapost processor. See minim-hatching-doc.mp %% for an overview of the patterns defined below. % 1 definition macros def new_linepattern(suffix name)(expr sep, rot) = beginpattern(name) draw origin -- (100,0); matrix = identity rotated rot; setbounds currentpicture to unitsquare xscaled 100 yscaled 2 shifted (0, -1); endpattern(100, sep); enddef; def new_dotpattern(suffix name)(expr r, sep, rot) = beginpattern(name) drawdot origin withpen pencircle scaled r; matrix = identity rotated rot; setbounds currentpicture to bbox currentpicture; endpattern(sep,sep); enddef; def new_hexdotpattern(suffix name)(expr r, sep) = beginpattern(name) pickup pencircle scaled r; drawdot origin; drawdot (sep, sep/sqrt(3)); setbounds currentpicture to bbox currentpicture; endpattern(2sep,2sep/sqrt(3)); enddef; def new_brokenlinepattern(suffix name)(expr sep, on, off) = beginpattern(name) draw (0,0) -- (on,0); draw (on/2+off/2,sep) -- (3on/2+off/2,sep); setbounds currentpicture to bbox currentpicture; endpattern(on+off,2sep); enddef; def new_distortedgridpattern(suffix name)(expr sep, rot, x, y) = beginpattern(name) draw (0, sep/2) -- (sep, sep/2); draw (sep/2, 0) -- (sep/2, sep); matrix = identity xscaled x yscaled y rotated rot; setbounds currentpicture to unitsquare scaled sep; endpattern(sep,sep); enddef; def new_gridpattern(suffix name)(expr sep, rot) = new_distortedgridpattern(name)(sep, rot, 1, 1) enddef; def new_weavepattern(suffix name)(expr sep, width) = beginpattern(name) matrix = identity rotated 45; draw (0,-width)--(0,width); draw (-width,sep)--(width,sep); draw (sep-width,0)--(sep+width,0); draw (sep,sep-width)--(sep,sep+width); endpattern(2sep,2sep); enddef; def new_hexpattern(suffix name)(expr d) = beginpattern(name) save v,w; w:=d/2; v := w/sqrt(3); draw (w,4v) -- (w,6v); draw (0,v) -- (w,0) -- (2w,v) -- (2w,3v) -- (w,4v) -- (0,3v); setbounds currentpicture to unitsquare xscaled 3w yscaled 6v shifted linecorr; endpattern(2w,6v); enddef; def new_circlepattern(suffix name)(expr d) = beginpattern(name) draw fullcircle scaled d; draw fullcircle scaled d shifted (sqrt(3)/2*d,d/2); endpattern(sqrt(3)*d,d); enddef; def new_scalepattern(suffix name)(expr d) = beginpattern(name) draw halfcircle scaled d rotated 180; draw halfcircle scaled d rotated 180 shifted (d/2,d/2); endpattern(d,d); enddef; def new_squarecirclepattern(suffix name)(expr d) = beginpattern(name) draw fullcircle scaled d; setbounds currentpicture to unitsquare shifted -(1/2,1/2) scaled 2d; endpattern(d,d); enddef; % 1 predefined patterns if known skip_predefined_patterns : expandafter endinput fi; begingroup save xl, l, s; 2l = 3s; 2xl = 3l; s = 3.5; save linecorr; pair linecorr; linecorr = -(.2pt, .2pt); begingroup save horizontal, vertical, upward, downward, diagonal; horizontal = 0; vertical = 90; diagonal = 45; downward = 30; downward = -upward; forsuffixes d = horizontal, vertical, upward, downward : new_linepattern(d lines)(l, d); new_linepattern(dense d lines)(s, d); endfor new_brokenlinepattern(broken lines)(l, 2l, l) new_brokenlinepattern(dense broken lines)(s, 3s, s) forsuffixes d = diagonal, upward, downward : new_gridpattern(d grid)(l, d); new_gridpattern(dense d grid)(s, d); endfor endgroup; new_gridpattern(grid)(l, 0) new_gridpattern(dense grid)(s, 0) new_distortedgridpattern(horizontal grid)(l, 45, 3/2, 1); new_distortedgridpattern(vertical grid)(l, 45, 1, 3/2); new_distortedgridpattern(dense horizontal grid)(s, 45, 3/2, 1); new_distortedgridpattern(dense vertical grid)(s, 45, 1, 3/2); new_weavepattern(stitches)(l, 3/2) new_weavepattern(weave)(l, 3) new_weavepattern(dense weave)(s, 3/2) beginpattern(horizontal zigzag) draw (0,0)--(l,2/3l)--(2l,0); setbounds currentpicture to unitsquare xscaled 2l yscaled l shifted -(0,l/6); endpattern(2l,l); beginpattern(vertical zigzag) draw (0,0)--(2/3l,l)--(0,2l); setbounds currentpicture to unitsquare xscaled l yscaled 2l shifted -(l/6,0); endpattern(l,2l); beginpattern(crosses) matrix = identity rotated 45; save c,o,w; pair c,o; c=(l/2,l/2); w=4/5; o:=(w, w); draw (c+o)--(c-o); o:=(w,-w); draw (c+o)--(c-o); setbounds currentpicture to unitsquare scaled l; endpattern(l,l); beginpattern(bricks) draw (0,l)--(0,0)--(2l,0); draw (l,2l)--(l,l)--(3l,l); clip currentpicture to unitsquare xscaled 3l yscaled 2l shifted linecorr; endpattern(2l,2l); beginpattern(tiles) save s; s:=l/4; draw (0,l+s) -- (l+s,l+s); draw (l-s,0) -- (l-s,l+s); draw currentpicture rotatedaround((l,l), 180); draw (0,2l) -- (0,0) -- (2l,0); clip currentpicture to unitsquare xscaled 2l yscaled 2l shifted linecorr; matrix := identity rotated 45; endpattern(2l,2l); beginpattern(chords) save c,d; c:=2.1; d:=1.4; draw (c-d,c-d){dir 225}..{dir -30}(2c-d/2,d/2-2c); draw (2c+d,-d-2c){dir -45}..{dir 210}(c+d/2,d/2-5c); setbounds currentpicture to bbox currentpicture; endpattern(7c, 2c); beginpattern(tea cloth) save r; r:=xl/8; pickup pencircle scaled r; drawdot (xl/2,xl/2); drawdot (0,0); for i = 1 upto 3 : drawdot (0,i*xl/4); drawdot (i*xl/4,0); endfor endpattern(xl,xl); beginpattern(knit) save v; v:=2/3xl; draw (0,0) -- (0,v); draw (-xl/2,3/2v) -- (-xl/2,v/2) {dir -60}..{dir -60} (0,0) {dir 60}..{dir 60} (xl/2,v/2); endpattern(xl,v); beginpattern(purl) save v; v := 2/3xl; interim linecap:=butt; draw (0,0) -- (0,v) {dir 30}..{dir 30} (xl/2,3/2v) {dir -30}..{dir -30} (xl,v); draw (xl/2,v/2) {dir -30}..{dir -30} (xl,0) {dir 30}..{dir 30} (3/2xl,v/2) -- (3/2xl,-v/2); endpattern(xl,2v); new_hexpattern(hexagons)(xl); new_hexpattern(small hexagons)(l); new_squarecirclepattern(square circles)(xl); new_squarecirclepattern(small square circles)(l); new_circlepattern(circles)(xl); new_circlepattern(small circles)(l); new_scalepattern(scales)(xl); new_scalepattern(small scales)(l); save dot; dot := 1.2pt; new_hexdotpattern(dots)(dot, l); new_hexdotpattern(dense dots)(dot, s); new_hexdotpattern(sparse dots)(dot, xl); new_dotpattern(square dots)(dot, l, 0); new_dotpattern(diamond dots)(dot, l, 45); new_dotpattern(dense square dots)(dot, s, 0); new_dotpattern(dense diamond dots)(dot, s, 45); new_dotpattern(sparse square dots)(dot, xl, 0); new_dotpattern(sparse diamond dots)(dot, xl, 45); dot := 1.8pt; new_hexdotpattern(heavy dots)(dot, l); new_hexdotpattern(dense heavy dots)(dot, s); new_hexdotpattern(sparse heavy dots)(dot, xl); new_dotpattern(square heavy dots)(dot, l, 0); new_dotpattern(diamond heavy dots)(dot, l, 45); new_dotpattern(dense square heavy dots)(dot, s, 0); new_dotpattern(dense diamond heavy dots)(dot, s, 45); new_dotpattern(sparse square heavy dots)(dot, xl, 0); new_dotpattern(sparse diamond heavy dots)(dot, xl, 45); endgroup; %  endinput;