UL_POLYPOUR

Membri dati

hatched int (0=off, 1=on)
isola int
layer int
orphans int (0=off, 1=on)
pour int (POLYGON_POUR_...)
rank int
spaziatura int
thermals int (0=off, 1=on)
thermalWidth int
width int

Membri di sequenza chiusa

contours() UL_WIRE (vedere nota)
fillings() UL_WIRE (vedere nota)
wires() UL_WIRE

Vedere anche UL_SIGNAL

Nota

Il membro di sequenza chiusa contours() scorre in sequenza i fili che vengono utilizzati per disegnare i contorni dei dati di riempimento del pour poligono. Il membro di sequenza chiusa fillings() scorre in sequenza i fili utilizzati per disegnare il pour poligono quando è impostato il membro dati hatched. Se il membro dati hatched non è impostato, fillings() non esegue alcuna operazione. Il membro di sequenza chiusa wire() scorre sempre in sequenza i fili del poligono mentre vengono disegnati dall'utente.

I risultati del riempimento di un pour poligono possono essere costituiti da diverse figure chiuse distinte (chiamate contornature poligono positive), ciascuna delle quali può contenere vuoti/fori (contornature poligono negative) risultanti da altri oggetti sottratti dalla contornatura positiva. I contorni negativi possono contenere a loro volta altri contorni positivi e così via.

Chiamata di contours() e interpretazione dei risultati

Se il membro di sequenza chiusa contours() viene chiamato senza un secondo parametro, scorre in sequenza tutti i fili di contornatura, a prescindere che appartengano ad una contornatura poligono positiva o ad un foro di una contornatura poligono negativa. In questo caso, i fili lavorati in sequenza chiusa con contours() iniziano sempre con una contornatura poligono positiva. Se si desidera ottenere separatamente i fili di contornatura positiva e negativa, è possibile chiamare contours() con un parametro intero aggiuntivo (vedere il secondo esempio di seguito). Il segno di tale parametro determina se verrà restituito una contornatura poligono positiva o negativa e il valore indica l'indice di tale contornatura. Se non è presente alcun contorno poligono con l'indice specificato, l'istruzione non verrà eseguita. Il vantaggio di questo metodo è che non è necessario determinare l'inizio e la fine di un particolare contorno poligono (confrontando le coordinate). Per un dato indice, l'istruzione verrà eseguita per tutti i fili di tale contorno poligono. Se si sostituisce il secondo parametro con 0, si otterrà lo stesso comportamento che si ottiene non utilizzando un secondo parametro.

I fili di un contorno poligono sono diretti alle estremità. Per determinare dove termina un contorno e inizia quello successivo, è sufficiente memorizzare le coordinate (x1,y1) del primo filo e confrontarle con (x2,y2) per ogni filo seguente. Quando questi punti sono equivalenti, significa che si è trovato l'ultimo filo del contorno del poligono.

I contorni poligono positivi (che formano i bordi esterni) sono orientati in senso orario, mentre quelli negativi (che formano i bordi dei fori) sono orientati in senso antiorario. Per determinare "l'interno" e "l'esterno" del pour poligono, immaginare di osservare lungo un qualsiasi filo del contorno dal punto (x1,y1) a (x2,y2). La "parte interna" del pour poligono è sempre sul lato destro del filo.

Esempio

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