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(6,"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 );
85 topsizer-> Add( mInteractor ,1,wxGROW ,0);
89 //=====================================================================
91 //=====================================================================
95 wxMutexLocker lock(mMutex);
96 GimmickDebugMessage(6,"WxViewer::~WxViewer"
98 // TO DO : desallocate cleanly
100 // delete mInteractor;
102 //=====================================================================
104 //================================================================
105 void WxViewer::SetImageVector(std::vector<ImagePointerHolder*>& pointers)
107 wxMutexLocker lock(mMutex);
108 GimmickDebugMessage(6,"WxViewer::SetImageVector"<<std::endl);
109 imagePointers=pointers;
112 //================================================================
114 void WxViewer::ShowNextImage()
116 wxMutexLocker lock(mMutex);
119 GimmickDebugMessage(10,"WxViewer::ShowNextImage() "
121 <<imagePointers.size()<<std::endl);
123 if(imagePointers.size()>0)
125 if (mCurrent<imagePointers.size())
127 ImagePointerHolder* iph=imagePointers[mCurrent];
128 vtkImageData* currIm=iph->Get();
130 if ( currIm != mLastImageShown )
133 mLastImageShown = currIm;
140 ImagePointerHolder* iph=imagePointers[mCurrent];
141 vtkImageData* currIm=iph->Get();
143 if ( currIm != mLastImageShown )
146 mLastImageShown = currIm;
152 //================================================================
154 //=====================================================================
155 void WxViewer::ShowImage(vtkImageData* im)
158 GimmickDebugMessage(6,"WxViewer::ShowImage"
162 mViewer->SetInput(im);
164 mViewer->SetSlice( 0 );
166 int x1,x2,y1,y2,z1,z2;
170 im->GetSpacing(spx,spy,spz);
171 im->GetExtent (x1,x2,y1,y2,z1,z2);
194 double *range = im->GetScalarRange();
195 mViewer->SetColorWindow(range[1] - range[0]);
196 mViewer->SetColorLevel(0.5 * (range[1] + range[0]));
198 mViewer->GetRenderer()->ResetCamera();
202 mViewer->GetRenderer()->ComputeVisiblePropBounds(bounds);
205 mViewer->GetRenderer()->ResetCameraClippingRange(bounds);
211 //================================================================
213 //================================================================
214 bool WxViewer::RefreshIfNecessary()
218 GimmickDebugMessage(10,"WxViewer : Refreshing"<<std::endl);
220 mInteractor->Render();
221 mNeedRefresh = false;
226 //================================================================
228 //==================================================
229 void WxViewer::StopPlayer()
231 wxMutexLocker lock(mMutex);
232 if (mPlayer==0 ) return;
236 //================================================================
238 //==================================================
239 void WxViewer::StartPlayer()
241 // wxMutexLocker lock(mMutex);
242 if (mPlayer != 0) return;
243 mPlayer = new WxViewerPlayer(this);
249 // BEGIN_EVENT_TABLE(WxGimmickFrame, wxDialog)
251 //================================================================
253 //========================================================================
254 //========================================================================
255 //========================================================================
256 //========================================================================
257 //========================================================================
258 //========================================================================
259 //========================================================================
260 //========================================================================
262 void* WxViewerPlayer::Entry()
265 GimmickDebugMessage(6,"WxViewerPlayer::Entry()"<<std::endl);
267 while(!TestDestroy())
270 mWxViewer->ShowNextImage();
273 endwait = clock () + 0.2 * CLOCKS_PER_SEC ;
274 while (clock() < endwait ) {}
280 //=====================================================================
282 //=====================================================================
283 void WxViewerPlayer::OnExit()
285 GimmickDebugMessage(6,"WxViewerPlayer::OnExit() "<<std::endl);
289 } // EO namespace creaImageIO