| sombreado | int (0=desactivado, 1=activado) |
| aislar | entero |
| capa | entero |
| huérfanos | int (0=desactivado, 1=activado) |
| vertido | int (POLYGON_POUR_...) |
| clasificación | entero |
| espaciado | entero |
| térmicos | int (0=desactivado, 1=activado) |
| ancho de los térmicos | entero |
| grosor | entero |
| contours() | UL_WIRE (consulte la nota) |
| fillings() | UL_WIRE (consulte la nota) |
| wires() | UL_WIRE |
Consulte también UL_SIGNAL
El miembro de bucle contours() recorre los conductores que se utilizan para dibujar los contornos de los datos de relleno para el vertido del polígono. El miembro de bucle fillings() recorre los conductores de sombreado que se utilizan para dibujar el vertido de polígono cuando se define su miembro de datos para el sombreado. Cuando no se ha definido el miembro de datos de sombreado, fillings() no hace nada. El miembro de bucle wires() siempre recorre los conductores del polígono a medida que los va dibujando el usuario.
Los resultados de relleno de un polígono pueden constar de varias figuras cerradas distintas (denominadas contornos de polígono positivos), cada una de las cuales puede contener huecos/agujeros (contornos de polígono negativos) resultantes de la sustracción de otros objetos del contorno positivo. Los contornos negativos pueden contener de nuevo otros contornos positivos, etc.
Si se inicia el miembro de bucle contours() sin un segundo parámetro, recorre todos los conductores del contorno, independientemente de si pertenecen a la línea de un contorno de polígono positivo o al contorno de un agujero de polígono negativo. En este caso, los conductores que se desplazan por contours() siempre comienzan con un contorno de polígono positivo. Si desea obtener los conductores de curva de nivel positivos y negativos por separado, puede iniciar contours() con el parámetro adicional de un número entero (consulte el segundo ejemplo siguiente). El signo de ese parámetro determina si se devolverá un contorno de polígono positivo o negativo y el valor indica el índice del contorno de ese polígono. Si no hay ningún contorno de polígono con el índice indicado, la sentencia no se ejecutará. Una ventaja de este método es que no es necesario determinar el inicio y el final de un contorno de polígono determinado (comparando las coordenadas). Con cualquier índice , la sentencia se ejecutará para todos los conductores de ese contorno de polígono. Si se pasa el segundo parámetro como 0, hará lo mismo que si no se hubiera aplicado un segundo parámetro.
Los conductores de un contorno de polígono se dirigen de extremo a extremo. Para determinar dónde termina un contorno y comienza el siguiente, solo tiene que almacenar las coordenadas (x1,y1) del primer conductor y comprobarlas con (x2,y2) de cada conductor que le sigue. Si estos puntos son equivalentes, habrá encontrado el último conductor del contorno del polígono.
Los contornos de polígono positivos (que forman aristas exteriores) se orientan en sentido horario, mientras que los contornos de polígono negativos (que forman aristas de agujero) se orientan en sentido antihorario. Para determinar "interior" y "exterior" del vertido de polígono, imagine la mira a lo largo de cualquier conductor de contorno desde su punto (x1,y1) hasta (x2,y2). El "interior" del vertido de polígono siempre está en el lado derecho del conductor.
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);
}
}
}