ActiViz(VTK的C#库)学习使用心得之四:第一个基于WinForm的VTK示例详细注解

2021/7/16 11:26:51

本文主要是介绍ActiViz(VTK的C#库)学习使用心得之四:第一个基于WinForm的VTK示例详细注解,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

 在搭建好C#的VTK开发环境下,成功编译运行第一个窗口应用示例程序“WindowsFormsHello”后,对主要程序进行了详细的注释,供大家学习参考。

       核心函数renderWindowControl1_Load:

       private void renderWindowControl1_Load(object sender, EventArgs e)
        {
            // 1.Create a simple sphere. A pipeline is created.
            // 1.新建球体,创建“管道pipeline”。

            //      1.1 新建数据--“数据源Source”-- 球体
            vtkSphereSource sphere = vtkSphereSource.New();      // 新建球
            sphere.SetThetaResolution(8);                        // 设置球纬度参数
            sphere.SetPhiResolution(16);                         // 设置球经度参数

            //      1.2 数据加工 -- "过滤器Filter" -- 收缩
            vtkShrinkPolyData shrink = vtkShrinkPolyData.New();  // 新建数据收缩操作器
            shrink.SetInputConnection(sphere.GetOutputPort());   // 连接管道
            shrink.SetShrinkFactor(0.9);                         // 收缩“面”操作  

            //      1.3 数据制图 -- "制图器Mapper"
            vtkPolyDataMapper mapper = vtkPolyDataMapper.New();  // 新建制图器
            mapper.SetInputConnection(shrink.GetOutputPort());   // 连接管道

            // 2.The actor links the data pipeline to the rendering subsystem
            // 2.创建“角色Actor”,连接“管道pipeline”和“渲染系统rendering subsystem”

            //      2.1 新建角色--“角色Actor”
            vtkActor actor = vtkActor.New();                    // 新建角色
            actor.SetMapper(mapper);                            // 传递制图器
            actor.GetProperty().SetColor(1, 0, 0);              // 设置“角色”颜色[RGB]

            //      2.2 Create components of the rendering subsystem
            //      2.2 创建渲染--“渲染系统rendering subsystem”

            //          (1)新建“渲染器Renderer”和“渲染窗口RenderWindow”
            //          renderWindowControl1控件提供“渲染窗口” 
            vtkRenderer ren1 = renderWindowControl1.RenderWindow.GetRenderers().GetFirstRenderer();
            vtkRenderWindow renWin = renderWindowControl1.RenderWindow;                            

            //         Add the actors to the renderer, set the window size
            //         (2)将“角色Actor”添加到“渲染器Renderer”并渲染
            ren1.AddViewProp(actor);                    // 渲染器添加角色
            renWin.SetSize(250, 250);                    // 设置渲染窗口大小[无效语句]
            renWin.Render();                                  // 渲染渲染窗口

            //         (3)设置"相机Camera"
            vtkCamera camera = ren1.GetActiveCamera();   // 新建相机
            camera.Zoom(1.5);                                              // 相机缩放
        }
    }

        说明:英文为官方原注释,汉字注释为笔者添加。

        从结构上看,VTK程序段落主要包含两个部分。一是数据和管道部分,二是角色和渲染部分。其工作的基本流程是“数据源Souce”--“过滤器Filter”-- “制图器Mapper”-- “角色Actor”--“渲染器Renderer”。 从对象和语言上看,VTK的类和方法实现简介,程序清晰,可读性好,这也是C#的特点。VTK对OpenGL进行了面向对象的封装,并设置了大量简单易用的默认值,如“球体”的半径为5,球心位于(0,0,0), “摄像机camera”的默认视点在(0,0,0)等。有OpenGL编程经历的程序员都清楚,没有这些默认值的OpenG程序,一个参数设置不好,三维窗口里真不知道会看到啥!关键是根据画面,你还不知道该如何修正程序或参数,因为你根本就不知道问题出在哪。

        作为第一个上手的VTK示例,你可以试着简单调整语句中的相关参数,如球的边数,颜色等,并运行看看效果。如果有能力,还可以添加些语句,如球的半径等。或在此示例上的几簇号上进一步拓展VTK应用。

        如果看完这些注解你还是“丈二和尚摸不着头脑”,请补充阅读一些相关知识点吧。首先是OpenGL,什么是坐标系统,什么是空间变换,什么是“管道”,什么是纹理映射等等。其次,找点VTK的资料,补充理论知识后再动手操作。

        关于VTk的学习资料推荐如下:

        1.《VTK User's Guide》。注意:我指的是Kitware公司出版的英文书籍,详细介绍VTK的使用方法。ActiViz自带的用户手册相当粗略,用处有限。有条件的朋友(有钱,英文好),请登录Kitware公司网页,购买正版书。没条件的也不要急,CSDN上的“东灵工作室”(详址请咨询百娘)有系列博客,逐章翻译了《VTK User's Guide》,这真的是当代活雷锋!唯一遗憾的是,该书示例均为C++,Python,Java或Vcl编写,C#用户需自行转换和调试。

        2.官方离线帮助文档。请在https://www.vtk.org/download/中寻找帮助文档“vtkDocHtml-X.X.X.tar.gz"并下载。

      注意:开发的ActiViz版本对应的是VTK5,所以下载尽量接近版本的帮助文档。

       此处下载的是6.3版本,解压缩后有900多兆,找到"index.html"文件后运行效果如下(离线运行):

        你可以通过帮助文档查询到VTK所有类的详细资料,非常受用,学习工作必备!



这篇关于ActiViz(VTK的C#库)学习使用心得之四:第一个基于WinForm的VTK示例详细注解的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!


扫一扫关注最新编程教程