Interaction to move a surface by the arrow keys. See tutorial step 10 for explanation. More...
#include <mitkMoveSurfaceInteractor.h>
Public Types | |
typedef MoveSurfaceInteractor | Self |
typedef Interactor | Superclass |
typedef itk::SmartPointer< Self > | Pointer |
typedef itk::SmartPointer < const Self > | ConstPointer |
Public Member Functions | |
virtual const char * | GetClassName () const |
Static Public Member Functions | |
static Pointer | New (const char *_arga, DataNode *_argb) |
NewMacro with two parameters for calling itk::Lightobject::New(..) method. | |
Protected Member Functions | |
MoveSurfaceInteractor (const char *type, DataNode *dataNode) | |
check how good an event can be handled | |
virtual | ~MoveSurfaceInteractor () |
Default Destructor. | |
virtual bool | ExecuteAction (Action *action, mitk::StateEvent const *stateEvent) |
Convert the given Actions to Operations and send to data and UndoController. |
Interaction to move a surface by the arrow keys. See tutorial step 10 for explanation.
Definition at line 33 of file mitkMoveSurfaceInteractor.h.
typedef itk::SmartPointer<const Self> mitk::MoveSurfaceInteractor::ConstPointer |
Reimplemented from mitk::Interactor.
Definition at line 36 of file mitkMoveSurfaceInteractor.h.
typedef itk::SmartPointer<Self> mitk::MoveSurfaceInteractor::Pointer |
Reimplemented from mitk::Interactor.
Definition at line 36 of file mitkMoveSurfaceInteractor.h.
Reimplemented from mitk::Interactor.
Definition at line 36 of file mitkMoveSurfaceInteractor.h.
Reimplemented from mitk::Interactor.
Definition at line 36 of file mitkMoveSurfaceInteractor.h.
mitk::MoveSurfaceInteractor::MoveSurfaceInteractor | ( | const char * | type, |
DataNode * | dataNode | ||
) | [protected] |
check how good an event can be handled
Gets called when mitk::DataNode::SetData() is called
No need to use it here, because the pattern won't be complex and we can take care of unexpected data change Constructor
Definition at line 32 of file mitkMoveSurfaceInteractor.cpp.
:Interactor(type, dataNode) { }
mitk::MoveSurfaceInteractor::~MoveSurfaceInteractor | ( | ) | [protected, virtual] |
Default Destructor.
Definition at line 37 of file mitkMoveSurfaceInteractor.cpp.
{ }
bool mitk::MoveSurfaceInteractor::ExecuteAction | ( | Action * | action, |
mitk::StateEvent const * | stateEvent | ||
) | [protected, virtual] |
Convert the given Actions to Operations and send to data and UndoController.
Reimplemented from mitk::StateMachine.
Definition at line 42 of file mitkMoveSurfaceInteractor.cpp.
References mitk::AcCHECKELEMENT, mitk::AcDESELECT, mitk::AcDONOTHING, mitk::AcMOVE, mitk::AcSELECT, mitk::EIDNO, mitk::EIDYES, mitk::Action::GetActionId(), mitk::StateEvent::GetEvent(), mitk::TimeSlicedGeometry::GetGeometry3D(), mitk::RenderingManager::GetInstance(), mitk::Action::GetProperty(), mitk::BaseData::GetUpdatedTimeSlicedGeometry(), mitk::GenericProperty< T >::GetValue(), mitk::DisplayPositionEvent::GetWorldPosition(), mitk::Geometry3D::IsInside(), MITK_WARN, mitk::ColorProperty::New(), mitk::BoolProperty::New(), mitk::RenderingManager::RequestUpdateAll(), and mitk::Geometry3D::Translate().
{ bool ok = false; /*Each case must watch the type of the event!*/ switch (action->GetActionId()) { case AcDONOTHING: ok = true; break; case AcCHECKELEMENT: /* * picking: Answer the question if the given position within stateEvent is close enough to select an object * send yes if close enough and no if not picked */ { mitk::DisplayPositionEvent const *posEvent = dynamic_cast <const mitk::DisplayPositionEvent *> (stateEvent->GetEvent()); if (posEvent == NULL) { MITK_WARN<<"Wrong usage of mitkMoveSurfaceInteractor! Aborting interaction!\n"; return false; } mitk::Point3D worldPoint = posEvent->GetWorldPosition(); /* now we have a worldpoint. check if it is inside our object and select/deselect it accordingly */ mitk::StateEvent* newStateEvent = NULL; const Geometry3D* geometry = GetData()->GetUpdatedTimeSlicedGeometry()->GetGeometry3D( m_TimeStep ); if (geometry->IsInside(worldPoint)) newStateEvent = new mitk::StateEvent(EIDYES, stateEvent->GetEvent()); else newStateEvent = new mitk::StateEvent(EIDNO, stateEvent->GetEvent()); /* write new state (selected/not selected) to the property */ this->HandleEvent( newStateEvent ); ok = true; break; } case AcSELECT: // select the data { mitk::BoolProperty::Pointer selected = dynamic_cast<mitk::BoolProperty*>(m_DataNode->GetProperty("selected")); if ( selected.IsNull() ) { selected = mitk::BoolProperty::New(); m_DataNode->GetPropertyList()->SetProperty("selected", selected); } mitk::ColorProperty::Pointer color = dynamic_cast<mitk::ColorProperty*>(m_DataNode->GetProperty("color")); if ( color.IsNull() ) { color = mitk::ColorProperty::New(); m_DataNode->GetPropertyList()->SetProperty("color", color); } selected->SetValue(true); color->SetColor(1.0, 1.0, 0.0); //update rendering mitk::RenderingManager::GetInstance()->RequestUpdateAll(); ok = true; break; } case AcDESELECT: //deselect the data { mitk::BoolProperty::Pointer selected = dynamic_cast<mitk::BoolProperty*>(m_DataNode->GetProperty("selected")); if ( selected.IsNull() ) { selected = mitk::BoolProperty::New(); m_DataNode->GetPropertyList()->SetProperty("selected", selected); } mitk::ColorProperty::Pointer color = dynamic_cast<mitk::ColorProperty*>(m_DataNode->GetProperty("color")); if ( color.IsNull() ) { color = mitk::ColorProperty::New(); m_DataNode->GetPropertyList()->SetProperty("color", color); } selected = mitk::BoolProperty::New(false); color->SetColor(0.0, 0.0, 1.0); //update rendering mitk::RenderingManager::GetInstance()->RequestUpdateAll(); ok = true; break; } case AcMOVE: { //modify Geometry from data as given in parameters or in event mitk::IntProperty* xP = dynamic_cast<mitk::IntProperty*>(action->GetProperty("DIRECTION_X")); mitk::IntProperty* yP = dynamic_cast<mitk::IntProperty*>(action->GetProperty("DIRECTION_Y")); mitk::IntProperty* zP = dynamic_cast<mitk::IntProperty*>(action->GetProperty("DIRECTION_Z")); if (xP == NULL || yP == NULL || zP == NULL) { MITK_WARN<<"No properties returned\n!"; return false; } mitk::Vector3D movementVector; movementVector.SetElement(0, (float) xP->GetValue()); movementVector.SetElement(1, (float) yP->GetValue()); movementVector.SetElement(2, (float) zP->GetValue()); //checking corresponding Data; has to be a surface or a subclass mitk::Surface* surface = dynamic_cast<mitk::Surface*>(m_DataNode->GetData()); if ( surface == NULL ) { MITK_WARN<<"MoveSurfaceInteractor got wrong type of data! Aborting interaction!\n"; return false; } Geometry3D* geometry = surface->GetUpdatedTimeSlicedGeometry()->GetGeometry3D( m_TimeStep ); geometry->Translate(movementVector); // indicate modification of data tree node m_DataNode->Modified(); //update rendering mitk::RenderingManager::GetInstance()->RequestUpdateAll(); ok = true; break; } default: return Superclass::ExecuteAction( action, stateEvent ); } return ok; }
virtual const char* mitk::MoveSurfaceInteractor::GetClassName | ( | ) | const [virtual] |
Reimplemented from mitk::Interactor.
static Pointer mitk::MoveSurfaceInteractor::New | ( | const char * | _arga, |
DataNode * | _argb | ||
) | [inline, static] |
NewMacro with two parameters for calling itk::Lightobject::New(..) method.
Reimplemented from mitk::Interactor.
Definition at line 37 of file mitkMoveSurfaceInteractor.h.
Referenced by main().