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