%D \module %D [ file=meta-grd, %D version=2012.06.28, %D title=\METAPOST\ Graphics, %D subtitle=grids, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %C %C This module is part of the \CONTEXT\ macro||package and is %C therefore copyrighted by \PRAGMA. See mreadme.pdf for %C details. \writestatus{loading}{MetaPost Graphics / Grids} \unprotect %D This used to be a \TEX\ method, and a rather old one too. We keep it around but %D in a more modern way. %D %D \startbuffer %D \basegrid %D [nx=8,ny=5, %D dx=.5,dy=.25, %D unit=cm,scale=2,factor=1, %D offset=1ex,xstep=2,ystep=1, %D align=middle,style=\tt\tx] %D \stopbuffer %D %D \typebuffer %D %D \placefigure %D {An example of a grid.} %D {\getbuffer} % \startuseMPgraphic{grid}{nx,ny,dx,dy,factor,scale,xstep,ystep,xoffset,yoffset,align,s:textcolor,s:rulecolor,rulethickness} % begingroup ; % save dx, dy, wd, ht, ox, oy, ax, ay ; % % (dx,dy) = (\MPvar{dx},\MPvar{dy})*\MPvar{factor}*\MPvar{scale} ; % (wd,ht) = (\MPvar{nx}*dx,\MPvar{ny}*dy) ; % (ox,oy) = (\MPvar{xoffset},\MPvar{yoffset}) ; % (ax,ay) = if \MPvar{align} = 1 : (dx,dy)/2 else : origin fi ; % % draw image ( % for i=0 step dx until wd : draw (i,0) -- (i,ht) ; endfor ; % for i=0 step dy until ht : draw (0,i) -- (wd,i) ; endfor ; % ) % withpen pencircle scaled \MPvar{rulethickness} % withcolor "\MPvar{rulecolor}" ; % draw image ( % if \MPvar{xstep} > 0 : % for i=1 step \MPvar{xstep} until \MPvar{nx} : % draw thetextext.bot(decimal i,(i*dx-ax,-ox)); % endfor ; % fi ; % if \MPvar{ystep} > 0 : % for i=1 step \MPvar{ystep} until \MPvar{ny} : % draw thetextext.lft(decimal i,(-oy,i*dy-ay)) ; % endfor ; % fi ; % ) % withcolor "\MPvar{color}" ; % endgroup ; % \stopuseMPgraphic % % less tokens (not used often): % % \startuseMPgraphic{grid}{\c!nx,\c!ny,\c!dx,\c!dy,\c!factor,\c!scale,\c!xstep,\c!ystep,\c!xoffset,\c!yoffset,\c!align,s:\c!textcolor,s:\c!rulecolor,\c!rulethickness} % begingroup ; % save dx, dy, wd, ht, ox, oy, ax, ay ; % % (dx,dy) = (\MPvar\c!dx,\MPvar\c!dy)*\MPvar\c!factor*\MPvar\c!scale ; % (wd,ht) = (\MPvar\c!nx*dx,\MPvar\c!ny*dy) ; % (ox,oy) = (\MPvar\c!xoffset,\MPvar\c!yoffset) ; % (ax,ay) = if \MPvar\c!align = 1 : (\c!dx,\c!dy)/2 else : origin fi ; % % draw image ( % for i=0 step dx until wd : draw (i,0) -- (i,ht) ; endfor ; % for i=0 step dy until ht : draw (0,i) -- (wd,i) ; endfor ; % ) % withpen pencircle scaled \MPvar\c!rulethickness\space % withcolor "\MPvar\c!rulecolor" ; % draw image ( % if \MPvar\c!xstep > 0 : % for i=1 step \MPvar\c!xstep until \MPvar\c!nx : % draw thetextext.bot(decimal i,(i*dx-ax,-ox)); % endfor ; % fi ; % if \MPvar\c!ystep > 0 : % for i=1 step \MPvar\c!ystep until \MPvar\c!ny : % draw thetextext.lft(decimal i,(-oy,i*dy-ay)) ; % endfor ; % fi ; % ) % withcolor "\MPvar\c!color" ; % endgroup ; % \stopuseMPgraphic % % \def\typo_grid_base[#1]% % {\dontleavehmode % \hbox\bgroup % \getdummyparameters % [\c!nx=10,\c!ny=10,\c!dx=.5,\c!dy=.5,\c!xstep=0,\c!ystep=0,% % \c!unit=\s!cm,\c!scale=1,\c!factor=1,% % \c!offset=.25ex,% % \c!xoffset=\directdummyparameter\c!offset,% % \c!yoffset=\directdummyparameter\c!offset,% % \c!align=,% % \c!color=\currentcolorname,% % \c!rulecolor=\currentcolorname,% % \c!rulethickness=\linewidth,% % #1]% % \usedummystyleandcolor\c!style\c!color % \edef\p_align{\directdummyparameter\c!align}% % \edef\p_unit {\directdummyparameter\c!unit}% % \useMPgraphic % {grid}% % {nx=\directdummyparameter\c!nx,% % ny=\directdummyparameter\c!ny,% % dx=\directdummyparameter\c!dx\p_unit,% % dy=\directdummyparameter\c!dy\p_unit,% % factor=\directdummyparameter\c!factor,% % scale=\directdummyparameter\c!scale,% % xstep=\directdummyparameter\c!xstep,% % ystep=\directdummyparameter\c!ystep,% % xoffset=\directdummyparameter\c!xoffset,% % yoffset=\directdummyparameter\c!yoffset,% % color=\directdummyparameter\c!color,% % rulecolor=\directdummyparameter\c!rulecolor,% % rulethickness=\directdummyparameter\c!rulethickness,% % align=\ifx\p_align\v!middle\!!plusone\else\!!zerocount\fi}% % \egroup} % % even less tokens wasted (no need to clog the core with hardly % used code): \startuseMPgraphic{meta:grd:basegrid} begingroup ; save sc, dx, dy, wd, ht, ox, oy, ax, ay ; sc := \directdummyparameter\c!factor*\directdummyparameter\c!scale ; dx := \MPdpar\directdummyparameter\c!dx*sc ; dy := \MPdpar\directdummyparameter\c!dy*sc ; wd := \directdummyparameter\c!nx*dx ; ht := \directdummyparameter\c!ny*dy ; ox := \MPdpar\directdummyparameter\c!xoffset\relax ; oy := \MPdpar\directdummyparameter\c!yoffset\relax ; if "\directdummyparameter\c!align" = "\v!middle" : ax := \MPdpar\directdummyparameter\c!dx/2 ; ay := \MPdpar\directdummyparameter\c!dy/2 ; else : ax := 0 ; ay := 0 ; fi ; draw image ( for i=0 step dx until wd : draw (i,0) -- (i,ht) ; endfor ; for i=0 step dy until ht : draw (0,i) -- (wd,i) ; endfor ; ) withpen pencircle scaled \MPdpar\directdummyparameter\c!rulethickness\space withcolor "\directdummyparameter\c!rulecolor" ; draw image ( if \directdummyparameter\c!xstep > 0 : for i=1 step \directdummyparameter\c!xstep until \directdummyparameter\c!nx : draw thetextext.bot(decimal i,(i*dx-ax,oy)); endfor ; fi ; if \directdummyparameter\c!ystep > 0 : for i=1 step \directdummyparameter\c!ystep until \directdummyparameter\c!ny : draw thetextext.lft(decimal i,(ox,i*dy-ay)) ; endfor ; fi ; ) withcolor "\directdummyparameter\c!color" ; endgroup ; \stopuseMPgraphic \def\typo_grid_base[#1]% {\dontleavehmode \hbox\bgroup \getdummyparameters [\c!nx=10,\c!ny=10,% \c!dx=.5,\c!dy=.5,% \c!xstep=0,\c!ystep=0,% \c!unit=\s!cm,\c!scale=1,\c!factor=1,% \c!offset=.25\exheight,% \c!xoffset=\directdummyparameter\c!offset,% \c!yoffset=\directdummyparameter\c!offset,% \c!align=,% \c!color=\currentcolorname,% \c!rulecolor=\currentcolorname,% \c!rulethickness=\linewidth,% #1]% \usedummystyleandcolor\c!style\c!color \setexpandeddummyparameter\c!dx{\directdummyparameter\c!dx\directdummyparameter\c!unit}% \setexpandeddummyparameter\c!dy{\directdummyparameter\c!dy\directdummyparameter\c!unit}% \useMPgraphic{meta:grd:basegrid}% \egroup} \unexpanded\def\basegrid {\dosingleempty\typo_grid_base} \let\grid\basegrid \protect \endinput