2 #include <creaImageIOWxViewer.h>
3 #include <creaImageIOSystem.h>
6 #include <vtkRenderer.h>
7 #include <vtkImageData.h>
8 #include <creawxVTKRenderWindowInteractor.h>
9 #include <creaMessageManager.h>
14 // Memory tracking allocation
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);
65 mInteractor = new crea::creawxVTKRenderWindowInteractor(this,-1);
66 mInteractor->UseCaptureMouseOn();
68 mViewer = vtkImageViewer2::New();
69 mViewer->SetupInteractor ( mInteractor );
74 topsizer-> Add( mInteractor ,1,wxGROW ,0);
78 //=====================================================================
80 //=====================================================================
84 wxMutexLocker lock(mMutex);
85 GimmickDebugMessage(6,"WxViewer::~WxViewer"
87 // TO DO : desallocate cleanly
89 // delete mInteractor;
91 //=====================================================================
93 //================================================================
94 void WxViewer::SetImageVector(std::vector<boost::shared_ptr<ImagePointerHolder> >& pointers)
96 wxMutexLocker lock(mMutex);
97 GimmickDebugMessage(6,"WxViewer::SetImageVector"<<std::endl);
98 imagePointers=pointers;
101 //================================================================
103 void WxViewer::ShowNextImage()
105 wxMutexLocker lock(mMutex);
108 GimmickDebugMessage(10,"WxViewer::ShowNextImage() "
110 <<imagePointers.size()<<std::endl);
112 if(imagePointers.size()>0)
114 if (mCurrent<imagePointers.size())
116 boost::shared_ptr<ImagePointerHolder> iph = imagePointers[mCurrent];
117 //ImagePointerHolder* iph= imagePointers[mCurrent];
118 vtkImageData* currIm=iph->Get();
120 if ( currIm != mLastImageShown )
123 mLastImageShown = currIm;
130 //ImagePointerHolder* iph=imagePointers[mCurrent];
131 boost::shared_ptr<ImagePointerHolder> iph = imagePointers[mCurrent];
132 vtkImageData* currIm=iph->Get();
134 if ( currIm != mLastImageShown )
137 mLastImageShown = currIm;
143 //================================================================
145 //=====================================================================
146 void WxViewer::ShowImage(vtkImageData* im)
149 GimmickDebugMessage(6,"WxViewer::ShowImage"
153 mViewer->SetInput(im);
155 mViewer->SetSlice( 0 );
157 int x1,x2,y1,y2,z1,z2;
161 im->GetSpacing(spx,spy,spz);
162 im->GetExtent (x1,x2,y1,y2,z1,z2);
185 double *range = im->GetScalarRange();
186 mViewer->SetColorWindow(range[1] - range[0]);
187 mViewer->SetColorLevel(0.5 * (range[1] + range[0]));
189 mViewer->GetRenderer()->ResetCamera();
193 mViewer->GetRenderer()->ComputeVisiblePropBounds(bounds);
196 mViewer->GetRenderer()->ResetCameraClippingRange(bounds);
202 //================================================================
204 //================================================================
205 bool WxViewer::RefreshIfNecessary()
209 GimmickDebugMessage(10,"WxViewer : Refreshing"<<std::endl);
211 mInteractor->Render();
212 mNeedRefresh = false;
217 //================================================================
219 //==================================================
220 void WxViewer::StopPlayer()
222 wxMutexLocker lock(mMutex);
223 if (mPlayer==0 ) return;
227 //================================================================
229 //==================================================
230 void WxViewer::StartPlayer()
232 // wxMutexLocker lock(mMutex);
233 if (mPlayer != 0) return;
234 mPlayer = new WxViewerPlayer(this);
240 // BEGIN_EVENT_TABLE(WxGimmickFrame, wxDialog)
242 //================================================================
244 //========================================================================
245 //========================================================================
246 //========================================================================
247 //========================================================================
248 //========================================================================
249 //========================================================================
250 //========================================================================
251 //========================================================================
253 void* WxViewerPlayer::Entry()
256 GimmickDebugMessage(6,"WxViewerPlayer::Entry()"<<std::endl);
258 while(!TestDestroy())
261 mWxViewer->ShowNextImage();
264 endwait = clock () + 0.2 * CLOCKS_PER_SEC ;
265 while (clock() < endwait ) {}
271 //=====================================================================
273 //=====================================================================
274 void WxViewerPlayer::OnExit()
276 GimmickDebugMessage(6,"WxViewerPlayer::OnExit() "<<std::endl);
280 } // EO namespace creaImageIO