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)
148 GimmickDebugMessage(6,"WxViewer::ShowImage"
152 mViewer->SetInput(im);
154 mViewer->SetSlice( 0 );
156 int x1,x2,y1,y2,z1,z2;
160 //std::cout << "in WxViewer::ShowImage PrintSelf() =";
161 //im->PrintSelf(std::cout, vtkIndent(2));
163 im->GetSpacing(spx,spy,spz);
164 //im->GetExtent (x1,x2,y1,y2,z1,z2); // JPR
165 im->GetWholeExtent (x1,x2,y1,y2,z1,z2);
167 std::cout << "in WxViewer::ShowImage GetWholeExtent ext =";
168 std::cout << " [x1]=" << x1;
169 std::cout << " [x2]=" << x2;
170 std::cout << " [y1]=" << y1;
171 std::cout << " [y2]=" << y2;
172 std::cout << " [z1]=" << z1;
173 std::cout << " [z2]=" << z2;
174 std::cout << std::endl;
197 double *range = im->GetScalarRange();
198 mViewer->SetColorWindow(range[1] - range[0]);
199 mViewer->SetColorLevel(0.5 * (range[1] + range[0]));
201 mViewer->GetRenderer()->ResetCamera();
204 mViewer->GetRenderer()->ComputeVisiblePropBounds(bounds);
206 mViewer->GetRenderer()->ResetCameraClippingRange(bounds);
207 mViewer->GetRenderer()->SetBackground(0.1,0.1,0.2);
210 //================================================================
212 //================================================================
213 bool WxViewer::RefreshIfNecessary()
217 GimmickDebugMessage(10,"WxViewer : Refreshing"<<std::endl);
219 mInteractor->Render();
220 mNeedRefresh = false;
225 //================================================================
227 //==================================================
228 void WxViewer::StopPlayer()
230 wxMutexLocker lock(mMutex);
231 if (mPlayer==0 ) return;
235 //================================================================
237 //==================================================
238 void WxViewer::StartPlayer()
240 // wxMutexLocker lock(mMutex);
241 if (mPlayer != 0) return;
242 mPlayer = new WxViewerPlayer(this);
248 // BEGIN_EVENT_TABLE(WxGimmickFrame, wxDialog)
250 //================================================================
252 //========================================================================
253 //========================================================================
254 //========================================================================
255 //========================================================================
256 //========================================================================
257 //========================================================================
258 //========================================================================
259 //========================================================================
261 void* WxViewerPlayer::Entry()
264 GimmickDebugMessage(6,"WxViewerPlayer::Entry()"<<std::endl);
266 while(!TestDestroy())
269 mWxViewer->ShowNextImage();
272 endwait = clock () + 0.2 * CLOCKS_PER_SEC ;
273 while (clock() < endwait ) {}
279 //=====================================================================
281 //=====================================================================
282 void WxViewerPlayer::OnExit()
284 GimmickDebugMessage(6,"WxViewerPlayer::OnExit() "<<std::endl);
288 } // EO namespace creaImageIO