Dessins prédéfinis dans MetaPost

Les dessins prédéfinis du langage MetaPost sont peu nombreux et ne permettent que de dessiner des rectangles, des cercles et des partie de cercles.

Le rectangle : unitsquare

unitsquare est un raccourci pour le chemin :

(0,0) -- (1,0) -- (1,1) -- (0,1) -- cycle

Il dessine donc un carré de une unité de côté. Je te rappelle que l'unité par défaut de MetaPost est le point PostScript et vaut 0,352 mm, ce qui est très très petit. Donc pour l'utiliser tu dois le mettre à l'échelle :

\starttext
\startMPcode
draw unitsquare scaled 3cm;
fill unitsquare scaled 3cm shifted (4cm,0);
\stopMPcode
\stoptext

Pour avoir un rectangle il faut avoir une échelle des longueurs différente de celle des hauteurs :

\starttext
\startMPcode
draw unitsquare xscaled 3cm yscaled 1cm ;
fill unitsquare xscaled 3cm yscaled 1cm shifted (4cm,0);
\stopMPcode
\stoptext

Le cercle : fullcircle

fullcircle dessine un cercle de diamètre 1 unité centré en (0,0).

\starttext
\startMPcode
draw fullcircle scaled 3cm;
fill fullcircle scaled 3cm shifted (4cm,0);
\stopMPcode
\stoptext

Tu dessines des ovales avec une échelle des x différente de celle des y :

\starttext
\startMPcode
draw fullcircle xscaled 3cm yscaled 1cm ;
fill fullcircle xscaled 3cm yscaled 1cm shifted (4cm,0);
\stopMPcode
\stoptext

Le demi-cercle : halfcircle

halfcircle dessine la partie supérieur d'un cercle de diamètre 1 unité centré en (0,0).

\starttext
\startMPcode
draw halfcircle scaled 3cm;
\stopMPcode
\stoptext

tu ne peux pas utiliser fill car le dessin n'est pas fermé.

Le quart-cercle : quartercircle

quartercircle dessine le premier quart d'un cercle de diamètre 1 unité centré en (0,0).

\starttext
\startMPcode
draw quartercircle scaled 3cm;
\stopMPcode
\stoptext

tu ne peux pas utiliser fill car le dessin n'est pas fermé.

Tu peux modifier unitsquare à l'aide de superellipsed qui prend comme facteur un nombre compris entre 0 et 1.

\starttext
\startMPcode
path p;
p:=unitsquare scaled 2cm;
draw p;
draw p superellipsed .9 shifted (2.5cm,0);
draw p superellipsed .8 shifted (5cm,0);
draw p superellipsed .7 shifted (7.5cm,0);
draw p superellipsed .6 shifted (10cm,0);
draw p superellipsed .5 shifted (0,-2.5cm);
draw p superellipsed .3 shifted (2.5cm,-2.5cm);
draw p superellipsed .2 shifted (5cm,-2.5cm);
draw p superellipsed .1 shifted (7.5cm,-2.5cm);
draw p superellipsed .05 shifted (10cm,-2.5cm);
\stopMPcode
\stoptext

Si tu remplaces unitsquare par unitcircle tu obtiens les mêmes figures.