Medical Imaging Interaction Toolkit  2018.4.99-ef453c4b
Medical Imaging Interaction Toolkit
mitkPlanarFigureMapper2D.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 MITK_PLANAR_FIGURE_MAPPER_2D_H_
14 #define MITK_PLANAR_FIGURE_MAPPER_2D_H_
15 
16 #include "mitkCommon.h"
17 #include "mitkMapper.h"
18 #include "mitkPlanarFigure.h"
21 #include "vtkNew.h"
22 #include "vtkPen.h"
23 
24 class vtkContext2D;
25 
26 namespace mitk
27 {
28  class BaseRenderer;
29  class Contour;
30 
109  {
110  public:
112 
113  itkFactorylessNewMacro(Self);
114 
115  itkCloneMacro(Self);
116 
120  void MitkRender(mitk::BaseRenderer *renderer, mitk::VtkPropRenderer::RenderType type) override;
121 
122  static void SetDefaultProperties(mitk::DataNode *node, mitk::BaseRenderer *renderer = nullptr, bool overwrite = false);
123 
127  void ApplyColorAndOpacityProperties(mitk::BaseRenderer *renderer, vtkActor *actor = nullptr) override;
128 
129  protected:
131  {
132  PF_DEFAULT = 0,
133  PF_HOVER = 1,
134  PF_SELECTED = 2,
135 
136  PF_COUNT = 3 // helper variable
137  };
138 
140 
141  ~PlanarFigureMapper2D() override;
142 
154  void RenderLines(const PlanarFigureDisplayMode lineDisplayMode,
155  mitk::PlanarFigure *planarFigure,
156  mitk::Point2D &anchorPoint,
157  const mitk::PlaneGeometry *planarFigurePlaneGeometry,
158  const mitk::PlaneGeometry *rendererPlaneGeometry,
159  const mitk::BaseRenderer *renderer);
160 
164  void RenderQuantities(const mitk::PlanarFigure *planarFigure,
165  mitk::BaseRenderer *renderer,
166  const mitk::Point2D anchorPoint,
167  double &annotationOffset,
168  float globalOpacity,
169  const PlanarFigureDisplayMode lineDisplayMode);
170 
174  void RenderAnnotations(mitk::BaseRenderer *renderer,
175  const std::string name,
176  const mitk::Point2D anchorPoint,
177  float globalOpacity,
178  const PlanarFigureDisplayMode lineDisplayMode,
179  double &annotationOffset);
180 
184  void RenderControlPoints(const mitk::PlanarFigure *planarFigure,
185  const PlanarFigureDisplayMode lineDisplayMode,
186  const mitk::PlaneGeometry *planarFigurePlaneGeometry,
187  const mitk::PlaneGeometry *rendererPlaneGeometry,
188  mitk::BaseRenderer *renderer);
189 
190  void TransformObjectToDisplay(const mitk::Point2D &point2D,
191  mitk::Point2D &displayPoint,
192  const mitk::PlaneGeometry *objectGeometry,
193  const mitk::PlaneGeometry *,
194  const mitk::BaseRenderer *renderer);
195 
196  void DrawMarker(const mitk::Point2D &point,
197  float *lineColor,
198  float lineOpacity,
199  float *markerColor,
200  float markerOpacity,
201  float lineWidth,
203  const mitk::PlaneGeometry *objectGeometry,
204  const mitk::PlaneGeometry *rendererGeometry,
205  const mitk::BaseRenderer *renderer);
206 
210  void PaintPolyLine(const mitk::PlanarFigure::PolyLineType vertices,
211  bool closed,
212  Point2D &anchorPoint,
213  const PlaneGeometry *planarFigurePlaneGeometry,
214  const PlaneGeometry *rendererPlaneGeometry,
215  const mitk::BaseRenderer *renderer);
216 
221  void DrawMainLines(mitk::PlanarFigure *figure,
222  Point2D &anchorPoint,
223  const PlaneGeometry *planarFigurePlaneGeometry,
224  const PlaneGeometry *rendererPlaneGeometry,
225  const mitk::BaseRenderer *renderer);
226 
231  void DrawHelperLines(mitk::PlanarFigure *figure,
232  Point2D &anchorPoint,
233  const PlaneGeometry *planarFigurePlaneGeometry,
234  const PlaneGeometry *rendererPlaneGeometry,
235  const mitk::BaseRenderer *renderer);
236 
237  void InitializeDefaultPlanarFigureProperties();
238 
239  void InitializePlanarFigurePropertiesFromDataNode(const mitk::DataNode *node);
240 
241  void SetColorProperty(float property[3][3], PlanarFigureDisplayMode mode, float red, float green, float blue)
242  {
243  property[mode][0] = red;
244  property[mode][1] = green;
245  property[mode][2] = blue;
246  }
247 
248  void SetFloatProperty(float *property, PlanarFigureDisplayMode mode, float value) { property[mode] = value; }
256  void OnNodeModified();
257 
258  void Initialize(mitk::BaseRenderer *renderer);
259 
260  private:
261 
262  bool m_IsSelected;
263  bool m_IsHovering;
264  bool m_DrawOutline;
265  bool m_DrawQuantities;
266  bool m_DrawShadow;
267  bool m_DrawControlPoints;
268  bool m_DrawName;
269  bool m_DrawDashed;
270  bool m_DrawHelperDashed;
271  bool m_AnnotationsShadow;
272 
273  std::string m_AnnotationFontFamily;
274  bool m_DrawAnnotationBold;
275  bool m_DrawAnnotationItalic;
276  int m_AnnotationSize;
277 
278  // the width of the shadow is defined as 'm_LineWidth * m_ShadowWidthFactor'
279  float m_LineWidth;
280  float m_ShadowWidthFactor;
281  float m_OutlineWidth;
282  float m_HelperlineWidth;
283  // float m_PointWidth;
284 
285  float m_DevicePixelRatio;
286 
288 
289  float m_LineColor[3][3];
290  float m_LineOpacity[3];
291  float m_OutlineColor[3][3];
292  float m_OutlineOpacity[3];
293  float m_HelperlineColor[3][3];
294  float m_HelperlineOpacity[3];
295  float m_MarkerlineColor[3][3];
296  float m_MarkerlineOpacity[3];
297  float m_MarkerColor[3][3];
298  float m_MarkerOpacity[3];
299  float m_AnnotationColor[3][3];
300 
301  // Bool flag that represents whether or not the DataNode has been modified.
302  bool m_NodeModified;
303 
304  // Observer-tag for listening to itk::ModifiedEvents on the DataNode
305  unsigned long m_NodeModifiedObserverTag;
306 
307  // Bool flag that indicates if a node modified observer was added
308  bool m_NodeModifiedObserverAdded;
309 
310  bool m_Initialized;
311 
312  vtkNew<vtkContext2D> m_Context;
313  vtkSmartPointer<vtkPen> m_Pen;
314  };
315 
316 } // namespace mitk
317 
318 #endif /* MITK_PLANAR_FIGURE_MAPPER_2D_H_ */
Organizes the rendering process.
DataCollection - Class to facilitate loading/accessing structured data.
Base class of all mappers, Vtk as well as OpenGL mappers.
Definition: mitkMapper.h:49
#define mitkClassMacro(className, SuperClassName)
Definition: mitkCommon.h:40
#define MITKPLANARFIGURE_EXPORT
Base-class for geometric planar (2D) figures, such as lines, circles, rectangles, polygons...
std::vector< PolyLineElement > PolyLineType
void SetFloatProperty(float *property, PlanarFigureDisplayMode mode, float value)
Describes a two-dimensional, rectangular plane.
OpenGL-based mapper to render display sub-class instances of mitk::PlanarFigure.
Class for nodes of the DataTree.
Definition: mitkDataNode.h:57
void SetColorProperty(float property[3][3], PlanarFigureDisplayMode mode, float red, float green, float blue)