Drawingvisual使用Pen属性笔

时间:2014-06-23 09:11:46

标签: c# wpf wpf-controls drawingvisual

我的主要目的是在放大画布时更新drawingvisuals厚度。如果画布中有太多的绘图视觉效果(如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;
}

我不明白为什么在使用创建属性的笔创建时速度很慢。

0 个答案:

没有答案