]> Creatis software - creaVtk.git/blobdiff - bbtk_creaVtk_PKG/src/bbcreaVtkGrayLevel.cxx
#3470 merge vtk8itk5wx3-mingw64
[creaVtk.git] / bbtk_creaVtk_PKG / src / bbcreaVtkGrayLevel.cxx
index 8922cfad2afd4ea01f9f938534cb565195efc877..75ae894f1e89c5af3de63f0d9cec244d5c80938d 100644 (file)
@@ -13,7 +13,6 @@ BBTK_BLACK_BOX_IMPLEMENTATION(GrayLevel,bbtk::AtomicBlackBox);
 //===== 
 void GrayLevel::Process()
 {
-
 // THE MAIN PROCESSING METHOD BODY
 //   Here we simply set the input 'In' value to the output 'Out'
 //   And print out the output value
@@ -28,27 +27,40 @@ void GrayLevel::Process()
 
 //    vtkImageData  *m_image  =  vtkImageData::New();
 //    m_image = bbGetInputImage();
-
     double grayLevel                   = -9999;
     std::vector<double> coord  = bbGetInputCoordinate();
+       int ext[6];
+       int maxX,maxY,maxZ;
        double px,py,pz;
        if (bbGetInputImage()!=NULL)
        {
                double spc[3];
                bbGetInputImage()->GetSpacing(spc);
-               if (coord.size()>=2)
+               bbGetInputImage()->GetExtent(ext);
+               maxX = ext[1]-ext[0]+1;
+               maxY = ext[3]-ext[2]+1;
+               maxZ = ext[5]-ext[4]+1;
+               if (coord.size()==3)
                { 
                        if (bbGetInputWithSpacing()==true)
                        {
-                               px = round(coord[0])/spc[0];
-                               py = round(coord[1])/spc[1];
-                               pz = round(coord[2])/spc[2];
+                               px = coord[0]/spc[0];
+                               py = coord[1]/spc[1];
+                               pz = coord[2]/spc[2];
                        } else {
-                               px = round(coord[0]);
-                               py = round(coord[1]);
-                               pz = round(coord[2]);
+                               px = coord[0];
+                               py = coord[1];
+                               pz = coord[2];
                        }// if
-                       grayLevel = bbGetInputImage()->GetScalarComponentAsDouble( px,py,pz,0);
+                       px=round(px);
+                       py=round(py);
+                       pz=round(pz);           
+                       if ( (px>=0) && (px<maxX) && (py>=0) && (py<maxY) &&(pz>=0) && (pz<maxZ)  )
+                       {
+                               grayLevel = bbGetInputImage()->GetScalarComponentAsDouble( px,py,pz,0);
+                       } else {
+                               grayLevel = -9991;
+                       } // if px py pz
                } // coord
                std::vector<double> lstGL;
                std::vector<double> lstX = bbGetInputLstPointsX();
@@ -61,15 +73,24 @@ void GrayLevel::Process()
                        {       
                                if (bbGetInputWithSpacing()==true)
                                {
-                                       px = round(lstX[i])/spc[0];
-                                       py = round(lstY[i])/spc[1];
-                                       pz = round(lstZ[i])/spc[2];
+                                       px = lstX[i]/spc[0];
+                                       py = lstY[i]/spc[1];
+                                       pz = lstZ[i]/spc[2];
                                } else {
-                                       px = round(lstX[i]);
-                                       py = round(lstY[i]);
-                                       pz = round(lstZ[i]);                                    
+                                       px = lstX[i];
+                                       py = lstY[i];
+                                       pz = lstZ[i];                                   
                                }// if
-                               lstGL.push_back( bbGetInputImage()->GetScalarComponentAsDouble( px,py,pz,0) );
+
+                               px = round(px);
+                               py = round(py);
+                               pz = round(pz);
+                               if ( (px>=0) && (px<maxX) && (py>=0) && (py<maxY) &&(pz>=0) && (pz<maxZ)  )
+                               {
+                                       lstGL.push_back( bbGetInputImage()->GetScalarComponentAsDouble( px, py,pz,0) );
+                               } else {
+                                       lstGL.push_back( -9991 );
+                               }
                        }// for 
                        bbSetOutputLstGrayLevel(lstGL);
                } // if size of Lst