X-Git-Url: https://git.creatis.insa-lyon.fr/pubgit/?a=blobdiff_plain;f=packages%2Fvtk%2Fsrc%2FbbvtkUnaryOperations.cxx;h=706949fe06a2c00025ac4e0ea0d301489264561e;hb=6b76f60671eed79e17d8f602878dac4d1928659f;hp=488f175881d5753877444e5a7a0915fce9c6d42b;hpb=5383f06c991adc435baefd87d970100b9cf6042e;p=bbtk.git diff --git a/packages/vtk/src/bbvtkUnaryOperations.cxx b/packages/vtk/src/bbvtkUnaryOperations.cxx index 488f175..706949f 100644 --- a/packages/vtk/src/bbvtkUnaryOperations.cxx +++ b/packages/vtk/src/bbvtkUnaryOperations.cxx @@ -1,3 +1,30 @@ +/* + # --------------------------------------------------------------------- + # + # Copyright (c) CREATIS (Centre de Recherche en Acquisition et Traitement de l'Image + # pour la SantÈ) + # Authors : Eduardo Davila, Frederic Cervenansky, Claire Mouton + # Previous Authors : Laurent Guigues, Jean-Pierre Roux + # CreaTools website : www.creatis.insa-lyon.fr/site/fr/creatools_accueil + # + # This software is governed by the CeCILL-B license under French law and + # abiding by the rules of distribution of free software. You can use, + # modify and/ or redistribute the software under the terms of the CeCILL-B + # license as circulated by CEA, CNRS and INRIA at the following URL + # http://www.cecill.info/licences/Licence_CeCILL-B_V1-en.html + # or in the file LICENSE.txt. + # + # As a counterpart to the access to the source code and rights to copy, + # modify and redistribute granted by the license, users are provided only + # with a limited warranty and the software's author, the holder of the + # economic rights, and the successive licensors have only limited + # liability. + # + # The fact that you are presently reading this means that you have had + # knowledge of the CeCILL-B license and that you accept its terms. + # ------------------------------------------------------------------------ */ + + #include "bbvtkUnaryOperations.h" #include "bbvtkPackage.h" namespace bbvtk @@ -30,68 +57,66 @@ void UnaryOperations::Process() ope->SetInput1((vtkDataObject*)bbGetInputIn1()); - ope->SetConstantK(bbGetInputInConstant()); - ope->SetConstantC(bbGetInputInConstant()); - switch (bbGetInputOperation()) { case 0: + ope->SetConstantC( bbGetInputInConstant() ); ope->SetOperationToAddConstant(); break; case 1: - crearPredeterminado(); - ope->SetInput2((vtkDataSet*) constante); - ope->SetOperationToSubtract(); + ope->SetConstantC( -1.0 * bbGetInputInConstant() ); + ope->SetOperationToAddConstant(); break; case 2: - ope->SetInput2((vtkDataSet*) constante); - ope->SetOperationToMultiply(); + ope->SetConstantK( bbGetInputInConstant() ); + ope->SetOperationToMultiplyByK(); +printf("EED UnaryOperations::Process() 2 \n"); break; case 3: - - ope->SetOperationToDivide(); + ope->SetConstantK( 1.0/bbGetInputInConstant() ); + ope->SetOperationToMultiplyByK(); +printf("EED UnaryOperations::Process() 3 \n"); break; case 4: ope->SetOperationToInvert(); break; - case 9: - ope->SetOperationToAbsoluteValue(); - break; case 5: - ope->SetOperationToSin(); break; case 6: - ope->SetOperationToCos(); break; case 7: - ope->SetOperationToExp(); break; case 8: - ope->SetOperationToLog(); break; + case 9: + ope->SetOperationToAbsoluteValue(); + break; case 10: - substractWithMinimum(); - bbSetOutputOut(constante); - return; + ope->SetOperationToSquareRoot(); break; case 11: - MultiplyBy(); - bbSetOutputOut(constante); - return; + ope->SetConstantC( bbGetInputInConstant() ); + ope->SetConstantK( bbGetInputNewValue() ); + ope->SetOperationToReplaceCByK(); break; + + + + default: std::cout << "Invalid Operation" << std::endl; return; break; } + ope->Modified(); ope->Update(); vtkImageData* salida = ope->GetOutput(); @@ -99,105 +124,8 @@ void UnaryOperations::Process() bbSignalOutputModification(); } -void UnaryOperations::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 UnaryOperations::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 UnaryOperations::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 UnaryOperations::bbUserSetDefaultValues() { @@ -205,9 +133,10 @@ void UnaryOperations::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); + bbSetInputNewValue(0); + bbSetInputOperation(0); ope = vtkImageMathematics::New(); constante = NULL; }