Medical Imaging Interaction Toolkit  2024.12.99-9aeb4d27
Medical Imaging Interaction Toolkit
mitkPlanarFigureInteractor.h
Go to the documentation of this file.
1 /*============================================================================
2 
3 The Medical Imaging Interaction Toolkit (MITK)
4 
5 Copyright (c) German Cancer Research Center (DKFZ)
6 All rights reserved.
7 
8 Use of this source code is governed by a 3-clause BSD license that can be
9 found in the LICENSE file.
10 
11 ============================================================================*/
12 
13 #ifndef mitkPlanarFigureInteractor_h
14 #define mitkPlanarFigureInteractor_h
15 
17 
18 #include "mitkCommon.h"
19 #include "mitkDataInteractor.h"
20 #include "mitkNumericTypes.h"
21 
22 #pragma GCC visibility push(default)
23 #include <itkEventObject.h>
24 #pragma GCC visibility pop
25 
26 namespace mitk
27 {
28  class DataNode;
29  class PlaneGeometry;
30  class PlanarFigure;
31  class PositionEvent;
32  class BaseRenderer;
33  class InteractionPositionEvent;
34  class StateMachineAction;
35 
36 #pragma GCC visibility push(default)
37 
38  // Define events for PlanarFigure interaction notifications
39  itkEventMacroDeclaration(PlanarFigureEvent, itk::AnyEvent);
40  itkEventMacroDeclaration(StartPlacementPlanarFigureEvent, PlanarFigureEvent);
41  itkEventMacroDeclaration(EndPlacementPlanarFigureEvent, PlanarFigureEvent);
42  itkEventMacroDeclaration(SelectPlanarFigureEvent, PlanarFigureEvent);
43  itkEventMacroDeclaration(StartInteractionPlanarFigureEvent, PlanarFigureEvent);
44  itkEventMacroDeclaration(EndInteractionPlanarFigureEvent, PlanarFigureEvent);
45  itkEventMacroDeclaration(StartHoverPlanarFigureEvent, PlanarFigureEvent);
46  itkEventMacroDeclaration(EndHoverPlanarFigureEvent, PlanarFigureEvent);
47  itkEventMacroDeclaration(ContextMenuPlanarFigureEvent, PlanarFigureEvent);
48  itkEventMacroDeclaration(PointMovedPlanarFigureEvent, PlanarFigureEvent);
49 
50 #pragma GCC visibility pop
51 
58  {
59  public:
61  itkFactorylessNewMacro(Self);
62  itkCloneMacro(Self);
63 
65  void SetPrecision(ScalarType precision);
66 
68  void SetMinimumPointDistance(ScalarType minimumDistance);
69 
70  void EnableContinuousPointsMode();
71 
72  protected:
74  ~PlanarFigureInteractor() override;
75 
76  void ConnectActionsAndFunctions() override;
77 
79  bool CheckFigurePlaced(const InteractionEvent *interactionEvent);
80 
81  bool CheckFigureHovering(const InteractionEvent *interactionEvent);
82 
83  bool CheckControlPointHovering(const InteractionEvent *interactionEvent);
84 
85  bool CheckSelection(const InteractionEvent *interactionEvent);
86 
87  bool CheckPointValidity(const InteractionEvent *interactionEvent);
88 
89  bool CheckFigureFinished(const InteractionEvent *interactionEvent);
90 
91  bool CheckResetOnPointSelect(const InteractionEvent *interactionEvent);
92 
93  bool CheckFigureOnRenderingGeometry(const InteractionEvent *interactionEvent);
94 
95  bool CheckMinimalFigureFinished(const InteractionEvent *interactionEvent);
96 
97  bool CheckFigureIsExtendable(const InteractionEvent *interactionEvent);
98 
99  bool CheckFigureIsDeletable(const InteractionEvent *interactionEvent);
100 
101  bool CheckFigureIsEditable(const InteractionEvent *interactionEvent);
102 
103  bool CheckContinuousPointsMode(const InteractionEvent* interactionEvent);
104 
106 
107  void FinalizeFigure(StateMachineAction *, InteractionEvent *interactionEvent);
108 
109  void MoveCurrentPoint(StateMachineAction *, InteractionEvent *interactionEvent);
110 
111  void DeselectPoint(StateMachineAction *, InteractionEvent *interactionEvent);
112 
113  void AddPoint(StateMachineAction *, InteractionEvent *interactionEvent);
114 
115  void AddInitialPoint(StateMachineAction *, InteractionEvent *interactionEvent);
116 
117  void StartHovering(StateMachineAction *, InteractionEvent *interactionEvent);
118 
119  void EndHovering(StateMachineAction *, InteractionEvent *interactionEvent);
120 
121  void DeleteFigure(StateMachineAction *, InteractionEvent *interactionEvent);
122 
123  void PerformPointResetOnSelect(StateMachineAction *, InteractionEvent *interactionEvent);
124 
125  void SetPreviewPointPosition(StateMachineAction *, InteractionEvent *interactionEvent);
126 
127  void HidePreviewPoint(StateMachineAction *, InteractionEvent *interactionEvent);
128 
129  void HideControlPoints(StateMachineAction *, InteractionEvent *interactionEvent);
130 
131  void RemoveSelectedPoint(StateMachineAction *, InteractionEvent *interactionEvent);
132 
133  void RequestContextMenu(StateMachineAction *, InteractionEvent *interactionEvent);
134 
135  void SelectFigure(StateMachineAction *, InteractionEvent *interactionEvent);
136 
137  void SelectPoint(StateMachineAction *, InteractionEvent *interactionEvent);
138 
139  void EndInteraction(StateMachineAction *, InteractionEvent *interactionEvent);
140 
141  bool FilterEvents(InteractionEvent *interactionEvent, DataNode *) override;
142 
146  bool IsMousePositionAcceptableAsNewControlPoint(const mitk::InteractionPositionEvent *positionEvent,
147  const PlanarFigure *);
148 
149  bool TransformPositionEventToPoint2D(const InteractionPositionEvent *positionEvent,
150  const PlaneGeometry *planarFigureGeometry,
151  Point2D &point2D);
152 
153  bool TransformObjectToDisplay(const mitk::Point2D &point2D,
154  mitk::Point2D &displayPoint,
155  const mitk::PlaneGeometry *objectGeometry,
156  const mitk::PlaneGeometry *rendererGeometry,
157  const mitk::BaseRenderer *renderer) const;
158 
164  bool IsPointNearLine(const mitk::Point2D &point,
165  const mitk::Point2D &startPoint,
166  const mitk::Point2D &endPoint,
167  mitk::Point2D &projectedPoint) const;
168 
171  int IsPositionOverFigure(const InteractionPositionEvent *positionEvent,
172  PlanarFigure *planarFigure,
173  const PlaneGeometry *planarFigureGeometry,
174  const PlaneGeometry *rendererGeometry,
175  Point2D &pointProjectedOntoLine) const;
176 
180  int IsPositionInsideMarker(const InteractionPositionEvent *positionEvent,
181  const PlanarFigure *planarFigure,
182  const PlaneGeometry *planarFigureGeometry,
183  const PlaneGeometry *rendererGeometry,
184  const BaseRenderer *renderer) const;
185 
186  void LogPrintPlanarFigureQuantities(const PlanarFigure *planarFigure);
187 
188  void ConfigurationChanged() override;
189 
190  private:
192  ScalarType m_Precision;
193 
195  ScalarType m_MinimumPointDistance;
196 
198  bool m_IsHovering;
199 
200  bool m_ContinuousPointsMode = false;
201  };
202 }
203 
204 #endif
mitk::InteractionEvent
Definition: mitkInteractionEvent.h:26
MitkPlanarFigureExports.h
mitk::PlaneGeometry
Describes a two-dimensional, rectangular plane.
Definition: mitkPlaneGeometry.h:78
mitk::PlanarFigure
Base-class for geometric planar (2D) figures, such as lines, circles, rectangles, polygons,...
Definition: mitkPlanarFigure.h:50
MITKPLANARFIGURE_EXPORT
#define MITKPLANARFIGURE_EXPORT
Definition: MitkPlanarFigureExports.h:15
mitk
Find image slices visible on a given plane.
Definition: RenderingTests.dox:1
mitk::InteractionPositionEvent
Super class for all position events.
Definition: mitkInteractionPositionEvent.h:36
mitk::Point< ScalarType, 2 >
mitkNumericTypes.h
mitkCommon.h
mitkDataInteractor.h
mitk::PlanarFigureInteractor
Interaction with mitk::PlanarFigure objects via control-points.
Definition: mitkPlanarFigureInteractor.h:57
mitk::StateMachineAction
Represents an action, that is executed after a certain event (in statemachine-mechanism) TODO: implem...
Definition: mitkStateMachineAction.h:30
mitkClassMacro
#define mitkClassMacro(className, SuperClassName)
Definition: mitkCommon.h:36
mitk::BaseRenderer
Definition: mitkBaseRenderer.h:56
mitk::DataInteractor
Base class from with interactors that handle DataNodes are to be derived.
Definition: mitkDataInteractor.h:48
mitk::DataNode
Class for nodes of the DataTree.
Definition: mitkDataNode.h:63
mitk::itkEventMacroDeclaration
itkEventMacroDeclaration(BoundingShapeInteractionEvent, itk::AnyEvent)
mitk::ScalarType
double ScalarType
Definition: mitkNumericConstants.h:20