<br><span class="gmail_quote"></span>The two algorithms included in the vtkImplicitModeller -- the PerCell and the PerVoxel methods -- perform differently when the input geometry is scaled.<br><br>For my test cases -- more than a thousand of cells -- the PerVoxel algorithm is faster, as mentioned in the class documentation.
<br><br>But what is strange is that the speed is greatly influenced by the scale of the model : using the same data, the CPU time can be reduced by 2 (PerVoxel : 0.16 sec. instead of 0.38 sec.) or even by 100 (PerCell : 
0.32
 sec. instead of 37.11 sec! ) if the geometry and all parameters relative to a length are scaled to the geometry diameter.
<br><br>Does someone know how to use the PerVoxel method at its fastest, when changing the geometry size is not an option ?
<br><br>(some code lines and output follows)<br>---<br>Marie-Gabrielle Vallet<br><br>-------------------------------------------------------------------<br>&nbsp;&nbsp; vtkPolyData *surf1 = vtkPolyData::New();<br>&nbsp;&nbsp;&nbsp;&nbsp; surf1 = surfAlg-&gt;GetOutput();
<br>&nbsp; &nbsp;&nbsp; double* gridBounds = new double[6];<br>&nbsp;&nbsp; &nbsp; surf1-&gt;ComputeBounds();<br>&nbsp; &nbsp;&nbsp; surf1-&gt;GetBounds(gridBounds);<br>&nbsp;&nbsp; &nbsp; double threshold = .1*(gridBounds[1]-gridBounds[0]);
<br><br>&nbsp; vtkImplicitModeller *imp = vtkImplicitModeller::New();<br>&nbsp;&nbsp;&nbsp;&nbsp; imp-&gt;SetInputConnection( surfAlg-&gt;GetOutputPort(0) );<br>&nbsp;&nbsp;&nbsp;&nbsp; imp-&gt;SetModelBounds( gridBounds );<br>&nbsp;&nbsp;&nbsp;&nbsp; imp-&gt;SetSampleDimensions( dim );
<br>&nbsp;&nbsp;&nbsp;&nbsp; imp-&gt;SetMaximumDistance( threshold );<br>&nbsp;&nbsp;&nbsp;&nbsp; imp-&gt;SetCapValue( 2*threshold );<br>&nbsp;&nbsp;&nbsp;&nbsp; //&nbsp;&nbsp;&nbsp;&nbsp; imp-&gt;SetProcessModeToPerVoxel ();<br><br>&nbsp;&nbsp; vtkContourFilter *contour = vtkContourFilter::New();<br>&nbsp;&nbsp;&nbsp;&nbsp; contour-&gt;SetInputConnection( imp-&gt;GetOutputPort() );
<br>&nbsp;&nbsp;&nbsp;&nbsp; contour-&gt;SetValue(0, threshold );<br><br>&nbsp;&nbsp;&nbsp;&nbsp; timer-&gt;StartTimer();<br>&nbsp;&nbsp;&nbsp;&nbsp; contour-&gt;Update();<br>&nbsp;&nbsp;&nbsp;&nbsp; timer-&gt;StopTimer();<br>&nbsp;&nbsp;&nbsp;&nbsp; cout &lt;&lt; &quot;ElapsedTime &quot;&lt;&lt;timer-&gt;GetElapsedTime()&lt;&lt;&quot;&nbsp; &quot;;
<br>&nbsp;&nbsp;&nbsp;&nbsp; cout &lt;&lt; surf1-&gt;GetNumberOfCells() &lt;&lt; &quot;&nbsp; &quot; <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;&lt; (dim[0]-1)*(dim[1]-1)*(dim[2]-1) &lt;&lt; &quot;&nbsp; &quot; <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;&lt; threshold &lt;&lt; &quot;&nbsp; &quot;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;&lt; imp-&gt;GetMaximumDistance()&nbsp; &lt;&lt; &quot;&nbsp; &quot; 
<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;&lt; imp-&gt;GetProcessModeAsString() &lt;&lt; &quot; &quot;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;&lt; imp-&gt;GetCapValue() &lt;&lt; &quot; &quot;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;&lt; imp-&gt;GetLocatorMaxLevel() &lt;&lt; &quot;&nbsp; &quot;
<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;&lt; endl;<br>--------------------------------------------------------------------<br>// Using the original geometry, diameter = 28.43<br>ElapsedTime 0.383428&nbsp; 4676&nbsp; 32760&nbsp; 1.548&nbsp; 1&nbsp; PerVoxel 3.096 5<br>

ElapsedTime 37.1108&nbsp; 4676&nbsp; 32760&nbsp; 1.548&nbsp; 1&nbsp; PerCell 3.096 5<br><br>// Using the scaled geometry, diameter = 1<br>
ElapsedTime 0.163597&nbsp; 4676&nbsp; 32760&nbsp; 0.0544493&nbsp; 0.0544493&nbsp; PerVoxel 0.108899 5<br>ElapsedTime 0.322232&nbsp; 4676&nbsp; 32760&nbsp; 0.0544493&nbsp; 0.0544493&nbsp; PerCell 0.108899 5<br><br><br>