#include "vtkCellPicker.h"
#include "vtkInteractorStyleBaseView.h"
#include <vtkImageReslice.h>
+#include "vtkTexture.h"
_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))
{
}
}// 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;
_vtkplane = NULL;
_probe = NULL;
_contourMapper = NULL;
-
_planeWidgetX = NULL;
_planeWidgetY = NULL;
_planeWidgetZ = NULL;
//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();
}
-
}
//-------------------------------------------------------------------
{
_wxvtk3Dbaseview->GetRenderer()->RemoveActor(actor);
}
-
-
-
//-------------------------------------------------------------------
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){
_pointWidget->SetInteractor( GetWxvtk3Dbaseview()->GetWxVTKRenderWindowInteractor() );
_pointWidget->AllOff();
_pointWidget->PlaceWidget();
-
_pointWidget->AddObserver(vtkCommand::InteractionEvent,_myCallback);
-
if(_planeWidget==NULL)
{
_planeWidget = vtkPlaneWidget::New();
#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();
_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
_probe->SetSourceData( imageData );
#endif
_contourMapper->SetScalarRange( imageData->GetScalarRange() );
-
ConfigureFreePlanes();
}
// 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
// -- 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();
_planeWidgetY->InteractionOff();
_planeWidgetZ->InteractionOff();
}
- } // if _planeWidgetX
+ } // if _planeWidgetXVisiblePointWidget
}
{
double spc[3];
vtkImageData *image = GetVtkMPR3DDataViewer()->GetVtkMPRBaseData()->GetImageData();
-
if(image)
{
image->GetSpacing(spc);
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
{
_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
_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
#else
_probe->Update();
#endif
- }
+ } //_pointWidget
if (_wxvtkmpr3DviewCntrlPanel!=NULL)
{
//-------------------------------------------------------------------
//-------------------------------------------------------------------
-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
}
*/
if (visible!=_vtkmpr3Ddataviewer->GetVisiblePosition(idPosition)){
- if (visible==false){
+ if (visible==false)
+ {
_wxvtk3Dbaseview->GetRenderer()->RemoveActor( _vtkmpr3Ddataviewer->GetImageActor(idPosition) );
} else {
//EED 21/07/2013
// 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();
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; i<size; i++)
{
_wxvtk3Dbaseview->GetRenderer()->AddActor( (vtkProp*)tmpCollection->GetItemAsObject(i) );
} // for
tmpCollection->Delete();
-
// step 5 Refresh
_wxvtk3Dbaseview->GetRenderer()->GetRenderWindow()->Render();
-
} // if visible
_vtkmpr3Ddataviewer->SetVisiblePosition(idPosition,visible);
} // if visible
{
_planeWidget->On();
_contourPlaneActor->VisibilityOn();
-
} else {
_planeWidget->Off();
_contourPlaneActor->VisibilityOff();
}
//CPR: Method added 30 Nov 2009
-void wxVtkMPR3DView::showOutlineActor(bool value)
+void wxVtkMPR3DView::showOutlineBoxActor(bool value)
{
-
vtkActor* _outlineActor = _vtkmpr3Ddataviewer->GetOutlineActor();
if(value == true)
{
} 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)
{
}
//-------------------------------------------------------------------
-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
//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 );
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