VTK:如何读取网格单元的长度,宽度和高度?

问题描述 投票:1回答:2

我有一个*.pvd格式的巨大网格。我想确保在构建所述网格时已经遵守了一些单元尺寸规范。为此,我应该得到一个单元数据数组(dx,dy,dz)

我首先尝试在Paraview中检查这一点,但收效甚微。然后我决定以各种格式(vtk,vtu,ex2)导出网格,并使用vtk模块将内容导入python,如下面的代码所示。不幸的是,网格的大小禁止它,我得到各种错误消息,指出“无法分配大小为x的n个单元格”。

import vtk
reader = vtk.vtkXMLUnstructuredGridReader()
reader.SetFileName("my_mesh.vtu")
reader.Update()

最后,在Paraview中有一个python-shell允许我以pvdvtk格式打开网格文件:

>>> from paraview.simple import *
>>> my_vtk = OpenDataFile("my_mesh.vtk")
>>> print dir(my_vtk)

尽管我浏览了这个阅读器对象的方法和属性,但我仍然不知道在网格上获取任何几何信息的位置。我也浏览了simple module documentation,我无法真正地绕过它。

那么如何从paraview.servermanager.LegacyVTKReader对象中检索有关细胞几何的信息呢?

关于如何通过paraview GUI实现这一点的任何线索,或任何kludge将vtk对象加载到python vtk尽管内存问题也是非常受欢迎的。对不起,这个朦胧的问题,但我真的不知道从哪里开始......

python mesh vtk paraview
2个回答
1
投票

您可以使用GetClientSideObject()(请参阅here)在Paraview Python shell中获取VTK对象。之后,您可以使用所有常规的VTK Python函数。例如,您可以在Paraview Python shell中编写以下内容

>>> from paraview.simple import *
>>> currentSelection = GetActiveSource()
>>> readerObj = currentSelection.GetClientSideObject()
>>> unstructgrid = readerObj.GetOutput()
>>> firstCell = unstructgrid.GetCell(0)
>>> cellPoints = firstCell.GetPoints()

或者,您可以在ParaView中使用Programmable Filter。这允许访问完整的VTK python模块甚至NumPy或其他模块。您可以在可编程过滤器的脚本窗口中输入以下脚本:

import vtk as v
import numpy as np

inp = self.GetUnstructuredGridInput()
cells = inp.GetCells()
cells.InitTraversal()
cellPtIds = v.vtkIdList()
lenArr = v.vtkDoubleArray()
lenArr.SetNumberOfComponents(3)
lenArr.SetName('CellSize')
while cells.GetNextCell( cellPtIds ):
    pts = []
    for i in range( cellPtIds.GetNumberOfIds() ):
        ptCoords = inp.GetPoint( cellPtIds.GetId(i) )
        pts.append( ptCoords )    
    pts = np.array( pts )
    dx = np.max(pts[:,0]) - np.min(pts[:,0])
    dy = np.max(pts[:,1]) - np.min(pts[:,1])
    dz = np.max(pts[:,2]) - np.min(pts[:,2])
    lenArr.InsertNextTuple3(dx, dy, dz)
out = self.GetUnstructuredGridOutput()
out.ShallowCopy( inp )
out.GetCellData().AddArray( lenArr )

在Paraview中,当您在管道中选择“ProgrammableFilter1”图标时,将从下拉列表中为您提供新的单元格数据阵列,如下面的屏幕截图所示。您可以修改上面的脚本以将数据保存到文件以进行外部分析。

Paraview Screenshot


1
投票

此信息在“信息”选项卡中可见。

© www.soinside.com 2019 - 2024. All rights reserved.