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