如何将网格转换为VTK格式?

4
我可以为您提供翻译帮助。以下是您需要翻译的内容:

我有一个自己格式的网格,想将其导出为.vtk文件。我该怎么做?

原始网格的格式如下:(伪代码)

class Mesh {

   List<Float[3]> _coordinates

   List<int[4]> _tetra //(elements, Faces, etc.)

}

我希望这能够澄清我的问题。我只是想在Paraview中加载它,所以我不在意它是结构化的、多边形的等等。

2个回答

6
您可以创建一个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( );

我没有网格,想从vtkPolyData创建四面体网格,我该怎么做(有示例吗)?我的另一个问题是,您已经对“data”进行了注释(第一行),在这里输入什么以创建网格,然后是“unstructuredGrid”? - sc241

6

请查看meshio(我的一个项目),它可以帮助您将各种格式的网格转换为其他格式(包括VTK)。VTK接口代码可以给您提供如何自定义此项目的线索。


谢谢,我认为这非常有用。 - Alvaro Fuentes
谢谢,这很有用。我正在后端使用VTK,并希望生成网格。我需要加入一组代表层理面的地质地平线。你推荐哪些网格生成器? - skytaker
@NicoSchlömer 感谢您分享您的项目,您有ITK和VTK的C++示例吗?我正在努力从vtkImageData二进制标签文件中提取四面体非结构化网格。 - sc241

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接