paraview 数据可视化
用paraview
打开plate.vtk
,在属性信息一栏中(Information
),可以看到有mode1
、mode2
、mode3
、mode4
和mode8
五种有限元结果属性数据,它们可以表示几何体在每一个点上的位移,vtkWarpVector
类可以用这些矢量数据来变形几何体,在该类中可以设置矢量数据以及缩放的比例,控制几何体的变形。
原始几何体
添加 Filters->WrapByVector
,并选择属性mode1
,设置 Scale Factor
为1。
变形后的几何体
代码实现
file_name, color_scheme = ("plate.vtk",0)
color_scheme = abs(color_scheme)
if color_scheme > 2:
color_scheme = 0
colors = vtk.vtkNamedColors()
# Read a vtk file
#
plate = vtk.vtkPolyDataReader()
plate.SetFileName(file_name)
# 显示mode8 有限元结果
plate.SetVectorsName("mode8")
plate.Update()
warp = vtk.vtkWarpVector()
warp.SetInputConnection(plate.GetOutputPort())
warp.SetScaleFactor(0.5)
normals = vtk.vtkPolyDataNormals()
normals.SetInputConnection(warp.GetOutputPort())
#点的矢量和其法线点乘,生成点的标量值
color = vtk.vtkVectorDot()
color.SetInputConnection(normals.GetOutputPort())
lut = vtk.vtkLookupTable()
MakeLUT(color_scheme, lut)
plateMapper = vtk.vtkDataSetMapper()
plateMapper.SetInputConnection(color.GetOutputPort())
plateMapper.SetLookupTable(lut)
plateMapper.SetScalarRange(-1, 1)
plateActor = vtk.vtkActor()
plateActor.SetMapper(plateMapper)
# Create the RenderWindow, Renderer and both Actors
#
ren = vtk.vtkRenderer()
renWin = vtk.vtkRenderWindow()
renWin.AddRenderer(ren)
iren = vtk.vtkRenderWindowInteractor()
iren.SetRenderWindow(renWin)
# Add the actors to the renderer, set the background and size
#
ren.AddActor(plateActor)
ren.SetBackground(colors.GetColor3d("Wheat"))
renWin.SetSize(512, 512)
ren.GetActiveCamera().SetPosition(13.3991, 14.0764, 9.97787)
ren.GetActiveCamera().SetFocalPoint(1.50437, 0.481517, 4.52992)
ren.GetActiveCamera().SetViewAngle(30)
ren.GetActiveCamera().SetViewUp(- 0.120861, 0.458556, - 0.880408)
ren.GetActiveCamera().SetClippingRange(12.5724, 26.8374)
# Render the image.
renWin.Render()
iren.Start()
结果:
完整代码参考DisplacementPlot.py