<div dir="ltr"><div><div><div>Hi All,<br><br></div> I am trying to store an array of varied size for each point in vtkPolyData. I am using the following program. It seems that vtkXMLPolyDataWriter does not support the output of vtkVariantArray. Is there a way to get around this? or is there another way to implement this function?<br>
<br>#include "vtkSmartPointer.h"<br>#include "vtkXMLPolyDataReader.h"<br>#include "vtkXMLPolyDataWriter.h"<br>#include "vtkPoints.h"<br>#include "vtkPolyData.h"<br>#include "vtkDoubleArray.h"<br>
#include "vtkPointData.h"<br>#include "vtkVariant.h"<br>#include "vtkVariantArray.h"<br><br>int main( int argc, char *argv[])<br>{ <br> if( argc < 3 )<br> {<br> std::cerr << "Missing Parameters " << std::endl;<br>
std::cerr << "Usage: " << argv[0] << " inputfile outputfile" << std::endl;<br> std::cerr << "Example: \"" << argv[0] << " input.vtp output.vtp\"" << std::endl;<br>
return EXIT_FAILURE;<br> }<br><br> vtkSmartPointer<vtkXMLPolyDataReader> inputReader = vtkSmartPointer<vtkXMLPolyDataReader>::New();<br> inputReader->SetFileName(argv[1]);<br> try<br> {<br> inputReader->Update();<br>
}<br> catch(...)<br> {<br> std::cerr << "Error occurs when reading " << argv[2] << std::endl;<br> return EXIT_FAILURE;<br> }<br><br> vtkSmartPointer<vtkPolyData> poly = vtkSmartPointer<vtkPolyData>::New();<br>
poly->DeepCopy(inputReader->GetOutput());<br><br> vtkSmartPointer<vtkVariantArray> vararray = vtkSmartPointer<vtkVariantArray>::New();<br> vararray->SetName("Variant");<br> vararray->SetNumberOfValues(poly->GetNumberOfPoints());<br>
for(vtkIdType id=0; id<poly->GetNumberOfPoints(); id++)<br> {<br> vtkSmartPointer<vtkDoubleArray> darray = vtkSmartPointer<vtkDoubleArray>::New();<br> darray->SetName("Double");<br>
darray->SetNumberOfValues(id%5+1);<br> for(vtkIdType j=0; j<darray->GetNumberOfTuples(); j++) darray->SetValue(j, j*0.5);<br> vtkVariant variant(darray);<br><br> vararray->SetValue(id, variant);<br>
}<br> poly->GetPointData()->AddArray(vararray);<br><br> vtkSmartPointer<vtkXMLPolyDataWriter> outputWriter = vtkSmartPointer<vtkXMLPolyDataWriter>::New();<br> outputWriter->SetInput(poly);<br> outputWriter->SetFileName(argv[2]);<br>
outputWriter->SetDataModeToBinary();<br> try<br> {<br> outputWriter->Write();<br> }<br> catch(...)<br> {<br> std::cerr << "Error occurs when writing " << argv[2] << std::endl;<br>
return EXIT_FAILURE;<br> }<br> <br> return EXIT_SUCCESS;<br>}<br><br></div>Thanks,<br></div>Mengda<br></div>