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;
49 WxViewer::WxViewer(wxWindow *parent,
61 GimmickDebugMessage(1,"WxViewer::WxViewer"
63 wxBoxSizer *topsizer = new wxBoxSizer(wxVERTICAL);
68 mInteractor = new crea::creawxVTKRenderWindowInteractor(this,-1);
69 mInteractor->UseCaptureMouseOn();
71 mViewer = vtkImageViewer2::New();
72 mViewer->SetupInteractor ( mInteractor );
74 mMovie=new ThreadedMovie(images, mViewer, mInteractor, this);
76 topsizer-> Add( mInteractor ,1,wxGROW ,0);
84 GimmickDebugMessage(1,"WxViewer::~WxViewer"
89 void WxViewer::ShowImage(vtkImageData* im)
91 mViewer->SetInput(im);
92 mViewer->SetSlice( 0 );
94 int x1,x2,y1,y2,z1,z2;
98 im->GetSpacing(spx,spy,spz);
99 im->GetExtent (x1,x2,y1,y2,z1,z2);
101 std::cout << "-----------------------------"<<std::endl;
102 std::cout << x1 << "-"<<x2<<std::endl;
103 std::cout << y1 << "-"<<y2<<std::endl;
104 std::cout << z1 << "-"<<z2<<std::endl;
105 std::cout << spx << "-"<<spy<<"-"<<spz<<std::endl;
129 double *range = im->GetScalarRange();
130 mViewer->SetColorWindow(range[1] - range[0]);
131 mViewer->SetColorLevel(0.5 * (range[1] + range[0]));
133 mViewer->GetRenderer()->ResetCamera();
137 mViewer->GetRenderer()->ComputeVisiblePropBounds(bounds);
140 std::cout <<"bounds : "<<bounds[0]<<","
145 <<bounds[5]<<std::endl;
148 mViewer->GetRenderer()->ResetCameraClippingRange(bounds);
150 vtkCamera *camera = mViewer->GetRenderer()->GetActiveCamera();
152 camera->SetViewUp ( spx*0, -spy*1, spz*0);
153 camera->SetPosition( spx*(x1+x2)/2, spy*(y1+y2)/2, spz*10000000);
154 camera->SetFocalPoint ( spx*(x1+x2)/2 , spy*(y1+y2)/2 , spz*0);
156 camera->ComputeViewPlaneNormal();
157 camera->SetParallelScale( spx*(x2-x1)/2.0 );
159 camera->Roll ( 180 );
168 //================================================================
170 //================================================================
172 void WxViewer::AddImage(vtkImageData* im)
174 images.push_back(im);
177 //================================================================
179 //================================================================
181 void WxViewer::ShowImages()
183 if(!(mMovie->IsAlive()))
185 mMovie->SetImagesToPlay(images);
186 mMovie->StartIterator();
195 mMovie->SetImagesToPlay(images);
196 mMovie->StartIterator();
201 GimmickMessage(1,"I'm empty!!!!! "<<std::endl);
208 //================================================================
210 //================================================================
212 void WxViewer::ClearImages()
217 //================================================================
219 //================================================================
221 bool WxViewer::ImagesEmpty()
223 return images.empty();
225 //================================================================
226 // BEGIN_EVENT_TABLE(WxGimmickFrame, wxDialog)
228 //================================================================
230 //========================================================================
231 //========================================================================
232 //========================================================================
233 //========================================================================
234 //========================================================================
235 //========================================================================
236 //========================================================================
237 //========================================================================
239 void* ThreadedMovie::Entry()
246 for(i=mImagesToPlay.begin();i!=mImagesToPlay.end();++i)
248 if(i!=mImagesToPlay.end())
252 endwait = clock () + 0.2 * CLOCKS_PER_SEC ;
253 while (clock() < endwait) {}
262 //=====================================================================
264 //=====================================================================
265 void ThreadedMovie::OnExit()
267 GimmickMessage(1,"Hello WORLD IM OUT!!!!!!!! "<<std::endl);
270 //=====================================================================
272 //=====================================================================
273 void ThreadedMovie::SetImagesToPlay(std::vector<vtkImageData*> im)
278 //=====================================================================
280 //=====================================================================
281 void ThreadedMovie::StartIterator()
283 i=mImagesToPlay.begin();
286 //=====================================================================
288 //=====================================================================
290 void ThreadedMovie::ShowImage(vtkImageData* im)
292 mViewer->SetInput(im);
293 mViewer->SetSlice( 0 );
295 int x1,x2,y1,y2,z1,z2;
300 im->GetSpacing(spx,spy,spz);
301 im->GetExtent (x1,x2,y1,y2,z1,z2);
303 std::cout << "-----------------------------"<<std::endl;
304 std::cout << x1 << "-"<<x2<<std::endl;
305 std::cout << y1 << "-"<<y2<<std::endl;
306 std::cout << z1 << "-"<<z2<<std::endl;
307 std::cout << spx << "-"<<spy<<"-"<<spz<<std::endl;
331 double *range = im->GetScalarRange();
332 mViewer->SetColorWindow(range[1] - range[0]);
333 mViewer->SetColorLevel(0.5 * (range[1] + range[0]));
335 mViewer->GetRenderer()->ResetCamera();
339 mViewer->GetRenderer()->ComputeVisiblePropBounds(bounds);
342 std::cout <<"bounds : "<<bounds[0]<<","
347 <<bounds[5]<<std::endl;
350 mViewer->GetRenderer()->ResetCameraClippingRange(bounds);
352 vtkCamera *camera = mViewer->GetRenderer()->GetActiveCamera();
354 camera->SetViewUp ( spx*0, -spy*1, spz*0);
355 camera->SetPosition( spx*(x1+x2)/2, spy*(y1+y2)/2, spz*10000000);
356 camera->SetFocalPoint ( spx*(x1+x2)/2 , spy*(y1+y2)/2 , spz*0);
358 camera->ComputeViewPlaneNormal();
359 camera->SetParallelScale( spx*(x2-x1)/2.0 );
361 camera->Roll ( 180 );
366 //mInteractor->Render();
369 } // EO namespace creaImageIO