//=====
#include "bbcreaVtkGrayLevel.h"
#include "bbcreaVtkPackage.h"
+#include <math.h>
+
namespace bbcreaVtk
{
//=====
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
// vtkImageData *m_image = vtkImageData::New();
// m_image = bbGetInputImage();
-
- double grayLevel = -9999;
- std::vector<double> coord = bbGetInputCoordinate();
-
+ double grayLevel = -9999;
+ std::vector<double> coord = bbGetInputCoordinate();
+ int ext[6];
+ int maxX,maxY,maxZ;
+ double px,py,pz;
if (bbGetInputImage()!=NULL)
{
- grayLevel = bbGetInputImage()->GetScalarComponentAsDouble(coord[0],coord[1],coord[2],0);
- }
+ 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)