Medical Imaging Interaction Toolkit  2023.04.00
Medical Imaging Interaction Toolkit
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Modules Pages
mitkBaseRenderer.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 mitkBaseRenderer_h
14 #define mitkBaseRenderer_h
15 
16 #include <mitkDataStorage.h>
17 #include <mitkPlaneGeometry.h>
18 #include <mitkPlaneGeometryData.h>
19 #include <mitkTimeGeometry.h>
20 
21 #include <mitkCameraController.h>
24 
26 #include <mitkDispatcher.h>
27 
28 #include <vtkRenderWindow.h>
29 #include <vtkRenderer.h>
30 
31 #include <map>
32 #include <set>
33 
34 namespace mitk
35 {
36  class Mapper;
37  class BaseLocalStorageHandler;
38 
39 #pragma GCC visibility push(default)
40  itkEventMacroDeclaration(RendererResetEvent, itk::AnyEvent);
41 #pragma GCC visibility pop
42 
43  /*
44  * \brief Organizes the rendering process
45  *
46  * A BaseRenderer contains a reference to a given vtkRenderWindow
47  * and a corresponding vtkRenderer.
48  * The BaseRenderer defines which mapper should be used (2D / 3D)
49  * and which view direction should be rendered.
50  *
51  * All existing BaseRenderer are stored in a static variable
52  * that can be accessed / modified via the static functions.
53  * VtkPropRenderer is a concrete implementation of a BaseRenderer.
54  */
55  class MITKCORE_EXPORT BaseRenderer : public itk::Object
56  {
57  public:
58 
59  typedef std::map<vtkRenderWindow*, BaseRenderer*> BaseRendererMapType;
61 
66  {
67  Standard2D = 1,
68  Standard3D = 2
69  };
70 
71  static BaseRenderer* GetInstance(vtkRenderWindow* renderWindow);
72  static void AddInstance(vtkRenderWindow* renderWindow, BaseRenderer* baseRenderer);
73  static void RemoveInstance(vtkRenderWindow* renderWindow);
74 
75  static BaseRenderer* GetByName(const std::string& name);
76  static vtkRenderWindow* GetRenderWindowByName(const std::string& name);
77 
81  static BaseRendererMapType GetSpecificRenderWindows(MapperSlotId mapper);
82 
86  static BaseRendererMapType GetAll2DRenderWindows();
87 
91  static BaseRendererMapType GetAll3DRenderWindows();
92 
94 
95  BaseRenderer(const char* name = nullptr, vtkRenderWindow* renderWindow = nullptr);
96 
97  void RemoveAllLocalStorages();
98  void RegisterLocalStorageHandler(BaseLocalStorageHandler* lsh);
99  void UnregisterLocalStorageHandler(BaseLocalStorageHandler* lsh);
100 
101  virtual void SetDataStorage(DataStorage* storage);
102 
104  {
105  return m_DataStorage.GetPointer();
106  }
107 
108  vtkRenderWindow* GetRenderWindow() const
109  {
110  return m_RenderWindow;
111  }
112 
113  vtkRenderer* GetVtkRenderer() const
114  {
115  return m_VtkRenderer;
116  }
117 
121  Dispatcher::Pointer GetDispatcher() const;
122 
126  virtual void Resize(int w, int h);
127 
132  virtual void InitRenderer(vtkRenderWindow* renderwindow);
133 
137  virtual void InitSize(int w, int h);
138 
139  virtual void DrawOverlayMouse(Point2D&)
140  {
141  MITK_INFO << "BaseRenderer::DrawOverlayMouse() should be in concret implementation OpenGLRenderer." << std::endl;
142  }
143 
150  virtual void SetWorldTimeGeometry(const TimeGeometry* geometry);
151  itkGetConstObjectMacro(WorldTimeGeometry, TimeGeometry);
152 
165  virtual void SetInteractionReferenceGeometry(const TimeGeometry* geometry);
166 
170  itkGetConstObjectMacro(InteractionReferenceGeometry, TimeGeometry);
171 
177  itkGetMacro(ReferenceGeometryAligned, bool);
178 
182  itkGetConstObjectMacro(CurrentWorldGeometry, BaseGeometry);
183 
187  itkGetConstObjectMacro(CurrentWorldPlaneGeometry, PlaneGeometry);
188 
190  {
191  return false;
192  }
193 
201  virtual void SetSlice(unsigned int slice);
202 
203  itkGetConstMacro(Slice, unsigned int);
204 
212  virtual void SetTimeStep(unsigned int timeStep);
213 
214  itkGetConstMacro(TimeStep, unsigned int);
215 
222  TimeStepType GetTimeStep(const BaseData* data) const;
223 
227  ScalarType GetTime() const;
228 
234  virtual void SetGeometry(const itk::EventObject& geometrySliceEvent);
235 
241  virtual void UpdateGeometry(const itk::EventObject& geometrySliceEvent);
242 
249  virtual void SetGeometrySlice(const itk::EventObject& geometrySliceEvent);
250 
257  virtual void SetGeometryTime(const itk::EventObject& geometryTimeEvent);
258 
259  itkGetObjectMacro(CurrentWorldPlaneGeometryNode, DataNode);
260 
264  void SendUpdateSlice();
265 
269  itkGetMacro(CurrentWorldPlaneGeometryUpdateTime, unsigned long);
270 
274  itkGetMacro(TimeStepUpdateTime, unsigned long);
275 
281  virtual void PickWorldPoint(const Point2D& diplayPosition, Point3D& worldPosition) const = 0;
282 
290  virtual DataNode* PickObject(const Point2D& /*displayPosition*/, Point3D& /*worldPosition*/) const
291  {
292  return nullptr;
293  }
294 
298  itkGetMacro(MapperID, MapperSlotId);
299  itkGetConstMacro(MapperID, MapperSlotId);
300 
304  virtual void SetMapperID(MapperSlotId id);
305 
306  virtual int* GetSize() const;
307  virtual int* GetViewportSize() const;
308 
309  void SetSliceNavigationController(SliceNavigationController* SlicenavigationController);
310  itkGetObjectMacro(CameraController, CameraController);
313  itkGetMacro(EmptyWorldGeometry, bool);
314 
319  itkGetMacro(KeepDisplayedRegion, bool);
320  itkSetMacro(KeepDisplayedRegion, bool);
321 
325  const char* GetName() const
326  {
327  return m_Name.c_str();
328  }
329 
333  int GetSizeX() const
334  {
335  return this->GetSize()[0];
336  }
337 
341  int GetSizeY() const
342  {
343  return this->GetSize()[1];
344  }
345 
352  const double* GetBounds() const;
353 
354  void RequestUpdate();
355  void ForceImmediateUpdate();
356 
361  unsigned int GetNumberOfVisibleLODEnabledMappers() const;
362 
367  void DisplayToWorld(const Point2D& displayPoint, Point3D& worldIndex) const;
368 
373  void DisplayToPlane(const Point2D& displayPoint, Point2D& planePointInMM) const;
374 
379  void WorldToDisplay(const Point3D& worldIndex, Point2D& displayPoint) const;
380 
385  void WorldToView(const Point3D& worldIndex, Point2D& viewPoint) const;
386 
391  void PlaneToDisplay(const Point2D& planePointInMM, Point2D& displayPoint) const;
392 
397  void PlaneToView(const Point2D& planePointInMM, Point2D& viewPoint) const;
398 
399  double GetScaleFactorMMPerDisplayUnit() const;
400 
401  Point2D GetDisplaySizeInMM() const;
402  Point2D GetViewportSizeInMM() const;
403 
404  Point2D GetOriginInMM() const;
405 
406  itkGetConstMacro(ConstrainZoomingAndPanning, bool)
407  virtual void SetConstrainZoomingAndPanning(bool constrain);
408 
409  protected:
410 
411  ~BaseRenderer() override;
412 
413  virtual void Update() = 0;
414 
415  vtkRenderWindow* m_RenderWindow;
416  vtkRenderer* m_VtkRenderer;
417 
420  unsigned long m_LastUpdateTime;
421 
425 
426  void UpdateCurrentGeometries();
427  virtual void SetCurrentWorldPlaneGeometry(const PlaneGeometry* geometry2d);
428  virtual void SetCurrentWorldGeometry(const BaseGeometry *geometry);
429 
430  private:
431 
441  TimeGeometry::ConstPointer m_WorldTimeGeometry;
442 
450  TimeGeometry::ConstPointer m_InteractionReferenceGeometry;
451 
459  BaseGeometry::ConstPointer m_CurrentWorldGeometry;
460 
468  PlaneGeometry::Pointer m_CurrentWorldPlaneGeometry;
469 
470  unsigned int m_Slice;
471  unsigned int m_TimeStep;
472 
473  itk::TimeStamp m_CurrentWorldPlaneGeometryUpdateTime;
474  itk::TimeStamp m_TimeStepUpdateTime;
475 
476  BindDispatcherInteractor* m_BindDispatcherInteractor;
477 
478  bool m_KeepDisplayedRegion;
479  bool m_ReferenceGeometryAligned;
480 
481  protected:
482 
483  void PrintSelf(std::ostream& os, itk::Indent indent) const override;
484 
488 
489  std::string m_Name;
490 
491  double m_Bounds[6];
492 
494 
495  typedef std::set<Mapper*> LODEnabledMappersType;
496 
498 
499  std::list<BaseLocalStorageHandler*> m_RegisteredLocalStorageHandlers;
500 
502  };
503 } // namespace mitk
504 
505 #endif
mitk::BaseRenderer::GetSizeY
int GetSizeY() const
Return the size in y-direction of the base renderer.
Definition: mitkBaseRenderer.h:341
mitk::BaseRenderer::m_CameraRotationController
CameraRotationController::Pointer m_CameraRotationController
Definition: mitkBaseRenderer.h:423
mitkDispatcher.h
mitk::TimeGeometry
Definition: mitkTimeGeometry.h:43
mitk::BaseRenderer::BaseRendererMapType
std::map< vtkRenderWindow *, BaseRenderer * > BaseRendererMapType
Definition: mitkBaseRenderer.h:59
mitk::BaseRenderer::SetWorldGeometryToDataStorageBounds
virtual bool SetWorldGeometryToDataStorageBounds()
Definition: mitkBaseRenderer.h:189
mitk::BaseRenderer::m_VtkRenderer
vtkRenderer * m_VtkRenderer
Definition: mitkBaseRenderer.h:416
mitk::PlaneGeometry
Describes a two-dimensional, rectangular plane.
Definition: mitkPlaneGeometry.h:78
MITK_INFO
#define MITK_INFO
Definition: mitkLogMacros.h:18
mitkDataStorage.h
mitkPlaneGeometryData.h
mitk::BaseRenderer::LODEnabledMappersType
std::set< Mapper * > LODEnabledMappersType
Definition: mitkBaseRenderer.h:495
mitk::BaseRenderer::m_CameraController
CameraController::Pointer m_CameraController
Definition: mitkBaseRenderer.h:422
mitk::BaseRenderer::GetSizeX
int GetSizeX() const
Return the size in x-direction of the base renderer.
Definition: mitkBaseRenderer.h:333
mitk::BaseRenderer::GetRenderWindow
vtkRenderWindow * GetRenderWindow() const
Definition: mitkBaseRenderer.h:108
mitk::BaseRenderer::m_RenderWindow
vtkRenderWindow * m_RenderWindow
Definition: mitkBaseRenderer.h:415
itk::SmartPointer< Self >
mitkTimeGeometry.h
mitk::BaseRenderer::m_CurrentWorldPlaneGeometryData
PlaneGeometryData::Pointer m_CurrentWorldPlaneGeometryData
Definition: mitkBaseRenderer.h:485
mitkClassMacroItkParent
#define mitkClassMacroItkParent(className, SuperClassName)
Definition: mitkCommon.h:45
mitk::BaseRenderer::m_LastUpdateTime
unsigned long m_LastUpdateTime
Definition: mitkBaseRenderer.h:420
mitk::SliceNavigationController
Controls the selection of the slice the associated BaseRenderer will display.
Definition: mitkSliceNavigationController.h:132
mitk
DataCollection - Class to facilitate loading/accessing structured data.
Definition: RenderingTests.dox:1
mitkCameraController.h
mitk::BaseRenderer::StandardMapperSlot
StandardMapperSlot
Defines which kind of mapper (e.g. 2D or 3D) should be used.
Definition: mitkBaseRenderer.h:65
mitk::BaseLocalStorageHandler
Interface for accessing (templated) LocalStorageHandler instances.
Definition: mitkLocalStorageHandler.h:32
mitk::BaseRenderer::m_CurrentWorldPlaneGeometryNode
DataNode::Pointer m_CurrentWorldPlaneGeometryNode
Definition: mitkBaseRenderer.h:486
mitk::BaseRenderer::GetName
const char * GetName() const
Return the name of the base renderer.
Definition: mitkBaseRenderer.h:325
mitkCameraRotationController.h
mitk::BaseGeometry
BaseGeometry Describes the geometry of a data object.
Definition: mitkBaseGeometry.h:94
mitk::BaseRenderer::m_DataStorage
DataStorage::Pointer m_DataStorage
Definition: mitkBaseRenderer.h:419
mitk::BaseRenderer::GetVtkRenderer
vtkRenderer * GetVtkRenderer() const
Definition: mitkBaseRenderer.h:113
mitk::BaseRenderer::baseRendererMap
static BaseRendererMapType baseRendererMap
Definition: mitkBaseRenderer.h:60
mitk::Point< ScalarType, 2 >
mitk::BindDispatcherInteractor
This Class is used to connect a DataStorage with the Dispatcher.
Definition: mitkBindDispatcherInteractor.h:35
mitk::BaseData
Base of all data objects.
Definition: mitkBaseData.h:42
mitkBindDispatcherInteractor.h
mitk::BaseRenderer::m_ConstrainZoomingAndPanning
bool m_ConstrainZoomingAndPanning
Definition: mitkBaseRenderer.h:501
mitk::BaseRenderer::GetDataStorage
virtual DataStorage::Pointer GetDataStorage() const
Definition: mitkBaseRenderer.h:103
mitk::DataStorage
Data management class that handles 'was created by' relations.
Definition: mitkDataStorage.h:43
mitk::BaseRenderer::m_SliceNavigationController
SliceNavigationController::Pointer m_SliceNavigationController
Definition: mitkBaseRenderer.h:424
mitk::BaseRenderer::PickObject
virtual DataNode * PickObject(const Point2D &, Point3D &) const
Determines the object (mitk::DataNode) closest to the current position by means of picking.
Definition: mitkBaseRenderer.h:290
mitk::CameraRotationController
Definition: mitkCameraRotationController.h:24
mitk::TimeStepType
std::size_t TimeStepType
Definition: mitkTimeGeometry.h:27
mitk::CameraController
controls the camera used by the associated BaseRenderer
Definition: mitkCameraController.h:29
mitkSliceNavigationController.h
mitk::BaseRenderer::DrawOverlayMouse
virtual void DrawOverlayMouse(Point2D &)
Definition: mitkBaseRenderer.h:139
mitk::BaseRenderer
Definition: mitkBaseRenderer.h:55
MapperSlotId
unsigned int MapperSlotId
Definition: mitkCommon.h:29
mitk::BaseRenderer::m_NumberOfVisibleLODEnabledMappers
unsigned int m_NumberOfVisibleLODEnabledMappers
Definition: mitkBaseRenderer.h:497
mitk::BaseRenderer::m_MapperID
MapperSlotId m_MapperID
Definition: mitkBaseRenderer.h:418
mitk::BaseRenderer::m_EmptyWorldGeometry
bool m_EmptyWorldGeometry
Definition: mitkBaseRenderer.h:493
MITKCORE_EXPORT
#define MITKCORE_EXPORT
Definition: MitkCoreExports.h:15
mitk::DataNode
Class for nodes of the DataTree.
Definition: mitkDataNode.h:63
mitk::BaseRenderer::m_RegisteredLocalStorageHandlers
std::list< BaseLocalStorageHandler * > m_RegisteredLocalStorageHandlers
Definition: mitkBaseRenderer.h:499
mitk::BaseRenderer::m_Name
std::string m_Name
Definition: mitkBaseRenderer.h:489
mitk::BaseRenderer::m_CurrentWorldPlaneGeometryTransformTime
unsigned long m_CurrentWorldPlaneGeometryTransformTime
Definition: mitkBaseRenderer.h:487
mitk::itkEventMacroDeclaration
itkEventMacroDeclaration(BoundingShapeInteractionEvent, itk::AnyEvent)
mitk::ScalarType
double ScalarType
Definition: mitkNumericConstants.h:20
mitkPlaneGeometry.h