]> Creatis software - bbtk.git/blobdiff - packages/vtk/src/bbvtkSphereList.cxx
#3472 merge vtk8itk5wx3-mingw64
[bbtk.git] / packages / vtk / src / bbvtkSphereList.cxx
index 7b91170bf59b48e61c527d83ddbfaac29afbf8d6..b8519fbfa32f9122536846c7ec9884d0cffc2fd9 100644 (file)
@@ -42,17 +42,15 @@ double SphereList::GetRadio(int i)
 {
     double radio;
        if ( bbGetInputlstRadio().size()==0 )
-        {
-            radio = 1.0;
-        } else if ( i<bbGetInputlstRadio().size() )
+    {
+               radio = 1.0;
+       } else if ( i<bbGetInputlstRadio().size() )
        {
-            radio = bbGetInputlstRadio()[i];
-        } else  
-        {
-            radio = bbGetInputlstRadio()[ bbGetInputlstRadio().size() - 1 ];
-        }  
-
-       return radio;
+               radio = bbGetInputlstRadio()[i];
+       } else {
+       radio = bbGetInputlstRadio()[ bbGetInputlstRadio().size() - 1 ];
+    }  
+       return radio;
 }
 
 
@@ -77,7 +75,6 @@ void SphereList::GetPoint(int i, double &px,double &py,double &pz)
        {                       
                pz = bbGetInputlstPointZ()[i]*spc[2];
        }
-printf("EED SphereList::GetPoint() %f %f %f\n",px,py,pz);
 }  
 
                        
@@ -99,104 +96,174 @@ void SphereList::GetColor(int i, double &cr,double &cg,double &cb)
        }
 }  
 
