我正在创建这个问题,并亲自回答它,以共享一种使用ActiViz in .NET Framework (C#)运行/调试和构建应用程序(Windows )的简单方法。问和回答你自己的问题是可以的。
如果我创建一个新的Windows应用程序(.NET框架,C#)并以x64平台为目标:

然后我可以转到Project > Manage NuGet包和搜索/安装Activiz.NET.x64 (v5.8.0)。
但是,安装Activiz.NET.x64后,如果我试图将RenderWindowControl拖动到Form,则会显示以下错误(加载工具箱项“RenderWindowControl”失败):

这个问题有什么解决办法吗?
我知道这里和这里(答案未被接受)已经回答了这个问题;但是,这些答案包括使用Activiz.NET.x86 (32位)设计/调试应用程序,以及只为应用程序的发布版本安装Activiz.NET.x64 (64位)。显然,在两个ActiViz包之间来回切换非常麻烦。
发布于 2020-08-26 18:46:58
在Kitware ActiViz网站的常见问题中,如下所示:
ActiViz 64与Visual?一起工作吗? Visual是一个32位应用程序,因此64位控件无法工作,在Visual中使用设计器时需要32位版本的ActiViz。通常,32位版本用于设计,64位版本用于最终编译。
然而,解决这一问题的一个办法是:
Panel (例如,名为viewportPanel )添加到Form中。这个Panel将是一个RenderWindowControl的Parent;RenderWindowControl实例,如下所示:
使用Kitware.VTK;使用System.Windows.Forms;命名空间ActiVizTest {公共部分类Form1 : Form { public Form1() { InitializeComponent();RenderWindowControl renderWindowControl =新RenderWindowControl() { Parent = viewportPanel,AddTestActors = true };}}现在可以在使用Activiz.NET.x64时运行/调试和构建应用程序:

然而,仍然存在一个可能的问题:
让我说我希望背景是红色的。
public Form1()
{
InitializeComponent();
RenderWindowControl renderWindowControl = new RenderWindowControl()
{
Parent = viewportPanel,
AddTestActors = true
};
renderWindowControl.RenderWindow.GetRenderers().GetFirstRenderer().SetBackground(1, 0, 0);
}添加上面所示的新代码行将引发System.NullReferenceException。这是因为renWinControl.RenderWindow在初始化Form1之前是null。
因此,我们需要在RenderWindow上进行的任何设置都应该在表单的构造函数之后完成,例如,我们可以创建一个Load事件。同时,我们还可以创建一些字段,以便更容易地访问RenderWindow和Renderer。
完整代码:
using Kitware.VTK;
using System;
using System.Windows.Forms;
namespace ActiVizTest
{
public partial class Form1 : Form
{
private readonly RenderWindowControl renderWindowControl;
private vtkRenderWindow renderWindow;
private vtkRenderer renderer;
public Form1()
{
InitializeComponent();
renderWindowControl = new RenderWindowControl()
{
Parent = viewportPanel,
AddTestActors = true
};
}
private void Form1_Load(object sender, EventArgs e)
{
renderWindow = renderWindowControl.RenderWindow;
renderer = renderWindow.GetRenderers().GetFirstRenderer();
renderer.SetBackground(1, 0, 0);
}
}
}最后,在x64中进行调试:

编辑
与使用Form_Load事件不同,最好使用RenderWindowControl_Load事件。只需记住,在加载控件之前,RenderWindowControl.RenderWindow是null。
https://stackoverflow.com/questions/63603886
复制相似问题