<html>
  <head>
    <meta content="text/html; charset=ISO-8859-1"
      http-equiv="Content-Type">
  </head>
  <body text="#003333" bgcolor="#FFFFFF">
    <div class="moz-cite-prefix">Le 24/08/2012 17:06, Malsoaz James a
      &eacute;crit&nbsp;:<br>
    </div>
    <blockquote
      cite="mid:1345820785.61611.YahooMailNeo@web171205.mail.ir2.yahoo.com"
      type="cite">
      <div style="color:#000; background-color:#fff; font-family:Courier
        New, courier, monaco, monospace, sans-serif;font-size:10pt">
        <div>
          <div><font size="2">Hi,</font></div>
          <div><font size="2"><br>
            </font></div>
          <div><font size="2">You simply forgot to compute the normals
              of your polydata. Use the vtkPolyDataNormals filter on
              "bloc" in order to do it. It should work.</font></div>
          <div><font size="2"><br>
            </font></div>
          <div><font size="2">Anyway, you should be aware that the
              vtkBooleanOperationPolyDataFilter has several bugs.&nbsp;</font></div>
          <div><font size="2">You can find information about it on
              previous threads:</font></div>
          <div><font size="2"><a class="moz-txt-link-freetext" href="http://vtk.1045678.n5.nabble.com/PolyData-Boolean-operation-problem-td5714926.html">http://vtk.1045678.n5.nabble.com/PolyData-Boolean-operation-problem-td5714926.html</a></font></div>
          <div><font size="2"><a class="moz-txt-link-freetext" href="http://vtk.1045678.n5.nabble.com/Holes-in-mesh-after-vtkBooleanOperationPolyDataFilter-td5713284.html">http://vtk.1045678.n5.nabble.com/Holes-in-mesh-after-vtkBooleanOperationPolyDataFilter-td5713284.html</a></font></div>
          <div><br>
          </div>
          <div><font size="2">Best</font></div>
          <div><font size="2">James</font></div>
        </div>
        <div style="font-family: 'Courier New', courier, monaco,
          monospace, sans-serif; font-size: 10pt; ">
          <div style="font-family: 'times new roman', 'new york', times,
            serif; font-size: 12pt; ">
            <div dir="ltr"> <font face="Arial" size="2">
                <hr size="1"> <b><span style="font-weight:bold;">De&nbsp;:</span></b>
                Cory Quammen <a class="moz-txt-link-rfc2396E" href="mailto:cquammen@cs.unc.edu">&lt;cquammen@cs.unc.edu&gt;</a><br>
                <b><span style="font-weight: bold;">&Agrave;&nbsp;:</span></b> NsPx
                <a class="moz-txt-link-rfc2396E" href="mailto:nspx.roronoa@gmail.com">&lt;nspx.roronoa@gmail.com&gt;</a> <br>
                <b><span style="font-weight: bold;">Cc&nbsp;:</span></b>
                <a class="moz-txt-link-abbreviated" href="mailto:vtkusers@vtk.org">vtkusers@vtk.org</a> <br>
                <b><span style="font-weight: bold;">Envoy&eacute; le :</span></b>
                Vendredi 24 ao&ucirc;t 2012 16h45<br>
                <b><span style="font-weight: bold;">Objet&nbsp;:</span></b>
                Re: [vtkusers] wrong result while using
                vtkBooleanOperationPolyDataFilter<br>
              </font> </div>
            <br>
            Please be more specific about what the problem is. Does the
            code not<br>
            compile? Is the result of the boolean operation&nbsp; incorrect?<br>
            <br>
            Thank you,<br>
            Cory<br>
            <br>
            On Fri, Aug 24, 2012 at 10:38 AM, NsPx &lt;<a
              moz-do-not-send="true"
              ymailto="mailto:nspx.roronoa@gmail.com"
              href="mailto:nspx.roronoa@gmail.com">nspx.roronoa@gmail.com</a>&gt;
            wrote:<br>
            &gt; Hi all,<br>
            &gt;<br>
            &gt; I'm trying to use vtkBooleanOperationPolyDataFilter but
            it seems I'm missing<br>
            &gt; something. I get unexpected result when computing the
            difference between a<br>
            &gt; simple sphere and a poledron.<br>
            &gt;<br>
            &gt; Can someone explain me what is wrong in the following
            example ?<br>
            &gt;<br>
            &gt; Thanks by advance.<br>
            &gt;<br>
            &gt; ##############<br>
            &gt;<br>
            &gt; #include &lt;vtkSmartPointer.h&gt;<br>
            &gt; #include &lt;vtkSphereSource.h&gt;<br>
            &gt; #include &lt;vtkPolyData .h&gt;<br>
            &gt; #include &lt;vtkPoints.h&gt;<br>
            &gt; #include &lt;vtkCellArray.h&gt;<br>
            &gt; #include &lt;vtkIdType.h&gt;<br>
            &gt; #include &lt;vtkTriangle.h&gt;<br>
            &gt; #include &lt;vtkBooleanOperationPolyDataFilter.h&gt;<br>
            &gt; #include &lt;vtkRenderer.h&gt;<br>
            &gt; #include &lt;vtkPolyDataMapper.h&gt;<br>
            &gt; #include &lt;vtkActor.h&gt;<br>
            &gt; #include &lt;vtkRenderWindow.h&gt;<br>
            &gt; #include &lt;vtkRenderWindowInteractor.h&gt;<br>
            &gt;<br>
            &gt; #include &lt;vector&gt;<br>
            &gt;<br>
            &gt; int main(int argc, char *argv[])<br>
            &gt; {<br>
            &gt;&nbsp; &nbsp; // sphere<br>
            &gt;&nbsp; &nbsp; vtkSmartPointer&lt;vtkSphereSource&gt; sphereSource1
            =<br>
            &gt; vtkSmartPointer&lt;vtkSphereSource&gt;::New();<br>
            &gt;&nbsp; &nbsp; sphereSource1-&gt;SetCenter(.25, 0, 0);<br>
            &gt;&nbsp; &nbsp; sphereSource1-&gt;Update();<br>
            &gt;<br>
            &gt;&nbsp; &nbsp; vtkPolyData * sphere =
            sphereSource1-&gt;GetOutput();<br>
            &gt;<br>
            &gt;&nbsp; &nbsp; // design a bloc which intersects the sphere<br>
            &gt;&nbsp; &nbsp; double bounds[6];<br>
            &gt;&nbsp; &nbsp; sphere-&gt;GetBounds(bounds);<br>
            &gt;<br>
            &gt;&nbsp; &nbsp; double x1,x2,y1,y2,z1,z2;<br>
            &gt;&nbsp; &nbsp; x1=bounds[0];<br>
            &gt;&nbsp; &nbsp; x2=bounds[1];<br>
            &gt;&nbsp; &nbsp; y1=bounds[2]-0.5;<br>
            &gt;&nbsp; &nbsp; y2=bounds[3]+0.5;<br>
            &gt;&nbsp; &nbsp; z1=bounds[4]-0.5;<br>
            &gt;&nbsp; &nbsp; z2=bounds[5]+0.5;<br>
            &gt;<br>
            &gt;&nbsp; &nbsp; double lx = x2-x1;<br>
            &gt;<br>
            &gt;&nbsp; &nbsp; vtkSmartPointer&lt;vtkPolyData&gt; bloc =
            vtkSmartPointer&lt;vtkPolyData&gt;::New();<br>
            &gt;&nbsp; &nbsp; vtkSmartPointer&lt;vtkPoints&gt; points =
            vtkSmartPointer&lt;vtkPoints&gt;::New();<br>
            &gt;&nbsp; &nbsp; vtkSmartPointer&lt;vtkCellArray&gt; triangles =<br>
            &gt; vtkSmartPointer&lt;vtkCellArray&gt;::New();<br>
            &gt;&nbsp; &nbsp; bloc-&gt;SetPoints(points);<br>
            &gt;&nbsp; &nbsp; bloc-&gt;SetPolys(triangles);<br>
            &gt;<br>
            &gt;&nbsp; &nbsp; vector&lt;vtkIdType&gt; ids;<br>
            &gt;&nbsp; &nbsp; ids.push_back( points-&gt;InsertNextPoint(
            x1+0.3*lx, y1, z2));<br>
            &gt;&nbsp; &nbsp; ids.push_back( points-&gt;InsertNextPoint(
            x1+0.6*lx, y1, z2));<br>
            &gt;&nbsp; &nbsp; ids.push_back( points-&gt;InsertNextPoint(
            x1+0.6*lx, y2, z2));<br>
            &gt;&nbsp; &nbsp; ids.push_back( points-&gt;InsertNextPoint(
            x1+0.3*lx, y2, z2));<br>
            &gt;&nbsp; &nbsp; ids.push_back( points-&gt;InsertNextPoint(
            x1+0.3*lx, y1, z1));<br>
            &gt;&nbsp; &nbsp; ids.push_back( points-&gt;InsertNextPoint(
            x1+0.6*lx, y1, z1));<br>
            &gt;&nbsp; &nbsp; ids.push_back( points-&gt;InsertNextPoint(
            x1+0.6*lx, y2, z1));<br>
            &gt;&nbsp; &nbsp; ids.push_back( points-&gt;InsertNextPoint(
            x1+0.3*lx, y2, z1));<br>
            &gt;<br>
            &gt;&nbsp; &nbsp; vtkSmartPointer&lt;vtkTriangle&gt; t0 =
            vtkSmartPointer&lt;vtkTriangle&gt;::New();<br>
            &gt;&nbsp; &nbsp; t0-&gt;GetPointIds()-&gt;SetId ( 0, ids[0]);<br>
            &gt;&nbsp; &nbsp; t0-&gt;GetPointIds()-&gt;SetId ( 1, ids[1]);<br>
            &gt;&nbsp; &nbsp; t0-&gt;GetPointIds()-&gt;SetId ( 2, ids[2]);<br>
            &gt;&nbsp; &nbsp; triangles-&gt;InsertNextCell ( t0 );<br>
            &gt;&nbsp; &nbsp; vtkSmartPointer&lt;vtkTriangle&gt; t1 =
            vtkSmartPointer&lt;vtkTriangle&gt;::New();<br>
            &gt;&nbsp; &nbsp; t1-&gt;GetPointIds()-&gt;SetId ( 0, ids[0]);<br>
            &gt;&nbsp; &nbsp; t1-&gt;GetPointIds()-&gt;SetId ( 1, ids[2]);<br>
            &gt;&nbsp; &nbsp; t1-&gt;GetPointIds()-&gt;SetId ( 2, ids[3]);<br>
            &gt;&nbsp; &nbsp; triangles-&gt;InsertNextCell ( t1 );<br>
            &gt;&nbsp; &nbsp; vtkSmartPointer&lt;vtkTriangle&gt; t2 =
            vtkSmartPointer&lt;vtkTriangle&gt;::New();<br>
            &gt;&nbsp; &nbsp; t2-&gt;GetPointIds()-&gt;SetId ( 0, ids[1]);<br>
            &gt;&nbsp; &nbsp; t2-&gt;GetPointIds()-&gt;SetId ( 1, ids[5]);<br>
            &gt;&nbsp; &nbsp; t2-&gt;GetPointIds()-&gt;SetId ( 2, ids[2]);<br>
            &gt;&nbsp; &nbsp; triangles-&gt;InsertNextCell ( t2 );<br>
            &gt;&nbsp; &nbsp; vtkSmartPointer&lt;vtkTriangle&gt; t3 =
            vtkSmartPointer&lt;vtkTriangle&gt;::New();<br>
            &gt;&nbsp; &nbsp; t3-&gt;GetPointIds()-&gt;SetId ( 0, ids[2]);<br>
            &gt;&nbsp; &nbsp; t3-&gt;GetPointIds()-&gt;SetId ( 1, ids[5]);<br>
            &gt;&nbsp; &nbsp; t3-&gt;GetPointIds()-&gt;SetId ( 2, ids[6]);<br>
            &gt;&nbsp; &nbsp; triangles-&gt;InsertNextCell ( t3 );<br>
            &gt;&nbsp; &nbsp; vtkSmartPointer&lt;vtkTriangle&gt; t4 =
            vtkSmartPointer&lt;vtkTriangle&gt;::New();<br>
            &gt;&nbsp; &nbsp; t4-&gt;GetPointIds()-&gt;SetId ( 0, ids[2]);<br>
            &gt;&nbsp; &nbsp; t4-&gt;GetPointIds()-&gt;SetId ( 1, ids[6]);<br>
            &gt;&nbsp; &nbsp; t4-&gt;GetPointIds()-&gt;SetId ( 2, ids[7]);<br>
            &gt;&nbsp; &nbsp; triangles-&gt;InsertNextCell ( t4 );<br>
            &gt;&nbsp; &nbsp; vtkSmartPointer&lt;vtkTriangle&gt; t5 =
            vtkSmartPointer&lt;vtkTriangle&gt;::New();<br>
            &gt;&nbsp; &nbsp; t5-&gt;GetPointIds()-&gt;SetId ( 0, ids[2]);<br>
            &gt;&nbsp; &nbsp; t5-&gt;GetPointIds()-&gt;SetId ( 1, ids[7]);<br>
            &gt;&nbsp; &nbsp; t5-&gt;GetPointIds()-&gt;SetId ( 2, ids[3]);<br>
            &gt;&nbsp; &nbsp; triangles-&gt;InsertNextCell ( t5 );<br>
            &gt;&nbsp; &nbsp; vtkSmartPointer&lt;vtkTriangle&gt; t6 =
            vtkSmartPointer&lt;vtkTriangle&gt;::New();<br>
            &gt;&nbsp; &nbsp; t6-&gt;GetPointIds()-&gt;SetId ( 0, ids[3]);<br>
            &gt;&nbsp; &nbsp; t6-&gt;GetPointIds()-&gt;SetId ( 1, ids[7]);<br>
            &gt;&nbsp; &nbsp; t6-&gt;GetPointIds()-&gt;SetId ( 2, ids[4]);<br>
            &gt;&nbsp; &nbsp; triangles-&gt;InsertNextCell ( t6 );<br>
            &gt;&nbsp; &nbsp; vtkSmartPointer&lt;vtkTriangle&gt; t7 =
            vtkSmartPointer&lt;vtkTriangle&gt;::New();<br>
            &gt;&nbsp; &nbsp; t7-&gt;GetPointIds()-&gt;SetId ( 0, ids[4]);<br>
            &gt;&nbsp; &nbsp; t7-&gt;GetPointIds()-&gt;SetId ( 1, ids[3]);<br>
            &gt;&nbsp; &nbsp; t7-&gt;GetPointIds()-&gt;SetId ( 2, ids[0]);<br>
            &gt;&nbsp; &nbsp; triangles-&gt;InsertNextCell ( t7 );<br>
            &gt;&nbsp; &nbsp; vtkSmartPointer&lt;vtkTriangle&gt; t8 =
            vtkSmartPointer&lt;vtkTriangle&gt;::New();<br>
            &gt;&nbsp; &nbsp; t8-&gt;GetPointIds()-&gt;SetId ( 0, ids[0]);<br>
            &gt;&nbsp; &nbsp; t8-&gt;GetPointIds()-&gt;SetId ( 1, ids[4]);<br>
            &gt;&nbsp; &nbsp; t8-&gt;GetPointIds()-&gt;SetId ( 2, ids[5]);<br>
            &gt;&nbsp; &nbsp; triangles-&gt;InsertNextCell ( t8 );<br>
            &gt;&nbsp; &nbsp; vtkSmartPointer&lt;vtkTriangle&gt; t9 =
            vtkSmartPointer&lt;vtkTriangle&gt;::New();<br>
            &gt;&nbsp; &nbsp; t9-&gt;GetPointIds()-&gt;SetId ( 0, ids[0]);<br>
            &gt;&nbsp; &nbsp; t9-&gt;GetPointIds()-&gt;SetId ( 1, ids[1]);<br>
            &gt;&nbsp; &nbsp; t9-&gt;GetPointIds()-&gt;SetId ( 2, ids[5]);<br>
            &gt;&nbsp; &nbsp; triangles-&gt;InsertNextCell ( t9);<br>
            &gt;&nbsp; &nbsp; vtkSmartPointer&lt;vtkTriangle&gt; t10 =
            vtkSmartPointer&lt;vtkTriangle&gt;::New();<br>
            &gt;&nbsp; &nbsp; t10-&gt;GetPointIds()-&gt;SetId ( 0, ids[6]);<br>
            &gt;&nbsp; &nbsp; t10-&gt;GetPointIds()-&gt;SetId ( 1, ids[5]);<br>
            &gt;&nbsp; &nbsp; t10-&gt;GetPointIds()-&gt;SetId ( 2, ids[4]);<br>
            &gt;&nbsp; &nbsp; triangles-&gt;InsertNextCell ( t10);<br>
            &gt;&nbsp; &nbsp; vtkSmartPointer&lt;vtkTriangle&gt; t11 =
            vtkSmartPointer&lt;vtkTriangle&gt;::New();<br>
            &gt;&nbsp; &nbsp; t11-&gt;GetPointIds()-&gt;SetId ( 0, ids[7]);
            t11-&gt;GetPointIds()-&gt;SetId ( 1,<br>
            &gt; ids[6]); t11-&gt;GetPointIds()-&gt;SetId ( 2, ids[4]);<br>
            &gt;&nbsp; &nbsp; triangles-&gt;InsertNextCell ( t11);<br>
            &gt;<br>
            &gt;&nbsp; &nbsp; bloc-&gt;BuildLinks();<br>
            &gt;<br>
            &gt;&nbsp; &nbsp; // boolean filter<br>
            &gt;&nbsp; &nbsp;
            vtkSmartPointer&lt;vtkBooleanOperationPolyDataFilter&gt;
            booleanOperation =<br>
            &gt;
            vtkSmartPointer&lt;vtkBooleanOperationPolyDataFilter&gt;::New();<br>
            &gt;&nbsp; &nbsp; booleanOperation-&gt;SetOperationToDifference();<br>
            &gt;&nbsp; &nbsp; booleanOperation-&gt;SetInputConnection( 1,&nbsp;
            sphere-&gt;GetProducerPort());<br>
            &gt;&nbsp; &nbsp; booleanOperation-&gt;SetInputConnection( 0,&nbsp;
            bloc-&gt;GetProducerPort());<br>
            &gt;&nbsp; &nbsp; booleanOperation-&gt;Update();<br>
            &gt;<br>
            &gt;&nbsp; &nbsp; //display result<br>
            &gt;&nbsp; &nbsp; vtkSmartPointer&lt;vtkRenderer&gt; renderer =<br>
            &gt; vtkSmartPointer&lt;vtkRenderer&gt;::New();<br>
            &gt;&nbsp; &nbsp; vtkSmartPointer&lt;vtkPolyDataMapper&gt; mapper =<br>
            &gt; vtkSmartPointer&lt;vtkPolyDataMapper&gt;::New();<br>
            &gt;&nbsp; &nbsp;
            mapper-&gt;SetInput(booleanOperation-&gt;GetOutput());<br>
            &gt;&nbsp; &nbsp; vtkSmartPointer&lt;vtkActor&gt; actor =
            vtkSmartPointer&lt;vtkActor&gt;::New();<br>
            &gt;&nbsp; &nbsp; actor-&gt;SetMapper(mapper);<br>
            &gt;<br>
            &gt;&nbsp; &nbsp; renderer-&gt;AddActor( actor);<br>
            &gt;<br>
            &gt;&nbsp; &nbsp; vtkSmartPointer&lt;vtkRenderWindow&gt; rendWindow =<br>
            &gt; vtkSmartPointer&lt;vtkRenderWindow&gt;::New();<br>
            &gt;&nbsp; &nbsp; rendWindow-&gt;AddRenderer(renderer);<br>
            &gt;<br>
            &gt;&nbsp; &nbsp; vtkSmartPointer&lt;vtkRenderWindowInteractor&gt;
            iren =<br>
            &gt;
            vtkSmartPointer&lt;vtkRenderWindowInteractor&gt;::New();<br>
            &gt;&nbsp; &nbsp; iren-&gt;SetRenderWindow( rendWindow);<br>
            &gt;<br>
            &gt;&nbsp; &nbsp; renderer-&gt;ResetCamera();<br>
            &gt;&nbsp; &nbsp; rendWindow-&gt;Render();<br>
            &gt;&nbsp; &nbsp; iren-&gt;Start();<br>
            &gt;<br>
            &gt;&nbsp; &nbsp; return 0;<br>
            &gt; }<br>
            &gt;<br>
            &gt; ##############<br>
            &gt;<br>
            &gt; _______________________________________________<br>
            &gt; Powered by <a class="moz-txt-link-abbreviated" href="http://www.kitware.com">www.kitware.com</a><br>
            &gt;<br>
            &gt; Visit other Kitware open-source projects at<br>
            &gt; <a moz-do-not-send="true"
              href="http://www.kitware.com/opensource/opensource.html"
              target="_blank">http://www.kitware.com/opensource/opensource.html</a><br>
            &gt;<br>
            &gt; Please keep messages on-topic and check the VTK FAQ at:<br>
            &gt; <a moz-do-not-send="true"
              href="http://www.vtk.org/Wiki/VTK_FAQ" target="_blank">http://www.vtk.org/Wiki/VTK_FAQ</a><br>
            &gt;<br>
            &gt; Follow this link to subscribe/unsubscribe:<br>
            &gt; <a moz-do-not-send="true"
              href="http://www.vtk.org/mailman/listinfo/vtkusers"
              target="_blank">http://www.vtk.org/mailman/listinfo/vtkusers</a><br>
            &gt;<br>
            <br>
            <br>
            <br>
            -- <br>
            Cory Quammen<br>
            Research Associate<br>
            Department of Computer Science<br>
            The University of North Carolina at Chapel Hill<br>
            _______________________________________________<br>
            Powered by <a class="moz-txt-link-abbreviated" href="http://www.kitware.com">www.kitware.com</a><br>
            <br>
            Visit other Kitware open-source projects at <a
              moz-do-not-send="true"
              href="http://www.kitware.com/opensource/opensource.html"
              target="_blank">http://www.kitware.com/opensource/opensource.html</a><br>
            <br>
            Please keep messages on-topic and check the VTK FAQ at: <a
              moz-do-not-send="true"
              href="http://www.vtk.org/Wiki/VTK_FAQ" target="_blank">http://www.vtk.org/Wiki/VTK_FAQ</a><br>
            <br>
            Follow this link to subscribe/unsubscribe:<br>
            <a moz-do-not-send="true"
              href="http://www.vtk.org/mailman/listinfo/vtkusers"
              target="_blank">http://www.vtk.org/mailman/listinfo/vtkusers</a><br>
            <br>
            <br>
          </div>
        </div>
      </div>
    </blockquote>
    <font size="-1"><font face="Tahoma">Ok I'll try it, thanks.<br>
        BTW, shouldn't it be add in the documentation ?<br>
        <br>
        Regards<br>
      </font></font>
  </body>
</html>