From 70204b7a1f57d8fffb2b77fd3feae6b07ae931dd Mon Sep 17 00:00:00 2001 From: Eduardo DAVILA Date: Fri, 30 Jun 2023 17:52:24 +0200 Subject: [PATCH] Clean code --- .../src/bbcreaVtkCleanMeshWithPatch.cxx | 102 ++++++++++++++---- 1 file changed, 84 insertions(+), 18 deletions(-) diff --git a/bbtk_creaVtk_PKG/src/bbcreaVtkCleanMeshWithPatch.cxx b/bbtk_creaVtk_PKG/src/bbcreaVtkCleanMeshWithPatch.cxx index 2cdb49b..f717109 100644 --- a/bbtk_creaVtk_PKG/src/bbcreaVtkCleanMeshWithPatch.cxx +++ b/bbtk_creaVtk_PKG/src/bbcreaVtkCleanMeshWithPatch.cxx @@ -7,7 +7,17 @@ #include #include #include -#include +#include +#include +#include +#include +#include +#include +#include + + +// #include + namespace bbcreaVtk { @@ -33,7 +43,6 @@ void CleanMeshWithPatch::Process() // bbSetOutputOut( bbGetInputIn() ); // std::cout << "Output value = " < lstIndexs = bbGetInputLstIndexs(); if (( lstIndexs.size()>=3 ) && (bbGetInputMesh()!=NULL) ) { @@ -104,25 +113,24 @@ void CleanMeshWithPatch::Process() pointLocator->BuildLocator(); long int id; size=perimeterX.size(); - std::vector lstIds; + std::vector lstIdsCtrlPoints; for (i=0;iFindClosestPoint( perimeterX[i]*spc[0] ,perimeterY[i]*spc[1] , perimeterZ[i]*spc[2] ) ; - lstIds.push_back( id ); - printf("EED id=%ld spc=%f %f %f point=%f %f %f \n",id, spc[0],spc[1],spc[2], perimeterX[i], perimeterY[i], perimeterZ[i] ); + lstIdsCtrlPoints.push_back( id ); } // for i perimeter // Step 3 Get geodesic path from segments long int id1,id2; - vtkAppendPolyData* append = vtkAppendPolyData::New(); - vtkPoints *points ; + std::vector lstIdsGeodesicPerimter; + vtkAppendPolyData* append = vtkAppendPolyData::New(); for (i=0;iSetInputData( bbGetInputMesh() ); @@ -131,14 +139,73 @@ void CleanMeshWithPatch::Process() pathFilter->Update(); append->AddInputData( pathFilter->GetOutput() ); append->Update(); - - points = pathFilter->GetOutput()->GetPoints(); - printf("EED nrP=%d \n", points->GetNumberOfPoints() ); + + // Step 3.1 Puts ids of perimeter Subsegment in vector lstIdsGeodesicPerimter + vtkIdList *IdsList = pathFilter->GetIdList(); + long int iIdLst,sizeIdLst = IdsList->GetNumberOfIds(); + for (iIdLst=0; iIdLstGetId(iIdLst) ); + }// for iIdLst + pathFilter->Delete(); -// if (i==0) bbSetOutputOut( pathFilter->GetOutput() ); } // for i perimeter append->Update(); +// bbSetOutputOut( append->GetOutput() ); + + // Step 4. -- Define scalars --- + vtkCharArray *scalarsArray = vtkCharArray::New(); + vtkPoints *points = bbGetInputMesh()->GetPoints(); + long int iMPs,sizeMPs = points->GetNumberOfPoints(); + scalarsArray->SetNumberOfValues(sizeMPs); + for (iMPs=0; iMPsSetValue(iMPs,15); + } // for iMPs + long int iIdLst,sizeIdLst = lstIdsGeodesicPerimter.size(); + for (iIdLst=0; iIdLstSetValue( lstIdsGeodesicPerimter[iIdLst] ,100 ); + }// for iIdLst + scalarsArray->SetName("scalarsPerimeterPatch"); + bbGetInputMesh()->GetPointData()->AddArray( scalarsArray ); + bbGetInputMesh()->GetPointData()->SetActiveScalars( "scalarsPerimeterPatch" ); + bbGetInputMesh()->GetCellData()->SetActiveScalars( "scalarsPerimeterPatch" ); + + // Step 5. -- Connectivity Filter + vtkPolyDataConnectivityFilter *connectivity = vtkPolyDataConnectivityFilter::New(); + connectivity->SetInputData( bbGetInputMesh() ); + connectivity->SetExtractionModeToCellSeededRegions(); + connectivity->InitializeSeedList(); + connectivity->AddSeed(0); + connectivity->SetScalarConnectivity(true); + connectivity->SetScalarRange(10,20); + connectivity->SetFullScalarConnectivity(true); + connectivity->Update(); +// bbSetOutputOut( connectivity->GetOutput() ); + + vtkAppendPolyData* append2 = vtkAppendPolyData::New(); + append2->AddInputData( connectivity->GetOutput() ); + append2->AddInputData( bbGetInputPatch() ); + append2->Update(); + + + vtkPolyDataNormals *normals =vtkPolyDataNormals::New(); + normals->SetInputConnection( append2->GetOutputPort() ); + normals->ConsistencyOn(); + normals->SplittingOff(); + normals->Update(); + bbSetOutputOut( normals->GetOutput() ); + +// vtkFillHolesFilter *fillHoles = vtkFillHolesFilter::New(); +// fillHoles->SetInputData( normals->GetOutput() ); +// fillHoles->SetHoleSize(1000); +// fillHoles->Update(); +// bbSetOutputOut( fillHoles->GetOutput() ); + + + /* // Step 4. -- vtkImprintFilter --- vtkImprintFilter *imp = vtkImprintFilter::New(); // imp->SetTargetData( append->GetOutput() ); @@ -161,11 +228,10 @@ void CleanMeshWithPatch::Process() imp->SetTolerance(500); imp->Update(); - - bbSetOutputOut( imp->GetOutput() ); - printf("EED CleanMeshWithPatch::Process size=%d \n", perimeterX.size()); + bbSetOutputOut( imp->GetOutput() ); +*/ + } // if LstIndexs size >=3 - printf("EED CleanMeshWithPatch::Process End \n"); } //===== -- 2.45.1