2 #include <creaImageIOWxViewer.h>
3 #include <creaImageIOSystem.h>
6 #include <vtkRenderer.h>
7 #include <vtkImageData.h>
8 #include <creawxVTKRenderWindowInteractor.h>
9 #include <creaMessageManager.h>
18 //=====================================================================
20 //=====================================================================
21 class WxViewerPlayer: public wxThread
24 WxViewerPlayer(WxViewer* v) :
36 //=====================================================================
42 //=====================================================================
44 WxViewer::WxViewer(wxWindow *parent,
54 wxMutexLocker lock(mMutex);
55 GimmickDebugMessage(6,"WxViewer::WxViewer"
59 mLastImageShown = NULL;
61 wxBoxSizer *topsizer = new wxBoxSizer(wxVERTICAL);
66 mInteractor = new crea::creawxVTKRenderWindowInteractor(this,-1);
67 mInteractor->UseCaptureMouseOn();
69 mViewer = vtkImageViewer2::New();
70 mViewer->SetupInteractor ( mInteractor );
75 topsizer-> Add( mInteractor ,1,wxGROW ,0);
79 //=====================================================================
81 //=====================================================================
85 wxMutexLocker lock(mMutex);
86 GimmickDebugMessage(6,"WxViewer::~WxViewer"
88 // TO DO : desallocate cleanly
90 // delete mInteractor;
92 //=====================================================================
94 //================================================================
95 void WxViewer::SetImageVector(std::vector<ImagePointerHolder*>& pointers)
97 wxMutexLocker lock(mMutex);
98 GimmickDebugMessage(6,"WxViewer::SetImageVector"<<std::endl);
99 imagePointers=pointers;
102 //================================================================
104 void WxViewer::ShowNextImage()
106 wxMutexLocker lock(mMutex);
109 GimmickDebugMessage(10,"WxViewer::ShowNextImage() "
111 <<imagePointers.size()<<std::endl);
113 if(imagePointers.size()>0)
115 if (mCurrent<imagePointers.size())
117 ImagePointerHolder* iph=imagePointers[mCurrent];
118 vtkImageData* currIm=iph->Get();
120 if ( currIm != mLastImageShown )
123 mLastImageShown = currIm;
130 ImagePointerHolder* iph=imagePointers[mCurrent];
131 vtkImageData* currIm=iph->Get();
133 if ( currIm != mLastImageShown )
136 mLastImageShown = currIm;
142 //================================================================
144 //=====================================================================
145 void WxViewer::ShowImage(vtkImageData* im)
148 GimmickDebugMessage(6,"WxViewer::ShowImage"
152 mViewer->SetInput(im);
154 mViewer->SetSlice( 0 );
156 int x1,x2,y1,y2,z1,z2;
160 im->GetSpacing(spx,spy,spz);
161 im->GetExtent (x1,x2,y1,y2,z1,z2);
184 double *range = im->GetScalarRange();
185 mViewer->SetColorWindow(range[1] - range[0]);
186 mViewer->SetColorLevel(0.5 * (range[1] + range[0]));
188 mViewer->GetRenderer()->ResetCamera();
192 mViewer->GetRenderer()->ComputeVisiblePropBounds(bounds);
195 mViewer->GetRenderer()->ResetCameraClippingRange(bounds);
201 //================================================================
203 //================================================================
204 bool WxViewer::RefreshIfNecessary()
208 GimmickDebugMessage(10,"WxViewer : Refreshing"<<std::endl);
210 mInteractor->Render();
211 mNeedRefresh = false;
216 //================================================================
218 //==================================================
219 void WxViewer::StopPlayer()
221 wxMutexLocker lock(mMutex);
222 if (mPlayer==0 ) return;
226 //================================================================
228 //==================================================
229 void WxViewer::StartPlayer()
231 // wxMutexLocker lock(mMutex);
232 if (mPlayer != 0) return;
233 mPlayer = new WxViewerPlayer(this);
239 // BEGIN_EVENT_TABLE(WxGimmickFrame, wxDialog)
241 //================================================================
243 //========================================================================
244 //========================================================================
245 //========================================================================
246 //========================================================================
247 //========================================================================
248 //========================================================================
249 //========================================================================
250 //========================================================================
252 void* WxViewerPlayer::Entry()
255 GimmickDebugMessage(6,"WxViewerPlayer::Entry()"<<std::endl);
257 while(!TestDestroy())
260 mWxViewer->ShowNextImage();
263 endwait = clock () + 0.2 * CLOCKS_PER_SEC ;
264 while (clock() < endwait ) {}
270 //=====================================================================
272 //=====================================================================
273 void WxViewerPlayer::OnExit()
275 GimmickDebugMessage(6,"WxViewerPlayer::OnExit() "<<std::endl);
279 } // EO namespace creaImageIO