]> Creatis software - creaMaracasVisu.git/blob - lib/maracasVisuLib/src/interface/wxWindows/widgets/wxMaracas_N_ViewersWidget.cxx
*** empty log message ***
[creaMaracasVisu.git] / lib / maracasVisuLib / src / interface / wxWindows / widgets / wxMaracas_N_ViewersWidget.cxx
1 /*=========================================================================
2
3   Program:   wxMaracas
4   Module:    $RCSfile: wxMaracas_N_ViewersWidget.cxx,v $
5   Language:  C++
6   Date:      $Date: 2009/05/04 07:35:42 $
7   Version:   $Revision: 1.8 $
8
9   Copyright: (c) 2002, 2003
10   License:
11   
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.
15
16 =========================================================================*/
17
18 //------------------------------------------------------------------------------------------------------------
19 // Definition includes
20 //------------------------------------------------------------------------------------------------------------
21 #include "wxMaracas_N_ViewersWidget.h"
22
23 //------------------------------------------------------------------------------------------------------------
24 // Other includes
25 //------------------------------------------------------------------------------------------------------------
26
27
28         //------------------------------------------------------------------------------------------------------------
29         // Constructors & Destructors
30         //------------------------------------------------------------------------------------------------------------
31
32
33         BEGIN_EVENT_TABLE( wxMaracas_N_ViewersWidget, wxPanel )
34                 EVT_MENU( 12121, wxMaracas_N_ViewersWidget::OnRefreshView )
35                 EVT_MENU( 12122, wxMaracas_N_ViewersWidget::OnDClickLeft  )
36         END_EVENT_TABLE( );
37
38         
39         //------------------------------------------------------------------------------------------------------------
40         // Constructors & Destructors
41         //------------------------------------------------------------------------------------------------------------
42
43
44
45         wxMaracas_N_ViewersWidget::wxMaracas_N_ViewersWidget(wxWindow *parent, vtkImageData* imagedata, std::vector<int> *nTypeView)
46                 : wxPanel( parent, -1, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL)
47         {
48                 wxwindow1       = NULL;
49                 wxwindow2       = NULL;
50                 wxwindow3       = NULL;
51                 wxwindow4       = NULL;
52
53                 _currentwxw = NULL;
54
55                 wxSizer *sizer  = new wxBoxSizer(wxVERTICAL);
56                 this->SetSizer(sizer);
57                 this->SetAutoLayout(true);
58                 
59                 
60                 if(imagedata!=NULL && nTypeView!=NULL ){
61                         this->SetType(nTypeView);
62                         this->UpdateLayout(imagedata);
63                 }
64
65                 
66         }
67         //-------------------------------------------------------------------------
68           
69         wxMaracas_N_ViewersWidget::~wxMaracas_N_ViewersWidget()
70         {
71                 
72         }
73         //------------------------------------------------------------------------------------------------------------
74         // Methods
75         //------------------------------------------------------------------------------------------------------------
76
77
78         //-------------------------------------------------------------------------
79
80         void wxMaracas_N_ViewersWidget::Update()
81         {
82                 //wxvtkrenderwindowinteractor->Render();
83         //    wxvtkrenderwindowinteractor->Refresh();
84         //    Refresh();
85         }
86
87         //-------------------------------------------------------------------------
88
89         void wxMaracas_N_ViewersWidget::OnRefreshView(wxCommandEvent & event) 
90         {
91                 RefreshView();
92         }
93         //----------------------------------------------------------------------------
94         void wxMaracas_N_ViewersWidget::OnDClickLeft(wxCommandEvent & event) 
95         {
96                 RefreshView();
97         }
98
99                 //-------------------------------------------------------------------------
100
101         vtkRenderer *wxMaracas_N_ViewersWidget::GetRenderer()
102         {
103                 return NULL; //renderer;
104         }
105
106         void wxMaracas_N_ViewersWidget::RefreshView()
107         {
108                 if (wxwindow1!=NULL) {wxwindow1->RefreshView(); }
109                 if (wxwindow2!=NULL) {wxwindow2->RefreshView(); }
110                 if (wxwindow3!=NULL) {wxwindow3->RefreshView(); }
111                 if (wxwindow4!=NULL) {wxwindow4->RefreshView(); }
112         }
113
114         //-------------------------------------------------------------------------
115         wxMaracas_ViewerWidget *wxMaracas_N_ViewersWidget::GetWindow(int iWin)  
116         {
117                 wxMaracas_ViewerWidget *tmpWin=NULL;
118                 if  (iWin==1)
119                 {
120                         tmpWin=wxwindow1;
121                 }
122                 if  (iWin==2)
123                 {
124                         tmpWin=wxwindow2;
125                 }
126                 if  (iWin==3)
127                 {
128                         tmpWin=wxwindow3;
129                 }
130                 if  (iWin==4)
131                 {
132                         tmpWin=wxwindow4;
133                 }
134                 return tmpWin;
135         }
136
137         //-------------------------------------------------------------------------
138         wxVtkBaseView *wxMaracas_N_ViewersWidget::GetwxVtkBaseView(int iWin)
139         { 
140                 wxVtkBaseView *wxvtkbaseview=NULL;
141                 wxMaracas_ViewerWidget *tmpWin=GetWindow(iWin);
142                 if (tmpWin!=NULL){  wxvtkbaseview = tmpWin->GetwxVtkBaseView();  }
143                 return wxvtkbaseview;
144         }
145    
146         //-------------------------------------------------------------------------
147  void wxMaracas_N_ViewersWidget::Refresh(bool eraseBackground, const wxRect* rect )
148  {
149          wxPanel::Refresh(false);
150  }
151
152  void wxMaracas_N_ViewersWidget::UpdateLayout(vtkImageData* imagedata){
153
154                 wxWindow                                *wxwindow       = NULL;
155                 wxSizer *sizer  = this->GetSizer();     
156                 
157                 if(_currentwxw != NULL){
158                         _currentwxw->Show(false);
159                         delete _currentwxw;
160                         //sizer->Remove(currentwxwindow);                       
161                         //delete currentwxwindow;
162                 }
163
164                 //std::cout<<"size "<<nTypeView->size()<<std::endl;
165                 if (nTypeView->size()==1)
166                 {
167                         wxwindow1 = new wxMaracas_ViewerWidget(this, imagedata, (*nTypeView)[0]);
168
169                         wxwindow1->ConfigureVTK();
170                         wxwindow = wxwindow1;
171                 }else   if (nTypeView->size()==2)       {
172
173                         
174                         wxSplitterWindow        *spliter        = new wxSplitterWindow( this , -1);
175                         wxwindow1 = new wxMaracas_ViewerWidget(spliter, imagedata, (*nTypeView)[0]);
176                         wxwindow2 = new wxMaracas_ViewerWidget(spliter, imagedata, (*nTypeView)[1]);
177                         wxwindow1->ConfigureVTK();
178                         wxwindow2->ConfigureVTK();
179                         spliter -> SplitVertically( wxwindow1 , wxwindow2  );
180                         wxwindow = spliter;
181                 }else if (nTypeView->size()==3)
182                 {
183                         wxSplitterWindow        *spliter        = new wxSplitterWindow( this , -1);
184                         wxSplitterWindow        *spliterA       = new wxSplitterWindow( spliter , -1);
185                         wxwindow1 = new wxMaracas_ViewerWidget(spliter , imagedata, (*nTypeView)[0]);
186                         wxwindow2 = new wxMaracas_ViewerWidget(spliterA, imagedata, (*nTypeView)[1]);
187                         wxwindow3 = new wxMaracas_ViewerWidget(spliterA, imagedata, (*nTypeView)[2]);
188                         wxwindow1->ConfigureVTK();
189                         wxwindow2->ConfigureVTK();
190                         wxwindow3->ConfigureVTK();
191                         spliter -> SplitVertically( wxwindow1 , spliterA   );
192                         spliterA-> SplitHorizontally( wxwindow2 , wxwindow3  );
193                         wxwindow = spliter;
194                 }else if (nTypeView->size()>=4){
195                         wxSplitterWindow        *spliter        = new wxSplitterWindow( this , -1);
196                         wxSplitterWindow        *spliterA       = new wxSplitterWindow( spliter , -1);
197                         wxSplitterWindow        *spliterB       = new wxSplitterWindow( spliter , -1);
198                         wxwindow1 = new wxMaracas_ViewerWidget(spliterA, imagedata, (*nTypeView)[0]);
199                         wxwindow2 = new wxMaracas_ViewerWidget(spliterA, imagedata, (*nTypeView)[1]);
200                         wxwindow3 = new wxMaracas_ViewerWidget(spliterB, imagedata, (*nTypeView)[2]);
201                         wxwindow4 = new wxMaracas_ViewerWidget(spliterB, imagedata, (*nTypeView)[3]);
202                         wxwindow1->ConfigureVTK();
203                         wxwindow2->ConfigureVTK();
204                         wxwindow3->ConfigureVTK();
205                         wxwindow4->ConfigureVTK();
206                         spliter -> SplitVertically( spliterA , spliterB   );
207                         spliterA-> SplitHorizontally( wxwindow1 , wxwindow2  );
208                         spliterB-> SplitHorizontally( wxwindow3 , wxwindow4  );
209                         wxwindow = spliter;
210                 }
211                 
212                 //panel->SetDimension()
213                 sizer->Add( wxwindow , 1, wxEXPAND);
214                 sizer->Layout();
215                 _currentwxw = wxwindow;         
216                 _currentwxw->Show(true);
217                 
218                 this->Layout();
219                 this->Refresh();
220  }
221
222  void wxMaracas_N_ViewersWidget::SetType(std::vector<int>* type){
223          nTypeView = type;
224  }
225  void wxMaracas_N_ViewersWidget::SetImage( vtkImageData *image  )
226  {
227          if (wxwindow1!=NULL) { 
228                  
229                 wxwindow1->SetImage(image); 
230         }
231          if (wxwindow2!=NULL) { wxwindow2->SetImage(image); } 
232          if (wxwindow3!=NULL) { wxwindow3->SetImage(image); }
233          if (wxwindow4!=NULL) { wxwindow4->SetImage(image); }
234
235
236  }
237
238
239 double wxMaracas_N_ViewersWidget :: GetX()
240 {
241         return wxwindow1->GetX();
242 }
243
244 double wxMaracas_N_ViewersWidget :: GetY()
245 {
246         return wxwindow1->GetY();
247 }
248
249
250 double wxMaracas_N_ViewersWidget :: GetZ()
251 {
252         return wxwindow1->GetZ();
253 }
254
255
256 /*
257 double wxMaracas_N_ViewersWidget :: GetZ(int iWin)
258         {
259                 double answerVal = 0.0;
260                 if  (iWin==1)
261                 {
262                         answerVal = wxwindow1->GetZ();
263                 }
264                 if  (iWin==2)
265                 {
266                         answerVal = wxwindow2->GetZ();
267                 }
268                 if  (iWin==3)
269                 {
270                         answerVal = wxwindow3->GetZ();
271                 }
272                 if  (iWin==4)
273                 {
274                         answerVal = wxwindow4->GetZ();
275                 }
276                 return answerVal;
277         }
278 */