VTK Learning Thirty-nine- 有限元結果可視化 (DisplacementPlot)

paraview 數據可視化

paraview打開plate.vtk,在屬性信息一欄中(Information),可以看到有mode1mode2mode3mode4mode8五種有限元結果屬性數據,它們可以表示幾何體在每一個點上的位移,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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章