目的
符号化有限元模型的节点矢量属性(应力等),将其可视化显示。
代码
构建drawVectorField函数,用于矢量场的符号化显示。代码如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37
| def drawVectorField(self, FEMapper, sample_ratio = 10, scale_ratio = 0.015, symbol = 'arrow'): self.main_actor.SetMapper(FEMapper) self.main_actor.GetProperty().SetOpacity(0.3) self.main_actor.GetProperty().SetColor(241 / 255, 135 / 255, 184 / 255) maskPoints = vtk.vtkMaskPoints() maskPoints.SetInputData(FEMapper.GetInput()) maskPoints.SetOnRatio(sample_ratio) maskPoints.Update() glyph3D = vtk.vtkGlyph3D() glyph3D.SetInputData(maskPoints.GetOutput()) if symbol == 'arrow': arrow = vtk.vtkArrowSource() arrow.Update() glyph3D.SetSourceData(arrow.GetOutput()) elif symbol == 'cone': cone = vtk.vtkConeSource() cone.SetResolution(6) cone.Update() glyph3D.SetSourceData(cone.GetOutput()) glyph3D.SetVectorModeToUseVector() glyph3D.SetScaleModeToScaleByVector() glyph3D.SetScaleFactor(scale_ratio) glyph3D.Update()
glMapper = vtk.vtkDataSetMapper() glMapper.SetInputData(glyph3D.GetOutput()) glMapper.Update() glActor = vtk.vtkActor() glActor.SetMapper(glMapper) glActor.GetProperty().SetColor(0.0, 0.79, 0.34)
self.renderer.AddActor(self.main_actor) self.renderer.AddActor(glActor)
|
在上面代码中,由于有限元模型通常节点和单元数量很多,为了方便观察,我们可以对数据进行降采样。关键代码如下:
1
| maskPoints.SetOnRatio(sample_ratio)
|
其中sample_ratio
为采样率。
结果
![GIF 2022-11-20 9-33-08](D:\OneDrive\桌面\GIF 2022-11-20 9-33-08.gif)
参考
[1] VTK使数据符号化显示矢量数据