[NTG-context] Re: multipage metapost output from ConTeXt

2023-11-27 Thread Aditya Mahajan
On Mon, 27 Nov 2023, Fabrice L wrote:

> Hi,
> 
> It is fun fact very easy to do. You just use \startMPpage (…) \stopMPpage 
> multiple times. Here is an example which build an animation of a particle 
> moving according to a Brownian motion. 

A very similar option is to pass a variable to a metapost drawing. This is what 
I use:

https://adityam.github.io/context-blog/post/metapost-animation/

It only works when viewed in acrobat, you can just comment out the animation 
part and wrap it in \startTEXpage .. \stopTEXpage to get multi-page animation.

Aditya___
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
___


[NTG-context] Re: multipage metapost output from ConTeXt

2023-11-27 Thread Fabrice L
Hi,

It is fun fact very easy to do. You just use \startMPpage (…) \stopMPpage 
multiple times. Here is an example which build an animation of a particle 
moving according to a Brownian motion. 

Fabrice.

% 8< ---

\usecolors[crayola]
\setupMPinstance

\starttext

% We can put in the inclusions the material we will use at each page, to 
declare things only one time.
\startMPinclusions
 % the frame of the video ;
 path TheFrame ;
 TheFrame := fullsquare scaled 5in ;

 randomseed := 53 ;
 path TheBrownianMotion ;
 pair Coordinate[];
 Coordinate[0] := (0,0);
 TheBrownianMotion := Coordinate[0] ;
 variance := 10 ;
\stopMPinclusions

\dorecurse{600}{ % Frame

\setupMPpage[background=color, backgroundcolor=SpringGreen]
\startMPpage[pagestate=start]

 currentime := #1 ;
 % Just for learning :
 draw TheFrame withpen pencircle scaled .1in withcolor magenta ;
 draw textext("T="(currentime)) scaled 2 shifted(0,2in) withcolor 
magenta ;

Coordinate[currentime] := Coordinate[currentime-1] + 
%(normaldeviate*variance,normaldeviate*variance) ;
  ((uniformdeviate(1)-0.5)*variance,(uniformdeviate(1)-0.5)*variance) ;
TheBrownianMotion := for p=0 upto (currentime-1) :
  Coordinate[p] .. endfor Coordinate[currentime] ;

draw TheBrownianMotion withpen pencircle scaled .01in withcolor blue ;
draw Coordinate[currentime] withpen pencircle scaled .10in withcolor red ;

setbounds currentpicture to TheFrame ;

desiredformat := 1080;% In pixels (will be converted by default at 72dpi)
currentpicture := currentpicture xysized (desiredformat ,desiredformat );

\stopMPpage

} 

\stoptext
% 8< ---



