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