]> Creatis software - creaMaracasVisu.git/blob - lib/maracasVisuLib/src/interface/wxWindows/widgets/wxVtkMPR3DView.cxx
e740c60db0b54851abceeaad79c2adbed82edaec
[creaMaracasVisu.git] / lib / maracasVisuLib / src / interface / wxWindows / widgets / wxVtkMPR3DView.cxx
1 #include "wxVtkMPR3DView.h"
2
3 #include "vtkDataSetMapper.h"
4 #include "vtkPlaneSource.h"
5 #include "vtkProbeFilter.h"
6 #include "vtkStructuredPoints.h"
7 #include "vtkMetaImageWriter.h"
8 #include "vtkDataSetMapper.h"
9 #include "vtkImageChangeInformation.h"
10 #include "vtkPointData.h"
11 #include "vtkWindowLevelLookupTable.h"
12 #include "vtkPlane.h"
13 #include "vtkCutter.h"
14 #include "vtkTransform.h"
15 #include "vtkmyPWCallback_3DPointWidget.h"
16 #include "vtkProperty.h"
17 #include "vtkCellPicker.h"
18
19 wxVtkMPR3DView::wxVtkMPR3DView( wxVtk3DBaseView *wxvtk3Dbaseview )
20 {
21         _wxvtk3Dbaseview                        =       wxvtk3Dbaseview;
22         _vtkmpr3Ddataviewer                     =       NULL;
23         _wxvtkmpr3DviewCntrlPanel       =       NULL;   
24         //_myCallback                           =       NULL;
25         _pointWidget                            =       NULL;
26         _planeWidget                            =       NULL;
27         _vtkplane                                       =       NULL;
28         _probe                                          =       NULL;
29         _contourMapper                          =       NULL;
30         
31         
32         //EED Fev 3 2010
33         //Free Planes 
34 }
35
36
37 //-------------------------------------------------------------------
38 wxVtkMPR3DView::~wxVtkMPR3DView()
39 {
40         VisiblePointWidget( false );
41         VisiblePlaneWidget( false );
42         
43         if(_pointWidget!=NULL){
44                 _pointWidget->Delete();
45         }
46         if(_planeWidget!=NULL){
47                 _planeWidget->Delete();
48         }
49         
50         if(_vtkplane!=NULL){
51                 _vtkplane->Delete();            
52                 _probe->Delete();
53                 _contourMapper->Delete();                       
54                 _contourPlaneActor->Delete();           
55         }
56         
57 }
58
59 //-------------------------------------------------------------------
60 void wxVtkMPR3DView::RemoveActor(vtkActor* actor)
61 {       
62         _wxvtk3Dbaseview->GetRenderer()->RemoveActor(actor);    
63 }
64
65 //-------------------------------------------------------------------
66 void wxVtkMPR3DView::ResetCamera(int* ext, double* origin,double* spc)
67 {
68         if(ext == NULL){
69                 _wxvtk3Dbaseview->GetRenderer()->ResetCamera ();        
70                 _wxvtk3Dbaseview->GetCamera()->Dolly(1.5);      
71         }else{
72                 /*double x = (spc[0])*(origin[0]+(((double)ext[1]-(double)ext[0])/2.0));                
73                 double y = (spc[1])*(origin[1]+(double)ext[3]);
74                 double z = (spc[2])*(origin[2]+(((double)ext[5]-(double)ext[4])/2.0));*/
75                 /*double x0=(spc[0])*((double)ext[0]+origin[0]);
76                 double x1=(spc[0])*((double)ext[1]+origin[0]);
77                 double y0=(spc[1])*((double)ext[2]+origin[1]);
78                 double y1=(spc[1])*((double)ext[3]+origin[1]);
79                 double z0=(spc[2])*((double)ext[4]+origin[2]);
80                 double z1=(spc[2])*((double)ext[5]+origin[2]);*/
81                 double x0=(spc[0])*((double)ext[0]);
82                 double x1=(spc[0])*((double)ext[1]);
83                 double y0=(spc[1])*((double)ext[2]);
84                 double y1=(spc[1])*((double)ext[3]);
85                 double z0=(spc[2])*((double)ext[4]);
86                 double z1=(spc[2])*((double)ext[5]);
87                 
88                 _wxvtk3Dbaseview->GetRenderer()->ResetCamera(x0,x1,y0,y1,z0,z1);
89                 //_wxvtk3Dbaseview->GetCamera()->SetPosition(x,y,z);
90                 _wxvtk3Dbaseview->GetCamera()->Dolly(1.5);      
91         }
92 }
93
94 //-------------------------------------------------------------------
95 void wxVtkMPR3DView::Configure(){
96
97         _wxvtk3Dbaseview->Configure();
98         _wxvtkmpr3DviewCntrlPanel->UpdateControlPanel();
99         
100 //EED 27 Mai 2009 
101 //      _wxvtk3Dbaseview->GetRenderer()->Clear();    
102         
103         // Actors are added to the renderer. 
104         vtkActor* _outlineActor = _vtkmpr3Ddataviewer->GetOutlineActor();
105         _wxvtk3Dbaseview->GetRenderer()->AddActor( _outlineActor );                     
106 //      _wxvtk3Dbaseview->GetRenderer()->AddActor( _vtkmpr3Ddataviewer->GetImageActor(0)  );    // _saggital
107 //      _wxvtk3Dbaseview->GetRenderer()->AddActor( _vtkmpr3Ddataviewer->GetImageActor(1)  );    // _axial
108 //      _wxvtk3Dbaseview->GetRenderer()->AddActor( _vtkmpr3Ddataviewer->GetImageActor(2)  );    // _coronal
109
110
111         // An initial camera view is created.  The Dolly() method moves 
112         // the camera towards the FocalPoint, thereby enlarging the image.      
113         _wxvtk3Dbaseview->GetRenderer()->SetActiveCamera(_wxvtk3Dbaseview->GetCamera());
114         this->ResetCamera();
115         
116
117         // Set a background color for the renderer and set the size of the
118         // render window (expressed in pixels).
119         _wxvtk3Dbaseview->GetRenderer()->SetBackground( 0.36 , 0.36 , 0.36 );
120         _wxvtk3Dbaseview->GetRenWin()->SetSize(400, 400);
121
122         // Note that when camera movement occurs (as it does in the Dolly()
123         // method), the clipping planes often need adjusting. Clipping planes
124         // consist of two planes: near and far along the view direction. The 
125         // near plane clips out objects in front of the plane; the far plane
126         // clips out objects behind the plane. This way only what is drawn
127         // between the planes is actually rendered.
128         _wxvtk3Dbaseview->GetRenderer()->ResetCameraClippingRange();
129
130
131         // vtkPointWidget
132         //if(_myCallback!=NULL){
133                 //_myCallback->Delete();
134
135         //}
136         vtkmyPWCallback_3DPointWidget *_myCallback = vtkmyPWCallback_3DPointWidget::New();
137         _myCallback->SetWxVtkMPR3DView(this);
138  
139         if(_pointWidget!=NULL){
140                 _pointWidget->Delete();
141         }
142         _pointWidget = vtkPointWidget::New();
143         _myCallback->SetVtkPointWidget(_pointWidget);
144         _pointWidget->SetInteractor( GetWxvtk3Dbaseview()->GetWxVTKRenderWindowInteractor() ); 
145         _pointWidget->SetInput( GetVtkMPR3DDataViewer()->GetVtkMPRBaseData()->GetImageData() );
146         
147         _pointWidget->AllOff();
148         
149         _pointWidget->PlaceWidget();
150 //      _pointWidget->SetPosition( x,y,z ); 
151         
152 //EED01 29Mars2009
153 // MACOS probleme vtk-window out of wx-window   
154 //      _pointWidget->On();
155         
156         _pointWidget->AddObserver(vtkCommand::InteractionEvent,_myCallback);
157
158
159 // PlaneWidget
160         if(_planeWidget!=NULL)
161         {
162                 _planeWidget->Delete();
163         }
164         _planeWidget = vtkPlaneWidget::New();
165         _myCallback->SetVtkPlaneWidget(_planeWidget);
166         _planeWidget->SetInput( GetVtkMPR3DDataViewer()->GetVtkMPRBaseData()->GetImageData() );
167         _planeWidget->NormalToXAxisOn();
168         _planeWidget->SetResolution(50);
169         _planeWidget->SetRepresentationToOutline();
170         int dim[3];
171         GetVtkMPR3DDataViewer()->GetVtkMPRBaseData()->GetImageData()->GetDimensions(dim);
172         int px=(dim[0]/2);
173         int py=(dim[1]/2);
174         int pz=(dim[2]/2);
175         int dd=20;
176         _planeWidget->PlaceWidget( px-dd , px+dd , py-dd , py+dd , pz-dd , pz+dd );
177
178
179         if(_vtkplane==NULL){
180                 _vtkplane = vtkPolyData::New();
181                 
182                 _probe = vtkProbeFilter::New();
183                 _probe->SetInput(_vtkplane);
184
185                 _contourMapper = vtkPolyDataMapper::New();
186                 
187                 _contourMapper->SetInput( _probe->GetPolyDataOutput() );
188
189                 _contourPlaneActor = vtkActor::New();
190                 _contourPlaneActor->SetMapper(_contourMapper);
191
192                 _contourPlaneActor->VisibilityOff();
193
194                 _planeWidget->SetInteractor( GetWxvtk3Dbaseview()->GetWxVTKRenderWindowInteractor() );
195                 _planeWidget->AddObserver(vtkCommand::InteractionEvent,_myCallback);
196
197                 _planeWidget->Off();
198                 _wxvtk3Dbaseview->GetRenderer()->AddActor( _contourPlaneActor );        
199
200         }else{
201                 
202         }
203         _planeWidget->GetPolyData(_vtkplane);
204         vtkImageData *imageData = GetVtkMPR3DDataViewer()->GetVtkMPRBaseData()->GetImageData(); 
205         _probe->SetSource( imageData );
206         _contourMapper->SetScalarRange( imageData->GetScalarRange() );
207         
208         ConfigureFreePlanes();
209 }
210
211 //-------------------------------------------------------------------
212 void wxVtkMPR3DView::ConfigureFreePlanes()
213 {
214
215         // The shared picker enables us to use 3 planes at one time
216         // and gets the picking order right
217         vtkCellPicker* picker = vtkCellPicker::New();
218         picker->SetTolerance(0.005);
219
220         // The 3 image plane widgets 
221         _planeWidgetX = GetPlaneWidget('x', 1, 0, 0, picker);
222         _planeWidgetY = GetPlaneWidget('y', 1, 1, 0, picker);
223         _planeWidgetZ = GetPlaneWidget('z', 0, 0, 1, picker);     
224         
225         _planeWidgetY->SetLookupTable(_planeWidgetX->GetLookupTable());
226         _planeWidgetZ->SetLookupTable(_planeWidgetX->GetLookupTable());
227         
228         picker->UnRegister(NULL);
229         
230 }
231
232 //-------------------------------------------------------------------
233 vtkImagePlaneWidget* wxVtkMPR3DView::GetPlaneWidget(unsigned char activationkey, double r, double g, double b, vtkCellPicker* picker)
234 {
235         vtkProperty* prop1 = 0;         
236         vtkImagePlaneWidget* planeWidget = 0;
237         planeWidget = vtkImagePlaneWidget::New();
238         planeWidget->EnabledOff();
239         planeWidget->SetInteractor( GetWxvtk3Dbaseview()->GetWxVTKRenderWindowInteractor() );
240         vtkImageData *image = GetVtkMPR3DDataViewer()->GetVtkMPRBaseData()->GetImageData();
241         planeWidget->SetInput( image );
242
243         
244         int xMin, xMax, yMin, yMax, zMin, zMax;
245         image->GetExtent(xMin, xMax, yMin, yMax, zMin, zMax);   
246         double xSpacing, ySpacing, zSpacing;
247         image->GetSpacing(xSpacing, ySpacing, zSpacing);        
248         
249         if (activationkey=='x')
250         {
251                 planeWidget->SetPlaneOrientationToXAxes();       
252                 planeWidget->SetSlicePosition((xMax+xMin)/2.*xSpacing);
253         }
254         
255         if (activationkey=='y')
256         {
257                 planeWidget->SetPlaneOrientationToYAxes();
258                 planeWidget->SetSlicePosition((yMax+yMin)/2.*ySpacing);
259         }
260                 
261         if (activationkey=='z')
262         {
263                 planeWidget->SetPlaneOrientationToZAxes();
264                 planeWidget->SetSlicePosition((zMax+zMin)/2.*zSpacing);
265         }
266         
267         planeWidget->DisplayTextOn();
268         planeWidget->SetPicker(picker);
269         planeWidget->SetKeyPressActivationValue(activationkey);
270         prop1 = planeWidget->GetPlaneProperty();
271         prop1->SetColor(r, g, b);
272         return planeWidget;
273 }
274
275 //-------------------------------------------------------------------
276 void wxVtkMPR3DView::FreePlaneVisible(int plane, bool ok)
277 {
278         
279         if ((plane==1) && (ok==true)) _planeWidgetX->EnabledOn();
280         if ((plane==2) && (ok==true)) _planeWidgetY->EnabledOn();
281         if ((plane==3) && (ok==true)) _planeWidgetZ->EnabledOn();
282         if ((plane==1) && (ok==false)) _planeWidgetX->EnabledOff();
283         if ((plane==2) && (ok==false)) _planeWidgetY->EnabledOff();
284         if ((plane==3) && (ok==false)) _planeWidgetZ->EnabledOff();
285 }
286
287 //-------------------------------------------------------------------
288 void wxVtkMPR3DView::FreePlaneInteraction(bool ok)
289 {
290         if (ok==true)
291         {
292                 _planeWidgetX->InteractionOn();
293                 _planeWidgetY->InteractionOn();
294                 _planeWidgetZ->InteractionOn();
295         } else {
296                 _planeWidgetX->InteractionOff();
297                 _planeWidgetY->InteractionOff();
298                 _planeWidgetZ->InteractionOff();
299         }
300 }
301
302
303 //-------------------------------------------------------------------
304 void wxVtkMPR3DView::setColorTransferFunction(vtkColorTransferFunction* colortable)
305 {
306         GetVtkMPR3DDataViewer ()->setColorTransferFunction(colortable); 
307 }
308
309 //-------------------------------------------------------------------
310 void wxVtkMPR3DView::Refresh()   // virtual
311 {
312         _vtkmpr3Ddataviewer     ->      Refresh();
313         if (_wxvtkmpr3DviewCntrlPanel!=NULL)
314         {
315                 _wxvtkmpr3DviewCntrlPanel->Refresh();
316         }
317
318 }
319
320 //-------------------------------------------------------------------
321 void wxVtkMPR3DView::RefreshView()   // virtual
322 {
323         double spc[3];
324         this->GetVtkMPR3DDataViewer()->GetVtkMPRBaseData()->GetImageData()->GetSpacing(spc);
325
326         //double nx=1,ny=0,nz=0; // JPRx
327         Refresh();
328         double x=GetVtkMPR3DDataViewer ()->GetVtkMPRBaseData()->GetX();
329         double y=GetVtkMPR3DDataViewer ()->GetVtkMPRBaseData()->GetY();
330         double z=GetVtkMPR3DDataViewer ()->GetVtkMPRBaseData()->GetZ();
331
332         x=x*spc[0];
333         y=y*spc[1];
334         z=z*spc[2];
335
336         _pointWidget->SetPosition( x,y,z ); 
337
338
339         double in[3]; 
340         double normal[3];
341         vtkTransform *transform = GetVtkMPR3DDataViewer ()->GetVtkMPRBaseData()->GetTransformOrientation();
342         in[0]=1;                in[1]=0;                        in[2]=0;
343         transform->TransformPoint(in,normal);
344         _planeWidget->SetNormal( normal[0],normal[1],normal[2] );
345
346
347         _planeWidget->SetCenter( x,y,z );
348         _planeWidget->UpdatePlacement();
349         _planeWidget->GetPolyData(_vtkplane);
350 }
351 //-------------------------------------------------------------------
352 wxPanel* wxVtkMPR3DView::CreateControlPanel(wxWindow *parent, bool align)
353 {
354         _wxvtkmpr3DviewCntrlPanel = new wxVtkMPR3DViewCntrlPanel(parent,this, align);
355         return _wxvtkmpr3DviewCntrlPanel;
356 }
357 //-------------------------------------------------------------------
358 vtkMPR3DDataViewer* wxVtkMPR3DView::GetVtkMPR3DDataViewer() 
359 {
360         return _vtkmpr3Ddataviewer; 
361 }
362 //-------------------------------------------------------------------
363 wxVtk3DBaseView* wxVtkMPR3DView::GetWxvtk3Dbaseview() throw (char*)
364 {
365         if(_wxvtk3Dbaseview==NULL){
366                 throw "wxVtk3DBaseView* wxVtkMPR3DView::GetWxvtk3Dbaseview() _wxvtk3Dbaseview=NULL";
367         }
368         return _wxvtk3Dbaseview;
369 }
370 //-------------------------------------------------------------------
371
372 //-------------------------------------------------------------------
373 void wxVtkMPR3DView::VisibleImageActor(int idPosition, bool visible){
374         /*if(visible == false)
375                 printf("CPR: wxVtkMPR3DView::VisibleImageActor-> visibleActor == false \n");
376         else
377         {
378                 printf("CPR: wxVtkMPR3DView::VisibleImageActor-> visibleActor == true\n");
379                 printf("CPR: wxVtkMPR3DView::VisibleImageActor-> idPosition == %d\n", idPosition);
380         }
381         */
382         if (visible!=_vtkmpr3Ddataviewer->GetVisiblePosition(idPosition)){
383                 if (visible==false){
384                         _wxvtk3Dbaseview->GetRenderer()->RemoveActor( _vtkmpr3Ddataviewer->GetImageActor(idPosition)  );        
385                 } else {
386                         _wxvtk3Dbaseview->GetRenderer()->AddActor( _vtkmpr3Ddataviewer->GetImageActor(idPosition)  );   
387                 }
388                 _vtkmpr3Ddataviewer->SetVisiblePosition(idPosition,visible);
389         }
390 }
391
392
393 //-------------------------------------------------------------------
394 void wxVtkMPR3DView::VisiblePointWidget( bool visible )
395 {
396         if (visible==true)
397         {
398                 _pointWidget->On();
399         } else {
400                 _pointWidget->Off();
401         }
402 }
403
404 //-------------------------------------------------------------------
405 void wxVtkMPR3DView::VisiblePlaneWidget( bool visible )
406 {
407         if (visible==true)
408         {
409                 _planeWidget->On();
410                 _contourPlaneActor->VisibilityOn();
411
412         } else {
413                 _planeWidget->Off();
414                 _contourPlaneActor->VisibilityOff();
415         }
416 }
417
418 //CPR: Method added 30 Nov 2009
419 void wxVtkMPR3DView::showOutlineActor(bool value)
420 {
421         vtkActor* _outlineActor = _vtkmpr3Ddataviewer->GetOutlineActor();
422         if(value == true)
423         {
424                 _wxvtk3Dbaseview->GetRenderer()->AddActor( _outlineActor );     
425         }
426         else
427         {
428                 _wxvtk3Dbaseview->GetRenderer()->RemoveActor( _outlineActor );  
429         }
430 }
431
432 //-------------------------------------------------------------------
433 void wxVtkMPR3DView::SetVtkMPR3DDataViewer(vtkMPR3DDataViewer *vtkmpr3Ddataviewer)
434 {
435         _vtkmpr3Ddataviewer = vtkmpr3Ddataviewer;
436 }
437
438 //-------------------------------------------------------------------
439 void wxVtkMPR3DView::InitOrientationPointWidget()
440 {
441         this->_planeWidget->SetNormal(1,0,0);           
442 }
443
444
445
446
447 //-------------------------------------------------------------------
448 // EED 25 Janvier 2007 testLoic
449 void wxVtkMPR3DView::TestLoic1()
450 {
451
452         int sizeIma     = 128;
453   double dimIma = sizeIma*2;
454
455         vtkImageData *vtkimagedata =  this->GetVtkMPR3DDataViewer()->GetVtkMPRBaseData()->GetImageData();
456
457         double spc[3];
458         vtkimagedata->GetSpacing(spc);
459
460         vtkimagedata->Update();
461
462
463          double p[3], n[3];
464      this->_planeWidget->GetOrigin(p);
465      this->_planeWidget->GetNormal(n);
466
467
468
469     vtkPlaneSource* pSource = vtkPlaneSource::New( );
470     pSource->SetResolution( sizeIma - 1, sizeIma - 1 );
471     pSource->SetOrigin( p[ 0 ], p[ 1 ], p[ 2 ] );
472     pSource->SetPoint1( p[ 0 ] + dimIma - 1.0, p[ 1 ], p[ 2 ] );
473     pSource->SetPoint2( p[ 0 ], p[ 1 ]+ dimIma - 1.0 , p[ 2 ] );
474     pSource->Update( );
475     pSource->SetCenter( p[ 0 ], p[ 1 ], p[ 2 ] );
476     pSource->SetNormal( n[ 0 ], n[ 1 ], n[ 2 ] );
477     pSource->Update( );
478
479     vtkProbeFilter* slices = vtkProbeFilter::New();
480     slices->SetInput( ( vtkDataSet* )pSource->GetOutput( ) );
481     slices->SetSource( vtkimagedata );
482     slices->Update( );
483     pSource->Delete( );
484
485         vtkStructuredPoints   *stPoints = vtkStructuredPoints::New();
486         stPoints -> GetPointData( )->SetScalars(  slices->GetOutput()->GetPointData()->GetScalars()  );
487         stPoints -> SetDimensions( sizeIma, sizeIma, 1 );
488         stPoints -> SetScalarType( vtkimagedata->GetScalarType() );
489         stPoints -> SetScalarTypeToShort();
490         stPoints -> Update();
491
492         vtkImageChangeInformation  *change = vtkImageChangeInformation ::New();
493         change    -> SetInput( stPoints );  
494         change    -> Update();    //important
495
496         double _range[2];
497         vtkimagedata->GetScalarRange(_range);
498    vtkWindowLevelLookupTable *_bwlookup = vtkWindowLevelLookupTable::New( );
499    _bwlookup->SetHueRange( 0 , 1 );
500    _bwlookup->SetNumberOfColors( (int)(_range[1] - _range[0] + 1) );
501    _bwlookup->SetTableRange( _range[0] , _range[1] );
502    _bwlookup->SetSaturationRange( 0 , 0 );
503    _bwlookup->SetValueRange( 0 , 1 );
504    _bwlookup->SetAlphaRange( 1 , 1 );
505    _bwlookup->Build( );
506  
507    vtkLookupTable * _collookup = vtkLookupTable::New( );
508    _collookup->SetNumberOfColors( 256 );
509    _collookup->SetTableRange( 0 , 255 );
510    _collookup->Build( );
511    _collookup->SetTableValue( 0  , 1 , 0 , 0 , 1 );
512    _collookup->SetTableValue(128 , 0 , 0 , 1 , 1 );
513    _collookup->SetTableValue(255 , 0 , 1 , 0 , 1 );
514
515
516         vtkMetaImageWriter *writer = vtkMetaImageWriter::New( );
517         writer->SetInput( stPoints );
518         writer->SetFileName( "C:/Users/Images/temp_EED/image.mhd" );
519         writer->SetFileDimensionality( 2 );
520         writer->Write( );
521
522
523
524         vtkDataSetMapper *_3DSliceMapper = vtkDataSetMapper::New( );
525         _3DSliceMapper->SetInput(change->GetOutput( ) );
526         _3DSliceMapper->SetLookupTable( _bwlookup );
527         _3DSliceMapper->SetScalarRange( _range );
528         _3DSliceMapper->ImmediateModeRenderingOn( );
529
530         vtkActor *_3DSliceActor = vtkActor::New( );
531         _3DSliceActor->SetMapper( _3DSliceMapper );
532
533  // The usual rendering stuff.
534   vtkCamera *camera = vtkCamera::New();
535       camera->SetPosition(1,1,1);
536       camera->SetFocalPoint(0,0,0);
537
538   vtkRenderer *renderer = vtkRenderer::New();
539   vtkRenderWindow *renWin = vtkRenderWindow::New();
540     renWin->AddRenderer(renderer);
541
542   vtkRenderWindowInteractor *iren = vtkRenderWindowInteractor::New();
543     iren->SetRenderWindow(renWin);
544
545   renderer->AddActor( _3DSliceActor );
546       renderer->SetActiveCamera(camera);
547       renderer->ResetCamera();
548       renderer->SetBackground(1,1,1);
549   
550   renWin->SetSize(300,300);
551
552   // interact with data
553   renWin->Render();
554   iren->Start();
555
556
557
558
559
560 }
561
562 //-------------------------------------------------------------------
563 // EED 25 Janvier 2007 testLoic
564 void wxVtkMPR3DView::TestLoic2()
565 {
566 /*
567  vtkVectorNorm *vecMagnitude = vtkVectorNorm::New();
568                 vecMagnitude->SetInput(VtkMainGrid);
569                 vecMagnitude->NormalizeOff();
570                 vecMagnitude->Update();
571 */
572
573         vtkPlane *slicePlane = vtkPlane::New();
574                                 this->_planeWidget->GetPlane( slicePlane );
575
576                 
577         vtkCutter* sliceCutter = vtkCutter::New();
578                 vtkImageData *vtkimagedata =  this->GetVtkMPR3DDataViewer()->GetVtkMPRBaseData()->GetImageData();
579                 sliceCutter->SetInput( vtkimagedata );
580                 sliceCutter->SetCutFunction( slicePlane );
581
582 //EED
583 //        vtkLookupTable *lut = BuildHueWeightBaseMap();
584
585
586         vtkPolyDataMapper *slice = vtkPolyDataMapper::New();
587                 slice->SetInput( sliceCutter->GetOutput() );
588         double range[2];
589 // EED
590 //                slice->Update();
591                                   vtkimagedata->GetScalarRange(range);
592 //                vecMagnitude->GetOutput()->GetScalarRange( range );
593 //                range[1] *= 0.7; // reduce the upper range by 30%
594 //                slice->SetScalarRange( range );
595 //                slice->SetLookupTable( lut );
596
597 //       vtkActor *sliceActor = vtkActor::New();
598 //                sliceActor->SetMapper( slice );
599
600         vtkPolyDataMapper *contourMapper = vtkPolyDataMapper::New();
601                 contourMapper->SetInput( sliceCutter->GetOutput() );
602                 contourMapper->SetScalarRange( range );
603   //              contourMapper->SetLookupTable( lut );
604
605                 
606         vtkActor *contourActor = vtkActor::New();
607                 contourActor->SetMapper( contourMapper );
608
609
610
611  // The usual rendering stuff.
612   vtkCamera *camera = vtkCamera::New();
613       camera->SetPosition(1,1,1);
614       camera->SetFocalPoint(0,0,0);
615
616   vtkRenderer *renderer = vtkRenderer::New();
617   vtkRenderWindow *renWin = vtkRenderWindow::New();
618     renWin->AddRenderer(renderer);
619
620   vtkRenderWindowInteractor *iren = vtkRenderWindowInteractor::New();
621     iren->SetRenderWindow(renWin);
622
623   renderer->AddActor( contourActor );
624 //  renderer->AddActor(cubeActor);
625       renderer->SetActiveCamera(camera);
626       renderer->ResetCamera();
627       renderer->SetBackground(1,1,1);
628   
629   renWin->SetSize(300,300);
630
631   // interact with data
632   renWin->Render();
633   iren->Start();
634
635
636 }
637