UL_POLYPOUR

UL_POLYPOUR

Члени даних

вилупилися int (0=вимкнено, 1=увімкнено)
ізолювати внутр
шар внутр
діти-сироти int (0=вимкнено, 1=увімкнено)
наливати int (POLYGON_POUR_…)
ранг внутр
інтервал внутр
терміки int (0=вимкнено, 1=увімкнено)
heatWidth внутр
ширина внутр

Члени циклу

контури() UL_WIRE (див. примітку)
пломби() UL_WIRE (див. примітку)
дроти() UL_WIRE

Дивіться також UL_SIGNAL

Примітка

Член циклу contours() проходить через дроти, які використовуються для малювання контурів даних заливки багатокутника. Елемент циклу fillings() проходить через лінії штрихування, які використовуються для малювання заливки багатокутника, коли встановлено його заштрихований елемент даних. Якщо заштрихований елемент даних не встановлено, fillings() нічого не робить. Елемент циклу wires() завжди проходить через багатокутні дроти так, як їх накреслив користувач.

Результати заливки багатокутника можуть складатися з кількох окремих замкнутих фігур (так звані контури позитивного багатокутника), кожна з яких може містити порожнечі/діри (контури негативного багатокутника), що є результатом віднімання інших об’єктів із позитивного контуру. Негативні контури можуть знову містити інші позитивні контури тощо.

Виклик contour() та інтерпретація його результатів

Якщо елемент циклу contours() викликається без другого параметра, він проходить через усі контурні дроти, незалежно від того, чи належать вони контуру контуру позитивного багатокутника чи отвору контуру негативного багатокутника. У цьому випадку дроти, об’єднані за допомогою contour() завжди починаються з позитивного багатокутного контуру. Якщо ви зацікавлені в отриманні позитивних і негативних проводів контуру окремо, ви можете викликати 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 );
      }
    }
  }

Орігінал сторінки: UL_POLYPOUR