X-Git-Url: https://git.creatis.insa-lyon.fr/pubgit/?a=blobdiff_plain;f=packages%2Fvtk%2Fsrc%2FbbvtkSphereList.cxx;h=24538a70c4f48013b30fd91b953d3aebb87e8f05;hb=d19c5512748aa8e2dd5c3d01d9ec680ded1f17ce;hp=69781933ea02317d58e899bf36a99929191e25e0;hpb=54a98470cd2684e07391bf0bf46cd7db9b5e7d6c;p=bbtk.git diff --git a/packages/vtk/src/bbvtkSphereList.cxx b/packages/vtk/src/bbvtkSphereList.cxx index 6978193..24538a7 100644 --- a/packages/vtk/src/bbvtkSphereList.cxx +++ b/packages/vtk/src/bbvtkSphereList.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 "bbvtkSphereList.h" #include "bbvtkPackage.h" @@ -11,105 +38,158 @@ namespace bbvtk BBTK_ADD_BLACK_BOX_TO_PACKAGE(vtk,SphereList) BBTK_BLACK_BOX_IMPLEMENTATION(SphereList,bbtk::AtomicBlackBox); -void SphereList::Process() +double SphereList::GetRadio(int i) { - - int iMin, iMax; - double px = 0.0; - double py = 0.0; - double pz = 0.0; - double radio; - double spc[3]; - - int last_valid_color_index = 0; - - if (bbGetInputRenderer()!=NULL) + double radio; + if ( bbGetInputlstRadio().size()==0 ) + { + radio = 1.0; + } else if ( i=1){ - radio = bbGetInputlstRadio()[ bbGetInputlstRadio().size() - 1 ]; - } else { - radio = 1.0; - } - } - - // Sphere - vtkSphereSource * newSphere = vtkSphereSource::New(); - vtkSphere.push_back(newSphere); - - newSphere -> SetThetaResolution(20); - newSphere -> SetPhiResolution(20); - newSphere -> SetRadius(radio); - - vtkPolyDataMapper * newMapper = vtkPolyDataMapper::New(); - sphereMapper.push_back(newMapper); - newMapper -> SetInput( newSphere -> GetOutput() ); - - vtkActor * newActor = vtkActor::New(); - sphereActor.push_back(newActor); - newActor -> SetMapper(newMapper); - newActor -> SetOrigin(0, 0, 0); - - unsigned int j = 3*i +2; - if (j < bbGetInputColour().size() ) - { - newActor -> GetProperty() -> SetColor( bbGetInputColour()[3*i] , bbGetInputColour()[3*i + 1] , bbGetInputColour()[3*i + 2] ); - last_valid_color_index = 3*i; - } - else - newActor -> GetProperty() -> SetColor( bbGetInputColour()[last_valid_color_index] , bbGetInputColour()[last_valid_color_index + 1] , bbGetInputColour()[last_valid_color_index + 2] ); - - newActor -> GetProperty() -> SetOpacity( bbGetInputOpacity() ); - newActor -> SetPosition( px,py,pz ); - - if ( bbGetInputTransform()!=NULL ) - { - newActor->SetUserTransform( bbGetInputTransform() ); - } - + return radio; +} - if (bbGetInputRenderer()!=NULL) - { - bbGetInputRenderer() -> AddActor( newActor ); - } - } // for +void SphereList::GetPoint(int i, double &px,double &py,double &pz) + { + double spc[3]; + if (bbGetInputSpacing().size()==3) + { + spc[0]=bbGetInputSpacing()[0]; + spc[1]=bbGetInputSpacing()[1]; + spc[2]=bbGetInputSpacing()[2]; + } else { + spc[0]=spc[1]=spc[2]=1; + } + + px = bbGetInputlstPointX()[i]*spc[0]; + if (bbGetInputlstPointY().size() == bbGetInputlstPointX().size() ) + { + py = bbGetInputlstPointY()[i]*spc[1]; + } + if (bbGetInputlstPointZ().size() == bbGetInputlstPointX().size() ) + { + pz = bbGetInputlstPointZ()[i]*spc[2]; + } +} - if (sphereActor.size() != 0) - { - // Sets the output. - bbSetOutputActorList(sphereActor); - } + +void SphereList::GetColor(int i, double &cr,double &cg,double &cb) + { + unsigned int j = 3*i +2; + if (j < bbGetInputColour().size() ) + { + cr=bbGetInputColour()[3*i+0]; + cg=bbGetInputColour()[3*i+1]; + cb=bbGetInputColour()[3*i+2]; + + } else { + int lastValidColorIndex = (bbGetInputColour().size()-1)/3; + lastValidColorIndex = lastValidColorIndex*3; + cr=bbGetInputColour()[ lastValidColorIndex+0 ]; + cg=bbGetInputColour()[ lastValidColorIndex+1 ]; + cb=bbGetInputColour()[ lastValidColorIndex+2 ]; + } +} - } // if (bbGetInputRenderer()!=NULL) +void SphereList::Process() +{ + if (bbGetInputRenderer()!=NULL) + { + int sizeLstX=bbGetInputlstPointX().size(); + int sizeLstY=bbGetInputlstPointY().size(); + int sizeLstZ=bbGetInputlstPointZ().size(); + int sizeLstActors=sphereActor.size(); + if ((sizeLstX==sizeLstY) &&(sizeLstX==sizeLstZ)) + { + if (sizeLstActors>sizeLstX) + { + int i; + int diff=sizeLstActors-sizeLstX; + for (i=0;iRemoveActor( sphereActor[0] ); + vtkspheresourceLst[0]->Delete(); + sphereActor[0]->Delete(); + vtkspheresourceLst.erase( vtkspheresourceLst.begin() ); + sphereActor.erase( sphereActor.begin() ); + } // for + } // if size + + if (sizeLstActors SetThetaResolution(20); + newSphere -> SetPhiResolution(20); + newSphere -> SetRadius( 1 ); + vtkPolyDataMapper * newMapper = vtkPolyDataMapper::New(); + +//EED 2017-01-01 Migration VTK7 +#if VTK_MAJOR_VERSION <= 5 + newMapper -> SetInput( newSphere -> GetOutput() ); +#else + newMapper -> SetInputData( newSphere -> GetOutput() ); +#endif + + vtkActor * newActor = vtkActor::New(); + sphereActor.push_back(newActor); + newActor -> SetMapper(newMapper); + newActor -> SetOrigin(0, 0, 0); + if ( bbGetInputTransform()!=NULL ) + { + newActor->SetUserTransform( bbGetInputTransform() ); + } + bbGetInputRenderer()->AddActor( newActor ); + } // for + } // if size + + // Refresh data + for (int i = 0; i < sphereActor.size() ; i++) + { + double px = 0.0; + double py = 0.0; + double pz = 0.0; + double cr = 0.0; + double cg = 0.0; + double cb = 0.0; + GetPoint(i, px,py,pz); + GetColor(i, cr,cg,cb); + sphereActor[i] ->SetPosition( px,py,pz ); + sphereActor[i] -> GetProperty() -> SetOpacity( bbGetInputOpacity() ); + sphereActor[i] -> GetProperty() -> SetColor( cr,cg,cb ); + vtkspheresourceLst[i] -> SetRadius( GetRadio(i) ); + } // for i + + if (sphereActor.size() != 0) + { + // Sets the output. + bbSetOutputActorList(sphereActor); + } + + } else { + printf("EED Warning! SphereList::Process Lst XYZ are not of the same size.\n"); + }// if sizeLst + } else { + printf("EED Warning! SphereList::Process Render not assigned.\n"); + }// if Renderer +//==================================================================== } + void SphereList::bbUserSetDefaultValues() { @@ -127,7 +207,14 @@ void SphereList::bbUserSetDefaultValues() colour.push_back(0.0); colour.push_back(0.0); bbSetInputColour(colour); - + + // Sets default spacing. + std::vector spacing; + spacing.push_back(1.0); + spacing.push_back(1.0); + spacing.push_back(1.0); + bbSetInputSpacing(spacing); + bbSetInputOpacity(1.0); }