]> Creatis software - creaMaracasVisu.git/blobdiff - bbtk/src/bbcreaMaracasVisuManualPaint_Model.cxx
#3418 creaMaracasVisu Feature New Normal - ManualPaint_model with openmp
[creaMaracasVisu.git] / bbtk / src / bbcreaMaracasVisuManualPaint_Model.cxx
index 7167f6cbff873cc17cbff82fe8ac9cde70301e3f..b9c230335036086654d0138b978f45afeffcc977 100644 (file)
@@ -19,6 +19,15 @@ BBTK_BLACK_BOX_IMPLEMENTATION(ManualPaint_Model,bbtk::AtomicBlackBox);
 //-- Alternativa con openmp --
 void ManualPaint_Model::LstPointOMPAnalice()
 {
+
+printf("EED ManualPaint_Model::LstPointOMPAnalice\n" );
+printf("EED FillFilter::Run ojo toca limpiar bien el codigo  _px  px  ...... \n"); 
+printf("EED FillFilter::Run ojo toca limpiar bien el codigo  _px  px  ...... \n"); 
+printf("EED FillFilter::Run ojo toca limpiar bien el codigo  _px  px  ...... \n"); 
+printf("EED FillFilter::Run ojo toca limpiar bien el codigo  _px  px  ...... \n"); 
+
+
+printf("EED ManualPaint_Model::LstPointOMPAnalice Start \n");
 //-- Alternativa con openmp --
 // A. Create copie of index original list => lst1
 // B. if list1 es not empty do..
@@ -81,20 +90,20 @@ long int k3omp=(double)(size2-1)*0.4;
 long int k4omp=(double)(size2-1)*0.6;
 long int k5omp=(double)(size2-1)*0.8;
 long int k6omp=(double)(size2-1)*1.0;
-printf("EED ManualPaint_Model::LstPointOMPAnalice (with openmp)\n");
+printf("EED ManualPaint_Model::LstPointOMPAnalice (with openmp)  size=%d\n",size2);
 #pragma omp parallel for 
                for (i2=0;i2<size2;i2++)
                {
-if ( (k1omp==i2) || (k2omp==i2) || (k3omp==i2) || 
-     (k4omp==i2) || (k5omp==i2) || (k6omp==i2) ) 
-{ 
-       if (size2==1) 
-       { 
-               printf("  100% (just one element)\n"); 
-       } else {
-               printf("  %d%\n", (int)(((double)i2/(double)(size2-1))*100 )); 
-       } 
-}// if K#omp
+                       if ( (k1omp==i2) || (k2omp==i2) || (k3omp==i2) || 
+                                (k4omp==i2) || (k5omp==i2) || (k6omp==i2) ) 
+                       
+                               if (size2==1) 
+                               
+                                       printf("  100% (just one element)\n"); 
+                               } else {
+                                       printf("  %d% \n", (int)(((double)i2/(double)(size2-1))*100 )); 
+                               
+                       }// if K#omp
                        manualpaintmodel->PaintImage(   bbGetInputByLstPointsX()[ lst2[i2] ] , 
                                                                                        bbGetInputByLstPointsY()[ lst2[i2] ] , 
                                                                                        bbGetInputByLstPointsZ()[ lst2[i2] ] );
@@ -115,13 +124,13 @@ if ( (k1omp==i2) || (k2omp==i2) || (k3omp==i2) ||
                } // for i2
 
        } // while
+printf("EED ManualPaint_Model::LstPointOMPAnalice End\n");
 
 }
 
 
 void ManualPaint_Model::Process()
 {
-
 /* Notas
 0. Quitar comentarion ByLstPoints openmp
 1. Falta openmp ByImagePoints
@@ -141,32 +150,55 @@ void ManualPaint_Model::Process()
                        manualpaintmodel->SetTool( bbGetInputTool() );
                        manualpaintmodel->Set2D3D( bbGetInput2D3D() );
                        manualpaintmodel->SetImages( bbGetInputImage(),bbGetInputImage2() );
-                       manualpaintmodel->SetGrayLevel( bbGetInputGrayLevel() );
+                       manualpaintmodel->SetGrayLevel( bbGetInputGrayLevel() );                                        
                        manualpaintmodel->SetDirection( bbGetInputDirection() );
                        manualpaintmodel->SetBrushSize( bbGetInputBrushSize() );
                        manualpaintmodel->SetBrushForm( bbGetInputBrushForm() );
                        manualpaintmodel->SetToleranceFill( bbGetInputToleranceFill() );
-                       manualpaintmodel->SetDistanceFill( bbGetInputDistanceFill() );          
+                       manualpaintmodel->SetDistanceFill( bbGetInputDistanceFill() );                          
                        manualpaintmodel->SetRangeMin( bbGetInputRange()[0] );
                        manualpaintmodel->SetRangeMax( bbGetInputRange()[1] );
                        if (bbGetInputPoint().size()==3)
                        {
                                manualpaintmodel->PaintImage( bbGetInputPoint()[0] , bbGetInputPoint()[1] , bbGetInputPoint()[2] );
                                manualpaintmodel->SetUndoImage();
+                               manualpaintmodel->Copy_GeneralAuxFill_to_Results();
                        } // if Points
                        if ( bbGetInputByLstPointsX().size()!=0 )
                        {
                                //-- Alternativa con openmp --
-                               LstPointOMPAnalice();
+//                             LstPointOMPAnalice();
 
-/* -- Original ByLstPoints sin openmp --
+// /* -- Original ByLstPoints sin openmp --
                                int i,size = bbGetInputByLstPointsX().size();
+long int k1omp=(double)(size-1)*0.0;
+long int k2omp=(double)(size-1)*0.2;
+long int k3omp=(double)(size-1)*0.4;
+long int k4omp=(double)(size-1)*0.6;
+long int k5omp=(double)(size-1)*0.8;
+long int k6omp=(double)(size-1)*1.0;
+printf("EED ManualPaint_Model::Process  list of points (with openmp)  size=%d\n",size);
+#pragma omp parallel for 
                                for (i=0;i<size;i++)
                                {
-                                       manualpaintmodel->PaintImage( bbGetInputByLstPointsX()[i] , bbGetInputByLstPointsY()[i] , bbGetInputByLstPointsZ()[i] );
+                                       if ( (k1omp==i) || (k2omp==i) || (k3omp==i) || 
+                                                (k4omp==i) || (k5omp==i) || (k6omp==i) ) 
+                                       { 
+                                               if (size==1) 
+                                               { 
+                                                       printf("  100% (just one element)\n"); 
+                                               } else {
+                                                       printf("  %d% \n", (int)(((double)i/(double)(size-1))*100 )); 
+                                               } 
+                                       }// if K#omp
+                                       manualpaintmodel->PaintImage(   bbGetInputByLstPointsX()[i] , 
+                                                                                                       bbGetInputByLstPointsY()[i] , 
+                                                                                                       bbGetInputByLstPointsZ()[i] );
                                        //_manualPaintModel->SetUndoImage();     // Probably needed.   Here is ok.
                                } // for
- -- Original ByLstPoints sin openmp --*/
+//  -- Original ByLstPoints sin openmp --*/
+
+                               manualpaintmodel->Copy_GeneralAuxFill_to_Results();
 
                        }// if ByLstPointsX
                        if ((bbGetInputByImagePoints()!=NULL) && (bbGetInputImage2()!=NULL) )
