<html>
  <head>

    <meta http-equiv="content-type" content="text/html; charset=ISO-8859-1">
  </head>
  <body text="#003333" bgcolor="#FFFFFF">
    <font size="-1"><font face="Tahoma">Hi all,<br>
        <br>
        I'm trying to use </font></font><font size="-1"><font
        face="Tahoma"><font size="-1"><font face="Tahoma">vtkBooleanOperationPolyDataFilter
          </font></font>but it seems I'm missing something. I get
        unexpected result when computing the difference between a simple
        sphere and a poledron.<br>
        <br>
        Can someone explain me what is wrong in the following example ?<br>
        <br>
        Thanks by advance.<br>
        <br>
        ##############<br>
        <br>
        #include &lt;vtkSmartPointer.h&gt;<br>
        #include &lt;vtkSphereSource.h&gt;<br>
        #include &lt;</font></font><font size="-1"><font face="Tahoma"><font
          size="-1"><font face="Tahoma">vtkPolyData </font></font>.h&gt;<br>
      </font></font><font size="-1"><font face="Tahoma"><font size="-1"><font
            face="Tahoma">#include &lt;<font size="-1"><font
                face="Tahoma">vtkPoints</font></font></font></font></font></font><font
      size="-1"><font face="Tahoma"><font size="-1"><font face="Tahoma">.h&gt;</font></font><br>
      </font></font><font size="-1"><font face="Tahoma"><font size="-1"><font
            face="Tahoma"><font size="-1"><font face="Tahoma">#include
                &lt;<font size="-1"><font face="Tahoma">vtkCellArray</font></font></font></font></font></font></font></font><font
      size="-1"><font face="Tahoma"><font size="-1"><font face="Tahoma"><font
              size="-1"><font face="Tahoma">.h&gt;</font></font></font></font><br>
      </font></font><font size="-1"><font face="Tahoma"><font size="-1"><font
            face="Tahoma"><font size="-1"><font face="Tahoma"><font
                  size="-1"><font face="Tahoma">#include &lt;<font
                      size="-1"><font face="Tahoma">vtkIdType</font></font></font></font></font></font></font></font></font></font><font
      size="-1"><font face="Tahoma"><font size="-1"><font face="Tahoma"><font
              size="-1"><font face="Tahoma"><font size="-1"><font
                    face="Tahoma">.h&gt;</font></font></font></font></font></font></font></font><font
      size="-1"><font face="Tahoma"><br>
      </font></font><font size="-1"><font face="Tahoma"><font size="-1"><font
            face="Tahoma"><font size="-1"><font face="Tahoma"><font
                  size="-1"><font face="Tahoma"><font size="-1"><font
                        face="Tahoma">#include &lt;<font size="-1"><font
                            face="Tahoma">vtkTriangle</font></font></font></font></font></font></font></font></font></font></font></font><font
      size="-1"><font face="Tahoma"><font size="-1"><font face="Tahoma"><font
              size="-1"><font face="Tahoma"><font size="-1"><font
                    face="Tahoma"><font size="-1"><font face="Tahoma">.h&gt;</font></font></font></font></font></font></font></font><br>
      </font></font><font size="-1"><font face="Tahoma"><font size="-1"><font
            face="Tahoma"><font size="-1"><font face="Tahoma"><font
                  size="-1"><font face="Tahoma"><font size="-1"><font
                        face="Tahoma"><font size="-1"><font
                            face="Tahoma">#include &lt;<font size="-1"><font
                                face="Tahoma">vtkBooleanOperationPolyDataFilter</font></font></font></font></font></font></font></font></font></font></font></font></font></font><font
      size="-1"><font face="Tahoma"><font size="-1"><font face="Tahoma"><font
              size="-1"><font face="Tahoma"><font size="-1"><font
                    face="Tahoma"><font size="-1"><font face="Tahoma"><font
                          size="-1"><font face="Tahoma">.h&gt;<br>
                          </font></font></font></font></font></font></font></font></font></font></font></font><font
      size="-1"><font face="Tahoma"><font size="-1"><font face="Tahoma"><font
              size="-1"><font face="Tahoma"><font size="-1"><font
                    face="Tahoma"><font size="-1"><font face="Tahoma"><font
                          size="-1"><font face="Tahoma"><font size="-1"><font
                                face="Tahoma">#include &lt;</font></font></font></font></font></font></font></font></font></font></font></font>vtkRenderer.h&gt;<br>
      </font></font><font size="-1"><font face="Tahoma"><font size="-1"><font
            face="Tahoma"><font size="-1"><font face="Tahoma"><font
                  size="-1"><font face="Tahoma"><font size="-1"><font
                        face="Tahoma"><font size="-1"><font
                            face="Tahoma"><font size="-1"><font
                                face="Tahoma"><font size="-1"><font
                                    face="Tahoma">#include &lt;</font></font></font></font></font></font></font></font></font></font></font></font></font></font>vtkPolyDataMapper.h&gt;<br>
      </font></font><font size="-1"><font face="Tahoma"><font size="-1"><font
            face="Tahoma"><font size="-1"><font face="Tahoma"><font
                  size="-1"><font face="Tahoma"><font size="-1"><font
                        face="Tahoma"><font size="-1"><font
                            face="Tahoma"><font size="-1"><font
                                face="Tahoma"><font size="-1"><font
                                    face="Tahoma">#include &lt;</font></font></font></font></font></font></font></font></font></font></font></font></font></font>vtkActor.h&gt;<font
          size="-1"><font face="Tahoma"><font size="-1"><font
                face="Tahoma"><font size="-1"><font face="Tahoma"><font
                      size="-1"><font face="Tahoma"><font size="-1"><font
                            face="Tahoma"><font size="-1"><font
                                face="Tahoma"><font size="-1"><font
                                    face="Tahoma"><br>
                                    #include &lt;</font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font><font
      size="-1"><font face="Tahoma">vtkRenderWindow.h&gt;<br>
      </font></font><font size="-1"><font face="Tahoma"><font size="-1"><font
            face="Tahoma"><font size="-1"><font face="Tahoma"><font
                  size="-1"><font face="Tahoma"><font size="-1"><font
                        face="Tahoma"><font size="-1"><font
                            face="Tahoma"><font size="-1"><font
                                face="Tahoma"><font size="-1"><font
                                    face="Tahoma">#include &lt;</font></font></font></font></font></font></font></font></font></font></font></font></font></font>vtkRenderWindowInteractor.h&gt;
      </font></font><br>
    <font size="-1"><font face="Tahoma"><br>
        #include &lt;vector&gt;<br>
        <br>
        int main(int argc, char *argv[])<br>
        {<br>
        &nbsp;&nbsp;&nbsp; // sphere<br>
        &nbsp;&nbsp;&nbsp; vtkSmartPointer&lt;vtkSphereSource&gt; sphereSource1 =
        vtkSmartPointer&lt;vtkSphereSource&gt;::New();<br>
        &nbsp;&nbsp;&nbsp; sphereSource1-&gt;SetCenter(.25, 0, 0);<br>
        &nbsp;&nbsp;&nbsp; sphereSource1-&gt;Update();<br>
        <br>
        &nbsp;&nbsp;&nbsp; vtkPolyData * sphere = sphereSource1-&gt;GetOutput();<br>
        &nbsp;&nbsp;&nbsp; <br>
        &nbsp;&nbsp;&nbsp; // design a bloc which intersects the sphere<br>
        &nbsp;&nbsp;&nbsp; double bounds[6];<br>
        &nbsp;&nbsp;&nbsp; sphere-&gt;GetBounds(bounds);<br>
        <br>
        &nbsp;&nbsp;&nbsp; double x1,x2,y1,y2,z1,z2;<br>
        &nbsp;&nbsp;&nbsp; x1=bounds[0];<br>
        &nbsp;&nbsp;&nbsp; x2=bounds[1];<br>
        &nbsp;&nbsp;&nbsp; y1=bounds[2]-0.5;<br>
        &nbsp;&nbsp;&nbsp; y2=bounds[3]+0.5;<br>
        &nbsp;&nbsp;&nbsp; z1=bounds[4]-0.5;<br>
        &nbsp;&nbsp;&nbsp; z2=bounds[5]+0.5;<br>
        <br>
        &nbsp;&nbsp;&nbsp; double lx = x2-x1;<br>
        <br>
        &nbsp;&nbsp;&nbsp; vtkSmartPointer&lt;vtkPolyData&gt; bloc =
        vtkSmartPointer&lt;vtkPolyData&gt;::New();&nbsp;&nbsp;&nbsp; <br>
        &nbsp;&nbsp;&nbsp; vtkSmartPointer&lt;vtkPoints&gt; points =
        vtkSmartPointer&lt;vtkPoints&gt;::New();<br>
        &nbsp;&nbsp;&nbsp; vtkSmartPointer&lt;vtkCellArray&gt; triangles =
        vtkSmartPointer&lt;vtkCellArray&gt;::New();<br>
        &nbsp;&nbsp;&nbsp; bloc-&gt;SetPoints(points);<br>
        &nbsp;&nbsp;&nbsp; bloc-&gt;SetPolys(triangles);<br>
        <br>
        &nbsp;&nbsp;&nbsp; vector&lt;vtkIdType&gt; ids;<br>
        &nbsp;&nbsp;&nbsp; ids.push_back( points-&gt;InsertNextPoint( x1+0.3*lx, y1,
        z2));<br>
        &nbsp;&nbsp;&nbsp; ids.push_back( points-&gt;InsertNextPoint( x1+0.6*lx, y1,
        z2));<br>
        &nbsp;&nbsp;&nbsp; ids.push_back( points-&gt;InsertNextPoint( x1+0.6*lx, y2,
        z2));<br>
        &nbsp;&nbsp;&nbsp; ids.push_back( points-&gt;InsertNextPoint( x1+0.3*lx, y2,
        z2));<br>
        &nbsp;&nbsp;&nbsp; ids.push_back( points-&gt;InsertNextPoint( x1+0.3*lx, y1,
        z1));<br>
        &nbsp;&nbsp;&nbsp; ids.push_back( points-&gt;InsertNextPoint( x1+0.6*lx, y1,
        z1));<br>
        &nbsp;&nbsp;&nbsp; ids.push_back( points-&gt;InsertNextPoint( x1+0.6*lx, y2,
        z1));<br>
        &nbsp;&nbsp;&nbsp; ids.push_back( points-&gt;InsertNextPoint( x1+0.3*lx, y2,
        z1));<br>
        <br>
        &nbsp;&nbsp;&nbsp; vtkSmartPointer&lt;vtkTriangle&gt; t0 =
        vtkSmartPointer&lt;vtkTriangle&gt;::New();<br>
        &nbsp;&nbsp;&nbsp; t0-&gt;GetPointIds()-&gt;SetId ( 0, ids[0]);<br>
        &nbsp;&nbsp;&nbsp; t0-&gt;GetPointIds()-&gt;SetId ( 1, ids[1]);<br>
        &nbsp;&nbsp;&nbsp; t0-&gt;GetPointIds()-&gt;SetId ( 2, ids[2]);<br>
        &nbsp;&nbsp;&nbsp; triangles-&gt;InsertNextCell ( t0 );<br>
        &nbsp;&nbsp;&nbsp; vtkSmartPointer&lt;vtkTriangle&gt; t1 =
        vtkSmartPointer&lt;vtkTriangle&gt;::New();<br>
        &nbsp;&nbsp;&nbsp; t1-&gt;GetPointIds()-&gt;SetId ( 0, ids[0]);<br>
        &nbsp;&nbsp;&nbsp; t1-&gt;GetPointIds()-&gt;SetId ( 1, ids[2]);<br>
        &nbsp;&nbsp;&nbsp; t1-&gt;GetPointIds()-&gt;SetId ( 2, ids[3]);<br>
        &nbsp;&nbsp;&nbsp; triangles-&gt;InsertNextCell ( t1 );<br>
        &nbsp;&nbsp;&nbsp; vtkSmartPointer&lt;vtkTriangle&gt; t2 =
        vtkSmartPointer&lt;vtkTriangle&gt;::New();<br>
        &nbsp;&nbsp;&nbsp; t2-&gt;GetPointIds()-&gt;SetId ( 0, ids[1]);<br>
        &nbsp;&nbsp;&nbsp; t2-&gt;GetPointIds()-&gt;SetId ( 1, ids[5]);<br>
        &nbsp;&nbsp;&nbsp; t2-&gt;GetPointIds()-&gt;SetId ( 2, ids[2]);<br>
        &nbsp;&nbsp;&nbsp; triangles-&gt;InsertNextCell ( t2 );<br>
        &nbsp;&nbsp;&nbsp; vtkSmartPointer&lt;vtkTriangle&gt; t3 =
        vtkSmartPointer&lt;vtkTriangle&gt;::New();<br>
        &nbsp;&nbsp;&nbsp; t3-&gt;GetPointIds()-&gt;SetId ( 0, ids[2]);<br>
        &nbsp;&nbsp;&nbsp; t3-&gt;GetPointIds()-&gt;SetId ( 1, ids[5]);<br>
        &nbsp;&nbsp;&nbsp; t3-&gt;GetPointIds()-&gt;SetId ( 2, ids[6]);<br>
        &nbsp;&nbsp;&nbsp; triangles-&gt;InsertNextCell ( t3 );<br>
        &nbsp;&nbsp;&nbsp; vtkSmartPointer&lt;vtkTriangle&gt; t4 =
        vtkSmartPointer&lt;vtkTriangle&gt;::New();<br>
        &nbsp;&nbsp;&nbsp; t4-&gt;GetPointIds()-&gt;SetId ( 0, ids[2]);<br>
        &nbsp;&nbsp;&nbsp; t4-&gt;GetPointIds()-&gt;SetId ( 1, ids[6]);<br>
        &nbsp;&nbsp;&nbsp; t4-&gt;GetPointIds()-&gt;SetId ( 2, ids[7]);<br>
        &nbsp;&nbsp;&nbsp; triangles-&gt;InsertNextCell ( t4 );<br>
        &nbsp;&nbsp;&nbsp; vtkSmartPointer&lt;vtkTriangle&gt; t5 =
        vtkSmartPointer&lt;vtkTriangle&gt;::New();<br>
        &nbsp;&nbsp;&nbsp; t5-&gt;GetPointIds()-&gt;SetId ( 0, ids[2]);<br>
        &nbsp;&nbsp;&nbsp; t5-&gt;GetPointIds()-&gt;SetId ( 1, ids[7]);<br>
        &nbsp;&nbsp;&nbsp; t5-&gt;GetPointIds()-&gt;SetId ( 2, ids[3]);<br>
        &nbsp;&nbsp;&nbsp; triangles-&gt;InsertNextCell ( t5 );<br>
        &nbsp;&nbsp;&nbsp; vtkSmartPointer&lt;vtkTriangle&gt; t6 =
        vtkSmartPointer&lt;vtkTriangle&gt;::New();<br>
        &nbsp;&nbsp;&nbsp; t6-&gt;GetPointIds()-&gt;SetId ( 0, ids[3]);<br>
        &nbsp;&nbsp;&nbsp; t6-&gt;GetPointIds()-&gt;SetId ( 1, ids[7]);<br>
        &nbsp;&nbsp;&nbsp; t6-&gt;GetPointIds()-&gt;SetId ( 2, ids[4]);<br>
        &nbsp;&nbsp;&nbsp; triangles-&gt;InsertNextCell ( t6 );<br>
        &nbsp;&nbsp;&nbsp; vtkSmartPointer&lt;vtkTriangle&gt; t7 =
        vtkSmartPointer&lt;vtkTriangle&gt;::New();<br>
        &nbsp;&nbsp;&nbsp; t7-&gt;GetPointIds()-&gt;SetId ( 0, ids[4]);<br>
        &nbsp;&nbsp;&nbsp; t7-&gt;GetPointIds()-&gt;SetId ( 1, ids[3]);<br>
        &nbsp;&nbsp;&nbsp; t7-&gt;GetPointIds()-&gt;SetId ( 2, ids[0]);<br>
        &nbsp;&nbsp;&nbsp; triangles-&gt;InsertNextCell ( t7 );<br>
        &nbsp;&nbsp;&nbsp; vtkSmartPointer&lt;vtkTriangle&gt; t8 =
        vtkSmartPointer&lt;vtkTriangle&gt;::New();<br>
        &nbsp;&nbsp;&nbsp; t8-&gt;GetPointIds()-&gt;SetId ( 0, ids[0]);<br>
        &nbsp;&nbsp;&nbsp; t8-&gt;GetPointIds()-&gt;SetId ( 1, ids[4]);<br>
        &nbsp;&nbsp;&nbsp; t8-&gt;GetPointIds()-&gt;SetId ( 2, ids[5]);<br>
        &nbsp;&nbsp;&nbsp; triangles-&gt;InsertNextCell ( t8 );<br>
        &nbsp;&nbsp;&nbsp; vtkSmartPointer&lt;vtkTriangle&gt; t9 =
        vtkSmartPointer&lt;vtkTriangle&gt;::New();<br>
        &nbsp;&nbsp;&nbsp; t9-&gt;GetPointIds()-&gt;SetId ( 0, ids[0]);<br>
        &nbsp;&nbsp;&nbsp; t9-&gt;GetPointIds()-&gt;SetId ( 1, ids[1]);<br>
        &nbsp;&nbsp;&nbsp; t9-&gt;GetPointIds()-&gt;SetId ( 2, ids[5]);<br>
        &nbsp;&nbsp;&nbsp; triangles-&gt;InsertNextCell ( t9);<br>
        &nbsp;&nbsp;&nbsp; vtkSmartPointer&lt;vtkTriangle&gt; t10 =
        vtkSmartPointer&lt;vtkTriangle&gt;::New();<br>
        &nbsp;&nbsp;&nbsp; t10-&gt;GetPointIds()-&gt;SetId ( 0, ids[6]);<br>
        &nbsp;&nbsp;&nbsp; t10-&gt;GetPointIds()-&gt;SetId ( 1, ids[5]);<br>
        &nbsp;&nbsp;&nbsp; t10-&gt;GetPointIds()-&gt;SetId ( 2, ids[4]);<br>
        &nbsp;&nbsp;&nbsp; triangles-&gt;InsertNextCell ( t10);<br>
        &nbsp;&nbsp;&nbsp; vtkSmartPointer&lt;vtkTriangle&gt; t11 =
        vtkSmartPointer&lt;vtkTriangle&gt;::New();<br>
        &nbsp;&nbsp;&nbsp; t11-&gt;GetPointIds()-&gt;SetId ( 0, ids[7]);
        t11-&gt;GetPointIds()-&gt;SetId ( 1, ids[6]);
        t11-&gt;GetPointIds()-&gt;SetId ( 2, ids[4]);<br>
        &nbsp;&nbsp;&nbsp; triangles-&gt;InsertNextCell ( t11);<br>
        <br>
        &nbsp;&nbsp;&nbsp; bloc-&gt;BuildLinks();<br>
        <br>
        &nbsp;&nbsp;&nbsp; // boolean filter<br>
        &nbsp;&nbsp;&nbsp; vtkSmartPointer&lt;vtkBooleanOperationPolyDataFilter&gt;
        booleanOperation =
        vtkSmartPointer&lt;vtkBooleanOperationPolyDataFilter&gt;::New();<br>
        &nbsp;&nbsp;&nbsp; booleanOperation-&gt;SetOperationToDifference();<br>
        &nbsp;&nbsp;&nbsp; booleanOperation-&gt;SetInputConnection( 1,&nbsp;
        sphere-&gt;GetProducerPort());<br>
        &nbsp;&nbsp;&nbsp; booleanOperation-&gt;SetInputConnection( 0,&nbsp;
        bloc-&gt;GetProducerPort());<br>
        &nbsp;&nbsp;&nbsp; booleanOperation-&gt;Update();<br>
        <br>
        &nbsp;&nbsp;&nbsp; //display result<br>
        &nbsp;&nbsp;&nbsp; vtkSmartPointer&lt;vtkRenderer&gt; renderer =
        vtkSmartPointer&lt;vtkRenderer&gt;::New();<br>
        &nbsp;&nbsp;&nbsp; vtkSmartPointer&lt;vtkPolyDataMapper&gt; mapper =
        vtkSmartPointer&lt;vtkPolyDataMapper&gt;::New();<br>
        &nbsp;&nbsp;&nbsp; mapper-&gt;SetInput(booleanOperation-&gt;GetOutput());<br>
        &nbsp;&nbsp;&nbsp; vtkSmartPointer&lt;vtkActor&gt; actor =
        vtkSmartPointer&lt;vtkActor&gt;::New();<br>
        &nbsp;&nbsp;&nbsp; actor-&gt;SetMapper(mapper);<br>
        <br>
        &nbsp;&nbsp;&nbsp; renderer-&gt;AddActor( actor);<br>
        <br>
        &nbsp;&nbsp;&nbsp; vtkSmartPointer&lt;vtkRenderWindow&gt; rendWindow =
        vtkSmartPointer&lt;vtkRenderWindow&gt;::New();<br>
        &nbsp;&nbsp;&nbsp; rendWindow-&gt;AddRenderer(renderer);<br>
        <br>
        &nbsp;&nbsp;&nbsp; vtkSmartPointer&lt;vtkRenderWindowInteractor&gt; iren =
        vtkSmartPointer&lt;vtkRenderWindowInteractor&gt;::New();<br>
        &nbsp;&nbsp;&nbsp; iren-&gt;SetRenderWindow( rendWindow);<br>
        <br>
        &nbsp;&nbsp;&nbsp; renderer-&gt;ResetCamera();<br>
        &nbsp;&nbsp;&nbsp; rendWindow-&gt;Render();<br>
        &nbsp;&nbsp;&nbsp; iren-&gt;Start();<br>
        <br>
        &nbsp;&nbsp;&nbsp; return 0;<br>
        }<br>
        <br>
        ##############<br>
      </font></font>
  </body>
</html>