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