1 /*# ---------------------------------------------------------------------
3 # Copyright (c) CREATIS (Centre de Recherche en Acquisition et Traitement de l'Image
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
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.
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
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 # ------------------------------------------------------------------------ */
26 /*=========================================================================
29 Module: $RCSfile: wxMaracasImageBrowser02.cxx,v $
31 Date: $Date: 2012/11/15 14:14:56 $
32 Version: $Revision: 1.3 $
34 Copyright: (c) 2002, 2003
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.
41 =========================================================================*/
44 #include <wx/filedlg.h>
45 #include "wxMaracasImageBrowser02.h"
47 DEFINE_EVENT_TYPE(wxEVT_MARACASIMAGEBROWSERCUTIMAGE)
49 BEGIN_EVENT_TABLE( wxMaracasImageBrowser02, wxPanel )
50 EVT_MENU( 12121, wxMaracasImageBrowser02::OnRefreshView )
51 EVT_MENU( 12122, wxMaracasImageBrowser02::OnRefreshView2 )
56 //----------------------------------------------------------------------------
59 //wxMaracasImageBrowser02::wxMaracasImageBrowser02( wxWindow* parent, marInterface* mar, wxWindowID id )
60 // : wxPanel( parent, id, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL ){
62 wxMaracasImageBrowser02::wxMaracasImageBrowser02( wxWindow* parent, marFilesBase *dicom ,marParameters* parameters )
63 : wxPanel( parent, -1, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL ){
65 this->SetSize(100,100);
67 //parent->GetToolBar()->EnableTool(ID_TOOLBAR_3D_BROWSER, _view_image->_bboxEnabled);
68 _parameters = parameters;
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 );
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 );
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);
103 wxFlexGridSizer *sizer= new wxFlexGridSizer(1);
104 sizer->AddGrowableCol(0);
105 sizer->AddGrowableRow(1);
108 sizer->Add( panel1 ,1,wxEXPAND,0 );
109 sizer->Add( panel2 , 1, wxGROW , 0 );
111 this->SetSizer( sizer );
112 this->SetAutoLayout( true );
115 //----------------------------------------------------------------------------
116 wxMaracasImageBrowser02::~wxMaracasImageBrowser02()
118 delete _imageviewer2D_1;
121 //----------------------------------------------------------------------------
122 void wxMaracasImageBrowser02::OnBtnCutVolume( wxCommandEvent & event )
124 wxCommandEvent cevent( wxEVT_MARACASIMAGEBROWSERCUTIMAGE, GetId() );
125 cevent.SetEventObject( this );
126 GetEventHandler()->ProcessEvent( cevent );
129 //----------------------------------------------------------------------------
130 void wxMaracasImageBrowser02::OnBtnResetRoi( wxCommandEvent & event )
132 if (_loadRangeImage!=NULL) {_loadRangeImage->Reset();}
134 vtkImageData *imagedata = _vtkbasedata_1->GetImageData();
136 imagedata->GetDimensions(dim);
139 vtkImageViewer2 *IV2= this->_imageviewer2D_1->_imageViewer2XYZ->GetVtkImageViewer2();
140 vtkCamera *camera = IV2->GetRenderer()->GetActiveCamera();
142 camera->GetPosition(pos);
147 // imagedata->GetSpacing(spc);
148 // _manRoiControl->InitRoi( dim[0]*spc[0] , dim[1]*spc[1] , 0.2 );
150 _manRoiControl->InitRoi( dim[0] , dim[1] , 0.2);
151 _manRoiControl->SetActive(true);
153 _btnRestRoi->SetLabel( _T("Reset VOI") );
155 _imageviewer2D_1->Refresh();
160 //----------------------------------------------------------------------------
161 void wxMaracasImageBrowser02::LoadData( marImageData *marimagedata )
163 vtkImageData *imagedata = marimagedata->GetImageData();
164 imagedata->UpdateInformation();
165 imagedata->SetUpdateExtent(imagedata->GetWholeExtent());
168 _vtkbasedata_1 = new vtkBaseData();
169 _vtkbasedata_1->SetMarImageData( marimagedata );
170 _imageviewer2D_1->SetVtkBaseData( _vtkbasedata_1 );
171 _imageviewer2D_1->Configure(true);
173 // vtkImageViewer2 *_imageViewer=_imageviewer2D_1->_imageViewer2XYZ->GetVtkImageViewer2();
175 _manRoiControl = new manualRoiControler();
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 );
189 imagedata->GetSpacing(spc);
190 _mViewRoi->SetSpacing(spc);
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();
199 _imageviewer2D_1->GetWxVTKRenderWindowInteractor()->Render();
201 //----------------------------------------------------------------------------
202 void wxMaracasImageBrowser02::SetROI( int voi[6] )
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);
209 //----------------------------------------------------------------------------
210 void wxMaracasImageBrowser02::GetROI( int ext[6] )
212 double minX,minY,maxX,maxY;
213 _mViewRoi->GetMinMax(minX,minY,maxX,maxY);
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];
229 _loadRangeImage->GetROI( ext ); // ext[4..5]
231 if ( (ext[0]==ext[1]) || (ext[2]==ext[3]) || (ext[4]==ext[5]) )
234 _vtkbasedata_1->GetImageData ()->GetExtent( border );
244 //----------------------------------------------------------------------------
245 void wxMaracasImageBrowser02::Start( ){
246 _loadRangeImage->Start();
249 //----------------------------------------------------------------------------
250 void wxMaracasImageBrowser02::ForceToFinisReadActiveImages(){
251 _loadRangeImage->ForceToFinisReadActiveImages();
253 //----------------------------------------------------------------------------
254 bool wxMaracasImageBrowser02::GetRoiSelected()
256 double minX,minY,maxX,maxY;
257 _mViewRoi->GetMinMax(minX,minY,maxX,maxY);
260 if ( (minX==maxX) || (minY==maxY) )
266 //----------------------------------------------------------------------------
267 void wxMaracasImageBrowser02::Refresh()
269 int z = (int)_vtkbasedata_1->GetZ( );
270 _loadRangeImage->SetActualSlice( z );
271 _loadRangeImage->RefreshSlice();
272 z = _loadRangeImage->GetActualSlice( );
273 _vtkbasedata_1->SetZ( z );
275 // _imageviewer2D_1->Refresh();
277 //----------------------------------------------------------------------------
278 void wxMaracasImageBrowser02::OnRefreshView(wxCommandEvent & event)
282 //----------------------------------------------------------------------------
283 void wxMaracasImageBrowser02::OnRefreshView2(wxCommandEvent & event)
285 _loadRangeImage -> ResetActualSlice();//SIL//
286 int z = _loadRangeImage->GetActualSlice();
287 _vtkbasedata_1->SetZ( z );
288 _imageviewer2D_1->Refresh();
294 //------------------------------------------------------------------------
295 void wxMaracasImageBrowser02::OnBtSaveVOIData(wxCommandEvent& event)
297 wxFileDialog dialog(this, _T("Choose a file"), _T(""), _T(""), _T("*.maracas"), wxSAVE );
298 if (dialog.ShowModal() == wxID_OK)
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();
308 marRAW2Files marraw2;
309 marraw2.saveVolume(directory,filename,vtkimagedata,voi,rescalaSlope,rescalaIntercept);
314 // EOF - wxImageBrowser.cxx