]> Creatis software - creaImageIO.git/blobdiff - src2/creaImageIOWxViewer.cpp
Fixed Bugs with filter. Added Layer Diagram to documentation.
[creaImageIO.git] / src2 / creaImageIOWxViewer.cpp
index ac2938be0547227d0eeff708ed59e8dff8ba505b..2b473a22703f87773c3abe9c668fbe6c538d010a 100644 (file)
@@ -10,7 +10,6 @@
 #include <stdio.h>
 #include <time.h>
 
-
 using namespace crea;
 
 namespace creaImageIO
@@ -31,7 +30,7 @@ namespace creaImageIO
     //    void ShowImage(vtkImageData* v);
     //   void StartIterator();
     void  OnExit();
-
+       
   private:
     //std::vector<vtkImageData*> mImagesToPlay;
     //vtkImageViewer2* mViewer;
@@ -66,6 +65,9 @@ namespace creaImageIO
     GimmickDebugMessage(1,"WxViewer::WxViewer"
                        <<std::endl);
 
+    mNeedRefresh = false;
+    mLastImageShown = NULL;
+
     wxBoxSizer *topsizer = new wxBoxSizer(wxVERTICAL);
 
        
@@ -80,8 +82,9 @@ namespace creaImageIO
     mCurrent = 0;
 
     mPlayer = new WxViewerPlayer(this); //images, mViewer, mInteractor, this);
-    mPlayer->Create();
-    mPlayer->Run(); 
+       
+       mPlayer->Create();
+       mPlayer->Run();
        
     topsizer-> Add( mInteractor ,1,wxGROW  ,0);
     SetSizer( topsizer );     
@@ -109,14 +112,19 @@ namespace creaImageIO
   void WxViewer::SetImage(int i, vtkImageData* im)
   {
     wxMutexLocker lock(mMutex);
-    GimmickDebugMessage(5,"WxViewer::SetImage "<<i+1<<"/"<<images.size()
+       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);
-      }
+               if (i<images.size())
+               {
+               //      if (images[i]!=0) images[i]->UnRegister(NULL);
+               images[i] = im;
+               //      if (im!=0) im->Register(NULL);
+               }
+               
+       }
+    
   }
 
   //================================================================
@@ -157,12 +165,18 @@ namespace creaImageIO
   void WxViewer::ShowNextImage()
   {
     wxMutexLocker lock(mMutex);
+       
+    /*
     GimmickMessage(1,"WxViewer::ShowNextImage() "
                   <<mCurrent+1<<"/"
                   <<images.size()<<std::endl);
+    */
+    
     if (mCurrent<images.size()) 
       {
        ShowImage(images[mCurrent]);
+       if ( images[mCurrent] != mLastImageShown ) mNeedRefresh = true;
+       mLastImageShown = images[mCurrent];
       }
     mCurrent++;
     if (mCurrent >= images.size()) mCurrent = 0;
@@ -180,6 +194,7 @@ namespace creaImageIO
     if (im==0) return;
 
     mViewer->SetInput(im);
+       
     mViewer->SetSlice( 0 );
     
     int x1,x2,y1,y2,z1,z2;
@@ -254,9 +269,9 @@ namespace creaImageIO
     
     //  mInteractor->Refresh();
     //mInteractor->Render();
-    //    mViewer->Render();   
-
-    ::wxWakeUpIdle();
+    //    mViewer->Render();
+  
+   //::wxWakeUpIdle();
   } 
   //================================================================
   
@@ -264,11 +279,32 @@ namespace creaImageIO
   void WxViewer::OnInternalIdle()
   {
     //    mInteractor->Refresh();
-    mInteractor->Render();
+       if(images.size()>0)
+       {
+//      mInteractor->Render();
+       }
     //mViewer->Render();      
   }
+
+   //================================================================
+  bool WxViewer::RefreshIfNecessary()
+  {
+    if (mNeedRefresh)
+      {
+       GimmickMessage(1,"WxViewer : Refreshing"<<std::endl);
+
+       mInteractor->Render();
+       mNeedRefresh = false;
+       return true;
+      }
+    return false;
+  }
+  //==================================================
+  void WxViewer::StopPlayer()
+  {
+    mPlayer->Delete();  
+  }
   
-  //=================================================
  
 
   //  BEGIN_EVENT_TABLE(WxGimmickFrame, wxDialog)
@@ -290,11 +326,22 @@ namespace creaImageIO
     GimmickMessage(1,"WxViewerPlayer::Entry()"<<std::endl);
                        
     while(true)
-      {                
-       mWxViewer->ShowNextImage();
-       clock_t endwait;
-       endwait = clock () + 0.2 * CLOCKS_PER_SEC ;
-       while (clock() < endwait) {}
+      { 
+               if(!TestDestroy())
+           { 
+                       
+                       mWxViewer->ShowNextImage();
+                       //                      mWxViewer->Refresh();
+                       ::wxWakeUpIdle();
+                       clock_t endwait;
+                       endwait = clock () + 0.2 * CLOCKS_PER_SEC ;
+                       while (clock() < endwait) {}
+                       
+               }
+               else
+               {
+                       break;
+               }
        /*
        for(i=mImagesToPlay.begin();i!=mImagesToPlay.end();++i)
          {
@@ -307,7 +354,7 @@ namespace creaImageIO
                mParent->Refresh();
                endwait = clock () + 0.2 * CLOCKS_PER_SEC ;
                while (clock() < endwait) {}
-             }
+             
            
          }
        */
@@ -323,8 +370,6 @@ namespace creaImageIO
     GimmickMessage(1,"WxViewerPlayer::OnExit() "<<std::endl);
   }
 
-   //=====================================================================
-
  
 } // EO namespace creaImageIO