13 #ifndef SLICENAVIGATIONCONTROLLER_H_HEADER_INCLUDED_C1C55A2F 14 #define SLICENAVIGATIONCONTROLLER_H_HEADER_INCLUDED_C1C55A2F 21 #pragma GCC visibility push(default) 22 #include <itkEventObject.h> 23 #pragma GCC visibility pop 26 #include <itkCommand.h> 33 #define mitkTimeSlicedGeometryEventMacro(classname, super) \ 34 class MITKCORE_EXPORT DEPRECATED(classname) : public super \ 37 typedef classname Self; \ 38 typedef super Superclass; \ 39 classname(TimeGeometry *aTimeGeometry, unsigned int aPos) : Superclass(aTimeGeometry, aPos) {} \ 40 virtual ~classname() {} \ 41 virtual const char *GetEventName() const { return #classname; } \ 42 virtual bool CheckEvent(const ::itk::EventObject *e) const { return dynamic_cast<const Self *>(e); } \ 43 virtual ::itk::EventObject *MakeObject() const { return new Self(GetTimeGeometry(), GetPos()); } \ 45 void operator=(const Self &); \ 48 #define mitkTimeGeometryEventMacro(classname, super) \ 49 class MITKCORE_EXPORT classname : public super \ 52 typedef classname Self; \ 53 typedef super Superclass; \ 54 classname(TimeGeometry *aTimeGeometry, unsigned int aPos) : Superclass(aTimeGeometry, aPos) {} \ 55 virtual ~classname() {} \ 56 virtual const char *GetEventName() const { return #classname; } \ 57 virtual bool CheckEvent(const ::itk::EventObject *e) const { return dynamic_cast<const Self *>(e); } \ 58 virtual ::itk::EventObject *MakeObject() const { return new Self(GetTimeGeometry(), GetPos()); } \ 60 void operator=(const Self &); \ 227 const char *GetViewDirectionAsString()
const;
229 virtual void SetViewDirectionToDefault();
243 virtual void Update(
ViewDirection viewDirection,
bool top =
true,
bool frontside =
true,
bool rotated =
false);
251 virtual void SendCreatedWorldGeometry();
257 virtual void SendCreatedWorldGeometryUpdate();
265 virtual void SendSlice();
273 virtual void SendTime();
275 #pragma GCC visibility push(default) 277 #pragma GCC visibility pop 287 const char *
GetEventName()
const override {
return "TimeGeometryEvent"; }
288 bool CheckEvent(const ::itk::EventObject *e)
const override {
return dynamic_cast<const Self *
>(e); }
289 ::itk::EventObject *
MakeObject()
const override {
return new Self(m_TimeGeometry, m_Pos); }
291 unsigned int GetPos()
const {
return m_Pos; }
296 void operator=(
const Self &);
310 template <
typename T>
313 typedef typename itk::ReceptorMemberCommand<T>::Pointer ReceptorMemberCommandPointer;
314 ReceptorMemberCommandPointer eventReceptorCommand = itk::ReceptorMemberCommand<T>::New();
315 eventReceptorCommand->SetCallbackFunction(receiver, &T::SetGeometry);
316 unsigned long tag = AddObserver(
GeometrySendEvent(
nullptr, 0), eventReceptorCommand);
317 m_ReceiverToObserverTagsMap[
static_cast<void *
>(receiver)].push_back(tag);
320 template <
typename T>
323 typedef typename itk::ReceptorMemberCommand<T>::Pointer ReceptorMemberCommandPointer;
324 ReceptorMemberCommandPointer eventReceptorCommand = itk::ReceptorMemberCommand<T>::New();
325 eventReceptorCommand->SetCallbackFunction(receiver, &T::UpdateGeometry);
327 m_ReceiverToObserverTagsMap[
static_cast<void *
>(receiver)].push_back(tag);
330 template <
typename T>
333 typedef typename itk::ReceptorMemberCommand<T>::Pointer ReceptorMemberCommandPointer;
334 ReceptorMemberCommandPointer eventReceptorCommand = itk::ReceptorMemberCommand<T>::New();
335 eventReceptorCommand->SetCallbackFunction(receiver, &T::SetGeometrySlice);
336 unsigned long tag = AddObserver(
GeometrySliceEvent(
nullptr, 0), eventReceptorCommand);
337 m_ReceiverToObserverTagsMap[
static_cast<void *
>(receiver)].push_back(tag);
338 if (connectSendEvent)
339 ConnectGeometrySendEvent(receiver);
342 template <
typename T>
345 typedef typename itk::ReceptorMemberCommand<T>::Pointer ReceptorMemberCommandPointer;
346 ReceptorMemberCommandPointer eventReceptorCommand = itk::ReceptorMemberCommand<T>::New();
347 eventReceptorCommand->SetCallbackFunction(receiver, &T::SetGeometryTime);
348 unsigned long tag = AddObserver(
GeometryTimeEvent(
nullptr, 0), eventReceptorCommand);
349 m_ReceiverToObserverTagsMap[
static_cast<void *
>(receiver)].push_back(tag);
350 if (connectSendEvent)
351 ConnectGeometrySendEvent(receiver);
354 template <
typename T>
358 ConnectGeometrySliceEvent(receiver,
false);
359 ConnectGeometryTimeEvent(receiver);
363 template <
typename T>
366 auto i = m_ReceiverToObserverTagsMap.find(static_cast<void *>(receiver));
367 if (i == m_ReceiverToObserverTagsMap.end())
369 const std::list<unsigned long> &tags = i->second;
370 for (
auto tagIter = tags.begin(); tagIter != tags.end(); ++tagIter)
372 RemoveObserver(*tagIter);
374 m_ReceiverToObserverTagsMap.erase(i);
384 virtual void SetGeometry(
const itk::EventObject &geometrySliceEvent);
390 virtual void SetGeometrySlice(
const itk::EventObject &geometrySliceEvent);
396 virtual void SetGeometryTime(
const itk::EventObject &geometryTimeEvent);
435 void ExecuteOperation(
Operation *operation)
override;
442 itkSetMacro(SliceLocked,
bool);
443 itkGetMacro(SliceLocked,
bool);
444 itkBooleanMacro(SliceLocked);
452 itkSetMacro(SliceRotationLocked,
bool);
453 itkGetMacro(SliceRotationLocked,
bool);
454 itkBooleanMacro(SliceRotationLocked);
460 void AdjustSliceStepperRange();
478 itkSetMacro(Top,
bool);
479 itkGetMacro(Top,
bool);
480 itkBooleanMacro(Top);
482 itkSetMacro(FrontSide,
bool);
483 itkGetMacro(FrontSide,
bool);
484 itkBooleanMacro(FrontSide);
486 itkSetMacro(Rotated,
bool);
487 itkGetMacro(Rotated,
bool);
488 itkBooleanMacro(Rotated);
#define mitkTimeGeometryEventMacro(classname, super)
ViewDirection m_DefaultViewDirection
void Disconnect(T *receiver)
itkEventMacro(BoundingShapeInteractionEvent, itk::AnyEvent)
Baseclass for renderer slice-/camera-control.
Base class of all Operation-classes.
mitk::TimeGeometry::Pointer m_CreatedWorldGeometry
ViewDirection m_ViewDirection
TimeGeometry * GetTimeGeometry() const
Organizes the rendering process.
static void Update(vtkPolyData *)
DataCollection - Class to facilitate loading/accessing structured data.
std::map< void *, std::list< unsigned long > > ObserverTagsMapType
TimeGeometryEvent(TimeGeometry *aTimeGeometry, unsigned int aPos)
void ConnectGeometrySliceEvent(T *receiver, bool connectSendEvent=true)
Controls the selection of the slice the associated BaseRenderer will display.
const char * GetEventName() const override
Message1< mitk::Point3D > SetCrosshairEvent
void ConnectGeometryTimeEvent(T *receiver, bool connectSendEvent=true)
void ConnectGeometrySendEvent(T *receiver)
mitk::BaseRenderer * m_Renderer
void ConnectGeometryUpdateEvent(T *receiver)
#define mitkClassMacro(className, SuperClassName)
ViewDirection
Possible view directions, Original will uses the PlaneGeometry instances in a SlicedGeometry3D provid...
bool m_SliceRotationLocked
~TimeGeometryEvent() override
::itk::EventObject * MakeObject() const override
void ConnectGeometryEvents(T *receiver)
mitk::BaseGeometry::ConstPointer m_InputWorldGeometry3D
mitk::TimeGeometry::ConstPointer m_InputWorldTimeGeometry
Describes a two-dimensional, rectangular plane.
unsigned int GetPos() const
mitk::RenderingManager::Pointer m_RenderingManager
bool CheckEvent(const ::itk::EventObject *e) const override
BaseGeometry Describes the geometry of a data object.
ObserverTagsMapType m_ReceiverToObserverTagsMap