向ScreenSpaceLines3D添加一个点会导致NullReferenceException

时间:2015-05-22 08:44:29

标签: wpf 3d nullreferenceexception helix-3d-toolkit

我在我的项目中使用SharpenLines3d来绘制线以连接Viewport3D中的对象。问题是,当我向ScreenSpaceLined3D添加点数时,程序会崩溃,如下所示:

enter image description here

当我向ScreenSpaceLines3D添加点时,它不会在这些行中崩溃,所以我想这是库内的东西。

这是我的代码:

for (int i = 0; i < MAX + 1; i++)
{
    ...

    var bounds = this.points[i].Bounds;

    var x = bounds.X + (bounds.SizeX / 2);
    var y = bounds.Y + (bounds.SizeY / 2);
    var z = bounds.Z + (bounds.SizeZ / 2);

    coords[i] = new Point3D(x, y, z);

    for (int j = 0; j < i; j++)
    {
        lines[i, j] = new ScreenSpaceLines3D();
        lines[i, j].Color = Colors.Red;
        lines[i, j].Thickness = 6;

        lines[i, j].Points.Add(coords[i]);
        lines[i, j].Points.Add(coords[j]);
    }

}

我确信我没有将null作为Add函数的参数传递(我尝试用Add替换lines[i, j].Points.Add(new Point3D(0, 0, 0));行,但它仍然没有不行。)

我注释掉了所有使用lines变量的代码,因此只有在创建了一堆新的ScreenSpaceLines3D时才使用此变量。但是我的程序在初始化时崩溃了。

当我注释掉2行代码时我会在行中添加点数,程序开始工作正常,但是当我再次添加它时,结果就像截图一样。

如何处理?

UPD:添加点后添加MainViewPort.Children.Add(lines[i, j]);使其有效。它越来越激烈了。

1 个答案:

答案 0 :(得分:0)

以某种方式添加MainViewPort.Children.Add(lines[i, j]);解决了这个问题。没有它,程序崩溃,但有了它,一切正常。

我不知道这是如何运作的,但就是这样。