From 61bb39eb134c852b99bfc381f8635d9387db5177 Mon Sep 17 00:00:00 2001 From: Eduardo DAVILA Date: Mon, 28 Aug 2023 13:11:30 +0200 Subject: [PATCH] #3518 BooleanOperationPolyDataFilter Replace option --- ...bcreaVtkBooleanOperationPolyDataFilter.cxx | 137 +++++++++--------- .../bbcreaVtkBooleanOperationPolyDataFilter.h | 2 +- 2 files changed, 67 insertions(+), 72 deletions(-) diff --git a/bbtk_creaVtk_PKG/src/bbcreaVtkBooleanOperationPolyDataFilter.cxx b/bbtk_creaVtk_PKG/src/bbcreaVtkBooleanOperationPolyDataFilter.cxx index 963ab8b..f806b26 100644 --- a/bbtk_creaVtk_PKG/src/bbcreaVtkBooleanOperationPolyDataFilter.cxx +++ b/bbtk_creaVtk_PKG/src/bbcreaVtkBooleanOperationPolyDataFilter.cxx @@ -38,84 +38,79 @@ void BooleanOperationPolyDataFilter::Process() // bbSetOutputOut( bbGetInputIn() ); // std::cout << "Output value = " <=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 } //===== diff --git a/bbtk_creaVtk_PKG/src/bbcreaVtkBooleanOperationPolyDataFilter.h b/bbtk_creaVtk_PKG/src/bbcreaVtkBooleanOperationPolyDataFilter.h index 0b7ea84..873a506 100644 --- a/bbtk_creaVtk_PKG/src/bbcreaVtkBooleanOperationPolyDataFilter.h +++ b/bbtk_creaVtk_PKG/src/bbcreaVtkBooleanOperationPolyDataFilter.h @@ -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*,""); -- 2.47.1