2 # ---------------------------------------------------------------------
4 # Copyright (c) CREATIS (Centre de Recherche en Acquisition et Traitement de l'Image
6 # Authors : Eduardo Davila, Frederic Cervenansky, Claire Mouton
7 # Previous Authors : Laurent Guigues, Jean-Pierre Roux
8 # CreaTools website : www.creatis.insa-lyon.fr/site/fr/creatools_accueil
10 # This software is governed by the CeCILL-B license under French law and
11 # abiding by the rules of distribution of free software. You can use,
12 # modify and/ or redistribute the software under the terms of the CeCILL-B
13 # license as circulated by CEA, CNRS and INRIA at the following URL
14 # http://www.cecill.info/licences/Licence_CeCILL-B_V1-en.html
15 # or in the file LICENSE.txt.
17 # As a counterpart to the access to the source code and rights to copy,
18 # modify and redistribute granted by the license, users are provided only
19 # with a limited warranty and the software's author, the holder of the
20 # economic rights, and the successive licensors have only limited
23 # The fact that you are presently reading this means that you have had
24 # knowledge of the CeCILL-B license and that you accept its terms.
25 # ------------------------------------------------------------------------ */
28 #include "bbvtkSphereList.h"
29 #include "bbvtkPackage.h"
31 #include <vtkPolyDataMapper.h>
32 #include <vtkProperty.h>
33 #include <vtkRenderWindow.h>
38 BBTK_ADD_BLACK_BOX_TO_PACKAGE(vtk,SphereList)
39 BBTK_BLACK_BOX_IMPLEMENTATION(SphereList,bbtk::AtomicBlackBox);
41 double SphereList::GetRadio(int i)
44 if ( bbGetInputlstRadio().size()==0 )
47 } else if ( i<bbGetInputlstRadio().size() )
49 radio = bbGetInputlstRadio()[i];
52 radio = bbGetInputlstRadio()[ bbGetInputlstRadio().size() - 1 ];
59 void SphereList::GetPoint(int i, double &px,double &py,double &pz)
62 if (bbGetInputSpacing().size()==3)
64 spc[0]=bbGetInputSpacing()[0];
65 spc[1]=bbGetInputSpacing()[1];
66 spc[2]=bbGetInputSpacing()[2];
68 spc[0]=spc[1]=spc[2]=1;
71 px = bbGetInputlstPointX()[i]*spc[0];
72 if (bbGetInputlstPointY().size() == bbGetInputlstPointX().size() )
74 py = bbGetInputlstPointY()[i]*spc[1];
76 if (bbGetInputlstPointZ().size() == bbGetInputlstPointX().size() )
78 pz = bbGetInputlstPointZ()[i]*spc[2];
80 printf("EED SphereList::GetPoint() %f %f %f\n",px,py,pz);
84 void SphereList::GetColor(int i, double &cr,double &cg,double &cb)
86 unsigned int j = 3*i +2;
87 if (j < bbGetInputColour().size() )
89 cr=bbGetInputColour()[3*i+0];
90 cg=bbGetInputColour()[3*i+1];
91 cb=bbGetInputColour()[3*i+2];
94 int lastValidColorIndex = (bbGetInputColour().size()-1)/3;
95 lastValidColorIndex = lastValidColorIndex*3;
96 cr=bbGetInputColour()[ lastValidColorIndex+0 ];
97 cg=bbGetInputColour()[ lastValidColorIndex+1 ];
98 cb=bbGetInputColour()[ lastValidColorIndex+2 ];
104 void SphereList::Process()
106 printf ("EED SphereList::Process Start\n");
117 == igualar la lista de objetos
118 si la lista es igual nada que hacer
119 si la nueva lista es las corta que la lista existente borrar los actores
120 si la lista es mas larga que la lista existente crear los actores
121 == acualizar la lista de objetos
125 if (bbGetInputRenderer()!=NULL)
127 // If it is not the first time Process is executed, the actors have already been created. The only thing to do is to update the opacity.
128 if (sphereActor.size() != 0)
130 for (int i = 0; i < sphereActor.size(); i++)
132 GetPoint(i, px,py,pz);
133 GetColor(i, cr,cg,cb);
134 sphereActor[i] ->SetPosition( px,py,pz );
135 printf("EED SphereList::Process() %f %f %f\n",px,py,pz);
136 sphereActor[i] -> GetProperty() -> SetOpacity( bbGetInputOpacity() );
137 sphereActor[i] -> GetProperty() -> SetColor( cr,cg,cb );
138 vtkspheresourceLst[i] -> SetRadius( GetRadio(i) );
142 iMax=bbGetInputlstPointX().size();
143 // printf("EED SphereList::Process iMax=%d \n", iMax);
144 // for (int i = 0; i < iMax; i++)
146 // std::cout << "CM SphereList::Process i=" << i << " bbGetInputlstPointX()[i]=" << bbGetInputlstPointX()[i] << std::endl;
147 // std::cout << "CM SphereList::Process i=" << i << " bbGetInputlstPointY()[i]=" << bbGetInputlstPointY()[i] << std::endl;
148 // std::cout << "CM SphereList::Process i=" << i << " bbGetInputlstPointZ()[i]=" << bbGetInputlstPointZ()[i] << std::endl;
151 // If the vector Y or respectively the vector Z has a different size from the vector X, the position value py or respectively pz is set to 0.
152 for ( int i=iMin ; i<iMax; i=i+1 )
154 GetPoint(i, px,py,pz);
155 GetColor(i, cr,cg,cb);
157 vtkSphereSource * newSphere = vtkSphereSource::New();
158 vtkspheresourceLst.push_back(newSphere);
160 newSphere -> SetThetaResolution(20);
161 newSphere -> SetPhiResolution(20);
162 newSphere -> SetRadius( GetRadio(i) );
164 vtkPolyDataMapper * newMapper = vtkPolyDataMapper::New();
165 newMapper -> SetInput( newSphere -> GetOutput() );
167 vtkActor * newActor = vtkActor::New();
168 sphereActor.push_back(newActor);
169 newActor -> SetMapper(newMapper);
170 newActor -> SetOrigin(0, 0, 0);
171 newActor -> GetProperty() -> SetColor(cr,cg,cb);
172 newActor -> GetProperty() -> SetOpacity( bbGetInputOpacity() );
173 newActor -> SetPosition( px,py,pz );
175 if ( bbGetInputTransform()!=NULL )
177 newActor->SetUserTransform( bbGetInputTransform() );
180 if (bbGetInputRenderer()!=NULL)
182 bbGetInputRenderer() -> AddActor( newActor );
187 if (sphereActor.size() != 0)
190 bbSetOutputActorList(sphereActor);
193 } // if (sphereActor.size() != 0)
194 } // if (bbGetInputRenderer()!=NULL)
196 printf ("EED SphereList::Process END\n");
200 void SphereList::bbUserSetDefaultValues()
203 bbSetInputRenderer(NULL);
204 bbSetInputTransform(NULL);
206 // Sets default radio to 1.
207 std::vector<double> radio;
208 radio.push_back(1.0);
209 bbSetInputlstRadio(radio);
211 // Sets default colour to red.
212 std::vector<double> colour;
213 colour.push_back(1.0);
214 colour.push_back(0.0);
215 colour.push_back(0.0);
216 bbSetInputColour(colour);
218 // Sets default spacing.
219 std::vector<double> spacing;
220 spacing.push_back(1.0);
221 spacing.push_back(1.0);
222 spacing.push_back(1.0);
223 bbSetInputSpacing(spacing);
225 bbSetInputOpacity(1.0);
229 void SphereList::bbUserInitializeProcessing()
234 void SphereList::bbUserFinalizeProcessing()
239 // EO namespace bbvtk