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: 2009/06/05 06:07:39 $
+ Version: $Revision: 1.10 $
Copyright: (c) 2002, 2003
License:
wxMaracas_N_ViewersWidget::wxMaracas_N_ViewersWidget(wxWindow *parent, vtkImageData* imagedata, std::vector<int> *nTypeView)
: wxPanel( parent, -1, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL)
{
- wxPanel *panel = this;
- wxWindow *wxwindow = NULL;
- wxwindow1 = NULL;
- wxwindow2 = NULL;
- wxwindow3 = NULL;
- wxwindow4 = NULL;
-
- if (nTypeView->size()==1)
- {
- wxwindow1 = new wxMaracas_ViewerWidget(panel, imagedata, (*nTypeView)[0]);
- wxwindow1->ConfigureVTK();
- wxwindow = wxwindow1;
- }
-
-
- 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 (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;
+ wxwindow1 = NULL;
+ wxwindow2 = NULL;
+ wxwindow3 = NULL;
+ wxwindow4 = NULL;
+ _currentwxw = NULL;
+ mvtkmprbasedata = NULL;
+
+ wxSizer *sizer = new wxBoxSizer(wxVERTICAL);
+ this->SetSizer(sizer);
+ this->SetAutoLayout(true);
+
+
+ if(imagedata!=NULL && nTypeView!=NULL ){
+ this->SetType(nTypeView);
+ this->UpdateLayout(imagedata);
}
- 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();
+
}
//-------------------------------------------------------------------------
wxMaracas_N_ViewersWidget::~wxMaracas_N_ViewersWidget()
{
+ if (mvtkmprbasedata!=NULL)
+ {
+ delete mvtkmprbasedata;
+ }
+
}
//------------------------------------------------------------------------------------------------------------
// Methods
}
void wxMaracas_N_ViewersWidget::RefreshView()
- {
+ {
if (wxwindow1!=NULL) {wxwindow1->RefreshView(); }
if (wxwindow2!=NULL) {wxwindow2->RefreshView(); }
if (wxwindow3!=NULL) {wxwindow3->RefreshView(); }
}
//-------------------------------------------------------------------------
- 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 "<<nTypeView->size()<<std::endl;
+ if (nTypeView->size()==1)
+ {
+ wxwindow1 = new wxMaracas_ViewerWidget(this, imagedata, (*nTypeView)[0],mvtkmprbasedata);
+
+ wxwindow1->ConfigureVTK();
+ 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);
+ wxwindow1->ConfigureVTK();
+ wxwindow2->ConfigureVTK();
+ 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);
+ 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( this , -1);
+ wxSplitterWindow *spliterA = new wxSplitterWindow( spliter , -1);
+ wxSplitterWindow *spliterB = new wxSplitterWindow( spliter , -1);
+ spliter->SetMinimumPaneSize(1);
+ spliterA->SetMinimumPaneSize(1);
+ spliterB->SetMinimumPaneSize(1);
+ wxwindow1 = new wxMaracas_ViewerWidget(spliterA, imagedata, (*nTypeView)[0],mvtkmprbasedata);
+ wxwindow2 = new wxMaracas_ViewerWidget(spliterA, imagedata, (*nTypeView)[1],mvtkmprbasedata);
+ wxwindow3 = new wxMaracas_ViewerWidget(spliterB, imagedata, (*nTypeView)[2],mvtkmprbasedata);
+ wxwindow4 = new wxMaracas_ViewerWidget(spliterB, imagedata, (*nTypeView)[3],mvtkmprbasedata);
+ 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, wxEXPAND);
+ sizer->Layout();
+ _currentwxw = wxwindow;
+ _currentwxw->Show(true);
+
+ this->Layout();
+ this->Refresh();
}
+//-----------------------------------------------------------------------------------
+ void wxMaracas_N_ViewersWidget::SetType(std::vector<int>* type){
+ nTypeView = type;
+ }
+
+
+
+//-----------------------------------------------------------------------------------
void wxMaracas_N_ViewersWidget::SetImage( vtkImageData *image )
{
- if (wxwindow1!=NULL) { wxwindow1->SetImage(image); }
- if (wxwindow2!=NULL) { wxwindow2->SetImage(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();
+ return mvtkmprbasedata->GetX();
+// return wxwindow1->GetX();
}
+//-----------------------------------------------------------------------------------
double wxMaracas_N_ViewersWidget :: GetY()
{
- return wxwindow1->GetY();
+ return mvtkmprbasedata->GetY();
+// return wxwindow1->GetY();
}
+//-----------------------------------------------------------------------------------
double wxMaracas_N_ViewersWidget :: GetZ()
{
- return wxwindow1->GetZ();
+ return mvtkmprbasedata->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;
- }
-*/