]> Creatis software - creaVtk.git/blobdiff - bbtk_creaVtk_PKG/src/bbcreaVtkGrayLevel.cxx
#3470 merge vtk8itk5wx3-mingw64
[creaVtk.git] / bbtk_creaVtk_PKG / src / bbcreaVtkGrayLevel.cxx
index 959c59c07ea56d4eff6eb8a54ed0762ba077277a..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
@@ -25,27 +24,89 @@ void GrayLevel::Process()
 //      (the one provided in the attribute 'name' of the tag 'input')
 //    * TYPE is the C++ type of the input/output
 //      (the one provided in the attribute 'type' of the tag 'input')
-    vtkImageData  *m_image  =  vtkImageData::New();
-    m_image = bbGetInputImage();
-
-    int grayLevel = 0;
-    std::vector<double> coord = bbGetInputCoordinate();
 
-       grayLevel = m_image->GetScalarComponentAsDouble(coord[0],coord[1],coord[2],0);
+//    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);
+               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 = coord[0]/spc[0];
+                               py = coord[1]/spc[1];
+                               pz = coord[2]/spc[2];
+                       } else {
+                               px = coord[0];
+                               py = coord[1];
+                               pz = coord[2];
+                       }// if
+                       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();
+               std::vector<double> lstY = bbGetInputLstPointsY();
+               std::vector<double> lstZ = bbGetInputLstPointsZ();
+               if ( (lstX.size()==lstY.size()) && (lstY.size()==lstZ.size()) )
+               {
+                       long int i,size=lstX.size();
+                       for (i=0;i<size;i++)
+                       {       
+                               if (bbGetInputWithSpacing()==true)
+                               {
+                                       px = lstX[i]/spc[0];
+                                       py = lstY[i]/spc[1];
+                                       pz = lstZ[i]/spc[2];
+                               } else {
+                                       px = lstX[i];
+                                       py = lstY[i];
+                                       pz = lstZ[i];                                   
+                               }// if
 
+                               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
+       } // InputImage
        bbSetOutputGrayLevel(grayLevel);
-    
 }
+
 //===== 
 // 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)
 //===== 
 void GrayLevel::bbUserSetDefaultValues()
 {
-
 //  SET HERE THE DEFAULT INPUT/OUTPUT VALUES OF YOUR BOX 
 //    Here we initialize the input 'In' to 0
    bbSetInputImage(NULL);
-  
+   bbSetInputWithSpacing(false);
 }
 //===== 
 // 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)