Logo ROOT   6.30.04
Reference Guide
 All Namespaces Files Pages
REveProjectionManager.hxx
Go to the documentation of this file.
1 // @(#)root/eve7:$Id$
2 // Authors: Matevz Tadel & Alja Mrak-Tadel: 2006, 2007
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_REveProjectionManager
13 #define ROOT7_REveProjectionManager
14 
15 #include <ROOT/REveElement.hxx>
16 #include <ROOT/REveProjections.hxx>
17 #include <TAttBBox.h>
18 
19 namespace ROOT {
20 namespace Experimental {
21 
22 ////////////////////////////////////////////////////////////////////////////////
23 /// REveProjectionManager
24 /// Manager class for steering of projections and managing projected objects.
25 ////////////////////////////////////////////////////////////////////////////////
26 
27 class REveProjectionManager : public REveElement,
28  public REveAuntAsList,
29  public TAttBBox
30 {
31 private:
32  REveProjectionManager(const REveProjectionManager &); // Not implemented
33  REveProjectionManager &operator=(const REveProjectionManager &); // Not implemented
34 
35 protected:
36  REveProjection *fProjections[REveProjection::kPT_End];
37 
38  REveProjection *fProjection{nullptr}; // current projection
39  REveVector fCenter; // center of distortion
40  Float_t fCurrentDepth{0.}; // z depth of object being projected
41 
42  List_t fDependentEls; // elements that depend on manager and need to be destroyed with it
43 
44  Bool_t fImportEmpty{kFALSE}; // import sub-trees with no projectable elements
45 
46  virtual Bool_t ShouldImport(REveElement *el);
47  virtual void UpdateDependentElsAndScenes(REveElement *root);
48 
49 public:
50  REveProjectionManager(REveProjection::EPType_e type = REveProjection::kPT_Unknown);
51  virtual ~REveProjectionManager();
52 
53  void AddDependent(REveElement *el);
54  void RemoveDependent(REveElement *el);
55 
56  void SetProjection(REveProjection::EPType_e type);
57  REveProjection *GetProjection() { return fProjection; }
58 
59  virtual void UpdateName();
60 
61  void SetCenter(Float_t x, Float_t y, Float_t z);
62  REveVector &GetCenter() { return fCenter; }
63 
64  void SetCurrentDepth(Float_t d) { fCurrentDepth = d; }
65  Float_t GetCurrentDepth() const { return fCurrentDepth; }
66 
67  void SetImportEmpty(Bool_t ie) { fImportEmpty = ie; }
68  Bool_t GetImportEmpty() const { return fImportEmpty; }
69 
70  virtual REveElement *ImportElementsRecurse(REveElement *el, REveElement *parent);
71  virtual REveElement *ImportElements(REveElement *el, REveElement *ext_list = nullptr);
72 
73  virtual REveElement *SubImportElements(REveElement *el, REveElement *proj_parent);
74  virtual Int_t SubImportChildren(REveElement *el, REveElement *proj_parent);
75 
76  virtual void ProjectChildren();
77  virtual void ProjectChildrenRecurse(REveElement *el);
78 
79  void ComputeBBox() override;
80 };
81 
82 } // namespace Experimental
83 } // namespace ROOT
84 
85 #endif