代码之家  ›  专栏  ›  技术社区  ›  R. Y

如何在一个中编写多个vtkUnstructuredGrid。vtu文件

vtk
  •  2
  • R. Y  · 技术社区  · 7 年前

    我想在一个网格中编写多个非结构化网格。vtu文件。

    结果是输出文件中只有一个非结构化网格。

      vtkSmartPointer<vtkXMLUnstructuredGridWriter> writer =
        vtkSmartPointer<vtkXMLUnstructuredGridWriter>::New();
      writer->SetFileName(filename.c_str());
      writer->SetInputData(MakeHexagonalPrism());
      writer->SetInputData(MakeHexahedron());
      writer->Write();
    

    我也试过了。cellArray1和cellArray2的类型为vtkSmartPointer。结果是输出文件中只有一种类型的非结构化网格。

      vtkSmartPointer<vtkUnstructuredGrid> unstructuredGrid =
        vtkSmartPointer<vtkUnstructuredGrid>::New();
      unstructuredGrid->SetPoints(points);
      unstructuredGrid->SetCells(VTK_TETRA, cellArray1);
      unstructuredGrid->SetCells(VTK_WEDGE, cellArray2);
    

    我不知道如何在一个网格中编写多个非结构化网格。vtu文件。 如有任何提示,我将不胜感激。

    2 回复  |  直到 7 年前
        1
  •  2
  •   user6764549 user6764549    7 年前

    从文档中引用 vtkXMLUnstructuredGridWriter 可获得的 here

    一个非结构化网格输入可以写入任意数量的一个文件 流件的数量(如果由管道的其余部分支持)。

    因此,我认为不可能使用这个writer类将多个非结构化网格数据集写入一个文件。

    .vtu 文件),而不是同一个文件中的多个非结构化网格 .vtu 文件如果是,则必须首先将两个单元阵列合并为一个单元阵列,并创建一个 int 数组,其中包含总单元格数组中每个单元格的类型。例如

    // Create a Type vector to store cell types
    std::vector<int> types;
    
    // Create a new cell array composed of cellArray1 and cellArray2
    vtkSmartPointer<vtkCellArray> allCells = 
        vtkSmartPointer<vtkCellArray>::New();
    
    // Traverse cellArray1 and add it's cells to allCells
    vtkSmartPointer<vtkIdList> nextCell =
        vtkSmartPointer<vtkIdList>::New();
    cellArray1->InitTraversal()
    while( cellArray1->GetNextCell( nextCell ) ){
        allCells->InsertNextCell( nextCell );
        types.push_back( VTK_TETRA );
    }
    // Traverse cellArray2 and add it's cells to allCells
    cellArray2->InitTraversal()
    while( cellArray2->GetNextCell( nextCell ) ){
        allCells->InsertNextCell( nextCell );
        types.push_back( VTK_WEDGE );
    }
    
    //Finally, set allCells to unstructuredGrid
    unstructuredGrid->SetCells( &(types[0]), allCells );
    

    现在,当你把这个非结构化网格写到 .vtu 文件中,我认为应该在一个文件中同时包含楔形细胞和四联细胞。

        2
  •  1
  •   Guillaume Favelier    7 年前

    vtkUnstructuredGrid 这门课很全面。

    数据集表示所有可能单元格类型的任意组合

    你可以使用 vtkAppendFilter 为了将不同的数据集附加到一个数据集中,然后将输出作为vtkunstucturedgrid结果写入。vtu文件。

    // create the append filter
    vtkSmartPointer<vtkAppendFilter> append =
    vtkSmartPointer<vtkAppendfilter>::New();
    
    // add each data set
    append->AddInputData(MakeHexagonalPrism());
    append->AddInputData(MakeHexahedron());
    append->Update();
    
    // write the result
    vtkSmartPointer<vtkXMLUnstructuredGridWriter> writer =
    vtkSmartPointer<vtkXMLUnstructuredGridWriter>::New();
    writer->SetFileName(filename.c_str());
    writer->SetInputData(append->GetOutput());
    

    编辑 :我添加了缺失的 Update() Amit Singh建议的函数调用