Dear Bruce, dear list,
> Le 19 juill. 2022 à 07:42, Bruce Horrocks a écrit :
>
>> On 19 Jul 2022, at 04:28, Fabrice L via ntg-context
>> wrote:
>>
>> Complementary question : I saw that the « pos_a » « pos_b » of the example
>> could not take numerical value, for example pos_1, pos_2.. How can I use
>> metafun to write a macro to save the contents of hundreds of variable in
>> this object, something like :
>>
>> getparameters "MyData » [
>> for i=1 upto 100 :
>> pos_decimal(i) = ThePosition[i],
>> endfor ;
>> ] ;
>>
>> If this is possible, then this is wonderful and open news doors !
>
> I've adapted this example from the metafun-p manual by adding some "write"
> statements.
I have read the manuals, but not enough it seems ! I missed this part ! I
completely miss the «write to » and « read from » instructions. Even a research
on the web before posting did not return something interesting. I guess I did
not used the good terms, because now, I find some ressources about these
functions !
>
> \starttext
> \startMPpage
>
> numeric done[][], i, j, n ; n := 0 ;
> forever :
> i := round(uniformdeviate(10)) ;
> j := round(uniformdeviate(10)) ;
> if unknown done[i][j] :
> drawdot
> (i*cm,j*cm)
> withpen pencircle scaled 0.5cm
> withcolor darkred;
> n := n + 1 ;
> done[i][j] := n ;
>
> write "done[" & tostring(i) & "][" & tostring(j) & "] := " &
> tostring(n) & " ;" to "mp_test_file.txt" ;
>
> fi ;
> exitif n = 10 ;
>
> endfor ;
>
> write EOF to "mp_test_file.txt" ;
>
> \stopMPpage
> \stoptext
>
> This results in the expected graphic but also a local file (in the same
> directory as the source) called "mp_test_file.txt" that contains:
>
> done[9][1] := 1 ;
> done[4][3] := 2 ;
> done[5][3] := 3 ;
> done[5][1] := 4 ;
> done[2][9] := 5 ;
> done[8][6] := 6 ;
> done[9][10] := 7 ;
> done[9][7] := 8 ;
> done[10][2] := 9 ;
> done[6][5] := 10 ;
>
> I think, with a bit of judicious use of "write" statements to add some
> ConTeXt / MP setup code, it would be possible to include the output from the
> previous run as MP source of the next run.
>
> Hope this helps, or at least provides some food for thought.
Totally, a lot of food ! Here is my yesterday example with these functions :
\starttext
\startMPpage
pair ThePosition[];
ThePosition[1] := (0,0) ;
ThePosition[2] := (10,10) ;
draw ThePosition[1] -- ThePosition[2] ;
% Save the position into a file "bruce.mp"
for i=1 upto 2:
write "ThePosition[" & tostring(i) & "] := (" &
tostring(xpart(ThePosition[i])) & ","& tostring(ypart(ThePosition[i])) &") ;"
to "bruce.mp" ;
endfor;
write EOF to "bruce.mp" ;
\stopMPpage
% The external file would like like (comment added manually here):
% ThePosition[1] := (0,0) ;
% ThePosition[2] := (10,10) ;
% We modify the value of ThePosition[2]
\startMPpage
ThePosition[2] := (10,0) ;
draw ThePosition[1] -- ThePosition[2] ;
\stopMPpage
% We now read the value of ThePosition[2] from the file
\startMPpage
input "bruce.mp";
% Save the data from the external file
draw ThePosition[1] -- ThePosition[2] ;
\stopMPpage
\stoptext
>
> (Note you need to delete the mp_test_file.txt before re-running else it
> fails.)
So this totally do the trick : once again, magic is happening !
Note that in my installation, I do not need to delete the external file.
>
> —
> Bruce Horrocks
> Hampshire, UK
Thanks a lot !
Fabrice.
>
___
If your question is of interest to others as well, please add an entry to the
Wiki!
maillist : ntg-context@ntg.nl / https://www.ntg.nl/mailman/listinfo/ntg-context
webpage : https://www.pragma-ade.nl / http://context.aanhet.net
archive : https://bitbucket.org/phg/context-mirror/commits/
wiki : https://contextgarden.net
___