/*========================================================================= Program: wxMaracas Module: $RCSfile: wxMaracas_N_ViewersWidget.cxx,v $ Language: C++ Date: $Date: 2009/03/30 15:31:15 $ Version: $Revision: 1.4 $ Copyright: (c) 2002, 2003 License: 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. =========================================================================*/ //------------------------------------------------------------------------------------------------------------ // Definition includes //------------------------------------------------------------------------------------------------------------ #include "wxMaracas_N_ViewersWidget.h" //------------------------------------------------------------------------------------------------------------ // Other includes //------------------------------------------------------------------------------------------------------------ //------------------------------------------------------------------------------------------------------------ // Constructors & Destructors //------------------------------------------------------------------------------------------------------------ BEGIN_EVENT_TABLE( wxMaracas_N_ViewersWidget, wxPanel ) EVT_MENU( 12121, wxMaracas_N_ViewersWidget::OnRefreshView ) EVT_MENU( 12122, wxMaracas_N_ViewersWidget::OnDClickLeft ) END_EVENT_TABLE( ); //------------------------------------------------------------------------------------------------------------ // Constructors & Destructors //------------------------------------------------------------------------------------------------------------ wxMaracas_N_ViewersWidget::wxMaracas_N_ViewersWidget(wxWindow *parent, vtkImageData* imagedata, std::vector *nTypeView) : wxPanel( parent, -1, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL) { wxwindow1 = NULL; wxwindow2 = NULL; wxwindow3 = NULL; wxwindow4 = NULL; currentwxwindow = NULL; wxSizer *sizer = new wxBoxSizer(wxVERTICAL); this->SetSizer(sizer); this->SetAutoLayout(true); if(imagedata!=NULL && nTypeView!=NULL ){ this->SetType(nTypeView); this->UpdateLayout(imagedata); } } //------------------------------------------------------------------------- wxMaracas_N_ViewersWidget::~wxMaracas_N_ViewersWidget() { } //------------------------------------------------------------------------------------------------------------ // Methods //------------------------------------------------------------------------------------------------------------ //------------------------------------------------------------------------- void wxMaracas_N_ViewersWidget::Update() { //wxvtkrenderwindowinteractor->Render(); // wxvtkrenderwindowinteractor->Refresh(); // Refresh(); } //------------------------------------------------------------------------- void wxMaracas_N_ViewersWidget::OnRefreshView(wxCommandEvent & event) { RefreshView(); } //---------------------------------------------------------------------------- void wxMaracas_N_ViewersWidget::OnDClickLeft(wxCommandEvent & event) { RefreshView(); } //------------------------------------------------------------------------- vtkRenderer *wxMaracas_N_ViewersWidget::GetRenderer() { return NULL; //renderer; } void wxMaracas_N_ViewersWidget::RefreshView() { if (wxwindow1!=NULL) {wxwindow1->RefreshView(); } if (wxwindow2!=NULL) {wxwindow2->RefreshView(); } if (wxwindow3!=NULL) {wxwindow3->RefreshView(); } if (wxwindow4!=NULL) {wxwindow4->RefreshView(); } } //------------------------------------------------------------------------- wxMaracas_ViewerWidget *wxMaracas_N_ViewersWidget::GetWindow(int iWin) { wxMaracas_ViewerWidget *tmpWin=NULL; if (iWin==1) { tmpWin=wxwindow1; } if (iWin==2) { tmpWin=wxwindow2; } if (iWin==3) { tmpWin=wxwindow3; } if (iWin==4) { tmpWin=wxwindow4; } return tmpWin; } //------------------------------------------------------------------------- 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::UpdateLayout(vtkImageData* imagedata){ wxPanel *panel = this; wxWindow *wxwindow = NULL; wxSizer *sizer = panel->GetSizer(); if(currentwxwindow!=NULL){ sizer->Remove(currentwxwindow); delete currentwxwindow; } //std::cout<<"size "<size()<size()==1) { std::cout<<"type "<<(*nTypeView)[0]<ConfigureVTK(); wxwindow = wxwindow1; }else 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; }else 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; }else 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; } //panel->SetDimension() sizer->Add( wxwindow , 1, wxGROW); sizer->Layout(); currentwxwindow = wxwindow; currentwxwindow->Show(true); this->Layout(); this->Refresh(); } 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); } } double wxMaracas_N_ViewersWidget :: GetX() { return wxwindow1->GetX(); } double wxMaracas_N_ViewersWidget :: GetY() { return wxwindow1->GetY(); } double wxMaracas_N_ViewersWidget :: GetZ() { return wxwindow1->GetZ(); } /* 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; } */