<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 &quot;vtkSmartPointer.h&quot;<br>#include &quot;vtkXMLPolyDataReader.h&quot;<br>#include &quot;vtkXMLPolyDataWriter.h&quot;<br>#include &quot;vtkPoints.h&quot;<br>#include &quot;vtkPolyData.h&quot;<br>#include &quot;vtkDoubleArray.h&quot;<br>
#include &quot;vtkPointData.h&quot;<br>#include &quot;vtkVariant.h&quot;<br>#include &quot;vtkVariantArray.h&quot;<br><br>int main( int argc, char *argv[])<br>{ <br>  if( argc &lt; 3 )<br>  {<br>    std::cerr &lt;&lt; &quot;Missing Parameters &quot; &lt;&lt; std::endl;<br>
    std::cerr &lt;&lt; &quot;Usage:   &quot; &lt;&lt; argv[0] &lt;&lt; &quot; inputfile outputfile&quot; &lt;&lt; std::endl;<br>    std::cerr &lt;&lt; &quot;Example: \&quot;&quot; &lt;&lt; argv[0] &lt;&lt; &quot; input.vtp output.vtp\&quot;&quot; &lt;&lt; std::endl;<br>
    return EXIT_FAILURE;<br>  }<br><br>  vtkSmartPointer&lt;vtkXMLPolyDataReader&gt; inputReader = vtkSmartPointer&lt;vtkXMLPolyDataReader&gt;::New();<br>  inputReader-&gt;SetFileName(argv[1]);<br>  try<br>  {<br>      inputReader-&gt;Update();<br>
  }<br>  catch(...)<br>  {<br>      std::cerr &lt;&lt; &quot;Error occurs when reading &quot; &lt;&lt; argv[2] &lt;&lt; std::endl;<br>      return EXIT_FAILURE;<br>  }<br><br>  vtkSmartPointer&lt;vtkPolyData&gt; poly = vtkSmartPointer&lt;vtkPolyData&gt;::New();<br>
  poly-&gt;DeepCopy(inputReader-&gt;GetOutput());<br><br>  vtkSmartPointer&lt;vtkVariantArray&gt; vararray = vtkSmartPointer&lt;vtkVariantArray&gt;::New();<br>  vararray-&gt;SetName(&quot;Variant&quot;);<br>  vararray-&gt;SetNumberOfValues(poly-&gt;GetNumberOfPoints());<br>
  for(vtkIdType id=0; id&lt;poly-&gt;GetNumberOfPoints(); id++)<br>  {<br>      vtkSmartPointer&lt;vtkDoubleArray&gt; darray = vtkSmartPointer&lt;vtkDoubleArray&gt;::New();<br>      darray-&gt;SetName(&quot;Double&quot;);<br>
      darray-&gt;SetNumberOfValues(id%5+1);<br>      for(vtkIdType j=0; j&lt;darray-&gt;GetNumberOfTuples(); j++) darray-&gt;SetValue(j, j*0.5);<br>      vtkVariant variant(darray);<br><br>      vararray-&gt;SetValue(id, variant);<br>
  }<br>  poly-&gt;GetPointData()-&gt;AddArray(vararray);<br><br>  vtkSmartPointer&lt;vtkXMLPolyDataWriter&gt; outputWriter = vtkSmartPointer&lt;vtkXMLPolyDataWriter&gt;::New();<br>  outputWriter-&gt;SetInput(poly);<br>  outputWriter-&gt;SetFileName(argv[2]);<br>
  outputWriter-&gt;SetDataModeToBinary();<br>  try<br>  {<br>      outputWriter-&gt;Write();<br>  }<br>  catch(...)<br>  {<br>      std::cerr &lt;&lt; &quot;Error occurs when writing &quot; &lt;&lt; argv[2] &lt;&lt; std::endl;<br>
      return EXIT_FAILURE;<br>  }<br>  <br>  return EXIT_SUCCESS;<br>}<br><br></div>Thanks,<br></div>Mengda<br></div>