UL_POLYPOUR

Datenelemente

hatched Ganzzahl (0=aus, 1=ein)
Isolieren int
Layer int
orphans Ganzzahl (0=aus, 1=ein)
pour Ganzzahl (POLYGON_POUR_...)
rank int
Abstand int
thermals Ganzzahl (0=aus, 1=ein)
thermalWidth int
Breite int

Loop-Members

contours() UL_WIRE (siehe Anmerkung)
fillings() UL_WIRE (siehe Anmerkung)
wires() UL_WIRE

Siehe auch UL_SIGNAL.

Anmerkung

Das contours()-Loop-Member durchläuft die Linien, die zum Zeichnen der Konturen der Fülldaten für den Polygonguss verwendet werden. Das fillings()-Loop-Member durchläuft die Schraffurlinien, die zum Zeichnen des Polygongusses verwendet werden, wenn das schraffierte Datenelement festgelegt ist. Wenn das schraffierte Datenelement nicht festgelegt ist, führt fillings() keine Aktion aus. Das wires()-Loop-Member durchläuft die Polygonlinien immer so, wie sie vom Benutzer gezeichnet wurden.

Die Füllergebnisse eines Polygongusses können aus mehreren unterschiedlichen geschlossenen Formen bestehen (als positive Polygonkonturen bezeichnet), die jeweils Hohlräume/Aussparungen (negative Polygonkonturen) enthalten können. Diese resultieren aus anderen Objekten, die von der positiven Kontur subtrahiert werden. Negative Konturen können wiederum andere positive Konturen enthalten usw.

Aufrufen von contours() und Interpretieren der Ergebnisse

Wenn das contours()-Loop-Member ohne einen zweiten Parameter aufgerufen wird, durchläuft es alle Konturlinien, unabhängig davon, ob sie zu einer positiven Polygonkontur oder zu einer negativen Polygonkonturaussparung gehören. In diesem Fall beginnen die Linien, die mit contours() durchlaufen werden, immer mit einer positiven Polygonkontur. Wenn Sie möchten, dass die positiven und negativen Konturlinien separat abgerufen werden, können Sie contours() mit einem zusätzlichen ganzzahligen Parameter aufrufen (siehe zweites Beispiel unten). Das Vorzeichen dieses Parameters bestimmt, ob eine positive oder negative Polygonkontur zurückgegeben wird, und der Wert gibt den Index der Polygonkontur an. Wenn keine Polygonkontur mit dem angegebenen Index vorhanden ist, wird die Anweisung nicht ausgeführt. Ein Vorteil dieser Methode besteht darin, dass Sie den Anfang und das Ende einer bestimmten Polygonkontur nicht selbst bestimmen müssen (indem Sie Koordinaten vergleichen). Für jeden angegebenen Index wird die Anweisung für alle Linien dieser Polygonkontur ausgeführt. Wenn Sie den zweiten Parameter mit dem Wert 0 übergeben, erhalten Sie dasselbe Verhalten wie ohne einen zweiten Parameter.

Die Linien einer Polygonkontur werden von Ende zu Ende ausgerichtet. Um zu bestimmen, wo eine Kontur endet und die nächste beginnt, speichern Sie einfach die (x1,y1)-Koordinaten der ersten Linie und überprüfen sie anhand (x2,y2) der jeweils folgenden Linie. Wenn diese Punkte identisch sind, wurde die letzte Linie der Polygonkontur gefunden.

Positive Polygonkonturen (die die äußeren Kanten bilden) werden im Uhrzeigersinn ausgerichtet, während negative Polygonkonturen (die die Bohrungskanten bilden) gegen den Uhrzeigersinn ausgerichtet werden. Um die Innenseite und Außenseite des Polygongusses zu bestimmen, stellen Sie sich eine Ansicht entlang einer beliebigen Konturlinie von dessen Punkt (x1,y1) bis (x2,y2) vor. Die Innenseite des Polygongusses befindet sich immer auf der rechten Seite der Linie.

Beispiel

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);
      }
    }
  }