1 /*=========================================================================
4 Module: $RCSfile: wxMaracasImageBrowser02.cxx,v $
6 Date: $Date: 2009/05/19 11:17:26 $
7 Version: $Revision: 1.2 $
9 Copyright: (c) 2002, 2003
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.
16 =========================================================================*/
19 #include <wx/filedlg.h>
20 #include "wxMaracasImageBrowser02.h"
22 DEFINE_EVENT_TYPE(wxEVT_MARACASIMAGEBROWSERCUTIMAGE)
24 BEGIN_EVENT_TABLE( wxMaracasImageBrowser02, wxPanel )
25 EVT_MENU( 12121, wxMaracasImageBrowser02::OnRefreshView )
26 EVT_MENU( 12122, wxMaracasImageBrowser02::OnRefreshView2 )
31 //----------------------------------------------------------------------------
34 //wxMaracasImageBrowser02::wxMaracasImageBrowser02( wxWindow* parent, marInterface* mar, wxWindowID id )
35 // : wxPanel( parent, id, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL ){
37 wxMaracasImageBrowser02::wxMaracasImageBrowser02( wxWindow* parent, marFilesBase *dicom ,marParameters* parameters )
38 : wxPanel( parent, -1, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL ){
40 this->SetSize(100,100);
42 //parent->GetToolBar()->EnableTool(ID_TOOLBAR_3D_BROWSER, _view_image->_bboxEnabled);
43 _parameters = parameters;
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 );
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 );
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);
78 wxFlexGridSizer *sizer= new wxFlexGridSizer(1);
79 sizer->AddGrowableCol(0);
80 sizer->AddGrowableRow(1);
83 sizer->Add( panel1 ,1,wxEXPAND,0 );
84 sizer->Add( panel2 , 1, wxGROW , 0 );
86 this->SetSizer( sizer );
87 this->SetAutoLayout( true );
90 //----------------------------------------------------------------------------
91 wxMaracasImageBrowser02::~wxMaracasImageBrowser02()
93 delete _imageviewer2D_1;
96 //----------------------------------------------------------------------------
97 void wxMaracasImageBrowser02::OnBtnCutVolume( wxCommandEvent & event )
99 wxCommandEvent cevent( wxEVT_MARACASIMAGEBROWSERCUTIMAGE, GetId() );
100 cevent.SetEventObject( this );
101 GetEventHandler()->ProcessEvent( cevent );
104 //----------------------------------------------------------------------------
105 void wxMaracasImageBrowser02::OnBtnResetRoi( wxCommandEvent & event )
107 if (_loadRangeImage!=NULL) {_loadRangeImage->Reset();}
109 vtkImageData *imagedata = _vtkbasedata_1->GetImageData();
111 imagedata->GetDimensions(dim);
114 vtkImageViewer2 *IV2= this->_imageviewer2D_1->_imageViewer2XYZ->GetVtkImageViewer2();
115 vtkCamera *camera = IV2->GetRenderer()->GetActiveCamera();
117 camera->GetPosition(pos);
122 // imagedata->GetSpacing(spc);
123 // _manRoiControl->InitRoi( dim[0]*spc[0] , dim[1]*spc[1] , 0.2 );
125 _manRoiControl->InitRoi( dim[0] , dim[1] , 0.2);
126 _manRoiControl->SetActive(true);
128 _btnRestRoi->SetLabel( _T("Reset VOI") );
130 _imageviewer2D_1->Refresh();
135 //----------------------------------------------------------------------------
136 void wxMaracasImageBrowser02::LoadData( marImageData *marimagedata )
138 vtkImageData *imagedata = marimagedata->GetImageData();
139 imagedata->UpdateInformation();
140 imagedata->SetUpdateExtent(imagedata->GetWholeExtent());
143 _vtkbasedata_1 = new vtkBaseData();
144 _vtkbasedata_1->SetMarImageData( marimagedata );
145 _imageviewer2D_1->SetVtkBaseData( _vtkbasedata_1 );
146 _imageviewer2D_1->Configure(true);
148 // vtkImageViewer2 *_imageViewer=_imageviewer2D_1->_imageViewer2XYZ->GetVtkImageViewer2();
150 _manRoiControl = new manualRoiControler();
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 );
164 imagedata->GetSpacing(spc);
165 _mViewRoi->SetSpacing(spc);
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();
174 _imageviewer2D_1->GetWxVTKRenderWindowInteractor()->Render();
176 //----------------------------------------------------------------------------
177 void wxMaracasImageBrowser02::SetROI( int voi[6] )
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);
184 //----------------------------------------------------------------------------
185 void wxMaracasImageBrowser02::GetROI( int ext[6] )
187 double minX,minY,maxX,maxY;
188 _mViewRoi->GetMinMax(minX,minY,maxX,maxY);
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];
204 _loadRangeImage->GetROI( ext ); // ext[4..5]
206 if ( (ext[0]==ext[1]) || (ext[2]==ext[3]) || (ext[4]==ext[5]) )
209 _vtkbasedata_1->GetImageData ()->GetExtent( border );
219 //----------------------------------------------------------------------------
220 void wxMaracasImageBrowser02::Start( ){
221 _loadRangeImage->Start();
224 //----------------------------------------------------------------------------
225 void wxMaracasImageBrowser02::ForceToFinisReadActiveImages(){
226 _loadRangeImage->ForceToFinisReadActiveImages();
228 //----------------------------------------------------------------------------
229 bool wxMaracasImageBrowser02::GetRoiSelected()
231 double minX,minY,maxX,maxY;
232 _mViewRoi->GetMinMax(minX,minY,maxX,maxY);
235 if ( (minX==maxX) || (minY==maxY) )
241 //----------------------------------------------------------------------------
242 void wxMaracasImageBrowser02::Refresh()
244 int z = (int)_vtkbasedata_1->GetZ( );
245 _loadRangeImage->SetActualSlice( z );
246 _loadRangeImage->RefreshSlice();
247 z = _loadRangeImage->GetActualSlice( );
248 _vtkbasedata_1->SetZ( z );
250 // _imageviewer2D_1->Refresh();
252 //----------------------------------------------------------------------------
253 void wxMaracasImageBrowser02::OnRefreshView(wxCommandEvent & event)
257 //----------------------------------------------------------------------------
258 void wxMaracasImageBrowser02::OnRefreshView2(wxCommandEvent & event)
260 _loadRangeImage -> ResetActualSlice();//SIL//
261 int z = _loadRangeImage->GetActualSlice();
262 _vtkbasedata_1->SetZ( z );
263 _imageviewer2D_1->Refresh();
269 //------------------------------------------------------------------------
270 void wxMaracasImageBrowser02::OnBtSaveVOIData(wxCommandEvent& event)
272 wxFileDialog dialog(this, _T("Choose a file"), _T(""), _T(""), _T("*.maracas"), wxSAVE );
273 if (dialog.ShowModal() == wxID_OK)
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();
283 marRAW2Files marraw2;
284 marraw2.saveVolume(directory,filename,vtkimagedata,voi,rescalaSlope,rescalaIntercept);
289 // EOF - wxImageBrowser.cxx