hatched | int(0=꺼짐, 1=켜짐) |
isolate | int |
layer | int |
orphans | int(0=꺼짐, 1=켜짐) |
pour | int(POLYGON_POUR_...) |
rank | int |
spacing | int |
thermals | int(0=꺼짐, 1=켜짐) |
thermalWidth | int |
width | int |
contours() | UL_WIRE(주 참고) |
fillings() | UL_WIRE(주 참고) |
wires() | UL_WIRE |
contours() 루프 멤버는 폴리곤 주입구 채우기 데이터의 외곽선을 그리는 데 사용되는 와이어를 반복합니다. fillings() 루프 멤버는 해치된 데이터 멤버가 설정될 때 폴리곤 주입구를 그리는 데 사용되는 해치 와이어를 반복합니다. 해치된 데이터 멤버가 설정되지 않은 경우 *fillings()*는 아무 작업도 수행하지 않습니다. wires() 루프 멤버는 사용자가 폴리곤 와이어를 그릴 때 항상 해당 와이어를 반복합니다.
폴리곤 주입구 채우기 결과는 여러 개의 개별 닫힌 그림(양의 폴리곤 윤곽선이라고 함)으로 구성될 수 있으며, 각 그림에는 양의 윤곽선에서 다른 객체를 빼고 남은 보이드/구멍(음의 폴리곤 윤곽선)이 포함될 수 있습니다. 음의 윤곽선은 다른 양의 윤곽선 등을 포함할 수 있습니다.
두 번째 매개변수 없이 contours() 루프 멤버를 호출하는 경우, 윤곽선 와이어가 양의 폴리곤 윤곽선 외곽선에 속하는지 또는 음의 폴리곤 윤곽선 구멍에 속하는지 여부에 관계없이 모든 윤곽선 와이어를 반복합니다. 이 경우 *contours()*에서 반복하는 와이어는 항상 양의 폴리곤 윤곽선으로 시작합니다. 양의 윤곽선 와이어와 음의 윤곽선 와이어를 별도로 가져오려는 경우 추가 정수 매개변수를 사용하여 *contours()*를 호출할 수 있습니다(아래 두 번째 예 참조). 이 매개변수의 부호는 양의 또는 음의 폴리곤 윤곽선을 반환할지 여부를 결정하며 값은 해당 폴리곤 윤곽선의 색인을 나타냅니다. 지정된 색인의 폴리곤 윤곽선이 없는 경우 문이 실행되지 않습니다. 이 방법의 장점은 좌표를 비교하여 특정 폴리곤 윤곽선의 시작과 끝을 직접 결정할 필요가 없다는 것입니다. 지정된 색인에서 해당 폴리곤 윤곽선의 모든 와이어에 대해 해당 문이 실행됩니다. 두 번째 매개변수를 0으로 지정하면 두 번째 매개변수가 없는 경우와 동일한 동작이 생성됩니다.
폴리곤 윤곽선의 와이어는 끝과 끝을 향합니다. 하나의 윤곽선이 끝나고 다음 윤곽선이 시작되는 위치를 결정하려면 첫 번째 와이어의 (x1, y1) 좌표를 저장하고 다음 각 와이어의 (x2, y2)에 대해 확인합니다. 이러한 점이 동일하면 폴리곤 윤곽선의 마지막 와이어가 확인되었습니다.
양의 폴리곤 윤곽선(외부 모서리 형성)은 시계 방향으로 진행되지만, 음의 폴리곤 윤곽선(구멍 모서리 형성)은 시계 반대 방향으로 진행됩니다. 폴리곤 주입구의 "내부"와 "외부"를 결정하려면 점(x1, y1)에서 점(x2, y2)까지 모든 윤곽선 와이어를 따라 시야를 이동하는 것을 상상해 보십시오. 폴리곤 주입구의 "내부"는 항상 와이어의 오른쪽에 있습니다.
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);
}
}
}