首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在一个vtkUnstructuredGrid文件中写入多个.vtu

如何在一个vtkUnstructuredGrid文件中写入多个.vtu
EN

Stack Overflow用户
提问于 2017-11-17 10:58:52
回答 3查看 1.7K关注 0票数 2

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

我在下面试过。MakeHexagonalPrism()和MakeHexahedron()返回vtkSmartPointer类型。结果是输出文件中只有一个非结构化网格。

代码语言:javascript
运行
复制
  vtkSmartPointer<vtkXMLUnstructuredGridWriter> writer =
    vtkSmartPointer<vtkXMLUnstructuredGridWriter>::New();
  writer->SetFileName(filename.c_str());
  writer->SetInputData(MakeHexagonalPrism());
  writer->SetInputData(MakeHexahedron());
  writer->Write();

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

代码语言:javascript
运行
复制
  vtkSmartPointer<vtkUnstructuredGrid> unstructuredGrid =
    vtkSmartPointer<vtkUnstructuredGrid>::New();
  unstructuredGrid->SetPoints(points);
  unstructuredGrid->SetCells(VTK_TETRA, cellArray1);
  unstructuredGrid->SetCells(VTK_WEDGE, cellArray2);

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

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2017-11-17 16:53:58

正如文档所描述的那样,vtkUnstructuredGrid类非常通用。

dataset表示所有可能的单元格类型的任意组合。

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

代码语言:javascript
运行
复制
// 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());

编辑:我按照Amit的建议添加了缺少的Update()函数调用

票数 1
EN

Stack Overflow用户

发布于 2017-11-17 13:51:06

引用vtkXMLUnstructuredGridWriter可用这里的文档

一个非结构化网格输入可以以任意数量的流段写入一个文件中(如果其他管道支持的话)。

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

您想要同一非结构化网格(可以写入单个.vtu文件)中的多种类型的单元格,而不是同一.vtu文件中的多个非结构化网格吗?如果是,则必须首先将两个单元格数组组合为单个单元格数组,并创建一个int数组,其中包含单元格数组中每个单元格的类型。例如,

代码语言:javascript
运行
复制
// 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
EN

Stack Overflow用户

发布于 2022-09-29 09:12:40

根据@Gruillaume的建议,使用"vtkAppendFilter",属性将根据以下规则进行过滤:只有所有插入的unstructuredGrid中存在的属性才能保存在保存的数据中(例如,ug1和ug2是两个附加的unstructuredGrid,属性"hight“存在于ug1和ug2的pointData中,那么"hight”仍在append->GetOutPut()中,否则也不是unstructuredGrid)。

在大多数情况下,对于插入的unstructuredGrid (在截图中,它们称为“部分”属性),有些属性不是所有插入的属性的共同之处,这些属性将被vtkAppendFilter擦除。

解决这些情况的更好方法是将vtkMultiBlockDataSetvtkXMLMultiBlockDataWriter.一起使用。将为每个UnstructedGrid创建一个vtu文件,并创建一个vtm文件(不包含任何数据),以便将所有vtu文件收集到一个结构中。借用@Guillaume Favelier的例子,将有:

代码语言:javascript
运行
复制
vtkSmartPointer<vtkMultiBlockDataSet> multiBlockDataSet = vtkSmartPointer<vtkMultiBlockDataSet>::New();

// add each data set
vtkSmartPointer<vtkUnstructuredGrid> ug1 = MakeHexagonalPrism();
vtkSmartPointer<vtkUnstructuredGrid> ug2 = MakeHexahedron();
multiBlockDataSet->SetBlock(0, ug1);
multiBlockDataSet->SetBlock(1, ug2);

// write the result
vtkSmartPointer<vtkXMLMultiBlockDataWriter> writer = vtkSmartPointer<vtkXMLMultiBlockDataWriter>::New();
writer->SetFileName(filename.c_str());
writer->SetInputData(multiBlockDataSet);
writer->Write();
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47349086

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档