QPainter - рисование многоугольника с несколькими отверстиями

Я пытаюсь нарисовать многоугольник с несколькими отверстиями с помощью QPainter (QT5.8, win64). Я использую следующий код:

QPainter pm(&image);
QPen p(Qt::gray, 2);
p.setCosmetic(true);
pm.setPen(p);   
pm.setBrush(QBrush(color));

QPainterPath pap;

pap.addPolygon(pObject->getOuterGeometryPolyF());

for (int i = 0; i < (int)pObject->m_InnerGeometry.size(); i++)
{
    QPainterPath papInner;
    papInner.addPolygon(pObject->getInnerGeometryPolyF(i));
    pap = pap.subtracted(papInner);
}

pm.drawPath(pap);

Но он покажет только одно отверстие (см. изображение):

введите здесь описание изображения

Может ли кто-нибудь предоставить мне пример того, как нарисовать многоугольник с несколькими отверстиями на нем? Документация не ясна в этом вопросе.


person Richy    schedule 11.04.2020    source источник
comment
Я только что узнал, что это связано с порядком точек в многоугольнике (по часовой стрелке, а не по часовой стрелке). Все еще пытаюсь найти правило для этого.   -  person Richy    schedule 11.04.2020


Ответы (1)


отвечу на свой вопрос...

Все зависит от порядка вращения полигона (по часовой или против часовой стрелки). Отверстия должны иметь порядок вращения, противоположный внешнему полигону, чтобы он работал безупречно.

Так, например, внешний многоугольник = по часовой стрелке, внутренние многоугольники должны иметь порядок против часовой стрелки. Если это не так, измените порядок.

person Richy    schedule 14.04.2020