<div dir="ltr">Hi Mathieu,<div><br></div><div>The vtkImageStencilData filter had some bugs relating to the way it handled tolerance, and these were fixed only a few weeks ago.  Setting Tolerance to zero will keep the bugs from manifesting.  But I definitely recommend that you use the latest VTK master if possible, if you are depending on vtkPolyDataToImageStencil.</div><div><br></div><div>However, they weren't the kind of bugs that would cause a crash, so the crash surprises me.  I'll look at vtkImageStencil for clues.  As far as I understand, vtkImageStencil itself hasn't changed since VTK 5.</div><div><br></div><div> - David</div><div><br></div><div><br><div class="gmail_extra"><br><div class="gmail_quote">On Tue, Dec 9, 2014 at 11:24 AM, Mathieu Coursolle <span dir="ltr"><<a href="mailto:mathieu@rogue-research.com" target="_blank">mathieu@rogue-research.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div style="word-wrap:break-word">Hi,<div><br></div><div>We are currently upgrading an application from VTK 5.10 to VTK 6.</div><div><br></div><div>We have a piece of code that uses vtkPolyDataToImageStencil and vtkImageStencil, which worked perfectly when using VTK 5.10.</div><div>However, it now crashes in some cases since we upgraded to VTK 6.</div><div><br></div><div>Here is a summary of the workflow and code:</div><div><br></div><div>1) We load a polydata (output from another algorithm).</div><div><br></div><div>2) We create an image and fill its data with a constant value (0xFF).</div><div><br></div><div><div style="margin:0px;font-size:11px;font-family:Monaco;color:rgb(112,61,170)">vtkSmartPointer<span style="color:#000000"><</span>vtkImageData<span style="color:#000000">> image = </span>vtkSmartPointer<span style="color:#000000"><</span>vtkImageData<span style="color:#000000">>::</span><span style="color:#3d1d81">New</span><span style="color:#000000">();</span></div><div style="margin:0px;font-size:11px;font-family:Monaco">image-><span style="color:#3d1d81">SetDimensions</span>(sizeX, sizeY, sizeZ);</div><div style="margin:0px;font-size:11px;font-family:Monaco">image-><span style="color:#3d1d81">SetSpacing</span>(spacingX, spacingY, spacingZ);</div><div style="margin:0px;font-size:11px;font-family:Monaco">image-><span style="color:#3d1d81">SetOrigin</span>(<span style="color:#272ad8">0.0</span>, <span style="color:#272ad8">0.0</span>, <span style="color:#272ad8">0.0</span>);</div><div style="margin:0px;font-size:11px;font-family:Monaco;color:rgb(120,73,42)"><span style="color:#000000">image-></span><span style="color:#3d1d81">AllocateScalars</span><span style="color:#000000">(</span>VTK_UNSIGNED_CHAR<span style="color:#000000">, </span><span style="color:#272ad8">1</span><span style="color:#000000">);</span></div><div style="margin:0px;font-size:11px;font-family:Monaco"><span style="color:#bb2ca2">void</span>* dataPtr = image-><span style="color:#3d1d81">GetScalarPointer</span>();</div><div style="margin:0px;font-size:11px;font-family:Monaco"><span style="color:#3d1d81">memset</span>(dataPtr, <span style="color:#272ad8">0xFF</span>, sizeX * sizeY * sizeZ);</div></div><div><br></div><div>3) We apply the polydata to image stencil:</div><div><br></div><div><div style="margin:0px;font-size:11px;font-family:Monaco;color:rgb(0,132,0)"><span style="color:rgb(112,61,170)">vtkSmartPointer</span><span style="color:rgb(0,0,0)"><</span><span style="color:rgb(112,61,170)">vtkPolyDataToImageStencil</span><span style="color:rgb(0,0,0)">> dataStencil = </span><span style="color:rgb(112,61,170)">vtkSmartPointer</span><span style="color:rgb(0,0,0)"><</span><span style="color:rgb(112,61,170)">vtkPolyDataToImageStencil</span><span style="color:rgb(0,0,0)">>::</span><span style="color:rgb(61,29,129)">New</span><span style="color:rgb(0,0,0)">();</span></div><div style="margin:0px;font-size:11px;font-family:Monaco">dataStencil-><span style="color:#78492a">SetInputData</span>(polydata);</div><div style="margin:0px;font-size:11px;font-family:Monaco">dataStencil-><span style="color:#3d1d81">SetInformationInput</span>(image);</div></div><div><br></div><div>4) We apply the image stencil.</div><div><br></div><div><div style="margin:0px;font-size:11px;font-family:Monaco;color:rgb(112,61,170)">vtkSmartPointer<span style="color:#000000"><</span>vtkImageStencil<span style="color:#000000">> stencil = </span>vtkSmartPointer<span style="color:#000000"><</span>vtkImageStencil<span style="color:#000000">>::</span><span style="color:#3d1d81">New</span><span style="color:#000000">();</span></div><div style="margin:0px;font-size:11px;font-family:Monaco;color:rgb(120,73,42)"><div style="margin:0px"><div style="margin:0px;color:rgb(61,29,129)"><span style="color:#000000">stencil-></span>SetStencilConnection<span style="color:#000000">(dataStencil-></span>GetOutputPort<span style="color:#000000">());</span></div></div></div><div style="margin:0px;font-size:11px;font-family:Monaco">stencil-><span style="color:rgb(120,73,42)">SetInputData</span>(image);</div><div style="margin:0px;font-size:11px;font-family:Monaco;color:rgb(61,29,129)"><span style="color:#000000">stencil-></span>SetBackgroundValue<span style="color:#000000">(</span><span style="color:#272ad8">0</span><span style="color:#000000">);</span></div><div style="margin:0px;font-size:11px;font-family:Monaco">stencil-><span style="color:#3d1d81">Update</span>();</div><p style="margin:0px;font-size:11px;font-family:Monaco;min-height:15px"><span style="color:rgb(112,61,170)">vtkSmartPointer</span><<span style="color:rgb(112,61,170)">vtkImageData</span>> mask = stencil-><span style="color:rgb(61,29,129)">GetOutput</span>();</p></div><div><br></div><div>It still works fine with some of the polydata, but now crashes in vtkImageStencil execution, more precisely in vtkCopyPixel, with at least one of the polydata that worked fine before.</div><div><br></div><div>One thing I noticed is that the polydata for which it fails has its bounds very close to the edge of the image.</div><div><br></div><div>I changed the tolerance (dataStencil->SetTolerance()) to 0 and it seems to fix the issue, but I have to admit that I don't understand why.</div><div><br></div><div>That being said, anyone have an idea of why it would crash with VTK 6 and not before? I saw that there was a change in the way the tolerance was managed, but couldn't track it down specifically to our issue.</div><div><br></div><div>Thank you for you help,</div><div><br></div><div>Mathieu</div><div><br></div><div>_________________________<br>Mathieu Coursolle, Eng., M.Eng.<br>R&D Manager<br>Rogue Research Inc.<br><a href="http://www.rogue-research.com" target="_blank">www.rogue-research.com</a><br><a href="tel:%2B1%20514%20284%203888" value="+15142843888" target="_blank">+1 514 284 3888</a></div><div><br></div></div></blockquote></div></div></div></div>