2 #include <creaImageIOWxViewer.h>
3 #include <creaImageIOSystem.h>
6 #include <vtkRenderer.h>
7 #include <vtkImageData.h>
9 #include <creaMessageManager.h>
19 //=====================================================================
21 //=====================================================================
22 class WxViewerPlayer: public wxThread
25 WxViewerPlayer(WxViewer* v) :
30 // void SetImagesToPlay(std::vector<vtkImageData*> im);
31 // void ShowImage(vtkImageData* v);
32 // void StartIterator();
36 //std::vector<vtkImageData*> mImagesToPlay;
37 //vtkImageViewer2* mViewer;
38 /// Associated wxvtk interactor
39 //crea::creawxVTKRenderWindowInteractor *mInteractor;
40 //std::vector<vtkImageData*>::iterator i;
43 // int mx1,mx2,my1,my2,mz1,mz2;
44 // double mspx,mspy,mspz;
47 //=====================================================================
53 //=====================================================================
55 WxViewer::WxViewer(wxWindow *parent,
65 wxMutexLocker lock(mMutex);
66 GimmickDebugMessage(1,"WxViewer::WxViewer"
69 wxBoxSizer *topsizer = new wxBoxSizer(wxVERTICAL);
74 mInteractor = new crea::creawxVTKRenderWindowInteractor(this,-1);
75 mInteractor->UseCaptureMouseOn();
77 mViewer = vtkImageViewer2::New();
78 mViewer->SetupInteractor ( mInteractor );
82 mPlayer = new WxViewerPlayer(this); //images, mViewer, mInteractor, this);
86 topsizer-> Add( mInteractor ,1,wxGROW ,0);
90 //=====================================================================
92 //=====================================================================
96 wxMutexLocker lock(mMutex);
97 GimmickDebugMessage(1,"WxViewer::~WxViewer"
100 // TO DO : desallocate cleanly
102 // delete mInteractor;
104 //=====================================================================
107 //================================================================
109 void WxViewer::SetImage(int i, vtkImageData* im)
111 wxMutexLocker lock(mMutex);
114 GimmickDebugMessage(5,"WxViewer::SetImage "<<i+1<<"/"<<images.size()
118 // if (images[i]!=0) images[i]->UnRegister(NULL);
120 // if (im!=0) im->Register(NULL);
127 //================================================================
131 //================================================================
133 bool WxViewer::ImagesEmpty()
135 wxMutexLocker lock(mMutex);
136 return images.empty();
138 //================================================================
140 //================================================================
142 void WxViewer::SetMovieSize(unsigned int si)
144 wxMutexLocker lock(mMutex);
145 GimmickDebugMessage(5,"WxViewer::SetMovieSize("<<(int)si<<")"
147 for (unsigned int i=0;i<images.size();++i)
151 // images[i]->UnRegister(NULL);
155 for (unsigned int i=0;i<si;++i) images.push_back(0);
158 //================================================================
160 //================================================================
162 void WxViewer::ShowNextImage()
164 wxMutexLocker lock(mMutex);
165 GimmickMessage(1,"WxViewer::ShowNextImage() "
167 <<images.size()<<std::endl);
168 if (mCurrent<images.size())
170 ShowImage(images[mCurrent]);
173 if (mCurrent >= images.size()) mCurrent = 0;
175 //================================================================
180 //=====================================================================
181 void WxViewer::ShowImage(vtkImageData* im)
183 GimmickDebugMessage(5,"WxViewer::ShowImage"
187 mViewer->SetInput(im);
188 mViewer->SetSlice( 0 );
190 int x1,x2,y1,y2,z1,z2;
194 im->GetSpacing(spx,spy,spz);
195 im->GetExtent (x1,x2,y1,y2,z1,z2);
197 std::cout << "-----------------------------"<<std::endl;
198 std::cout << x1 << "-"<<x2<<std::endl;
199 std::cout << y1 << "-"<<y2<<std::endl;
200 std::cout << z1 << "-"<<z2<<std::endl;
201 std::cout << spx << "-"<<spy<<"-"<<spz<<std::endl;
225 double *range = im->GetScalarRange();
226 mViewer->SetColorWindow(range[1] - range[0]);
227 mViewer->SetColorLevel(0.5 * (range[1] + range[0]));
229 mViewer->GetRenderer()->ResetCamera();
233 mViewer->GetRenderer()->ComputeVisiblePropBounds(bounds);
236 std::cout <<"bounds : "<<bounds[0]<<","
241 <<bounds[5]<<std::endl;
244 mViewer->GetRenderer()->ResetCameraClippingRange(bounds);
246 vtkCamera *camera = mViewer->GetRenderer()->GetActiveCamera();
248 camera->SetViewUp ( spx*0, -spy*1, spz*0);
249 camera->SetPosition( spx*(x1+x2)/2, spy*(y1+y2)/2, spz*10000000);
250 camera->SetFocalPoint ( spx*(x1+x2)/2 , spy*(y1+y2)/2 , spz*0);
252 camera->ComputeViewPlaneNormal();
253 camera->SetParallelScale( spx*(x2-x1)/2.0 );
255 camera->Roll ( 180 );
260 // mInteractor->Refresh();
261 //mInteractor->Render();
262 // mViewer->Render();
266 //================================================================
268 //==================================================
269 void WxViewer::OnInternalIdle()
271 // mInteractor->Refresh();
274 mInteractor->Render();
279 //=================================================
282 // BEGIN_EVENT_TABLE(WxGimmickFrame, wxDialog)
284 //================================================================
286 //========================================================================
287 //========================================================================
288 //========================================================================
289 //========================================================================
290 //========================================================================
291 //========================================================================
292 //========================================================================
293 //========================================================================
295 void* WxViewerPlayer::Entry()
298 GimmickMessage(1,"WxViewerPlayer::Entry()"<<std::endl);
302 mWxViewer->ShowNextImage();
304 endwait = clock () + 0.2 * CLOCKS_PER_SEC ;
305 while (clock() < endwait) {}
307 for(i=mImagesToPlay.begin();i!=mImagesToPlay.end();++i)
309 if(i!=mImagesToPlay.end())
312 GimmickMessage(1,"ThreadedMovie next image"<<std::endl);
316 endwait = clock () + 0.2 * CLOCKS_PER_SEC ;
317 while (clock() < endwait) {}
326 //=====================================================================
328 //=====================================================================
329 void WxViewerPlayer::OnExit()
331 GimmickMessage(1,"WxViewerPlayer::OnExit() "<<std::endl);
334 //=====================================================================
337 } // EO namespace creaImageIO