Medical Imaging Interaction Toolkit  2025.12.02
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 
71 
72  protected:
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 
108 
110 
112 
113  void AddPoint(StateMachineAction *, InteractionEvent *interactionEvent);
114 
116 
118 
119  void EndHovering(StateMachineAction *, InteractionEvent *interactionEvent);
120 
122 
124 
126 
128 
130 
132 
134 
136 
137  void SelectPoint(StateMachineAction *, InteractionEvent *interactionEvent);
138 
140 
141  bool FilterEvents(InteractionEvent *interactionEvent, DataNode *) override;
142 
147  const PlanarFigure *);
148 
150  const PlaneGeometry *planarFigureGeometry,
151  Point2D &point2D);
152 
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 
172  PlanarFigure *planarFigure,
173  const PlaneGeometry *planarFigureGeometry,
174  const PlaneGeometry *rendererGeometry,
175  Point2D &pointProjectedOntoLine) const;
176 
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
#define MITKPLANARFIGURE_EXPORT
Base class from with interactors that handle DataNodes are to be derived.
Class for nodes of the DataTree.
Definition: mitkDataNode.h:64
Super class for all position events.
Interaction with mitk::PlanarFigure objects via control-points.
void SelectFigure(StateMachineAction *, InteractionEvent *interactionEvent)
bool CheckFigureIsEditable(const InteractionEvent *interactionEvent)
void SetMinimumPointDistance(ScalarType minimumDistance)
Sets the minimal distance between two control points.
void EndInteraction(StateMachineAction *, InteractionEvent *interactionEvent)
int IsPositionInsideMarker(const InteractionPositionEvent *positionEvent, const PlanarFigure *planarFigure, const PlaneGeometry *planarFigureGeometry, const PlaneGeometry *rendererGeometry, const BaseRenderer *renderer) const
Returns the index of the marker (control point) over which the point contained in the passed event (i...
bool CheckResetOnPointSelect(const InteractionEvent *interactionEvent)
void DeleteFigure(StateMachineAction *, InteractionEvent *interactionEvent)
void FinalizeFigure(StateMachineAction *, InteractionEvent *interactionEvent)
void RequestContextMenu(StateMachineAction *, InteractionEvent *interactionEvent)
bool TransformObjectToDisplay(const mitk::Point2D &point2D, mitk::Point2D &displayPoint, const mitk::PlaneGeometry *objectGeometry, const mitk::PlaneGeometry *rendererGeometry, const mitk::BaseRenderer *renderer) const
void MoveCurrentPoint(StateMachineAction *, InteractionEvent *interactionEvent)
void HideControlPoints(StateMachineAction *, InteractionEvent *interactionEvent)
bool TransformPositionEventToPoint2D(const InteractionPositionEvent *positionEvent, const PlaneGeometry *planarFigureGeometry, Point2D &point2D)
void HidePreviewPoint(StateMachineAction *, InteractionEvent *interactionEvent)
void ConnectActionsAndFunctions() override
Overwrite this function to connect actions from StateMachine description with functions.
void AddInitialPoint(StateMachineAction *, InteractionEvent *interactionEvent)
bool CheckContinuousPointsMode(const InteractionEvent *interactionEvent)
bool IsMousePositionAcceptableAsNewControlPoint(const mitk::InteractionPositionEvent *positionEvent, const PlanarFigure *)
Used when clicking to determine if a point is too close to the previous point.
bool CheckMinimalFigureFinished(const InteractionEvent *interactionEvent)
void ConfigurationChanged() override
bool CheckControlPointHovering(const InteractionEvent *interactionEvent)
void SelectPoint(StateMachineAction *, InteractionEvent *interactionEvent)
bool CheckFigurePlaced(const InteractionEvent *interactionEvent)
bool CheckFigureOnRenderingGeometry(const InteractionEvent *interactionEvent)
mitkClassMacro(PlanarFigureInteractor, DataInteractor)
void RemoveSelectedPoint(StateMachineAction *, InteractionEvent *interactionEvent)
void SetPreviewPointPosition(StateMachineAction *, InteractionEvent *interactionEvent)
void AddPoint(StateMachineAction *, InteractionEvent *interactionEvent)
bool CheckPointValidity(const InteractionEvent *interactionEvent)
bool FilterEvents(InteractionEvent *interactionEvent, DataNode *) override
void StartHovering(StateMachineAction *, InteractionEvent *interactionEvent)
bool IsPointNearLine(const mitk::Point2D &point, const mitk::Point2D &startPoint, const mitk::Point2D &endPoint, mitk::Point2D &projectedPoint) const
Returns true if the first specified point is in proximity of the line defined the other two point; fa...
void DeselectPoint(StateMachineAction *, InteractionEvent *interactionEvent)
void SetPrecision(ScalarType precision)
Sets the amount of precision.
void EndHovering(StateMachineAction *, InteractionEvent *interactionEvent)
bool CheckFigureHovering(const InteractionEvent *interactionEvent)
bool CheckFigureIsDeletable(const InteractionEvent *interactionEvent)
bool CheckFigureFinished(const InteractionEvent *interactionEvent)
int IsPositionOverFigure(const InteractionPositionEvent *positionEvent, PlanarFigure *planarFigure, const PlaneGeometry *planarFigureGeometry, const PlaneGeometry *rendererGeometry, Point2D &pointProjectedOntoLine) const
Returns true if the point contained in the passed event (in display coordinates) is over the planar f...
bool CheckFigureIsExtendable(const InteractionEvent *interactionEvent)
void LogPrintPlanarFigureQuantities(const PlanarFigure *planarFigure)
void PerformPointResetOnSelect(StateMachineAction *, InteractionEvent *interactionEvent)
bool CheckSelection(const InteractionEvent *interactionEvent)
Base-class for geometric planar (2D) figures, such as lines, circles, rectangles, polygons,...
Describes a two-dimensional, rectangular plane.
Represents an action, that is executed after a certain event (in statemachine-mechanism) TODO: implem...
Find image slices visible on a given plane.
double ScalarType
itkEventMacroDeclaration(BoundingShapeInteractionEvent, itk::AnyEvent)