X-Git-Url: https://git.creatis.insa-lyon.fr/pubgit/?a=blobdiff_plain;f=bbtk_creaVtk_PKG%2Fsrc%2FbbcreaVtkBooleanOperationPolyDataFilter.cxx;h=f610d86ac5c7b249268a24a67a14d9acea0f8e44;hb=54fe3ece5a0a52236ba68d53438af7055e2c75b7;hp=3daea3442b25456357365b688b0ef28ffb411ff2;hpb=920b2d8a3c9fcd60c21ba7474242d21e6f3df635;p=creaVtk.git diff --git a/bbtk_creaVtk_PKG/src/bbcreaVtkBooleanOperationPolyDataFilter.cxx b/bbtk_creaVtk_PKG/src/bbcreaVtkBooleanOperationPolyDataFilter.cxx index 3daea34..f610d86 100644 --- a/bbtk_creaVtk_PKG/src/bbcreaVtkBooleanOperationPolyDataFilter.cxx +++ b/bbtk_creaVtk_PKG/src/bbcreaVtkBooleanOperationPolyDataFilter.cxx @@ -6,9 +6,11 @@ // #include "vtkBooleanOperationPolyDataFilter.h" #include "vtkPolyDataBooleanFilter.h" +#include "vtkPoints.h" #include "vtkCleanPolyData.h" #include "vtkTriangleFilter.h" +#include "vtkFillHolesFilter.h" namespace bbcreaVtk @@ -38,31 +40,20 @@ void BooleanOperationPolyDataFilter::Process() if ((bbGetInputIn1()!=NULL) && (bbGetInputIn2()!=NULL) ) { + //TRIANGLE FILTER NOT NEEDED, this can handle non triangle meshes. + -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 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, triangle1->GetOutput() ); +// booleanOperation->SetInputData(1, triangle2->GetOutput() ); + + booleanOperation->SetInputData(0, bbGetInputIn1() ); + booleanOperation->SetInputData(1, bbGetInputIn2() ); + if (bbGetInputOperation()==0 ) { booleanOperation->SetOperModeToUnion(); @@ -95,9 +86,32 @@ printf("EED Warnning BooleanOperationPolyDataFilter::Process Put this code at t } */ - booleanOperation->Update(); - 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 ); printf("EED Warnning! BooleanOperationPolyDataFilter::Process vtkPolyData In1 or In2 is EMPTY\n"); } // if In1 In2 != NULL }