Metapost : le stylo (pen)

Le stylo prédéfini dans Metapost s'appelle pencircle, il s'agit d'un cercle de 1 bp de rayon (1 point postscript soit 0,352 mm). Comme tous les path tu peux lui appliquer les transformations vu dans la page « Transformer les objets ». Notamment tu peux en changer l'échelle, d'ailleurs le stylo par défaut de Metapost s'appelle currentpen et vaut pencircle scaled 0.5 soit la moitié de pencircle.

Il existe également un stylo appelé pensquare qui est un carré de 1bp de côté.

On change de stylo avec withpen donc pour utiliser pencircle il faut ajouter withpen pencircle

La première transformation est la mise à l'échelle : par exemple pour avoir un trait de 1mm d'épaisseur withpen pencircle scaled 1mm

Le code suivant produit un trait normal, le second avec pencircle et le dernier avec un trait de 1mm.

\starttext
\startMPcode
path p;
p:=(0,0) .. (3cm,2cm) -- (3cm,4cm) -- (0,4cm)..cycle;
draw p;
draw p withpen pencircle shifted (5cm,0);
draw p withpen pencircle scaled 1mm shifted (10cm,0);
\stopMPcode
\stoptext

La même chose en utilisant pensquare :

\starttext
\startMPcode
path p;
p:=(0,0) .. (3cm,2cm) -- (3cm,4cm) -- (0,4cm)..cycle;
draw p;
draw p withpen pensquare shifted (5cm,0);
draw p withpen pensquare scaled 1mm shifted (10cm,0);
\stopMPcode
\stoptext

Pour voir la différence entre les deux stylos il faut des traits plus gros : à gauche pencircle et à droite pensquare

On peut appliquer au stylo toutes les transformation que l'on a vue dans la page « Transformer les objets ». En voici quelques exemple

. xscaled et yscaled
\starttext
\startMPcode
path p;
p:=(0,0) .. (3cm,2cm) -- (3cm,4cm) -- (0,4cm)..cycle;
draw p withpen pencircle xscaled 5mm yscaled 1mm;
draw p withpen pencircle xscaled 1mm yscaled 5mm shifted (6cm,0);
\stopMPcode
\stoptext

rotated
\starttext
\startMPcode
path p;
p:=(0,0) .. (3cm,2cm) -- (3cm,4cm) -- (0,4cm)..cycle;
draw p withpen pensquare scaled 5mm rotated 30;
draw p withpen pensquare xscaled 1mm yscaled 5mm rotated 30 shifted (6cm,0);
\stopMPcode
\stoptext

Devoir écrire pour chaque dessin les caractéristiques du stylo est un peu fastidieux. Il existe une macro qui permet d'affecter un stylo à tous les dessins qui suivent, c'est la macro pickup :

\starttext
\startMPcode
path p;
p:=(0,0) .. (3cm,2cm) -- (3cm,4cm) -- (0,4cm)..cycle;
pickup pensquare scaled 5mm rotated 30;
draw p
pickup pensquare xscaled 1mm yscaled 5mm rotated 30
draw p shifted (6cm,0);
\stopMPcode
\stoptext

Créer ses stylos

La commande makepen permet de créer des stylos. Dans l'exemple suivant où l'on reprend notre forme déjà utilisée on va créer un stylo à partir du chemin suivant (0,0) -- (.3cm,.3cm) :

\starttext
\startMPcode
path p;
p:=(0,0) .. (3cm,2cm) -- (3cm,4cm) -- (0,4cm)..cycle;
draw p
draw (0,0)--(.3cm,.3cm);
\stopMPcode
\stoptext

Sur ce dessin sont représenté notre forme et la petite barre qui est la forme de notre future stylo.

\starttext
\startMPcode
path p;
p:=(0,0) .. (3cm,2cm) -- (3cm,4cm) -- (0,4cm)..cycle;
draw p withpen makepen ((0,0)--(.3cm,.3cm));
\stopMPcode
\stoptext

Sur le graphique ci-dessus j'ai ajouté le dessin du stylo en rouge qui n'est pas écrit dans le code.

Si tu veux utiliser plusieurs fois ton nouveau stylo il est possible de le stocker dans une variable grâce à la commande pen.

\starttext
\startMPcode
path p;
p:=(0,0) .. (3cm,2cm) -- (3cm,4cm) -- (0,4cm)..cycle;
pen monstylo ;
monstylo := makepen ((0,0)--(.3cm,.3cm)) ;
pickup monstylo ;
draw p ;
\stopMPcode
\stoptext