Logo ROOT  
Reference Guide
REveManager.hxx
Go to the documentation of this file.
1// @(#)root/eve7:$Id$
2// Authors: Matevz Tadel & Alja Mrak-Tadel: 2006, 2007, 2018
3
4/*************************************************************************
5 * Copyright (C) 1995-2019, Rene Brun and Fons Rademakers. *
6 * All rights reserved. *
7 * *
8 * For the licensing terms see $ROOTSYS/LICENSE. *
9 * For the list of contributors see $ROOTSYS/README/CREDITS. *
10 *************************************************************************/
11
12#ifndef ROOT7_REveManager
13#define ROOT7_REveManager
14
15#include <ROOT/REveElement.hxx>
16#include <ROOT/REveSystem.hxx>
17#include <ROOT/RLogger.hxx>
18
20
21#include "TSysEvtHandler.h"
22
23#include <thread>
24#include <mutex>
25#include <condition_variable>
26#include <memory>
27#include <queue>
28#include <unordered_map>
29
30class TMap;
31class TExMap;
32class TGeoManager;
33class TMethodCall;
34
35namespace ROOT {
36namespace Experimental {
37
38class REveSelection;
39class REveViewer;
40class REveViewerList;
41class REveScene;
42class REveSceneList;
43
44class RWebWindow;
45class REveGeomViewer;
46
47
49{
50 REveManager(const REveManager&) = delete;
52
53public:
55 public:
57 virtual ~RExceptionHandler() { Remove(); }
58
59 virtual EStatus Handle(std::exception& exc);
60 };
61
63 public:
66 };
67
68 struct Conn
69 {
71 unsigned fId{0};
73
74 Conn() = default;
75 Conn(unsigned int cId) : fId(cId) {}
76 };
77
79 {
80 public:
82
83 std::mutex fMutex{};
84 std::condition_variable fCV{};
85
87 };
88
89 class MIR
90 {
91 public:
92 MIR(const std::string& cmd, ElementId_t id, const std::string& ctype)
93 :fCmd(cmd), fId(id), fCtype(ctype){}
94
95 std::string fCmd;
97 std::string fCtype;
98 };
99
100 struct Logger {
101 class Handler : public RLogHandler {
102 public:
103 bool Emit(const RLogEntry &entry) override;
104 };
105
108 {
109 auto uptr = std::make_unique<Handler>();
110 fHandler = uptr.get();
111 RLogManager::Get().PushFront(std::move(uptr));
112 }
113
115 };
116
117protected:
118 RExceptionHandler *fExcHandler{nullptr}; //!< exception handler
119
120 TMap *fVizDB{nullptr};
123
124 TMap *fGeometries{nullptr}; // TODO: use std::map<std::string, std::unique_ptr<TGeoManager>>
125 TMap *fGeometryAliases{nullptr}; // TODO: use std::map<std::string, std::string>
126
127 REveScene *fWorld{nullptr};
128
131
137
138 // ElementId management
139 std::unordered_map<ElementId_t, REveElement*> fElementIdMap;
142 ElementId_t fMaxElementIds{std::numeric_limits<ElementId_t>::max()};
143
144 // Selection / highlight elements
148
149 std::shared_ptr<ROOT::Experimental::RWebWindow> fWebWindow;
150 std::vector<Conn> fConnList;
151 std::queue<std::shared_ptr<MIR> > fMIRqueue;
152
153 // MIR execution
154 std::thread fMIRExecThread;
156 std::unordered_map<std::string, std::shared_ptr<TMethodCall> > fMethCallMap;
157
160
161 void WindowConnect(unsigned connid);
162 void WindowData(unsigned connid, const std::string &arg);
163 void WindowDisconnect(unsigned connid);
164
165 void MIRExecThread();
166 void ExecuteMIR(std::shared_ptr<MIR> mir);
167 void PublishChanges();
168
169public:
170 REveManager(); // (Bool_t map_window=kTRUE, Option_t* opt="FI");
171 virtual ~REveManager();
172
174
177
178 REveSceneList *GetScenes() const { return fScenes; }
179 REveViewerList *GetViewers() const { return fViewers; }
180
183
184 REveScene *GetWorld() const { return fWorld; }
185
186 REveViewer *SpawnNewViewer(const char *name, const char *title = "");
187 REveScene *SpawnNewScene (const char *name, const char *title = "");
188
189 void BeginChange();
190 void EndChange();
191
192 void SceneSubscriberProcessingChanges(unsigned cinnId);
193 void SceneSubscriberWaitingResponse(unsigned cinnId);
194
195 bool ClientConnectionsFree() const;
196
197 void DisableRedraw() { printf("REveManager::DisableRedraw obsolete \n"); }
198 void EnableRedraw() { printf("REveManager::EnableRedraw obsolete \n"); }
199
200 void Redraw3D(Bool_t resetCameras = kFALSE, Bool_t dropLogicals = kFALSE)
201 {
202 printf("REveManager::Redraw3D oboslete %d %d\n",resetCameras , dropLogicals);
203 }
204 void RegisterRedraw3D();
205 void DoRedraw3D();
206 void FullRedraw3D(Bool_t resetCameras = kFALSE, Bool_t dropLogicals = kFALSE);
207
208 void ClearAllSelections();
209
212
213 void AddElement(REveElement *element, REveElement *parent = nullptr);
214 void AddGlobalElement(REveElement *element, REveElement *parent = nullptr);
215
216 void RemoveElement(REveElement* element, REveElement *parent);
217
219 void AssignElementId (REveElement* element);
220 void PreDeleteElement(REveElement* element);
221 void BrowseElement(ElementId_t id);
222
223 // VizDB - Visualization-parameter data-base.
224 Bool_t InsertVizDBEntry(const TString& tag, REveElement* model,
225 Bool_t replace, Bool_t update);
226 Bool_t InsertVizDBEntry(const TString& tag, REveElement* model);
227 REveElement *FindVizDBEntry (const TString& tag);
228
229 void LoadVizDB(const TString& filename, Bool_t replace, Bool_t update);
230 void LoadVizDB(const TString& filename);
231 void SaveVizDB(const TString& filename);
232
234 Bool_t GetVizDBUpdate () const { return fVizDBUpdate; }
237
238
239 // Geometry management.
240 TGeoManager *GetGeometry(const TString& filename);
243 void RegisterGeometryAlias(const TString& alias, const TString& filename);
244
245 void ClearROOTClassSaved();
246
247 void AddLocation(const std::string& name, const std::string& path);
248 void SetDefaultHtmlPage(const std::string& path);
249 void SetClientVersion(const std::string& version);
250
251 void ScheduleMIR(const std::string &cmd, ElementId_t i, const std::string& ctype);
252
253 static REveManager* Create();
254 static void Terminate();
255 static void ExecuteInMainThread(std::function<void()> func);
256 static void QuitRoot();
257
258
259 // Access to internals, needed for low-level control in advanced
260 // applications.
261
262 std::shared_ptr<RWebWindow> GetWebWindow() const { return fWebWindow; }
263
264 // void Send(void* buff, unsigned connid);
265 void Send(unsigned connid, const std::string &data);
266 void SendBinary(unsigned connid, const void *data, std::size_t len);
267
268 void Show(const RWebDisplayArgs &args = "");
269
270 std::shared_ptr<REveGeomViewer> ShowGeometry(const RWebDisplayArgs &args = "");
271
273};
274
276
277}}
278
279#endif
#define R__EXTERN
Definition: DllImport.h:27
ROOT::R::TRInterface & r
Definition: Object.C:4
static void update(gsl_integration_workspace *workspace, double a1, double b1, double area1, double error1, double a2, double b2, double area2, double error2)
const Bool_t kFALSE
Definition: RtypesCore.h:101
bool Bool_t
Definition: RtypesCore.h:63
XFontStruct * id
Definition: TGX11.cxx:109
char name[80]
Definition: TGX11.cxx:110
List of Scenes providing common operations on REveScene collections.
Eve representation of TGLScene.
Make sure there is a SINGLE running REveSelection for each selection type (select/highlight).
List of Viewers providing common operations on REveViewer collections.
Eve representation of a GL view.
bool Emit(const RLogEntry &entry) override
Utility to stream loggs to client.
MIR(const std::string &cmd, ElementId_t id, const std::string &ctype)
Definition: REveManager.hxx:92
virtual EStatus Handle(std::exception &exc)
Handle exceptions deriving from REveException.
void ClearROOTClassSaved()
Work-around uber ugly hack used in SavePrimitive and co.
REveManager(const REveManager &)=delete
REveScene * GetEventScene() const
void ScheduleMIR(const std::string &cmd, ElementId_t i, const std::string &ctype)
REveSelection * GetHighlight() const
void RegisterGeometryAlias(const TString &alias, const TString &filename)
Register 'name' as an alias for geometry file 'filename'.
void PreDeleteElement(REveElement *element)
Called from REveElement prior to its destruction so the framework components (like object editor) can...
void ExecuteMIR(std::shared_ptr< MIR > mir)
REveSceneList * GetScenes() const
void ClearAllSelections()
Clear all selection objects.
RExceptionHandler * fExcHandler
exception handler
void AssignElementId(REveElement *element)
Assign a unique ElementId to given element.
TGeoManager * GetDefaultGeometry()
Get the default geometry.
static void ExecuteInMainThread(std::function< void()> func)
void GetServerStatus(REveServerStatus &)
void SetDefaultHtmlPage(const std::string &path)
Set content of default window HTML page.
REveSelection * GetSelection() const
void AddLocation(const std::string &name, const std::string &path)
Register new directory to THttpServer.
void Send(unsigned connid, const std::string &data)
static void Terminate()
Properly terminate global REveManager.
REveElement * FindElementById(ElementId_t id) const
Lookup ElementId in element map and return corresponding REveElement*.
void SaveVizDB(const TString &filename)
Save visualization-parameter database to file filename.
TGeoManager * GetGeometryByAlias(const TString &alias)
Get geometry with given alias.
std::unordered_map< ElementId_t, REveElement * > fElementIdMap
static REveManager * Create()
If global REveManager* REX::gEve is not set initialize it.
std::unordered_map< std::string, std::shared_ptr< TMethodCall > > fMethCallMap
void WindowConnect(unsigned connid)
Process new connection from web window.
std::vector< Conn > fConnList
REveElement * FindVizDBEntry(const TString &tag)
Find a visualization-parameter database entry corresponding to tag.
TGeoManager * GetGeometry(const TString &filename)
Get geometry with given filename.
REveScene * GetGlobalScene() const
std::shared_ptr< ROOT::Experimental::RWebWindow > fWebWindow
std::shared_ptr< REveGeomViewer > ShowGeometry(const RWebDisplayArgs &args="")
Show current geometry in web browser.
std::queue< std::shared_ptr< MIR > > fMIRqueue
void LoadVizDB(const TString &filename, Bool_t replace, Bool_t update)
Load visualization-parameter database from file filename.
void DoRedraw3D()
Perform 3D redraw of scenes and viewers whose contents has changed.
REveManager & operator=(const REveManager &)=delete
void SendBinary(unsigned connid, const void *data, std::size_t len)
void AddElement(REveElement *element, REveElement *parent=nullptr)
Add an element.
std::shared_ptr< RWebWindow > GetWebWindow() const
void SetClientVersion(const std::string &version)
Set client version, used as prefix in scripts URL When changed, web browser will reload all related J...
void AddGlobalElement(REveElement *element, REveElement *parent=nullptr)
Add a global element, i.e.
void Redraw3D(Bool_t resetCameras=kFALSE, Bool_t dropLogicals=kFALSE)
void SceneSubscriberWaitingResponse(unsigned cinnId)
REveScene * SpawnNewScene(const char *name, const char *title="")
Create a new scene.
void SceneSubscriberProcessingChanges(unsigned cinnId)
void RemoveElement(REveElement *element, REveElement *parent)
Remove element from parent.
virtual ~REveManager()
Destructor.
void WindowDisconnect(unsigned connid)
Process disconnect of web window.
void FullRedraw3D(Bool_t resetCameras=kFALSE, Bool_t dropLogicals=kFALSE)
Perform 3D redraw of all scenes and viewers.
REveViewer * SpawnNewViewer(const char *name, const char *title="")
Create a new GL viewer.
Bool_t InsertVizDBEntry(const TString &tag, REveElement *model, Bool_t replace, Bool_t update)
Insert a new visualization-parameter database entry.
REveScene * GetWorld() const
RExceptionHandler * GetExcHandler() const
void BrowseElement(ElementId_t id)
Activate EVE browser (summary view) for specified element id.
REveViewerList * GetViewers() const
void WindowData(unsigned connid, const std::string &arg)
Process data from web window.
void Show(const RWebDisplayArgs &args="")
Show eve manager in specified browser.
REveSelection Container for selected and highlighted elements.
REveViewerList List of Viewers providing common operations on REveViewer collections.
Definition: REveViewer.hxx:62
REveViewer Reve representation of TGLViewer.
Definition: REveViewer.hxx:28
A diagnostic that can be emitted by the RLogManager.
Definition: RLogger.hxx:178
Abstract RLogHandler base class.
Definition: RLogger.hxx:85
std::unique_ptr< RLogHandler > Remove(RLogHandler *handler)
Remove and return the given log handler. Returns nullptr if not found.
Definition: RLogger.cxx:68
static RLogManager & Get()
Definition: RLogger.cxx:62
void PushFront(std::unique_ptr< RLogHandler > handler)
Add a RLogHandler in the front - to be called before all others.
Definition: RLogger.hxx:150
Holds different arguments for starting browser with RWebDisplayHandle::Display() method.
This class stores a (key,value) pair using an external hash.
Definition: TExMap.h:33
The manager class for any TGeo geometry.
Definition: TGeoManager.h:45
TMap implements an associative array of (key,value) pairs using a THashTable for efficient retrieval ...
Definition: TMap.h:40
Method or function calling interface.
Definition: TMethodCall.h:37
virtual void Remove()
Remove std::exception handler from system handler list.
virtual void Add()
Add std::exception handler to system handler list.
Basic string class.
Definition: TString.h:136
R__EXTERN REveManager * gEve
unsigned int ElementId_t
Definition: REveTypes.hxx:25
void function(const Char_t *name_, T fun, const Char_t *docstring=0)
Definition: RExports.h:152
tbb::task_arena is an alias of tbb::interface7::task_arena, which doesn't allow to forward declare tb...