]> Creatis software - creaMaracasVisu.git/blob - lib/maracasVisuLib/src/interface/wxWindows/include/wxMaracasImageBrowser02.cxx
8f1bc7b7df1ef6f5e6d036592a256bf1376075bf
[creaMaracasVisu.git] / lib / maracasVisuLib / src / interface / wxWindows / include / wxMaracasImageBrowser02.cxx
1 /*=========================================================================
2
3   Program:   wxMaracas
4   Module:    $RCSfile: wxMaracasImageBrowser02.cxx,v $
5   Language:  C++
6   Date:      $Date: 2009/05/19 11:17:26 $
7   Version:   $Revision: 1.2 $
8
9   Copyright: (c) 2002, 2003
10   License:
11
12      This software is distributed WITHOUT ANY WARRANTY; without even
13      the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
14      PURPOSE.  See the above copyright notice for more information.
15
16 =========================================================================*/
17
18 #include <wx/image.h>
19 #include <wx/filedlg.h>
20 #include "wxMaracasImageBrowser02.h"
21
22 DEFINE_EVENT_TYPE(wxEVT_MARACASIMAGEBROWSERCUTIMAGE)
23
24 BEGIN_EVENT_TABLE( wxMaracasImageBrowser02, wxPanel )
25         EVT_MENU( 12121, wxMaracasImageBrowser02::OnRefreshView  )
26         EVT_MENU( 12122, wxMaracasImageBrowser02::OnRefreshView2 )
27 END_EVENT_TABLE( );
28
29
30
31 //----------------------------------------------------------------------------
32
33 //EED 15Avril2008
34 //wxMaracasImageBrowser02::wxMaracasImageBrowser02( wxWindow* parent, marInterface* mar, wxWindowID id )
35 //    : wxPanel( parent, id, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL ){
36
37 wxMaracasImageBrowser02::wxMaracasImageBrowser02( wxWindow* parent, marFilesBase *dicom ,marParameters* parameters )
38     : wxPanel( parent, -1, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL ){
39
40         this->SetSize(100,100);
41
42     //parent->GetToolBar()->EnableTool(ID_TOOLBAR_3D_BROWSER, _view_image->_bboxEnabled);
43         _parameters = parameters;
44
45     wxPanel *panel1=new wxPanel(this,-1);
46         _btnRestRoi     = new wxButton (panel1,-1,_T("Set VOI"),wxDefaultPosition ,wxSize(100,80)  );
47         _loadRangeImage = new LoadRangeImage(panel1,dicom);
48         _loadRangeImage->SetSize(100,100);
49         wxButton *bt_SavePerpSlice      = new wxButton(panel1,-1,_T("Save VOI image"));
50         wxButton *bt_CutVolume  = new wxButton(panel1,-1,_T("Cut Volume"));
51         Connect(bt_SavePerpSlice->GetId()       , wxEVT_COMMAND_BUTTON_CLICKED , (wxObjectEventFunction) &wxMaracasImageBrowser02::OnBtSaveVOIData );
52         Connect(bt_CutVolume->GetId()           , wxEVT_COMMAND_BUTTON_CLICKED , (wxObjectEventFunction) &wxMaracasImageBrowser02::OnBtnCutVolume );
53         Connect(_btnRestRoi->GetId()            , wxEVT_COMMAND_BUTTON_CLICKED  , (wxObjectEventFunction) (wxCommandEventFunction) &wxMaracasImageBrowser02::OnBtnResetRoi      );
54
55
56     wxPanel *panel2=new wxPanel(this,-1);
57         _imageviewer2D_1 = new wxVtk2DBaseView(panel2);
58         wxVTKRenderWindowInteractor *iren = _imageviewer2D_1->GetWxVTKRenderWindowInteractor();
59     wxBoxSizer *sizerDown= new wxBoxSizer(wxVERTICAL);
60         sizerDown->Add( iren            , 1,  wxEXPAND , 0 );
61     panel2->SetSizer( sizerDown );
62     panel2->SetAutoLayout( true );
63     panel2->SetSize( 100,100 );
64     panel2->Layout();
65
66
67
68 //    wxBoxSizer *sizer1= new wxBoxSizer(wxHORIZONTAL);
69     wxFlexGridSizer *sizer1= new wxFlexGridSizer(10);
70     panel1->SetSizer( sizer1 );
71         sizer1->AddGrowableCol(1);
72         sizer1->Add( _btnRestRoi        );
73         sizer1->Add( _loadRangeImage,1,wxEXPAND,0               );
74         sizer1->Add( bt_SavePerpSlice);
75         sizer1->Add( bt_CutVolume);
76
77
78     wxFlexGridSizer *sizer= new wxFlexGridSizer(1);
79         sizer->AddGrowableCol(0);
80         sizer->AddGrowableRow(1);
81
82
83         sizer->Add(     panel1  ,1,wxEXPAND,0 );
84         sizer->Add(     panel2          , 1,  wxGROW , 0 );
85
86     this->SetSizer( sizer );
87     this->SetAutoLayout( true );
88     this->Layout();
89 }
90 //----------------------------------------------------------------------------
91 wxMaracasImageBrowser02::~wxMaracasImageBrowser02()
92 {
93   delete _imageviewer2D_1;
94 }
95
96 //----------------------------------------------------------------------------
97 void wxMaracasImageBrowser02::OnBtnCutVolume( wxCommandEvent &  event )
98 {
99                 wxCommandEvent cevent( wxEVT_MARACASIMAGEBROWSERCUTIMAGE, GetId() );
100                 cevent.SetEventObject( this );
101                 GetEventHandler()->ProcessEvent( cevent );
102 }
103
104 //----------------------------------------------------------------------------
105 void wxMaracasImageBrowser02::OnBtnResetRoi( wxCommandEvent &  event )
106 {
107         if (_loadRangeImage!=NULL) {_loadRangeImage->Reset();}
108
109         vtkImageData *imagedata = _vtkbasedata_1->GetImageData();
110         int dim[3];
111         imagedata->GetDimensions(dim);
112
113
114         vtkImageViewer2         *IV2= this->_imageviewer2D_1->_imageViewer2XYZ->GetVtkImageViewer2();
115         vtkCamera               *camera = IV2->GetRenderer()->GetActiveCamera();
116         double pos[3];
117         camera->GetPosition(pos);
118
119
120 // EED 27 sep 2006
121 //      double spc[3];
122 //      imagedata->GetSpacing(spc);
123 //      _manRoiControl->InitRoi( dim[0]*spc[0] , dim[1]*spc[1] , 0.2 );
124
125         _manRoiControl->InitRoi( dim[0]  , dim[1] , 0.2);
126         _manRoiControl->SetActive(true);
127
128         _btnRestRoi->SetLabel( _T("Reset VOI") );
129
130         _imageviewer2D_1->Refresh();
131
132 }
133
134
135 //----------------------------------------------------------------------------
136 void wxMaracasImageBrowser02::LoadData( marImageData *marimagedata )
137 {
138         vtkImageData *imagedata = marimagedata->GetImageData();
139         imagedata->UpdateInformation();
140         imagedata->SetUpdateExtent(imagedata->GetWholeExtent());
141         imagedata->Update();
142
143         _vtkbasedata_1 = new vtkBaseData();
144         _vtkbasedata_1->SetMarImageData( marimagedata );
145         _imageviewer2D_1->SetVtkBaseData( _vtkbasedata_1 );
146         _imageviewer2D_1->Configure(true);
147
148 //      vtkImageViewer2 *_imageViewer=_imageviewer2D_1->_imageViewer2XYZ->GetVtkImageViewer2();
149
150         _manRoiControl  = new manualRoiControler();
151
152 //JSTG 25-02-08 -------------------------------------
153         //_mContourModel  = new manualContourModel();
154         _mContourModel  = new manualContourModelRoi();
155 //---------------------------------------------------
156         _mViewRoi               = new manualViewRoi();
157         _mViewRoi->SetModel( _mContourModel );
158         _mViewRoi->SetWxVtkBaseView( _imageviewer2D_1 );
159         _mViewRoi->SetRange( (int)1.5 );
160
161
162 // EED 3 oct 2006
163         double spc[3];
164         imagedata->GetSpacing(spc);
165         _mViewRoi->SetSpacing(spc);
166
167         _manRoiControl->SetModelView( _mContourModel , _mViewRoi );
168         _imageviewer2D_1->GetInteractorStyleBaseView()->AddInteractorStyleMaracas( _manRoiControl );
169         _manRoiControl->CreateNewManualContour();
170         _manRoiControl->SetState(0);
171         _manRoiControl->SetActive(false);
172         _mViewRoi->RefreshContour();
173
174         _imageviewer2D_1->GetWxVTKRenderWindowInteractor()->Render();
175 }
176 //----------------------------------------------------------------------------
177 void wxMaracasImageBrowser02::SetROI( int voi[6] )
178 {       
179         _loadRangeImage->Reset();
180         _loadRangeImage->SetStartEnd( voi[4],voi[5]);
181         _manRoiControl->SetRoi( voi[0],voi[2], voi[1],voi[3] );
182         _manRoiControl->SetActive(true);
183 }
184 //----------------------------------------------------------------------------
185 void wxMaracasImageBrowser02::GetROI( int ext[6] )
186 {       
187         double minX,minY,maxX,maxY;
188         _mViewRoi->GetMinMax(minX,minY,maxX,maxY);
189         ext[0]=(int)minX;
190         ext[1]=(int)maxX;
191         ext[2]=(int)minY;
192         ext[3]=(int)maxY;
193
194
195
196 // EED 27 sep 206
197 //      double spacing[3];
198 //      _vtkbasedata_1->GetImageData ()->GetSpacing( spacing );
199 //      ext[0] /= spacing[0];
200 //      ext[1] /= spacing[0];
201 //      ext[2] /= spacing[1];
202 //      ext[3] /= spacing[1];
203
204         _loadRangeImage->GetROI( ext ); // ext[4..5]
205
206         if ( (ext[0]==ext[1]) || (ext[2]==ext[3]) || (ext[4]==ext[5]) )
207         {
208                 int border[6];
209                 _vtkbasedata_1->GetImageData ()->GetExtent( border );
210                 ext[0] = border[0];
211                 ext[1] = border[1];
212                 ext[2] = border[2];
213                 ext[3] = border[3];
214                 ext[4] = border[4];
215                 ext[5] = border[5];
216         }
217
218 }
219 //----------------------------------------------------------------------------
220 void wxMaracasImageBrowser02::Start( ){
221         _loadRangeImage->Start();
222 }
223
224 //----------------------------------------------------------------------------
225 void wxMaracasImageBrowser02::ForceToFinisReadActiveImages(){
226         _loadRangeImage->ForceToFinisReadActiveImages();
227 }
228 //----------------------------------------------------------------------------
229 bool wxMaracasImageBrowser02::GetRoiSelected()
230 {
231         double minX,minY,maxX,maxY;
232         _mViewRoi->GetMinMax(minX,minY,maxX,maxY);
233
234         bool result=true;
235         if ( (minX==maxX) || (minY==maxY) )
236         {
237                 result=false;
238         }
239         return result;
240 }
241 //----------------------------------------------------------------------------
242 void wxMaracasImageBrowser02::Refresh()
243 {
244         int z = (int)_vtkbasedata_1->GetZ( ); 
245         _loadRangeImage->SetActualSlice( z );
246         _loadRangeImage->RefreshSlice();
247         z = _loadRangeImage->GetActualSlice(  );
248         _vtkbasedata_1->SetZ( z );
249
250 //      _imageviewer2D_1->Refresh();
251 }
252 //----------------------------------------------------------------------------
253 void wxMaracasImageBrowser02::OnRefreshView(wxCommandEvent & event)
254 {
255         Refresh();
256 }
257 //----------------------------------------------------------------------------
258 void wxMaracasImageBrowser02::OnRefreshView2(wxCommandEvent & event)
259 {
260         _loadRangeImage -> ResetActualSlice();//SIL//
261         int z = _loadRangeImage->GetActualSlice();      
262         _vtkbasedata_1->SetZ( z );
263         _imageviewer2D_1->Refresh();
264 }
265
266
267
268 // EED 04Janvier2007
269 //------------------------------------------------------------------------
270 void wxMaracasImageBrowser02::OnBtSaveVOIData(wxCommandEvent& event)
271 {
272         wxFileDialog dialog(this, _T("Choose a file"), _T(""), _T(""), _T("*.maracas"), wxSAVE );
273         if (dialog.ShowModal() == wxID_OK)
274         {
275                 ForceToFinisReadActiveImages();
276                 std::string directory           = (const char *)(dialog.GetDirectory().mb_str());
277                 std::string filename            = (const char *)(dialog.GetFilename().mb_str());
278                 float rescalaSlope          =  _parameters->getRescaleSlope();
279                 float rescalaIntercept      =  _parameters->getRescaleIntercept();
280                 vtkImageData *vtkimagedata      = this->_vtkbasedata_1->GetMarImageData()->GetImageData();
281                 int voi[6];
282                 this->GetROI(voi);
283                 marRAW2Files marraw2;
284                 marraw2.saveVolume(directory,filename,vtkimagedata,voi,rescalaSlope,rescalaIntercept);
285         }
286 }
287
288
289 // EOF - wxImageBrowser.cxx