C#WPF如何绘制几何组

我正在尝试创建一个简单的可视化对象,其中包含大量要绘制的几何对象(超过10,000个),但是我目前正在尝试了解程序的正确流程。我到底如何有效地将这个几何图形组绘制到窗口上?

namespace DataVisualizer
{
    /// <summary>
    /// Interaction logic for MainWindow.xaml
    /// </summary>
    public partial class MainWindow : Window
    {
        public MainWindow()
        {
            InitializeComponent();

            Canvas newCanvas = new Canvas();
            DrawingGroup tmpDrawing = new DrawingGroup();
            GeometryGroup geoGroup = new GeometryGroup();
            Brush brush = new SolidColorBrush(Colors.Blue);
            int particleCount = 10000;
            int particleWidth = 5;
            int particleHeight = 5;
            Random rnd = new Random();

            //create all the geometry and add it too the geometry group
            for (int x = 0; x < particleCount; ++x)
            {
                geoGroup.Children.Add(new RectangleGeometry(new Rect(rnd.Next(500),rnd.Next(500),particleWidth,particleHeight)));
            }

            tmpDrawing.Children.Add(new GeometryDrawing(brush,null,geoGroup));


            newCanvas.Children.Add(new DrawingImage(tmpDrawing)); //does not work
            newCanvas.Background = new DrawingImage(tmpDrawing); //does not work

            //it seems i dont wana be using UIElement.. how do i effeciently draw geometry?
        }
    }
}

我发现在线上没有简单的概述总体流程的解释。任何帮助将不胜感激。

sugartian 回答:C#WPF如何绘制几何组

  1. [library]从Control继承以隔离绘图逻辑
  2. 重写OnRender(DrawingContext dc)
  3. 使用DrawingContext.DrawGeometry(画笔,笔,几何)

请考虑冻结画笔,笔和几何形状以提高性能。 请记住,DrawingContext API不会立即呈现。它更像是应用于图纸的Builder模式-它累积了有关渲染内容,位置和方式的说明。

对于粒子系统,使用WriteableBitmap,Viewport3D和第三方DirectX / OpenGL包装器可能会获得更好的结果,但是对于1万个矩形,OnRender()+ InvalidateVisual()可能就足够了

本文链接:https://www.f2er.com/3136376.html

大家都在问