// @(#)root/geom:$Name: $:$Id: TGeoPhysicalNode.h,v 1.3 2004/04/22 14:07:14 brun Exp $
// Author: Andrei Gheata 17/02/04
/*************************************************************************
* Copyright (C) 1995-2000, Rene Brun and Fons Rademakers. *
* All rights reserved. *
* *
* For the licensing terms see $ROOTSYS/LICENSE. *
* For the list of contributors see $ROOTSYS/README/CREDITS. *
*************************************************************************/
#ifndef ROOT_TGeoPhysicalNode
#define ROOT_TGeoPhysicalNode
#ifndef ROOT_TObject
#include "TObject.h"
#endif
#ifndef ROOT_TObjArray
#include "TObjArray.h"
#endif
#ifndef ROOT_TAttLine
#include "TAttLine.h"
#endif
#ifndef ROOT_TObject
#include "TGeoNode.h"
#endif
// forward declarations
class TGeoHMatrix;
class TGeoVolume;
/*************************************************************************
* TGeoPhysicalNode - class representing an unique object associated with a
* path.
*
*************************************************************************/
class TGeoPhysicalNode : public TObject,
public TAttLine
{
protected:
Int_t fLevel; // depth in the geometry tree
TObjArray *fMatrices; // global transformation matrices
TObjArray *fNodes; // branch of nodes
void SetAligned(Bool_t flag=kTRUE) {TObject::SetBit(kGeoPNodeAligned,flag);}
public:
enum {
kGeoPNodeFull = BIT(10), // full branch is visible (default only last node)
kGeoPNodeVisible = BIT(11), // this node is visible (default)
kGeoPNodeVolAtt = BIT(12), // preserve volume attributes (default)
kGeoPNodeAligned = BIT(13) // alignment bit
};
// constructors
TGeoPhysicalNode();
TGeoPhysicalNode(const char *path);
// destructor
virtual ~TGeoPhysicalNode();
void Align(TGeoMatrix *newmat=0, TGeoShape *newshape=0, Bool_t check=kFALSE);
void cd() const;
void Draw(Option_t *option="");
Int_t GetLevel() const {return fLevel;}
TGeoHMatrix *GetMatrix(Int_t level=-1) const;
TGeoNode *GetMother(Int_t levup=1) const;
const char *GetName() const;
TGeoNode *GetNode(Int_t level=-1) const;
TGeoShape *GetShape(Int_t level=-1) const;
TGeoVolume *GetVolume(Int_t level=-1) const;
Bool_t IsAligned() const {return TObject::TestBit(kGeoPNodeAligned);}
Bool_t IsVolAttributes() const {return TObject::TestBit(kGeoPNodeVolAtt);}
Bool_t IsVisible() const {return TObject::TestBit(kGeoPNodeVisible);}
Bool_t IsVisibleFull() const {return TObject::TestBit(kGeoPNodeFull);}
Bool_t SetPath(const char *path);
void SetBranchAsState();
void SetIsVolAtt(Bool_t flag=kTRUE) {TObject::SetBit(kGeoPNodeVolAtt,flag);}
void SetVisibility(Bool_t flag=kTRUE) {TObject::SetBit(kGeoPNodeVisible,flag);}
void SetVisibleFull(Bool_t flag=kTRUE) {TObject::SetBit(kGeoPNodeFull,flag);}
virtual void Paint(Option_t *option = "");
ClassDef(TGeoPhysicalNode, 1) // base class for physical nodes
};
#endif
syntax highlighted by Code2HTML, v. 0.9.1