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 //================================================================
128 void WxViewer::SetImageVector(std::vector<ImagePointerHolder*>& pointers)
130 wxMutexLocker lock(mMutex);
131 GimmickMessage(1,"WxViewer::SetImageVector"<<std::endl);
132 imagePointers=pointers;
136 //================================================================
138 bool WxViewer::ImagesEmpty()
140 wxMutexLocker lock(mMutex);
141 return images.empty();
143 //================================================================
145 //================================================================
147 void WxViewer::SetMovieSize(unsigned int si)
149 wxMutexLocker lock(mMutex);
150 GimmickDebugMessage(5,"WxViewer::SetMovieSize("<<(int)si<<")"
152 for (unsigned int i=0;i<images.size();++i)
156 // images[i]->UnRegister(NULL);
160 for (unsigned int i=0;i<si;++i) images.push_back(0);
163 //================================================================
165 //================================================================
167 void WxViewer::ShowNextImage()
169 wxMutexLocker lock(mMutex);
172 GimmickMessage(10,"WxViewer::ShowNextImage() "
174 <<images.size()<<std::endl);
176 if(imagePointers.size()>0)
178 if (mCurrent<imagePointers.size())
180 ImagePointerHolder* iph=imagePointers[mCurrent];
181 vtkImageData* currIm=iph->Get();
183 if ( currIm != mLastImageShown )
186 mLastImageShown = currIm;
193 ImagePointerHolder* iph=imagePointers[mCurrent];
194 vtkImageData* currIm=iph->Get();
196 if ( currIm != mLastImageShown )
199 mLastImageShown = currIm;
205 //================================================================
210 //=====================================================================
211 void WxViewer::ShowImage(vtkImageData* im)
214 GimmickDebugMessage(5,"WxViewer::ShowImage"
218 mViewer->SetInput(im);
220 mViewer->SetSlice( 0 );
222 int x1,x2,y1,y2,z1,z2;
226 im->GetSpacing(spx,spy,spz);
227 im->GetExtent (x1,x2,y1,y2,z1,z2);
250 double *range = im->GetScalarRange();
251 mViewer->SetColorWindow(range[1] - range[0]);
252 mViewer->SetColorLevel(0.5 * (range[1] + range[0]));
254 mViewer->GetRenderer()->ResetCamera();
258 mViewer->GetRenderer()->ComputeVisiblePropBounds(bounds);
261 mViewer->GetRenderer()->ResetCameraClippingRange(bounds);
269 //================================================================
271 //==================================================
272 void WxViewer::OnInternalIdle()
274 // mInteractor->Refresh();
277 // mInteractor->Render();
282 //================================================================
283 bool WxViewer::RefreshIfNecessary()
287 GimmickMessage(1,"WxViewer : Refreshing"<<std::endl);
289 mInteractor->Render();
290 mNeedRefresh = false;
295 //==================================================
296 void WxViewer::StopPlayer()
298 wxMutexLocker lock(mMutex);
299 if (mPlayer==0) return;
304 //==================================================
305 void WxViewer::StartPlayer()
307 // wxMutexLocker lock(mMutex);
308 if (mPlayer != 0) return;
309 mPlayer = new WxViewerPlayer(this);
318 // BEGIN_EVENT_TABLE(WxGimmickFrame, wxDialog)
320 //================================================================
322 //========================================================================
323 //========================================================================
324 //========================================================================
325 //========================================================================
326 //========================================================================
327 //========================================================================
328 //========================================================================
329 //========================================================================
331 void* WxViewerPlayer::Entry()
334 GimmickMessage(1,"WxViewerPlayer::Entry()"<<std::endl);
336 while(!TestDestroy())
339 mWxViewer->ShowNextImage();
342 endwait = clock () + 0.2 * CLOCKS_PER_SEC ;
343 while (clock() < endwait) {}
349 //=====================================================================
351 //=====================================================================
352 void WxViewerPlayer::OnExit()
354 GimmickMessage(1,"WxViewerPlayer::OnExit() "<<std::endl);
358 } // EO namespace creaImageIO