X-Git-Url: https://git.creatis.insa-lyon.fr/pubgit/?a=blobdiff_plain;f=lib%2FmaracasVisuLib%2Fsrc%2Finterface%2FwxWindows%2Fwidgets%2FwxVtkMPR3DView.cxx;h=108b5913765e923e3c7e8d1d0eea9b9868dbc690;hb=b80b4dcc301c1c2c63c0f76cd06b0a434350f7a7;hp=319e00c1c693fb292a22b196a0f14b3254932423;hpb=60a203a08c56a0485114ef9a5287440100c22075;p=creaMaracasVisu.git diff --git a/lib/maracasVisuLib/src/interface/wxWindows/widgets/wxVtkMPR3DView.cxx b/lib/maracasVisuLib/src/interface/wxWindows/widgets/wxVtkMPR3DView.cxx index 319e00c..108b591 100644 --- a/lib/maracasVisuLib/src/interface/wxWindows/widgets/wxVtkMPR3DView.cxx +++ b/lib/maracasVisuLib/src/interface/wxWindows/widgets/wxVtkMPR3DView.cxx @@ -1,3 +1,28 @@ +/*# --------------------------------------------------------------------- +# +# Copyright (c) CREATIS (Centre de Recherche en Acquisition et Traitement de l'Image +# pour la Sant�) +# Authors : Eduardo Davila, Frederic Cervenansky, Claire Mouton +# Previous Authors : Laurent Guigues, Jean-Pierre Roux +# CreaTools website : www.creatis.insa-lyon.fr/site/fr/creatools_accueil +# +# This software is governed by the CeCILL-B license under French law and +# abiding by the rules of distribution of free software. You can use, +# modify and/ or redistribute the software under the terms of the CeCILL-B +# license as circulated by CEA, CNRS and INRIA at the following URL +# http://www.cecill.info/licences/Licence_CeCILL-B_V1-en.html +# or in the file LICENSE.txt. +# +# As a counterpart to the access to the source code and rights to copy, +# modify and redistribute granted by the license, users are provided only +# with a limited warranty and the software's author, the holder of the +# economic rights, and the successive licensors have only limited +# liability. +# +# The fact that you are presently reading this means that you have had +# knowledge of the CeCILL-B license and that you accept its terms. +# ------------------------------------------------------------------------ */ + #include "wxVtkMPR3DView.h" #include "vtkDataSetMapper.h" @@ -5,7 +30,6 @@ #include "vtkProbeFilter.h" #include "vtkStructuredPoints.h" #include "vtkMetaImageWriter.h" -#include "vtkDataSetMapper.h" #include "vtkImageChangeInformation.h" #include "vtkPointData.h" #include "vtkWindowLevelLookupTable.h" @@ -15,6 +39,98 @@ #include "vtkmyPWCallback_3DPointWidget.h" #include "vtkProperty.h" #include "vtkCellPicker.h" +#include "vtkInteractorStyleBaseView.h" +#include + + + +//---------------------------------------------------------------------------- +//---------------------------------------------------------------------------- +//---------------------------------------------------------------------------- +class vtkWindowLevelImagePlaneWidgetCallback : public vtkCommand +{ + public: + static vtkWindowLevelImagePlaneWidgetCallback *New() + { + return new vtkWindowLevelImagePlaneWidgetCallback; + } + + void Execute( vtkObject *caller, unsigned long ev, void *callData ) + { + bool needRefresh=false; + double slicePosition; + vtkImagePlaneWidget* ipw =dynamic_cast< vtkImagePlaneWidget* >( caller ); + if ( ev == vtkCommand::WindowLevelEvent) + { + double info[2]; + ipw->GetWindowLevel(info); + _wxvtkmpr3Dview->GetVtkMPR3DDataViewer()->GetVtkMPRBaseData()->SetColorWindow(info[0]); + _wxvtkmpr3Dview->GetVtkMPR3DDataViewer()->GetVtkMPRBaseData()->SetColorLevel(info[1]); + needRefresh=true; + } // if ev + + if ( ev == vtkCommand::InteractionEvent) + { + needRefresh=true; + if (ipw->GetCursorDataStatus()) + { + double xyzv[4]; + ipw->GetCursorData(xyzv); + _wxvtkmpr3Dview->GetVtkMPR3DDataViewer()->GetVtkMPRBaseData()->SetX(xyzv[0]); + _wxvtkmpr3Dview->GetVtkMPR3DDataViewer()->GetVtkMPRBaseData()->SetY(xyzv[1]); + _wxvtkmpr3Dview->GetVtkMPR3DDataViewer()->GetVtkMPRBaseData()->SetZ(xyzv[2]); + } else { + + + vtkImageData *image = _wxvtkmpr3Dview->GetVtkMPR3DDataViewer()->GetVtkMPRBaseData()->GetImageData(); + double spc[3]; + if(image) + { + image->GetSpacing(spc); + } + + double normal[3]; + slicePosition = ipw->GetSlicePosition(); + ipw->GetNormal(normal); + + // FreePlaneX + if ((normal[0]==1)&&(normal[1]==0)&&(normal[2]==0)) + { + _wxvtkmpr3Dview->GetVtkMPR3DDataViewer()->GetVtkMPRBaseData()->SetX( slicePosition/spc[0] ); + } + // FreePlaneY + if ((normal[0]==0)&&(normal[1]==1)&&(normal[2]==0)) + { + _wxvtkmpr3Dview->GetVtkMPR3DDataViewer()->GetVtkMPRBaseData()->SetY( slicePosition/spc[1] ); + } + // FreePlaneZ + if ((normal[0]==0)&&(normal[1]==0)&&(normal[2]==1)) + { + _wxvtkmpr3Dview->GetVtkMPR3DDataViewer()->GetVtkMPRBaseData()->SetZ( slicePosition/spc[2] ); + } + }// ipw->GetCursorDataStatus + }// ev + + if (needRefresh) + { + vtkInteractorStyleBaseView *isbv = (vtkInteractorStyleBaseView*)_wxvtkmpr3Dview->GetWxvtk3Dbaseview()->GetInteractorStyleBaseView(); + isbv->SetParent_refresh_waiting(); + isbv->EvaluateToRefresh(); + } + + } // Execute + + vtkWindowLevelImagePlaneWidgetCallback(){} + wxVtkMPR3DView *_wxvtkmpr3Dview; +}; + + + +//------------------------------------------------------------------- +//------------------------------------------------------------------- +//------------------------------------------------------------------- + + wxVtkMPR3DView::wxVtkMPR3DView( wxVtk3DBaseView *wxvtk3Dbaseview ) { @@ -28,9 +144,9 @@ wxVtkMPR3DView::wxVtkMPR3DView( wxVtk3DBaseView *wxvtk3Dbaseview ) _probe = NULL; _contourMapper = NULL; - _planeWidgetX = 0; - _planeWidgetY = 0; - _planeWidgetZ = 0; + _planeWidgetX = NULL; + _planeWidgetY = NULL; + _planeWidgetZ = NULL; //EED Fev 3 2010 //Free Planes } @@ -64,34 +180,7 @@ void wxVtkMPR3DView::RemoveActor(vtkActor* actor) _wxvtk3Dbaseview->GetRenderer()->RemoveActor(actor); } -//------------------------------------------------------------------- -void wxVtkMPR3DView::ResetCamera(int* ext, double* origin,double* spc) -{ - if(ext == NULL){ - _wxvtk3Dbaseview->GetRenderer()->ResetCamera (); - _wxvtk3Dbaseview->GetCamera()->Dolly(1.5); - }else{ - /*double x = (spc[0])*(origin[0]+(((double)ext[1]-(double)ext[0])/2.0)); - double y = (spc[1])*(origin[1]+(double)ext[3]); - double z = (spc[2])*(origin[2]+(((double)ext[5]-(double)ext[4])/2.0));*/ - /*double x0=(spc[0])*((double)ext[0]+origin[0]); - double x1=(spc[0])*((double)ext[1]+origin[0]); - double y0=(spc[1])*((double)ext[2]+origin[1]); - double y1=(spc[1])*((double)ext[3]+origin[1]); - double z0=(spc[2])*((double)ext[4]+origin[2]); - double z1=(spc[2])*((double)ext[5]+origin[2]);*/ - double x0=(spc[0])*((double)ext[0]); - double x1=(spc[0])*((double)ext[1]); - double y0=(spc[1])*((double)ext[2]); - double y1=(spc[1])*((double)ext[3]); - double z0=(spc[2])*((double)ext[4]); - double z1=(spc[2])*((double)ext[5]); - - _wxvtk3Dbaseview->GetRenderer()->ResetCamera(x0,x1,y0,y1,z0,z1); - //_wxvtk3Dbaseview->GetCamera()->SetPosition(x,y,z); - _wxvtk3Dbaseview->GetCamera()->Dolly(1.5); - } -} + //------------------------------------------------------------------- void wxVtkMPR3DView::Configure() @@ -106,32 +195,16 @@ void wxVtkMPR3DView::Configure() // Actors are added to the renderer. vtkActor* _outlineActor = _vtkmpr3Ddataviewer->GetOutlineActor(); + + _wxvtk3Dbaseview->GetRenderer()->AddActor( _outlineActor ); + // _wxvtk3Dbaseview->GetRenderer()->AddActor( _vtkmpr3Ddataviewer->GetImageActor(0) ); // _saggital // _wxvtk3Dbaseview->GetRenderer()->AddActor( _vtkmpr3Ddataviewer->GetImageActor(1) ); // _axial // _wxvtk3Dbaseview->GetRenderer()->AddActor( _vtkmpr3Ddataviewer->GetImageActor(2) ); // _coronal - // An initial camera view is created. The Dolly() method moves - // the camera towards the FocalPoint, thereby enlarging the image. - _wxvtk3Dbaseview->GetRenderer()->SetActiveCamera(_wxvtk3Dbaseview->GetCamera()); - this->ResetCamera(); - - - // Set a background color for the renderer and set the size of the - // render window (expressed in pixels). - _wxvtk3Dbaseview->GetRenderer()->SetBackground( 0.36 , 0.36 , 0.36 ); -//EED 23oct2010 _wxvtk3Dbaseview->GetRenWin()->SetSize(400, 400); - - // Note that when camera movement occurs (as it does in the Dolly() - // method), the clipping planes often need adjusting. Clipping planes - // consist of two planes: near and far along the view direction. The - // near plane clips out objects in front of the plane; the far plane - // clips out objects behind the plane. This way only what is drawn - // between the planes is actually rendered. - _wxvtk3Dbaseview->GetRenderer()->ResetCameraClippingRange(); - - + // vtkPointWidget //if(_myCallback!=NULL){ //_myCallback->Delete(); @@ -201,8 +274,7 @@ void wxVtkMPR3DView::Configure() _probe->SetSource( imageData ); _contourMapper->SetScalarRange( imageData->GetScalarRange() ); - - ConfigureFreePlanes(); + ConfigureFreePlanes(); } // _pointWidget->SetPosition( x,y,z ); @@ -213,6 +285,30 @@ void wxVtkMPR3DView::Configure() // PlaneWidget + +// An initial camera view is created. The Dolly() method moves + // the camera towards the FocalPoint, thereby enlarging the image. +// _wxvtk3Dbaseview->GetRenderer()->SetActiveCamera(_wxvtk3Dbaseview->GetCamera()); + + // Note that when camera movement occurs (as it does in the Dolly() + // method), the clipping planes often need adjusting. Clipping planes + // consist of two planes: near and far along the view direction. The + // near plane clips out objects in front of the plane; the far plane + // clips out objects behind the plane. This way only what is drawn + // between the planes is actually rendered. + +//EED 27/05/2013 +// _wxvtk3Dbaseview->GetRenderer()->ResetCameraClippingRange(); + +//EED 27/05/2013 +// this->ResetCamera(); + _wxvtk3Dbaseview->ResetCamera(); + + // Set a background color for the renderer and set the size of the + // render window (expressed in pixels). + _wxvtk3Dbaseview->GetRenderer()->SetBackground( 0.36 , 0.36 , 0.36 ); +//EED 23oct2010 _wxvtk3Dbaseview->GetRenWin()->SetSize(400, 400); + } //------------------------------------------------------------------- @@ -234,20 +330,46 @@ void wxVtkMPR3DView::ConfigureFreePlanes() picker->UnRegister(NULL); + // ColorWindow ColorLevel Callback + vtkWindowLevelImagePlaneWidgetCallback *wlipwc = vtkWindowLevelImagePlaneWidgetCallback::New(); + wlipwc->_wxvtkmpr3Dview = this; + _planeWidgetX->AddObserver(vtkCommand::WindowLevelEvent, wlipwc ); + _planeWidgetY->AddObserver(vtkCommand::WindowLevelEvent, wlipwc ); + _planeWidgetZ->AddObserver(vtkCommand::WindowLevelEvent, wlipwc ); + + // Cursor Callback + _planeWidgetX->AddObserver(vtkCommand::InteractionEvent, wlipwc ); + _planeWidgetY->AddObserver(vtkCommand::InteractionEvent, wlipwc ); + _planeWidgetZ->AddObserver(vtkCommand::InteractionEvent, wlipwc ); +} + + +//------------------------------------------------------------------- +void wxVtkMPR3DView::SetImage() +{ + vtkImageData *imageData = GetVtkMPR3DDataViewer()->GetVtkMPRBaseData()->GetImageData(); + // Orthogonal planes B&W + _planeWidgetX->SetInput( imageData ); + _planeWidgetY->SetInput( imageData ); + _planeWidgetZ->SetInput( imageData ); + // -- Plane widget + _probe->SetSource( imageData ); + _vtkmpr3Ddataviewer->SetImage(); } //------------------------------------------------------------------- vtkImagePlaneWidget* wxVtkMPR3DView::GetPlaneWidget(unsigned char activationkey, double r, double g, double b, vtkCellPicker* picker) { - vtkProperty* prop1 = 0; - vtkImagePlaneWidget* planeWidget = 0; - planeWidget = vtkImagePlaneWidget::New(); + vtkProperty* prop1 = 0; + vtkImagePlaneWidget* planeWidget = 0; + planeWidget = vtkImagePlaneWidget::New(); planeWidget->SetInteractor( GetWxvtk3Dbaseview()->GetWxVTKRenderWindowInteractor() ); planeWidget->EnabledOff(); - vtkImageData *image = GetVtkMPR3DDataViewer()->GetVtkMPRBaseData()->GetImageData(); + vtkImageData *image = GetVtkMPR3DDataViewer()->GetVtkMPRBaseData()->GetImageData(); int xMin = 0, xMax = 0, yMin = 0, yMax = 0, zMin = 0, zMax = 0; double xSpacing = 0, ySpacing = 0, zSpacing = 0; - if(image){ + if(image) + { planeWidget->SetInput( image ); image->GetExtent(xMin, xMax, yMin, yMax, zMin, zMax); image->GetSpacing(xSpacing, ySpacing, zSpacing); @@ -279,23 +401,67 @@ vtkImagePlaneWidget* wxVtkMPR3DView::GetPlaneWidget(unsigned char activationkey, return planeWidget; } +//------------------------------------------------------------------- +void wxVtkMPR3DView::SetFreePlanesOrtho() +{ + _planeWidgetX->SetPlaneOrientationToXAxes(); + _planeWidgetY->SetPlaneOrientationToYAxes(); + _planeWidgetZ->SetPlaneOrientationToZAxes(); + vtkInteractorStyleBaseView *isbv = (vtkInteractorStyleBaseView*)GetWxvtk3Dbaseview()->GetInteractorStyleBaseView(); + isbv->SetParent_refresh_waiting(); + isbv->EvaluateToRefresh(); +} + //------------------------------------------------------------------- void wxVtkMPR3DView::FreePlaneVisible(int plane, bool ok) { - if(_planeWidgetX){ - if ((plane==1) && (ok==true)) _planeWidgetX->EnabledOn(); - if ((plane==2) && (ok==true)) _planeWidgetY->EnabledOn(); - if ((plane==3) && (ok==true)) _planeWidgetZ->EnabledOn(); + if(_planeWidgetX) + { + if (ok==true) + { +//EED 21/07/2013 +// 1. Make backup of actors +// 2. Putting out all the actors +// 3. Add vtkImagageActor in first place +// 4. Putting again the originals actors +// 5. Refresh + + // step 1, step 2 + vtkActorCollection *tmpCollection = vtkActorCollection::New(); + vtkActorCollection *collectionActors = _wxvtk3Dbaseview->GetRenderer()->GetActors(); + int i,size=collectionActors->GetNumberOfItems(); + for (i=0; iAddItem ( (vtkActor*)collectionActors->GetItemAsObject(0) ); + _wxvtk3Dbaseview->GetRenderer()->RemoveActor( (vtkProp*)tmpCollection->GetItemAsObject(i) ); + } // for + + // step 3 + if ((plane==1) && (ok==true)) _planeWidgetX->EnabledOn(); + if ((plane==2) && (ok==true)) _planeWidgetY->EnabledOn(); + if ((plane==3) && (ok==true)) _planeWidgetZ->EnabledOn(); + + // step 4 + for (i=0; iGetRenderer()->AddActor( (vtkProp*)tmpCollection->GetItemAsObject(i) ); + } // for + tmpCollection->Delete(); + + // step 5 Refresh + _wxvtk3Dbaseview->GetRenderer()->GetRenderWindow()->Render(); + } // if ok if ((plane==1) && (ok==false)) _planeWidgetX->EnabledOff(); if ((plane==2) && (ok==false)) _planeWidgetY->EnabledOff(); if ((plane==3) && (ok==false)) _planeWidgetZ->EnabledOff(); - } + } // if _planeWidgetX } //------------------------------------------------------------------- void wxVtkMPR3DView::FreePlaneInteraction(bool ok) { - if(_planeWidgetX){ + if(_planeWidgetX) + { if (ok==true) { _planeWidgetX->InteractionOn(); @@ -306,10 +472,11 @@ void wxVtkMPR3DView::FreePlaneInteraction(bool ok) _planeWidgetY->InteractionOff(); _planeWidgetZ->InteractionOff(); } - } + } // if _planeWidgetX } + //------------------------------------------------------------------- void wxVtkMPR3DView::setColorTransferFunction(vtkColorTransferFunction* colortable) { @@ -319,12 +486,11 @@ void wxVtkMPR3DView::setColorTransferFunction(vtkColorTransferFunction* colortab //------------------------------------------------------------------- void wxVtkMPR3DView::Refresh() // virtual { - _vtkmpr3Ddataviewer -> Refresh(); + _vtkmpr3Ddataviewer->Refresh(); if (_wxvtkmpr3DviewCntrlPanel!=NULL) { _wxvtkmpr3DviewCntrlPanel->Refresh(); } - } //------------------------------------------------------------------- @@ -333,7 +499,8 @@ void wxVtkMPR3DView::RefreshView() // virtual double spc[3]; vtkImageData *image = GetVtkMPR3DDataViewer()->GetVtkMPRBaseData()->GetImageData(); - if(image){ + if(image) + { image->GetSpacing(spc); }else{ spc[0] = 0; @@ -344,31 +511,61 @@ void wxVtkMPR3DView::RefreshView() // virtual //double nx=1,ny=0,nz=0; // JPRx Refresh(); - double x=GetVtkMPR3DDataViewer ()->GetVtkMPRBaseData()->GetX(); - double y=GetVtkMPR3DDataViewer ()->GetVtkMPRBaseData()->GetY(); - double z=GetVtkMPR3DDataViewer ()->GetVtkMPRBaseData()->GetZ(); + double x=GetVtkMPR3DDataViewer()->GetVtkMPRBaseData()->GetX(); + double y=GetVtkMPR3DDataViewer()->GetVtkMPRBaseData()->GetY(); + double z=GetVtkMPR3DDataViewer()->GetVtkMPRBaseData()->GetZ(); + + SetColorWindow( _vtkmpr3Ddataviewer->GetVtkMPRBaseData()->GetColorWindow() ); + SetColorLevel( _vtkmpr3Ddataviewer->GetVtkMPRBaseData()->GetColorLevel() ); + + double normal[3]; + // FreePlaneX + _planeWidgetX->GetNormal(normal); + if ((normal[0]==1)&&(normal[1]==0)&&(normal[2]==0)) + { + _planeWidgetX->SetSlicePosition( x*spc[0] ); +//EED 2016/02/19 +// _planeWidgetX->GetReslice()->SetInterpolate( _vtkmpr3Ddataviewer->GetVtkMPRBaseData()->GetInterpolate() ); + _planeWidgetX->GetTexture()->SetInterpolate( _vtkmpr3Ddataviewer->GetVtkMPRBaseData()->GetInterpolate() ); + } + // FreePlaneY + _planeWidgetY->GetNormal(normal); + if ((normal[0]==0)&&(normal[1]==1)&&(normal[2]==0)) + { + _planeWidgetY->SetSlicePosition( y*spc[1] ); +//EED 2016/02/19 + _planeWidgetY->GetReslice()->SetInterpolate( _vtkmpr3Ddataviewer->GetVtkMPRBaseData()->GetInterpolate() ); + _planeWidgetY->GetTexture()->SetInterpolate( _vtkmpr3Ddataviewer->GetVtkMPRBaseData()->GetInterpolate() ); + } + // FreePlaneZ + _planeWidgetZ->GetNormal(normal); + if ((normal[0]==0)&&(normal[1]==0)&&(normal[2]==1)) + { + _planeWidgetZ->SetSlicePosition( z*spc[2] ); +//EED 2016/02/19 + _planeWidgetZ->GetReslice()->SetInterpolate( _vtkmpr3Ddataviewer->GetVtkMPRBaseData()->GetInterpolate() ); + _planeWidgetZ->GetTexture()->SetInterpolate( _vtkmpr3Ddataviewer->GetVtkMPRBaseData()->GetInterpolate() ); + } + x=x*spc[0]; y=y*spc[1]; z=z*spc[2]; if(_pointWidget){ _pointWidget->SetPosition( x,y,z ); - - double in[3]; double normal[3]; vtkTransform *transform = GetVtkMPR3DDataViewer ()->GetVtkMPRBaseData()->GetTransformOrientation(); in[0]=1; in[1]=0; in[2]=0; transform->TransformPoint(in,normal); _planeWidget->SetNormal( normal[0],normal[1],normal[2] ); - - _planeWidget->SetCenter( x,y,z ); _planeWidget->UpdatePlacement(); _planeWidget->GetPolyData(_vtkplane); } } + //------------------------------------------------------------------- wxPanel* wxVtkMPR3DView::CreateControlPanel(wxWindow *parent, bool align) { @@ -383,7 +580,8 @@ vtkMPR3DDataViewer* wxVtkMPR3DView::GetVtkMPR3DDataViewer() //------------------------------------------------------------------- wxVtk3DBaseView* wxVtkMPR3DView::GetWxvtk3Dbaseview() throw (char*) { - if(_wxvtk3Dbaseview==NULL){ + if(_wxvtk3Dbaseview==NULL) + { throw "wxVtk3DBaseView* wxVtkMPR3DView::GetWxvtk3Dbaseview() _wxvtk3Dbaseview=NULL"; } return _wxvtk3Dbaseview; @@ -404,7 +602,42 @@ void wxVtkMPR3DView::VisibleImageActor(int idPosition, bool visible){ if (visible==false){ _wxvtk3Dbaseview->GetRenderer()->RemoveActor( _vtkmpr3Ddataviewer->GetImageActor(idPosition) ); } else { +//EED 21/07/2013 +// 1. Make backup of actors +// 2. Putting out all the actors +// 3. Add vtkImagageActor in first place +// 4. Putting again the originals actors +// 5. Refresh + +//EED 4 nov 2015 (For Estelle) +// This works in ViewerNV with nTymeView=6 +// Because the others modules (5) generate also more actors with an OutLineFilter -> Actor +//showOutlineActor(false); + + // step 1, step 2 + vtkActorCollection *tmpCollection = vtkActorCollection::New(); + vtkActorCollection *collectionActors = _wxvtk3Dbaseview->GetRenderer()->GetActors(); + int i,size=collectionActors->GetNumberOfItems(); + for (i=0; iAddItem ( (vtkActor*)collectionActors->GetItemAsObject(0) ); + _wxvtk3Dbaseview->GetRenderer()->RemoveActor( (vtkProp*)tmpCollection->GetItemAsObject(i) ); + } // for + + // step 3 _wxvtk3Dbaseview->GetRenderer()->AddActor( _vtkmpr3Ddataviewer->GetImageActor(idPosition) ); + + // step 4 + for (i=0; iGetRenderer()->AddActor( (vtkProp*)tmpCollection->GetItemAsObject(i) ); + } // for + tmpCollection->Delete(); + + // step 5 Refresh + _wxvtk3Dbaseview->GetRenderer()->GetRenderWindow()->Render(); + } _vtkmpr3Ddataviewer->SetVisiblePosition(idPosition,visible); } @@ -443,6 +676,7 @@ void wxVtkMPR3DView::VisiblePlaneWidget( bool visible ) //CPR: Method added 30 Nov 2009 void wxVtkMPR3DView::showOutlineActor(bool value) { + vtkActor* _outlineActor = _vtkmpr3Ddataviewer->GetOutlineActor(); if(value == true) { @@ -452,6 +686,7 @@ void wxVtkMPR3DView::showOutlineActor(bool value) { _wxvtk3Dbaseview->GetRenderer()->RemoveActor( _outlineActor ); } + } //------------------------------------------------------------------- @@ -466,8 +701,19 @@ void wxVtkMPR3DView::InitOrientationPointWidget() this->_planeWidget->SetNormal(1,0,0); } +//------------------------------------------------------------------- +void wxVtkMPR3DView::SetColorWindow(double colorWindow) +{ + double colorLevel = _planeWidgetX->GetLevel(); + _planeWidgetX->SetWindowLevel(colorWindow,colorLevel); +} - +//------------------------------------------------------------------- +void wxVtkMPR3DView::SetColorLevel(double colorLevel) +{ + double colorWindow = _planeWidgetX->GetWindow(); + _planeWidgetX->SetWindowLevel(colorWindow,colorLevel); +} //------------------------------------------------------------------- // EED 25 Janvier 2007 testLoic @@ -598,7 +844,6 @@ void wxVtkMPR3DView::TestLoic2() vtkPlane *slicePlane = vtkPlane::New(); this->_planeWidget->GetPlane( slicePlane ); - vtkCutter* sliceCutter = vtkCutter::New(); vtkImageData *vtkimagedata = this->GetVtkMPR3DDataViewer()->GetVtkMPRBaseData()->GetImageData(); sliceCutter->SetInput( vtkimagedata ); @@ -607,7 +852,6 @@ void wxVtkMPR3DView::TestLoic2() //EED // vtkLookupTable *lut = BuildHueWeightBaseMap(); - vtkPolyDataMapper *slice = vtkPolyDataMapper::New(); slice->SetInput( sliceCutter->GetOutput() ); double range[2]; @@ -627,12 +871,9 @@ void wxVtkMPR3DView::TestLoic2() contourMapper->SetScalarRange( range ); // contourMapper->SetLookupTable( lut ); - vtkActor *contourActor = vtkActor::New(); contourActor->SetMapper( contourMapper ); - - // The usual rendering stuff. vtkCamera *camera = vtkCamera::New(); camera->SetPosition(1,1,1); @@ -656,7 +897,27 @@ void wxVtkMPR3DView::TestLoic2() // interact with data renWin->Render(); iren->Start(); +} - +//------------------------------------------------------------------- +void wxVtkMPR3DView::SetBackGroundType(int type) +{ + if (_wxvtk3Dbaseview!=NULL) + { + if (type==0) + { + _wxvtk3Dbaseview->GetRenderer()->GradientBackgroundOff(); + _wxvtk3Dbaseview->GetRenderer()->SetBackground( 0 , 0 , 0 ); + } // if type + if (type==1) + { + _wxvtk3Dbaseview->GetRenderer()->GradientBackgroundOn(); + _wxvtk3Dbaseview->GetRenderer()->SetBackground( 0.33 , 0.33 , 0.33 ); + _wxvtk3Dbaseview->GetRenderer()->SetBackground2( 0.66 , 0.66 , 0.66 ); + } // if type + _wxvtk3Dbaseview->Refresh(); + }// if _wxvtk3Dbaseview + } +