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