【VTK+有限元后处理】实时剖切视图
创始人
2024-02-01 03:50:43

目的

实现后处理结果云图的平面剖切视图。

方法

通过使用vtkPlaneWidget控件交互,得到剖切平面,通过vtkClipDataSet完成对vtkUnstructuredGrid有限元结果数据的剖切操作。渲染管线如下图所示[1]^{[1]}[1]。

image-20221119155430445

代码实现

首先,我们先写一个创建vtkPlaneWidget控件的方法。

def clipFEModel_planeWidget(self, ugrid):# 三维切割平面控件构建self.planeWidget = vtk.vtkPlaneWidget()self.planeWidget.SetInteractor(self.interactor)  # 与交互器关联self.planeWidget.SetInputData(ugrid)  # 设置数据集,用于初始化平面,可以不设置self.planeWidget.SetResolution(1)  # 即:设置网格数self.planeWidget.GetPlaneProperty().SetColor(.2, .8, 0.1)  # 设置颜色self.planeWidget.GetPlaneProperty().SetOpacity(1)  # 设置透明度self.planeWidget.GetPlaneProperty().SetLineWidth(4)self.planeWidget.GetHandleProperty().SetColor(0, .4, .7)  # 设置平面顶点颜色self.planeWidget.GetHandleProperty().SetPointSize(1)self.planeWidget.GetHandleProperty().SetLineWidth(1)  # 设置平面线宽self.planeWidget.NormalToZAxisOn()  # 初始法线方向平行于Z轴self.planeWidget.SetRepresentationToWireframe()  # 平面显示为网格属性 SetRepresentationToSurface()self.planeWidget.SetCenter(ugrid.GetCenter())  # 设置平面坐标self.planeWidget.SetPlaceFactor(1.0)self.planeWidget.PlaceWidget()  # 放置平面self.planeWidget.On()  # 显示平面#  设置vtkPlaneCallbackself.planeWidget.AddObserver(vtk.vtkCommand.InteractionEvent, vtkPlaneCall(self, ugrid))

上面代码中,通过self.planeWidget.AddObserver(vtk.vtkCommand.InteractionEvent, vtkPlaneCall(self, ugrid)),设置了平面控件的回调函数,传入ugrid参数,即我们的vtkUnstructuredGrid有限元剖切对象。回调类vtkPlaneCall定义如下:

class vtkPlaneCall:def __init__(self, sceneManager, ugrid):self.sceneManager = sceneManagerself.ugrid = ugridself.clippingPlane = vtk.vtkPlane()  # 剖切平面def __call__(self, caller, ev):caller.GetPlane(self.clippingPlane)  # 得到当前planeWidget的平面,作为剖切平面clipper = vtk.vtkClipDataSet()clipper.SetClipFunction(self.clippingPlane)  # 设置剖切方法为平面剖切clipper.SetInputData(self.ugrid)  # 设置剖切对象# clipper.SetValue(0.0)clipper.GenerateClippedOutputOn()clipper.Update()insideMapper = vtk.vtkDataSetMapper()insideMapper.SetInputData(clipper.GetOutput())insideMapper.ScalarVisibilityOn()self.sceneManager.drawOutline(self.ugrid)# clippedMapper = vtk.vtkDataSetMapper()# clippedMapper.SetInputData(clipper.GetClippedOutput())# clippedMapper.ScalarVisibilityOn()scalarRange = clipper.GetOutput().GetPointData().GetScalars().GetRange()title = clipper.GetOutput().GetPointData().GetScalars().GetName()self.sceneManager.drawScalarField(insideMapper, scalarRange, title)self.sceneManager.display()

这里的sceneManager参数为显示管理类,主要用于可视化渲染。drawScalarField函数为云图绘制函数,具体实现细节参加:【VTK+有限元后处理】可视化结果云图。

结果

在这里插入图片描述

参考

[1] 陈航. 基于Qt和VTK的铸造有限元后处理可视化系统研发[D]. 湖北:华中科技大学,2018. DOI:10.7666/d.D01542051.

相关内容

热门资讯

埃菲尔铁塔在哪 中国仿建埃菲尔... 2019年4月26日,广西南宁市,街头惊现一座巨型山寨版埃菲尔铁塔,高约20米,白色塔身,造型逼真,...
苗族的传统节日 贵州苗族节日有... 【岜沙苗族芦笙节】岜沙,苗语叫“分送”,距从江县城7.5公里,是世界上最崇拜树木并以树为神的枪手部落...
北京的名胜古迹 北京最著名的景... 北京从元代开始,逐渐走上帝国首都的道路,先是成为大辽朝五大首都之一的南京城,随着金灭辽,金代从海陵王...
应用未安装解决办法 平板应用未... ---IT小技术,每天Get一个小技能!一、前言描述苹果IPad2居然不能安装怎么办?与此IPad不...
脚上的穴位图 脚面经络图对应的... 人体穴位作用图解大全更清晰直观的标注了各个人体穴位的作用,包括头部穴位图、胸部穴位图、背部穴位图、胳...
长白山自助游攻略 吉林长白山游... 昨天介绍了西坡的景点详细请看链接:一个人的旅行,据说能看到长白山天池全凭运气,您的运气如何?今日介绍...
猫咪吃了塑料袋怎么办 猫咪误食... 你知道吗?塑料袋放久了会长猫哦!要说猫咪对塑料袋的喜爱程度完完全全可以媲美纸箱家里只要一有塑料袋的响...
demo什么意思 demo版本... 618快到了,各位的小金库大概也在准备开闸放水了吧。没有小金库的,也该向老婆撒娇卖萌服个软了,一切只...
世界上最漂亮的人 世界上最漂亮... 此前在某网上,选出了全球265万颜值姣好的女性。从这些数量庞大的女性群体中,人们投票选出了心目中最美...
埃菲尔铁塔在哪 中国仿建埃菲尔... 2019年4月26日,广西南宁市,街头惊现一座巨型山寨版埃菲尔铁塔,高约20米,白色塔身,造型逼真,...
北京的名胜古迹 北京最著名的景... 北京从元代开始,逐渐走上帝国首都的道路,先是成为大辽朝五大首都之一的南京城,随着金灭辽,金代从海陵王...
苗族的传统节日 贵州苗族节日有... 【岜沙苗族芦笙节】岜沙,苗语叫“分送”,距从江县城7.5公里,是世界上最崇拜树木并以树为神的枪手部落...
应用未安装解决办法 平板应用未... ---IT小技术,每天Get一个小技能!一、前言描述苹果IPad2居然不能安装怎么办?与此IPad不...