Отсечение GraphicsPath с другим GraphicsPath - PullRequest
1 голос
/ 31 августа 2011

Как вы обрезаете System.Drawing.Drawing2D.GraphicsPath с помощью другого GraphicsPath, чтобы получить новый GraphicsPath ?

Примечание 1: можно SetClip () для целого System.Drawing.Graphics объекта, но здесь необходимо что-то вроде пересечения GraphicsPath для получения другого GraphicsPath.

Примечание 2: Обсуждаемый здесь метод ( Пересечение объектов GraphicsPath ) возвращает область.Здесь мы ожидаем GraphicsPath

1 Ответ

1 голос
/ 31 августа 2011

Я быстро понял это, и самое близкое, что я получил, это:

var region = new Region(gp1);
region.Intersect(gp2);

var gpResult = new GraphicsPath();
gpResult.AddRectangles(region.GetRegionScans(new Matrix()));
gpResult.CloseAllFigures();

using (var br = new SolidBrush(Color.LightYellow))
{
    e.Graphics.FillPath(br, gpResult);
    //e.Graphics.DrawPath(Pens.Black, gpResult);
}

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

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

У меня нет опыта работы с ним, но, похоже, он сможет делать то, что вам нужно.

...