我的主要目标是在我放大画布时更新绘图视觉厚度。如果画布中有太多绘图视觉对象(如 100.000 行),则更新每个绘图视觉对象需要很长时间。所以我决定在我的班级里有一个 Pen 属性,然后用那支笔创建 dravingvisuals。笔粗细属性与画布的缩放比例绑定。这种方式缩放工作得很好,它足够快,并且驱动视觉的厚度正在正确更新。关于这一点的问题是创建 100000 行需要大约 4 分钟的时间。
public Pen pen { get; set; }
private void test()
{
Point lastPoint=new Point(0,0);
double lastAngle=0;
for (int i = 1; i <100000; i++)
{
Line temp = new Line(lastPoint, lastAngle, 20);
_lineList.Add(temp);
lastPoint = temp.Point2;
lastAngle = lastAngle > 360 ? 0 : lastAngle + 30;
}
foreach (Line l in _lineList)
{
VisualAdd(l.Geometri(), l.CNID, pen);
}
}
public void VisualAdd(Geometry g, int id, Pen p)
{
DrawingVisual c = DrawingVisualCreate(g, id, p);
_children.Add(DrawingVisualOlustur(g,id,p));
}
private DrawingVisual DrawingVisualCreate(Geometry g, int id,Pen p)
{
DrawingVisual drawingVisual = new DrawingVisual();
DrawingContext drawingContext = drawingVisual.RenderOpen();
drawingContext.DrawGeometry(null, p, g);
drawingContext.Close();
drawingVisual.Id = id;
return drawingVisual;
}
如果我创建如下图所示的视觉效果来创建 100000 条线,则只需 2 秒。但正如我解释的那样,在缩放时更新厚度将是一个大问题。
public void VisualAdd(Geometry g, int id)
{
DrawingVisual c = DrawingVisualCreate(g, id);
_children.Add(DrawingVisualOlustur(g,id,p));
}
private DrawingVisual DrawingVisualCreate(Geometry g, int id)
{
DrawingVisual drawingVisual = new DrawingVisual();
DrawingContext drawingContext = drawingVisual.RenderOpen();
drawingContext.DrawGeometry(null, new Pen(Brushes.Black,1), g);
drawingContext.Close();
drawingVisual.Id = id;
return drawingVisual;
}
我不明白为什么在使用作为已创建属性的笔进行创建时会如此缓慢。