Graded Transparency in MetaFun
Hi all I'm trying to create graded transparency over an area similar to the effect produced using lmt_shade, where one colour goes to another colour over a continuum, but with graded transparency we would go from say 0 to 1 transparency, for a single colour. See the MWE below. I have tried this by creating a loop which draws a linear path, yshifted the thickness of the pen, with transparency calculated for each step over the a predetermined height on the page. I have also tried a similar way for a circular path but in this case the path is repeatedly drawn scaled in a loop. The MWE below works OK but when I zoom into the graded transparency areas lines begin to appear which would suggest that their is a better way to do what I want. This is borne out if you zoom into a lmt-shade area, one colour smoothly becomes another colour. I've put examples of this in the MWE. I'm guessing the way lmt_shade areas are drawn is the way to go. Is this likely to be easy to code for what I want to do? Best Wishes Keith McKay %%%MWE%% \setuppapersize[A4,portrait] \usecolors[crayola] \starttext \startMPpage %page 1 StartPage; numeric maxTransp;% Must be between 0 and 1 numeric opHeight; % Opaque area height on page path t; string p[]; p[5] = "RadicalRed"; p[10] = "LemonYellow"; p[15] = "MiddleGreen"; p[20] = "CadetBlue"; p[25] = "white"; maxTransp := 1; opHeight := 2.5; %cm for k= 5, 10, 15, 20, 25: draw lmt_text [ text = "opaque", color = "black", style = "bold", anchor = "lft", position = (-1mm,2mm), ] xsized .95TextWidth ysized 7cm shifted(22cm,(k - 2)*cm); t := (1cm, k*cm) -- (20cm, k*cm); %Square opaque area draw t withpen pensquare scaled .25pt withcolor p[k] withtransparency("normal",maxTransp); for i = 0 step 0.25until (opHeight*72/2.54): r := (i/(opHeight*72/2.54))*maxTransp; %calculate transparency draw t yshifted (-i-.25)*pt withpen pensquare scaled .25pt withcolor p[k] withtransparency("normal",(maxTransp-r)); draw t yshifted (i+.25)*pt withpen pensquare scaled .25pt withcolor p[k] withtransparency("normal",(maxTransp-r)); endfor; endfor; draw lmt_shade [ path = fullsquare xyscaled(19cm,2cm), direction = "up", alternative = "linear", colors = { "red", "blue" }, ] shifted(10.5cm,1.5cm); StopPage; \stopMPpage \page \startMPpage %page 2 StartPage; numeric maxTransp;% Must be between 0 and 1 numeric opHeight; % Opaque area height path t, u; string p[]; p[5] = "RadicalRed"; p[10] = "LemonYellow"; p[15] = "MiddleGreen"; p[20] = "CadetBlue"; p[25] = "white"; maxTransp := 1; opHeight := 2.5; %centimeters opHeightpt := (opHeight /2.54)*72.27; draw lmt_text [ text = "\rotate{opaque}", color = "black", style = "bold", anchor = "lft", position = (-1mm,2mm), ] xsized .25TextHeight shifted(12cm,10cm); for k= 5, 10, 15, 20, 25: t := (1cm, k*cm)--(20cm, k*cm) ; %Square opaque area draw t withpen pensquare scaled .25pt withcolor p[k] withtransparency("normal",maxTransp); for i = 0 step 0.25 until opHeightpt: r := (i/(opHeight*72.27/2.54))*maxTransp; draw t yshifted (i+0.25)*pt withpen pensquare scaled 0.25pt withcolor p[k] withtransparency("normal",(maxTransp-r)); draw t yshifted (-i-0.25)*pt withpen pensquare scaled .25pt withcolor p[k] withtransparency("normal",(maxTransp-r)); endfor; endfor; draw lmt_shade [ path = fullsquare xyscaled(19cm,2cm), direction = "up", alternative = "linear", colors = { "red", "blue" }, ] shifted(10.5cm,1.5cm) ; StopPage; \stopMPpage \page \startMPpage %page 3 StartPage; draw lmt_text [ text = "opaque", color = "black", style = "bold", anchor = "lft", position = (-1mm,2mm), ] xsized .95TextWidth ysized 7cm shifted(22cm,13cm); draw lmt_text [ text = "opaque", color = "black", style = "bold", anchor = "lft", position = (-1mm,2mm), ] xsized .95TextWidth ysized 7cm shifted(22cm,3cm); path t, u; t := (11cm, 15cm) -- (20cm, 15cm); %Square opaque area u := fullcircle scaled 5cm shifted (5cm,16cm); %Circular opaque area for j = (5*72.27/2.54) step -0.25 until 1: r := (j/(5*72.27/2.54)) *0.5; s := -r + 0.5; draw fullcircle scaled (j*pt) shifted (5cm,16cm) withpen pencircle scaled 0.25pt withcolor ("RadicalRed") withtransparency ("normal",s); endfor; fill fullcircle scaled .25pt shifted (5cm,16cm) withpen pencircle scaled 0.25pt withcolor ("RadicalRed") withtransparency ("normal",s); for i = 0.0001 step 0.25 until (10*72.27/2.54): r := (i/(10*72.27/2.54)); draw t yshifted -i*pt withpen pensquare scaled 0.25pt withcolor ("SpringGreen") withtransparency ("lighten",(1-r)); draw t yshifted i*pt withpen pensquare scaled 0.25pt withcolor ("RadicalRed") withtransparency ("lighten",(1-r)); endfor; draw lmt_shade [ path = fullcircle scaled 5cm, alternative = "circular", colors = { "red", "blue" }, ] shifted(5cm,5cm) withtransparency("normal",0.85); StopPage; \stopMPpage \stoptext
participants (1)
-
Keith McKay