]> Creatis software - creaMaracasVisu.git/blob - lib/maracasVisuLib/src/interface/wxWindows/widgets/include/wxManualRegistration3D.cxx
Support #1768 CREATIS Licence insertion
[creaMaracasVisu.git] / lib / maracasVisuLib / src / interface / wxWindows / widgets / include / wxManualRegistration3D.cxx
1 /*# ---------------------------------------------------------------------
2 #
3 # Copyright (c) CREATIS (Centre de Recherche en Acquisition et Traitement de l'Image
4 #                        pour la Sant�)
5 # Authors : Eduardo Davila, Frederic Cervenansky, Claire Mouton
6 # Previous Authors : Laurent Guigues, Jean-Pierre Roux
7 # CreaTools website : www.creatis.insa-lyon.fr/site/fr/creatools_accueil
8 #
9 #  This software is governed by the CeCILL-B license under French law and
10 #  abiding by the rules of distribution of free software. You can  use,
11 #  modify and/ or redistribute the software under the terms of the CeCILL-B
12 #  license as circulated by CEA, CNRS and INRIA at the following URL
13 #  http://www.cecill.info/licences/Licence_CeCILL-B_V1-en.html
14 #  or in the file LICENSE.txt.
15 #
16 #  As a counterpart to the access to the source code and  rights to copy,
17 #  modify and redistribute granted by the license, users are provided only
18 #  with a limited warranty  and the software's author,  the holder of the
19 #  economic rights,  and the successive licensors  have only  limited
20 #  liability.
21 #
22 #  The fact that you are presently reading this means that you have had
23 #  knowledge of the CeCILL-B license and that you accept its terms.
24 # ------------------------------------------------------------------------ */
25
26 /*=========================================================================
27
28   Program:   wxMaracas
29   Module:    $RCSfile: wxManualRegistration3D.cxx,v $
30   Language:  C++
31   Date:      $Date: 2012/11/15 14:15:16 $
32   Version:   $Revision: 1.2 $
33
34   Copyright: (c) 2002, 2003
35   License:
36
37      This software is distributed WITHOUT ANY WARRANTY; without even
38      the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
39      PURPOSE.  See the above copyright notice for more information.
40
41 =========================================================================*/
42
43
44
45 #include <wx/wx.h>
46 #include <wx/splitter.h>
47 #include <wx/notebook.h>
48 #include <wx/colordlg.h>
49
50 #include "wxManualRegistration3D.h"
51
52
53 //-------------------------------------------------------------------
54 //-------------------------------------------------------------------
55 //-------------------------------------------------------------------
56
57 BEGIN_EVENT_TABLE( wxManualRegistration3D, wxPanel )
58         EVT_MENU( 12121, wxManualRegistration3D::OnRefreshView )
59 //      EVT_MENU( 12122, wxManualTree_MPRWidget::OnDClickLeft  )
60 END_EVENT_TABLE( );
61
62
63 wxManualRegistration3D::wxManualRegistration3D( wxWindow* parent,
64                           marImageData *marimageData )
65 : wxPanel( parent, -1, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL)
66 {
67
68         _marimageData                                                   = marimageData;
69
70     _vtkmprbasedata_A = new vtkMPRBaseData();
71         _vtkmprbasedata_A->SetMarImageData(_marimageData);
72
73         _wxvtk3Dbaseview_Clipping3D                     = NULL;
74         _wxvtkmpr3Dview_A                                       = NULL;
75         _wxvtkclipping3Dview_A                          = NULL;
76
77         _wxvtkmpr3Dview_B                                       = NULL;
78         _wxvtkclipping3Dview_B                          = NULL;
79
80         _panelCutting                                           = NULL;
81
82     wxSplitterWindow    *pnlSplitter    = new wxSplitterWindow( this , -1);
83
84 // EED borrame  
85 //      int ww,hh;
86
87         wxPanel *       view3Dpanel                             = Create3DView( pnlSplitter , _vtkmprbasedata_A );
88         wxPanel *   registrationControl         = CreateRegistration3DControl( pnlSplitter ,_vtkmprbasedata_A);
89
90 //      this->GetSize(&ww,&hh);
91
92     pnlSplitter -> SplitVertically( view3Dpanel, registrationControl , 700);
93         wxBoxSizer      *sizer  = new wxBoxSizer(wxVERTICAL  );
94         sizer           -> Add( pnlSplitter ,1,wxGROW  ,0);
95         pnlSplitter     -> SetMinimumPaneSize( 25 );
96         this            -> SetSizer(sizer);
97
98
99         _transform              = vtkTransform::New();
100         _transformBak   = vtkTransform::New();
101         _transformBak->Identity();
102         xBak=0;
103         yBak=0;
104         zBak=0;
105 }
106
107 //----------------------------------------------------------------------------
108
109 wxManualRegistration3D::~wxManualRegistration3D( )
110 {
111         if (_wxvtk3Dbaseview_Clipping3D         != NULL) { delete       _wxvtk3Dbaseview_Clipping3D;    }
112         if (_wxvtkmpr3Dview_A                           != NULL) { delete       _wxvtkmpr3Dview_A;                              }
113         if (_wxvtkclipping3Dview_A                      != NULL) { delete       _wxvtkclipping3Dview_A;                 }
114
115         if (_wxvtkmpr3Dview_B                           != NULL) { delete       _wxvtkmpr3Dview_B;                              }
116         if (_wxvtkclipping3Dview_B                      != NULL) { delete       _wxvtkclipping3Dview_B;                 }
117 }
118
119
120
121 //----------------------------------------------------------------------------
122 void wxManualRegistration3D::ConfigureVTK()
123 {
124         _wxvtk3Dbaseview_Clipping3D             ->  Configure();
125 //
126         _wxvtkmpr3Dview_A                               ->      Configure();
127         _wxvtkclipping3Dview_A                  ->      Configure();
128         vtkInteractorStyle3DView *vtkinteractorstyle3Dview_A = new vtkInteractorStyle3DView();
129         vtkinteractorstyle3Dview_A->SetWxVtkMPR3DView(_wxvtkmpr3Dview_A);
130         vtkinteractorstyle3Dview_A->SetWxVtkClipping3DView(_wxvtkclipping3Dview_A);
131         _wxvtk3Dbaseview_Clipping3D->GetInteractorStyleBaseView()->AddInteractorStyleMaracas( vtkinteractorstyle3Dview_A );
132 //
133 }
134
135 //----------------------------------------------------------------------------
136 void wxManualRegistration3D::ConfigureVTK_B()
137 {
138         _wxvtkmpr3Dview_B                               ->      Configure();
139         _wxvtkclipping3Dview_B                  ->      Configure();
140         vtkInteractorStyle3DView *vtkinteractorstyle3Dview_B = new vtkInteractorStyle3DView();
141         vtkinteractorstyle3Dview_B->SetWxVtkMPR3DView(_wxvtkmpr3Dview_B);
142         vtkinteractorstyle3Dview_B->SetWxVtkClipping3DView(_wxvtkclipping3Dview_B);
143         _wxvtk3Dbaseview_Clipping3D->GetInteractorStyleBaseView()->AddInteractorStyleMaracas( vtkinteractorstyle3Dview_B );
144 }
145
146 //----------------------------------------------------------------------------
147 void wxManualRegistration3D::OnRefreshView(wxCommandEvent & event)
148 {
149         RefreshView();
150 }
151
152 //----------------------------------------------------------------------------
153 void wxManualRegistration3D::OnTracking(wxCommandEvent& event)
154 {
155         if (_wxvtkmpr3Dview_B!=NULL){
156                 _wxvtkmpr3Dview_B->InitOrientationPointWidget();
157
158                 double spc[3];
159
160                 this->_marimageData->GetImageData()->GetSpacing(spc);  //image t=0
161
162
163                 xBak  = spc[0] * this->_wxvtkmpr3Dview_B->GetVtkMPR3DDataViewer()->GetVtkMPRBaseData()->GetX();
164                 yBak  = spc[1] * this->_wxvtkmpr3Dview_B->GetVtkMPR3DDataViewer()->GetVtkMPRBaseData()->GetY();
165                 zBak  = spc[2] * this->_wxvtkmpr3Dview_B->GetVtkMPR3DDataViewer()->GetVtkMPRBaseData()->GetZ();
166
167                 double mat[16];
168                 mat[0]=_transform->GetMatrix()->GetElement(0,0);
169                 mat[1]=_transform->GetMatrix()->GetElement(0,1);
170                 mat[2]=_transform->GetMatrix()->GetElement(0,2);
171                 mat[3]=_transform->GetMatrix()->GetElement(0,3);
172
173                 mat[4]=_transform->GetMatrix()->GetElement(1,0);
174                 mat[5]=_transform->GetMatrix()->GetElement(1,1);
175                 mat[6]=_transform->GetMatrix()->GetElement(1,2);
176                 mat[7]=_transform->GetMatrix()->GetElement(1,3);
177
178                 mat[8]=_transform->GetMatrix()->GetElement(2,0);
179                 mat[9]=_transform->GetMatrix()->GetElement(2,1);
180                 mat[10]=_transform->GetMatrix()->GetElement(2,2);
181                 mat[11]=_transform->GetMatrix()->GetElement(2,3);
182
183                 mat[12]=_transform->GetMatrix()->GetElement(3,0);
184                 mat[13]=_transform->GetMatrix()->GetElement(3,1);
185                 mat[14]=_transform->GetMatrix()->GetElement(3,2);
186                 mat[15]=_transform->GetMatrix()->GetElement(3,3);
187
188                 _transformBak->SetMatrix(mat);
189         }
190
191 // EED 25 Janvier 2005 TestLoic
192         this->_wxvtkmpr3Dview_A->TestLoic1();
193
194
195 }
196
197
198 //----------------------------------------------------------------------------
199 void wxManualRegistration3D::RefreshView()
200 {
201         double spc[3];
202
203         if ( _wxvtkmpr3Dview_B!=NULL )
204         {
205                 if (_btnTrack->GetValue()==true)
206                 {
207                 
208                         this->_marimageData->GetImageData()->GetSpacing(spc);  // image t=0
209                         vtkTransform *m = this->_wxvtkmpr3Dview_B->GetVtkMPR3DDataViewer()->GetVtkMPRBaseData()->GetTransformOrientation();
210                         double x  = spc[0] * this->_wxvtkmpr3Dview_B->GetVtkMPR3DDataViewer()->GetVtkMPRBaseData()->GetX();
211                         double y  = spc[1] * this->_wxvtkmpr3Dview_B->GetVtkMPR3DDataViewer()->GetVtkMPRBaseData()->GetY();
212                         double z  = spc[2] * this->_wxvtkmpr3Dview_B->GetVtkMPR3DDataViewer()->GetVtkMPRBaseData()->GetZ();
213                         double xx=this->_posX->GetValue()/30.0;
214                         double yy=this->_posY->GetValue()/30.0;
215                         double zz=this->_posZ->GetValue()/30.0;
216                         double sx=this->_scaleX->GetValue()/100.0;
217                         double sy=this->_scaleY->GetValue()/100.0;
218                         double sz=this->_scaleZ->GetValue()/100.0;
219                         _transform->Identity();
220 //                      _transform->Translate(x,y,z);   
221
222
223
224 //                      _transform->Translate((x-xBak),(y-yBak),(z-zBak) );
225 //                      _transform->Translate( xBak , yBak , zBak  );
226                         _transform->Translate( xx , yy , zz  );
227                         _transform->Translate( x , y , z  );
228                         _transform->Concatenate( m->GetMatrix() );
229                         _transform->RotateX( _angAlfa->GetValue()/30.0 );
230                         _transform->RotateY( _angBeta->GetValue()/30.0 );
231                         _transform->RotateZ( _angGama->GetValue()/30.0 );
232                         _transform->Scale( sx,sy,sz );  
233                         _transform->Translate(-(xBak),-(yBak),-(zBak) );
234
235                         _transform->Concatenate( _transformBak->GetMatrix() );
236
237                 }
238
239
240
241                 vtkClipping3DDataViewer *vtkclipping3Ddataviewer = _wxvtkclipping3Dview_B->GetVtkClipping3DDataViewer();
242                 vtkActor *vtkactor;
243                 int i;
244                 for (i=0;i<4;i++)
245                 {
246                         vtkactor = vtkclipping3Ddataviewer->GetTissueActor(i);
247                         vtkactor->SetUserTransform( _transform );       
248                 }
249                 _wxvtkmpr3Dview_B                               -> RefreshView();
250                 _wxvtkclipping3Dview_B                  -> Refresh();
251         }
252
253         _wxvtkmpr3Dview_A                               -> RefreshView();
254         _wxvtkclipping3Dview_A                  -> Refresh();
255         _wxvtk3Dbaseview_Clipping3D             -> Refresh();
256
257         if (_panelCutting!=NULL)
258         {
259                 _panelCutting->RefreshView();
260         }
261
262 }
263
264
265 // EED 7 nov 2006
266 //----------------------------------------------------------------------------
267 wxPanel* wxManualRegistration3D::CreateRegistration3DControl( wxWindow *parent, vtkMPRBaseData *vtkmprbasedata)
268 {
269         wxPanel *panel = new wxPanel(parent,-1);
270
271         int maxX = vtkmprbasedata->GetMaxPositionX();
272         int maxY = vtkmprbasedata->GetMaxPositionY();
273         int maxZ = vtkmprbasedata->GetMaxPositionZ();
274         maxX=100;
275         maxY=100;
276         maxZ=100;
277
278         _posX = new wxSlider( panel, -1,0 , -maxX*2, maxX*2, wxDefaultPosition, wxDefaultSize, wxSL_HORIZONTAL | wxSL_AUTOTICKS  |wxSL_LABELS );
279         _posY = new wxSlider( panel, -1,0 , -maxY*2, maxY*2, wxDefaultPosition, wxDefaultSize, wxSL_HORIZONTAL | wxSL_AUTOTICKS  |wxSL_LABELS );
280         _posZ = new wxSlider( panel, -1,0 , -maxZ*2, maxZ*2, wxDefaultPosition, wxDefaultSize, wxSL_HORIZONTAL | wxSL_AUTOTICKS  |wxSL_LABELS );
281
282         _scaleX = new wxSlider( panel, -1,100 , 0, 200, wxDefaultPosition, wxDefaultSize, wxSL_HORIZONTAL | wxSL_AUTOTICKS  |wxSL_LABELS );
283         _scaleY = new wxSlider( panel, -1,100 , 0, 200, wxDefaultPosition, wxDefaultSize, wxSL_HORIZONTAL | wxSL_AUTOTICKS  |wxSL_LABELS );
284         _scaleZ = new wxSlider( panel, -1,100 , 0, 200, wxDefaultPosition, wxDefaultSize, wxSL_HORIZONTAL | wxSL_AUTOTICKS  |wxSL_LABELS );
285
286
287         _angAlfa = new wxSlider( panel, -1,0 , -100, 100, wxDefaultPosition, wxDefaultSize, wxSL_HORIZONTAL | wxSL_AUTOTICKS  |wxSL_LABELS );
288         _angBeta = new wxSlider( panel, -1,0 , -100, 100, wxDefaultPosition, wxDefaultSize, wxSL_HORIZONTAL | wxSL_AUTOTICKS  |wxSL_LABELS );
289         _angGama = new wxSlider( panel, -1,0 , -100, 100, wxDefaultPosition, wxDefaultSize, wxSL_HORIZONTAL | wxSL_AUTOTICKS  |wxSL_LABELS );
290
291
292         _btnTrack = new wxCheckBox(panel, -1,_T("Tracking"));   
293
294         _posX->SetTickFreq( 10, 0 );
295         _posY->SetTickFreq( 10, 0 );
296         _posZ->SetTickFreq( 10, 0 );
297
298         _angAlfa->SetTickFreq( 30, 0 );
299         _angBeta->SetTickFreq( 30, 0 );
300         _angGama->SetTickFreq( 30, 0 );
301
302
303
304
305         Connect(_posX->GetId()  , wxEVT_COMMAND_SLIDER_UPDATED          , (wxObjectEventFunction) &wxManualRegistration3D::OnPositionRotation   );
306         Connect(_posY->GetId()  , wxEVT_COMMAND_SLIDER_UPDATED          , (wxObjectEventFunction) &wxManualRegistration3D::OnPositionRotation   );
307         Connect(_posZ->GetId()  , wxEVT_COMMAND_SLIDER_UPDATED          , (wxObjectEventFunction) &wxManualRegistration3D::OnPositionRotation   );
308
309         Connect(_scaleX->GetId()        , wxEVT_COMMAND_SLIDER_UPDATED          , (wxObjectEventFunction) &wxManualRegistration3D::OnPositionRotation   );
310         Connect(_scaleY->GetId()        , wxEVT_COMMAND_SLIDER_UPDATED          , (wxObjectEventFunction) &wxManualRegistration3D::OnPositionRotation   );
311         Connect(_scaleZ->GetId()        , wxEVT_COMMAND_SLIDER_UPDATED          , (wxObjectEventFunction) &wxManualRegistration3D::OnPositionRotation   );
312
313         Connect(_angAlfa->GetId()       , wxEVT_COMMAND_SLIDER_UPDATED          , (wxObjectEventFunction) &wxManualRegistration3D::OnPositionRotation   );
314         Connect(_angBeta->GetId()       , wxEVT_COMMAND_SLIDER_UPDATED          , (wxObjectEventFunction) &wxManualRegistration3D::OnPositionRotation   );
315         Connect(_angGama->GetId()       , wxEVT_COMMAND_SLIDER_UPDATED          , (wxObjectEventFunction) &wxManualRegistration3D::OnPositionRotation   );
316
317         Connect(_btnTrack->GetId()      , wxEVT_COMMAND_CHECKBOX_CLICKED                , (wxObjectEventFunction) &wxManualRegistration3D::OnTracking   );
318
319
320     wxBoxSizer *sizerH1 = new wxBoxSizer(wxHORIZONTAL);
321         sizerH1->Add( _posX, 1, wxALL|wxEXPAND, 5);
322         sizerH1->Add( _posY, 1, wxALL|wxEXPAND, 5);
323         sizerH1->Add( _posZ, 1, wxALL|wxEXPAND, 5);
324
325
326     wxBoxSizer *sizerH2 = new wxBoxSizer(wxHORIZONTAL);
327         sizerH2->Add( _scaleX, 1, wxALL|wxEXPAND, 5);
328         sizerH2->Add( _scaleY, 1, wxALL|wxEXPAND, 5);
329         sizerH2->Add( _scaleZ, 1, wxALL|wxEXPAND, 5);
330         
331     wxBoxSizer *sizerH3 = new wxBoxSizer(wxHORIZONTAL);
332         sizerH3->Add( _angAlfa, 1, wxALL|wxEXPAND, 5);
333         sizerH3->Add( _angBeta, 1, wxALL|wxEXPAND, 5);
334         sizerH3->Add( _angGama, 1, wxALL|wxEXPAND, 5);
335
336
337     wxBoxSizer *sizer = new wxBoxSizer(wxVERTICAL);
338         sizer->Add( sizerH1 , 1, wxALL|wxEXPAND, 0);
339         sizer->Add( sizerH2 , 1, wxALL|wxEXPAND, 0);
340         sizer->Add( sizerH3 , 1, wxALL|wxEXPAND, 0);
341         sizer->Add( _btnTrack , 1, wxALL|wxEXPAND, 10);
342         sizer->Add( new wxPanel(panel,-1) , 1, wxALL|wxEXPAND, 0);
343         sizer->Add( new wxPanel(panel,-1) , 1, wxALL|wxEXPAND, 0);
344         sizer->Add( new wxPanel(panel,-1) , 1, wxALL|wxEXPAND, 0);
345
346         panel->SetAutoLayout(true);
347         panel->SetSizer(sizer);
348         panel->SetSize(400,400);
349         panel->Layout();
350
351         return panel;
352 }
353 //----------------------------------------------------------------------------
354 void wxManualRegistration3D::OnPositionRotation(wxScrollEvent& event)
355 {
356
357         RefreshView();
358 }
359
360 //----------------------------------------------------------------------------
361 wxPanel* wxManualRegistration3D::Create3DView( wxWindow *parent, vtkMPRBaseData *vtkmprbasedata)
362 {
363         wxWindow *wxwindow;
364         wxPanel *panel=new wxPanel(parent,-1);
365 //
366         wxSplitterWindow        *panelClipping3D        = new wxSplitterWindow( panel , -1);
367         _wxvtk3Dbaseview_Clipping3D                             = new wxVtk3DBaseView( panelClipping3D );
368 //
369         _wxvtkclipping3Dview_A = new wxVtkClipping3DView(_wxvtk3Dbaseview_Clipping3D);
370         vtkClipping3DDataViewer *vtkclipping3Ddataviewer_A = new vtkClipping3DDataViewer(); 
371         vtkclipping3Ddataviewer_A->SetVtkMPRBaseData(vtkmprbasedata);
372         vtkclipping3Ddataviewer_A->Configure();
373         _wxvtkclipping3Dview_A->SetVtkClipping3DDataViewer(vtkclipping3Ddataviewer_A);
374
375         _wxvtkmpr3Dview_A = new wxVtkMPR3DView( _wxvtk3Dbaseview_Clipping3D );
376         vtkMPR3DDataViewer *vtkmpr3Ddataviewer_A = new vtkMPR3DDataViewer(); 
377         vtkmpr3Ddataviewer_A->SetVtkMPRBaseData(vtkmprbasedata);
378         vtkmpr3Ddataviewer_A->Configure();
379         _wxvtkmpr3Dview_A->SetVtkMPR3DDataViewer(vtkmpr3Ddataviewer_A);
380
381 //--
382
383         wxWindow                        *window3D                       = _wxvtk3Dbaseview_Clipping3D->GetWxVTKRenderWindowInteractor();
384         wxSplitterWindow        *panelControlSplit      = new wxSplitterWindow(panelClipping3D,-1);     
385
386 //
387         wxPanel         *panelControl_A                         = new wxPanel(panelControlSplit,-1,wxDefaultPosition,wxSize(800,800));  
388
389         wxPanel         *controlPanelMPR3D_A            = _wxvtkmpr3Dview_A->CreateControlPanel(panelControl_A);
390         wxPanel         *controlPanelClipping3D_A       = _wxvtkclipping3Dview_A->CreateControlPanel(panelControl_A);
391
392                          _btnCutImageData                       = new wxCheckBox(panelControl_A,-1,_T("Cut Module"));
393                 Connect(_btnCutImageData->GetId() , wxEVT_COMMAND_CHECKBOX_CLICKED  , (wxObjectEventFunction) &wxManualRegistration3D::OnCutImagaData );
394
395
396 //      wxBoxSizer              *sizerCtrol_A                           = new wxBoxSizer(wxVERTICAL);
397         wxFlexGridSizer *sizerCtrol_A               = new wxFlexGridSizer(1);
398
399         sizerCtrol_A->Add(controlPanelMPR3D_A           , 1, wxALL|wxEXPAND, 2);
400         sizerCtrol_A->Add(controlPanelClipping3D_A      , 1, wxALL|wxEXPAND, 2);
401         sizerCtrol_A->Add( _btnCutImageData                     , 1, wxALL, 2);
402
403
404         panelControl_A->SetAutoLayout(true);
405         panelControl_A->SetSizer(sizerCtrol_A);
406         panelControl_A->SetSize(400,350);
407         panelControl_A->Layout();
408
409
410 //
411         _panelControl_B                         = new wxPanel(panelControlSplit,-1,wxDefaultPosition,wxSize(800,800));  
412
413
414         panelControlSplit->SplitVertically(panelControl_A, _panelControl_B);
415         panelControlSplit->SetMinimumPaneSize( 20 );
416
417         wxBoxSizer  *sizerCtrol             = new wxBoxSizer(wxHORIZONTAL);
418         sizerCtrol->Add(panelControlSplit , 1, wxALL|wxEXPAND, 2);
419
420         panelControlSplit->SetAutoLayout(true);
421         panelControlSplit->SetSizer(sizerCtrol);
422 //      panelControlSplit->SetSize(400,350);
423         panelControlSplit->Layout();
424                 
425         int ww,hh;
426         wxWindow *pp=this;
427         while (pp->GetParent()!=NULL) pp=pp->GetParent();
428         pp->GetSize(&ww,&hh);
429
430 //EEDxx2.4
431 //              panelClipping3D -> SetMinimumPaneSize( -50 );
432         panelClipping3D -> SplitHorizontally( panelControlSplit,window3D/*, (int)(hh*0.20)*/ );
433         panelClipping3D -> SetMinimumPaneSize( 20 );
434         wxwindow=panelClipping3D;
435
436     wxBoxSizer *sizerH1 = new wxBoxSizer(wxHORIZONTAL);
437         sizerH1->Add(wxwindow , 1, wxALL|wxEXPAND, 0);
438         panel->SetAutoLayout(true);
439         panel->SetSizer(sizerH1);
440         panel->SetSize(400,400);
441         panel->Layout();
442
443 //EEDxx2.4
444 //      panel->FitInside();
445 //      FitInside();
446
447         return panel;
448 }
449 //--------------------------------------------------------------------------
450 void wxManualRegistration3D::AddPanelControl_B( wxWindow *parent, marImageData *marimagedata)
451 {
452
453 //      _imageData_B=marimagedata->GetImageData();
454
455     vtkMPRBaseData* vtkmprbasedata = new vtkMPRBaseData();
456         vtkmprbasedata->SetMarImageData(marimagedata);
457
458         _wxvtkclipping3Dview_B = new wxVtkClipping3DView(_wxvtk3Dbaseview_Clipping3D);
459         vtkClipping3DDataViewer *vtkclipping3Ddataviewer_B = new vtkClipping3DDataViewer(); 
460         vtkclipping3Ddataviewer_B->SetVtkMPRBaseData(vtkmprbasedata);
461         vtkclipping3Ddataviewer_B->Configure();
462         _wxvtkclipping3Dview_B->SetVtkClipping3DDataViewer(vtkclipping3Ddataviewer_B);
463
464         _wxvtkmpr3Dview_B = new wxVtkMPR3DView( _wxvtk3Dbaseview_Clipping3D );
465         vtkMPR3DDataViewer *vtkmpr3Ddataviewer_B = new vtkMPR3DDataViewer(); 
466         vtkmpr3Ddataviewer_B->SetVtkMPRBaseData(vtkmprbasedata);
467         vtkmpr3Ddataviewer_B->Configure();
468         _wxvtkmpr3Dview_B->SetVtkMPR3DDataViewer(vtkmpr3Ddataviewer_B);
469
470 //
471         wxPanel         *controlPanelMPR3D_B            = _wxvtkmpr3Dview_B->CreateControlPanel(_panelControl_B);
472         wxPanel         *controlPanelClipping3D_B       = _wxvtkclipping3Dview_B->CreateControlPanel(_panelControl_B);
473
474 //      wxBoxSizer              *sizerCtrol_B                           = new wxBoxSizer(wxVERTICAL);
475         wxFlexGridSizer *sizerCtrol_B               = new wxFlexGridSizer(1);
476
477         sizerCtrol_B->Add(controlPanelMPR3D_B , 1, wxALL|wxEXPAND, 2);
478         sizerCtrol_B->Add(controlPanelClipping3D_B , 1, wxALL|wxEXPAND, 2);
479
480         _panelControl_B->SetAutoLayout(true);
481         _panelControl_B->SetSizer(sizerCtrol_B);
482         _panelControl_B->SetSize(400,350);
483         _panelControl_B->Layout();
484 }
485
486 //--------------------------------------------------------------------------
487 void wxManualRegistration3D::AddSecondVolume(marImageData *marimagedata)
488 {
489         AddPanelControl_B(_panelControl_B,marimagedata);
490         ConfigureVTK_B();
491         RefreshView();
492 }
493 //--------------------------------------------------------------------------
494 bool wxManualRegistration3D::GetIfSecondVolumeExist()
495 {
496         bool result=false;
497         if (_wxvtkmpr3Dview_B!=NULL)
498         {
499                 result=true;
500         }
501         return result;
502 }
503 //----------------------------------------------------------------------------
504 void wxManualRegistration3D::OnCutImagaData(wxCommandEvent &event) 
505 {
506         if (_btnCutImageData->GetValue()==true){
507                 _framePanelCutting = new wxFrame(this,-1,_T("Cutting Module"),wxDefaultPosition,wxDefaultSize,wxCAPTION|wxSTAY_ON_TOP| wxRESIZE_BORDER );
508                 _framePanelCutting->SetSize(550,400);
509                 _panelCutting   = new wxPanelCuttingImageData(_framePanelCutting);
510                 _panelCutting->SetWxVtk3DBaseView( _wxvtk3Dbaseview_Clipping3D  );
511                 _panelCutting->SetVtkMPRBaseData( _vtkmprbasedata_A );
512                 _panelCutting->Configure( );
513                 _framePanelCutting->Show();
514 //              _panelCutting->RefreshView();
515                 RefreshView();
516         } else {
517                 if (_framePanelCutting!=NULL){
518                         _panelCutting->RemoveActors();
519                         _framePanelCutting->Close();
520                         _framePanelCutting      = NULL;
521                         _panelCutting           = NULL;
522                 }
523         }
524 }
525
526 //--------------------------------------------------------------------------
527
528
529 // EOF - wxManualRegistration3D.cxx