Hi, I did this code to get a regular polygon with metafun, it works but I would like to have an user command like \define or \def to be able to choose the number of sides, n. I don't know how to do that ... \startbuffer[largeurdeslignes] drawoptions (withpen pencircle scaled 2pt); \stopbuffer \startbuffer[polygoneregulier] numeric u ; u:=1*cm ; numeric n ; n:=7 ; pair a[]; a[0]:=(0,3u); path polygone[] ; for i=1 upto n : a[i]:=a[0] rotatedaround(origin,i*360/n) ; polygone[i]:=a[i-1]--a[i]; draw polygone[i]; endfor; \stopbuffer \startbuffer[cercleunite] draw fullcircle scaled 6u withcolor blue; \stopbuffer \define \polyreg {\processMPbuffer[largeurdeslignes,polygoneregulier,cercleunite]} \starttext \polyreg \stoptext Thanks, Roland Thiers
On 2013–05–07 Roland Thiers wrote:
Hi, I did this code to get a regular polygon with metafun, it works but I would like to have an user command like \define or \def to be able to choose the number of sides, n. I don't know how to do that ...
Here's one way to do it: \startuniqueMPgraphic{polygoneregulier}{sides} drawoptions (withpen pencircle scaled 2pt); numeric u ; u:=1*cm ; numeric n ; n:=\MPvar{sides}; pair a[]; a[0]:=(0,3u); path polygone[] ; for i=1 upto n : a[i]:=a[0] rotatedaround(origin,i*360/n) ; polygone[i]:=a[i-1]--a[i]; draw polygone[i]; endfor; draw fullcircle scaled 6u withcolor blue; \stopuniqueMPgraphic %% \polyreg{<number>} \define[1]\polyreg {\setupMPvariables[polygoneregulier][sides=#1]%% \uniqueMPgraphic{polygoneregulier}} \starttext \dontleavehmode \dorecurse{9}{\polyreg\recurselevel\space} \stoptext You can extent this to be able to use key-value syntax or default values if you like. Marco
Le 7 mai 13 à 09:51, Marco Patzer a écrit :
\startuniqueMPgraphic{polygoneregulier}{sides} drawoptions (withpen pencircle scaled 2pt); numeric u ; u:=1*cm ; numeric n ; n:=\MPvar{sides}; pair a[]; a[0]:=(0,3u); path polygone[] ; for i=1 upto n : a[i]:=a[0] rotatedaround(origin,i*360/n) ; polygone[i]:=a[i-1]--a[i]; draw polygone[i]; endfor; draw fullcircle scaled 6u withcolor blue; \stopuniqueMPgraphic
%% \polyreg{<number>} \define[1]\polyreg {\setupMPvariables[polygoneregulier][sides=#1]%% \uniqueMPgraphic{polygoneregulier}}
\starttext \dontleavehmode \dorecurse{9}{\polyreg\recurselevel\space} \stoptext
Thanks a lot Marco ! I have to think carefully on your way : I don't understand all these commands yet. Roland
Am 07.05.2013 um 09:51 schrieb Marco Patzer
On 2013–05–07 Roland Thiers wrote:
Hi, I did this code to get a regular polygon with metafun, it works but I would like to have an user command like \define or \def to be able to choose the number of sides, n. I don't know how to do that ...
Here's one way to do it:
\startuniqueMPgraphic{polygoneregulier}{sides} drawoptions (withpen pencircle scaled 2pt); numeric u ; u:=1*cm ; numeric n ; n:=\MPvar{sides}; pair a[]; a[0]:=(0,3u); path polygone[] ; for i=1 upto n : a[i]:=a[0] rotatedaround(origin,i*360/n) ; polygone[i]:=a[i-1]--a[i]; draw polygone[i]; endfor; draw fullcircle scaled 6u withcolor blue; \stopuniqueMPgraphic
%% \polyreg{<number>} \define[1]\polyreg {\setupMPvariables[polygoneregulier][sides=#1]%% \uniqueMPgraphic{polygoneregulier}}
\define[1]\polyreg {\uniqueMPgraphic{polygoneregulier}{sides=#1}} Wolfgang
≥ Le 7 mai 13 à 13:05, Wolfgang Schuster a écrit :
Am 07.05.2013 um 09:51 schrieb Marco Patzer
: On 2013–05–07 Roland Thiers wrote:
Hi, I did this code to get a regular polygon with metafun, it works but I would like to have an user command like \define or \def to be able to choose the number of sides, n. I don't know how to do that ...
Here's one way to do it:
\startuniqueMPgraphic{polygoneregulier}{sides} drawoptions (withpen pencircle scaled 2pt); numeric u ; u:=1*cm ; numeric n ; n:=\MPvar{sides}; pair a[]; a[0]:=(0,3u); path polygone[] ; for i=1 upto n : a[i]:=a[0] rotatedaround(origin,i*360/n) ; polygone[i]:=a[i-1]--a[i]; draw polygone[i]; endfor; draw fullcircle scaled 6u withcolor blue; \stopuniqueMPgraphic
%% \polyreg{<number>} \define[1]\polyreg {\setupMPvariables[polygoneregulier][sides=#1]%% \uniqueMPgraphic{polygoneregulier}}
\define[1]\polyreg {\uniqueMPgraphic{polygoneregulier}{sides=#1}}
Wolfgang
Thank you very much for this precision, Wolfgang. I tried with two variables and it works with this syntax : \startuniqueMPgraphic{polygoneregulier} numeric u ; u:=\MPvar{unite}*cm ; numeric n ; n:=\MPvar{sides}; rest of the code \stopuniqueMPgraphic \define[2]\polyreg {\setupMPvariables[polygoneregulier][unite,sides] \uniqueMPgraphic{polygoneregulier}{sides=#1,unite=#2}} \starttext %\uniqueMPgraphic{polygoneregulier}{unite=2,sides=4} \polyreg{6}{0.5} \stoptext I did not find any détails on \MPvar et \setupMPvariables on the wiki, however Roland
___________________________________________________________________________________ If your question is of interest to others as well, please add an entry to the Wiki!
maillist : ntg-context@ntg.nl / http://www.ntg.nl/mailman/listinfo/ntg-context
webpage : http://www.pragma-ade.nl / http://tex.aanhet.net archive : http://foundry.supelec.fr/projects/contextrev/ wiki : http://contextgarden.net ___________________________________________________________________________________
Am 07.05.2013 um 22:28 schrieb Roland Thiers
Thank you very much for this precision, Wolfgang. I tried with two variables and it works with this syntax :
\startuniqueMPgraphic{polygoneregulier} numeric u ; u:=\MPvar{unite}*cm ; numeric n ; n:=\MPvar{sides}; rest of the code \stopuniqueMPgraphic
\define[2]\polyreg {\setupMPvariables[polygoneregulier][unite,sides] \uniqueMPgraphic{polygoneregulier}{sides=#1,unite=#2}}
You can define the command as \define[2]\polyreg {\setupMPvariables[polygoneregular][sides=#1,unite=#2]% \uniqueMPgraphic{polygoneregular}} where the variables are set with the \settupMPvariables command or as \define[2]\polyreg {\uniqueMPgraphic{polygoneregular}{sides=#1,unite=#2}} where the variables are set in the optional argument for \uniqueMPgraphic.
\starttext %\uniqueMPgraphic{polygoneregulier}{unite=2,sides=4} \polyreg{6}{0.5} \stoptext
I did not find any détails on \MPvar et \setupMPvariables on the wiki, however
Both commands are mentioned in the metafun [1] manual. [1] http://www.pragma-ade.nl/show-man-7.htm Wolfgang
Le 8 mai 13 à 06:56, Wolfgang Schuster a écrit :
Am 07.05.2013 um 22:28 schrieb Roland Thiers
: Thank you very much for this precision, Wolfgang. I tried with two variables and it works with this syntax :
\startuniqueMPgraphic{polygoneregulier} numeric u ; u:=\MPvar{unite}*cm ; numeric n ; n:=\MPvar{sides}; rest of the code \stopuniqueMPgraphic
\define[2]\polyreg {\setupMPvariables[polygoneregulier][unite,sides] \uniqueMPgraphic{polygoneregulier}{sides=#1,unite=#2}}
You can define the command as
\define[2]\polyreg {\setupMPvariables[polygoneregular][sides=#1,unite=#2]% \uniqueMPgraphic{polygoneregular}}
where the variables are set with the \settupMPvariables command or as
\define[2]\polyreg {\uniqueMPgraphic{polygoneregular}{sides=#1,unite=#2}}
where the variables are set in the optional argument for \uniqueMPgraphic.
\starttext %\uniqueMPgraphic{polygoneregulier}{unite=2,sides=4} \polyreg{6}{0.5} \stoptext
I did not find any détails on \MPvar et \setupMPvariables on the wiki, however
Both commands are mentioned in the metafun [1] manual.
[1] http://www.pragma-ade.nl/show-man-7.htm
Wolfgang
Thank you Wolfgang for the correction of the syntax. I bought the Metafun manual and began to work with it. Great ! Roland
___________________________________________________________________________________ If your question is of interest to others as well, please add an entry to the Wiki!
maillist : ntg-context@ntg.nl / http://www.ntg.nl/mailman/listinfo/ntg-context webpage : http://www.pragma-ade.nl / http://tex.aanhet.net archive : http://foundry.supelec.fr/projects/contextrev/ wiki : http://contextgarden.net ___________________________________________________________________________________
participants (3)
-
Marco Patzer
-
Roland Thiers
-
Wolfgang Schuster