我用 Python 创建了一个代码,帮助我读取 csv 文件并读取未来网格的节点。但是,创建的元素内部具有零角度,并且未正确创建网格。 你能帮我找到一个合适的解决方案吗?限制是我不能删除 de 节点,我需要保留创建的 .vtu 文件的结构,该文件是用外部程序读取的。
csv文件结构 X,Y 274431.1298,8944106.146 274787.4887,8944503.557 275063.569,8944861.591 274962.1268,8945052.067 275068.3516,8945366.36 274888.9677,8945728.005 274319.1971,8946276.679 ... .. .
import numpy as np
import matplotlib.pyplot as plt
import pyvista as pv
import os
from scipy.spatial import Delaunay
path = r"C:\Users\\"
filename = "old_mesh.csv"
datos = np.genfromtxt(path + filename, delimiter=',')
# delete X,Y first line
if np.array_equal(datos[0], np.array([0, 0])):
datos = np.delete(datos, 0, axis=0)
#verifiy if there are NaN values
if np.isnan(datos).any():
print("El archivo CSV contiene valores faltantes o NaN")
# elimina las filas con valores faltantes o NaN
datos = datos[~np.isnan(datos).any(axis=1)]
# creation of the mesh based in the nodes
tri = Delaunay(datos)
# vtu file creation
with open(path + os.path.basename(filename)[0:-4] + '_outputmesh.vtu', "w") as f:
f.write('<?xml version="1.0"?>\n')
f.write('<VTKFile type="UnstructuredGrid" version="1" byte_order="LittleEndian" header_type="UInt64">\n')
f.write('\t<UnstructuredGrid>\n')
f.write('\t\t<Piece NumberOfPoints="{}" NumberOfCells="{}">\n'.format(len(datos), len(tri.simplices)))
f.write('\t\t\t<Points>\n')
f.write('\t\t\t\t<DataArray type="Float64" Name="Points" NumberOfComponents="3" format="ascii">\n')
for i in range(len(datos)):
f.write('\t\t\t\t\t{} {} {}\n'.format(datos[i][0], datos[i][1], 0))
f.write('\t\t\t\t</DataArray>\n')
f.write('\t\t\t</Points>\n')
f.write('\t\t\t<Cells>\n')
f.write('\t\t\t\t<DataArray type="Int64" Name="connectivity" NumberOfComponents="1" format="ascii">\n')
for i in range(len(tri.simplices)):
f.write('\t\t\t\t\t{} {} {}\n'.format(tri.simplices[i][0], tri.simplices[i][1], tri.simplices[i][2]))
f.write('\t\t\t\t</DataArray>\n')
f.write('\t\t\t\t<DataArray type="Int64" Name="offsets" NumberOfComponents="1" format="ascii">\n')
for i in range(len(tri.simplices)):
f.write('\t\t\t\t\t{}\n'.format((i+1)*3))
f.write('\t\t\t\t</DataArray>\n')
f.write('\t\t\t\t<DataArray type="UInt8" Name="types" NumberOfComponents="1" format="ascii">\n')
for i in range(len(tri.simplices)):
f.write('\t\t\t\t\t5\n')
f.write('\t\t\t\t</DataArray>\n')
f.write('\t\t\t</Cells>\n')
f.write('\t\t</Piece>\n')
f.write('\t</UnstructuredGrid>\n')
f.write('</VTKFile>')
我尝试使用其他包(即三角形)什么问题还没有解决...