2013-03-01 1 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

관련 문제