#include #include #include #include #include #include #include #include #include using namespace crea; namespace creaImageIO { //===================================================================== //===================================================================== class WxViewerPlayer: public wxThread { public: WxViewerPlayer(WxViewer* v) : mWxViewer(v) {} void* Entry(); // 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* mWxViewer; // int mx1,mx2,my1,my2,mz1,mz2; // double mspx,mspy,mspz; }; //===================================================================== //===================================================================== // CTor WxViewer::WxViewer(wxWindow *parent, 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; 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) { 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 << "-----------------------------"<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->Refresh(); //mInteractor->Render(); // mViewer->Render(); //::wxWakeUpIdle(); } //================================================================ //================================================== void WxViewer::OnInternalIdle() { // mInteractor->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() { mPlayer->Delete(); } // BEGIN_EVENT_TABLE(WxGimmickFrame, wxDialog) // END_EVENT_TABLE() //================================================================ //======================================================================== //======================================================================== //======================================================================== //======================================================================== //======================================================================== //======================================================================== //======================================================================== //======================================================================== void* WxViewerPlayer::Entry() { GimmickMessage(1,"WxViewerPlayer::Entry()"<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) { if(i!=mImagesToPlay.end()) { GimmickMessage(1,"ThreadedMovie next image"<Refresh(); endwait = clock () + 0.2 * CLOCKS_PER_SEC ; while (clock() < endwait) {} } */ } return 0; } //===================================================================== //===================================================================== void WxViewerPlayer::OnExit() { GimmickMessage(1,"WxViewerPlayer::OnExit() "<