2 #include <creaImageIOWxViewer.h>
3 #include <creaImageIOSystem.h>
6 #include <vtkRenderer.h>
7 #include <vtkImageData.h>
9 #include <creaMessageManager.h>
18 //=====================================================================
20 //=====================================================================
21 class WxViewerPlayer: public wxThread
24 WxViewerPlayer(WxViewer* v) :
29 // void SetImagesToPlay(std::vector<vtkImageData*> im);
30 // void ShowImage(vtkImageData* v);
31 // void StartIterator();
35 //std::vector<vtkImageData*> mImagesToPlay;
36 //vtkImageViewer2* mViewer;
37 /// Associated wxvtk interactor
38 //crea::creawxVTKRenderWindowInteractor *mInteractor;
39 //std::vector<vtkImageData*>::iterator i;
42 // int mx1,mx2,my1,my2,mz1,mz2;
43 // double mspx,mspy,mspz;
46 //=====================================================================
52 //=====================================================================
54 WxViewer::WxViewer(wxWindow *parent,
64 wxMutexLocker lock(mMutex);
65 GimmickDebugMessage(1,"WxViewer::WxViewer"
69 mLastImageShown = NULL;
71 wxBoxSizer *topsizer = new wxBoxSizer(wxVERTICAL);
76 mInteractor = new crea::creawxVTKRenderWindowInteractor(this,-1);
77 mInteractor->UseCaptureMouseOn();
79 mViewer = vtkImageViewer2::New();
80 mViewer->SetupInteractor ( mInteractor );
86 topsizer-> Add( mInteractor ,1,wxGROW ,0);
90 //=====================================================================
92 //=====================================================================
96 wxMutexLocker lock(mMutex);
97 GimmickDebugMessage(1,"WxViewer::~WxViewer"
100 // TO DO : desallocate cleanly
102 // delete mInteractor;
104 //=====================================================================
107 //================================================================
109 void WxViewer::SetImage(int i, vtkImageData* im)
111 wxMutexLocker lock(mMutex);
114 GimmickDebugMessage(5,"WxViewer::SetImage "<<i+1<<"/"<<images.size()
118 // if (images[i]!=0) images[i]->UnRegister(NULL);
120 // if (im!=0) im->Register(NULL);
127 //================================================================
131 //================================================================
133 bool WxViewer::ImagesEmpty()
135 wxMutexLocker lock(mMutex);
136 return images.empty();
138 //================================================================
140 //================================================================
142 void WxViewer::SetMovieSize(unsigned int si)
144 wxMutexLocker lock(mMutex);
145 GimmickDebugMessage(5,"WxViewer::SetMovieSize("<<(int)si<<")"
147 for (unsigned int i=0;i<images.size();++i)
151 // images[i]->UnRegister(NULL);
155 for (unsigned int i=0;i<si;++i) images.push_back(0);
158 //================================================================
160 //================================================================
162 void WxViewer::ShowNextImage()
164 wxMutexLocker lock(mMutex);
167 GimmickMessage(10,"WxViewer::ShowNextImage() "
169 <<images.size()<<std::endl);
172 if (mCurrent<images.size())
174 ShowImage(images[mCurrent]);
175 if ( images[mCurrent] != mLastImageShown ) mNeedRefresh = true;
176 mLastImageShown = images[mCurrent];
179 if (mCurrent >= images.size()) mCurrent = 0;
181 //================================================================
186 //=====================================================================
187 void WxViewer::ShowImage(vtkImageData* im)
190 GimmickDebugMessage(5,"WxViewer::ShowImage"
194 mViewer->SetInput(im);
196 mViewer->SetSlice( 0 );
198 int x1,x2,y1,y2,z1,z2;
202 im->GetSpacing(spx,spy,spz);
203 im->GetExtent (x1,x2,y1,y2,z1,z2);
226 double *range = im->GetScalarRange();
227 mViewer->SetColorWindow(range[1] - range[0]);
228 mViewer->SetColorLevel(0.5 * (range[1] + range[0]));
230 mViewer->GetRenderer()->ResetCamera();
234 mViewer->GetRenderer()->ComputeVisiblePropBounds(bounds);
237 mViewer->GetRenderer()->ResetCameraClippingRange(bounds);
245 //================================================================
247 //==================================================
248 void WxViewer::OnInternalIdle()
250 // mInteractor->Refresh();
253 // mInteractor->Render();
258 //================================================================
259 bool WxViewer::RefreshIfNecessary()
263 GimmickMessage(1,"WxViewer : Refreshing"<<std::endl);
265 mInteractor->Render();
266 mNeedRefresh = false;
271 //==================================================
272 void WxViewer::StopPlayer()
274 wxMutexLocker lock(mMutex);
275 if (mPlayer==0) return;
280 //==================================================
281 void WxViewer::StartPlayer()
283 // wxMutexLocker lock(mMutex);
284 if (mPlayer != 0) return;
285 mPlayer = new WxViewerPlayer(this);
294 // BEGIN_EVENT_TABLE(WxGimmickFrame, wxDialog)
296 //================================================================
298 //========================================================================
299 //========================================================================
300 //========================================================================
301 //========================================================================
302 //========================================================================
303 //========================================================================
304 //========================================================================
305 //========================================================================
307 void* WxViewerPlayer::Entry()
310 GimmickMessage(1,"WxViewerPlayer::Entry()"<<std::endl);
312 while(!TestDestroy())
315 mWxViewer->ShowNextImage();
318 endwait = clock () + 0.2 * CLOCKS_PER_SEC ;
319 while (clock() < endwait) {}
325 //=====================================================================
327 //=====================================================================
328 void WxViewerPlayer::OnExit()
330 GimmickMessage(1,"WxViewerPlayer::OnExit() "<<std::endl);
334 } // EO namespace creaImageIO