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