X-Git-Url: https://git.creatis.insa-lyon.fr/pubgit/?a=blobdiff_plain;f=lib%2FmaracasVisuLib%2Fsrc%2Finterface%2FwxWindows%2Fwidgets%2FwxVtkMPR3DView.cxx;h=23b6ce1ad4b199dde4a41aa3525362bc8b08d38b;hb=15112ae15da4222831b0e8e7c9be87daf9e99a1c;hp=d6fb6a53eebbe33672756b43486172ed03026a83;hpb=56eb704bce4e7a4206ffa16c84f3000b8b8f93eb;p=creaMaracasVisu.git diff --git a/lib/maracasVisuLib/src/interface/wxWindows/widgets/wxVtkMPR3DView.cxx b/lib/maracasVisuLib/src/interface/wxWindows/widgets/wxVtkMPR3DView.cxx index d6fb6a5..23b6ce1 100644 --- a/lib/maracasVisuLib/src/interface/wxWindows/widgets/wxVtkMPR3DView.cxx +++ b/lib/maracasVisuLib/src/interface/wxWindows/widgets/wxVtkMPR3DView.cxx @@ -41,6 +41,7 @@ #include "vtkCellPicker.h" #include "vtkInteractorStyleBaseView.h" #include +#include "vtkTexture.h" @@ -80,19 +81,15 @@ class vtkWindowLevelImagePlaneWidgetCallback : public vtkCommand _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)) { @@ -110,28 +107,20 @@ class vtkWindowLevelImagePlaneWidgetCallback : public vtkCommand } }// 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 ) { _wxvtk3Dbaseview = wxvtk3Dbaseview; @@ -143,7 +132,6 @@ wxVtkMPR3DView::wxVtkMPR3DView( wxVtk3DBaseView *wxvtk3Dbaseview ) _vtkplane = NULL; _probe = NULL; _contourMapper = NULL; - _planeWidgetX = NULL; _planeWidgetY = NULL; _planeWidgetZ = NULL; @@ -151,27 +139,26 @@ wxVtkMPR3DView::wxVtkMPR3DView( wxVtk3DBaseView *wxvtk3Dbaseview ) //Free Planes } - //------------------------------------------------------------------- wxVtkMPR3DView::~wxVtkMPR3DView() { VisiblePointWidget( false ); - VisiblePlaneWidget( false ); - - if(_pointWidget!=NULL){ +// VisiblePlaneWidget( false ); + if(_pointWidget!=NULL) + { _pointWidget->Delete(); } - if(_planeWidget!=NULL){ + if(_planeWidget!=NULL) + { _planeWidget->Delete(); } - - if(_vtkplane!=NULL){ + if(_vtkplane!=NULL) + { _vtkplane->Delete(); _probe->Delete(); _contourMapper->Delete(); _contourPlaneActor->Delete(); } - } //------------------------------------------------------------------- @@ -179,9 +166,6 @@ void wxVtkMPR3DView::RemoveActor(vtkActor* actor) { _wxvtk3Dbaseview->GetRenderer()->RemoveActor(actor); } - - - //------------------------------------------------------------------- void wxVtkMPR3DView::Configure() { @@ -191,6 +175,7 @@ void wxVtkMPR3DView::Configure() // Actors are added to the renderer. vtkActor* _outlineActor = _vtkmpr3Ddataviewer->GetOutlineActor(); _wxvtk3Dbaseview->GetRenderer()->AddActor( _outlineActor ); + vtkmyPWCallback_3DPointWidget *_myCallback = vtkmyPWCallback_3DPointWidget::New(); _myCallback->SetWxVtkMPR3DView(this); if(imageData){ @@ -208,9 +193,7 @@ void wxVtkMPR3DView::Configure() _pointWidget->SetInteractor( GetWxvtk3Dbaseview()->GetWxVTKRenderWindowInteractor() ); _pointWidget->AllOff(); _pointWidget->PlaceWidget(); - _pointWidget->AddObserver(vtkCommand::InteractionEvent,_myCallback); - if(_planeWidget==NULL) { _planeWidget = vtkPlaneWidget::New(); @@ -223,21 +206,18 @@ void wxVtkMPR3DView::Configure() #endif _myCallback->SetVtkPlaneWidget(_planeWidget); - _planeWidget->NormalToXAxisOn(); _planeWidget->SetResolution(50); _planeWidget->SetRepresentationToOutline(); - int dim[3]; - imageData->GetDimensions(dim); int px=(dim[0]/2); int py=(dim[1]/2); int pz=(dim[2]/2); int dd=20; _planeWidget->PlaceWidget( px-dd , px+dd , py-dd , py+dd , pz-dd , pz+dd ); - - if(_vtkplane==NULL){ + if(_vtkplane==NULL) + { _vtkplane = vtkPolyData::New(); _probe = vtkProbeFilter::New(); _contourMapper = vtkPolyDataMapper::New(); @@ -258,17 +238,12 @@ void wxVtkMPR3DView::Configure() _contourPlaneActor = vtkActor::New(); _contourPlaneActor->SetMapper(_contourMapper); - _contourPlaneActor->VisibilityOff(); - _planeWidget->SetInteractor( GetWxvtk3Dbaseview()->GetWxVTKRenderWindowInteractor() ); _planeWidget->AddObserver(vtkCommand::InteractionEvent,_myCallback); - _planeWidget->Off(); _wxvtk3Dbaseview->GetRenderer()->AddActor( _contourPlaneActor ); - } - _planeWidget->GetPolyData(_vtkplane); //EED 2017-01-01 Migration VTK7 @@ -278,7 +253,6 @@ void wxVtkMPR3DView::Configure() _probe->SetSourceData( imageData ); #endif _contourMapper->SetScalarRange( imageData->GetScalarRange() ); - ConfigureFreePlanes(); } @@ -313,26 +287,21 @@ void wxVtkMPR3DView::Configure() // render window (expressed in pixels). _wxvtk3Dbaseview->GetRenderer()->SetBackground( 0.36 , 0.36 , 0.36 ); //EED 23oct2010 _wxvtk3Dbaseview->GetRenWin()->SetSize(400, 400); - } //------------------------------------------------------------------- void wxVtkMPR3DView::ConfigureFreePlanes() { - // The shared picker enables us to use 3 planes at one time // and gets the picking order right vtkCellPicker* picker = vtkCellPicker::New(); picker->SetTolerance(0.005); - // The 3 image plane widgets _planeWidgetX = GetPlaneWidget('x', 1, 0, 0, picker); _planeWidgetY = GetPlaneWidget('y', 1, 1, 0, picker); _planeWidgetZ = GetPlaneWidget('z', 0, 0, 1, picker); - _planeWidgetY->SetLookupTable(_planeWidgetX->GetLookupTable()); _planeWidgetZ->SetLookupTable(_planeWidgetX->GetLookupTable()); - picker->UnRegister(NULL); // ColorWindow ColorLevel Callback @@ -362,22 +331,74 @@ void wxVtkMPR3DView::SetImage() // -- Plane widget _probe->SetSource( imageData ); #else + + +// double colorWindow = _vtkmpr3Ddataviewer->GetVtkMPRBaseData()->GetColorWindow(); +// double colorLevel = _vtkmpr3Ddataviewer->GetVtkMPRBaseData()->GetColorLevel(); + + double spc[3]; + vtkImageData *image = GetVtkMPR3DDataViewer()->GetVtkMPRBaseData()->GetImageData(); + if(image) + { + image->GetSpacing(spc); + }else{ + spc[0] = 0; + spc[1] = 0; + spc[2] = 0; + } + double x = GetVtkMPR3DDataViewer()->GetVtkMPRBaseData()->GetX(); + double y = GetVtkMPR3DDataViewer()->GetVtkMPRBaseData()->GetY(); + double z = GetVtkMPR3DDataViewer()->GetVtkMPRBaseData()->GetZ(); + + +/* + if (mchange==NULL) + { + mchange = vtkImageChangeInformation::New(); + mchange->SetInputData( imageData ); + mchange->Modified(); //important + mchange->Update(); //important + _planeWidgetX->SetInputData( mchange->GetOutput() ); + _planeWidgetY->SetInputData( mchange->GetOutput() ); + _planeWidgetZ->SetInputData( mchange->GetOutput() ); + } else { + mchange->SetInputData( imageData ); + mchange->Modified(); //important + mchange->Update(); //important + } + +*/ + + + + _planeWidgetX->SetInputData( imageData ); _planeWidgetY->SetInputData( imageData ); _planeWidgetZ->SetInputData( imageData ); +//EED 2021-06-23 +// _planeWidgetX->SetWindowLevel(colorLevel,colorWindow,1); +// _planeWidgetY->SetWindowLevel(colorLevel,colorWindow,1); +// _planeWidgetY->SetWindowLevel(colorLevel,colorWindow,1); + _planeWidgetX->SetSlicePosition( x*spc[0] ); + _planeWidgetY->SetSlicePosition( y*spc[1] ); + _planeWidgetZ->SetSlicePosition( z*spc[2] ); + + _planeWidgetX->GetTexture()->SetInterpolate( _vtkmpr3Ddataviewer->GetVtkMPRBaseData()->GetInterpolate() ); + _planeWidgetY->GetTexture()->SetInterpolate( _vtkmpr3Ddataviewer->GetVtkMPRBaseData()->GetInterpolate() ); + _planeWidgetZ->GetTexture()->SetInterpolate( _vtkmpr3Ddataviewer->GetVtkMPRBaseData()->GetInterpolate() ); + + // -- Plane widget _probe->SetSourceData( imageData ); #endif - _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 = NULL; + vtkImagePlaneWidget* planeWidget = vtkImagePlaneWidget::New(); planeWidget->SetInteractor( GetWxvtk3Dbaseview()->GetWxVTKRenderWindowInteractor() ); planeWidget->EnabledOff(); vtkImageData *image = GetVtkMPR3DDataViewer()->GetVtkMPRBaseData()->GetImageData(); @@ -493,7 +514,7 @@ void wxVtkMPR3DView::FreePlaneInteraction(bool ok) _planeWidgetY->InteractionOff(); _planeWidgetZ->InteractionOff(); } - } // if _planeWidgetX + } // if _planeWidgetXVisiblePointWidget } @@ -519,7 +540,6 @@ void wxVtkMPR3DView::RefreshView() // virtual { double spc[3]; vtkImageData *image = GetVtkMPR3DDataViewer()->GetVtkMPRBaseData()->GetImageData(); - if(image) { image->GetSpacing(spc); @@ -528,18 +548,13 @@ void wxVtkMPR3DView::RefreshView() // virtual spc[1] = 0; spc[2] = 0; } - // GetVtkMPR3DDataViewer()->Configure(); - //double nx=1,ny=0,nz=0; // JPRx Refresh(); - double x=GetVtkMPR3DDataViewer()->GetVtkMPRBaseData()->GetX(); - double y=GetVtkMPR3DDataViewer()->GetVtkMPRBaseData()->GetY(); - double z=GetVtkMPR3DDataViewer()->GetVtkMPRBaseData()->GetZ(); - - SetColorWindow( _vtkmpr3Ddataviewer->GetVtkMPRBaseData()->GetColorWindow() ); - SetColorLevel( _vtkmpr3Ddataviewer->GetVtkMPRBaseData()->GetColorLevel() ); + double x = GetVtkMPR3DDataViewer()->GetVtkMPRBaseData()->GetX(); + double y = GetVtkMPR3DDataViewer()->GetVtkMPRBaseData()->GetY(); + double z = GetVtkMPR3DDataViewer()->GetVtkMPRBaseData()->GetZ(); double normal[3]; // FreePlaneX @@ -548,7 +563,7 @@ void wxVtkMPR3DView::RefreshView() // virtual { _planeWidgetX->SetSlicePosition( x*spc[0] ); //EED 2016/02/19 -// _planeWidgetX->GetReslice()->SetInterpolate( _vtkmpr3Ddataviewer->GetVtkMPRBaseData()->GetInterpolate() ); + _planeWidgetX->GetReslice()->SetInterpolate( _vtkmpr3Ddataviewer->GetVtkMPRBaseData()->GetInterpolate() ); _planeWidgetX->GetTexture()->SetInterpolate( _vtkmpr3Ddataviewer->GetVtkMPRBaseData()->GetInterpolate() ); } // FreePlaneY @@ -569,11 +584,12 @@ void wxVtkMPR3DView::RefreshView() // virtual _planeWidgetZ->GetReslice()->SetInterpolate( _vtkmpr3Ddataviewer->GetVtkMPRBaseData()->GetInterpolate() ); _planeWidgetZ->GetTexture()->SetInterpolate( _vtkmpr3Ddataviewer->GetVtkMPRBaseData()->GetInterpolate() ); } - - x=x*spc[0]; - y=y*spc[1]; - z=z*spc[2]; - + + SetWindowColorLevel(_vtkmpr3Ddataviewer->GetVtkMPRBaseData()->GetColorWindow() , _vtkmpr3Ddataviewer->GetVtkMPRBaseData()->GetColorLevel() ); + + x = x*spc[0]; + y = y*spc[1]; + z = z*spc[2]; if(_pointWidget) { //EED 2017-01-01 Migration VTK7 @@ -600,7 +616,7 @@ void wxVtkMPR3DView::RefreshView() // virtual #else _probe->Update(); #endif - } + } //_pointWidget if (_wxvtkmpr3DviewCntrlPanel!=NULL) { @@ -631,7 +647,8 @@ wxVtk3DBaseView* wxVtkMPR3DView::GetWxvtk3Dbaseview() throw (char*) //------------------------------------------------------------------- //------------------------------------------------------------------- -void wxVtkMPR3DView::VisibleImageActor(int idPosition, bool visible){ +void wxVtkMPR3DView::VisibleImageActor(int idPosition, bool visible) +{ /*if(visible == false) printf("CPR: wxVtkMPR3DView::VisibleImageActor-> visibleActor == false \n"); else @@ -641,7 +658,8 @@ void wxVtkMPR3DView::VisibleImageActor(int idPosition, bool visible){ } */ if (visible!=_vtkmpr3Ddataviewer->GetVisiblePosition(idPosition)){ - if (visible==false){ + if (visible==false) + { _wxvtk3Dbaseview->GetRenderer()->RemoveActor( _vtkmpr3Ddataviewer->GetImageActor(idPosition) ); } else { //EED 21/07/2013 @@ -655,7 +673,6 @@ void wxVtkMPR3DView::VisibleImageActor(int idPosition, bool visible){ // 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(); @@ -665,20 +682,16 @@ void wxVtkMPR3DView::VisibleImageActor(int idPosition, bool visible){ tmpCollection->AddItem ( (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(); - } // if visible _vtkmpr3Ddataviewer->SetVisiblePosition(idPosition,visible); } // if visible @@ -706,7 +719,6 @@ void wxVtkMPR3DView::VisiblePlaneWidget( bool visible ) { _planeWidget->On(); _contourPlaneActor->VisibilityOn(); - } else { _planeWidget->Off(); _contourPlaneActor->VisibilityOff(); @@ -716,9 +728,8 @@ void wxVtkMPR3DView::VisiblePlaneWidget( bool visible ) } //CPR: Method added 30 Nov 2009 -void wxVtkMPR3DView::showOutlineActor(bool value) +void wxVtkMPR3DView::showOutlineBoxActor(bool value) { - vtkActor* _outlineActor = _vtkmpr3Ddataviewer->GetOutlineActor(); if(value == true) { @@ -726,9 +737,31 @@ void wxVtkMPR3DView::showOutlineActor(bool value) } else { _wxvtk3Dbaseview->GetRenderer()->RemoveActor( _outlineActor ); } // value +} +//------------------------------------------------------------------- +void wxVtkMPR3DView::showOutlinePlaneActor(bool value) +{ + vtkProperty *prop1=NULL; + if(value == true) + { + prop1 = _planeWidgetX ->GetPlaneProperty(); + prop1->SetOpacity(1); + prop1 = _planeWidgetY ->GetPlaneProperty(); + prop1->SetOpacity(1); + prop1 = _planeWidgetZ ->GetPlaneProperty(); + prop1->SetOpacity(1); + } else { + prop1 = _planeWidgetX ->GetPlaneProperty(); + prop1->SetOpacity(0); + prop1 = _planeWidgetY ->GetPlaneProperty(); + prop1->SetOpacity(0); + prop1 = _planeWidgetZ ->GetPlaneProperty(); + prop1->SetOpacity(0); + } // value } + //------------------------------------------------------------------- void wxVtkMPR3DView::SetVtkMPR3DDataViewer(vtkMPR3DDataViewer *vtkmpr3Ddataviewer) { @@ -742,18 +775,13 @@ void wxVtkMPR3DView::InitOrientationPointWidget() } //------------------------------------------------------------------- -void wxVtkMPR3DView::SetColorWindow(double colorWindow) +void wxVtkMPR3DView::SetWindowColorLevel(double colorWindow , double colorLevel) { - double colorLevel = _planeWidgetX->GetLevel(); _planeWidgetX->SetWindowLevel(colorWindow,colorLevel); + _planeWidgetY->SetWindowLevel(colorWindow,colorLevel); + _planeWidgetZ->SetWindowLevel(colorWindow,colorLevel); } -//------------------------------------------------------------------- -void wxVtkMPR3DView::SetColorLevel(double colorLevel) -{ - double colorWindow = _planeWidgetX->GetWindow(); - _planeWidgetX->SetWindowLevel(colorWindow,colorLevel); -} //------------------------------------------------------------------- // EED 25 Janvier 2007 testLoic @@ -868,13 +896,13 @@ void wxVtkMPR3DView::TestLoic1() //EED 2017-01-01 Migration VTK7 #if VTK_MAJOR_VERSION <= 5 _3DSliceMapper->SetInput(change->GetOutput( ) ); + _3DSliceMapper->ImmediateModeRenderingOn( ); #else _3DSliceMapper->SetInputData(change->GetOutput( ) ); #endif _3DSliceMapper->SetLookupTable( _bwlookup ); _3DSliceMapper->SetScalarRange( _range ); - _3DSliceMapper->ImmediateModeRenderingOn( ); vtkActor *_3DSliceActor = vtkActor::New( ); _3DSliceActor->SetMapper( _3DSliceMapper ); @@ -1000,15 +1028,20 @@ void wxVtkMPR3DView::SetBackGroundType(int type) if (_wxvtk3Dbaseview!=NULL) { if (type==0) + { + _wxvtk3Dbaseview->GetRenderer()->GradientBackgroundOn(); + _wxvtk3Dbaseview->GetRenderer()->SetBackground( 0.33 , 0.33 , 0.33 ); + _wxvtk3Dbaseview->GetRenderer()->SetBackground2( 0.66 , 0.66 , 0.66 ); + } // if type + else if (type==1) { _wxvtk3Dbaseview->GetRenderer()->GradientBackgroundOff(); _wxvtk3Dbaseview->GetRenderer()->SetBackground( 0 , 0 , 0 ); } // if type - if (type==1) + else if (type==2) { - _wxvtk3Dbaseview->GetRenderer()->GradientBackgroundOn(); - _wxvtk3Dbaseview->GetRenderer()->SetBackground( 0.33 , 0.33 , 0.33 ); - _wxvtk3Dbaseview->GetRenderer()->SetBackground2( 0.66 , 0.66 , 0.66 ); + _wxvtk3Dbaseview->GetRenderer()->GradientBackgroundOff(); + _wxvtk3Dbaseview->GetRenderer()->SetBackground( 1 , 1 , 1 ); } // if type _wxvtk3Dbaseview->Refresh(); }// if _wxvtk3Dbaseview