Logo ROOT   6.30.04
Reference Guide
 All Namespaces Files Pages
TGeoPhysicalNode.h
Go to the documentation of this file.
1 // @(#)root/geom:$Id$
2 // Author: Andrei Gheata 17/02/04
3 
4 /*************************************************************************
5  * Copyright (C) 1995-2000, 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 ROOT_TGeoPhysicalNode
13 #define ROOT_TGeoPhysicalNode
14 
15 #include "TNamed.h"
16 
17 #include "TObjArray.h"
18 
19 #include "TAttLine.h"
20 
21 // forward declarations
22 class TGeoHMatrix;
23 class TGeoMatrix;
24 class TGeoVolume;
25 class TGeoNode;
26 class TGeoShape;
27 class TGeoNavigator;
28 
29 //////////////////////////////////////////////////////////////////////////////
30 // //
31 // TGeoPhysicalNode - class representing an unique object associated with a //
32 // path. //
33 // //
34 //////////////////////////////////////////////////////////////////////////////
35 
36 class TGeoPhysicalNode : public TNamed,
37  public TAttLine
38 {
39 protected:
40  Int_t fLevel; // depth in the geometry tree
41  TObjArray *fMatrices; // global transformation matrices
42  TObjArray *fNodes; // branch of nodes
43  TGeoHMatrix *fMatrixOrig; // original local matrix of the last node in the path
44 
45  TGeoPhysicalNode(const TGeoPhysicalNode&);
46  TGeoPhysicalNode& operator=(const TGeoPhysicalNode&);
47 
48  void SetAligned(Bool_t flag=kTRUE) {TObject::SetBit(kGeoPNodeAligned,flag);}
49  Bool_t SetPath(const char *path);
50  void SetBranchAsState();
51 
52 public:
53  enum {
54  kGeoPNodeFull = BIT(10), // full branch is visible (default only last node)
55  kGeoPNodeVisible = BIT(11), // this node is visible (default)
56  kGeoPNodeVolAtt = BIT(12), // preserve volume attributes (default)
57  kGeoPNodeAligned = BIT(13) // alignment bit
58  };
59 
60  // constructors
61  TGeoPhysicalNode();
62  TGeoPhysicalNode(const char *path);
63  // destructor
64  virtual ~TGeoPhysicalNode();
65 
66  Bool_t Align(TGeoMatrix *newmat=0, TGeoShape *newshape=0, Bool_t check=kFALSE, Double_t ovlp=0.001);
67  void cd() const;
68  void Draw(Option_t *option="");
69  Int_t GetLevel() const {return fLevel;}
70  TGeoHMatrix *GetMatrix(Int_t level=-1) const;
71  TGeoHMatrix *GetOriginalMatrix() const {return fMatrixOrig;}
72  TGeoNode *GetMother(Int_t levup=1) const;
73  TGeoNode *GetNode(Int_t level=-1) const;
74  TGeoShape *GetShape(Int_t level=-1) const;
75  TGeoVolume *GetVolume(Int_t level=-1) const;
76 
77 
78  Bool_t IsAligned() const {return TObject::TestBit(kGeoPNodeAligned);}
79  Bool_t IsMatchingState(TGeoNavigator *nav) const;
80  Bool_t IsVolAttributes() const {return TObject::TestBit(kGeoPNodeVolAtt);}
81  Bool_t IsVisible() const {return TObject::TestBit(kGeoPNodeVisible);}
82  Bool_t IsVisibleFull() const {return TObject::TestBit(kGeoPNodeFull);}
83 
84  virtual void Print(Option_t *option="") const;
85  void Refresh();
86 
87  void SetMatrixOrig(const TGeoMatrix *local);
88  void SetIsVolAtt(Bool_t flag=kTRUE) {TObject::SetBit(kGeoPNodeVolAtt,flag);}
89  void SetVisibility(Bool_t flag=kTRUE) {TObject::SetBit(kGeoPNodeVisible,flag);}
90  void SetVisibleFull(Bool_t flag=kTRUE) {TObject::SetBit(kGeoPNodeFull,flag);}
91  virtual void Paint(Option_t *option = "");
92 
93 
94  ClassDef(TGeoPhysicalNode, 1) // base class for physical nodes
95 };
96 
97 ///////////////////////////////////////////////////////////////////////////////
98 // //
99 // TGeoPNEntry - class representing physical node entry having a unique name //
100 // associated to a path. //
101 // //
102 ///////////////////////////////////////////////////////////////////////////////
103 
104 class TGeoPNEntry : public TNamed
105 {
106 private:
107  enum EPNEntryFlags {
108  kPNEntryOwnMatrix = BIT(14)
109  };
110  TGeoPhysicalNode *fNode; // Physical node to which this applies
111  const TGeoHMatrix *fMatrix; // Additional matrix
112  TGeoHMatrix *fGlobalOrig; // Original global matrix for the linked physical node
113 
114 protected:
115  TGeoPNEntry(const TGeoPNEntry& pne)
116  : TNamed(pne), fNode(pne.fNode), fMatrix(NULL), fGlobalOrig(NULL) { }
117  TGeoPNEntry& operator=(const TGeoPNEntry& pne)
118  {if(this!=&pne) {TNamed::operator=(pne); fNode=pne.fNode; fMatrix=pne.fMatrix;}
119  return *this;}
120 
121 public:
122  TGeoPNEntry();
123  TGeoPNEntry(const char *unique_name, const char *path);
124  virtual ~TGeoPNEntry();
125 
126  inline const char *GetPath() const {return GetTitle();}
127  const TGeoHMatrix *GetMatrix() const {return fMatrix;}
128  TGeoHMatrix *GetMatrixOrig() const {if (fNode) return fNode->GetOriginalMatrix(); else return NULL;};
129  TGeoHMatrix *GetGlobalOrig() const {return fGlobalOrig;}
130  TGeoPhysicalNode *GetPhysicalNode() const {return fNode;}
131  void SetMatrix(const TGeoHMatrix *matrix);
132  void SetPhysicalNode(TGeoPhysicalNode *node);
133 
134  ClassDef(TGeoPNEntry, 4) // a physical node entry with unique name
135 };
136 
137 #endif
138