From ff4cb75de719557cee66c8f559a2cc871e180ebc Mon Sep 17 00:00:00 2001 From: Pablo Garzon Date: Thu, 11 May 2023 14:45:22 +0200 Subject: [PATCH] #3505 Split Meshes --- .../bbcreaVtkPolyDataConnectivityFilter.cxx | 93 +++++++++++++++++++ .../src/bbcreaVtkPolyDataConnectivityFilter.h | 52 +++++++++++ 2 files changed, 145 insertions(+) create mode 100644 bbtk_creaVtk_PKG/src/bbcreaVtkPolyDataConnectivityFilter.cxx create mode 100644 bbtk_creaVtk_PKG/src/bbcreaVtkPolyDataConnectivityFilter.h diff --git a/bbtk_creaVtk_PKG/src/bbcreaVtkPolyDataConnectivityFilter.cxx b/bbtk_creaVtk_PKG/src/bbcreaVtkPolyDataConnectivityFilter.cxx new file mode 100644 index 0000000..fdce1f4 --- /dev/null +++ b/bbtk_creaVtk_PKG/src/bbcreaVtkPolyDataConnectivityFilter.cxx @@ -0,0 +1,93 @@ +//===== +// 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) +//===== +#include "bbcreaVtkPolyDataConnectivityFilter.h" +#include "bbcreaVtkPackage.h" +namespace bbcreaVtk +{ + +BBTK_ADD_BLACK_BOX_TO_PACKAGE(creaVtk,PolyDataConnectivityFilter) +BBTK_BLACK_BOX_IMPLEMENTATION(PolyDataConnectivityFilter,bbtk::AtomicBlackBox); +//===== +// 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 PolyDataConnectivityFilter::Process() +{ + +// THE MAIN PROCESSING METHOD BODY +// Here we simply set the input 'In' value to the output 'Out' +// And print out the output value +// INPUT/OUTPUT ACCESSORS ARE OF THE FORM : +// void bbSet{Input|Output}NAME(const TYPE&) +// const TYPE& bbGet{Input|Output}NAME() const +// Where : +// * NAME is the name of the input/output +// (the one provided in the attribute 'name' of the tag 'input') +// * TYPE is the C++ type of the input/output +// (the one provided in the attribute 'type' of the tag 'input') + + //Get all connected components in a polydata vector + if(bbGetInputIn() == NULL){ + printf("PG PolyDataConnectivityFilter::Process Input polydata is null \n"); + return; + } + + if(bbGetInputType() == 1){ + std::vector output; + connFilter->SetInputData( bbGetInputIn() ); + connFilter->SetExtractionModeToSpecifiedRegions(); + connFilter->Update(); + vtkPolyData *component; + int numRegions = connFilter->GetNumberOfExtractedRegions(); + + for(int i = 0; i < numRegions; i++){ + connFilter->AddSpecifiedRegion(i); + connFilter->Update(); + component = vtkPolyData::New(); + component->DeepCopy(connFilter->GetOutput()); + output.push_back(component); + connFilter->DeleteSpecifiedRegion(i); + } + + bbSetOutputOut(output); + } +} +//===== +// 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 PolyDataConnectivityFilter::bbUserSetDefaultValues() +{ + +// SET HERE THE DEFAULT INPUT/OUTPUT VALUES OF YOUR BOX +// Here we initialize the input 'In' to 0 + connFilter = 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 PolyDataConnectivityFilter::bbUserInitializeProcessing() +{ + +// THE INITIALIZATION METHOD BODY : +// Here does nothing +// but this is where you should allocate the internal/output pointers +// if any + connFilter = vtkPolyDataConnectivityFilter::New(); + +} +//===== +// 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 PolyDataConnectivityFilter::bbUserFinalizeProcessing() +{ + +// THE FINALIZATION METHOD BODY : +// Here does nothing +// but this is where you should desallocate the internal/output pointers +// if any + +} +} +// EO namespace bbcreaVtk + + diff --git a/bbtk_creaVtk_PKG/src/bbcreaVtkPolyDataConnectivityFilter.h b/bbtk_creaVtk_PKG/src/bbcreaVtkPolyDataConnectivityFilter.h new file mode 100644 index 0000000..d9547d4 --- /dev/null +++ b/bbtk_creaVtk_PKG/src/bbcreaVtkPolyDataConnectivityFilter.h @@ -0,0 +1,52 @@ +//===== +// 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) +//===== +#ifndef __bbcreaVtkPolyDataConnectivityFilter_h_INCLUDED__ +#define __bbcreaVtkPolyDataConnectivityFilter_h_INCLUDED__ + +#include "bbcreaVtk_EXPORT.h" +#include "bbtkAtomicBlackBox.h" +#include "iostream" +#include +#include + +namespace bbcreaVtk +{ + +class bbcreaVtk_EXPORT PolyDataConnectivityFilter + : + public bbtk::AtomicBlackBox +{ + BBTK_BLACK_BOX_INTERFACE(PolyDataConnectivityFilter,bbtk::AtomicBlackBox); +//===== +// 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) +//===== + BBTK_DECLARE_INPUT(In,vtkPolyData*); + BBTK_DECLARE_INPUT(Type,int); + BBTK_DECLARE_OUTPUT(Out,std::vector); + BBTK_PROCESS(Process); + void Process(); + + vtkPolyDataConnectivityFilter *connFilter; +//===== +// 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) +//===== +}; + +BBTK_BEGIN_DESCRIBE_BLACK_BOX(PolyDataConnectivityFilter,bbtk::AtomicBlackBox); +BBTK_NAME("PolyDataConnectivityFilter"); +BBTK_AUTHOR("InfoDev"); +BBTK_DESCRIPTION("No Description."); +BBTK_CATEGORY("empty"); +BBTK_INPUT(PolyDataConnectivityFilter,In,"Input polydata",vtkPolyData*,""); +BBTK_INPUT(PolyDataConnectivityFilter,Type,"0: nothing, 1: Extract all connected regions",int,""); +BBTK_OUTPUT(PolyDataConnectivityFilter,Out,"output polydatas",std::vector,""); +BBTK_END_DESCRIBE_BLACK_BOX(PolyDataConnectivityFilter); +//===== +// 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) +//===== +} +// EO namespace bbcreaVtk + +#endif // __bbcreaVtkPolyDataConnectivityFilter_h_INCLUDED__ + -- 2.45.1