% language=us runpath=texruns:manuals/luametafun \environment luametafun-style \startcomponent luametafun-color \startchapter[title={Color}] There are by now plenty of examples made by users that use color and \METAFUN\ provides all kind of helpers. So do we need more? When I play around with things or when users come with questions that then result in a nice looking graphic, the result might en dup as example of coding. The following is an example of showing of colors. We have a helper that goes from a so called lab specification to rgb and it does that via xyz transformations. It makes no real sense to interface this beyond this converter. We use this opportunity to demonstrate how to make an interface. \startbuffer \startMPdefinitions vardef cielabmatrix(expr l, mina, maxa, minb, maxb, stp) = image ( for a = mina step stp until maxa : for b = minb step stp until maxb : draw (a,b) withcolor labtorgb(l,a,b) ; endfor ; endfor ; ) enddef ; \stopMPdefinitions \stopbuffer \typebuffer[option=TEX] \getbuffer Here we define a macro that makes a color matrix. It can be used as follows \startbuffer \startcombination[nx=4,ny=1] {\startMPcode draw cielabmatrix(20, -100, 100, -100, 100, 5) ysized 35mm withpen pencircle scaled 2.5 ; \stopMPcode} {\type {l = 20}} {\startMPcode draw cielabmatrix(40, -100, 100, -100, 100, 5) ysized 35mm withpen pencircle scaled 2.5 ; \stopMPcode} {\type {l = 40}} {\startMPcode draw cielabmatrix(60, -100, 100, -100, 100, 5) ysized 35mm withpen pencircle scaled 2.5 ; \stopMPcode} {\type {l = 60}} {\startMPcode draw cielabmatrix(80, -100, 100, -100, 100, 5) ysized 35mm withpen pencircle scaled 2.5 ; \stopMPcode} {\type {l = 80}} \stopcombination \stopbuffer \typebuffer[option=TEX] \startlinecorrection \getbuffer \stoplinecorrection One can of course mess around a bit: \startbuffer \startcombination[nx=4,ny=1] {\startMPcode draw cielabmatrix(20, -100, 100, -100, 100, 10) ysized 35mm randomized 1 withpen pensquare scaled 4 ; \stopMPcode} {\type {l = 20}} {\startMPcode draw cielabmatrix(40, -100, 100, -100, 100, 10) ysized 35mm randomized 1 withpen pensquare scaled 4 ; \stopMPcode} {\type {l = 40}} {\startMPcode draw cielabmatrix(60, -100, 100, -100, 100, 10) ysized 35mm randomized 1 withpen pensquare scaled 4 ; \stopMPcode} {\type {l = 60}} {\startMPcode draw cielabmatrix(80, -100, 100, -100, 100, 10) ysized 35mm randomized 1 withpen pensquare scaled 4 ; \stopMPcode} {\type {l = 80}} \stopcombination \stopbuffer \typebuffer[option=TEX] \startlinecorrection \getbuffer \stoplinecorrection Normally, when you don't go beyond this kind of usage, a simple macro like the above will do. But when you want to make something that is upward compatible (which is one of the principles behind the \CONTEXT\ user interface(s), you can do this: \startbuffer \startcombination[nx=4,ny=1] {\startMPcode draw lmt_labtorgb [ l = 20, step = 20 ] ysized 35mm withpen pencircle scaled 8 ; \stopMPcode} {\type {l = 20}} {\startMPcode draw lmt_labtorgb [ l = 40, step = 20 ] ysized 35mm withpen pencircle scaled 8 ; \stopMPcode} {\type {l = 40}} {\startMPcode draw lmt_labtorgb [ l = 60, step = 20 ] ysized 35mm withpen pencircle scaled 8 ; \stopMPcode} {\type {l = 60}} {\startMPcode draw lmt_labtorgb [ l = 80, step = 20 ] ysized 35mm withpen pencircle scaled 8 ; \stopMPcode} {\type {l = 80}} \stopcombination \stopbuffer \typebuffer[option=TEX] \startlinecorrection \getbuffer \stoplinecorrection This is a predefined macro in the reserved \type {lmt_} namespace (don't use that one yourself, create your own). First we preset the possible parameters: \starttyping[option=MP] presetparameters "labtorgb" [ mina = -100, maxa = 100, minb = -100, maxb = 100, step = 5, l = 50, ] ; \stoptyping Next we define the main interface macro: \starttyping[option=MP] def lmt_labtorgb = applyparameters "labtorgb" "lmt_do_labtorgb" enddef ; \stoptyping Last we do the actual implementation, which looks a lot like the one we started with: \starttyping[option=MP] vardef lmt_do_labtorgb = image ( pushparameters "labtorgb" ; save l ; l := getparameter "l" ; for a = getparameter "mina" step getparameter "step" until getparameter "maxa" : for b = getparameter "minb" step getparameter "step" until getparameter "maxb" : draw (a,b) withcolor labtorgb(l,a,b) ; endfor ; endfor ; popparameters ; ) enddef ; \stoptyping Of course we can now add all kind of extra features but this is what we currently have. Maybe this doesn't belong in the \METAFUN\ core but it's not that much code and a nice demo. After all, there is much in there that is seldom used. \stopchapter \stopcomponent