Mode d'emploi et manuel de référence

Previous Up Next

3.5  La classe path

Une structure de données path est une liste de bas niveau d'ePiX, liste ordonnée de points qui peut être rognée, cadrée, projetée, concaténée et dessinée. Les données de chemin brut sont utiles pour les chemins complexes batis par morceaux. Les constructeurs disponibles sont :

  path(p1, p2);          // droite (extrémités)
  path(p1, p2, p3);      // spline quadratique
  path(p1, p2, p3, p4);  // spline cubique
  path(p1, v1, v2, t_min, t_max); // cf. ellipse arc
  path(f, t_min, t_max); // graphe ou chemin paramétré

  polyline(n, &p1, ...); // n points, suivis par des pointeurs
  polygon(n, &p1, ...);  // idem, mais marqué comme fermé

Le premier argument du constructeur de chemin paramétré est une fonction d'une variable à valeur réelle ou vectorielle. Dans chacun des cinq premiers constructeurs, on peut fournir un argument final facultatif pour spécifier le nombre de points utilisés.

Les constructeurs polyline() et polygon() acceptent un nombre indéterminé d'arguments ; en conséquence leurs arguments doivent être passés en tant que « pointeurs» ou adresses en mémoire :

  polyline(2, P(0,0), P(1,1));// mauvais : des objets pour arguments
  P p1 = P(0,0), p2=P(1,1);
  polyline(2, &p1, &p2); // correct : des pointeurs pour arguments

Cela rend les polylines et les polygones incommodes pour réaliser une figure vite fait mais n'inflige qu'une peine légère si les sommets sont définis ailleurs comme ils devraient l'être dans un fichier logiquement structuré.

On peut construire un chemin point par point avec la fonction pt() qui accepte trois (ou deux) doubles ou un P.

  path bord.pt(0,0).pt(2,0).pt(0,3); // polyline
  path octa.close(); // declare un nouveau polygone
  for (int i=0; i<8; ++i) octa.pt(polar(2, 45*i)); // on suppose degrees()

On peut construire des chemins composites par concaténation. Si path1 et path2 sont des chemins alors les commandes

  path1 += path2;
  path1 -= path2;

remplace path1 avec le chemin obtenu en traversant path1 « vers l'avant» puis en suivant path2 vers l'avant ou en remontant (respectivement). La notation est sensée faire penser à des chaines d'homologies de dimension 1. Le fichier d'exemple contour.xp illustre la création et la manipulation de chemin. Enfin, on notera que path est une structure de données et non une commande de dessin. On doit appeler explicitement la fonction path::draw() pour créer une sortie visible.

Objets semblables aux chemins

Les objets semblables aux chemins comprennent les polygones à un nombre fixé de sommets – (segments) de droites, triangles, quadrilatères – et des objets construits à partir d'eux – ce qui comprend les axes de coordonnées, les quadrillages et les flèches – ; les courbes à un nombre variable de points – ellipses, arcs, splines – ; les graphes de fonctions d'une variable.

Les polygones à une nombre fixé de sommets sont dessinés avec des commandes de haut-niveau.

  line(p1, p2);
  triangle(p1, p2, p3);
  quad(p1, p2, p3, p4);
  rect(p1, p2);          // rectangle de coordonnées
  spline(p1, p2, p3);    // spline quadratique avec pts de controle
  spline(p1, p2, p3, p4);// spline cubique

La commande line() accepte un argument numérique facultatif interprété comme paramètre d'expansion : line(p1,p2,t); trace un segment dont le milieu est celui du segment d'extrémités p1 et p2 mais dont la longueur est 2t/100 fois celle du segment [p1,p2] – avec t=100 on double la longueur et avec t=−100 on la réduit de moitié. Les arguments de rect() doivent être des points d'un plan parallèle à l'un des plans de coordonnées.

En interne, ePiX marque les chemins comme fermés ou non ; les triangles, les quadrilatères, les polygones, les ellipses et les flèches sont fermés. Si un chemin fermé et plein est tracé alors que le remplissage est activé, le chemin est rempli avec la teinte courante de gris. Si le remplissage est désactivé le chemin est tracé mais non rempli. On ne peut pas remplir des chemins pointillés ou tiretés en une seule man½uvre : il faut d'abord remplir le chemin plein puis tracer la frontière pointillée ou tiretée.

La teinte de gris est un nombre compris entre 0 (blanc) et 1 (noir) et vaut par défaut 0,3. Le grisé est opaque avec PSTricks aussi l'ordre d'apparition dans le fichier source des éléments de la figure est-il significatif lorsque le remplissage est activé.

Le remplissage coloré n'est disponible que via PSTricks. Les fonctions de PSTricks relativement bien gérées par ePiX sont illustrées dans le fichier d'exemple contour.xp. En principe, on peut obtenir n'importe quelle capacité de PSTricks avec une sortie brute. Toutefois cette approche est, en général, déconseillée puisque, p. ex. les déclarations de couleurs de PSTricks ne sont par reconnues par eepic et vice-versa. La Prochaine Génération d'ePiX travaillera plus harmonieusement avec PSTricks.

Les arcs elliptiques sont définis par leur centre, une paire de vecteurs, une étendue angulaire et un nombre facultatif de points :

  ellipse(ctr, v1, v2, t_min, t_max, n);

utilise n+1 points pour tracer la courbe paramétrée

t↦ ctr+(cost)v1 + (sint)v2,      tmin⩽ t⩽ tmax

Le nombre de points vaut, par défaut, 80 pour un tour complet et proportionnellement moins pour un arc. Lorsque l'étendue angulaire sous-tend au moins un tour complet, l'ellipse est marquée comme fermée et sera rempli si le remplissage est activé.

L'arc du cercle parallèle au plan (x,y), de centre p1 et de rayon r, sous-tendant l'angle (dans le sens direct5 dans l'unité d'angle courante) de θ1 à θ2 est tracé avec

  arc(p1, r, theta1, theta2);
  arc_arrow(p1, r, theta1, theta2); // idem, avec pointe de flèche

Si θ2 est plus petit que θ1, l'arc va dans le sens indirect. La pointe de flèche est en θ2. Si un arc_arrow est trop petit, il n'est pas tracé.


5
Note du TdS : Sens direct c.-à-d. le sens contraire des aiguilles d'une montre.

Previous Up Next