Medical Imaging Interaction Toolkit  2026.06.00
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 #ifdef __GNUC__
23 #pragma GCC visibility push(default)
24 #endif
25 #include <itkEventObject.h>
26 #ifdef __GNUC__
27 #pragma GCC visibility pop
28 #endif
29 
30 namespace mitk
31 {
32  class DataNode;
33  class PlaneGeometry;
34  class PlanarFigure;
35  class PositionEvent;
36  class BaseRenderer;
37  class InteractionPositionEvent;
38  class StateMachineAction;
39 
40 #ifdef __GNUC__
41 #pragma GCC visibility push(default)
42 #endif
43 
44  // Define events for PlanarFigure interaction notifications
45  itkEventMacroDeclaration(PlanarFigureEvent, itk::AnyEvent);
46  itkEventMacroDeclaration(StartPlacementPlanarFigureEvent, PlanarFigureEvent);
47  itkEventMacroDeclaration(EndPlacementPlanarFigureEvent, PlanarFigureEvent);
48  itkEventMacroDeclaration(SelectPlanarFigureEvent, PlanarFigureEvent);
49  itkEventMacroDeclaration(StartInteractionPlanarFigureEvent, PlanarFigureEvent);
50  itkEventMacroDeclaration(EndInteractionPlanarFigureEvent, PlanarFigureEvent);
51  itkEventMacroDeclaration(StartHoverPlanarFigureEvent, PlanarFigureEvent);
52  itkEventMacroDeclaration(EndHoverPlanarFigureEvent, PlanarFigureEvent);
53  itkEventMacroDeclaration(ContextMenuPlanarFigureEvent, PlanarFigureEvent);
54  itkEventMacroDeclaration(PointMovedPlanarFigureEvent, PlanarFigureEvent);
55 
56 #ifdef __GNUC__
57 #pragma GCC visibility pop
58 #endif
59 
80  {
81  public:
83  itkFactorylessNewMacro(Self);
84  itkCloneMacro(Self);
85 
94  void SetPrecision(ScalarType precision);
95 
103  void SetMinimumPointDistance(ScalarType minimumDistance);
104 
112 
113  protected:
116 
117  void ConnectActionsAndFunctions() override;
118 
120  bool CheckFigurePlaced(const InteractionEvent *interactionEvent);
121 
122  bool CheckFigureHovering(const InteractionEvent *interactionEvent);
123 
124  bool CheckControlPointHovering(const InteractionEvent *interactionEvent);
125 
126  bool CheckSelection(const InteractionEvent *interactionEvent);
127 
128  bool CheckPointValidity(const InteractionEvent *interactionEvent);
129 
130  bool CheckFigureFinished(const InteractionEvent *interactionEvent);
131 
132  bool CheckResetOnPointSelect(const InteractionEvent *interactionEvent);
133 
134  bool CheckFigureOnRenderingGeometry(const InteractionEvent *interactionEvent);
135 
136  bool CheckMinimalFigureFinished(const InteractionEvent *interactionEvent);
137 
138  bool CheckFigureIsExtendable(const InteractionEvent *interactionEvent);
139 
140  bool CheckFigureIsDeletable(const InteractionEvent *interactionEvent);
141 
142  bool CheckFigureIsEditable(const InteractionEvent *interactionEvent);
143 
144  bool CheckContinuousPointsMode(const InteractionEvent* interactionEvent);
145 
147 
149 
151 
153 
154  void AddPoint(StateMachineAction *, InteractionEvent *interactionEvent);
155 
157 
159 
160  void EndHovering(StateMachineAction *, InteractionEvent *interactionEvent);
161 
163 
165 
167 
169 
171 
173 
175 
177 
178  void SelectPoint(StateMachineAction *, InteractionEvent *interactionEvent);
179 
181 
182  bool FilterEvents(InteractionEvent *interactionEvent, DataNode *) override;
183 
188  const PlanarFigure *);
189 
191  const PlaneGeometry *planarFigureGeometry,
192  Point2D &point2D);
193 
195  mitk::Point2D &displayPoint,
196  const mitk::PlaneGeometry *objectGeometry,
197  const mitk::PlaneGeometry *rendererGeometry,
198  const mitk::BaseRenderer *renderer) const;
199 
205  bool IsPointNearLine(const mitk::Point2D &point,
206  const mitk::Point2D &startPoint,
207  const mitk::Point2D &endPoint,
208  mitk::Point2D &projectedPoint) const;
209 
213  PlanarFigure *planarFigure,
214  const PlaneGeometry *planarFigureGeometry,
215  const PlaneGeometry *rendererGeometry,
216  Point2D &pointProjectedOntoLine) const;
217 
222  const PlanarFigure *planarFigure,
223  const PlaneGeometry *planarFigureGeometry,
224  const PlaneGeometry *rendererGeometry,
225  const BaseRenderer *renderer) const;
226 
227  void LogPrintPlanarFigureQuantities(const PlanarFigure *planarFigure);
228 
229  void ConfigurationChanged() override;
230 
231  private:
233  ScalarType m_Precision;
234 
236  ScalarType m_MinimumPointDistance;
237 
239  bool m_IsHovering;
240 
241  bool m_ContinuousPointsMode = false;
242  };
243 }
244 
245 #endif
#define MITKPLANARFIGURE_EXPORT
Organizes the rendering process.
Base class for interactors that operate on DataNodes.
Central node class of the MITK data tree, associating a data object with properties and mappers.
Definition: mitkDataNode.h:72
Base class for all interaction events in MITK.
Super class for all position-aware interaction events.
Interactor for creating, editing, and manipulating PlanarFigure objects.
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 precision for picking control points and figure edges.
void EndHovering(StateMachineAction *, InteractionEvent *interactionEvent)
void EnableContinuousPointsMode()
Enables continuous points mode.
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 the geometry of a plane object.
Represents an action that is executed after a certain event in the state machine mechanism.
Convenience header that includes all MITK numeric types.
Find image slices visible on a given plane.
double ScalarType
Scalar type used throughout MITK for geometric computations.
itkEventMacroDeclaration(BoundingShapeInteractionEvent, itk::AnyEvent)