X-Git-Url: https://git.creatis.insa-lyon.fr/pubgit/?a=blobdiff_plain;ds=sidebyside;f=bbtk_creaVtk_PKG%2Fsrc%2FbbcreaVtkBooleanOperationPolyDataFilter.cxx;h=f806b26e59f5a0c50572a6d994db7bd281718d65;hb=61bb39eb134c852b99bfc381f8635d9387db5177;hp=6cb69d57990c780c5a9780163efb5624f72ba075;hpb=ccd9515764b83d719668120ccf8496a8fc6e804b;p=creaVtk.git diff --git a/bbtk_creaVtk_PKG/src/bbcreaVtkBooleanOperationPolyDataFilter.cxx b/bbtk_creaVtk_PKG/src/bbcreaVtkBooleanOperationPolyDataFilter.cxx index 6cb69d5..f806b26 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 @@ -36,111 +38,117 @@ void BooleanOperationPolyDataFilter::Process() // bbSetOutputOut( bbGetInputIn() ); // std::cout << "Output value = " <=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 ) - { - booleanOperation->SetOperModeToIntersection(); - } - if (bbGetInputOperation()==2 ) + if ((bbGetInputIn1()!=NULL) && (bbGetInputIn2()!=NULL) ) { - 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 } + //===== // Before editing this file, make sure it's a file of your own (i.e.: it wasn't generated from xml description; if so : your modifications will be lost) //===== void BooleanOperationPolyDataFilter::bbUserSetDefaultValues() { - // SET HERE THE DEFAULT INPUT/OUTPUT VALUES OF YOUR BOX // Here we initialize the input 'In' to 0 bbSetInputIn1(NULL); bbSetInputIn2(NULL); bbSetInputOperation(0); bbSetInputReorientDifferenceCells(true); - + bbSetOutputOut(NULL); } + //===== // Before editing this file, make sure it's a file of your own (i.e.: it wasn't generated from xml description; if so : your modifications will be lost) //===== void BooleanOperationPolyDataFilter::bbUserInitializeProcessing() { - // THE INITIALIZATION METHOD BODY : // Here does nothing // but this is where you should allocate the internal/output pointers -// if any - - +// if any } + //===== // Before editing this file, make sure it's a file of your own (i.e.: it wasn't generated from xml description; if so : your modifications will be lost) //===== void BooleanOperationPolyDataFilter::bbUserFinalizeProcessing() { - // THE FINALIZATION METHOD BODY : // Here does nothing // but this is where you should desallocate the internal/output pointers // if any - } -} -// EO namespace bbcreaVtk + +} // EO namespace bbcreaVtk