2013-03-01 2 views
4

Дано QPainterPath Как я могу погладить путь только на внутреннем или внешнем краю пути (или влево или вправо для незакрытых путей)?Поглаживание пути только внутри/снаружи?

QPainter::strokePath() центрирует перо вдоль пути и заставляет одинаковое количество чернил падать с обеих сторон. Для наглядного примера желаемого эффекта, увидеть эту графику я сделал (для SVG предложений, не имеет):

SVG proposed stroke-location example, from phrogz.net/SVG/stroke-location.svg

Я не возражаю, если это делается с помощью какого-то хака, как установка самого пути в качестве отсекающей области (для внутренней) или зоны отсечения (для наружной стороны).

Цель состоит в том, чтобы заполнить закругленный прямоугольник с заполнением с низкой непрозрачностью, а затем просто потушить его с помощью штриха с более низкой непрозрачностью, чтобы имитировать спад в 2 шага. Если ход перекрывает заливку, непрозрачность удваивается, что приводит к разрушению эффекта. Из-за сложной формы простое масштабирование пути не будет работать хорошо, даже если оно может работать для кругов и прямоугольников, выведенных выше.

ответ

6

Ваш лучший выбор, вероятно, QPainterPathStroker. Используйте его для создания нового пути, который является контуром вашего пути. Затем используйте операции QPainterPath, такие как пересечение или вычитание между ними:

outsidePath = strokedPath.subtracted(originalPath); 
insidePath = strokedPath.intersected(originalPath); 
+0

Отлично, спасибо! – Phrogz

Смежные вопросы