X-Git-Url: https://git.creatis.insa-lyon.fr/pubgit/?a=blobdiff_plain;f=src2%2FcreaImageIOWxViewer.cpp;h=2b473a22703f87773c3abe9c668fbe6c538d010a;hb=60257912f98339ad44b500d6d4b700cca8e8daa9;hp=f8ae7b917f26ea326f15948c1afc39dedcb7dad7;hpb=6cac83c30fb8c3cd89c41685078eccff6e952a50;p=creaImageIO.git diff --git a/src2/creaImageIOWxViewer.cpp b/src2/creaImageIOWxViewer.cpp index f8ae7b9..2b473a2 100644 --- a/src2/creaImageIOWxViewer.cpp +++ b/src2/creaImageIOWxViewer.cpp @@ -10,7 +10,6 @@ #include #include - using namespace crea; namespace creaImageIO @@ -19,92 +18,199 @@ namespace creaImageIO //===================================================================== //===================================================================== - class ThreadedMovie: public wxThread + class WxViewerPlayer: public wxThread { public: - ThreadedMovie(std::vector m, vtkImageViewer2* v, crea::creawxVTKRenderWindowInteractor* i, WxViewer* parent) : - mImagesToPlay(m), mViewer(v), mInteractor(i), mParent(parent) + WxViewerPlayer(WxViewer* v) : + mWxViewer(v) {} - + void* Entry(); - void SetImagesToPlay(std::vector im); - void ShowImage(vtkImageData* v); - void StartIterator(); + // void SetImagesToPlay(std::vector im); + // void ShowImage(vtkImageData* v); + // void StartIterator(); void OnExit(); - + private: - std::vector mImagesToPlay; - vtkImageViewer2* mViewer; - /// Associated wxvtk interactor - crea::creawxVTKRenderWindowInteractor *mInteractor; - std::vector::iterator i; - WxViewer* mParent; - - int mx1,mx2,my1,my2,mz1,mz2; - double mspx,mspy,mspz; + //std::vector mImagesToPlay; + //vtkImageViewer2* mViewer; + /// Associated wxvtk interactor + //crea::creawxVTKRenderWindowInteractor *mInteractor; + //std::vector::iterator i; + WxViewer* mWxViewer; + + // int mx1,mx2,my1,my2,mz1,mz2; + // double mspx,mspy,mspz; }; + + //===================================================================== + - // CTor + + + //===================================================================== + // CTor WxViewer::WxViewer(wxWindow *parent, - wxWindowID id, - wxString title, - const wxPoint& pos, - const wxSize& size) - : wxFrame( parent, - id, - title, - pos, - size, - wxCAPTION) + wxWindowID id, + wxString title, + const wxPoint& pos, + const wxSize& size) + : wxPanel( parent, + id, + pos, + size) { + wxMutexLocker lock(mMutex); GimmickDebugMessage(1,"WxViewer::WxViewer" <UseCaptureMouseOn(); mViewer = vtkImageViewer2::New(); mViewer->SetupInteractor ( mInteractor ); + + mCurrent = 0; - mMovie=new ThreadedMovie(images, mViewer, mInteractor, this); + mPlayer = new WxViewerPlayer(this); //images, mViewer, mInteractor, this); + + mPlayer->Create(); + mPlayer->Run(); topsizer-> Add( mInteractor ,1,wxGROW ,0); SetSizer( topsizer ); Layout(); } + //===================================================================== + //===================================================================== /// Destructor WxViewer::~WxViewer() { + wxMutexLocker lock(mMutex); GimmickDebugMessage(1,"WxViewer::~WxViewer" <0) + { + GimmickDebugMessage(5,"WxViewer::SetImage "<UnRegister(NULL); + images[i] = im; + // if (im!=0) im->Register(NULL); + } + + } + } + //================================================================ + + + + //================================================================ + + bool WxViewer::ImagesEmpty() + { + wxMutexLocker lock(mMutex); + return images.empty(); + } + //================================================================ + + //================================================================ + + void WxViewer::SetMovieSize(unsigned int si) + { + wxMutexLocker lock(mMutex); + GimmickDebugMessage(5,"WxViewer::SetMovieSize("<<(int)si<<")" + <UnRegister(NULL); + } + } + images.clear(); + for (unsigned int i=0;i= images.size()) mCurrent = 0; + } + //================================================================ + + + + + //===================================================================== void WxViewer::ShowImage(vtkImageData* im) { - mViewer->SetInput(im); - mViewer->SetSlice( 0 ); + GimmickDebugMessage(5,"WxViewer::ShowImage" + <SetInput(im); + + mViewer->SetSlice( 0 ); + + int x1,x2,y1,y2,z1,z2; + double spx,spy,spz; im->Update(); im->GetSpacing(spx,spy,spz); im->GetExtent (x1,x2,y1,y2,z1,z2); /* std::cout << "-----------------------------"<Refresh(); + //mInteractor->Render(); + // mViewer->Render(); - //================================================================ - - void WxViewer::AddImage(vtkImageData* im) - { - images.push_back(im); - } - - //================================================================ - + //::wxWakeUpIdle(); + } //================================================================ - void WxViewer::ShowImages() + //================================================== + void WxViewer::OnInternalIdle() { - if(!(mMovie->IsAlive())) - { - mMovie->SetImagesToPlay(images); - mMovie->StartIterator(); - mMovie->Create(); - mMovie->Run(); - } - else - { - if(!images.empty()) - { - mMovie->Pause(); - mMovie->SetImagesToPlay(images); - mMovie->StartIterator(); - mMovie->Resume(); - } - else - { - GimmickMessage(1,"I'm empty!!!!! "<Refresh(); + if(images.size()>0) + { +// mInteractor->Render(); + } + //mViewer->Render(); } //================================================================ - - //================================================================ + bool WxViewer::RefreshIfNecessary() + { + if (mNeedRefresh) + { + GimmickMessage(1,"WxViewer : Refreshing"<Render(); + mNeedRefresh = false; + return true; + } + return false; + } + //================================================== + void WxViewer::StopPlayer() { - images.clear(); + mPlayer->Delete(); } - - //================================================================ - //================================================================ + - bool WxViewer::ImagesEmpty() - { - return images.empty(); - } - //================================================================ // BEGIN_EVENT_TABLE(WxGimmickFrame, wxDialog) // END_EVENT_TABLE() //================================================================ @@ -236,135 +320,56 @@ namespace creaImageIO //======================================================================== //======================================================================== - void* ThreadedMovie::Entry() + void* WxViewerPlayer::Entry() { + GimmickMessage(1,"WxViewerPlayer::Entry()"<ShowNextImage(); + // mWxViewer->Refresh(); + ::wxWakeUpIdle(); clock_t endwait; - for(i=mImagesToPlay.begin();i!=mImagesToPlay.end();++i) - { - if(i!=mImagesToPlay.end()) - { - ShowImage(*i); - mParent->Refresh(); - endwait = clock () + 0.2 * CLOCKS_PER_SEC ; - while (clock() < endwait) {} - } - - } - - } - return 0; + endwait = clock () + 0.2 * CLOCKS_PER_SEC ; + while (clock() < endwait) {} + + } + else + { + break; + } + /* + for(i=mImagesToPlay.begin();i!=mImagesToPlay.end();++i) + { + if(i!=mImagesToPlay.end()) + { + + GimmickMessage(1,"ThreadedMovie next image"<Refresh(); + endwait = clock () + 0.2 * CLOCKS_PER_SEC ; + while (clock() < endwait) {} + + + } + */ + } + return 0; } //===================================================================== //===================================================================== - void ThreadedMovie::OnExit() - { - GimmickMessage(1,"Hello WORLD IM OUT!!!!!!!! "< im) + void WxViewerPlayer::OnExit() { - mImagesToPlay=im; + GimmickMessage(1,"WxViewerPlayer::OnExit() "<SetInput(im); - mViewer->SetSlice( 0 ); - - int x1,x2,y1,y2,z1,z2; - double spx,spy,spz; - - im->Update(); - - im->GetSpacing(spx,spy,spz); - im->GetExtent (x1,x2,y1,y2,z1,z2); - /* - std::cout << "-----------------------------"<GetScalarRange(); - mViewer->SetColorWindow(range[1] - range[0]); - mViewer->SetColorLevel(0.5 * (range[1] + range[0])); - - mViewer->GetRenderer()->ResetCamera(); - double bounds[6]; - - - mViewer->GetRenderer()->ComputeVisiblePropBounds(bounds); - - /* - std::cout <<"bounds : "<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->Render(); - } - } // EO namespace creaImageIO