]> Creatis software - creaImageIO.git/blobdiff - src2/creaImageIOWxViewer.cpp
Clean-Up with Juan Sebastien
[creaImageIO.git] / src2 / creaImageIOWxViewer.cpp
index e9f0bdd73d1dfb24fc758c2a988cec87d304ba7a..193fedb7881179c91504be980052c55f178f2e13 100644 (file)
 #include <stdio.h>
 #include <time.h>
 
-
 using namespace crea;
 
 namespace creaImageIO
 {
-
+  
   //=====================================================================
 
   //=====================================================================
@@ -27,21 +26,11 @@ namespace creaImageIO
     {}
     
     void* Entry();
-    //    void SetImagesToPlay(std::vector<vtkImageData*> im);
-    //    void ShowImage(vtkImageData* v);
-    //   void StartIterator();
     void  OnExit();
-
+       
   private:
-    //std::vector<vtkImageData*> mImagesToPlay;
-    //vtkImageViewer2* mViewer;
-    /// Associated wxvtk interactor
-    //crea::creawxVTKRenderWindowInteractor  *mInteractor;
-    //std::vector<vtkImageData*>::iterator i;
+
     WxViewer* mWxViewer;
-    
-    //    int mx1,mx2,my1,my2,mz1,mz2;
-    //    double mspx,mspy,mspz;
   };
   
   //=====================================================================
