Medical Imaging Interaction Toolkit  2022.04.99-3f7a773b
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  protected:
72  ~PlanarFigureInteractor() override;
73 
74  void ConnectActionsAndFunctions() override;
75 
77  bool CheckFigurePlaced(const InteractionEvent *interactionEvent);
78 
79  bool CheckFigureHovering(const InteractionEvent *interactionEvent);
80 
81  bool CheckControlPointHovering(const InteractionEvent *interactionEvent);
82 
83  bool CheckSelection(const InteractionEvent *interactionEvent);
84 
85  bool CheckPointValidity(const InteractionEvent *interactionEvent);
86 
87  bool CheckFigureFinished(const InteractionEvent *interactionEvent);
88 
89  bool CheckResetOnPointSelect(const InteractionEvent *interactionEvent);
90 
91  bool CheckFigureOnRenderingGeometry(const InteractionEvent *interactionEvent);
92 
93  bool CheckMinimalFigureFinished(const InteractionEvent *interactionEvent);
94 
95  bool CheckFigureIsExtendable(const InteractionEvent *interactionEvent);
96 
97  bool CheckFigureIsDeletable(const InteractionEvent *interactionEvent);
98 
99  bool CheckFigureIsEditable(const InteractionEvent *interactionEvent);
100 
102 
103  void FinalizeFigure(StateMachineAction *, InteractionEvent *interactionEvent);
104 
105  void MoveCurrentPoint(StateMachineAction *, InteractionEvent *interactionEvent);
106 
107  void DeselectPoint(StateMachineAction *, InteractionEvent *interactionEvent);
108 
109  void AddPoint(StateMachineAction *, InteractionEvent *interactionEvent);
110 
111  void AddInitialPoint(StateMachineAction *, InteractionEvent *interactionEvent);
112 
113  void StartHovering(StateMachineAction *, InteractionEvent *interactionEvent);
114 
115  void EndHovering(StateMachineAction *, InteractionEvent *interactionEvent);
116 
117  void DeleteFigure(StateMachineAction *, InteractionEvent *interactionEvent);
118 
119  void PerformPointResetOnSelect(StateMachineAction *, InteractionEvent *interactionEvent);
120 
121  void SetPreviewPointPosition(StateMachineAction *, InteractionEvent *interactionEvent);
122 
123  void HidePreviewPoint(StateMachineAction *, InteractionEvent *interactionEvent);
124 
125  void HideControlPoints(StateMachineAction *, InteractionEvent *interactionEvent);
126 
127  void RemoveSelectedPoint(StateMachineAction *, InteractionEvent *interactionEvent);
128 
129  void RequestContextMenu(StateMachineAction *, InteractionEvent *interactionEvent);
130 
131  void SelectFigure(StateMachineAction *, InteractionEvent *interactionEvent);
132 
133  void SelectPoint(StateMachineAction *, InteractionEvent *interactionEvent);
134 
135  void EndInteraction(StateMachineAction *, InteractionEvent *interactionEvent);
136 
137  bool FilterEvents(InteractionEvent *interactionEvent, DataNode *) override;
138 
142  bool IsMousePositionAcceptableAsNewControlPoint(const mitk::InteractionPositionEvent *positionEvent,
143  const PlanarFigure *);
144 
145  bool TransformPositionEventToPoint2D(const InteractionPositionEvent *positionEvent,
146  const PlaneGeometry *planarFigureGeometry,
147  Point2D &point2D);
148 
149  bool TransformObjectToDisplay(const mitk::Point2D &point2D,
150  mitk::Point2D &displayPoint,
151  const mitk::PlaneGeometry *objectGeometry,
152  const mitk::PlaneGeometry *rendererGeometry,
153  const mitk::BaseRenderer *renderer) const;
154 
160  bool IsPointNearLine(const mitk::Point2D &point,
161  const mitk::Point2D &startPoint,
162  const mitk::Point2D &endPoint,
163  mitk::Point2D &projectedPoint) const;
164 
167  int IsPositionOverFigure(const InteractionPositionEvent *positionEvent,
168  PlanarFigure *planarFigure,
169  const PlaneGeometry *planarFigureGeometry,
170  const PlaneGeometry *rendererGeometry,
171  Point2D &pointProjectedOntoLine) const;
172 
176  int IsPositionInsideMarker(const InteractionPositionEvent *positionEvent,
177  const PlanarFigure *planarFigure,
178  const PlaneGeometry *planarFigureGeometry,
179  const PlaneGeometry *rendererGeometry,
180  const BaseRenderer *renderer) const;
181 
182  void LogPrintPlanarFigureQuantities(const PlanarFigure *planarFigure);
183 
184  void ConfigurationChanged() override;
185 
186  private:
188  ScalarType m_Precision;
189 
191  ScalarType m_MinimumPointDistance;
192 
194  bool m_IsHovering;
195  };
196 }
197 
198 #endif // MITKPLANARFIGUREINTERACTOR_H
Interaction with mitk::PlanarFigure objects via control-points.
Super class for all position events.
double ScalarType
Organizes the rendering process.
DataCollection - Class to facilitate loading/accessing structured data.
Base class from with interactors that handle DataNodes are to be derived.
Represents an action, that is executed after a certain event (in statemachine-mechanism) TODO: implem...
#define mitkClassMacro(className, SuperClassName)
Definition: mitkCommon.h:36
itkEventMacroDeclaration(BoundingShapeInteractionEvent, itk::AnyEvent)
#define MITKPLANARFIGURE_EXPORT
Base-class for geometric planar (2D) figures, such as lines, circles, rectangles, polygons...
Describes a two-dimensional, rectangular plane.
Class for nodes of the DataTree.
Definition: mitkDataNode.h:63