ActiViz(VTK C#库)学习使用心得体会三:C# 形式下的应用程序 VTK 调试与开发环境构建 - 一、实现可视化控件 RenderWindowControl
实现了控件,编译运行后,可以说就是实现第一个VTK示例,但只能看到一个黑块块,似乎不过瘾,那我们试着往里面填写三维物体吧。想法很好,但以我们目前是VTK知识,靠自己写代码还实现不了,试着用用官方自带示例吧。以下为示例文件夹列表,我对应官方应用手册添加 编号。
让我们试着打开第三个”HelloVTKForm“,找到CS文件夹,点击工程文件(.sln)。
由于VS版本问题,文件需转换,可单击”下一步“——”下一步“——”下一步“,或直接点击”完成“。
格式转换很顺利,没有报错。但运行转换后的工程文件,VS却报错了!
窗口初始化的时候报错,看看Form窗口,也就只有一个”renderWindowControl1“控件(注意:灰色的),不知如何下手纠错(请高手留言指正!)。但运行自己新建的”WindowsFormsHello“项目却一切正常,实在是不认识放弃,于是尝试改造我们自己新建的项目。
1.比较和调整项目引用
观察官方示例,可以在”解决方案资源管理器“的”引用“栏中,看到两个Kitware相关引用。
在”WindowsFormsHello“的”引用“栏上右击,选择”添加引用“来添加这两个应用。
在弹出的对话框中,选择”浏览“,找到ActiViz安装目录下的bin文件夹,选择”Kitware.mummy.Runtime.dll“和”Kitware.VTK.dll“文件(可以只选择第一个文件,前面在安装RenderWindowControl控件时,系统以添加了Kitware.VTK引用)。
2.引入命名空间
在Form1.CS文件中添加VTK命名控件。
using Kitware.VTK;
3.添加renderWindowControl1的load事件
在应用程序”WindowsFormsHello“的Form1窗口选中”renderWindowControl1“控件,在属性窗口事件列表中,双击”Load“。
4.复制添加renderWindowControl1.Load()事件代码
在完成第2步和第3步操作后,Form1.CS代码如下:
接下来,去官方示例”HelloVTKForm“的Form1.CS文件中,将renderWindowControl1.Load()事件中的代码(如下)拷贝并复制到”WindowsFormsHello“相同文件的相同处。
private void renderWindowControl1_Load(object sender, EventArgs e)
{
// Create a simple sphere. A pipeline is created.
vtkSphereSource sphere = vtkSphereSource.New();
sphere.SetThetaResolution(8);
sphere.SetPhiResolution(16);
vtkShrinkPolyData shrink = vtkShrinkPolyData.New();
shrink.SetInputConnection(sphere.GetOutputPort());
shrink.SetShrinkFactor(0.9);
vtkPolyDataMapper mapper = vtkPolyDataMapper.New();
mapper.SetInputConnection(shrink.GetOutputPort());
// The actor links the data pipeline to the rendering subsystem
vtkActor actor = vtkActor.New();
actor.SetMapper(mapper);
actor.GetProperty().SetColor(1, 0, 0);
// Create components of the rendering subsystem
//
vtkRenderer ren1 = renderWindowControl1.RenderWindow.GetRenderers().GetFirstRenderer();
vtkRenderWindow renWin = renderWindowControl1.RenderWindow;
// Add the actors to the renderer, set the window size
//
ren1.AddViewProp(actor);
renWin.SetSize(250, 250);
renWin.Render();
vtkCamera camera = ren1.GetActiveCamera();
camera.Zoom(1.5);
}
编译运行”WindowsFormsHello“项目,成功看到如下画面。将鼠标移到renderWindowControl1控件中,可以通过鼠标拖拽旋转球,通过滚轮缩放球。这才是我们基于RenderWindowControl控件的第一个VTK示例,大功告成!
完成调试环境搭建后,下部就要真正开始熟悉和使用VTK库了,硬骨头还在后头。
另:此示例的实现确实有点波折。当我们满怀希望运行官方示例却迎头遇见VS报错时,很多人可能就此放弃了ActiViz.Net。就官方示例转换格式后报错的问题,如果你有解决方法,请不吝赐教!!!希望后来人不要走弯路,或半途而废。