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]));
190 mViewer->GetRenderer()->ResetCamera();
194 mViewer->GetRenderer()->ComputeVisiblePropBounds(bounds);
197 mViewer->GetRenderer()->ResetCameraClippingRange(bounds);
198 mViewer->GetRenderer()->SetBackground(0.1,0.1,0.2);
205 //================================================================
207 //================================================================
208 bool WxViewer::RefreshIfNecessary()
212 GimmickDebugMessage(10,"WxViewer : Refreshing"<<std::endl);
214 mInteractor->Render();
215 mNeedRefresh = false;
220 //================================================================
222 //==================================================
223 void WxViewer::StopPlayer()
225 wxMutexLocker lock(mMutex);
226 if (mPlayer==0 ) return;
230 //================================================================
232 //==================================================
233 void WxViewer::StartPlayer()
235 // wxMutexLocker lock(mMutex);
236 if (mPlayer != 0) return;
237 mPlayer = new WxViewerPlayer(this);
243 // BEGIN_EVENT_TABLE(WxGimmickFrame, wxDialog)
245 //================================================================
247 //========================================================================
248 //========================================================================
249 //========================================================================
250 //========================================================================
251 //========================================================================
252 //========================================================================
253 //========================================================================
254 //========================================================================
256 void* WxViewerPlayer::Entry()
259 GimmickDebugMessage(6,"WxViewerPlayer::Entry()"<<std::endl);
261 while(!TestDestroy())
264 mWxViewer->ShowNextImage();
267 endwait = clock () + 0.2 * CLOCKS_PER_SEC ;
268 while (clock() < endwait ) {}
274 //=====================================================================
276 //=====================================================================
277 void WxViewerPlayer::OnExit()
279 GimmickDebugMessage(6,"WxViewerPlayer::OnExit() "<<std::endl);
283 } // EO namespace creaImageIO