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);
63 mslide = new wxSlider(this,-1,0,0,1, wxDefaultPosition, wxSize(400,10), wxSL_HORIZONTAL | wxSL_LABELS);
64 Connect( mslide->GetId(), wxEVT_COMMAND_SLIDER_UPDATED , (wxObjectEventFunction) &WxViewer::OnSlide );
65 mcheck = new wxCheckBox(this,5123,crea::std2wx("Cine Loop"));
66 Connect( mcheck->GetId(), wxEVT_COMMAND_CHECKBOX_CLICKED , (wxObjectEventFunction) &WxViewer::OnCineLoop );
67 mcheck->SetValue(false);
69 mInteractor = new crea::creawxVTKRenderWindowInteractor(this,-1);
70 mInteractor->UseCaptureMouseOn();
72 mViewer = vtkImageViewer2::New();
73 mViewer->SetupInteractor ( mInteractor );
78 topsizer-> Add( mslide,1,wxALIGN_CENTER ,0);
79 topsizer-> Add( mInteractor ,1,wxGROW ,0);
84 //=====================================================================
86 //=====================================================================
90 wxMutexLocker lock(mMutex);
91 GimmickDebugMessage(6,"WxViewer::~WxViewer"
93 // TO DO : desallocate cleanly
95 // delete mInteractor;
98 //=====================================================================
100 //================================================================
101 void WxViewer::SetImageVector(std::vector<boost::shared_ptr<ImagePointerHolder> >& pointers)
103 wxMutexLocker lock(mMutex);
104 GimmickDebugMessage(6,"WxViewer::SetImageVector"<<std::endl);
105 imagePointers=pointers;
107 mslide->SetMax(pointers.size());
108 // Refresh don't work, TO MODIFY
110 mslide->ClearTicks();
116 //================================================================
118 void WxViewer::ShowNextImage()
120 wxMutexLocker lock(mMutex);
123 GimmickDebugMessage(10,"WxViewer::ShowNextImage() "
125 <<imagePointers.size()<<std::endl);
127 if(imagePointers.size()>0)
129 if (mCurrent<imagePointers.size())
131 boost::shared_ptr<ImagePointerHolder> iph = imagePointers[mCurrent];
132 //ImagePointerHolder* iph= imagePointers[mCurrent];
133 vtkImageData* currIm=iph->Get();
135 if ( currIm != mLastImageShown )
138 mLastImageShown = currIm;
145 //ImagePointerHolder* iph=imagePointers[mCurrent];
146 boost::shared_ptr<ImagePointerHolder> iph = imagePointers[mCurrent];
147 vtkImageData* currIm=iph->Get();
149 if ( currIm != mLastImageShown )
152 mLastImageShown = currIm;
158 //================================================================
160 //=====================================================================
161 void WxViewer::ShowImage(vtkImageData* im)
163 GimmickDebugMessage(6,"WxViewer::ShowImage"
167 mViewer->SetInput(im);
169 mViewer->SetSlice( 0 );
171 int x1,x2,y1,y2,z1,z2;
175 //std::cout << "in WxViewer::ShowImage PrintSelf() =";
176 //im->PrintSelf(std::cout, vtkIndent(2));
178 im->GetSpacing(spx,spy,spz);
179 //im->GetExtent (x1,x2,y1,y2,z1,z2); // JPR
180 im->GetWholeExtent (x1,x2,y1,y2,z1,z2);
182 std::cout << "in WxViewer::ShowImage GetWholeExtent ext =";
183 std::cout << " [x1]=" << x1;
184 std::cout << " [x2]=" << x2;
185 std::cout << " [y1]=" << y1;
186 std::cout << " [y2]=" << y2;
187 std::cout << " [z1]=" << z1;
188 std::cout << " [z2]=" << z2;
189 std::cout << std::endl;
212 double *range = im->GetScalarRange();
213 mViewer->SetColorWindow(range[1] - range[0]);
214 mViewer->SetColorLevel(0.5 * (range[1] + range[0]));
216 mViewer->GetRenderer()->ResetCamera();
219 mViewer->GetRenderer()->ComputeVisiblePropBounds(bounds);
221 mViewer->GetRenderer()->ResetCameraClippingRange(bounds);
222 mViewer->GetRenderer()->SetBackground(0.1,0.1,0.2);
225 //================================================================
227 //================================================================
228 bool WxViewer::RefreshIfNecessary()
232 GimmickDebugMessage(10,"WxViewer : Refreshing"<<std::endl);
234 mInteractor->Render();
235 mNeedRefresh = false;
240 //================================================================
242 //==================================================
243 void WxViewer::StopPlayer()
245 wxMutexLocker lock(mMutex);
246 if (mPlayer==0 ) return;
250 //================================================================
252 //==================================================
253 void WxViewer::StartPlayer()
255 if(mcheck->IsChecked())
257 // wxMutexLocker lock(mMutex);
258 if (mPlayer != 0) return;
259 mPlayer = new WxViewerPlayer(this);
269 //================================================================
271 //==================================================
273 void WxViewer::OnCineLoop(wxCommandEvent &Event)
275 if(!mcheck->IsChecked())
284 //================================================================
286 //==================================================
288 void WxViewer::OnSlide(wxCommandEvent &Event)
290 mCurrent = mslide->GetValue();
293 //================================================================
295 //==================================================
297 void WxViewer::SetValue()
299 mslide->SetValue(mCurrent);
302 // BEGIN_EVENT_TABLE(WxGimmickFrame, wxDialog)
304 //================================================================
306 //========================================================================
307 //========================================================================
308 //========================================================================
309 //========================================================================
310 //========================================================================
311 //========================================================================
312 //========================================================================
313 //========================================================================
315 void* WxViewerPlayer::Entry()
318 GimmickDebugMessage(6,"WxViewerPlayer::Entry()"<<std::endl);
320 while(!TestDestroy())
323 mWxViewer->ShowNextImage();
324 mWxViewer->SetValue();
327 endwait = clock () + 0.2 * CLOCKS_PER_SEC ;
328 while (clock() < endwait ) {}
334 //=====================================================================
336 //=====================================================================
337 void WxViewerPlayer::OnExit()
339 GimmickDebugMessage(6,"WxViewerPlayer::OnExit() "<<std::endl);
343 } // EO namespace creaImageIO