Computer Assisted Medical Intervention Tool Kit  version 5.2
MMLMonitorDisplayFactory.h
Go to the documentation of this file.
1 /*****************************************************************************
2  * $CAMITK_LICENCE_BEGIN$
3  *
4  * CamiTK - Computer Assisted Medical Intervention ToolKit
5  * (c) 2001-2024 Univ. Grenoble Alpes, CNRS, Grenoble INP - UGA, TIMC, 38000 Grenoble, France
6  *
7  * Visit http://camitk.imag.fr for more information
8  *
9  * This file is part of CamiTK.
10  *
11  * CamiTK is free software: you can redistribute it and/or modify
12  * it under the terms of the GNU Lesser General Public License version 3
13  * only, as published by the Free Software Foundation.
14  *
15  * CamiTK is distributed in the hope that it will be useful,
16  * but WITHOUT ANY WARRANTY; without even the implied warranty of
17  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
18  * GNU Lesser General Public License version 3 for more details.
19  *
20  * You should have received a copy of the GNU Lesser General Public License
21  * version 3 along with CamiTK. If not, see <http://www.gnu.org/licenses/>.
22  *
23  * $CAMITK_LICENCE_END$
24  ****************************************************************************/
25 
26 #ifndef MMLMonitorDisplayFactory_H
27 #define MMLMonitorDisplayFactory_H
28 
29 #include <map>
30 #include <vector>
31 #include <string>
32 
33 // Monitor includes
34 #include "Monitor.h"
35 #include "MMLComponentAPI.h"
36 
37 class MMLMonitorDisplay;
38 class MMLComponent;
48 
49 public:
50 
52  static MMLMonitorDisplayFactory* getInstance();
53 
63  template<typename C>
64  bool registerClass(std::string id, Monitor::type type) {
65  if (mapObjectCreator.find(id) != mapObjectCreator.end()) {
66  return false;
67  }
68  else {
69  mapObjectCreator.insert(std::pair<std::string, CreateMonitorDisplayFunctionPointer>(id, &createTheMonitorDisplay<C>));
70  displaysByType[type].push_back(id);
71  return true;
72  }
73  }
74 
82  template<typename C>
83  bool registerClass(std::string id) {
84  if (mapObjectCreator.find(id) != mapObjectCreator.end()) {
85  return false;
86  }
87  else {
88  mapObjectCreator.insert(std::pair<std::string, CreateMonitorDisplayFunctionPointer>(id, &createTheMonitorDisplay<C>));
89  for (unsigned int i = 0; i < Monitor::typeCount; i++) {
90  displaysByType[i].push_back(id);
91  }
92 
93  return true;
94  }
95  }
96 
98  bool isRegistered(std::string id);
99 
101  MMLMonitorDisplay* createMonitorDisplay(std::string id, Monitor* monitor, MMLComponent* manager);
102 
104  unsigned int getNumberOfDisplaysByType(Monitor::type type);
105 
107  std::string getDisplayByType(Monitor::type type, const unsigned int i);
108 
109 private:
110 
111  MMLMonitorDisplayFactory() = default;
112 
113  using CreateMonitorDisplayFunctionPointer = MMLMonitorDisplay * (*)(Monitor* monitor, MMLComponent* manager);
114 
116  std::map<std::string, CreateMonitorDisplayFunctionPointer> mapObjectCreator;
117 
122  template<typename C>
123  static MMLMonitorDisplay* createTheMonitorDisplay(Monitor* monitor, MMLComponent* manager) {
124  return new C(monitor, manager);
125  }
126 
128  std::vector<std::string> displaysByType[Monitor::typeCount];
129 
131  static MMLMonitorDisplayFactory* instance;
132 };
133 
134 
135 #endif // MMLMonitorDisplayFactory_H
#define MMLCOMPONENT_API
Definition: MMLComponentAPI.h:54
This class manage an MML monitoring document ".mml".
Definition: MMLComponent.h:48
A Factory for creating MMLMonitorDiplay.
Definition: MMLMonitorDisplayFactory.h:47
bool registerClass(std::string id)
Register a class into the map for classes wich can display every types of monitors.
Definition: MMLMonitorDisplayFactory.h:83
bool registerClass(std::string id, Monitor::type type)
Register a class into the map A registered class can be created using createMonitorDisplay().
Definition: MMLMonitorDisplayFactory.h:64
Generic class for MML Monitor 3D/Graphical representation.
Definition: MMLMonitorDisplay.h:45
A monitor calculate and store followed data (ex:calculation between current position and references) ...
Definition: Monitor.h:49
type
type of the values stored (please update typeCount and doc if you update the enum) SCALAR: the monito...
Definition: Monitor.h:60
static const unsigned int typeCount
number of possible types (siez of the previous enum). Please always update if the enum is updated.
Definition: Monitor.h:67