+//----------------------------------------------------------------------------
+//----------------------------------------------------------------------------
+//----------------------------------------------------------------------------
+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;
+};
+
+//-------------------------------------------------------------------
+//-------------------------------------------------------------------
+//-------------------------------------------------------------------