Hello, everybody.<br><br>I&#39;m testing VTK marching cubes to know if this algorithm suits my needs. I&#39;m trying to make a simple example, using the vtkMarchingCubes in a vtkImageData volumetric array, but the resulting vtkPolyData doesn&#39;t make much sense for me. Am I doing something wrong? The code is below.<br>
<br>Thanks.<br><br>void calcIsoSurface(vtkPolyData *pPolyData){<br>    //create an image data<br>    vtkSmartPointer&lt;vtkImageData&gt; pImageData = vtkSmartPointer&lt;vtkImageData&gt;::New();<br><br>    //specify the size of the image data<br>
    pImageData-&gt;SetDimensions(I_XDIM , I_YDIM , I_ZDIM);<br>    pImageData-&gt;SetNumberOfScalarComponents(1);<br>    pImageData-&gt;SetScalarTypeToDouble();<br><br>    int* piDims = pImageData-&gt;GetDimensions();<br>
<br>    cout &lt;&lt; &quot;Dims: &quot; &lt;&lt; &quot; x: &quot; &lt;&lt; piDims[0] &lt;&lt; &quot; y: &quot; &lt;&lt; piDims[1] &lt;&lt; &quot; z: &quot; &lt;&lt; piDims[2] &lt;&lt; endl;<br>    cout &lt;&lt; &quot;Number of points: &quot; &lt;&lt; pImageData-&gt;GetNumberOfPoints() &lt;&lt; endl;<br>
    cout &lt;&lt; &quot;Number of cells: &quot; &lt;&lt; pImageData-&gt;GetNumberOfCells() &lt;&lt; endl;<br><br>    for (int iZ = 0; iZ &lt; piDims[2]; iZ++){<br>        for (int iY = 0; iY &lt; piDims[1]; iY++){<br>            for (int iX = 0; iX &lt; piDims[0]; iX++){<br>
                double* pdPixel = static_cast&lt;double*&gt;(pImageData-&gt;GetScalarPointer(iX , iY , iZ));<br>                if(iX &lt; 1 || iY &lt; 1 || iZ &lt; 1 || iX &gt; piDims[0] - 2 || iY &gt; piDims[1] - 2 || iZ &gt; piDims[2] - 2){<br>
                    pdPixel[0] = 10.0;<br>                }else if(iX &lt; 2 || iY &lt; 2 || iZ &lt; 2 || iX &gt; piDims[0] - 3 || iY &gt; piDims[1] - 3 || iZ &gt; piDims[2] - 3){<br>                    pdPixel[0] = 0.0;<br>
                }<br>                else{<br>                    pdPixel[0] = -10.0;<br>                }<br>            }<br>        }<br>    }<br><br>    pImageData-&gt;Update();<br>    vtkMarchingCubes *pIso = vtkMarchingCubes::New();<br>
    pIso-&gt;SetInput(pImageData);<br>    pIso-&gt;SetNumberOfContours(1);<br>    pIso-&gt;SetValue(0, 0.0);<br>    pIso-&gt;Update();<br><br>    vtkIndent indent;<br>    pIso-&gt;PrintSelf(cout , indent);<br>    g_pPolyData = vtkPolyData::New();<br>
    g_pPolyData = pIso-&gt;GetOutput();<br>    g_pPolyData-&gt;Update();<br><br>    //writing the status of PolyData<br>    cout &lt;&lt; endl &lt;&lt; &quot;isoSurface: lines: &quot; &lt;&lt; g_pPolyData-&gt;GetNumberOfLines() &lt;&lt; &quot; vertices: &quot; &lt;&lt; g_pPolyData-&gt;GetNumberOfVerts() &lt;&lt; endl;<br>
}<br clear="all"><br>Best Regards,<br><br>Vinícius da Silva,<br>M. Sc. Student<br>Systems Engineering and Computation Program<br>PESC/COPPE/UFRJ<br>Rio de Janeiro - Brazil<br>