ActiViz学习点滴(四)——显示圆柱(两种方式构建圆柱体)

程序修改如下:

vtkSphereSource sphere = vtkSphereSource.New();            

sphere.SetCenter(5, 5, 5);           

vtkCylinderSource cylinder = vtkCylinderSource.New();            

//public class vtkCylinderSource : vtkPolyDataAlgorithm            

//生成以原点为中心的圆柱体,vtkCylinderSource创建以原点为中心的多边形圆柱体            

//圆柱体的轴沿全局y轴对齐。可以指定圆柱体的高度和半径以及侧面数。            

//还可以控制圆柱体是开口的还是有盖的。            

cylinder.SetHeight(3.0);            

//设置圆柱体的高度。初始值为1。            

cylinder.SetRadius(0.1);            

//设置圆柱体的半径。初始值为0.5            

cylinder.SetResolution(10);            

//设置用于定义圆柱体的面数。初始值为6。           

vtkPolyDataMapper sphereMapper = vtkPolyDataMapper.New();            

sphereMapper.SetInputConnection(sphere.GetOutputPort());           

vtkPolyDataMapper cylinderMapper = vtkPolyDataMapper.New();            

cylinderMapper.SetInputConnection(cylinder.GetOutputPort());           

vtkActor sphereactor = vtkActor.New();            

sphereactor.SetMapper(sphereMapper);            

sphereactor.GetProperty().SetColor(1, 0, 0);           

vtkActor cylinderactor = vtkActor.New();            

cylinderactor.SetMapper(cylinderMapper);            

cylinderactor.GetProperty().SetColor(0, 1, 0);           

vtkRenderWindow RenderWin = renderWindowControl.RenderWindow;            

vtkRenderer VTKrenderer = renderWindowControl.RenderWindow.GetRenderers().GetFirstRenderer();           

VTKrenderer.AddViewProp(sphereactor);            

VTKrenderer.AddViewProp(cylinderactor);           

vtkCamera camera = VTKrenderer.GetActiveCamera();            

VTKrenderer.ResetCamera();            

RenderWin.Render();

在原有程序的基础上增加圆柱,程序运行效果如下:

现在修改程序,在场景中增加一个渲染器

vtkSphereSource sphere = vtkSphereSource.New();            

sphere.SetCenter(5, 5, 5);           

vtkCylinderSource cylinder = vtkCylinderSource.New();                     

cylinder.SetHeight(3.0);                        

cylinder.SetRadius(0.1);                       

cylinder.SetResolution(10);                     

vtkPolyDataMapper sphereMapper = vtkPolyDataMapper.New();            

sphereMapper.SetInputConnection(sphere.GetOutputPort());           

vtkPolyDataMapper cylinderMapper = vtkPolyDataMapper.New();            

cylinderMapper.SetInputConnection(cylinder.GetOutputPort());           

vtkActor sphereactor = vtkActor.New();            

sphereactor.SetMapper(sphereMapper);            

sphereactor.GetProperty().SetColor(1, 0, 0);           

vtkActor cylinderactor = vtkActor.New();            

cylinderactor.SetMapper(cylinderMapper);            

cylinderactor.GetProperty().SetColor(0, 1, 0);           

vtkRenderWindow RenderWin = renderWindowControl.RenderWindow;            

vtkRenderer VTKrenderer1 = vtkRenderer.New();            

vtkRenderer VTKrenderer2 = vtkRenderer.New();           

VTKrenderer1.AddViewProp(sphereactor);            

VTKrenderer2.AddViewProp(cylinderactor);           

RenderWin.AddRenderer(VTKrenderer1);            

RenderWin.AddRenderer(VTKrenderer2);           

VTKrenderer1.SetViewport(0, 0.5, 0.5, 1);            

VTKrenderer2.SetViewport(0.5, 0, 1, 0.5);            

VTKrenderer1.SetBackground(1, 1, 0);            

VTKrenderer2.SetBackground(1, 1, 0);           

vtkCamera camera1 = VTKrenderer1.GetActiveCamera();            

VTKrenderer1.ResetCamera();           

vtkCamera camera2 = VTKrenderer2.GetActiveCamera();            

VTKrenderer2.ResetCamera();           

RenderWin.Render();

红色字体为变更语句,程序运行效果如下,可以使用鼠标分别旋转两个渲染场景中的三维几何体

         完整的流程:“数据源Souce”-->“过滤器Filter”--> “制图器Mapper”--> “角色Actor”-->“渲染器Renderer”。其中,“过滤器Filter”是可有可无的,其他步骤一步都不能少。

        创建新的渲染器后,通过AddViewProp()添加角色,角色可以在多个不同渲染器中出现。通过SetViewport()设置渲染器在可视化控件中的位置,SetBackground()给渲染器赋予背景色。

        注意:

        (1)Viewport窗口的坐标赋值,控件的左下角为原点,X轴由左向右[0.0,1.0],Y轴由下向上[0.0,1.0];

        (2)各自“渲染器Renderer”的交互操作是独立完整的;

        (3)同一控件中的“渲染器Renderer”是可以相互重叠或遮挡的,具体效果请自行测试。

