我需要在Helix View Port中显示多个3d点。
private void DisplayPointCloud(double[] datapoints)
{
newTime = stopwatch.Elapsed;
foreach (double Datapoint in datapoints)
{
Point3D temp = new Point3D(Random(), Random(), Datapoint);
Dispatcher.Invoke(() =>
{
DataList.Add(temp);
});
}
oldTime = newTime;
}
我在单独的线程中显示螺旋视口中的数据。我需要在UI中显示多个数据点,而不显示我现在正在做的一个接一个的数据点。我需要这样做的主要原因是最小化UI线程中的滞后。
HelixToolkit在github上有很好的示例。
Regarind点数。。您可以在视图中使用PointsVisual3D,并将Point3D的源集合绑定到属性Points。
<h:HelixViewport3D x:Name="ViewPort3D" InfiniteSpin="True" ShowFrameRate="True">
<h:DefaultLights />
<h:PointsVisual3D Points="{Binding Points3DCollection}" Color="Red" Size="6" />
</h:HelixViewport3D>
即使您决定从不同的非UI线程填充Points3DCollection,它也无法解决UI线程的问题。根本原因-Helix总是会在更改相机位置后重新绘制此集合。重新喷漆在UI线程中执行。
为了提高表单上其余控件的响应能力,您可以尝试为HelixViewPort3D创建新线程(请参阅Dwayne Need文章(,但这不会显著提高重新绘制3D场景的速度。