#include "LayerImageBase.h"
+#include "wxMPRBaseData.h"
#include "wxVtk2DBaseView.h"
#include "wxVTKRenderWindowInteractor.h"
+
+
+//---------------------------------------------------------------------------------------------
+//---------------------------------------------------------------------------------------------
+//---------------------------------------------------------------------------------------------
+
+// Callback for the interaction
+class ColorLayerObserver : public vtkCommand{
+ public:
+ virtual char const *GetClassName() const { return "ColorLayerObserver";}
+
+ static ColorLayerObserver *New() { return new ColorLayerObserver; }
+
+ ColorLayerObserver()
+ {
+ _layerimagebase = NULL;
+ }
+
+ virtual void Execute(vtkObject *wdg, unsigned long event, void* calldata)
+ {
+ if (_layerimagebase!= NULL)
+ {
+
+ wxVtkBaseView *wxvtkbaseview = _layerimagebase->GetwxVtkBaseView();
+ if (wxvtkbaseview!=NULL)
+ {
+
+ vtkMPRBaseData *vtkmprbasedata = (vtkMPRBaseData*)wxvtkbaseview->GetVtkBaseData();
+ if (vtkmprbasedata!=NULL)
+ {
+ _layerimagebase->SetX( vtkmprbasedata->GetX() );
+ _layerimagebase->SetY( vtkmprbasedata->GetY() );
+ _layerimagebase->SetZ( vtkmprbasedata->GetZ() );
+ _layerimagebase->onThresholdChange();
+ } // if basedata
+
+ } // if wxvtkbaseview
+ } //if layerimagebase
+ }
+
+ void SetLayerImageBase(LayerImageBase* layerimagebase)
+ {
+ _layerimagebase = layerimagebase;
+ }
+
+private:
+ LayerImageBase* _layerimagebase;
+};
+
+
//---------------------------------------------------------------------------------------------
//---------------------------------------------------------------------------------------------
//---------------------------------------------------------------------------------------------
ColorLayerImageBasevtkInteractor::ColorLayerImageBasevtkInteractor(LayerImageBase* layerImageBase)
{
- _state=false;
- _stateKey=false;
- _layerImageBase=layerImageBase;
+ _state = false;
+ _stateKey = false;
+ _layerImageBase = layerImageBase;
}
// if ( this->_vtkInteractorStyleBaseView->GetParent_refresh_waiting() == true )
if ( interactor->GetControlKey()==1 ) // EED This if for ManaulPaint Interaction compatibility
- {
+ {
printf("EED ColorLayerImageBasevtkInteractor::OnMouseMove need Refresh \n" );
_layerImageBase->onThreshold();
- _layerImageBase->GetvtkImageReslice()->Modified();
- }
- else {
- printf("EED ColorLayerImageBasevtkInteractor::OnMouseMove NOT need Refresh \n" );
+ _layerImageBase->GetvtkImageReslice()->Modified();
+ } else {
+ printf("EED ColorLayerImageBasevtkInteractor::OnMouseMove NOT need Refresh \n" );
}
{
printf("EED ColorLayerImageBasevtkInteractor::OnRightButtonDown \n");
_state=true;
- return true;
+ return true;
}
+
//---------------------------------------------------------------------------------------------
bool ColorLayerImageBasevtkInteractor::OnRightButtonUp() // virtual
{
LayerImageBase::LayerImageBase()
{
_actorPresent = false;
- _X = 0;
- _Y = 0;
- _Z = 0;
- _thresholdTable = NULL;
+ _X = 0;
+ _Y = 0;
+ _Z = 0;
+ _thresholdTable = NULL;
_thresholdMapper = NULL;
- _scalarbarActor = NULL;
- _thresholdActor = NULL;
- _image = NULL;
- _baseView = NULL;
+ _scalarbarActor = NULL;
+ _thresholdActor = NULL;
+ _image = NULL;
+ _baseView = NULL;
_imageReslicer = vtkImageReslice::New();
-
}
//----------------------------------------------------------------------------
- LayerImageBase::~LayerImageBase()
- {
- }
+LayerImageBase::~LayerImageBase()
+{
+}
//----------------------------------------------------------------------------
void LayerImageBase::SetX(int x)
void LayerImageBase::SetwxVtkBaseView(wxVtkBaseView *baseview)
{
if (_baseView==NULL)
- {
- _baseView = baseview;
- vtkInteractorStyleBaseView *isbv = (vtkInteractorStyleBaseView*)(_baseView->GetInteractorStyleBaseView());
- isbv->AddInteractorStyleMaracas( new ColorLayerImageBasevtkInteractor(this) );
+ {
+ _baseView = baseview;
+// Old EED 2014 11 13
+// vtkInteractorStyleBaseView *isbv = (vtkInteractorStyleBaseView*)(_baseView->GetInteractorStyleBaseView());
+// isbv->AddInteractorStyleMaracas( new ColorLayerImageBasevtkInteractor(this) );
+
+ ColorLayerObserver *colorlayerobserver = ColorLayerObserver::New();
+ _baseView->GetVtkBaseData()->AddObserver( 1, colorlayerobserver );
+ colorlayerobserver->SetLayerImageBase(this);
+
} // if _baseView
}
return _thresholdTable;
}
+//----------------------------------------------------------------------------
vtkImageReslice *LayerImageBase::GetvtkImageReslice()
{
return _imageReslicer;