可以去掉圆柱体上下地面,通过以下语句

            cylinder.CappingOff();
            //禁用是否使用多边形覆盖圆柱体。初始值为启用。

程序运行结果如下,图中的三个小球为后续程序添加的几何体,其中红球在圆柱体内部

还可以通过以下语句设置圆柱体的透明度

            cylinderactor.GetProperty().SetOpacity(0.5);
            //设置对象的不透明度。1.0完全不透明,0.0完全透明。

程序运行结果如下

第二种方式,更新日期2021-10-19

如果我们已知圆柱体中心轴的两个端点,可以使用vtkLineSourcevtkTubeFilter两个类配合来生成具有方向性的圆柱体。程序如下

            vtkTubeFilter tubeFilter = vtkTubeFilter.New();
            //vtkTubeFilter-在管线周围生成管的过滤器
            //vtkTubeFilter是一种在每条输入线周围生成一个管的过滤器。
            //管由三角形组成,并随着线法线的旋转围绕管旋转。
            //(如果不存在法线,则会自动计算法线。)
            //可以将管的半径设置为随标量或矢量值而变化。
            //如果半径随标量值变化,则将线性调整半径。
            //还可以指定管的边数。您还可以指定哪些边是可见的。
            //这对于生成有趣的条带效果非常有用。
            //其他选项包括为管状体加盖和生成纹理坐标的功能。
            //纹理坐标可以与关联的纹理贴图一起使用,以创建有趣的效果,
            //例如使用与长度或时间对应的条纹标记管。
            //此过滤器通常用于创建粗线条。
            //另一个常见用途是将此过滤器与vtkStreamLine组合以生成流管。
            //
            //public static vtkTubeFilter New();
            //构造半径为0.5、半径变化已禁用、边数设置为3、半径系数为10的对象。

            tubeFilter.SetInputConnection(lineSource.GetOutputPort());
            tubeFilter.SetRadius( 0.5 );
            tubeFilter.SetNumberOfSides( 50 );
            tubeFilter.CappingOff();

            vtkPolyDataMapper DataMapper = vtkPolyDataMapper.New();
            DataMapper.SetInputConnection(tubeFilter.GetOutputPort());

            vtkActor tubeActor = vtkActor.New();
            tubeActor.SetMapper(DataMapper);


            vtkProperty property = vtkProperty.New();
            property.SetOpacity(0.5);
            property.SetColor(0, 1, 1);

            tubeActor.SetProperty(property);

            VTKrenderer.AddActor(tubeActor);

程序中一些类和方法之前没有提到,可以参考我的其他博客,程序运行效果如下

ActiViz是一个基于C#的开源数据可视化库,它提供了一系列用于创建和呈现2D和3D图形的功能。如果你想学习ActiViz,以下是一些学习点滴: 1. 理解ActiViz的基本概念:开始学习之前,了解ActiViz的基本概念是很重要的。了解ActiViz的工作原理、主要组件和使用方式,可以帮助你更好地理解和应用它。 2. 安装和配置ActiViz:在开始使用ActiViz之前,你需要将其安装到你的开发环境中。阅读官方文档或教程,按照指示进行安装和配置。 3. 学习ActiViz的API:ActiViz提供了丰富的API,用于创建和操作图形对象。学习这些API的用法和功能,可以帮助你更好地使用ActiViz来实现你的需求。 4. 创建基本图形对象:开始学习ActiViz时,从创建一些基本的图形对象开始是一个不错的选择。尝试创建、线、多边形等基本图形对象,并学习如何对它们进行操作和渲染。 5. 了解数据可视化技术:ActiViz最常用的用途之一是数据可视化。学习如何使用ActiViz来可视化不同类型的数据,如二维数据、三维数据、图像数据等,可以帮助你更好地应用ActiViz来分析和展示数据。 6. 阅读官方文档和示例代码:ActiViz有详细的官方文档和示例代码,可以帮助你更深入地了解和使用ActiViz。阅读官方文档和运行示例代码,可以帮助你学习一些高级功能和技巧。 7. 参与开源社区:ActiViz是一个开源项目,有一个活跃的社区。参与到ActiViz的开发和讨论中,可以帮助你与其他开发者交流和学习,同时也可以为ActiViz的发展做出贡献。 希望这些学习点滴对你有帮助!祝你学***
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值