]> Creatis software - creaVtk.git/commitdiff
#3518 BooleanOperationPolyDataFilter Replace option
authorEduardo DAVILA <davila@creatis.insa-lyon.fr>
Mon, 28 Aug 2023 11:11:30 +0000 (13:11 +0200)
committerEduardo DAVILA <davila@creatis.insa-lyon.fr>
Mon, 28 Aug 2023 11:11:30 +0000 (13:11 +0200)
bbtk_creaVtk_PKG/src/bbcreaVtkBooleanOperationPolyDataFilter.cxx
bbtk_creaVtk_PKG/src/bbcreaVtkBooleanOperationPolyDataFilter.h

index 963ab8bc988f39abec089fd7e96779419838e427..f806b26e59f5a0c50572a6d994db7bd281718d65 100644 (file)
@@ -38,84 +38,79 @@ void BooleanOperationPolyDataFilter::Process()
 //    bbSetOutputOut( bbGetInputIn() );
 //    std::cout << "Output value = " <<bbGetOutputOut() << std::endl;
   
-    printf("EED BooleanOperationPolyDataFilter::Process \n");
-    
-       if ((bbGetInputIn1()!=NULL)  && (bbGetInputIn2()!=NULL) )
-       {
-       //TRIANGLE FILTER NOT NEEDED, this can handle non triangle meshes.
-       
+    if ((bbGetInputOperation()>=0) && (bbGetInputOperation()<=2)) // 0:Union   1:Intersection   2:Difference
+    {
 
-//  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, triangle1->GetOutput() );
-//        booleanOperation->SetInputData(1, triangle2->GetOutput() );
-
-        booleanOperation->SetInputData(0, bbGetInputIn1() );
-        booleanOperation->SetInputData(1, bbGetInputIn2() );
-
-        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();
-
-        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() );
+            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 );
-        } // if points!=NULL
-        
-       } else {
+            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 );
-               printf("EED Warnning!  BooleanOperationPolyDataFilter::Process   vtkPolyData In1 or In2  is EMPTY\n");
-       } // if In1 In2 != NULL
+    } // if  Operation
 }
 
 //===== 
index 0b7ea8479c5617cf32c69335398775baa6bbf2da..873a5066d1c87c219aaf4fff0aa20e3040939078 100644 (file)
@@ -41,7 +41,7 @@ BBTK_BEGIN_DESCRIBE_BLACK_BOX(BooleanOperationPolyDataFilter,bbtk::AtomicBlackBo
 
     BBTK_INPUT(BooleanOperationPolyDataFilter,In1,"vtkPolyData",vtkPolyData*,"");
     BBTK_INPUT(BooleanOperationPolyDataFilter,In2,"vtkPolyData",vtkPolyData*,"");
-    BBTK_INPUT(BooleanOperationPolyDataFilter,Operation,"(defalut 0) 0:Union 1:Intersection 2:Difference",int,"");
+    BBTK_INPUT(BooleanOperationPolyDataFilter,Operation,"(defalut 0) 0:Union 1:Intersection 2:Difference 3:Replace",int,"");
     BBTK_INPUT(BooleanOperationPolyDataFilter,ReorientDifferenceCells,"(defalut true) With Operation 2:Difference   Reorient Difference Cells",bool,"");
 
   BBTK_OUTPUT(BooleanOperationPolyDataFilter,Out,"vtkPolyData",vtkPolyData*,"");