欢迎您访问 最编程 本站为您分享编程语言代码,编程技术文章!
您现在的位置是: 首页

ActiViz(VTK C#库)学习使用心得体会三:C# 形式下的应用程序 VTK 调试与开发环境构建 - 一、实现可视化控件 RenderWindowControl

最编程 2024-03-05 16:22:19
...

        实现了控件,编译运行后,可以说就是实现第一个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。就官方示例转换格式后报错的问题,如果你有解决方法,请不吝赐教!!!希望后来人不要走弯路,或半途而废。