]> Creatis software - bbtk.git/commitdiff
#3501 Geodesic Deformation
authorPablo Garzon <gapablo2001@gmail.com>
Thu, 11 May 2023 12:33:51 +0000 (14:33 +0200)
committerPablo Garzon <gapablo2001@gmail.com>
Thu, 11 May 2023 12:33:51 +0000 (14:33 +0200)
packages/itkvtk/src/bbitkvtkGeodesicMeshDeformation.cxx
packages/itkvtk/src/bbitkvtkGeodesicMeshDeformation.h

index 287c0e695f26474175e1a1fdf930831598f9033f..f99dc9cb5a26b0f35e7bdc47f3a5e1b91294e85f 100644 (file)
@@ -14,7 +14,7 @@ BBTK_BLACK_BOX_IMPLEMENTATION(GeodesicMeshDeformation,bbtk::AtomicBlackBox);
 //===== 
 void GeodesicMeshDeformation::Process()
 {
-printf("PG GeodesicMeshDeformation::Process START \n");
+//printf("PG GeodesicMeshDeformation::Process START \n");
 // THE MAIN PROCESSING METHOD BODY
 //   Here we simply set the input 'In' value to the output 'Out'
 //   And print out the output value
@@ -35,7 +35,8 @@ printf("PG GeodesicMeshDeformation::Process START \n");
     if ((bbGetInputIn() != polydata) && (bbGetInputActive()==true) && (bbGetInputIn() != NULL))
     {
        //Reset displacement
-       if(lstCenter.size() != NULL){
+       if(lstCenter.size() != NULL)
+       {
                        backLstCenter[0] = lstCenter[0];
                        backLstCenter[1] = lstCenter[1];
                        backLstCenter[2] = lstCenter[2];
@@ -64,28 +65,31 @@ printf("PG GeodesicMeshDeformation::Process START \n");
                        //point data must be 1 on each point so that fast marching can calculate the distance.
                        quadEdgeMesh->SetPointData(pointId, 1.);
                }
-               printf("PG GeodesicMeshDeformation::Process Entered FLAG 4 \n");
+
                //add cells to QuadEdge mesh
                auto cellIterator = vtk::TakeSmartPointer(bbGetInputIn()->GetPolys()->NewIterator());
                vtkIdList* cell;
                for(cellIterator->GoToFirstCell(); !cellIterator->IsDoneWithTraversal(); cellIterator->GoToNextCell()){
                        cell = cellIterator->GetCurrentCell();
                        quadEdgeMesh->AddFaceTriangle(cell->GetId(0), cell->GetId(1), cell->GetId(2));
-               }                       
-               printf("PG GeodesicMeshDeformation::Process  FLAG 5\n");
+               }
                
                using FastMarchingType = itk::FastMarchingQuadEdgeMeshFilterResultsBase<MeshType, MeshType>;    
                fmmFilter = FastMarchingType::New();
                fmmFilter->SetInput(quadEdgeMesh);
                
-               using NodePairType = FastMarchingType::NodePairType;
-               using NodePairContainerType = FastMarchingType::NodePairContainerType;
+               //Filter and starting trial point removed because the range of point ids is not known when polydatas are split.
                
-               auto trial = NodePairContainerType::New();
-               NodePairType nodePair(0, 0.);
-               trial->push_back(nodePair);
+               //using NodePairType = FastMarchingType::NodePairType;
+               //using NodePairContainerType = FastMarchingType::NodePairContainerType;
+
+               //auto trial = NodePairContainerType::New();
+               //NodePairType nodePair(0, 0.);
+               //trial->push_back(nodePair);
+
+               //fmmFilter->SetTrialPoints(trial);
                
-               fmmFilter->SetTrialPoints(trial);
+               EdgeIdBack = bbGetInputEdgeId();
 
                using CriterionType = itk::FastMarchingThresholdStoppingCriterion<MeshType, MeshType>;
                auto criterion = CriterionType::New();
@@ -94,9 +98,9 @@ printf("PG GeodesicMeshDeformation::Process START \n");
                fmmFilter->SetStoppingCriterion(criterion);
                fmmFilter->SetCollectPoints(true);
                fmmFilter->SetReleaseDataBeforeUpdateFlag(false);
-               fmmFilter->Update();
+               //fmmFilter->Update();
 
-               printf("PG GeodesicMeshDeformation::Process  Filter Created \n");
+               //printf("PG GeodesicMeshDeformation::Process  Filter Created \n");
     }
     
     if (bbGetInputTypeIn()==0) // direction
@@ -174,7 +178,8 @@ printf("PG GeodesicMeshDeformation::Process START \n");
                        fmmFilter->SetTrialPoints(trial);
 
                        //threshold distance for fast marching method
-                       if(sCurrent != s){                      
+                       if(sCurrent != s)
+                       {                       
                                using CriterionType = itk::FastMarchingThresholdStoppingCriterion<MeshType, MeshType>;
                                auto criterion = CriterionType::New();
                                sCurrent = s;
@@ -187,7 +192,8 @@ printf("PG GeodesicMeshDeformation::Process START \n");
         
         if ( !((displcement_x==0) &&(displcement_y==0) && (displcement_z==0)) )
         {      
-                       if(fmmFilter != NULL){
+                       if(fmmFilter != NULL)
+                       {
                                MeshType::PointDataContainer::Pointer pointData = fmmFilter->GetOutput()->GetPointData();
                                double pPD[3];
                                
@@ -209,10 +215,10 @@ printf("PG GeodesicMeshDeformation::Process START \n");
                                }
                                points->Modified();
                bbGetInputIn()->Modified();
-                       }
+                       }// if ffmFilter != NULL
         } // if distance_x y z  != 0
     } // In != NULL    ok    active
-    printf("PG GeodesicMeshDeformation::Process END \n");
+//    printf("PG GeodesicMeshDeformation::Process END \n");
 }
 //===== 
 // 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)
index 1ba0448086a545312586f212e4b2e42e619bca75..83c6beb1324fc2ba2a31c4ef391dd3516e3bb9fa 100644 (file)
@@ -37,6 +37,8 @@ class bbitkvtk_EXPORT GeodesicMeshDeformation
   void Process();
   
   using MeshType = itk::QuadEdgeMesh<double, 3>;
+  
+  //This is not the FastMarchingQuadEdge filter from ITK, this is a modified version to increase performance in our use
   using FastMarchingType = itk::FastMarchingQuadEdgeMeshFilterResultsBase<MeshType, MeshType>;
   
        long                                                                    EdgeIdBack;