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

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