我有什么:
如果用户点击并按住用户控件,则会添加圆形。想象一下,画好一个paint.exe画笔。
启动一个线程,它以每秒约120个形状的速率添加形状。在大约300个形状之后,性能正在受到重创,所以这是最大的。
我希望将所有形状组合成1个形状,每增加5个形状,应将所有形状合并为1个或类似形状。
到目前为止我有什么:
List<Path> pathList = new List<Path>();
public void PaintEllipse(Point pos, Size size)
{
double left = pos.X - (size.Width / 2);
double top = pos.Y - (size.Height / 2);
EllipseGeometry ellipseGeometry = new EllipseGeometry();
ellipseGeometry.Center = new Point(size.Width / 2, size.Height / 2);
ellipseGeometry.RadiusX = size.Width;
ellipseGeometry.RadiusY = size.Height;
var path = new Path();
path.Margin = new Thickness(left, top, 0, 0);
path.Data = ellipseGeometry;
path.Fill = brush;
var newShapes = GetShapesList(); // returns List<Shape> of pathList
newShapes.Add(path);
if(ShapesGUID == Guid.Empty) // updating the overlay
ShapesGUID = imageViewer.ShapesOverlayAdd(newShapes, new ShapesOverlayRenderParameters() { ZOrder = 100 });
else
imageViewer.ShapesOverlayUpdate(ShapesGUID, newShapes);
pathList.Add(path);
UpdateStatusString(); //updates a text shape with # of shapes
}
这是我的合并方法。结果是在运行后只剩下一个小圆圈,可能将所有形状合并到同一位置。
public void MergeGeometry()
{
for (int i = pathList.Count-1; i > 0; i--)
{
if(i - 1 > 0)
{
var combined = new CombinedGeometry(GeometryCombineMode.Union, pathList[i].RenderedGeometry, pathList[i - 1].RenderedGeometry);
pathList[i - 1] = new Path() { Data = combined };
pathList.RemoveAt(i);
}
}
UpdateStatusString();
}
那么我如何将所有路径合并为1个形状/路径,以保持每个形状的位置/边距?