]> Creatis software - creaMaracasVisu.git/blob - lib/maracasVisuLib/src/interface/wxWindows/widgets/wxMaracas_ViewerWidget.cxx
Bug #1679
[creaMaracasVisu.git] / lib / maracasVisuLib / src / interface / wxWindows / widgets / wxMaracas_ViewerWidget.cxx
1 /*=========================================================================
2
3   Program:   wxMaracas
4   Module:    $RCSfile: wxMaracas_ViewerWidget.cxx,v $
5   Language:  C++
6   Date:      $Date: 2012/10/11 10:45:16 $
7   Version:   $Revision: 1.36 $
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_ViewerWidget.h"
22 #include <wx/notebook.h>
23 //------------------------------------------------------------------------------------------------------------
24 // Other includes
25 //------------------------------------------------------------------------------------------------------------
26         //------------------------------------------------------------------------------------------------------------
27         // Constructors & Destructors
28         //------------------------------------------------------------------------------------------------------------
29
30         wxMaracas_ViewerWidget::wxMaracas_ViewerWidget(wxWindow *parent, vtkImageData* imagedata, int type, vtkMPRBaseData *vtkmprbasedata)
31                 : wxPanel( parent, -1, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL)
32         {
33                 wxPanel *panel = this;
34                 wxWindow *wxwindow = NULL, *window3D    = 0;
35                 wxSplitterWindow        *panelClipping3D= 0;
36 //              wxPanel *panelControl                   = 0;
37 //              wxFlexGridSizer  *sizerCtrol            = 0;
38                 wxPanel *controlPanelMPR3D              = 0;
39                 wxPanel *controlPanelClippingSurf3D     = 0;
40                 //RaC 03-2010 Adding a tab
41                 wxPanel *controlPanelClippingVol3D      = 0;
42
43                 wxBoxSizer *sizer                       = 0;
44
45                 mType = type;
46
47                 if (vtkmprbasedata==NULL)
48                 {
49                         minternalVtkmprbasedata         = true;
50                         mvtkmprbasedata                 = new vtkMPRBaseData();
51                         marImageData    *marimagedata   = new marImageData( imagedata );
52                         mvtkmprbasedata->SetMarImageData(marimagedata);
53                 } else {
54                         minternalVtkmprbasedata         = false;
55                         mvtkmprbasedata                     = vtkmprbasedata;
56                 }
57
58                 mvtk2Dbaseview                  = NULL;
59                 mvtkmpr2Dview_X                 = NULL;
60                 mvtkmpr2Dview_Y                 = NULL;
61                 mvtkmpr2Dview_Z                 = NULL;
62                 mvtkplane2Dview                 = NULL;
63                 mwidgetMesure                   = NULL;
64                 mwxsphereview                   = NULL;
65                 mwxvtkclipping3Dview            = NULL;
66                 mwxvtk3Dbaseview_Clipping3D     = NULL;
67                 mwxvtkmpr3Dview                     = NULL;
68                 vtkmpr3Ddataviewer                  = NULL;
69
70                 if (type==-1)
71                 {
72                         mvtk2Dbaseview  = new wxVtk2DBaseView(panel);
73                         mvtk2Dbaseview->SetVtkBaseData(mvtkmprbasedata);
74                         wxwindow            = mvtk2Dbaseview->GetWxVTKRenderWindowInteractor();
75                 }else if (type==0)
76                 {
77                         mvtkmpr2Dview_Z = new wxVtkMPR2DView(panel,2);
78                         mvtkmpr2Dview_Z->SetVtkBaseData(mvtkmprbasedata);
79                         wxwindow            = mvtkmpr2Dview_Z->GetWxVTKRenderWindowInteractor();
80                 }else if (type==1)
81                 {
82                         mvtkmpr2Dview_X = new wxVtkMPR2DView(panel,0);
83                         mvtkmpr2Dview_X->SetVtkBaseData(mvtkmprbasedata);
84                         wxwindow            = mvtkmpr2Dview_X->GetWxVTKRenderWindowInteractor();
85                 }else if (type==2)
86                 {
87                         mvtkmpr2Dview_Y = new wxVtkMPR2DView(panel,1);
88                         mvtkmpr2Dview_Y->SetVtkBaseData(mvtkmprbasedata);
89                         wxwindow            = mvtkmpr2Dview_Y->GetWxVTKRenderWindowInteractor();
90                 }else if (type==3)
91                 {
92                         mwidgetMesure   = new wxWidgetMesure2D_Plane_in_MPR(panel);
93                         mvtkplane2Dview = new vtkPlane2DView( mwidgetMesure->GetWindow2());
94                         mwidgetMesure   -> SetVtkPlane2DView( mvtkplane2Dview );
95                         mvtkplane2Dview -> SetImgSize( 200 );
96                         mvtkplane2Dview -> SetVtkBaseData(mvtkmprbasedata);
97                         wxwindow        = mwidgetMesure;
98                 }else if (type==4)
99                 {
100                         mwxsphereview   = new wxSphereView( panel , mvtkmprbasedata, mvtkmprbasedata->GetImageData() );
101                         wxwindow=mwxsphereview->GetWxVTKRenderWindowInteractor();
102                 }else if (type==5)
103                 {
104                         panelClipping3D = new wxSplitterWindow( panel , -1);
105                         mwxvtk3Dbaseview_Clipping3D             = new wxVtk3DBaseView( panelClipping3D );
106
107                         mwxvtkclipping3Dview                    = new wxVtkClipping3DView(mwxvtk3Dbaseview_Clipping3D);
108                         vtkClipping3DDataViewer *vtkclipping3Ddataviewer = new vtkClipping3DDataViewer();
109                         vtkclipping3Ddataviewer->SetVtkMPRBaseData(mvtkmprbasedata);                    
110                         vtkclipping3Ddataviewer->Configure();
111                         mwxvtkclipping3Dview->SetVtkClipping3DDataViewer(vtkclipping3Ddataviewer);
112
113                         mwxvtkmpr3Dview                         = new wxVtkMPR3DView( mwxvtk3Dbaseview_Clipping3D );
114                         vtkMPR3DDataViewer *vtkmpr3Ddataviewer  = new vtkMPR3DDataViewer();
115                         vtkmpr3Ddataviewer->SetVtkMPRBaseData(mvtkmprbasedata);
116                         vtkmpr3Ddataviewer->Configure();
117                         mwxvtkmpr3Dview->SetVtkMPR3DDataViewer(vtkmpr3Ddataviewer);
118
119                         window3D = mwxvtk3Dbaseview_Clipping3D->GetWxVTKRenderWindowInteractor();
120
121 //--
122                         wxNotebook *notebook = new wxNotebook(panelClipping3D, -1);
123
124                         // First tab
125                         controlPanelMPR3D               = mwxvtkmpr3Dview->CreateControlPanel(notebook, true);
126                         notebook->AddPage(controlPanelMPR3D, _T("Planes") );
127
128                         // Second Tab
129                         controlPanelClippingSurf3D      = mwxvtkclipping3Dview->CreateSurfControlPanel(notebook);
130                         notebook->AddPage(controlPanelClippingSurf3D, _T("Surface") );
131
132                         //Third tab
133                         //RaC 03-2010 Moving the volume functionnality to other tab. The changes were realized only in the wxVtkClipping3DViewCntrlPanel class
134                         controlPanelClippingVol3D       = mwxvtkclipping3Dview->CreateVolControlPanel(notebook);
135                         notebook->AddPage(controlPanelClippingVol3D, _T("Volume") );
136
137                         panelClipping3D->SplitHorizontally( notebook , window3D , 10  );
138                         //panelClipping3D->SetMinimumPaneSize( 15 );
139                         panelClipping3D->SetMinimumPaneSize( 70 ); // JPR
140
141         /*              EED 04 / Febrary / 2010
142                         panelControl                    = new wxPanel(panelClipping3D,-1);
143                         controlPanelMPR3D               = mwxvtkmpr3Dview->CreateControlPanel(panelControl, false);
144                         controlPanelClipping3D  = mwxvtkclipping3Dview->CreateControlPanel(panelControl);
145         //                               mbtnCutImageData               = new wxCheckBox(panelControl,-1,_T("Cut Module"));
146         //              Connect(_btnCutImageData->GetId() , wxEVT_COMMAND_CHECKBOX_CLICKED  , (wxObjectEventFunction) &wxMPRWidget::OnCutImagaData );
147                         sizerCtrol             = new wxFlexGridSizer(1);
148                         sizerCtrol->Add(controlPanelMPR3D       , 1, wxALL|wxEXPAND, 2);
149                         sizerCtrol->Add(controlPanelClipping3D  , 1, wxALL|wxEXPAND, 2);
150         //              sizerCtrol->Add( mbtnCutImageData       , 1, wxALL, 2);
151                         panelControl->SetAutoLayout(true);
152                         panelControl->SetSizer(sizerCtrol);
153                         panelControl->SetSize(400,350);
154                         panelControl->Layout();
155                         panelClipping3D -> SplitHorizontally( panelControl , window3D , 10  );
156                         panelClipping3D -> SetMinimumPaneSize( 5 );
157          */
158                         wxwindow=panelClipping3D;
159
160                 } else if (type==6)             {
161                         panelClipping3D = new wxSplitterWindow( panel , -1);
162                         mwxvtk3Dbaseview_Clipping3D     = new wxVtk3DBaseView( panelClipping3D );
163
164                         mwxvtkmpr3Dview         = new wxVtkMPR3DView( mwxvtk3Dbaseview_Clipping3D );
165
166                         vtkmpr3Ddataviewer      = new vtkMPR3DDataViewer();
167
168                         wxWindow *window3D = mwxvtk3Dbaseview_Clipping3D->GetWxVTKRenderWindowInteractor();
169
170                         wxPanel *panelControl   = new wxPanel(panelClipping3D,-1);
171                         wxPanel *controlPanelMPR3D = mwxvtkmpr3Dview->CreateControlPanel(panelControl, true);
172
173                         wxFlexGridSizer  *sizerCtrol     = new wxFlexGridSizer(1);
174                         sizerCtrol->Add(controlPanelMPR3D, 1, wxALL|wxEXPAND, 2);
175
176                         panelControl->SetAutoLayout(true);
177                         panelControl->SetSizer(sizerCtrol);
178                         panelControl->SetSize(400,350);
179                         panelControl->Layout();
180                         //panelClipping3D->SetMinimumPaneSize( 5 );
181                         panelClipping3D->SetMinimumPaneSize( 130 );  // FCY
182                         panelClipping3D->SplitHorizontally( panelControl , window3D , 0  );
183                         //panelClipping3D->SetSashSize(10);
184                         panelClipping3D->UpdateSize(); //FCY
185                         wxwindow=panelClipping3D;
186
187                         vtkmpr3Ddataviewer->SetVtkMPRBaseData(mvtkmprbasedata);
188                         //vtkmpr3Ddataviewer->Configure();
189
190                         mwxvtkmpr3Dview->SetVtkMPR3DDataViewer(vtkmpr3Ddataviewer);
191
192                 }else if (type==7)
193                 {
194                         mwxvtk3Dbaseview_Clipping3D = new wxVtk3DBaseView( panel );
195                         wxwindow = (wxWindow*) mwxvtk3Dbaseview_Clipping3D->GetWxVTKRenderWindowInteractor();
196                 }
197
198         sizer = new wxBoxSizer(wxVERTICAL);
199         sizer->Add( wxwindow, 1, wxGROW);
200         panel->SetSizer(sizer);
201         panel->SetAutoLayout(true);
202         sizer->Layout();
203         panel->Layout();
204         panel->Refresh();
205
206         //   mbbtkViewerMaracas= NULL;
207         }
208         //-------------------------------------------------------------------------
209
210         wxMaracas_ViewerWidget::~wxMaracas_ViewerWidget()
211         {
212                 if (minternalVtkmprbasedata==true)
213                 {
214                    if (mvtkmprbasedata)         { delete mvtkmprbasedata;}
215                 }
216                 
217                 if (mvtk2Dbaseview)             { delete mvtk2Dbaseview; }
218                 if (mvtkmpr2Dview_X)            { delete mvtkmpr2Dview_X;}
219                 if (mvtkmpr2Dview_Y)            { delete mvtkmpr2Dview_Y;}
220                 if (mvtkmpr2Dview_Z)            { delete mvtkmpr2Dview_Z;}
221                 if (mwidgetMesure)              { delete mwidgetMesure;  }
222                 if (mvtkplane2Dview)            { delete mvtkplane2Dview;}
223                 if (mwxsphereview)              { delete mwxsphereview;  }
224                 if (mwxvtkmpr3Dview)            { delete mwxvtkmpr3Dview;}
225                 if (mwxvtkclipping3Dview)       { delete mwxvtkclipping3Dview;}
226                 if (mwxvtk3Dbaseview_Clipping3D){ delete mwxvtk3Dbaseview_Clipping3D; mwxvtk3Dbaseview_Clipping3D=NULL;}
227                 if (vtkmpr3Ddataviewer)                 { delete vtkmpr3Ddataviewer;}
228         }
229         //------------------------------------------------------------------------------------------------------------
230         // Methods
231         //------------------------------------------------------------------------------------------------------------
232
233         //-------------------------------------------------------------------------
234
235         void wxMaracas_ViewerWidget::ConfigureVTK()
236         {
237                 int x=0,y=0,z=0;
238                 /*
239                 int ext[6];
240                 ext[0]=0;
241                 ext[1]=0;
242                 ext[2]=0;
243                 ext[3]=0;
244                 ext[4]=0;
245                 ext[5]=0;
246                 */
247                 int ext[] = {0, 0, 0, 0, 0, 0}; //JPR
248
249                 /*double org[3],spc[3];
250                 org[0]=0;
251                 org[1]=0;
252                 org[2]=0;
253                 spc[0]=0;
254                 spc[1]=0;
255                 spc[2]=0;
256                 */
257                 double org[]={0.0, 0.0, 0.0}; //JPR
258                 double spc[]={0.0, 0.0, 0.0}; //JPR
259                 if (mvtkmprbasedata!=NULL)
260                 {
261                         mvtkmprbasedata->Configure();
262                         /*
263                         x = mvtkmprbasedata->GetMaxPositionX()/2;
264                         y = mvtkmprbasedata->GetMaxPositionY()/2;
265                         z = mvtkmprbasedata->GetMaxPositionZ()/2;
266                         */
267
268                         if(mvtkmprbasedata->GetImageData() != NULL)
269                         {
270                                 mvtkmprbasedata->GetImageData()->GetExtent(ext);
271                                 mvtkmprbasedata->GetImageData()->GetOrigin(org);
272                                 mvtkmprbasedata->GetImageData()->GetSpacing(spc);
273
274                                 x = (ext[0]+ext[1])/2;
275                                 y = (ext[2]+ext[3])/2;
276                                 z = (ext[4]+ext[5])/2;
277
278                                 mvtkmprbasedata->SetX( x );
279                                 mvtkmprbasedata->SetY( y );
280                                 mvtkmprbasedata->SetZ( z );
281                         }
282                         else
283                         {
284                                 mvtkmprbasedata->SetX( 0 );
285                                 mvtkmprbasedata->SetY( 0 );
286                                 mvtkmprbasedata->SetZ( 0 );
287                         }
288                 }
289
290                 if ( mvtk2Dbaseview      !=NULL ) { mvtk2Dbaseview->Configure();                }
291                 if ( mvtkmpr2Dview_X     !=NULL ) { mvtkmpr2Dview_X->Configure();               }
292                 if ( mvtkmpr2Dview_Y     !=NULL ) { mvtkmpr2Dview_Y->Configure();               }
293                 if ( mvtkmpr2Dview_Z     !=NULL ) { mvtkmpr2Dview_Z->Configure();               }
294                 if ( mvtkplane2Dview     !=NULL ) { mvtkplane2Dview->Configure();               }
295                 if ( mwidgetMesure       !=NULL ) { mwidgetMesure->ConfigureA(mvtkplane2Dview); }
296                 if ( mwidgetMesure       !=NULL ) { mwidgetMesure->ConfigureA(mvtkplane2Dview); }
297                 if ( mwidgetMesure       !=NULL ) { mwidgetMesure->SetActiveLink(true);         }
298                 if ( mwidgetMesure       !=NULL ) { mwidgetMesure->SetMesureScale( 1 );         }
299                 if ( mwxsphereview       !=NULL ) { mwxsphereview->Configure();                 }
300
301                 
302                 if (mwxvtk3Dbaseview_Clipping3D !=NULL)
303                 {
304                         mwxvtk3Dbaseview_Clipping3D->Configure();
305                 }
306
307                 if (vtkmpr3Ddataviewer                  !=NULL)
308                 {
309                         vtkmpr3Ddataviewer->Configure();
310
311                 }
312
313                 if (mwxvtkmpr3Dview                     !=NULL)
314                 {
315                         mwxvtkmpr3Dview->Configure();
316 //EED???                        mwxvtkmpr3Dview->ResetCamera(ext,org,spc);
317                 }
318
319                 if (mwxvtkclipping3Dview                !=NULL)
320                 {
321                         mwxvtkclipping3Dview->Configure();
322                 }
323
324                 //if(vtkmpr3Ddataviewer!=NULL){vtkmpr3Ddataviewer->Configure();}
325 //              RefreshView();
326
327                 //if (mwxvtkmpr3Dview                           !=NULL) {
328                 //      mwxvtkmpr3Dview->ResetCamera();
329                 //}
330
331         }
332
333         //-------------------------------------------------------------------------
334
335   void wxMaracas_ViewerWidget::Refresh(bool eraseBackground ,const wxRect* rect  )  // virtual  eraseBackground=true , rect=NULL
336   {
337     wxPanel::Refresh(false);
338   }
339
340         //-------------------------------------------------------------------------
341         void wxMaracas_ViewerWidget::RefreshView()
342         {
343                 if (mvtk2Dbaseview                              !=NULL ){ mvtk2Dbaseview->Refresh();                            }
344                 if (mvtkmpr2Dview_X                             !=NULL ){ mvtkmpr2Dview_X->Refresh();                           }
345                 if (mvtkmpr2Dview_Y                             !=NULL ){ mvtkmpr2Dview_Y->Refresh();                           }
346                 if (mvtkmpr2Dview_Z                             !=NULL ){ mvtkmpr2Dview_Z->Refresh();                           }
347                 if (mvtkplane2Dview                             !=NULL ){ mvtkplane2Dview->Refresh();                           }
348                 if (mwxsphereview                               !=NULL ){ mwxsphereview ->Refresh();                            }
349                 if (mwxvtkmpr3Dview                             !=NULL ){ mwxvtkmpr3Dview->RefreshView();                       }
350                 if (mwxvtkclipping3Dview                !=NULL ){ mwxvtkclipping3Dview->Refresh();                      }
351                 if (mwxvtk3Dbaseview_Clipping3D !=NULL ){ mwxvtk3Dbaseview_Clipping3D->Refresh();       }
352         }
353
354         //-------------------------------------------------------------------------
355
356         wxVtkBaseView *wxMaracas_ViewerWidget::GetwxVtkBaseView()
357         {
358                 wxVtkBaseView *wxvtkbaseview=NULL;
359                 if (mvtk2Dbaseview!=NULL){
360                         wxvtkbaseview = mvtk2Dbaseview;
361                 }
362                 if (mvtkmpr2Dview_X!=NULL){
363                         wxvtkbaseview = mvtkmpr2Dview_X;
364                 }
365                 if (mvtkmpr2Dview_Y!=NULL){
366                         wxvtkbaseview = mvtkmpr2Dview_Y;
367                 }
368                 if (mvtkmpr2Dview_Z!=NULL){
369                         wxvtkbaseview = mvtkmpr2Dview_Z;
370                 }
371                 if (mvtkplane2Dview!=NULL){
372                         wxvtkbaseview = mvtkplane2Dview;
373                 }
374                 if (mwxsphereview!=NULL){
375                         wxvtkbaseview = mwxsphereview;
376                 }
377                 if (mwxvtk3Dbaseview_Clipping3D!=NULL){
378                         wxvtkbaseview = mwxvtk3Dbaseview_Clipping3D;
379                 }
380                 return wxvtkbaseview   ;
381         }
382
383         void wxMaracas_ViewerWidget::SetImage( vtkImageData *image )
384         {
385                 if(mvtkmprbasedata !=NULL)
386                 {
387                         marImageData* mar = mvtkmprbasedata->GetMarImageData();
388                         mar->removeImageData(0);
389                         mar->AddImageData(image);
390                 }
391
392                 
393                 if (mvtk2Dbaseview!=NULL)
394                 {
395                         mvtk2Dbaseview->SetImageToVtkViewer(image);
396                 }
397                 
398                 if (mvtkmpr2Dview_X!=NULL){
399                         mvtkmpr2Dview_X->SetImageToVtkViewer(image);
400                 }
401                 if (mvtkmpr2Dview_Y!=NULL){
402                         mvtkmpr2Dview_Y->SetImageToVtkViewer(image);
403                 }
404                 if (mvtkmpr2Dview_Z!=NULL){
405                         mvtkmpr2Dview_Z->SetImageToVtkViewer(image);
406                 }
407                 
408                 if (mvtkplane2Dview!=NULL){
409                         // ???  EED 10 oct 2012
410                 }
411                 if (mwxsphereview!=NULL){
412                         // ???  EED 10 oct 2012
413                 }
414                 if (mwxvtk3Dbaseview_Clipping3D!=NULL){
415                         // ???  EED 10 oct 2012
416                 }
417                 
418                 
419                 
420 //EED 26/11/2009
421 //              ConfigureVTK();
422 //              RefreshView();
423         }
424
425         double wxMaracas_ViewerWidget :: GetX()
426         {
427                 double value = -1;
428                 if(mvtkmprbasedata !=NULL)
429                 {
430                         value = mvtkmprbasedata->GetX();
431                 }
432                 return value;
433         }
434
435         double wxMaracas_ViewerWidget::GetY()
436         {
437                 double value = -1;
438                 if(mvtkmprbasedata !=NULL)
439                 {
440                         value = mvtkmprbasedata->GetY();
441                 }
442                 return value;
443         }
444
445         double wxMaracas_ViewerWidget::GetZ()
446         {
447                 double value = -1;
448                 if(mvtkmprbasedata !=NULL)
449                 {
450                         value = mvtkmprbasedata->GetZ();
451                 }
452                 return value;
453 //              return mvtk2Dbaseview->GetVtkBaseData()->GetZ();
454         }
455
456         void wxMaracas_ViewerWidget::setColorTransferFunction(vtkColorTransferFunction* colortable){
457                 if(mvtkmpr2Dview_X!=NULL){
458                         mvtkmpr2Dview_X->setColorTransferFunction(colortable);
459                 }
460                 if(mvtkmpr2Dview_Y!=NULL){
461                         mvtkmpr2Dview_Y->setColorTransferFunction(colortable);
462                 }
463                 if(mvtkmpr2Dview_Z!=NULL){
464                         mvtkmpr2Dview_Z->setColorTransferFunction(colortable);
465                 }
466                 if(mwxvtkmpr3Dview!=NULL){
467                         mwxvtkmpr3Dview->setColorTransferFunction(colortable);
468                 }
469         }
470
471         void wxMaracas_ViewerWidget::setWindowLevel(double level){
472                 if(mvtkmpr2Dview_X!=NULL){
473                         mvtkmpr2Dview_X->setWindowLevel(level);
474                 }
475                 if(mvtkmpr2Dview_Y!=NULL){
476                         mvtkmpr2Dview_Y->setWindowLevel(level);
477                 }
478                 if(mvtkmpr2Dview_Z!=NULL){
479                         mvtkmpr2Dview_Z->setWindowLevel(level);
480                 }
481                 /*if(mwxvtkmpr3Dview!=NULL){
482                         mwxvtkmpr3Dview->setWindowLevel(level);
483                 }*/
484         }
485
486         void wxMaracas_ViewerWidget::setColorLevel(double level){
487                 if(mvtkmpr2Dview_X!=NULL){
488                         mvtkmpr2Dview_X->setColorLevel(level);
489                 }
490                 if(mvtkmpr2Dview_Y!=NULL){
491                         mvtkmpr2Dview_Y->setColorLevel(level);
492                 }
493                 if(mvtkmpr2Dview_Z!=NULL){
494                         mvtkmpr2Dview_Z->setColorLevel(level);
495                 }
496                 /*if(mwxvtkmpr3Dview!=NULL){
497                         mwxvtkmpr3Dview->setColorLevel(level);
498                 }*/
499     }