python - 从 VTU 文件中提取三角形 ID
问题描述
我有一个带有关联 vtu 文件的 pvtu 文件,我想从中显示一些数据。如果我在 Paraview (5.6+) 中加载 pvtu,当我选择纯色(白色)和带边缘的表面时,我会得到以下图像: 网格在顶部边界附近显然是各向异性的,几乎是扁平的三角形;这是预期的行为。
如果我现在在 Python 中加载相同的 pvtu 并以下列方式显示网格,
import numpy
import matplotlib.pyplot as plt
import vtk
gridreader = vtk.vtkXMLPUnstructuredGridReader()
gridreader.SetFileName('whatever.pvtu')
gridreader.Update()
vtkOut = gridreader.GetOutput()
vtkData = vtkOut.GetPoints().GetData()
coords = numpy.array([vtkData.GetTuple3(x)
for x in range(vtkData.GetNumberOfTuples())])
plt.triplot(coords[:, 0], coords[:, 1])
plt.gcf().set_size_inches(16, 8)
plt.gca().set_aspect('equal')
plt.savefig('meshPython1.png', bbox_inches='tight')
plt.gca().set_xlim((5e5, 3e6))
plt.gca().set_ylim((6e5, 1e6))
plt.savefig('meshPython2.png', bbox_inches='tight')
我明白了: 你可以很容易地看到不存在各向异性。因此,我的幼稚问题是:如何使用 Python 重现 Paraview 中显示的网格?但是,可能还有一个更准确的问题。我完全知道 matplotlib 的三角测量库接受三角形作为参数,但我无法找到从 pvtu 中提取它们的命令。所以也许更好的问题是如何从 pvtu 文件中获取三角形?
任何帮助表示赞赏。
解决方案
您的问题是您不triangles
使用matplotlib.tri
. 事实上,如果您不在 matplotlib 中指定它,ParaView 中存在的网格的连通性就会丢失。事实上,您可以让 matplotlib 自由地将单元格呈现为它想要的任何内容,当您知道三角形网格的连通性时,这显然是不正确的。您可以使用以下命令提取三角形网格的连通性:
cell_connecitivty_matrix = []
for i in range(vtOut.GetNumberOfCells()):
assert vtkOut.GetCell(i).GetNumberOfPoints() == 3
cell_connecitivty_matrix.append(vtkOut.GetCell(i).GetPointIds())
cell_connecitivty_matrix = np.array(cell_connecitivty_matrix, dtype=np.float).reshape((vtOut.GetNumberOfCells(),3))
#plot triangles with their connectivity matrix
plt.triplot(coords[:, 0], coords[:, 1], triangles=cell_connectivity_matrix)
推荐阅读
- javascript - Daterangepicker.js 预定义日期范围的 OnChange 事件
- mysql - 如何修复“无法更新存储函数/触发器中的表 testtab
- php - 是否可以暂时销毁 php 会话?
- reactjs - 我如何摆脱 Drupal 8 Open Social 中的这些错误?
- angular - Cordova 在 Internet Explorer 或 Microsoft Edge 上运行浏览器失败
- ios - 调整 UIView 大小后,UITapGestureRecognizer 不起作用
- python - 从源代码构建 HDF5、netCDF-C 和 netCDF4-python 后未解析的符号
- react-native - 从单个数据源更新整个应用程序中数据更改的本机 ui 组件
- sql-server - 在 SQL Server 中实现类似于 Oracle 中存在的多树
- html - 如何使用 sublime 编辑器构建 scss/sass。是否可以在 SCSS/SASS 中使用(Sublime)?