From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.4 (2020-01-24) on inbox.vuxu.org X-Spam-Level: X-Spam-Status: No, score=-0.9 required=5.0 tests=DKIM_ADSP_CUSTOM_MED, DKIM_SIGNED,DKIM_VALID,DKIM_VALID_EF,FREEMAIL_FORGED_FROMDOMAIN, FREEMAIL_FROM,HEADER_FROM_DIFFERENT_DOMAINS,HTML_MESSAGE, MAILING_LIST_MULTI autolearn=ham autolearn_force=no version=3.4.4 Received: from cgl.ntg.nl (Cgl.ntg.nl [5.39.185.202]) by inbox.vuxu.org (Postfix) with ESMTP id BCF1F20913 for ; Fri, 10 Jan 2025 08:19:36 +0100 (CET) Received: from localhost (localhost [127.0.0.1]) by cgl.ntg.nl (Postfix) with ESMTP id F39FC484BA1 for ; Fri, 10 Jan 2025 08:19:10 +0100 (CET) Authentication-Results: cgl.ntg.nl (amavisd-new); dkim=pass (1024-bit key) reason="pass (just generated, assumed good)" header.d=ntg.nl DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=ntg.nl; h= content-type:content-type:list-unsubscribe:list-subscribe :list-post:list-owner:list-help:list-archive:archived-at:list-id :subject:subject:reply-to:precedence:message-id:date:date:from :from:in-reply-to:references:mime-version:received:received :received:received:received:received; s=cgl; t=1736493550; x= 1739085551; bh=LeMs/FsyS2/sXvhSXYtoM2mijuxOtBrbZDiusycNuNM=; b=k kDCSRC87yMR7XEkbnSNhUxzxvDJosp8N0DeBnLoLqQhjXLNXgtjXsbO1alVUIoy9 nwxYglnZFiI42UYNAWMQgHUgP9ohj6O3woYxNVKYiPtvKSvC6UifH1YGtjONfXNq wCp2SZaWk2ipv+bxs8JCxS+XoXPUS6Vp2YRKw2nhgc= X-Virus-Scanned: Debian amavisd-new at cgl.ntg.nl Authentication-Results: cgl.ntg.nl (amavisd-new); dkim=fail (2048-bit key) reason="fail (message has been altered)" header.d=gmail.com Received: from cgl.ntg.nl ([127.0.0.1]) by localhost (cgl.ntg.nl [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id ALwQGimo4e7s for ; Fri, 10 Jan 2025 08:19:10 +0100 (CET) Received: from cgl.ntg.nl (localhost [127.0.0.1]) by cgl.ntg.nl (Postfix) with ESMTP id 81A9E484C53 for ; Fri, 10 Jan 2025 08:18:03 +0100 (CET) Received: from localhost (localhost [127.0.0.1]) by cgl.ntg.nl (Postfix) with ESMTP id CDB804848FF for ; Fri, 10 Jan 2025 08:17:41 +0100 (CET) X-Virus-Scanned: Debian amavisd-new at cgl.ntg.nl Received: from cgl.ntg.nl ([127.0.0.1]) by localhost (cgl.ntg.nl [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id 24cnemqDSgBN for ; Fri, 10 Jan 2025 08:17:40 +0100 (CET) Received-SPF: Pass (mailfrom) identity=mailfrom; client-ip=209.85.214.172; helo=mail-pl1-f172.google.com; envelope-from=florent.m42@gmail.com; receiver= Received: from mail-pl1-f172.google.com (mail-pl1-f172.google.com [209.85.214.172]) (using TLSv1.3 with cipher TLS_AES_128_GCM_SHA256 (128/128 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by cgl.ntg.nl (Postfix) with ESMTPS id 7CA274848F0 for ; Fri, 10 Jan 2025 08:17:40 +0100 (CET) Received: by mail-pl1-f172.google.com with SMTP id d9443c01a7336-2166f1e589cso34461245ad.3 for ; Thu, 09 Jan 2025 23:17:40 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1736493458; x=1737098258; darn=ntg.nl; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:from:to:cc:subject:date:message-id:reply-to; bh=4dI8bO3g+STXkptstNIqu6/llkhwxnqk3lM0gP+4q4o=; b=Auu4atp61yOQNsIZGZQ1Zd4OZt2EZwrYqTtTgNFWS4trvcEX1+c/kzQtF3UOm0zEa6 /IZuZVWGrOyINyCEq1qxQPvy/xiEO0xmBxAqkygGoSRV+6k1mISmt6bNja6YqZqM0ifA 8YA4+AelDnVjqP9Dk+7OEox2Dj+oz/8kukXO7m2oULDHUkLI8fYn68CfQRQYt5X187+D 0c4OMAWmBSL+jsMKyS4e7UX9AYUMcXrerIRWQZJ+edvmByci2hpaxLMwSBLgxNtZdjxM SpoYb55xuMi7drN1cjM15FvzBqqxCMU64REnd3z2FyWjRC0aJXwB1bjvkpPPLF0+7pid zX1w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1736493458; x=1737098258; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=4dI8bO3g+STXkptstNIqu6/llkhwxnqk3lM0gP+4q4o=; b=jYHKCcLkbmuBwnBpMm//LvT/fpI62eWk2AvO2tBiy0T3qpQYoqGdyt9hZpkRY1W7tc hJKDzBR2FMtq/6wvs+n/ZltW8BQFz3kAL75ZDQA9q5MSmcT+B5vWyGAc1muaewP4Q/pl nI/uihnqsv4Eg6/DTyGlUSfGyTnCynTYiKpdTUlU3/wAU4vujkTQrGBg9XYIElgTRMlI LEo67SfhzukB6y+IBMWXumLYxBOuF4wqC0MAr7JEjhDqXsaW2PK7J7v87gnG1lkI25MS DXRpJgmHRkfWa9FYNT/yIpF2iOU3fsBYAeQ0mHBrHh3K8ti6vT0MlmmYPerAA9bJykr2 MKmw== X-Gm-Message-State: AOJu0YxeLQ2V60LJuM1em/vw567iJI6CwX5nmlGwg9I6zHWoUCTEpjly m0LxoIKf1zG1Osnfwce3iybZKFhXm+NFOSKr/lvZFlr4PgyA/uD3bVKw3FV+q9qxCmTMmSTAKhO pZzFIsqC35U7jmpJocYjaeTq+AeE= X-Gm-Gg: ASbGncvtWAxT2MWaZ3ncuYbVhSWGFu2957uugkkDiXhrHh2S1QBOejyoLbALhVm4WYI oY2Fjkcd669EXnCc53+Xi2EyD2040OGMH+Ufg9A== X-Google-Smtp-Source: AGHT+IG7fhnLyowPFRwtSo2dLotsJ39HeL4wKywOvDl0p1j9YdadVnn0dFz4a0ZO27WXoUTAiJqAdiKkhMfhu1pb8Tw= X-Received: by 2002:a17:902:db0e:b0:216:3d72:1712 with SMTP id d9443c01a7336-21a83fdf36emr145855595ad.48.1736493457981; Thu, 09 Jan 2025 23:17:37 -0800 (PST) MIME-Version: 1.0 References: <868b0721-4789-4361-8b77-2b0c6ba4b270@xs4all.nl> In-Reply-To: <868b0721-4789-4361-8b77-2b0c6ba4b270@xs4all.nl> From: Florent Michel Date: Fri, 10 Jan 2025 07:17:21 +0000 X-Gm-Features: AbW1kvaejrBt8dbBlw25lrufvei4ZF-MmDfkFBDgLvCojT3hvbTXHc_v0fAP108 Message-ID: To: Hans Hagen Message-ID-Hash: V5J3WAWKRUSGNVHIYBA4BZNB6LP5HXWV X-Message-ID-Hash: V5J3WAWKRUSGNVHIYBA4BZNB6LP5HXWV X-MailFrom: florent.m42@gmail.com X-Mailman-Rule-Misses: dmarc-mitigation; no-senders; approved; emergency; loop; banned-address; member-moderation; nonmember-moderation; administrivia; implicit-dest; max-recipients; max-size; news-moderation; no-subject; digests; suspicious-header CC: mailing list for ConTeXt users X-Mailman-Version: 3.3.9 Precedence: list Reply-To: mailing list for ConTeXt users Subject: [NTG-context] Re: Functional shading with MetaPost / MetaFun List-Id: mailing list for ConTeXt users Archived-At: List-Archive: List-Help: List-Owner: List-Post: List-Subscribe: List-Unsubscribe: Content-Type: multipart/mixed; boundary="===============3751620019577469694==" --===============3751620019577469694== Content-Type: multipart/alternative; boundary="000000000000b7c9a7062b54e31b" --000000000000b7c9a7062b54e31b Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable Thank you very much Hans for this solution! Very interesting! One thing I'm still not understanding (but maybe I'm missing something obvious) is how to reproduce the =E2=80=982D gradient=E2=80=99 effect of th= e PGFplots version, where one corner is red, one is green, and one is red with the shading inside the triangle interpolating smoothly between the three colours (apologies if my previous email was not clear on that!). Running the code you sent, I get a change of colour in the vertical direction only (it looks nice, though!). Would you know if there is a way to achieve a similar =E2=80=982D gradient=E2=80=99 effect in MetaPost? Here are two screenshots to whos the difference: https://imgur.com/a/SlJ4Bi= E Thank you also for pointing me to the test suite! It seems to have many useful examples! Cheers, Florent On Fri, Jan 10, 2025, 00:17 Hans Hagen wrote: > On 1/9/2025 10:44 PM, Florent Michel wrote: > > Hi, > > > > I was trying to see if I could use MetaFun / MetaPost as my main tool > > for generating figures. I really like its close integration with > > ConTeXt, speed, and expressivity making it, even for a beginner like me= , > > a pleasure to work with. > > > > One difficulty I encountered is for generating 2D functional shadings. > > For instance, I am not sure what is the best way to reproduce the > > following pgfplots picture in MetaPost: > > > > ____________________________________________________________ > > \usemodule[pgfplots] > > \pgfplotsset{width=3D10cm,compat=3D1.18} > > \usepgfplotslibrary{patchplots} > > > > \starttext > > > > \startTEXpage > > \starttikzpicture > > \startaxis[ > > hide axis=3Dtrue, > > axis lines=3Dnone,hide axis, > > enlargelimits=3Dfalse, > > scale only axis, > > clip bounding box=3Dupper bound, > > clip=3Dtrue, > > ] > > \addplot[ > > patch, > > shader=3Dinterp, > > mesh/color input=3Dexplicit, > > data cs=3Dpolar, > > ] > > coordinates { > > (90,4) [color=3Dred] > > (210,4) [color=3Dgreen] > > (-30,4) [color=3Dblue] > > }; > > \stopaxis > > \stoptikzpicture > > \stopTEXpage > > \stoptext > > ____________________________________________________________ > > > > One idea is to draw a sequence of triangles, each with a linear gradien= t: > > ____________________________________________________________ > > \startMPpage > > def LinearIntTriangle(expr pa, pb, pc, cola, colb, colc, n_iter) =3D > > for i =3D n_iter step -1 until 1 : > > path p; > > x :=3D i / n_iter; > > y :=3D (i - 0.5) / n_iter; > > p :=3D pa -- (pa + x * (pb - pa)) -- (pa + x * (pc - pa)) -- cyc= le; > > sh :=3D define_linear_shade(pa + y * (pb - pa), pa + y * (pc - p= a), > > (1 - y) * cola + y * colb, (1 - y) * > > cola + y * colc); > > fill p withshade sh; > > endfor > > enddef; > > > > color cola, colb, colc; > > cola :=3D (0,1,0); > > colb :=3D (1,0,0); > > colc :=3D (0,0,1); > > > > LinearIntTriangle((0,0), (50,50*(3**0.5)), (100,0), cola, colb, colc= , > > 30); > > \stopMPpage > > ____________________________________________________________ > > > > or to use a slight variation (decomposing the triangle in three so that > > the color is =E2=80=98right=E2=80=99) along each edge: > > ____________________________________________________________ > > \startMPpage > > def LinearIntTriangleB(expr pa, pb, pc, cola, colb, colc, n_iter) = =3D > > color centre_color; > > centre_color :=3D (cola + colb + colc) / 3; > > LinearIntTriangle((pa + pb + pc) / 3, pa, pb, centre_color, cola, > > colb, n_iter); > > LinearIntTriangle((pa + pb + pc) / 3, pb, pc, centre_color, colb, > > colc, n_iter); > > LinearIntTriangle((pa + pb + pc) / 3, pc, pa, centre_color, colc, > > cola, n_iter); > > enddef; > > > > color cola, colb, colc; > > cola :=3D (0,1,0); > > colb :=3D (1,0,0); > > colc :=3D (0,0,1); > > > > LinearIntTriangleB((0,0), (50,50*(3**0.5)), (100,0), cola, colb, > > colc, 10); > > \stopMPpage > > ____________________________________________________________ > > > > This approach gives =E2=80=98good enough=E2=80=99 results for large val= ues of n_iter. > > However, the size of the generated pdf is somewhat larger than the > > pgfplots version: for instance, the first version above generates a 5Ki= B > > pdf versus 3.8KiB for the pgfplots version, while being somewhat less > > accurate. Increasing n_iter to 100 gives a result which is (to my not- > > very-good eyes) very close to the pgfplots version but the pdf size > > increases to about 20KiB, and takes significantly longer to render usin= g > > MuPDF. > > > > I'd be grateful if someone could point me to a better way to generate > > such shadings in MetaFun / MetaPost. > > these things can often be found in the test suite > > \startMPpage > fill unittriangle rotated 90 xyscaled (200,100) > withshademethod "linear" > withshadecenteronefraction (0,1) > withshadecentertwofraction (0,0) > withshadestep ( > withshadefraction 0 > withshadecolors (green, green) > ) > withshadestep ( > withshadefraction 0.75 > withshadecolors (blue, green) > ) > withshadestep ( > withshadefraction 0.25 > withshadecolors (green, blue) > ) > withshadestep ( > withshadefraction 1 > withshadecolors (green, red) > ) > ; > \stopMPpage > > > ----------------------------------------------------------------- > Hans Hagen | PRAGMA ADE > Ridderstraat 27 | 8061 GH Hasselt | The Netherlands > tel: 038 477 53 69 | www.pragma-ade.nl | www.pragma-pod.nl > ----------------------------------------------------------------- > --000000000000b7c9a7062b54e31b Content-Type: text/html; charset="UTF-8" Content-Transfer-Encoding: quoted-printable

Thank you very much Hans for this solution!= Very interesting!=C2=A0

One thing I'm still not understanding (= but maybe I'm missing something obvious) is how to reproduce the=C2=A0= =E2=80=982D gradient=E2=80=99 effect of the PGFplots version,=C2=A0where on= e corner is red,=C2=A0one=C2=A0is green, and one is red with the shading in= side the triangle interpolating smoothly between the three colours (apologi= es if my previous email was not clear on that!). Running the code you sent,= I get a change of colour in the vertical direction only (it looks nice, th= ough!). Would you know if there is a way to achieve a similar =E2=80=982D g= radient=E2=80=99 effect in MetaPost?=C2=A0

Here are two screenshots = to whos the difference: https://img= ur.com/a/SlJ4BiE

Thank you also for pointing me to the test suite! It=C2=A0se= ems to have many useful examples!

Cheers,
Florent


On Fri= , Jan 10, 2025, 00:17 Hans Hagen <j.hagen@xs4all.nl> wrote:
On 1/9/2025 10:44 PM, Florent Michel wrot= e:
> Hi,
>
> I was trying to see if I could use=C2=A0MetaFun / MetaPost as my main = tool
> for generating figures. I really like its close integration with
> ConTeXt, speed, and expressivity making it,=C2=A0even for a beginner l= ike me,
> a=C2=A0 pleasure to=C2=A0work with.
>
> One difficulty I encountered is for generating 2D functional shadings.=
> For instance, I am not sure what is the best way to reproduce the
> following pgfplots picture in MetaPost:
>
> ____________________________________________________________
> \usemodule[pgfplots]
> \pgfplotsset{width=3D10cm,compat=3D1.18}
> \usepgfplotslibrary{patchplots}
>
> \starttext
>
> \startTEXpage
> \starttikzpicture
> \startaxis[
>=C2=A0 =C2=A0 =C2=A0 hide axis=3Dtrue,
>=C2=A0 =C2=A0 =C2=A0 axis lines=3Dnone,hide axis,
>=C2=A0 =C2=A0 =C2=A0 enlargelimits=3Dfalse,
>=C2=A0 =C2=A0 =C2=A0 scale only axis,
>=C2=A0 =C2=A0 =C2=A0 clip bounding box=3Dupper bound,
>=C2=A0 =C2=A0 =C2=A0 clip=3Dtrue,
> ]
>=C2=A0 =C2=A0 =C2=A0 \addplot[
>=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 patch,
>=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 shader=3Dinterp,
>=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 mesh/color input=3Dexplicit,
>=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 data cs=3Dpolar,
>=C2=A0 =C2=A0 =C2=A0 ]
>=C2=A0 =C2=A0 =C2=A0 coordinates {
>=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 (90,4) [color=3Dred]
>=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 (210,4) [color=3Dgreen]
>=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 (-30,4) [color=3Dblue]
>=C2=A0 =C2=A0 =C2=A0 };
> \stopaxis
> \stoptikzpicture
> \stopTEXpage
> \stoptext
> ____________________________________________________________
>
> One idea is to draw a=C2=A0sequence of triangles, each with a linear g= radient:
> ____________________________________________________________
> \startMPpage
>=C2=A0 =C2=A0 def LinearIntTriangle(expr pa, pb, pc, cola, colb, colc, = n_iter) =3D
>=C2=A0 =C2=A0 =C2=A0 for i =3D n_iter step -1 until 1 :
>=C2=A0 =C2=A0 =C2=A0 =C2=A0 path p;
>=C2=A0 =C2=A0 =C2=A0 =C2=A0 x :=3D i / n_iter;
>=C2=A0 =C2=A0 =C2=A0 =C2=A0 y :=3D (i - 0.5) / n_iter;
>=C2=A0 =C2=A0 =C2=A0 =C2=A0 p :=3D pa -- (pa + x * (pb - pa)) -- (pa + = x * (pc - pa)) -- cycle;
>=C2=A0 =C2=A0 =C2=A0 =C2=A0 sh :=3D define_linear_shade(pa + y * (pb - = pa), pa + y * (pc - pa),
>=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 = =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 (1 - y) * cola + y * colb,= (1 - y) *
> cola + y * colc);
>=C2=A0 =C2=A0 =C2=A0 =C2=A0 fill p withshade sh;
>=C2=A0 =C2=A0 =C2=A0 endfor
>=C2=A0 =C2=A0 enddef;
>
>=C2=A0 =C2=A0 color cola, colb, colc;
>=C2=A0 =C2=A0 cola :=3D (0,1,0);
>=C2=A0 =C2=A0 colb :=3D (1,0,0);
>=C2=A0 =C2=A0 colc :=3D (0,0,1);
>
>=C2=A0 =C2=A0 LinearIntTriangle((0,0), (50,50*(3**0.5)), (100,0), cola,= colb, colc,
> 30);
> \stopMPpage
> ____________________________________________________________
>
> or to use a slight variation (decomposing the triangle in three so tha= t
> the color is =E2=80=98right=E2=80=99) along each edge:
> ____________________________________________________________
> \startMPpage
>=C2=A0 =C2=A0 def LinearIntTriangleB(expr pa, pb, pc, cola, colb, colc,= n_iter) =3D
>=C2=A0 =C2=A0 =C2=A0 color centre_color;
>=C2=A0 =C2=A0 =C2=A0 centre_color :=3D (cola + colb + colc) / 3;
>=C2=A0 =C2=A0 =C2=A0 LinearIntTriangle((pa + pb + pc) / 3, pa, pb, cent= re_color, cola,
> colb, n_iter);
>=C2=A0 =C2=A0 =C2=A0 LinearIntTriangle((pa + pb + pc) / 3, pb, pc, cent= re_color, colb,
> colc, n_iter);
>=C2=A0 =C2=A0 =C2=A0 LinearIntTriangle((pa + pb + pc) / 3, pc, pa, cent= re_color, colc,
> cola, n_iter);
>=C2=A0 =C2=A0 enddef;
>
>=C2=A0 =C2=A0 color cola, colb, colc;
>=C2=A0 =C2=A0 cola :=3D (0,1,0);
>=C2=A0 =C2=A0 colb :=3D (1,0,0);
>=C2=A0 =C2=A0 colc :=3D (0,0,1);
>
>=C2=A0 =C2=A0 LinearIntTriangleB((0,0), (50,50*(3**0.5)), (100,0), cola= , colb,
> colc, 10);
> \stopMPpage
> ____________________________________________________________
>
> This approach gives =E2=80=98good enough=E2=80=99 results for large va= lues of n_iter.
> However, the size of the generated pdf is somewhat larger than the > pgfplots version: for instance, the first version above generates a 5K= iB
> pdf versus 3.8KiB for the pgfplots version, while being somewhat less =
> accurate. Increasing n_iter to 100 gives a result which is (to my not-=
> very-good eyes) very close to the pgfplots version but the pdf size > increases to about 20KiB, and takes significantly longer to render usi= ng
> MuPDF.
>
> I'd be grateful if someone could point me to=C2=A0a better=C2=A0wa= y to generate
> such shadings in MetaFun / MetaPost.

these things can often be found in the test suite

\startMPpage
=C2=A0 =C2=A0 fill unittriangle rotated 90 xyscaled (200,100)
=C2=A0 =C2=A0 =C2=A0 =C2=A0 withshademethod "linear"
=C2=A0 =C2=A0 =C2=A0 =C2=A0 withshadecenteronefraction (0,1)
=C2=A0 =C2=A0 =C2=A0 =C2=A0 withshadecentertwofraction (0,0)
=C2=A0 =C2=A0 =C2=A0 =C2=A0 withshadestep (
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 withshadefraction 0
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 withshadecolors (green, green) =C2=A0 =C2=A0 =C2=A0 =C2=A0 )
=C2=A0 =C2=A0 =C2=A0 =C2=A0 withshadestep (
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 withshadefraction 0.75
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 withshadecolors (blue, green)
=C2=A0 =C2=A0 =C2=A0 =C2=A0 )
=C2=A0 =C2=A0 =C2=A0 =C2=A0 withshadestep (
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 withshadefraction 0.25
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 withshadecolors (green, blue)
=C2=A0 =C2=A0 =C2=A0 =C2=A0 )
=C2=A0 =C2=A0 =C2=A0 =C2=A0 withshadestep (
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 withshadefraction 1
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 withshadecolors (green, red)
=C2=A0 =C2=A0 =C2=A0 =C2=A0 )
=C2=A0 =C2=A0 =C2=A0;
\stopMPpage


-----------------------------------------------------------------
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 = =C2=A0Hans Hagen | PRAGMA ADE
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0Ridderstraat 27 | 80= 61 GH Hasselt | The Netherlands
=C2=A0 =C2=A0 =C2=A0 =C2=A0 tel: 038 477 53 69 | www.pragma-ade.n= l | www.pragma-pod.nl
-----------------------------------------------------------------
--000000000000b7c9a7062b54e31b-- --===============3751620019577469694== Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Content-Disposition: inline ___________________________________________________________________________________ If your question is of interest to others as well, please add an entry to the Wiki! maillist : ntg-context@ntg.nl / https://mailman.ntg.nl/mailman3/lists/ntg-context.ntg.nl webpage : https://www.pragma-ade.nl / https://context.aanhet.net (mirror) archive : https://github.com/contextgarden/context wiki : https://wiki.contextgarden.net ___________________________________________________________________________________ --===============3751620019577469694==--