UL_POLYPOUR

Membres de données

hatched entier (0=désactivé, 1=activé)
isoler int (entier)
calque int (entier)
orphans entier (0=désactivé, 1=activé)
pour entier (POLYGON_POUR_...)
rank int (entier)
espacement int (entier)
thermals entier (0=désactivé, 1=activé)
thermalWidth int (entier)
Largeur int (entier)

Membres de boucle

contours() UL_WIRE (voir remarque)
fillings() UL_WIRE (voir remarque)
wires() UL_WIRE

Voir aussi UL_SIGNAL

Remarque

Le membre de boucle contours() parcourt les fils utilisés pour dessiner les contours des données de remplissage du polygone. Le membre de boucle fillings() parcourt les fils de hachures utilisés pour dessiner le remplissage de polygone lorsque son membre de données hatched est défini. Lorsque le membre de données hatched n’est pas défini, le membre de boucle fillings() ne fait rien. Le membre de boucle wires() parcourt toujours les fils de polygone tels qu’ils ont été dessinés par l’utilisateur.

Le résultat du remplissage d’un polygone peut être constitué de plusieurs figures fermées distinctes (appelées contours de polygone positives). Celles-ci peuvent aussi contenir des vides/trous (contours de polygone négatifs) provenant d’autres objets soustraits du contour positif. Les contours négatifs peuvent à nouveau contenir d’autres contours positifs, etc.

Appel de contours() et interprétation de ses résultats

Si le membre de boucle contours() est appelé sans deuxième paramètre, il parcourt tous les fils de contour, qu’ils appartiennent à un contour de polygone positif ou à un contour de polygone négatif. Dans ce cas, les fils parcourus par contours() commencent toujours par un contour de polygone positif. Pour obtenir séparément les fils des contours positifs et négatifs, vous pouvez appeler contours() avec un paramètre entier supplémentaire (voir le deuxième exemple ci-dessous). Le signe de ce paramètre détermine si un contour de polygone positif ou négatif doit être renvoyé et la valeur indique l’index de ce contour de polygone. S’il n’existe pas de contour de polygone avec l’index donné, l’instruction n’est pas exécutée. Avec cette méthode, vous n’avez pas besoin de déterminer vous-même le début et la fin d’un contour de polygone particulier (en comparant les coordonnées). Quel que soit l’index spécifié, l’instruction est exécutée pour tous les fils de ce contour de polygone. Si le deuxième paramètre est défini sur 0, le comportement est le même que si vous ne spécifiez pas de deuxième paramètre.

Les fils d’un contour de polygone sont orientés de bout en bout. Pour déterminer où termine un contour et où commence le suivant, stockez les coordonnées (x1, y1) du premier fil et comparez-les aux coordonnées (x2, y2) de chaque fil suivant. Lorsque ces points sont équivalents, le dernier fil du contour de polygone a été trouvé.

Les contours de polygone positifs (formant les arêtes extérieures) sont orientés dans le sens horaire, tandis que les contours de polygone négatifs (formant les arêtes des trous) sont orientés dans le sens trigonométrique. Pour déterminer « l’intérieur » et « l’extérieur » du remplissage de polygone, imaginez que vous regardez le long de n’importe quel fil de contour depuis son point (x1, y1) vers (x2, y2). « L’intérieur » du remplissage de polygone est toujours sur le côté droit du fil.

Exemple

board(B) {
  B.signals(S) {
    S.polypours(P) {
      int x0, y0, first = 1;
      P.contours(W) {
        if (first) {
           // a new polygon contouris starting
           x0 = W.x1;
           y0 = W.y1;
           }
        // ...
        // do something with the wire
        // ...
        if (first)
           first = 0;
        else if (W.x2 == x0 && W.y2 == y0) {
           // this was the last wire of the polygon contour,
           // so the next wire (if any) will be the first wire
           // of the next polygon contour
           first = 1;
           }
        }
      }
    }
  }
board(B) {
  B.signals(S) {
    S.polypours(P) {
      // process only the "positive" polygon contours:
      int i = 1;
      int active;
      do {
         active = 0;
         P.contours(W, i) {
           active = 1;
           // do something with the wire
           }
         i++;
         } while (active);
      }
    }
  }