Я работаю над элементом управления в WPF, чтобы рисовать фигуры областей с использованием различных типов сегментов (дуга, Безье, линейный сегмент) и хочу, чтобы они не создавали сложные фигуры областей. То есть формы, где края перекрываются.
Я работаю с PathGeometry
, сгенерированным конвертером, но после завершения конвертации XAML будет выглядеть следующим образом XAML.
без перекрытий:
</p>
<pre><code> <Path x:Name="PolygonPath" Fill="Blue" Opacity="75">
<Path.Data>
<PathGeometry>
<PathGeometry.Figures>
<PathFigure StartPoint="50,50" IsClosed="True" IsFilled="True">
<PathFigure.Segments>
<QuadraticBezierSegment Point1="100,0" Point2="200,50"/>
<LineSegment Point="250,50"/>
<LineSegment Point="250,200"/>
<QuadraticBezierSegment Point1="100,350" Point2="50,50"/>
</PathFigure.Segments>
</PathFigure>
</PathGeometry.Figures>
</PathGeometry>
</Path.Data>
</Path>
с перекрытиями (должен провалиться тест):
</p>
<pre><code> <Path x:Name="PolygonPath" Fill="Blue" Opacity="75">
<Path.Data>
<PathGeometry>
<PathGeometry.Figures>
<PathFigure StartPoint="50,50" IsClosed="True" IsFilled="True">
<PathFigure.Segments>
<QuadraticBezierSegment Point1="100,0" Point2="200,60"/>
<LineSegment Point="0,60"/>
<LineSegment Point="250,200"/>
<QuadraticBezierSegment Point1="100,350" Point2="50,50"/>
</PathFigure.Segments>
</PathFigure>
</PathGeometry.Figures>
</PathGeometry>
</Path.Data>
</Path>
В приведенном выше случае второй и третий отрезки <LineSegment Point="0,60"/>
и <LineSegment Point="250,200"/>
перекрывают последний отрезок <QuadraticBezierSegment Point1="100,350" Point2="50,50"/>
.
Есть ли метод, который мне не хватает, чтобы проверить, пересекается ли путь с самим собой в любой точке WPF?