我正在开发一个在WF中嵌入WPF用户控件的Windows窗体应用程序。如果我添加一个按钮并执行我的userControl.DrawWireFrameCube();
我的ViewPort3D得到更新。我正在使用Hubble 3D Toolkit。但是如果我从我的MainWindowForm类调用我的方法,它不会被执行,UI也不会被更新,但是只有userControl.DrawWireFrameCube();
不工作。另一个userControl.Draw3DObject(insertionPoint, points, color);
方法工作得很好。
private void VisualizePart(int index)
{
InsertionPoint insertionPoint = new InsertionPoint
{
X = _duplicatedListParts[index].INFO1,
Y = _duplicatedListParts[index].INFO2,
Z = _duplicatedListParts[index].INFO3
};
DetailSize points = new DetailSize
{
Length = _duplicatedListParts[index].LENGTH,
Width = _duplicatedListParts[index].WIDTH,
Thickness = _duplicatedListParts[index].THICKNESS
};
userControl.Dispatcher.Invoke(() =>
{
System.Windows.Media.Color color = System.Windows.Media.Color.FromRgb(255, 90, 0);
userControl.Draw3DObject(insertionPoint, points, color);
userControl.DrawWireFrameCube();
});
}
不同之处在于,在Draw3DObject()
中,我将项目添加到Model3DGroup
,而在DrawWireFrameCube()
中,我将项目添加到MyViewPort3D
。我不使用XAML,我想保持这种方式。你知道这里出了什么问题吗?
P.S我喜欢不加解释的反对票:)
1条答案
按热度按时间dbf7pr2w1#
Hacker是一个很好的工具,我已经使用了一段时间。坦率地说,我切换到OpenGL的这种原因(线框/等)
这既消耗内存(2个网格),又在修改网格(再次为2个网格)时消耗时间。使用着色器,你可以有一个网格和两个着色器(一个用于“经典”渲染,另一个用于线框)。然后奇迹发生在GPU上,并且非常快。修改网格是直接影响其线框,因为你有一个网格为两个…这是一个有点努力,但它是值得的。暂停和WPF(除非使用XNA)只是为了显示目的(切换到XAN和切换到OpenGL一样费力)