Трассировка контура с использованием Qt Graphics

0

Я создаю редактор комиксов. Я хочу иметь возможность использовать довольно сложные настраиваемые формы для речевых шаров.

Я могу нарисовать хвост, а затем нарисовать воздушный шар, но это означает, что у меня есть контур внутри формы, и я хочу его только по краю.

Я предположил, что QPainterPath::simplified() решит проблему, но, похоже, ничего не делает.

В настоящее время моя лучшая идея состоит в том, чтобы нарисовать фигуру с толстым контуром, а затем снова нарисовать ее без контура, но я не думаю, что это будет работать для контуров "нулевой ширины".

  • 0
    Итак, вы рисуете речевой шар в виде двух фигур? Один для самого воздушного шара, а другой для хвоста? Почему бы просто не нарисовать их вместе как единый путь?
  • 0
    Потому что я хочу иметь возможность рисовать хвост в виде кривой и расположить воздушный шар (который может быть эллипсом, квадратом, зубчатым краем или любым другим подклассом моего базового класса воздушного шара) в произвольной точке. Найти непротиворечивый метод для представления воздушного шара оказывается затруднительным. Если бы я мог просто нарисовать кривую, то эллипс, это было бы легче
Показать ещё 1 комментарий
Теги:
qt
vector-graphics

2 ответа

1

Оказывается, QPainterPath::simplified() действительно работает. Это зависит от того, рисую ли я по часовой стрелке или против часовой стрелки (я считаю, что это работает при рисовании по часовой стрелке), что, я полагаю, зависит от того, как работает Qt Winding Fill.

// create a path representing the bubble and its "tail"
QPainterPath tail = tail.shape();
tail.addPath(bubble.shape());
tail.setFillRule(Qt::WindingFill);

painter->drawPath(tail.simplified);
1

Я могу думать о двух возможных решениях здесь:

  • Нарисуйте как "хвост", так и главный "воздушный шар" как единую форму. В этом случае вы просто нарисуете одну фигуру с одним контуром и одним заполнением.
  • Нарисуйте их отдельно, но дважды. Сначала нарисуйте "расширенную" версию фигур в черном, а затем нарисуйте "нормальную" версию фигур в белом сверху. Вы не нарисовали бы никаких "строк" вообще - "расширенная" версия заполнения будет служить той же цели.

Первый метод позволит использовать альтернативные стили линий (пунктирные или вигглые линии), но последний позволит слегка очертить "контур", чтобы он стал толще вокруг некоторых краев и стал более тонким вокруг других.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню