X-Git-Url: https://git.creatis.insa-lyon.fr/pubgit/?a=blobdiff_plain;f=lib%2FmaracasVisuLib%2Fsrc%2Finterface%2FwxWindows%2Fwidgets%2FwxVtkMPR3DView.cxx;h=72acc37357cecda89316bb71e61249e69fda0da9;hb=543dfcbe8f5ff78bbed90ef1e20c722bfa0ef248;hp=e740c60db0b54851abceeaad79c2adbed82edaec;hpb=1011e93f16fe2c49f22ff4f6b4b096c63eb14526;p=creaMaracasVisu.git diff --git a/lib/maracasVisuLib/src/interface/wxWindows/widgets/wxVtkMPR3DView.cxx b/lib/maracasVisuLib/src/interface/wxWindows/widgets/wxVtkMPR3DView.cxx index e740c60..72acc37 100644 --- a/lib/maracasVisuLib/src/interface/wxWindows/widgets/wxVtkMPR3DView.cxx +++ b/lib/maracasVisuLib/src/interface/wxWindows/widgets/wxVtkMPR3DView.cxx @@ -5,7 +5,6 @@ #include "vtkProbeFilter.h" #include "vtkStructuredPoints.h" #include "vtkMetaImageWriter.h" -#include "vtkDataSetMapper.h" #include "vtkImageChangeInformation.h" #include "vtkPointData.h" #include "vtkWindowLevelLookupTable.h" @@ -15,22 +14,120 @@ #include "vtkmyPWCallback_3DPointWidget.h" #include "vtkProperty.h" #include "vtkCellPicker.h" +#include "vtkInteractorStyleBaseView.h" +#include + +#ifdef _DEBUG +#define new DEBUG_NEW +#endif + + + +//---------------------------------------------------------------------------- +//---------------------------------------------------------------------------- +//---------------------------------------------------------------------------- +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 ) { _wxvtk3Dbaseview = wxvtk3Dbaseview; _vtkmpr3Ddataviewer = NULL; - _wxvtkmpr3DviewCntrlPanel = NULL; + _wxvtkmpr3DviewCntrlPanel = NULL; //_myCallback = NULL; _pointWidget = NULL; _planeWidget = NULL; _vtkplane = NULL; _probe = NULL; _contourMapper = NULL; - - + + _planeWidgetX = NULL; + _planeWidgetY = NULL; + _planeWidgetZ = NULL; //EED Fev 3 2010 - //Free Planes + //Free Planes } @@ -39,37 +136,44 @@ wxVtkMPR3DView::~wxVtkMPR3DView() { VisiblePointWidget( false ); VisiblePlaneWidget( false ); - + if(_pointWidget!=NULL){ _pointWidget->Delete(); } if(_planeWidget!=NULL){ _planeWidget->Delete(); } - + if(_vtkplane!=NULL){ - _vtkplane->Delete(); + _vtkplane->Delete(); _probe->Delete(); - _contourMapper->Delete(); - _contourPlaneActor->Delete(); + _contourMapper->Delete(); + _contourPlaneActor->Delete(); } - + } //------------------------------------------------------------------- void wxVtkMPR3DView::RemoveActor(vtkActor* actor) -{ - _wxvtk3Dbaseview->GetRenderer()->RemoveActor(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); + _wxvtk3Dbaseview->GetRenderer()->ResetCamera (); + _wxvtk3Dbaseview->GetCamera()->Dolly(2.0); + +//EED 21 mars 2012 FLIP probleme ..PLOP.. + _wxvtk3Dbaseview->GetCamera()->Roll(180); + _wxvtk3Dbaseview->GetCamera()->Yaw(180+30); + _wxvtk3Dbaseview->GetCamera()->Pitch(-22); + }else{ - /*double x = (spc[0])*(origin[0]+(((double)ext[1]-(double)ext[0])/2.0)); + + /*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]); @@ -78,50 +182,55 @@ void wxVtkMPR3DView::ResetCamera(int* ext, double* origin,double* spc) 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); + _wxvtk3Dbaseview->GetCamera()->Dolly(1.5); + } + } //------------------------------------------------------------------- -void wxVtkMPR3DView::Configure(){ +void wxVtkMPR3DView::Configure() +{ + vtkImageData *imageData = GetVtkMPR3DDataViewer()->GetVtkMPRBaseData()->GetImageData(); _wxvtk3Dbaseview->Configure(); _wxvtkmpr3DviewCntrlPanel->UpdateControlPanel(); - -//EED 27 Mai 2009 -// _wxvtk3Dbaseview->GetRenderer()->Clear(); - - // Actors are added to the renderer. + +//EED 27 Mai 2009 +// _wxvtk3Dbaseview->GetRenderer()->Clear(); + + // Actors are added to the renderer. vtkActor* _outlineActor = _vtkmpr3Ddataviewer->GetOutlineActor(); - _wxvtk3Dbaseview->GetRenderer()->AddActor( _outlineActor ); + _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. + // 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 ); - _wxvtk3Dbaseview->GetRenWin()->SetSize(400, 400); +//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 + // 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. @@ -135,77 +244,79 @@ void wxVtkMPR3DView::Configure(){ //} vtkmyPWCallback_3DPointWidget *_myCallback = vtkmyPWCallback_3DPointWidget::New(); _myCallback->SetWxVtkMPR3DView(this); - - if(_pointWidget!=NULL){ - _pointWidget->Delete(); - } - _pointWidget = vtkPointWidget::New(); - _myCallback->SetVtkPointWidget(_pointWidget); - _pointWidget->SetInteractor( GetWxvtk3Dbaseview()->GetWxVTKRenderWindowInteractor() ); - _pointWidget->SetInput( GetVtkMPR3DDataViewer()->GetVtkMPRBaseData()->GetImageData() ); - - _pointWidget->AllOff(); - - _pointWidget->PlaceWidget(); -// _pointWidget->SetPosition( x,y,z ); - -//EED01 29Mars2009 -// MACOS probleme vtk-window out of wx-window -// _pointWidget->On(); - - _pointWidget->AddObserver(vtkCommand::InteractionEvent,_myCallback); -// PlaneWidget - if(_planeWidget!=NULL) - { - _planeWidget->Delete(); - } - _planeWidget = vtkPlaneWidget::New(); - _myCallback->SetVtkPlaneWidget(_planeWidget); - _planeWidget->SetInput( GetVtkMPR3DDataViewer()->GetVtkMPRBaseData()->GetImageData() ); - _planeWidget->NormalToXAxisOn(); - _planeWidget->SetResolution(50); - _planeWidget->SetRepresentationToOutline(); - int dim[3]; - GetVtkMPR3DDataViewer()->GetVtkMPRBaseData()->GetImageData()->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){ - _vtkplane = vtkPolyData::New(); - - _probe = vtkProbeFilter::New(); - _probe->SetInput(_vtkplane); + if(imageData){ + if(_pointWidget==NULL){ + _pointWidget = vtkPointWidget::New(); + } + _pointWidget->SetInput( imageData ); + _myCallback->SetVtkPointWidget(_pointWidget); + _pointWidget->SetInteractor( GetWxvtk3Dbaseview()->GetWxVTKRenderWindowInteractor() ); + _pointWidget->AllOff(); + _pointWidget->PlaceWidget(); - _contourMapper = vtkPolyDataMapper::New(); - - _contourMapper->SetInput( _probe->GetPolyDataOutput() ); + _pointWidget->AddObserver(vtkCommand::InteractionEvent,_myCallback); - _contourPlaneActor = vtkActor::New(); - _contourPlaneActor->SetMapper(_contourMapper); + if(_planeWidget==NULL) + { + _planeWidget = vtkPlaneWidget::New(); + } + _planeWidget->SetInput( imageData ); - _contourPlaneActor->VisibilityOff(); + _myCallback->SetVtkPlaneWidget(_planeWidget); - _planeWidget->SetInteractor( GetWxvtk3Dbaseview()->GetWxVTKRenderWindowInteractor() ); - _planeWidget->AddObserver(vtkCommand::InteractionEvent,_myCallback); + _planeWidget->NormalToXAxisOn(); + _planeWidget->SetResolution(50); + _planeWidget->SetRepresentationToOutline(); - _planeWidget->Off(); - _wxvtk3Dbaseview->GetRenderer()->AddActor( _contourPlaneActor ); + 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){ + _vtkplane = vtkPolyData::New(); + + _probe = vtkProbeFilter::New(); + _probe->SetInput(_vtkplane); + + _contourMapper = vtkPolyDataMapper::New(); + + _contourMapper->SetInput( _probe->GetPolyDataOutput() ); + + _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); + _probe->SetSource( imageData ); + _contourMapper->SetScalarRange( imageData->GetScalarRange() ); - }else{ - - } - _planeWidget->GetPolyData(_vtkplane); - vtkImageData *imageData = GetVtkMPR3DDataViewer()->GetVtkMPRBaseData()->GetImageData(); - _probe->SetSource( imageData ); - _contourMapper->SetScalarRange( imageData->GetScalarRange() ); - ConfigureFreePlanes(); + } + +// _pointWidget->SetPosition( x,y,z ); + +//EED01 29Mars2009 +// MACOS probleme vtk-window out of wx-window +// _pointWidget->On(); + +// PlaneWidget + } //------------------------------------------------------------------- @@ -217,53 +328,65 @@ void wxVtkMPR3DView::ConfigureFreePlanes() vtkCellPicker* picker = vtkCellPicker::New(); picker->SetTolerance(0.005); - // The 3 image plane widgets + // 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); - + _planeWidgetZ = GetPlaneWidget('z', 0, 0, 1, picker); + _planeWidgetY->SetLookupTable(_planeWidgetX->GetLookupTable()); _planeWidgetZ->SetLookupTable(_planeWidgetX->GetLookupTable()); - + 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 ); } //------------------------------------------------------------------- vtkImagePlaneWidget* wxVtkMPR3DView::GetPlaneWidget(unsigned char activationkey, double r, double g, double b, vtkCellPicker* picker) { - vtkProperty* prop1 = 0; - vtkImagePlaneWidget* planeWidget = 0; - planeWidget = vtkImagePlaneWidget::New(); - planeWidget->EnabledOff(); + vtkProperty* prop1 = 0; + vtkImagePlaneWidget* planeWidget = 0; + planeWidget = vtkImagePlaneWidget::New(); planeWidget->SetInteractor( GetWxvtk3Dbaseview()->GetWxVTKRenderWindowInteractor() ); - vtkImageData *image = GetVtkMPR3DDataViewer()->GetVtkMPRBaseData()->GetImageData(); - planeWidget->SetInput( image ); + planeWidget->EnabledOff(); + 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) + { + planeWidget->SetInput( image ); + image->GetExtent(xMin, xMax, yMin, yMax, zMin, zMax); + image->GetSpacing(xSpacing, ySpacing, zSpacing); + } - - int xMin, xMax, yMin, yMax, zMin, zMax; - image->GetExtent(xMin, xMax, yMin, yMax, zMin, zMax); - double xSpacing, ySpacing, zSpacing; - image->GetSpacing(xSpacing, ySpacing, zSpacing); - if (activationkey=='x') { - planeWidget->SetPlaneOrientationToXAxes(); + planeWidget->SetPlaneOrientationToXAxes(); planeWidget->SetSlicePosition((xMax+xMin)/2.*xSpacing); } - + if (activationkey=='y') { planeWidget->SetPlaneOrientationToYAxes(); planeWidget->SetSlicePosition((yMax+yMin)/2.*ySpacing); } - + if (activationkey=='z') { planeWidget->SetPlaneOrientationToZAxes(); planeWidget->SetSlicePosition((zMax+zMin)/2.*zSpacing); } - + planeWidget->DisplayTextOn(); planeWidget->SetPicker(picker); planeWidget->SetKeyPressActivationValue(activationkey); @@ -272,38 +395,55 @@ 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 ((plane==1) && (ok==true)) _planeWidgetX->EnabledOn(); - if ((plane==2) && (ok==true)) _planeWidgetY->EnabledOn(); - if ((plane==3) && (ok==true)) _planeWidgetZ->EnabledOn(); - if ((plane==1) && (ok==false)) _planeWidgetX->EnabledOff(); - if ((plane==2) && (ok==false)) _planeWidgetY->EnabledOff(); - if ((plane==3) && (ok==false)) _planeWidgetZ->EnabledOff(); + if(_planeWidgetX) + { + if ((plane==1) && (ok==true)) _planeWidgetX->EnabledOn(); + if ((plane==2) && (ok==true)) _planeWidgetY->EnabledOn(); + if ((plane==3) && (ok==true)) _planeWidgetZ->EnabledOn(); + if ((plane==1) && (ok==false)) _planeWidgetX->EnabledOff(); + if ((plane==2) && (ok==false)) _planeWidgetY->EnabledOff(); + if ((plane==3) && (ok==false)) _planeWidgetZ->EnabledOff(); + } } //------------------------------------------------------------------- void wxVtkMPR3DView::FreePlaneInteraction(bool ok) { - if (ok==true) + if(_planeWidgetX) { - _planeWidgetX->InteractionOn(); - _planeWidgetY->InteractionOn(); - _planeWidgetZ->InteractionOn(); - } else { - _planeWidgetX->InteractionOff(); - _planeWidgetY->InteractionOff(); - _planeWidgetZ->InteractionOff(); - } + if (ok==true) + { + _planeWidgetX->InteractionOn(); + _planeWidgetY->InteractionOn(); + _planeWidgetZ->InteractionOn(); + } else { + _planeWidgetX->InteractionOff(); + _planeWidgetY->InteractionOff(); + _planeWidgetZ->InteractionOff(); + } + } // if _planeWidgetX } + //------------------------------------------------------------------- void wxVtkMPR3DView::setColorTransferFunction(vtkColorTransferFunction* colortable) { - GetVtkMPR3DDataViewer ()->setColorTransferFunction(colortable); + GetVtkMPR3DDataViewer ()->setColorTransferFunction(colortable); } //------------------------------------------------------------------- @@ -321,33 +461,65 @@ void wxVtkMPR3DView::Refresh() // virtual void wxVtkMPR3DView::RefreshView() // virtual { double spc[3]; - this->GetVtkMPR3DDataViewer()->GetVtkMPRBaseData()->GetImageData()->GetSpacing(spc); + vtkImageData *image = GetVtkMPR3DDataViewer()->GetVtkMPRBaseData()->GetImageData(); + + if(image){ + image->GetSpacing(spc); + }else{ + spc[0] = 0; + spc[1] = 0; + spc[2] = 0; + } + //this->GetVtkMPR3DDataViewer()->GetVtkMPRBaseData()->GetImageData()->GetSpacing(spc); //double nx=1,ny=0,nz=0; // JPRx Refresh(); - double x=GetVtkMPR3DDataViewer ()->GetVtkMPRBaseData()->GetX(); - double y=GetVtkMPR3DDataViewer ()->GetVtkMPRBaseData()->GetY(); - double z=GetVtkMPR3DDataViewer ()->GetVtkMPRBaseData()->GetZ(); - - x=x*spc[0]; - y=y*spc[1]; - z=z*spc[2]; + double x=GetVtkMPR3DDataViewer()->GetVtkMPRBaseData()->GetX(); + double y=GetVtkMPR3DDataViewer()->GetVtkMPRBaseData()->GetY(); + double z=GetVtkMPR3DDataViewer()->GetVtkMPRBaseData()->GetZ(); - _pointWidget->SetPosition( x,y,z ); + SetColorWindow( _vtkmpr3Ddataviewer->GetVtkMPRBaseData()->GetColorWindow() ); + SetColorLevel( _vtkmpr3Ddataviewer->GetVtkMPRBaseData()->GetColorLevel() ); - 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] ); - + // FreePlaneX + _planeWidgetX->GetNormal(normal); + if ((normal[0]==1)&&(normal[1]==0)&&(normal[2]==0)) + { + _planeWidgetX->SetSlicePosition( x*spc[0] ); + } + // FreePlaneY + _planeWidgetY->GetNormal(normal); + if ((normal[0]==0)&&(normal[1]==1)&&(normal[2]==0)) + { + _planeWidgetY->SetSlicePosition( y*spc[1] ); + } + // FreePlaneZ + _planeWidgetZ->GetNormal(normal); + if ((normal[0]==0)&&(normal[1]==0)&&(normal[2]==1)) + { + _planeWidgetZ->SetSlicePosition( z*spc[2] ); + } + + x=x*spc[0]; + y=y*spc[1]; + z=z*spc[2]; - _planeWidget->SetCenter( x,y,z ); - _planeWidget->UpdatePlacement(); - _planeWidget->GetPolyData(_vtkplane); + 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) { @@ -355,9 +527,9 @@ wxPanel* wxVtkMPR3DView::CreateControlPanel(wxWindow *parent, bool align) return _wxvtkmpr3DviewCntrlPanel; } //------------------------------------------------------------------- -vtkMPR3DDataViewer* wxVtkMPR3DView::GetVtkMPR3DDataViewer() +vtkMPR3DDataViewer* wxVtkMPR3DView::GetVtkMPR3DDataViewer() { - return _vtkmpr3Ddataviewer; + return _vtkmpr3Ddataviewer; } //------------------------------------------------------------------- wxVtk3DBaseView* wxVtkMPR3DView::GetWxvtk3Dbaseview() throw (char*) @@ -381,9 +553,9 @@ void wxVtkMPR3DView::VisibleImageActor(int idPosition, bool visible){ */ if (visible!=_vtkmpr3Ddataviewer->GetVisiblePosition(idPosition)){ if (visible==false){ - _wxvtk3Dbaseview->GetRenderer()->RemoveActor( _vtkmpr3Ddataviewer->GetImageActor(idPosition) ); + _wxvtk3Dbaseview->GetRenderer()->RemoveActor( _vtkmpr3Ddataviewer->GetImageActor(idPosition) ); } else { - _wxvtk3Dbaseview->GetRenderer()->AddActor( _vtkmpr3Ddataviewer->GetImageActor(idPosition) ); + _wxvtk3Dbaseview->GetRenderer()->AddActor( _vtkmpr3Ddataviewer->GetImageActor(idPosition) ); } _vtkmpr3Ddataviewer->SetVisiblePosition(idPosition,visible); } @@ -393,25 +565,29 @@ void wxVtkMPR3DView::VisibleImageActor(int idPosition, bool visible){ //------------------------------------------------------------------- void wxVtkMPR3DView::VisiblePointWidget( bool visible ) { - if (visible==true) - { - _pointWidget->On(); - } else { - _pointWidget->Off(); + if(_pointWidget){ + if (visible==true) + { + _pointWidget->On(); + } else { + _pointWidget->Off(); + } } } //------------------------------------------------------------------- void wxVtkMPR3DView::VisiblePlaneWidget( bool visible ) { - if (visible==true) - { - _planeWidget->On(); - _contourPlaneActor->VisibilityOn(); + if(_planeWidget){ + if (visible==true) + { + _planeWidget->On(); + _contourPlaneActor->VisibilityOn(); - } else { - _planeWidget->Off(); - _contourPlaneActor->VisibilityOff(); + } else { + _planeWidget->Off(); + _contourPlaneActor->VisibilityOff(); + } } } @@ -421,11 +597,11 @@ void wxVtkMPR3DView::showOutlineActor(bool value) vtkActor* _outlineActor = _vtkmpr3Ddataviewer->GetOutlineActor(); if(value == true) { - _wxvtk3Dbaseview->GetRenderer()->AddActor( _outlineActor ); + _wxvtk3Dbaseview->GetRenderer()->AddActor( _outlineActor ); } else { - _wxvtk3Dbaseview->GetRenderer()->RemoveActor( _outlineActor ); + _wxvtk3Dbaseview->GetRenderer()->RemoveActor( _outlineActor ); } } @@ -438,11 +614,22 @@ void wxVtkMPR3DView::SetVtkMPR3DDataViewer(vtkMPR3DDataViewer *vtkmpr3Ddataviewe //------------------------------------------------------------------- void wxVtkMPR3DView::InitOrientationPointWidget() { - this->_planeWidget->SetNormal(1,0,0); + 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 @@ -490,7 +677,7 @@ void wxVtkMPR3DView::TestLoic1() stPoints -> Update(); vtkImageChangeInformation *change = vtkImageChangeInformation ::New(); - change -> SetInput( stPoints ); + change -> SetInput( stPoints ); change -> Update(); //important double _range[2]; @@ -503,7 +690,7 @@ void wxVtkMPR3DView::TestLoic1() _bwlookup->SetValueRange( 0 , 1 ); _bwlookup->SetAlphaRange( 1 , 1 ); _bwlookup->Build( ); - + vtkLookupTable * _collookup = vtkLookupTable::New( ); _collookup->SetNumberOfColors( 256 ); _collookup->SetTableRange( 0 , 255 ); @@ -546,7 +733,7 @@ void wxVtkMPR3DView::TestLoic1() renderer->SetActiveCamera(camera); renderer->ResetCamera(); renderer->SetBackground(1,1,1); - + renWin->SetSize(300,300); // interact with data @@ -573,7 +760,7 @@ void wxVtkMPR3DView::TestLoic2() vtkPlane *slicePlane = vtkPlane::New(); this->_planeWidget->GetPlane( slicePlane ); - + vtkCutter* sliceCutter = vtkCutter::New(); vtkImageData *vtkimagedata = this->GetVtkMPR3DDataViewer()->GetVtkMPRBaseData()->GetImageData(); sliceCutter->SetInput( vtkimagedata ); @@ -602,7 +789,7 @@ void wxVtkMPR3DView::TestLoic2() contourMapper->SetScalarRange( range ); // contourMapper->SetLookupTable( lut ); - + vtkActor *contourActor = vtkActor::New(); contourActor->SetMapper( contourMapper ); @@ -625,13 +812,13 @@ void wxVtkMPR3DView::TestLoic2() renderer->SetActiveCamera(camera); renderer->ResetCamera(); renderer->SetBackground(1,1,1); - + renWin->SetSize(300,300); // interact with data renWin->Render(); iren->Start(); +} -}