]> Creatis software - creaMaracasVisu.git/commitdiff
#3467 BUG: Interpolation contour in mesh generation
authorEduardo DAVILA <eduardo.davila@creatis.insa-lyon.fr>
Wed, 3 Feb 2021 15:41:27 +0000 (16:41 +0100)
committerEduardo DAVILA <eduardo.davila@creatis.insa-lyon.fr>
Wed, 3 Feb 2021 15:41:27 +0000 (16:41 +0100)
bbtk/src/bbcreaMaracasVisuManualContourModel_Box.cxx

index 8ad078e6d20b6ae2669f8a5a6975edc9ae60e0da..2b2404271ff40b64634a7f62bccd6fbbaeb4e93f 100644 (file)
@@ -217,6 +217,9 @@ void ManualContourModel_Box::ClockwisePoints(       std::vector<double> *lstInX,
                                backang=ang; 
                        } // for i 
 
+printf("EED ManualContourModel_Box::ClockwisePoints cx=%f cy=%f cz=%f    flagAng=%d   size=%d \n",cx,cy,cz,flagAng, size);
+//if (cy<=490) { flagAng = flagAng*(-1); }
+
                        // Step 3. Invert order of points
                        if (flagAng<0)
                        {
@@ -249,12 +252,14 @@ void ManualContourModel_Box::ShiftValues( std::vector<double> *lstInX,
        int size,size2;
        double dist,distMin;
        int i,iBack;
+       int ig;
        double dx,dy,dz;
        std::vector<double> LstTmpX;
        std::vector<double> LstTmpY;
        std::vector<double> LstTmpZ;
        if (sizeLstIndexIn>=2)
        {
+       
                for (iLstIndexIn=0;  iLstIndexIn<sizeLstIndexIn-1; iLstIndexIn++)
                {
                        size  = (*lstIndexsIn)[iLstIndexIn];
@@ -262,18 +267,86 @@ void ManualContourModel_Box::ShiftValues( std::vector<double> *lstInX,
                        //find min distance and  iBack
                        distMin = 10000000;
                        iBack   = 0;
-                       for ( i=0 ; i<size2 ; i++ )
+                       
+                       
+                       for (ig=0; ig<size; ig++)
+                       {
+                               for ( i=0 ; i<size2 ; i++ )
+                               {
+                                       dx      = (*lstInX)[iGeneral+ig]-(*lstInX)[iGeneral+size+i];
+                                       dy      = (*lstInY)[iGeneral+ig]-(*lstInY)[iGeneral+size+i];
+                                       dz      = (*lstInZ)[iGeneral+ig]-(*lstInZ)[iGeneral+size+i];
+                                       dist= sqrt( dx*dx + dy*dy + dz*dz );
+                                       if ( dist<distMin ) 
+                                       {
+                                               iBack   = i-ig;
+                                               distMin = dist;
+                                       }
+                               } // for i size2
+                       } // for ig size
+
+if (iBack<0) 
+{
+       printf("- "); 
+       iBack = iBack + size2; 
+}
+                       
+printf("EED ManualContourModel_Box::ShiftValues px=%f py=%f pz=%f  iBack=%d/%d  size=%d  distMin=%f \n", (*lstInX)[iGeneral]  , (*lstInY)[iGeneral] , (*lstInZ)[iGeneral], iBack, size2,size, distMin);
+                       
+                       if (iBack!=0)
                        {
-                               dx      = (*lstInX)[iGeneral]-(*lstInX)[iGeneral+size+i];
-                               dy      = (*lstInY)[iGeneral]-(*lstInY)[iGeneral+size+i];
-                               dz      = (*lstInZ)[iGeneral]-(*lstInZ)[iGeneral+size+i];
-                               dist= sqrt( dx*dx + dy*dy + dz*dz );
-                               if ( dist<distMin ) 
+                               LstTmpX.clear();
+                               LstTmpY.clear();
+                               LstTmpZ.clear();
+                               for (i=0 ; i<size2 ; i++) 
+                               {
+                                       ii= (i+iBack)%size2;
+                                       LstTmpX.push_back( (*lstInX)[iGeneral+size+ii] );
+                                       LstTmpY.push_back( (*lstInY)[iGeneral+size+ii] );
+                                       LstTmpZ.push_back( (*lstInZ)[iGeneral+size+ii] );
+                               } // for i                              
+                               for (i=0 ; i<size2 ; i++) 
                                {
-                                       iBack   = i;
-                                       distMin = dist;
-                               }
-                       } // for dist
+                                       (*lstInX)[iGeneral+size+i] = LstTmpX[i];
+                                       (*lstInY)[iGeneral+size+i] = LstTmpY[i];
+                                       (*lstInZ)[iGeneral+size+i] = LstTmpZ[i];
+                               } // for i                              
+                       }
+                       iGeneral=iGeneral+size;
+               } // for iLstIndexIn
+               
+//------------         
+               
+               iGeneral=0;
+
+               for (iLstIndexIn=0;  iLstIndexIn<sizeLstIndexIn-1; iLstIndexIn++)
+               {
+                       size  = (*lstIndexsIn)[iLstIndexIn];
+                       size2 = (*lstIndexsIn)[iLstIndexIn+1];
+                       //find min distance and  iBack
+                       distMin = 10000000;
+                       iBack   = 0;
+                       
+                       
+//                     for (ig=0; ig<size; ig++)
+//                     {
+                               for ( i=0 ; i<size2 ; i++ )
+                               {
+                                       dx      = (*lstInX)[iGeneral]-(*lstInX)[iGeneral+size+i];
+                                       dy      = (*lstInY)[iGeneral]-(*lstInY)[iGeneral+size+i];
+                                       dz      = (*lstInZ)[iGeneral]-(*lstInZ)[iGeneral+size+i];
+                                       dist= sqrt( dx*dx + dy*dy + dz*dz );
+                                       if ( dist<distMin ) 
+                                       {
+                                               iBack   = i;
+                                               distMin = dist;
+                                       }
+                               } // for i size2
+//                     } // for ig size
+
+                       
+printf("EED ManualContourModel_Box::ShiftValues px=%f py=%f pz=%f  iBack=%d/%d  size=%d  distMin=%f \n", (*lstInX)[iGeneral]  , (*lstInY)[iGeneral] , (*lstInZ)[iGeneral], iBack, size2,size, distMin);
+                       
                        if (iBack!=0)
                        {
                                LstTmpX.clear();
@@ -295,7 +368,9 @@ void ManualContourModel_Box::ShiftValues(   std::vector<double> *lstInX,
                        }
                        iGeneral=iGeneral+size;
                } // for iLstIndexIn
-       } // sizeLstIndexIn
+               
+       } // if sizeLstIndexIn
+       
 }