#include #include #include #include #include #include #include #include #include using namespace crea; namespace creaImageIO { //===================================================================== //===================================================================== class ThreadedMovie: public wxThread { public: ThreadedMovie(std::vector m, vtkImageViewer2* v, crea::creawxVTKRenderWindowInteractor* i, WxViewer* parent) : mImagesToPlay(m), mViewer(v), mInteractor(i), mParent(parent) {} 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* mParent; 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) : wxFrame( parent, id, title, pos, size, wxCAPTION) { GimmickDebugMessage(1,"WxViewer::WxViewer" <UseCaptureMouseOn(); mViewer = vtkImageViewer2::New(); mViewer->SetupInteractor ( mInteractor ); mMovie=new ThreadedMovie(images, mViewer, mInteractor, this); topsizer-> Add( mInteractor ,1,wxGROW ,0); SetSizer( topsizer ); Layout(); } /// Destructor WxViewer::~WxViewer() { GimmickDebugMessage(1,"WxViewer::~WxViewer" <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(); mViewer->Render(); } //================================================================ //================================================================ void WxViewer::AddImage(vtkImageData* im) { images.push_back(im); } //================================================================ //================================================================ void WxViewer::ShowImages() { 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(); endwait = clock () + 0.2 * CLOCKS_PER_SEC ; while (clock() < endwait) {} } } } return 0; } //===================================================================== //===================================================================== void ThreadedMovie::OnExit() { GimmickMessage(1,"Hello WORLD IM OUT!!!!!!!! "< im) { mImagesToPlay=im; } //===================================================================== //===================================================================== void ThreadedMovie::StartIterator() { i=mImagesToPlay.begin(); } //===================================================================== //===================================================================== void ThreadedMovie::ShowImage(vtkImageData* im) { mViewer->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