wxMaracasImageBrowser02.cxx

Go to the documentation of this file.
00001 /*=========================================================================
00002 
00003   Program:   wxMaracas
00004   Module:    $RCSfile: wxMaracasImageBrowser02.cxx,v $
00005   Language:  C++
00006   Date:      $Date: 2009/05/19 11:17:26 $
00007   Version:   $Revision: 1.2 $
00008 
00009   Copyright: (c) 2002, 2003
00010   License:
00011 
00012      This software is distributed WITHOUT ANY WARRANTY; without even
00013      the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
00014      PURPOSE.  See the above copyright notice for more information.
00015 
00016 =========================================================================*/
00017 
00018 #include <wx/image.h>
00019 #include <wx/filedlg.h>
00020 #include "wxMaracasImageBrowser02.h"
00021 
00022 DEFINE_EVENT_TYPE(wxEVT_MARACASIMAGEBROWSERCUTIMAGE)
00023 
00024 BEGIN_EVENT_TABLE( wxMaracasImageBrowser02, wxPanel )
00025         EVT_MENU( 12121, wxMaracasImageBrowser02::OnRefreshView  )
00026         EVT_MENU( 12122, wxMaracasImageBrowser02::OnRefreshView2 )
00027 END_EVENT_TABLE( );
00028 
00029 
00030 
00031 //----------------------------------------------------------------------------
00032 
00033 //EED 15Avril2008
00034 //wxMaracasImageBrowser02::wxMaracasImageBrowser02( wxWindow* parent, marInterface* mar, wxWindowID id )
00035 //    : wxPanel( parent, id, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL ){
00036 
00037 wxMaracasImageBrowser02::wxMaracasImageBrowser02( wxWindow* parent, marFilesBase *dicom ,marParameters* parameters )
00038     : wxPanel( parent, -1, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL ){
00039 
00040         this->SetSize(100,100);
00041 
00042     //parent->GetToolBar()->EnableTool(ID_TOOLBAR_3D_BROWSER, _view_image->_bboxEnabled);
00043         _parameters = parameters;
00044 
00045     wxPanel *panel1=new wxPanel(this,-1);
00046         _btnRestRoi     = new wxButton (panel1,-1,_T("Set VOI"),wxDefaultPosition ,wxSize(100,80)  );
00047         _loadRangeImage = new LoadRangeImage(panel1,dicom);
00048         _loadRangeImage->SetSize(100,100);
00049         wxButton *bt_SavePerpSlice      = new wxButton(panel1,-1,_T("Save VOI image"));
00050         wxButton *bt_CutVolume  = new wxButton(panel1,-1,_T("Cut Volume"));
00051         Connect(bt_SavePerpSlice->GetId()       , wxEVT_COMMAND_BUTTON_CLICKED , (wxObjectEventFunction) &wxMaracasImageBrowser02::OnBtSaveVOIData );
00052         Connect(bt_CutVolume->GetId()           , wxEVT_COMMAND_BUTTON_CLICKED , (wxObjectEventFunction) &wxMaracasImageBrowser02::OnBtnCutVolume );
00053         Connect(_btnRestRoi->GetId()            , wxEVT_COMMAND_BUTTON_CLICKED  , (wxObjectEventFunction) (wxCommandEventFunction) &wxMaracasImageBrowser02::OnBtnResetRoi      );
00054 
00055 
00056     wxPanel *panel2=new wxPanel(this,-1);
00057         _imageviewer2D_1 = new wxVtk2DBaseView(panel2);
00058         wxVTKRenderWindowInteractor *iren = _imageviewer2D_1->GetWxVTKRenderWindowInteractor();
00059     wxBoxSizer *sizerDown= new wxBoxSizer(wxVERTICAL);
00060         sizerDown->Add( iren            , 1,  wxEXPAND , 0 );
00061     panel2->SetSizer( sizerDown );
00062     panel2->SetAutoLayout( true );
00063     panel2->SetSize( 100,100 );
00064     panel2->Layout();
00065 
00066 
00067 
00068 //    wxBoxSizer *sizer1= new wxBoxSizer(wxHORIZONTAL);
00069     wxFlexGridSizer *sizer1= new wxFlexGridSizer(10);
00070     panel1->SetSizer( sizer1 );
00071         sizer1->AddGrowableCol(1);
00072         sizer1->Add( _btnRestRoi        );
00073         sizer1->Add( _loadRangeImage,1,wxEXPAND,0               );
00074         sizer1->Add( bt_SavePerpSlice);
00075         sizer1->Add( bt_CutVolume);
00076 
00077 
00078     wxFlexGridSizer *sizer= new wxFlexGridSizer(1);
00079         sizer->AddGrowableCol(0);
00080         sizer->AddGrowableRow(1);
00081 
00082 
00083         sizer->Add(     panel1  ,1,wxEXPAND,0 );
00084         sizer->Add(     panel2          , 1,  wxGROW , 0 );
00085 
00086     this->SetSizer( sizer );
00087     this->SetAutoLayout( true );
00088     this->Layout();
00089 }
00090 //----------------------------------------------------------------------------
00091 wxMaracasImageBrowser02::~wxMaracasImageBrowser02()
00092 {
00093   delete _imageviewer2D_1;
00094 }
00095 
00096 //----------------------------------------------------------------------------
00097 void wxMaracasImageBrowser02::OnBtnCutVolume( wxCommandEvent &  event )
00098 {
00099                 wxCommandEvent cevent( wxEVT_MARACASIMAGEBROWSERCUTIMAGE, GetId() );
00100                 cevent.SetEventObject( this );
00101                 GetEventHandler()->ProcessEvent( cevent );
00102 }
00103 
00104 //----------------------------------------------------------------------------
00105 void wxMaracasImageBrowser02::OnBtnResetRoi( wxCommandEvent &  event )
00106 {
00107         if (_loadRangeImage!=NULL) {_loadRangeImage->Reset();}
00108 
00109         vtkImageData *imagedata = _vtkbasedata_1->GetImageData();
00110         int dim[3];
00111         imagedata->GetDimensions(dim);
00112 
00113 
00114         vtkImageViewer2         *IV2= this->_imageviewer2D_1->_imageViewer2XYZ->GetVtkImageViewer2();
00115         vtkCamera               *camera = IV2->GetRenderer()->GetActiveCamera();
00116         double pos[3];
00117         camera->GetPosition(pos);
00118 
00119 
00120 // EED 27 sep 2006
00121 //      double spc[3];
00122 //      imagedata->GetSpacing(spc);
00123 //      _manRoiControl->InitRoi( dim[0]*spc[0] , dim[1]*spc[1] , 0.2 );
00124 
00125         _manRoiControl->InitRoi( dim[0]  , dim[1] , 0.2);
00126         _manRoiControl->SetActive(true);
00127 
00128         _btnRestRoi->SetLabel( _T("Reset VOI") );
00129 
00130         _imageviewer2D_1->Refresh();
00131 
00132 }
00133 
00134 
00135 //----------------------------------------------------------------------------
00136 void wxMaracasImageBrowser02::LoadData( marImageData *marimagedata )
00137 {
00138         vtkImageData *imagedata = marimagedata->GetImageData();
00139         imagedata->UpdateInformation();
00140         imagedata->SetUpdateExtent(imagedata->GetWholeExtent());
00141         imagedata->Update();
00142 
00143         _vtkbasedata_1 = new vtkBaseData();
00144         _vtkbasedata_1->SetMarImageData( marimagedata );
00145         _imageviewer2D_1->SetVtkBaseData( _vtkbasedata_1 );
00146         _imageviewer2D_1->Configure(true);
00147 
00148 //      vtkImageViewer2 *_imageViewer=_imageviewer2D_1->_imageViewer2XYZ->GetVtkImageViewer2();
00149 
00150         _manRoiControl  = new manualRoiControler();
00151 
00152 //JSTG 25-02-08 -------------------------------------
00153         //_mContourModel  = new manualContourModel();
00154         _mContourModel  = new manualContourModelRoi();
00155 //---------------------------------------------------
00156         _mViewRoi               = new manualViewRoi();
00157         _mViewRoi->SetModel( _mContourModel );
00158         _mViewRoi->SetWxVtkBaseView( _imageviewer2D_1 );
00159         _mViewRoi->SetRange( (int)1.5 );
00160 
00161 
00162 // EED 3 oct 2006
00163         double spc[3];
00164         imagedata->GetSpacing(spc);
00165         _mViewRoi->SetSpacing(spc);
00166 
00167         _manRoiControl->SetModelView( _mContourModel , _mViewRoi );
00168         _imageviewer2D_1->GetInteractorStyleBaseView()->AddInteractorStyleMaracas( _manRoiControl );
00169         _manRoiControl->CreateNewManualContour();
00170         _manRoiControl->SetState(0);
00171         _manRoiControl->SetActive(false);
00172         _mViewRoi->RefreshContour();
00173 
00174         _imageviewer2D_1->GetWxVTKRenderWindowInteractor()->Render();
00175 }
00176 //----------------------------------------------------------------------------
00177 void wxMaracasImageBrowser02::SetROI( int voi[6] )
00178 {       
00179         _loadRangeImage->Reset();
00180         _loadRangeImage->SetStartEnd( voi[4],voi[5]);
00181         _manRoiControl->SetRoi( voi[0],voi[2], voi[1],voi[3] );
00182         _manRoiControl->SetActive(true);
00183 }
00184 //----------------------------------------------------------------------------
00185 void wxMaracasImageBrowser02::GetROI( int ext[6] )
00186 {       
00187         double minX,minY,maxX,maxY;
00188         _mViewRoi->GetMinMax(minX,minY,maxX,maxY);
00189         ext[0]=(int)minX;
00190         ext[1]=(int)maxX;
00191         ext[2]=(int)minY;
00192         ext[3]=(int)maxY;
00193 
00194 
00195 
00196 // EED 27 sep 206
00197 //      double spacing[3];
00198 //      _vtkbasedata_1->GetImageData ()->GetSpacing( spacing );
00199 //      ext[0] /= spacing[0];
00200 //      ext[1] /= spacing[0];
00201 //      ext[2] /= spacing[1];
00202 //      ext[3] /= spacing[1];
00203 
00204         _loadRangeImage->GetROI( ext ); // ext[4..5]
00205 
00206         if ( (ext[0]==ext[1]) || (ext[2]==ext[3]) || (ext[4]==ext[5]) )
00207         {
00208                 int border[6];
00209                 _vtkbasedata_1->GetImageData ()->GetExtent( border );
00210                 ext[0] = border[0];
00211                 ext[1] = border[1];
00212                 ext[2] = border[2];
00213                 ext[3] = border[3];
00214                 ext[4] = border[4];
00215                 ext[5] = border[5];
00216         }
00217 
00218 }
00219 //----------------------------------------------------------------------------
00220 void wxMaracasImageBrowser02::Start( ){
00221         _loadRangeImage->Start();
00222 }
00223 
00224 //----------------------------------------------------------------------------
00225 void wxMaracasImageBrowser02::ForceToFinisReadActiveImages(){
00226         _loadRangeImage->ForceToFinisReadActiveImages();
00227 }
00228 //----------------------------------------------------------------------------
00229 bool wxMaracasImageBrowser02::GetRoiSelected()
00230 {
00231         double minX,minY,maxX,maxY;
00232         _mViewRoi->GetMinMax(minX,minY,maxX,maxY);
00233 
00234         bool result=true;
00235         if ( (minX==maxX) || (minY==maxY) )
00236         {
00237                 result=false;
00238         }
00239         return result;
00240 }
00241 //----------------------------------------------------------------------------
00242 void wxMaracasImageBrowser02::Refresh()
00243 {
00244         int z = (int)_vtkbasedata_1->GetZ( ); 
00245         _loadRangeImage->SetActualSlice( z );
00246         _loadRangeImage->RefreshSlice();
00247         z = _loadRangeImage->GetActualSlice(  );
00248         _vtkbasedata_1->SetZ( z );
00249 
00250 //      _imageviewer2D_1->Refresh();
00251 }
00252 //----------------------------------------------------------------------------
00253 void wxMaracasImageBrowser02::OnRefreshView(wxCommandEvent & event)
00254 {
00255         Refresh();
00256 }
00257 //----------------------------------------------------------------------------
00258 void wxMaracasImageBrowser02::OnRefreshView2(wxCommandEvent & event)
00259 {
00260         _loadRangeImage -> ResetActualSlice();//SIL//
00261         int z = _loadRangeImage->GetActualSlice();      
00262         _vtkbasedata_1->SetZ( z );
00263         _imageviewer2D_1->Refresh();
00264 }
00265 
00266 
00267 
00268 // EED 04Janvier2007
00269 //------------------------------------------------------------------------
00270 void wxMaracasImageBrowser02::OnBtSaveVOIData(wxCommandEvent& event)
00271 {
00272         wxFileDialog dialog(this, _T("Choose a file"), _T(""), _T(""), _T("*.maracas"), wxSAVE );
00273         if (dialog.ShowModal() == wxID_OK)
00274         {
00275                 ForceToFinisReadActiveImages();
00276                 std::string directory           = (const char *)(dialog.GetDirectory().mb_str());
00277                 std::string filename            = (const char *)(dialog.GetFilename().mb_str());
00278                 float rescalaSlope          =  _parameters->getRescaleSlope();
00279                 float rescalaIntercept      =  _parameters->getRescaleIntercept();
00280                 vtkImageData *vtkimagedata      = this->_vtkbasedata_1->GetMarImageData()->GetImageData();
00281                 int voi[6];
00282                 this->GetROI(voi);
00283                 marRAW2Files marraw2;
00284                 marraw2.saveVolume(directory,filename,vtkimagedata,voi,rescalaSlope,rescalaIntercept);
00285         }
00286 }
00287 
00288 
00289 // EOF - wxImageBrowser.cxx

Generated on 18 Mar 2010 for creaMaracasVisu_lib by  doxygen 1.6.1