]> Creatis software - bbtk.git/blobdiff - packages/vtk/src/bbvtkSphereList.cxx
#2841 BBTK Bug New Normal - bbpConfigurator Cleaning string package:boxname ->...
[bbtk.git] / packages / vtk / src / bbvtkSphereList.cxx
index 24624139132c46c63f31b4217fa60e039438aec5..4932d83cc9766d9f24ceba115775c784059dd81c 100644 (file)
@@ -41,10 +41,10 @@ BBTK_BLACK_BOX_IMPLEMENTATION(SphereList,bbtk::AtomicBlackBox);
 double SphereList::GetRadio(int i)
 {
     double radio;
-       if (bbGetInputlstRadio().size()==0)
+       if ( bbGetInputlstRadio().size()==0 )
         {
             radio = 1.0;
-        } else if (bbGetInputlstRadio().size() < i )
+        } else if ( i<bbGetInputlstRadio().size() )
        {
             radio = bbGetInputlstRadio()[i];
         } else  
@@ -80,6 +80,25 @@ void SphereList::GetPoint(int i, double &px,double &py,double &pz)
 }  
 
                        
+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 ];
+       }
+}  
+
+
 
 void SphereList::Process()
 {
@@ -88,11 +107,11 @@ void SphereList::Process()
        double px = 0.0;
        double py = 0.0;
        double pz = 0.0;
-       
-       int last_valid_color_index = 0;
-
 
+       double cr = 0.0;
+       double cg = 0.0;
+       double cb = 0.0;
+       
        if (bbGetInputRenderer()!=NULL)
        {
                 // 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. 
@@ -101,8 +120,10 @@ void SphereList::Process()
                   for (int i = 0; i < sphereActor.size(); i++)
                   {
                        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
                } else {
@@ -124,7 +145,7 @@ void SphereList::Process()
                          
 
                         GetPoint(i, px,py,pz);
-
+                       GetColor(i, cr,cg,cb);
                        
 
                        // Sphere
@@ -141,17 +162,8 @@ void SphereList::Process()
                        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 -> SetOrigin(0, 0, 0);                 
+                       newActor -> GetProperty() -> SetColor(cr,cg,cb);
                        newActor -> GetProperty() -> SetOpacity( bbGetInputOpacity() );
                        newActor -> SetPosition( px,py,pz );