@@ -63,9 +52,12 @@ namespace creaImageIO
                 size)
   {
     wxMutexLocker lock(mMutex);
-    GimmickDebugMessage(1,"WxViewer::WxViewer"
+    GimmickDebugMessage(6,"WxViewer::WxViewer"
                        <<std::endl);
 
+    mNeedRefresh = false;
+    mLastImageShown = NULL;
+
     wxBoxSizer *topsizer = new wxBoxSizer(wxVERTICAL);
 
        
@@ -78,11 +70,8 @@ namespace creaImageIO
     mViewer->SetupInteractor ( mInteractor );
     
     mCurrent = 0;
-
-    mPlayer = new WxViewerPlayer(this); //images, mViewer, mInteractor, this); 
-       mPlayer->Create();
-       mPlayer->Run();
-       
+       mPlayer = 0;
+         
     topsizer-> Add( mInteractor ,1,wxGROW  ,0);
     SetSizer( topsizer );     
     Layout(); 
@@ -94,97 +83,74 @@ namespace creaImageIO
   WxViewer::~WxViewer()
   {
     wxMutexLocker lock(mMutex);
-    GimmickDebugMessage(1,"WxViewer::~WxViewer"
+    GimmickDebugMessage(6,"WxViewer::~WxViewer"
                        <<std::endl);
-    SetMovieSize(0);
     // TO DO : desallocate cleanly
     //    delete mPlayer;
     //    delete mInteractor;
   }
   //=====================================================================
 
-
-  //================================================================
-
-  void WxViewer::SetImage(int i, vtkImageData* im)
-  {
-    wxMutexLocker lock(mMutex);
-       if(images.size()>0)
-       {
-               GimmickDebugMessage(5,"WxViewer::SetImage "<<i+1<<"/"<<images.size()
-                       <<std::endl);
-               if (i<images.size())
-               {
-               //      if (images[i]!=0) images[i]->UnRegister(NULL);
-               images[i] = im;
-               //      if (im!=0) im->Register(NULL);
-               }
-               
-       }
-    
-  }
-
-  //================================================================
-   
-
-
   //================================================================
-
-  bool WxViewer::ImagesEmpty()
+  void WxViewer::SetImageVector(std::vector<ImagePointerHolder*>& pointers)
   {
-    wxMutexLocker lock(mMutex);
-    return images.empty();
+       wxMutexLocker lock(mMutex);
+       GimmickDebugMessage(6,"WxViewer::SetImageVector"<<std::endl);
+       imagePointers=pointers;
   }
-  //================================================================
-
-  //================================================================
-
-  void WxViewer::SetMovieSize(unsigned int si)
-  {
-    wxMutexLocker lock(mMutex);
-    GimmickDebugMessage(5,"WxViewer::SetMovieSize("<<(int)si<<")"
-                       <<std::endl);
-    for (unsigned int i=0;i<images.size();++i)
-      {
-       if (images[i]!=0) 
-         {
-           //      images[i]->UnRegister(NULL);
-         }
-      }
-    images.clear();
-    for (unsigned int i=0;i<si;++i) images.push_back(0);
-    mCurrent = 0;
-  }
-  //================================================================
 
   //================================================================
 
   void WxViewer::ShowNextImage()
   {
-    wxMutexLocker lock(mMutex);
-    GimmickMessage(1,"WxViewer::ShowNextImage() "
+       wxMutexLocker lock(mMutex);
+       
+    
+    GimmickDebugMessage(10,"WxViewer::ShowNextImage() "
                   <<mCurrent+1<<"/"
-                  <<images.size()<<std::endl);
-    if (mCurrent<images.size()) 
-      {
-       ShowImage(images[mCurrent]);
-      }
-    mCurrent++;
-    if (mCurrent >= images.size()) mCurrent = 0;
+                  <<imagePointers.size()<<std::endl);
+    
+    if(imagePointers.size()>0)
+       {
+               if (mCurrent<imagePointers.size()) 
+               {
+                       ImagePointerHolder* iph=imagePointers[mCurrent];
+                       vtkImageData* currIm=iph->Get();
+                       ShowImage(currIm);
+                       if ( currIm != mLastImageShown ) 
+                       {
+                               mNeedRefresh = true;
+                               mLastImageShown = currIm;
+                       }
+               mCurrent++;
+           }
+               else
+               {
+                       mCurrent = 0;
+                       ImagePointerHolder* iph=imagePointers[mCurrent];
+                       vtkImageData* currIm=iph->Get();
+                       ShowImage(currIm);
+                       if ( currIm != mLastImageShown ) 
+                       {
+                               mNeedRefresh = true;
+                               mLastImageShown = currIm;
+                       }
+                       mCurrent++;
+               }
+       }
   }
   //================================================================
 
-
-
-
   //=====================================================================
   void WxViewer::ShowImage(vtkImageData* im)
   {
-    GimmickDebugMessage(5,"WxViewer::ShowImage"
+    GimmickDebugMessage(6,"WxViewer::ShowImage"
                        <<std::endl);
     if (im==0) return;
 
     mViewer->SetInput(im);
+       
     mViewer->SetSlice( 0 );
     
     int x1,x2,y1,y2,z1,z2;
@@ -193,13 +159,6 @@ namespace creaImageIO
     
     im->GetSpacing(spx,spy,spz);
     im->GetExtent (x1,x2,y1,y2,z1,z2);
-    /*
-    std::cout << "-----------------------------"<<std::endl;
-    std::cout << x1 << "-"<<x2<<std::endl; 
-    std::cout << y1 << "-"<<y2<<std::endl; 
-    std::cout << z1 << "-"<<z2<<std::endl; 
-    std::cout << spx << "-"<<spy<<"-"<<spz<<std::endl; 
-    */
     
     if ((x1!=mx1) ||
        (x2!=mx2) ||
@@ -232,52 +191,50 @@ namespace creaImageIO
 
         mViewer->GetRenderer()->ComputeVisiblePropBounds(bounds);
 
-        /*
-       std::cout <<"bounds : "<<bounds[0]<<","
-<<bounds[1]<<","
-<<bounds[2]<<","
-<<bounds[3]<<","
-<<bounds[4]<<","
-                 <<bounds[5]<<std::endl;
-        */
          
         mViewer->GetRenderer()->ResetCameraClippingRange(bounds);
-       /*
-       vtkCamera *camera = mViewer->GetRenderer()->GetActiveCamera();
-       
-       camera->SetViewUp ( spx*0, -spy*1, spz*0);
-       camera->SetPosition( spx*(x1+x2)/2, spy*(y1+y2)/2, spz*10000000); 
-       camera->SetFocalPoint   ( spx*(x1+x2)/2 , spy*(y1+y2)/2 , spz*0); 
-       
-       camera->ComputeViewPlaneNormal();
-       camera->SetParallelScale(  spx*(x2-x1)/2.0 );
-       
-       camera->Roll ( 180 );
-       */
+
          
-      }
-    
-    //  mInteractor->Refresh();
-    //mInteractor->Render();
-    //    mViewer->Render();   
+         }
 
-   ::wxWakeUpIdle();
   } 
+  //================================================================
+  
+   //================================================================
+  bool WxViewer::RefreshIfNecessary()
+  {
+    if (mNeedRefresh)
+      {
+       GimmickDebugMessage(10,"WxViewer : Refreshing"<<std::endl);
+
+       mInteractor->Render();
+       mNeedRefresh = false;
+       return true;
+      }
+    return false;
+  }
   //================================================================
   
   //==================================================
-  void WxViewer::OnInternalIdle()
+  void WxViewer::StopPlayer()
   {
-    //    mInteractor->Refresh();
-       if(images.size()>0)
-       {
-        mInteractor->Render();
-       }
-    //mViewer->Render();      
+         wxMutexLocker lock(mMutex);
+         if (mPlayer==0 ) return;
+         mPlayer->Delete();  
+         mPlayer=0;
   }
+  //================================================================
   
-  //=================================================
+  //==================================================
+  void WxViewer::StartPlayer()
+       {
+       //      wxMutexLocker lock(mMutex);
+               if (mPlayer != 0) return;
+               mPlayer = new WxViewerPlayer(this);
+               mPlayer->Create();
+               mPlayer->Run();  
+       }
+       
 
   //  BEGIN_EVENT_TABLE(WxGimmickFrame, wxDialog)
   //    END_EVENT_TABLE()
@@ -295,30 +252,17 @@ namespace creaImageIO
   void*  WxViewerPlayer::Entry()
   {
          
-    GimmickMessage(1,"WxViewerPlayer::Entry()"<<std::endl);
+    GimmickDebugMessage(6,"WxViewerPlayer::Entry()"<<std::endl);
+       
+       while(!TestDestroy())
+           { 
+                       
+                       mWxViewer->ShowNextImage();
+                       ::wxWakeUpIdle();
+                       clock_t endwait;
+                       endwait = clock () + 0.2 * CLOCKS_PER_SEC ;
+                       while (clock() < endwait ) {}
                        
-    while(true)
-      {                
-       mWxViewer->ShowNextImage();
-       clock_t endwait;
-       endwait = clock () + 0.2 * CLOCKS_PER_SEC ;
-       while (clock() < endwait) {}
-       /*
-       for(i=mImagesToPlay.begin();i!=mImagesToPlay.end();++i)
-         {
-           if(i!=mImagesToPlay.end())
-             {   
-
-               GimmickMessage(1,"ThreadedMovie next image"<<std::endl);
-               
-               ShowImage(*i);
-               mParent->Refresh();
-               endwait = clock () + 0.2 * CLOCKS_PER_SEC ;
-               while (clock() < endwait) {}
-             }
-           
-         }
-       */
       }
     return 0;
   }
@@ -328,11 +272,9 @@ namespace creaImageIO
   //=====================================================================
   void WxViewerPlayer::OnExit()
   {
-    GimmickMessage(1,"WxViewerPlayer::OnExit() "<<std::endl);
+    GimmickDebugMessage(6,"WxViewerPlayer::OnExit() "<<std::endl);
   }
 
-   //=====================================================================
-
  
 } // EO namespace creaImageIO