如何将网格转换为VTK格式? [英] How to convert a mesh to VTK format?
本文介绍了如何将网格转换为VTK格式?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我有自己格式的网格,我想将其导出到.vtk文件.我该怎么做?
I have a mesh in my own format and I want export it to a .vtk file. How do I do this?
原始网格的格式如下:(伪代码)
The original mesh is in the following format: (Pseudocode)
class Mesh {
List<Float[3]> _coordinates
List<int[4]> _tetra //(elements, Faces, etc.)
}
我希望这可以澄清我的问题.我只想用Paraview加载它,所以我不在乎它是否是结构化的,多边形的等等.
I hope this clarify my problem. I just want load it with Paraview so I don't care if it is structured, poly, etc.
推荐答案
您可以创建vtkUnstructuredGrid:
You may create a vtkUnstructuredGrid:
//vtkPolyData *data = vtkPolyData::New();
vtkUnstructuredGrid *mesh = vtkUnstructuredGrid::New();
vtkPoints *points = vtkPoints::New();
vtkCellArray *cells = vtkCellArray::New();
//vtkIdType pointIDs[4];
std::vector<point>::const_iterator iterator1 = fpoints.begin();
point aux;
if ( event_report != NULL ) { event_report->SetMaxTicks(fpoints.size() + fnodes.size()); }
points->SetNumberOfPoints(fpoints.size());
int pointId = 0;
for (;iterator1 != fpoints.end();iterator1++)
{
aux = *iterator1;
points->SetPoint(pointId, aux.coord);
pointId++;
}
std::vector<node>::const_iterator iterator2 = fnodes.begin();
node aux1;
vtkSmartPointer<vtkIdTypeArray> idCells =
vtkSmartPointer<vtkIdTypeArray>::New();
idCells->SetNumberOfComponents(5);
idCells->SetNumberOfTuples(fnodes.size());
int cellIndex = 0;
for (;iterator2 != fnodes.end(); iterator2++)
{
aux1 = *iterator2;
vtkIdType * tuple = new vtkIdType[4];
tuple[0] = 4;
tuple[1] = aux1.indexs[0] - 1;
tuple[2] = aux1.indexs[1] - 1;
tuple[3] = aux1.indexs[2] - 1;
tuple[4] = aux1.indexs[3] - 1;
idCells->SetTupleValue(cellIndex, tuple);
cellIndex++;
}
cells->SetCells(fnodes.size(), idCells);
mesh->SetPoints(points);
mesh->SetCells(VTK_TETRA, cells);
//vtkPolyDataWriter *writer = vtkPolyDataWriter::New();
vtkUnstructuredGridWriter *tetra_writer = vtkUnstructuredGridWriter::New();
tetra_writer->SetFileName( filename );
#if VTK_MAJOR_VERSION <= 5
tetra_writer->SetInput(mesh);
#else
tetra_writer->SetInputData(mesh);
#endif
tetra_writer->Write();
tetra_writer->Delete( );
这篇关于如何将网格转换为VTK格式?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文