X-Git-Url: https://git.creatis.insa-lyon.fr/pubgit/?a=blobdiff_plain;f=lib%2FmaracasVisuLib%2Fsrc%2Finterface%2FwxWindows%2Fwidgets%2FwxMaracas_N_ViewersWidget.cxx;h=38da613ae54c9cb8be9253c2d28e9f24e6f01507;hb=65c158dc171f8d3114ee3544b2a94a1f41880df0;hp=d9d07c600e6c16fb17c76652f651eac9d7d08f0f;hpb=c5feadbb145eecf6d73f793535b7e23eb18db2cb;p=creaMaracasVisu.git diff --git a/lib/maracasVisuLib/src/interface/wxWindows/widgets/wxMaracas_N_ViewersWidget.cxx b/lib/maracasVisuLib/src/interface/wxWindows/widgets/wxMaracas_N_ViewersWidget.cxx index d9d07c6..38da613 100644 --- a/lib/maracasVisuLib/src/interface/wxWindows/widgets/wxMaracas_N_ViewersWidget.cxx +++ b/lib/maracasVisuLib/src/interface/wxWindows/widgets/wxMaracas_N_ViewersWidget.cxx @@ -3,14 +3,14 @@ Program: wxMaracas Module: $RCSfile: wxMaracas_N_ViewersWidget.cxx,v $ Language: C++ - Date: $Date: 2008/10/31 16:32:42 $ - Version: $Revision: 1.1 $ + Date: $Date: 2010/10/23 12:01:32 $ + Version: $Revision: 1.20 $ Copyright: (c) 2002, 2003 License: - - This software is distributed WITHOUT ANY WARRANTY; without even - the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR + + This software is distributed WITHOUT ANY WARRANTY; without even + the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the above copyright notice for more information. =========================================================================*/ @@ -35,7 +35,7 @@ EVT_MENU( 12122, wxMaracas_N_ViewersWidget::OnDClickLeft ) END_EVENT_TABLE( ); - + //------------------------------------------------------------------------------------------------------------ // Constructors & Destructors //------------------------------------------------------------------------------------------------------------ @@ -45,78 +45,79 @@ wxMaracas_N_ViewersWidget::wxMaracas_N_ViewersWidget(wxWindow *parent, vtkImageData* imagedata, std::vector *nTypeView) : wxPanel( parent, -1, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL) { - wxPanel *panel = this; - wxWindow *wxwindow = NULL; - wxwindow1 = NULL; - wxwindow2 = NULL; - wxwindow3 = NULL; - wxwindow4 = NULL; + wxwindow1 = NULL; + wxwindow2 = NULL; + wxwindow3 = NULL; + wxwindow4 = NULL; + _currentwxw = NULL; + mvtkmprbasedata = NULL; - if (nTypeView->size()==1) - { - wxwindow1 = new wxMaracas_ViewerWidget(panel, imagedata, (*nTypeView)[0]); - wxwindow1->ConfigureVTK(); - wxwindow = wxwindow1; - } + wxSizer *sizer = new wxBoxSizer(wxVERTICAL); + this->SetSizer(sizer); + this->SetAutoLayout(true); - if (nTypeView->size()==2) - { - wxSplitterWindow *spliter = new wxSplitterWindow( panel , -1); - wxwindow1 = new wxMaracas_ViewerWidget(spliter, imagedata, (*nTypeView)[0]); - wxwindow2 = new wxMaracas_ViewerWidget(spliter, imagedata, (*nTypeView)[1]); - wxwindow1->ConfigureVTK(); - wxwindow2->ConfigureVTK(); - spliter -> SplitVertically( wxwindow1 , wxwindow2 ); - wxwindow = spliter; + if(imagedata!=NULL && nTypeView!=NULL ){ + this->SetType(nTypeView); + this->UpdateLayout(imagedata); } - if (nTypeView->size()==3) - { - wxSplitterWindow *spliter = new wxSplitterWindow( panel , -1); - wxSplitterWindow *spliterA = new wxSplitterWindow( spliter , -1); - wxwindow1 = new wxMaracas_ViewerWidget(spliter , imagedata, (*nTypeView)[0]); - wxwindow2 = new wxMaracas_ViewerWidget(spliterA, imagedata, (*nTypeView)[1]); - wxwindow3 = new wxMaracas_ViewerWidget(spliterA, imagedata, (*nTypeView)[2]); - wxwindow1->ConfigureVTK(); - wxwindow2->ConfigureVTK(); - wxwindow3->ConfigureVTK(); - spliter -> SplitVertically( wxwindow1 , spliterA ); - spliterA-> SplitHorizontally( wxwindow2 , wxwindow3 ); - wxwindow = spliter; - } - - if (nTypeView->size()>=4) - { - wxSplitterWindow *spliter = new wxSplitterWindow( panel , -1); - wxSplitterWindow *spliterA = new wxSplitterWindow( spliter , -1); - wxSplitterWindow *spliterB = new wxSplitterWindow( spliter , -1); - wxwindow1 = new wxMaracas_ViewerWidget(spliterA, imagedata, (*nTypeView)[0]); - wxwindow2 = new wxMaracas_ViewerWidget(spliterA, imagedata, (*nTypeView)[1]); - wxwindow3 = new wxMaracas_ViewerWidget(spliterB, imagedata, (*nTypeView)[2]); - wxwindow4 = new wxMaracas_ViewerWidget(spliterB, imagedata, (*nTypeView)[3]); - wxwindow1->ConfigureVTK(); - wxwindow2->ConfigureVTK(); - wxwindow3->ConfigureVTK(); - wxwindow4->ConfigureVTK(); - spliter -> SplitVertically( spliterA , spliterB ); - spliterA-> SplitHorizontally( wxwindow1 , wxwindow2 ); - spliterB-> SplitHorizontally( wxwindow3 , wxwindow4 ); - wxwindow = spliter; - } - - - wxBoxSizer *sizer = new wxBoxSizer(wxVERTICAL); - sizer->Add( wxwindow , 1, wxEXPAND, 0); - panel->SetSizer(sizer); - panel->SetAutoLayout(true); - panel->Layout(); + } + /** + * @pre A wxWindow* object must be provided as a parent for the viewer and the type of layout for the viewer + * @post The layout of the viewer is initialized, if no image is provided at first, a default image is + * used + * @param wxWindow* parent of the window + * @param std::vector* vector of the type for the viewer + * @param vtkImageData* imagedata of the viewer + */ + wxMaracas_N_ViewersWidget::wxMaracas_N_ViewersWidget(wxWindow *parent, std::vector *nTypeView, vtkImageData* imagedata) + : wxPanel( parent, -1){ + wxwindow1 = NULL; + wxwindow2 = NULL; + wxwindow3 = NULL; + wxwindow4 = NULL; + _currentwxw = NULL; + mvtkmprbasedata = NULL; + + wxSizer *sizer = new wxBoxSizer(wxVERTICAL); + this->SetSizer(sizer); + this->SetAutoLayout(true); + + this->SetType(nTypeView); + + /*if(imagedata==NULL){ + double spc[3]; + spc[0] = 1; + spc[1] = 1; + spc[2] = 1; + int extent[6]; + extent[0] = 0; + extent[1] = 1; + extent[2] = 0; + extent[3] = 1; + extent[4] = 0; + extent[5] = 0; + + imagedata = vtkImageData::New(); + imagedata->SetSpacing(spc); + imagedata->SetExtent(extent); + imagedata->SetScalarTypeToUnsignedChar(); + imagedata->AllocateScalars(); + }*/ + + this->UpdateLayout(imagedata); } //------------------------------------------------------------------------- - + wxMaracas_N_ViewersWidget::~wxMaracas_N_ViewersWidget() { + if (mvtkmprbasedata!=NULL) + { + delete mvtkmprbasedata; + } + } //------------------------------------------------------------------------------------------------------------ // Methods @@ -134,12 +135,12 @@ //------------------------------------------------------------------------- - void wxMaracas_N_ViewersWidget::OnRefreshView(wxCommandEvent & event) + void wxMaracas_N_ViewersWidget::OnRefreshView(wxCommandEvent & event) { RefreshView(); } //---------------------------------------------------------------------------- - void wxMaracas_N_ViewersWidget::OnDClickLeft(wxCommandEvent & event) + void wxMaracas_N_ViewersWidget::OnDClickLeft(wxCommandEvent & event) { RefreshView(); } @@ -153,6 +154,7 @@ void wxMaracas_N_ViewersWidget::RefreshView() { + if (wxwindow1!=NULL) {wxwindow1->RefreshView(); } if (wxwindow2!=NULL) {wxwindow2->RefreshView(); } if (wxwindow3!=NULL) {wxwindow3->RefreshView(); } @@ -160,7 +162,7 @@ } //------------------------------------------------------------------------- - wxMaracas_ViewerWidget *wxMaracas_N_ViewersWidget::GetWindow(int iWin) + wxMaracas_ViewerWidget *wxMaracas_N_ViewersWidget::GetWindow(int iWin) { wxMaracas_ViewerWidget *tmpWin=NULL; if (iWin==1) @@ -184,66 +186,201 @@ //------------------------------------------------------------------------- wxVtkBaseView *wxMaracas_N_ViewersWidget::GetwxVtkBaseView(int iWin) - { + { wxVtkBaseView *wxvtkbaseview=NULL; wxMaracas_ViewerWidget *tmpWin=GetWindow(iWin); if (tmpWin!=NULL){ wxvtkbaseview = tmpWin->GetwxVtkBaseView(); } return wxvtkbaseview; } - + + //------------------------------------------------------------------------- + void wxMaracas_N_ViewersWidget::Refresh(bool eraseBackground, const wxRect* rect ) + { + wxPanel::Refresh(false); + } + //------------------------------------------------------------------------- - void wxMaracas_N_ViewersWidget::Refresh(bool eraseBackground, const wxRect* rect ) - { - wxPanel::Refresh(false); + void wxMaracas_N_ViewersWidget::UpdateLayout(vtkImageData* imagedata) + { + wxWindow *wxwindow = NULL; + wxSizer *sizer = this->GetSizer(); + + if (mvtkmprbasedata!=NULL) + { + delete mvtkmprbasedata; + } + + marImageData *marimagedata = new marImageData( imagedata ); + mvtkmprbasedata = new vtkMPRBaseData(); + mvtkmprbasedata->SetMarImageData(marimagedata); + + if(_currentwxw != NULL){ + _currentwxw->Show(false); + delete _currentwxw; + //sizer->Remove(currentwxwindow); + //delete currentwxwindow; + } + + //std::cout<<"size "<size()<size()==1) + { + wxwindow1 = new wxMaracas_ViewerWidget(this, imagedata, (*nTypeView)[0], mvtkmprbasedata); + wxwindow = wxwindow1; + }else if (nTypeView->size()==2) { + wxSplitterWindow *spliter = new wxSplitterWindow( this , -1); + spliter->SetMinimumPaneSize(1); + wxwindow1 = new wxMaracas_ViewerWidget(spliter, imagedata, (*nTypeView)[0], mvtkmprbasedata); + wxwindow2 = new wxMaracas_ViewerWidget(spliter, imagedata, (*nTypeView)[1], mvtkmprbasedata); + spliter -> SplitVertically( wxwindow1 , wxwindow2 ); + wxwindow = spliter; + }else if (nTypeView->size()==3) + { + wxSplitterWindow *spliter = new wxSplitterWindow( this , -1); + wxSplitterWindow *spliterA = new wxSplitterWindow( spliter , -1); + spliter->SetMinimumPaneSize(1); + spliterA->SetMinimumPaneSize(1); + wxwindow1 = new wxMaracas_ViewerWidget(spliter , imagedata, (*nTypeView)[0], mvtkmprbasedata); + wxwindow2 = new wxMaracas_ViewerWidget(spliterA, imagedata, (*nTypeView)[1], mvtkmprbasedata); + wxwindow3 = new wxMaracas_ViewerWidget(spliterA, imagedata, (*nTypeView)[2], mvtkmprbasedata); + spliter -> SplitVertically( wxwindow1 , spliterA ); + spliterA-> SplitHorizontally( wxwindow2 , wxwindow3 ); + wxwindow = spliter; + }else if (nTypeView->size()>=4){ + wxSplitterWindow *spliter = new wxSplitterWindow( this , -1); + wxSplitterWindow *spliterA = new wxSplitterWindow( spliter , -1); + wxSplitterWindow *spliterB = new wxSplitterWindow( spliter , -1); + spliter->SetMinimumPaneSize(1); + spliterA->SetMinimumPaneSize(1); + spliterB->SetMinimumPaneSize(1); + + spliter -> SplitVertically( spliterA , spliterB ); + wxwindow1 = new wxMaracas_ViewerWidget(spliterA, imagedata, (*nTypeView)[0], mvtkmprbasedata); + wxwindow2 = new wxMaracas_ViewerWidget(spliterA, imagedata, (*nTypeView)[1], mvtkmprbasedata); + spliterA-> SplitHorizontally( wxwindow1 , wxwindow2 ); + wxwindow3 = new wxMaracas_ViewerWidget(spliterB, imagedata, (*nTypeView)[2], mvtkmprbasedata); + wxwindow4 = new wxMaracas_ViewerWidget(spliterB, imagedata, (*nTypeView)[3], mvtkmprbasedata); + spliterB-> SplitHorizontally( wxwindow3 , wxwindow4 ); + wxwindow = spliter; + } + + + //panel->SetDimension() + sizer->Add( wxwindow , 1, wxGROW); + sizer->Layout(); + //_currentwxw = wxwindow; + //_currentwxw->Show(true); + + //this->Layout(); + //this->Refresh(); + + +// I don't undestand how this works and not the opposite ... + if (wxwindow4!=NULL) {wxwindow4->ConfigureVTK(); } + if (wxwindow3!=NULL) {wxwindow3->ConfigureVTK(); } + if (wxwindow2!=NULL) {wxwindow2->ConfigureVTK(); } + if (wxwindow1!=NULL) {wxwindow1->ConfigureVTK(); } } +//----------------------------------------------------------------------------------- + void wxMaracas_N_ViewersWidget::SetType(std::vector* type){ + nTypeView = type; + } + + + +//----------------------------------------------------------------------------------- void wxMaracas_N_ViewersWidget::SetImage( vtkImageData *image ) { if (wxwindow1!=NULL) { wxwindow1->SetImage(image); } if (wxwindow2!=NULL) { wxwindow2->SetImage(image); } if (wxwindow3!=NULL) { wxwindow3->SetImage(image); } if (wxwindow4!=NULL) { wxwindow4->SetImage(image); } + ConfigureVTK(); + } +//----------------------------------------------------------------------------------- + void wxMaracas_N_ViewersWidget::ConfigureVTK() + { + if (wxwindow1!=NULL) { wxwindow1->ConfigureVTK(); } + if (wxwindow2!=NULL) { wxwindow2->ConfigureVTK(); } + if (wxwindow3!=NULL) { wxwindow3->ConfigureVTK(); } + if (wxwindow4!=NULL) { wxwindow4->ConfigureVTK(); } + } +//----------------------------------------------------------------------------------- double wxMaracas_N_ViewersWidget :: GetX() { - return wxwindow1->GetX(); + invariant(); + return mvtkmprbasedata->GetX(); +// return wxwindow1->GetX(); } +//----------------------------------------------------------------------------------- double wxMaracas_N_ViewersWidget :: GetY() { - return wxwindow1->GetY(); + invariant(); + return mvtkmprbasedata->GetY(); +// return wxwindow1->GetY(); } +//----------------------------------------------------------------------------------- double wxMaracas_N_ViewersWidget :: GetZ() { - return wxwindow1->GetZ(); + invariant(); + return mvtkmprbasedata->GetZ(); +// return wxwindow1->GetZ(); } +void wxMaracas_N_ViewersWidget :: invariant(){ + if(mvtkmprbasedata == 0){ + throw "The image has not been set in the viewer"; + } +} -/* -double wxMaracas_N_ViewersWidget :: GetZ(int iWin) - { - double answerVal = 0.0; - if (iWin==1) - { - answerVal = wxwindow1->GetZ(); - } - if (iWin==2) - { - answerVal = wxwindow2->GetZ(); - } - if (iWin==3) - { - answerVal = wxwindow3->GetZ(); - } - if (iWin==4) - { - answerVal = wxwindow4->GetZ(); - } - return answerVal; +void wxMaracas_N_ViewersWidget::setColorTransferFunction(vtkColorTransferFunction* colortable){ + if (wxwindow1!=NULL) { + wxwindow1->setColorTransferFunction(colortable); + } + if (wxwindow2!=NULL) { + wxwindow2->setColorTransferFunction(colortable); + } + if (wxwindow3!=NULL) { + wxwindow3->setColorTransferFunction(colortable); + } + if (wxwindow4!=NULL) { + wxwindow4->setColorTransferFunction(colortable); } -*/ +} + +void wxMaracas_N_ViewersWidget::setWindowLevel(double level){ + if (wxwindow1!=NULL) { + wxwindow1->setWindowLevel(level); + } + if (wxwindow2!=NULL) { + wxwindow2->setWindowLevel(level); + } + if (wxwindow3!=NULL) { + wxwindow3->setWindowLevel(level); + } + if (wxwindow4!=NULL) { + wxwindow4->setWindowLevel(level); + } +} +void wxMaracas_N_ViewersWidget::setColorLevel(double level){ + if (wxwindow1!=NULL) { + wxwindow1->setColorLevel(level); + } + if (wxwindow2!=NULL) { + wxwindow2->setColorLevel(level); + } + if (wxwindow3!=NULL) { + wxwindow3->setColorLevel(level); + } + if (wxwindow4!=NULL) { + wxwindow4->setColorLevel(level); + } +} +