-
-
 void SphereList::Process()
 {
-printf ("EED SphereList::Process Start\n");
-        int iMin, iMax;
-       double px = 0.0;
-       double py = 0.0;
-       double pz = 0.0;
-
-       double cr = 0.0;
-       double cg = 0.0;
-       double cb = 0.0;
-       
 /*
-== igualar la lista de objetos 
-     si la lista es igual nada que hacer
-     si la nueva lista es las corta que la lista existente borrar los actores
-     si la lista es mas larga que la lista existente crear los actores
-== acualizar la lista de objetos
-*/
-
-
        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. 
-               if (sphereActor.size() != 0)
-               {
-               for (int i = 0; i < sphereActor.size(); i++)
+               int sizeLstX            = bbGetInputlstPointX().size(); 
+               int sizeLstY            = bbGetInputlstPointY().size();
+               int sizeLstZ            = bbGetInputlstPointZ().size();
+               int sizeLstActors       = sphereActor.size();
+               if ((sizeLstX==sizeLstY) &&(sizeLstX==sizeLstZ))
+               {
+                       int i,diff;
+                       if (sizeLstActors>sizeLstX)
+                       {
+                               diff=sizeLstActors-sizeLstX;
+                               for (i=0;i<diff;i++)
+                               {
+                                       bbGetInputRenderer()->RemoveActor( sphereActor[0] );
+                                       vtkspheresourceLst[0]->Delete();
+                                       sphereActor[0]->Delete();
+                                       vtkspheresourceLst.erase( vtkspheresourceLst.begin() );
+                                       sphereActor.erase( sphereActor.begin() );
+                               } // for 
+                       } // if size
+
+                       if (sizeLstActors<sizeLstX)
+                       {
+                               diff=sizeLstX-sizeLstActors;
+                               for (i=0;i<diff;i++)
+                               {
+                                       // Sphere
+                                       vtkSphereSource * newSphere = vtkSphereSource::New();
+                                       vtkspheresourceLst.push_back(newSphere);
+                                       newSphere -> 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
+                                       newSphere -> Update();
+                                       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 (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 );
-printf("EED SphereList::Process() %f %f %f\n",px,py,pz);
                 sphereActor[i] -> GetProperty() -> SetOpacity( bbGetInputOpacity() );
                 sphereActor[i] -> GetProperty() -> SetColor( cr,cg,cb );
                 vtkspheresourceLst[i] -> SetRadius( GetRadio(i) ); 
+                       vtkspheresourceLst[i] -> Update();
                } // for i
-               } else {
-                       iMin=0;
-            iMax=bbGetInputlstPointX().size();
-//                    printf("EED SphereList::Process   iMax=%d \n", iMax);
-//                    for (int i = 0; i < iMax; i++)
-//                      {
-//                        std::cout << "CM SphereList::Process i=" <<  i  << " bbGetInputlstPointX()[i]=" << bbGetInputlstPointX()[i] << std::endl;
-//                        std::cout << "CM SphereList::Process i=" <<  i  << " bbGetInputlstPointY()[i]=" << bbGetInputlstPointY()[i] << std::endl;
-//                        std::cout << "CM SphereList::Process i=" <<  i  << " bbGetInputlstPointZ()[i]=" << bbGetInputlstPointZ()[i] << std::endl;
-//                      } // for i
-                   // 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.
-               for ( int i=iMin ; i<iMax; i=i+1 )
-               {
-               GetPoint(i, px,py,pz);
-                               GetColor(i, cr,cg,cb);
+
+               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
+
+//====================================================================
+*/
+
+       if (bbGetInputRenderer()!=NULL)
+       {
+               int sizeLstX            = bbGetInputlstPointX().size(); 
+               int sizeLstY            = bbGetInputlstPointY().size();
+               int sizeLstZ            = bbGetInputlstPointZ().size();
+               int sizeLstActors       = sphereActor.size();
+               if ((sizeLstX==sizeLstY) &&(sizeLstX==sizeLstZ))
+               {
+                       int i;
+                       double px,py,pz;
+                       double cr,cg,cb;
+                       for ( i=0 ; i<sizeLstActors ; i++ )
+                       {
+                               bbGetInputRenderer()->RemoveActor( sphereActor[i] );
+                               vtkspheresourceLst[i]->Delete();
+                               vtkpolydatamaperLst[i]->Delete();
+                               sphereActor[i]->Delete();
+                       } // for 
+                       vtkspheresourceLst.clear();
+                       vtkpolydatamaperLst.clear();
+                       sphereActor.clear();
+                       
+                       
+                       for (i=0;i<sizeLstX;i++)
+                       {
                                // Sphere
                                vtkSphereSource * newSphere = vtkSphereSource::New();
                                vtkspheresourceLst.push_back(newSphere);
-
                                newSphere -> SetThetaResolution(20);
                                newSphere -> SetPhiResolution(20);
-                               newSphere -> SetRadius( GetRadio(i) ); 
-
+                               newSphere -> SetRadius( 1 ); 
                                vtkPolyDataMapper * newMapper = vtkPolyDataMapper::New();
-                               newMapper -> SetInput( newSphere -> GetOutput() );
-       
+                               vtkpolydatamaperLst.push_back(newMapper);
+//EED 2017-01-01 Migration VTK7
+#if VTK_MAJOR_VERSION <= 5
+                               newMapper -> SetInput( newSphere -> GetOutput() );      
+#else
+                               newSphere -> Update();
+                               newMapper -> SetInputData( newSphere -> GetOutput() );  
+#endif
+
                                vtkActor * newActor = vtkActor::New();
                                sphereActor.push_back(newActor);
                                newActor -> SetMapper(newMapper);
-                               newActor -> SetOrigin(0, 0, 0);                 
-                               newActor -> GetProperty() -> SetColor(cr,cg,cb);
-                               newActor -> GetProperty() -> SetOpacity( bbGetInputOpacity() );
-                               newActor -> SetPosition( px,py,pz );
-       
+                               newActor -> SetOrigin(0, 0, 0);                         
                                if ( bbGetInputTransform()!=NULL )
                                {
                                        newActor->SetUserTransform( bbGetInputTransform() );
                                }
-       
-                               if (bbGetInputRenderer()!=NULL)
-                               {
-                                   bbGetInputRenderer() -> AddActor( newActor );
-                               }
+                               bbGetInputRenderer()->AddActor( newActor );
+                       } // for
 
-                       } // for
 
-            if (sphereActor.size() != 0)
+                       // Refresh data
+               for (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) ); 
+                       vtkspheresourceLst[i] -> Update();
+               } // for i
+                       
+               if (sphereActor.size() != 0)
             {
                // Sets the output.
                bbSetOutputActorList(sphereActor);
                }
-                    
-               } // if (sphereActor.size() != 0)
-       } // if (bbGetInputRenderer()!=NULL)
-
-printf ("EED SphereList::Process END\n");
 
+               } // sizeLstX sizeLstY sizeLstZ 
+       } // if Renderer
 }
 
+
 void SphereList::bbUserSetDefaultValues()
 {