2011-08-31 84 views
1

如何用另一个剪辑System.Drawing.Drawing2D.GraphicsPath得到一个新的GraphicsPath?注意1:SetClip()可能是一个完整的System.Drawing.Graphics对象,但这里需要的是某种相交的GraphicsPath来获得另一个GraphicsPath。用另一个GraphicsPath剪切GraphicsPath

注2:这里讨论的方法(Intersecting GraphicsPath objects)返回一个区域。在这里,我们期待的GraphicsPath

回答

1

我在这个快速去,和我最接近的是这样的:

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方法以查看我的意思。

有一个用于管理剪辑的开源库,它似乎是相当活跃的here(通过this Stackoverflow question找到)。

我没有经验,但它看起来能够做你以后的事情。

+0

我更喜欢外部库。此演示代码是解决方案: Polygons solution2 = new Polygons(); Clipper c = new Clipper(); c.UseFullCoordinateRange = false; c.AddPolygons(subjects,PolyType.ptSubject); c.AddPolygons(clips,PolyType.ptClip); exSolution.Clear(); solution.Clear(); (GetClipType(),solution,GetPolyFillType(),GetPolyFillType()); –