> Le 27 nov. 2023 à 13:49, Emanuel Han via ntg-context  a 
> écrit :
> 
> How can I achieve multipage metapost output from ConTeXt? The result should 
> be a multipage pdf. It contains just a metapost graphic per page. The graphic 
> has always the same bounding box and evolves from page to page: Some elements 
> to be drawn are added, and some others would ideally also be removed, while 
> keeping elements which has already been drawn on previous pages. I can manage 
> when it is not possible to remove elements (in that case I'll just cover them 
> with a covering element).
> 
> I saw that it is possible to achieve my goal with standalone metapost, as 
> described here: 
> https://tex.stackexchange.com/questions/471662/mptopdf-is-multipage-output-pdf-possible
> But I'll need to achieve this with Metapost inside ConTeXt because I use 
> labels in Metapost which print text in Japanese, Korean , Arabic and Roman 
> script: Thanks to ConTeXt, I can define appropriate fonts for each script. 
> All this works already in my working example.
> 
> The only unsolved problem is to ship out multiple pages.
> 
> For the minimal working example, I didn't remove the font defining part, 
> because having 4 different fonts is a condition of my use case. The graphic 
> on the other hand is some simple dummy nonsense graphic not from my project. 
> The graphic is in the provided example drawn as a summing up of layered 
> drawing steps (6 steps, to be precise), so no removing is implemented here 
> (because I don't know how that would be done). If each of the figures 1 to 6 
> of my mwe can be put alone on a page, I'd be already very happy. Now, they're 
> put on top of each other all on the same single page, also on top of figure 0.
> 
> The desired multipage pdf will be used in presentation mode of a pdf viewer 
> and skipped forward and backward from page to page (that is from drawing step 
> to drawing step).
> 
> mwe:
> 
> \enableregime[utf] % enable unicoded input
> 
> \definefontfamily [RomanFont] [rm] [calluna]
> 
> \definefontfamily [KoreanFont] [rm] [applemyungjo]
> 
> \definefontfamily [JapaneseFont] [rm] [hannotatesc]
> 
> \definefontfeature
>  [fea]
>  [mode=node,language=dflt,script=arab,
>   init=yes,
>   medi=yes,
>   fina=yes,
>   isol=yes,
>   calt=yes,
>   rlig=yes,
>   tlig=yes,
>   trep=yes,
>   curs=yes,
>   kern=yes,
>   mark=yes
> ]
> 
> \starttypescript [serif] [notonaskharabic]
>  \definefontsynonym [notonaskharabic-Light]   [name:notonaskharabic]  
>   [features=fea]
>  \definefontsynonym [notonaskharabic-Bold][name:notonaskharabic]  
>   [features=fea]
>  \definefontsynonym [notonaskharabic-Italic]  [name:notonaskharabic]  
>   [features=fea]
>  \definefontsynonym [notonaskharabic-Bold-Italic] [name:notonaskharabic]  
>   [features=fea]
> \stoptypescript
> 
> \starttypescript [serif] [notonaskharabic]
>  \usetypescript[serif][fallback]
>  \definefontsynonym [Serif]   [notonaskharabic-Light] 
>   [features=fea]
>  \definefontsynonym [SerifItalic] [notonaskharabic-Italic]
>   [features=fea]
>  \definefontsynonym [SerifBold]   [notonaskharabic-Bold]  
>   [features=fea]
>  \definefontsynonym [SerifBoldItalic] 
> [notonaskharabic-Bold-Italic] 

[NTG-context] multipage metapost output from ConTeXt

2023-11-27 Thread Emanuel Han via ntg-context
How can I achieve multipage metapost output from ConTeXt? The result should be 
a multipage pdf. It contains just a metapost graphic per page. The graphic has 
always the same bounding box and evolves from page to page: Some elements to be 
drawn are added, and some others would ideally also be removed, while keeping 
elements which has already been drawn on previous pages. I can manage when it 
is not possible to remove elements (in that case I'll just cover them with a 
covering element).

I saw that it is possible to achieve my goal with standalone metapost, as 
described here: 
https://tex.stackexchange.com/questions/471662/mptopdf-is-multipage-output-pdf-possible
But I'll need to achieve this with Metapost inside ConTeXt because I use labels 
in Metapost which print text in Japanese, Korean , Arabic and Roman script: 
Thanks to ConTeXt, I can define appropriate fonts for each script. All this 
works already in my working example.
The only unsolved problem is to ship out multiple pages.
For the minimal working example, I didn't remove the font defining part, 
because having 4 different fonts is a condition of my use case. The graphic on 
the other hand is some simple dummy nonsense graphic not from my project. The 
graphic is in the provided example drawn as a summing up of layered drawing 
steps (6 steps, to be precise), so no removing is implemented here (because I 
don't know how that would be done). If each of the figures 1 to 6 of my mwe can 
be put alone on a page, I'd be already very happy. Now, they're put on top of 
each other all on the same single page, also on top of figure 0.
The desired multipage pdf will be used in presentation mode of a pdf viewer and 
skipped forward and backward from page to page (that is from drawing step to 
drawing step).
mwe:
\enableregime[utf] % enable unicoded input
\definefontfamily [RomanFont] [rm] [calluna]
\definefontfamily [KoreanFont] [rm] [applemyungjo]
\definefontfamily [JapaneseFont] [rm] [hannotatesc]
\definefontfeature
[fea]
[mode=node,language=dflt,script=arab,
init=yes,
medi=yes,
fina=yes,
isol=yes,
calt=yes,
rlig=yes,
tlig=yes,
trep=yes,
curs=yes,
kern=yes,
mark=yes
]

\starttypescript [serif] [notonaskharabic]
\definefontsynonym [notonaskharabic-Light] [name:notonaskharabic] [features=fea]
\definefontsynonym [notonaskharabic-Bold] [name:notonaskharabic] [features=fea]
\definefontsynonym [notonaskharabic-Italic] [name:notonaskharabic] 
[features=fea]
\definefontsynonym [notonaskharabic-Bold-Italic] [name:notonaskharabic] 
[features=fea]
\stoptypescript

\starttypescript [serif] [notonaskharabic]
\usetypescript[serif][fallback]
\definefontsynonym [Serif] [notonaskharabic-Light] [features=fea]
\definefontsynonym [SerifItalic] [notonaskharabic-Italic] [features=fea]
\definefontsynonym [SerifBold] [notonaskharabic-Bold] [features=fea]
\definefontsynonym [SerifBoldItalic] [notonaskharabic-Bold-Italic] 
[features=fea]
\stoptypescript

\starttypescript [notonaskharabic]
\definetypeface [notonaskharabic] [rm] [serif] [notonaskharabic] [default]
\stoptypescript

\usetypescript[notonaskharabic]
\setupbodyfont [RomanFont]

\starttext
\startMPcode
picture p[];
path bb; %bounding box

z0 = (0,0);
z1 = (60,40);
z2 = (40,90);
z3 = (10,70);
z4 = (30,50);
z5 = (90,70);
z6 = (-10,70);

path A; A = z0..z1..z2..z3..z4 ;
pair AStartPoint; AStartPoint = point 0 of A;
pair AEndPoint; AEndPoint = point 4 of A;
path B; B = z5..z6;
pair BStartPoint; BStartPoint = point 0 of B;
pair BEndPoint; BEndPoint = point 1 of B;
path C; C = AStartPoint..AEndPoint;

% drawing steps:
p1:=image(
draw A withcolor red;
);

p2:=image(
label(textext("\JapaneseFont 日本語"), AEndPoint);
);

p3:=image(
label(textext("\notonaskharabic \textdir TRT دانگ") scaled 1.2, AStartPoint);
);

p4:=image(
label(textext("\KoreanFont 한국어"), BStartPoint);
);

p5:=image(
label(textext("\RomanFont bāng"), BEndPoint);
draw C withcolor green;
);

p6:=image(
draw B withcolor blue;
);

beginfig(0); %% the whole picture for the common bbox
for k=1 upto 6: draw p[k]; endfor
bb:=bbox(currentpicture);
endfig;

for $=1 upto 6:
beginfig($);
for k=1 upto $: draw p[k]; endfor
setbounds currentpicture to bb;
endfig;
endfor

\stopMPcode
\stoptext

___
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
___