@@ -192,14 +224,52 @@ void ManualPaint_Model::Process()
                                int dimZ=ext[5]-ext[4]+1;
                                DEF_POINTER_IMAGE_VTK_CREA(vBIP,sSBIP,pBIP,sTBIP,bbGetInputByImagePoints());
                                DEF_POINTER_IMAGE_VTK_CREA(vI2,sSI2,pI2,sTI2,bbGetInputImage2());
+
+                               long int index, size=dimX*dimY*dimZ;
+
+long int k1omp=(double)(size-1)*0.0;
+long int k2omp=(double)(size-1)*0.2;
+long int k3omp=(double)(size-1)*0.4;
+long int k4omp=(double)(size-1)*0.6;
+long int k5omp=(double)(size-1)*0.8;
+long int k6omp=(double)(size-1)*1.0;
+printf("EED ManualPaint_Model::Process  ByImagePoints (with openmp)  size=%d    GrayLevel=%f\n",size,(double)bbGetInputGrayLevel());
+#pragma omp parallel for
+                               for (index=0; index<size; index++)
+                               {
+                                       if ( (k1omp==index) || (k2omp==index) || (k3omp==index) || 
+                                                (k4omp==index) || (k5omp==index) || (k6omp==index) ) 
+                                       { 
+                                               if (size==1) 
+                                               { 
+                                                       printf("  100% (just one element)\n"); 
+                                               } else {
+                                                       printf("  %d% \n", (int)(((double)index/(double)(size-1))*100 )); 
+                                               } 
+                                       }// if K#omp
+                                       double value1;
+                                       GETVALUE2_VTK_CREA(value1,pBIP,sTBIP,index)
+                                       if (value1>0)
+                                       {
+                                               double value2;
+                                               GETVALUE2_VTK_CREA(value2,pI2,sTI2,index)
+                                               if (value2==0)
+                                               {
+                                                       int i = index % dimX;
+                                                       int j = (index % (dimX*dimY)) / dimX;
+                                                       int k = index / (dimX*dimY);
+                                                       manualpaintmodel->PaintImage(i,j,k);
+//                                                             manualpaintmodel->SetUndoImage();     // Probably needed.   Here is ok.
+                                               } // vI2                
+                                       } // vBIP 
+                               } // for index
+                               manualpaintmodel->Copy_GeneralAuxFill_to_Results();
+
+/*
                                int i,j,k;
        //#pragma omp parallel for
                                for (k=0;k<dimZ;k++) 
                                {
-                                       if (k%50==0)
-                                       {
-                                               printf("ManualPaint_Model %d%\n", (int)(k*100.0/dimZ) );
-                                       }
                                        for (j=0;j<dimY;j++) 
                                        {
                                                for (i=0;i<dimX;i++) 
@@ -219,8 +289,9 @@ void ManualPaint_Model::Process()
                                                }// for i
                                        }// for j
                                }// for k
-                               printf("ManualPaint_Model %d%\n", 100 );
 //-------  Original ByImagePoints sin openmp--------  */
+
+
                        } // if ByImagePoints
 
                 } else {
@@ -237,6 +308,8 @@ void ManualPaint_Model::Process()
                bbSetOutputOut( NULL );
        } 
        bbSetOutputManualpaintmodel( manualpaintmodel );
+
+printf("EED ManualPaint_Model::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)
@@ -259,10 +332,10 @@ void ManualPaint_Model::bbUserSetDefaultValues()
        bbSetInputToleranceFill(50);
        bbSetInputDistanceFill(25);
        std::vector<int> point;
-       point.push_back(0);
-       point.push_back(0);
-       point.push_back(0);
-       bbSetInputPoint(point);
+//     point.push_back(0);
+//     point.push_back(0);
+//     point.push_back(0);
+//     bbSetInputPoint(point);
        std::vector<double> range;
        range.push_back(0);
        range.push_back(200);