Best way to apply a fill-pattern to a closed shape?
Hello List, I have a use case to apply a particular pattern to a closed shape. I am using Metapost for the figures. After some research this package seems to quite good, in terms of having all the patterns normally used - https://ctan.org/pkg/minim-hatching But I could not figure out how to use this with ConTeXt. Or maybe there is already a better way to do this in ConTeXt and am missing that trick. Any tips would be really helpful. Thank you. Best regards, Ramkumar
On 8/28/2021 11:33 AM, Ramkumar KB via ntg-context wrote:
Hello List,
I have a use case to apply a particular pattern to a closed shape. I am using Metapost for the figures.
After some research this package seems to quite good, in terms of having all the patterns normally used - https://ctan.org/pkg/minim-hatching https://ctan.org/pkg/minim-hatching
But I could not figure out how to use this with ConTeXt. Or maybe there is already a better way to do this in ConTeXt and am missing that trick.
Any tips would be really helpful. \starttext
\startMPpage[offset=1cm] draw (fullcircle scaled 5cm shifted (0cm,0cm)) withpattern image (fill fullcircle scaled 1cm withcolor "darkblue" ;) withpatternscale (1/10,1/10) ; draw (fullcircle scaled 5cm shifted (5cm,0cm)) withpattern image (fill fullcircle scaled 5mm withcolor "darkred" ;) withpatternscale (1/20,1/20) ; draw (fullcircle scaled 5cm shifted (10cm,0cm)) withpattern image (fill fullcircle scaled 5mm withcolor "darkgreen" ;) withpatternscale (1/40,1/40) ; draw (fullcircle scaled 5cm shifted (0cm,5cm)) withpattern image (fill fullcircle scaled 1cm withcolor "darkcyan" ;) withpatternscale (1/10,1/20) ; draw (fullcircle scaled 5cm shifted (5cm,5cm)) withpattern image (fill fullcircle scaled 5mm withcolor "darkmagenta" ;) withpatternscale (1/20,1/40) ; draw (fullcircle scaled 5cm shifted (10cm,5cm)) withpattern image (fill fullcircle scaled 5mm withcolor "darkyellow" ;) withpatternscale (1/40,1/80) ; \stopMPpage \startMPpage[offset=1cm] fill fullcircle scaled 11cm withcolor "darkyellow" ; draw fullcircle scaled 10cm withpattern image (fill fullcircle scaled 1cm withcolor "darkblue" ;) ; draw fulldiamond scaled 8cm withpattern image (fill fulldiamond scaled 4mm withcolor "darkgreen" ;) rotated 15 ; draw fulltriangle scaled 9cm withpattern image (fill fulltriangle scaled 3mm withcolor "white" ;) rotated 45 ; draw fullcircle scaled 10cm withpattern image (draw textext("!") withcolor "middlegray" ;) rotated 45 ; draw fullcircle scaled 10cm withpen pencircle scaled 1mm withcolor "darkgray" ; \stopMPpage \startMPpage[instance=doublefun] fill fullcircle scaled 8cm withcolor "yellow" ; draw fullcircle scaled 8cm withpattern image (draw figure("t:/sources/cow.pdf") rotated 45;) withpatternscale 1/40 ; \stopMPpage \startMPpage[instance=doublefun] draw closedcurve(unitsquare xyscaled (200,200) shifted (0,-200)) withpattern image (fill closedcurve((fullcircle scaled 40 shifted (25,-25))) withcolor "darkgray" withopacity .5) withpatternscale (1,1) ; draw closedcurve(unitsquare xyscaled (200,200) shifted (0,-200)) withpattern image (fill closedcurve((fullcircle scaled 40 shifted (25,-25))) withcolor "darkred" withopacity .5) withpatternscale (1/2,1/2) ; draw closedcurve(unitsquare xyscaled (200,200) shifted (0,-200)) withpattern image (fill closedcurve((fullcircle scaled 40 shifted (25,-25))) withcolor "darkgreen" withopacity .5) withpatternscale (1/3,1/3) ; draw closedcurve(unitsquare xyscaled (200,200) shifted (0,-200)) withpattern image (fill closedcurve((fullcircle scaled 40 shifted (25,-25))) withcolor "darkblue" withopacity .5) withpatternscale (1/4,1/4) ; \stopMPpage % \startTEXpage \page \startMPcode{doublefun} draw closedcurve(unitsquare xyscaled (200,200) shifted (0,-400)) withpattern image (fill closedcurve((fullcircle scaled 40 shifted (25,-25)))) withpatternscale 1/8 ; \stopMPcode \blank \startMPcode{doublefun} draw closedcurve(unitsquare xyscaled (200,200) shifted (0,-400)) withpattern image (fill closedcurve((fullcircle scaled 40 shifted (25,-25)))) withpatternfloat true withpatternscale 1/8 ; \stopMPcode \page % \stopTEXpage \stoptext ----------------------------------------------------------------- Hans Hagen | PRAGMA ADE Ridderstraat 27 | 8061 GH Hasselt | The Netherlands tel: 038 477 53 69 | www.pragma-ade.nl | www.pragma-pod.nl -----------------------------------------------------------------
Hans,
Thank you for the snippets. These are super helpful (I am assuming commands
like `withpatternscale` are MetaFun extensions and Wow!).
I have added them to a new Wiki Page -
https://wiki.contextgarden.net/Fill_Patterns and linked it the main MetaFun
wiki page - https://wiki.contextgarden.net/MetaFun_-_MetaPost_in_ConTeXt
Thanks again!
best regards,
Ramkumar
On Sat, Aug 28, 2021 at 7:02 PM Hans Hagen
On 8/28/2021 11:33 AM, Ramkumar KB via ntg-context wrote:
Hello List,
I have a use case to apply a particular pattern to a closed shape. I am using Metapost for the figures.
After some research this package seems to quite good, in terms of having all the patterns normally used - https://ctan.org/pkg/minim-hatching https://ctan.org/pkg/minim-hatching
But I could not figure out how to use this with ConTeXt. Or maybe there is already a better way to do this in ConTeXt and am missing that trick.
Any tips would be really helpful. \starttext
\startMPpage[offset=1cm] draw (fullcircle scaled 5cm shifted (0cm,0cm)) withpattern image (fill fullcircle scaled 1cm withcolor "darkblue" ;) withpatternscale (1/10,1/10) ;
draw (fullcircle scaled 5cm shifted (5cm,0cm)) withpattern image (fill fullcircle scaled 5mm withcolor "darkred" ;) withpatternscale (1/20,1/20) ;
draw (fullcircle scaled 5cm shifted (10cm,0cm)) withpattern image (fill fullcircle scaled 5mm withcolor "darkgreen" ;) withpatternscale (1/40,1/40) ;
draw (fullcircle scaled 5cm shifted (0cm,5cm)) withpattern image (fill fullcircle scaled 1cm withcolor "darkcyan" ;) withpatternscale (1/10,1/20) ;
draw (fullcircle scaled 5cm shifted (5cm,5cm)) withpattern image (fill fullcircle scaled 5mm withcolor "darkmagenta" ;) withpatternscale (1/20,1/40) ;
draw (fullcircle scaled 5cm shifted (10cm,5cm)) withpattern image (fill fullcircle scaled 5mm withcolor "darkyellow" ;) withpatternscale (1/40,1/80) ; \stopMPpage
\startMPpage[offset=1cm] fill fullcircle scaled 11cm withcolor "darkyellow" ;
draw fullcircle scaled 10cm withpattern image (fill fullcircle scaled 1cm withcolor "darkblue" ;) ;
draw fulldiamond scaled 8cm withpattern image (fill fulldiamond scaled 4mm withcolor "darkgreen" ;) rotated 15 ;
draw fulltriangle scaled 9cm withpattern image (fill fulltriangle scaled 3mm withcolor "white" ;) rotated 45 ;
draw fullcircle scaled 10cm withpattern image (draw textext("!") withcolor "middlegray" ;) rotated 45 ;
draw fullcircle scaled 10cm withpen pencircle scaled 1mm withcolor "darkgray" ; \stopMPpage
\startMPpage[instance=doublefun] fill fullcircle scaled 8cm withcolor "yellow" ; draw fullcircle scaled 8cm withpattern image (draw figure("t:/sources/cow.pdf") rotated 45;) withpatternscale 1/40 ; \stopMPpage
\startMPpage[instance=doublefun] draw closedcurve(unitsquare xyscaled (200,200) shifted (0,-200)) withpattern image (fill closedcurve((fullcircle scaled 40 shifted (25,-25))) withcolor "darkgray" withopacity .5) withpatternscale (1,1) ; draw closedcurve(unitsquare xyscaled (200,200) shifted (0,-200)) withpattern image (fill closedcurve((fullcircle scaled 40 shifted (25,-25))) withcolor "darkred" withopacity .5) withpatternscale (1/2,1/2) ; draw closedcurve(unitsquare xyscaled (200,200) shifted (0,-200)) withpattern image (fill closedcurve((fullcircle scaled 40 shifted (25,-25))) withcolor "darkgreen" withopacity .5) withpatternscale (1/3,1/3) ; draw closedcurve(unitsquare xyscaled (200,200) shifted (0,-200)) withpattern image (fill closedcurve((fullcircle scaled 40 shifted (25,-25))) withcolor "darkblue" withopacity .5) withpatternscale (1/4,1/4) ; \stopMPpage
% \startTEXpage \page \startMPcode{doublefun} draw closedcurve(unitsquare xyscaled (200,200) shifted (0,-400)) withpattern image (fill closedcurve((fullcircle scaled 40 shifted (25,-25)))) withpatternscale 1/8 ; \stopMPcode \blank \startMPcode{doublefun} draw closedcurve(unitsquare xyscaled (200,200) shifted (0,-400)) withpattern image (fill closedcurve((fullcircle scaled 40 shifted (25,-25)))) withpatternfloat true withpatternscale 1/8 ; \stopMPcode \page % \stopTEXpage
\stoptext
----------------------------------------------------------------- Hans Hagen | PRAGMA ADE Ridderstraat 27 | 8061 GH Hasselt | The Netherlands tel: 038 477 53 69 | www.pragma-ade.nl | www.pragma-pod.nl -----------------------------------------------------------------
On 8/29/2021 4:48 AM, Ramkumar KB wrote:
Hans,
Thank you for the snippets. These are super helpful (I am assuming commands like `withpatternscale` are MetaFun extensions and Wow!).
yes, just metafun, already there for a while ... (often examples show up first in the test suite) (if folks have wished for metafun they can let me know ... doing metapost things is a nice distraction and with the mp extensions that we have in luametatex we can do quite a lot) Hans ----------------------------------------------------------------- Hans Hagen | PRAGMA ADE Ridderstraat 27 | 8061 GH Hasselt | The Netherlands tel: 038 477 53 69 | www.pragma-ade.nl | www.pragma-pod.nl -----------------------------------------------------------------
Hans,
Thank you! Yes, it would be great to learn more about MetaFun - if you can
point me to the test suite, then I can document a few good tutorial level
examples in the Wiki (beginner & intermediate). MetaFun's turbo charged
capabilities are awesome!
One idea I am thinking (maybe for a student level project) would be MetaFun
library for Figma https://www.figma.com/ (popular design tool).
best regards,
Ramkumar
On Sun, Aug 29, 2021 at 5:17 PM Hans Hagen
On 8/29/2021 4:48 AM, Ramkumar KB wrote:
Hans,
Thank you for the snippets. These are super helpful (I am assuming commands like `withpatternscale` are MetaFun extensions and Wow!).
yes, just metafun, already there for a while ... (often examples show up first in the test suite)
(if folks have wished for metafun they can let me know ... doing metapost things is a nice distraction and with the mp extensions that we have in luametatex we can do quite a lot)
Hans
----------------------------------------------------------------- Hans Hagen | PRAGMA ADE Ridderstraat 27 | 8061 GH Hasselt | The Netherlands tel: 038 477 53 69 | www.pragma-ade.nl | www.pragma-pod.nl -----------------------------------------------------------------
On 8/30/2021 6:35 AM, Ramkumar KB wrote:
Hans,
Thank you! Yes, it would be great to learn more about MetaFun - if you can point me to the test suite, then I can document a few good tutorial level examples in the Wiki (beginner & intermediate). MetaFun's turbo charged capabilities are awesome!
the test suite is a zip on the website alongside the others (not only metafun) best is to to look at the luametafun manual in the distribution (which is anyway where the tests come from) there is also the metafun manual (that i occasionally update / extend) but the newest things are in the luametafun manual Hans ----------------------------------------------------------------- Hans Hagen | PRAGMA ADE Ridderstraat 27 | 8061 GH Hasselt | The Netherlands tel: 038 477 53 69 | www.pragma-ade.nl | www.pragma-pod.nl -----------------------------------------------------------------
participants (2)
-
Hans Hagen
-
Ramkumar KB