]> Creatis software - creaVtk.git/blobdiff - bbtk_creaVtk_PKG/src/bbcreaVtkBooleanOperationPolyDataFilter.cxx
Python
[creaVtk.git] / bbtk_creaVtk_PKG / src / bbcreaVtkBooleanOperationPolyDataFilter.cxx
index 3daea3442b25456357365b688b0ef28ffb411ff2..f806b26e59f5a0c50572a6d994db7bd281718d65 100644 (file)
@@ -6,9 +6,11 @@
 
 // #include "vtkBooleanOperationPolyDataFilter.h"
 #include "vtkPolyDataBooleanFilter.h"
+#include "vtkPoints.h"
 
 #include "vtkCleanPolyData.h"
 #include "vtkTriangleFilter.h"
+#include "vtkFillHolesFilter.h"
 
 
 namespace bbcreaVtk
@@ -36,70 +38,79 @@ void BooleanOperationPolyDataFilter::Process()
 //    bbSetOutputOut( bbGetInputIn() );
 //    std::cout << "Output value = " <<bbGetOutputOut() << std::endl;
   
-       if ((bbGetInputIn1()!=NULL)  && (bbGetInputIn2()!=NULL) )
-       {
+    if ((bbGetInputOperation()>=0) && (bbGetInputOperation()<=2)) // 0:Union   1:Intersection   2:Difference
+    {
 
-printf("EED Warnning BooleanOperationPolyDataFilter::Process  Put this code at the end of CreateMesh.. or create 2 new boxes\n");
-printf("EED Warnning BooleanOperationPolyDataFilter::Process  Put this code at the end of CreateMesh.. or create 2 new boxes\n");
-printf("EED Warnning BooleanOperationPolyDataFilter::Process  Put this code at the end of CreateMesh.. or create 2 new boxes\n");
-printf("EED Warnning BooleanOperationPolyDataFilter::Process  Put this code at the end of CreateMesh.. or create 2 new boxes\n");
-printf("EED Warnning BooleanOperationPolyDataFilter::Process  Put this code at the end of CreateMesh.. or create 2 new boxes\n");
-printf("EED Warnning BooleanOperationPolyDataFilter::Process  Put this code at the end of CreateMesh.. or create 2 new boxes\n");
-printf("EED Warnning BooleanOperationPolyDataFilter::Process  Put this code at the end of CreateMesh.. or create 2 new boxes\n");
-printf("EED Warnning BooleanOperationPolyDataFilter::Process  Put this code at the end of CreateMesh.. or create 2 new boxes\n");
-               vtkCleanPolyData *clean1 = vtkCleanPolyData::New();
-               vtkCleanPolyData *clean2 = vtkCleanPolyData::New();
-               clean1->SetInputData( bbGetInputIn1() );
-               clean2->SetInputData( bbGetInputIn2() );
-               clean1->Update();
-               clean2->Update();
-               vtkTriangleFilter *triangle1 = vtkTriangleFilter::New();
-               vtkTriangleFilter *triangle2 = vtkTriangleFilter::New();
-               triangle1->SetInputData( clean1->GetOutput() );
-               triangle2->SetInputData( clean2->GetOutput() );
-               triangle1->Update();
-               triangle2->Update();
-
-        vtkPolyDataBooleanFilter *booleanOperation = vtkPolyDataBooleanFilter::New();
-        booleanOperation->SetInputData(0, triangle1->GetOutput() );
-        booleanOperation->SetInputData(1, triangle2->GetOutput() );
-        if (bbGetInputOperation()==0 )
-        {
-            booleanOperation->SetOperModeToUnion();
-        }
-        if (bbGetInputOperation()==1 )
+        if ((bbGetInputIn1()!=NULL)  && (bbGetInputIn2()!=NULL) )
         {
-            booleanOperation->SetOperModeToIntersection();
-        }
-        if (bbGetInputOperation()==2 )
-        {
-            booleanOperation->SetOperModeToDifference();
-        }
-
+            //TRIANGLE FILTER NOT NEEDED, this can handle non triangle meshes.
+            //  vtkPolyDataBooleanFilter  is not a vtk filter   (this one yes: vtkBooleanOperationPolyDataFilter )
+            
+            //   https://github.com/zippy84/vtkbool
+            //  vtkPolyDataBooleanFilter is a local code creaVtk lib
+            vtkPolyDataBooleanFilter *booleanOperation = vtkPolyDataBooleanFilter::New();
+            booleanOperation->SetInputData(0, bbGetInputIn1() );
+            booleanOperation->SetInputData(1, bbGetInputIn2() );
+            if (bbGetInputOperation()==0 )
+            {
+                booleanOperation->SetOperModeToUnion();
+            }
+            if (bbGetInputOperation()==1 )
+            {
+                booleanOperation->SetOperModeToIntersection();
+            }
+            if (bbGetInputOperation()==2 )
+            {
+                booleanOperation->SetOperModeToDifference();
+            }
 /*
-               vtkBooleanOperationPolyDataFilter *booleanOperation = vtkBooleanOperationPolyDataFilter::New();
-               booleanOperation->SetInputData(0, triangle1->GetOutput() );
-               booleanOperation->SetInputData(1, triangle2->GetOutput() );
-               if (bbGetInputOperation()==0 )
-               {
-                       booleanOperation->SetOperationToUnion();
-               }
-               if (bbGetInputOperation()==1 )
-               {
-            booleanOperation->SetOperationToIntersection();
-               }
-               if (bbGetInputOperation()==2 )
-               {
-            booleanOperation->SetOperationToDifference();
-            booleanOperation->SetReorientDifferenceCells( bbGetInputReorientDifferenceCells() );
-        }
+            vtkBooleanOperationPolyDataFilter *booleanOperation = vtkBooleanOperationPolyDataFilter::New();
+            booleanOperation->SetInputData(0, triangle1->GetOutput() );
+            booleanOperation->SetInputData(1, triangle2->GetOutput() );
+            if (bbGetInputOperation()==0 )
+            {
+                booleanOperation->SetOperationToUnion();
+            }
+            if (bbGetInputOperation()==1 )
+            {
+                booleanOperation->SetOperationToIntersection();
+            }
+            if (bbGetInputOperation()==2 )
+            {
+                booleanOperation->SetOperationToDifference();
+                booleanOperation->SetReorientDifferenceCells( bbGetInputReorientDifferenceCells() );
+            }
  */
-        
-               booleanOperation->Update();
-               bbSetOutputOut( booleanOperation->GetOutput() );
-       } else {
-               printf("EED Warnning!  BooleanOperationPolyDataFilter::Process   vtkPolyData In1 or In2  is EMPTY\n");
-       } // if In1 In2 != NULL
+            booleanOperation->Update();
+            vtkPoints *points = booleanOperation->GetOutput()->GetPoints();
+            if (points!=NULL)
+            {
+//              vtkFillHolesFilter *fillHolesFilter = vtkFillHolesFilter::New();
+//              fillHolesFilter->SetInputData( booleanOperation->GetOutput() );
+//              fillHolesFilter->SetHoleSize(100000.0);
+//              fillHolesFilter->Update();
+//              bbSetOutputOut( fillHolesFilter->GetOutput() );
+                /*
+                 *Added boxes(triangleFilter and CleanPolyData) to handle this outside the box
+                 *
+                    vtkTriangleFilter *triangleEnd = vtkTriangleFilter::New();
+                    vtkCleanPolyData *cleanEnd = vtkCleanPolyData::New();
+                    bbSetOutputOut( cleanEnd->GetOutput() );
+                 */
+                bbSetOutputOut( booleanOperation->GetOutput() );
+            } else {
+                bbSetOutputOut( NULL );
+            } // if points!=NULL
+        } else {
+            bbSetOutputOut( NULL );
+            printf("EED Warnning!  BooleanOperationPolyDataFilter::Process   vtkPolyData In1 or In2  is EMPTY\n");
+        } // if In1 In2 != NULL
+    } else if ( bbGetInputOperation()==3) // 3:Replace
+    {
+        bbSetOutputOut( bbGetInputIn2() );
+    } else {
+        bbSetOutputOut( NULL );
+    } // if  Operation
 }
 
 //=====