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