2 #include <creaImageIOWxViewer.h>
3 #include <creaImageIOSystem.h>
6 #include <vtkRenderer.h>
7 #include <vtkImageData.h>
9 #include <creaMessageManager.h>
19 //=====================================================================
21 //=====================================================================
22 class ThreadedMovie: public wxThread
25 ThreadedMovie(std::vector<vtkImageData*> m, vtkImageViewer2* v, crea::creawxVTKRenderWindowInteractor* i, WxViewer* parent) :
26 mImagesToPlay(m), mViewer(v), mInteractor(i), mParent(parent)
30 void SetImagesToPlay(std::vector<vtkImageData*> im);
31 void ShowImage(vtkImageData* v);
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,
67 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 );
80 mMovie=new ThreadedMovie(images, mViewer, mInteractor, this);
82 topsizer-> Add( mInteractor ,1,wxGROW ,0);
90 GimmickDebugMessage(1,"WxViewer::~WxViewer"
95 void WxViewer::ShowImage(vtkImageData* im)
97 GimmickDebugMessage(5,"WxViewer::ShowImage"
99 mViewer->SetInput(im);
100 mViewer->SetSlice( 0 );
102 int x1,x2,y1,y2,z1,z2;
106 im->GetSpacing(spx,spy,spz);
107 im->GetExtent (x1,x2,y1,y2,z1,z2);
109 std::cout << "-----------------------------"<<std::endl;
110 std::cout << x1 << "-"<<x2<<std::endl;
111 std::cout << y1 << "-"<<y2<<std::endl;
112 std::cout << z1 << "-"<<z2<<std::endl;
113 std::cout << spx << "-"<<spy<<"-"<<spz<<std::endl;
137 double *range = im->GetScalarRange();
138 mViewer->SetColorWindow(range[1] - range[0]);
139 mViewer->SetColorLevel(0.5 * (range[1] + range[0]));
141 mViewer->GetRenderer()->ResetCamera();
145 mViewer->GetRenderer()->ComputeVisiblePropBounds(bounds);
148 std::cout <<"bounds : "<<bounds[0]<<","
153 <<bounds[5]<<std::endl;
156 mViewer->GetRenderer()->ResetCameraClippingRange(bounds);
158 vtkCamera *camera = mViewer->GetRenderer()->GetActiveCamera();
160 camera->SetViewUp ( spx*0, -spy*1, spz*0);
161 camera->SetPosition( spx*(x1+x2)/2, spy*(y1+y2)/2, spz*10000000);
162 camera->SetFocalPoint ( spx*(x1+x2)/2 , spy*(y1+y2)/2 , spz*0);
164 camera->ComputeViewPlaneNormal();
165 camera->SetParallelScale( spx*(x2-x1)/2.0 );
167 camera->Roll ( 180 );
172 mInteractor->Render();
176 //================================================================
178 //================================================================
180 void WxViewer::AddImage(vtkImageData* im)
182 images.push_back(im);
185 //================================================================
187 //================================================================
189 void WxViewer::ShowImages()
191 if(!(mMovie->IsAlive()))
193 mMovie->SetImagesToPlay(images);
194 mMovie->StartIterator();
203 mMovie->SetImagesToPlay(images);
204 mMovie->StartIterator();
209 GimmickMessage(1,"I'm empty!!!!! "<<std::endl);
216 //================================================================
218 //================================================================
220 void WxViewer::ClearImages()
225 //================================================================
227 //================================================================
229 bool WxViewer::ImagesEmpty()
231 return images.empty();
233 //================================================================
234 // BEGIN_EVENT_TABLE(WxGimmickFrame, wxDialog)
236 //================================================================
238 //========================================================================
239 //========================================================================
240 //========================================================================
241 //========================================================================
242 //========================================================================
243 //========================================================================
244 //========================================================================
245 //========================================================================
247 void* ThreadedMovie::Entry()
250 GimmickMessage(1,"ThreadedMovie::Entry()"<<std::endl);
255 for(i=mImagesToPlay.begin();i!=mImagesToPlay.end();++i)
257 if(i!=mImagesToPlay.end())
260 GimmickMessage(1,"ThreadedMovie next image"<<std::endl);
264 endwait = clock () + 0.2 * CLOCKS_PER_SEC ;
265 while (clock() < endwait) {}
274 //=====================================================================
276 //=====================================================================
277 void ThreadedMovie::OnExit()
279 GimmickMessage(1,"Hello WORLD IM OUT!!!!!!!! "<<std::endl);
282 //=====================================================================
284 //=====================================================================
285 void ThreadedMovie::SetImagesToPlay(std::vector<vtkImageData*> im)
290 //=====================================================================
292 //=====================================================================
293 void ThreadedMovie::StartIterator()
295 i=mImagesToPlay.begin();
298 //=====================================================================
300 //=====================================================================
302 void ThreadedMovie::ShowImage(vtkImageData* im)
304 mViewer->SetInput(im);
305 mViewer->SetSlice( 0 );
307 int x1,x2,y1,y2,z1,z2;
312 im->GetSpacing(spx,spy,spz);
313 im->GetExtent (x1,x2,y1,y2,z1,z2);
315 std::cout << "-----------------------------"<<std::endl;
316 std::cout << x1 << "-"<<x2<<std::endl;
317 std::cout << y1 << "-"<<y2<<std::endl;
318 std::cout << z1 << "-"<<z2<<std::endl;
319 std::cout << spx << "-"<<spy<<"-"<<spz<<std::endl;
343 double *range = im->GetScalarRange();
344 mViewer->SetColorWindow(range[1] - range[0]);
345 mViewer->SetColorLevel(0.5 * (range[1] + range[0]));
347 mViewer->GetRenderer()->ResetCamera();
351 mViewer->GetRenderer()->ComputeVisiblePropBounds(bounds);
354 std::cout <<"bounds : "<<bounds[0]<<","
359 <<bounds[5]<<std::endl;
362 mViewer->GetRenderer()->ResetCameraClippingRange(bounds);
364 vtkCamera *camera = mViewer->GetRenderer()->GetActiveCamera();
366 camera->SetViewUp ( spx*0, -spy*1, spz*0);
367 camera->SetPosition( spx*(x1+x2)/2, spy*(y1+y2)/2, spz*10000000);
368 camera->SetFocalPoint ( spx*(x1+x2)/2 , spy*(y1+y2)/2 , spz*0);
370 camera->ComputeViewPlaneNormal();
371 camera->SetParallelScale( spx*(x2-x1)/2.0 );
373 camera->Roll ( 180 );
378 //mInteractor->Render();
381 } // EO namespace creaImageIO