Paraview并行Reader:vtkXMLPStructuredGridReader

本文深入探讨了Paraview中的vtkXMLPStructuredGridReader类,该类用于读取PVTK XML StructuredGrid并行文件。它继承自vtkXMLPStructuredDataReader,能读取并行模式的.pvts文件,支持流式处理。vtkXMLPStructuredGridReader通过vtkXMLStructuredGridReader读取各片数据,并将数据整合。文章详细解析了类中的关键方法,如ReadPrimaryElement、SetupOutputData和ReadPieceData等,以及其父类vtkXMLPDataReader的相关功能。
摘要由CSDN通过智能技术生成

vtkXMLPStructuredGridReader这个类位于/ParaView-v4.2.0-source/VTK/IO/XML。

这个类主要是用于读取PVTK XML StructuredGrid 文件。他读取并行模式的总结文件,并且使用vtkXMLStructuredGridReader从单独的结构化片文件中去读取数据。支持流,这种文件的扩展名为pvts。

这个类继承自vtkXMLPStructuredDataReader

在这个类之中,并没有几个具体的方法:

int vtkXMLPStructuredGridReader::ReadPrimaryElement(vtkXMLDataElement* ePrimary):首先执行父类的这个函数:this->Superclass::ReadPrimaryElement(ePrimary),.然后它需要找到PPoints 元素。从这段找PPointsElement的代码来看,应该在所读文件里,只有叫一个PPoints的项。在里面存了点信息的参数。

void vtkXMLPStructuredGridReader::SetupOutputData():一样,先执行父类的:this->Superclass::SetupOutputData();然后获取一个点组,这里用points这个指针。PPointsElement是包含点信息的参数,这个应该在之前是读到了,设置好的。这个函数应该不是读取函数,而是通过PPointsElement获取所读取的数据中一共有多少Tuple。也就是有多少个Points,然后申请好空间。

int vtkXMLPStructuredGridReader::ReadPieceData():一样的先执行父类的函数:this->Superclass::ReadPieceData()。然后根据现在是哪一片通过创建vtkXMLStructuredGridReader去读数据,有多少片就创建多少个Reader;然后把数据从input复制到output中。(按理说不是还要有个把各个Reader读取的数据合成的函数吗?)

下面我们来看看一个非常重要的类,也就是vtkXMLPStructuredGridReader的父类:vtkXMLPDataReader

这个类他是提供所有通用的PVTK XML文件的Reader的一些方法。

vtkDataSet* vtkXMLPDataReader::GetPieceInputAsDataSet(int piece):很显然,这个函数又是根据所读的片号,用对应的vtkXMLDataReader去读,执行:return static_cast<vtkDataSet*>(reader->GetOutputDataObject(0));

void vtkXMLPDataReader::SetupOutputData():这里应该是有两种数据,一种是ePointData,一种是eCellData。同样的,这个函数应该也是设置pointData中数组中一共有多少个Tuples,给pointData设置好初始的空间。同理cellData。然后把ePointData和pointData,eCellData和cellData的联系,也就是信息和数据的联系。

int vtkXMLPDataReader::ReadXMLInformation():首先创建文件名组件: this->SplitFileName();。然后再执行父类return this->Superclass::ReadXMLInformation();

void vtkXMLPDataReader::SetupOutputInformation(vtkInformation *outInfo):需要注意的是在这个函数中做的改变,都要复制进CopyOutputInformation中。

首先初始化,然后为PointData创建场信息(Field),我们只需要一片的信息就可以了,因为所有片都相同系列的Array。this->SetFieldDataInfo(this->PPointDataElement,
 vtkDataObject::FIELD_ASSOCIATION_POINTS, this->GetNumberOfPoints(), infoVector):根据这个函数创建场信息,然后把其放入outInfo->Set(vtkDataObject::POINT_DATA_VECTOR(), infoVector);同理设置Cell data。

void vtkXMLPDataReader::CopyOutputInformation(vtkInformation *outInfo, int port):把这个Reader的Info复制到outInfo中。

int vtkXMLPDataReader::ReadPrimary

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值