Что у меня есть:
Если пользователь нажимает и удерживает пользовательский элемент управления, добавляются формы круга.Представьте себе старую старую кисть paint.exe.
Запущен поток, который добавляет фигуры со скоростью ~ 120 фигур в секунду.Производительность получает большой успех после примерно 300 форм, так что это максимум.
Я хочу объединить все фигуры в 1 фигуру, каждая добавленная пятая фигура должна объединить все фигуры в 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
}
Вот мой метод слияния.В результате после запуска остается только 1 маленький круг, возможно объединяя все фигуры в одно и то же место.
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 фигуру / контур, который сохраняет местоположение / поле каждой отдельной фигуры?