--- /dev/null
+#include "bbvtkSimpleMathematics.h"
+#include "bbvtkPackage.h"
+namespace bbvtk
+{
+
+ void StaticLecture::setPixelValue(int i, int j, int k, vtkImageData* img, double value)
+ {
+ //double rta;
+ int scalar_type = img->GetScalarType();
+ int* ext = img->GetExtent();
+ if (i < ext[0])
+ return;
+ if (i > ext[1])
+ return;
+
+ if (j < ext[2])
+ return;
+ if (j > ext[3])
+ return;
+
+ if (k < ext[4])
+ return;
+ if (k > ext[5])
+ return;
+
+ switch (scalar_type)
+ {
+ case VTK_CHAR:
+ char * ap2;
+ ap2 = (char *) img->GetScalarPointer(i,j,k);
+ *ap2 = (char) value;
+ break;
+ case VTK_UNSIGNED_CHAR:
+ unsigned char * ap3;
+ ap3 = (unsigned char *) img->GetScalarPointer(i,j,k);
+ *ap3 = (unsigned char) value;
+ break;
+ case VTK_SHORT:
+ short * ap4;
+ ap4 = (short *) img->GetScalarPointer(i,j,k);
+ *ap4 = (short) value;
+ break;
+ case VTK_UNSIGNED_SHORT:
+ unsigned short * ap5;
+ ap5 = (unsigned short *) img->GetScalarPointer(i,j,k);
+ *ap5 = (unsigned short) value;
+ break;
+ case VTK_INT:
+ int * ap6;
+ ap6 = (int *) img->GetScalarPointer(i,j,k);
+ *ap6 = (int) value;
+ break;
+ case VTK_UNSIGNED_INT:
+ unsigned int * ap7;
+ ap7 = (unsigned int *) img->GetScalarPointer(i,j,k);
+ *ap7 = (unsigned int) value;
+ break;
+ case VTK_LONG:
+ long * ap8;
+ ap8 = (long *) img->GetScalarPointer(i,j,k);
+ *ap8 = (long) value;
+ break;
+ case VTK_UNSIGNED_LONG:
+ unsigned long * ap9;
+ ap9 = (unsigned long *) img->GetScalarPointer(i,j,k);
+ *ap9 = (unsigned long) value;
+ break;
+ case VTK_FLOAT:
+ float * ap10;
+ ap10 = (float *) img->GetScalarPointer(i,j,k);
+ *ap10 = (float) value;
+ break;
+ case VTK_DOUBLE:
+ double * ap11;
+ ap11 = (double *) img->GetScalarPointer(i,j,k);
+ *ap11 = (double) value;
+ break;
+ }
+ }
+
+ double StaticLecture::getPixelValue(int i, int j, int k, vtkImageData* img)
+ {
+ double rta;
+ int scalar_type = img->GetScalarType();
+ int* ext = img->GetExtent();
+ if (i < ext[0])
+ i=ext[0];
+ if (i > ext[1])
+ i=ext[1];
+
+ if (j < ext[2])
+ j=ext[2];
+ if (j > ext[3])
+ j=ext[3];
+
+ if (k < ext[4])
+ k=ext[4];
+ if (k > ext[5])
+ k=ext[5];
+
+ switch (scalar_type)
+ {
+ case VTK_CHAR:
+ char * ap2;
+ ap2 = (char *) img->GetScalarPointer(i,j,k);
+ rta = (double) *ap2;
+ break;
+ case VTK_UNSIGNED_CHAR:
+ unsigned char * ap3;
+ ap3 = (unsigned char *) img->GetScalarPointer(i,j,k);
+ rta = (double) *ap3;
+ break;
+ case VTK_SHORT:
+ short * ap4;
+ ap4 = (short *) img->GetScalarPointer(i,j,k);
+ rta = (double) *ap4;
+ break;
+ case VTK_UNSIGNED_SHORT:
+ unsigned short * ap5;
+ ap5 = (unsigned short *) img->GetScalarPointer(i,j,k);
+ rta = (double) *ap5;
+ break;
+ case VTK_INT:
+ int * ap6;
+ ap6 = (int *) img->GetScalarPointer(i,j,k);
+ rta = (double) *ap6;
+ break;
+ case VTK_UNSIGNED_INT:
+ unsigned int * ap7;
+ ap7 = (unsigned int *) img->GetScalarPointer(i,j,k);
+ rta = (double) *ap7;
+ break;
+ case VTK_LONG:
+ long * ap8;
+ ap8 = (long *) img->GetScalarPointer(i,j,k);
+ rta = (double) *ap8;
+ break;
+ case VTK_UNSIGNED_LONG:
+ unsigned long * ap9;
+ ap9 = (unsigned long *) img->GetScalarPointer(i,j,k);
+ rta = (double) *ap9;
+ break;
+ case VTK_FLOAT:
+ float * ap10;
+ ap10 = (float *) img->GetScalarPointer(i,j,k);
+ rta = (double) *ap10;
+ break;
+ case VTK_DOUBLE:
+ double * ap11;
+ ap11 = (double *) img->GetScalarPointer(i,j,k);
+ rta = (double) *ap11;
+ break;
+ }
+ return rta;
+ }
+
+BBTK_ADD_BLACK_BOX_TO_PACKAGE(vtk,SimpleMathematics)
+BBTK_BLACK_BOX_IMPLEMENTATION(SimpleMathematics,bbtk::AtomicBlackBox);
+void SimpleMathematics::Process()
+{
+
+// THE MAIN PROCESSING METHOD BODY
+// Here we simply set the input 'In' value to the output 'Out'
+// And print out the output value
+// INPUT/OUTPUT ACCESSORS ARE OF THE FORM :
+// void bbSet{Input|Output}NAME(const TYPE&)
+// const TYPE& bbGet{Input|Output}NAME() const
+// Where :
+// * NAME is the name of the input/output
+// (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')
+
+ if (bbGetInputIn1() == NULL)
+ {
+ std::cout << "Set In1 at least" << std::endl;
+ return;
+ }
+
+ ope->SetInput1((vtkDataObject*)bbGetInputIn1());
+ bool onlyone = true;
+
+ if (bbGetInputIn2() != NULL)
+ {
+ ope->SetInput2((vtkDataObject*)bbGetInputIn2());
+ onlyone = false;
+ }
+
+ ope->SetConstantK(bbGetInputInConstant());
+ ope->SetConstantC(bbGetInputInConstant());
+
+ switch (bbGetInputOperation())
+ {
+ case 0:
+ if (onlyone)
+ ope->SetOperationToAddConstant();
+ else
+ ope->SetOperationToAdd();
+ break;
+ case 1:
+ if (onlyone)
+ {
+ crearPredeterminado();
+ ope->SetInput2((vtkDataSet*) constante);
+ ope->SetOperationToSubtract();
+ }
+ else
+ {
+ ope->SetOperationToSubtract();
+ }
+ break;
+ case 2:
+ if (onlyone)
+ ope->SetOperationToMultiply();
+ else
+ ope->SetOperationToMultiplyByK();
+ break;
+ case 3:
+ if (onlyone)
+ {
+ std::cout << "Set In2" << std::endl;
+ return;
+ }
+ else
+ {
+ ope->SetOperationToDivide();
+ }
+ break;
+ case 4:
+ ope->SetOperationToInvert();
+ break;
+ case 9:
+ ope->SetOperationToAbsoluteValue();
+ break;
+ case 5:
+ if (onlyone)
+ {
+ std::cout << "Set In2" << std::endl;
+ return;
+ }
+ else
+ {
+ ope->SetOperationToSin();
+ }
+ break;
+ case 6:
+ if (onlyone)
+ {
+ std::cout << "Set In2" << std::endl;
+ return;
+ }
+ else
+ {
+ ope->SetOperationToCos();
+ }
+ break;
+ case 7:
+ if (onlyone)
+ {
+ std::cout << "Set In2" << std::endl;
+ return;
+ }
+ else
+ {
+ ope->SetOperationToExp();
+ }
+ break;
+ case 8:
+ if (onlyone)
+ {
+ std::cout << "Set In2" << std::endl;
+ return;
+ }
+ else
+ {
+ ope->SetOperationToLog();
+ }
+ break;
+ case 10:
+ substractWithMinimum();
+ bbSetOutputOut(constante);
+ return;
+ break;
+ case 11:
+ MultiplyBy();
+ bbSetOutputOut(constante);
+ return;
+ break;
+ default:
+ std::cout << "Invalid Operation" << std::endl;
+ return;
+ break;
+ }
+
+ ope->Update();
+ vtkImageData* salida = ope->GetOutput();
+
+ bbSetOutputOut(salida);
+ bbSignalOutputModification();
+
+}
+void SimpleMathematics::crearPredeterminado()
+{
+ int ext[6];
+ vtkImageData* inicial = bbGetInputIn1();
+
+
+ if (constante == NULL)
+ {
+ inicial->GetExtent(ext);
+ constante = vtkImageData::New();
+ constante->SetExtent(ext);
+ constante->SetScalarType(inicial->GetScalarType());
+ constante->AllocateScalars();
+ constante->Update();
+ }
+
+ for (int i=ext[0]; i<=ext[1]; i++)
+ {
+ for (int j=ext[2]; j<=ext[3]; j++)
+ {
+ for (int k=ext[4]; k<=ext[5]; k++)
+ {
+ unsigned short* value = (unsigned short*)constante->GetScalarPointer(i,j,k);
+ *value = bbGetInputInConstant();
+ }
+ }
+ }
+}
+void SimpleMathematics::substractWithMinimum()
+{
+ int ext[6];
+ double spc[3];
+ vtkImageData* inicial = bbGetInputIn1();
+
+
+ if (constante == NULL)
+ {
+ inicial->GetExtent(ext);
+ inicial->GetSpacing(spc);
+ constante = vtkImageData::New();
+ constante->SetExtent(ext);
+ constante->SetSpacing(spc);
+ constante->SetOrigin(inicial->GetOrigin());
+ constante->SetScalarType(inicial->GetScalarType());
+ constante->AllocateScalars();
+ constante->Update();
+ }
+
+ for (int i=ext[0]; i<=ext[1]; i++)
+ {
+ for (int j=ext[2]; j<=ext[3]; j++)
+ {
+ for (int k=ext[4]; k<=ext[5]; k++)
+ {
+ double temp1 = lector.getPixelValue(i,j,k,inicial);
+ double temp = temp1 - bbGetInputInConstant();
+ if (temp < 0)
+ temp = 0;
+ lector.setPixelValue(i,j,k,constante,temp);
+ }
+ }
+ }
+}
+
+void SimpleMathematics::MultiplyBy()
+{
+ int ext[6];
+ double spc[3];
+ vtkImageData* inicial = bbGetInputIn1();
+
+
+ if (constante == NULL)
+ {
+ inicial->GetExtent(ext);
+ inicial->GetSpacing(spc);
+ constante = vtkImageData::New();
+ constante->SetExtent(ext);
+ constante->SetSpacing(spc);
+ constante->SetOrigin(inicial->GetOrigin());
+ constante->SetScalarType(inicial->GetScalarType());
+ constante->AllocateScalars();
+ constante->Update();
+ }
+
+ for (int i=ext[0]; i<=ext[1]; i++)
+ {
+ for (int j=ext[2]; j<=ext[3]; j++)
+ {
+ for (int k=ext[4]; k<=ext[5]; k++)
+ {
+ double temp1 = lector.getPixelValue(i,j,k,inicial);
+ double temp = temp1 * bbGetInputInConstant();
+ if (temp < 0)
+ temp = 0;
+ lector.setPixelValue(i,j,k,constante,temp);
+ }
+ }
+ }
+}
+
+void SimpleMathematics::bbUserSetDefaultValues()
+{
+
+// SET HERE THE DEFAULT INPUT/OUTPUT VALUES OF YOUR BOX
+// Here we initialize the input 'In' to 0
+ bbSetInputIn1(NULL);
+ bbSetInputIn2(NULL);
+ bbSetOutputOut(NULL);
+ bbSetInputInConstant(0);
+ ope = vtkImageMathematics::New();
+ constante = NULL;
+}
+void SimpleMathematics::bbUserInitializeProcessing()
+{
+
+// THE INITIALIZATION METHOD BODY :
+// Here does nothing
+// but this is where you should allocate the internal/output pointers
+// if any
+
+
+}
+void SimpleMathematics::bbUserFinalizeProcessing()
+{
+
+// THE FINALIZATION METHOD BODY :
+// Here does nothing
+// but this is where you should desallocate the internal/output pointers
+// if any
+
+}
+}
+// EO namespace bbvtk
+
+