Medical Imaging Interaction Toolkit  2023.04.00
Medical Imaging Interaction Toolkit
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