【VTK+有限元后处理】节点点云属性颜色映射

15 篇文章 15 订阅
8 篇文章 5 订阅

目的

在之前的一篇文章【VTK+有限元后处理】可视化结果云图中,我们实现了对有限元结果的云图显示,效果如下:

在这里插入图片描述

这样的云图显示也有不足之处,比如想要查看内部单元的属性值分布情况,这种可视化方式显然是不能满足需求的。解决方法之一,便是对模型进行剖切显示,详见文章:【VTK+有限元后处理】实时剖切视图。剖切显示需要调整剖切平面位置和法向以满足我们对内部单元属性分布的观察,个人认为有些许的繁琐。

于是,我想如果能得到节点的点云,再将属性值映射到点云上,就能很方便的查看内部单元节点的属性分布情况。

代码及测试结果

节点点云提取

用到VTK中的vtkVertexGlyphFilter过滤器。

def nodes2points(self):
    """节点转点云"""
    points = vtk.vtkPolyData()
    points.SetPoints(self.FEModel.ugrid.GetPoints())

    # vtkVertexGlyphFilter类将丢弃输入数据中的所有单元,取而代之的是在每个点上创建一个顶点
    vertexGlyphFilter = vtk.vtkVertexGlyphFilter()
    vertexGlyphFilter.AddInputData(points)
    vertexGlyphFilter.Update()
    self.pointCloud = vertexGlyphFilter.GetOutput()
    # 点云绘制
    self.SceneManager.drawPdSrc(self.pointCloud, (241 / 255, 135 / 255, 184 / 255), point_size = 3)
    self.SceneManager.display()

在这里插入图片描述

属性颜色映射

def loadScalarField(self):
    if len(self.FEModel.nodes) == 0:  # 节点是否为空
        self.statusbar.showMessage("laod FEModel file first!", 3000)
        return
    fn, _type = QtWidgets.QFileDialog.getOpenFileName(self, '打开标量场文件', self.last_path, '*.csv;;*.ntl')
    if fn:
        if _type == "*.ntl":
            self.FEModel.read_ntl(fn)
        elif _type == '*.csv':
            self.FEModel.read_csv(fn)
        # 属性(标量)赋值
        mapper = self.SceneManager.main_actor.GetMapper()
        if mapper.GetInput() == self.pointCloud:
            self.pointCloud.GetPointData().SetScalars(self.FEModel.ugrid.GetPointData().GetScalars())
            mapper.SetInputData(self.pointCloud)
        # 可视化属性映射结果
        scalarRange = self.FEModel.ugrid.GetPointData().GetScalars().GetRange()
        title = self.FEModel.ugrid.GetPointData().GetScalars().GetName()
        self.SceneManager.drawScalarField(mapper, scalarRange, title)
        self.SceneManager.display()

关键代码self.pointCloud.GetPointData().SetScalars(self.FEModel.ugrid.GetPointData().GetScalars()),将vtkUnstructuredGrid数据(有限元模型)中存储的节点的标量值赋给vtkPolyData数据(节点点云)。上述代码中,drawScalarField函数定义如下:

def drawScalarField(self, scalar_mapper, scalarRange, title):
    # 定义颜色映射表
    lut = vtk.vtkLookupTable()
    lut.SetHueRange(0.67, 0.0)  # 色调范围从红色到蓝色
    # lut.SetAlphaRange(1.0, 1.0) # 透明度范围
    # lut.SetValueRange(1.0, 1.0)
    # lut.SetSaturationRange(1.0, 1.0) # 颜色饱和度
    # lut.SetNumberOfTableValues(256)
    lut.SetNumberOfColors(256)  # 颜色个数
    # lut.SetRange(scalarRange)
    lut.Build()

    scalar_mapper.SetScalarRange(scalarRange)
    scalar_mapper.SetLookupTable(lut)
    self.renderer.RemoveActor(self.main_actor)  # 移除main_actor
    self.main_actor = vtk.vtkActor()
    self.main_actor.SetMapper(scalar_mapper)
    self.main_actor.GetProperty().SetPointSize(3)
    self.main_actor.GetProperty().SetOpacity(1)  # 设置透明度
    self.renderer.AddActor(self.main_actor)
    # 色标带
    self.scalarBar_actor.SetLookupTable(scalar_mapper.GetLookupTable())  # 将颜色查找表传入窗口中的色标带
    self.scalarBar_actor.SetTitle(title)
    self.scalarBar_actor.SetNumberOfLabels(5)
    self.renderer.AddActor2D(self.scalarBar_actor)

代码测试效果如下所示。

在这里插入图片描述

  • 2
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
VTK(Visualization Toolkit)是一个用于可视化和图形处理的开源软件库。它提供了一系列的算法和工具,可以用来创建、渲染和分析三维数据。VTK可以用于各种领域,包括科学研究、医学图像处理、计算机辅助设计等。 有限元后处理是在有限元分析完成后对结果数据进行可视化和分析的过程。VTK提供了许多用于有限元后处理的类和方法。例如,vtkKdTree类可以用于构建和搜索kd树,以便在大型数据集中进行高效的点拾取和查询操作。vtkMath类提供了一组数学运算函数,可以用于计算向量、矩阵、标量等。而vtkPointPicker类则是一个用于点拾取的工具,可以在三维场景中选择并获取用户鼠标点击的点的相关信息。 基于VTK有限元后处理系统可以利用VTK提供的功能来实现对有限元结果的可视化和分析。这样的系统可以使用彩色云图、等值面、等值线、任意剖面等方式来展示有限元结果的不同方面和特征。该系统可以用于研究和分析各种工程问题,如结构力学、流体力学、电磁场等。通过VTK的灵活性和强大的可视化能力,可以有效地展示和解释有限元分析的结果,帮助工程师做出准确的决策。 总之,VTK有限元后处理中发挥着重要的作用,它提供了丰富的功能和工具,可以用来可视化和分析有限元结果,帮助工程师更好地理解和解释模拟数据。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [【VTK+有限元后处理节点属性值查询](https://blog.csdn.net/qq_39784672/article/details/127984852)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] - *2* [基于VTK有限元后处理系统开发 ](https://download.csdn.net/download/weixin_38684328/12136850)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] - *3* [【VTK+有限元后处理】实时剖切视图](https://blog.csdn.net/qq_39784672/article/details/127938561)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值