#ifndef RootGeo_ZGeoNode_H
#define RootGeo_ZGeoNode_H
#include <Glasses/ZNode.h>
#include <Stones/ZColor.h>
#include <Stones/GeoUserData.h>
#include <TObject.h>
#include <TGeoNode.h>
#include <TGeoManager.h>
#include <TRegexp.h>
class TGeoMatrix;
class ZGeoNode : public ZNode
{
MAC_RNR_FRIENDS(ZGeoNode);
friend class ZGeoOvlMgr;
private:
void _init();
void _assert_tnode(const Exc_t& _eh, bool ggeo_fallbackp=false);
protected:
TGeoNode *mTNode;
TString mTNodeName;
Int_t mNNodes;
Float_t mNodeAlpha;
TString mMaterial;
ZColor mColor;
TString mDefFile;
void setup_ztrans(ZNode* zn, const TGeoMatrix* gm);
void setup_color(Float_t alpha);
ZGeoNode* insert_node(TGeoNode* geon, ZNode* holder, const Text_t* name);
TGeoNode* get_tnode_search_point();
ZGeoNode* set_holder(lStr_t& node_names);
Bool_t locate_tnode(ZGeoNode* zn, TGeoNode* cur_node);
public:
ZGeoNode(const Text_t* n="ZGeoNode", const Text_t* t=0) : ZNode(n,t) { _init(); }
void AssertUserData();
void AssignGGeoTopNode();
void ImportByRegExp(const Text_t* target, TRegexp filter);
void ImportByRegExp(const Text_t* target, const Text_t* filter);
void ImportUnimported(const Text_t* target="TheRest");
void ImportNodes();
void Collapse();
void ImportNodesWCollect();
void ImportNodesRec(Int_t depth=2);
void SaveToFile(Bool_t as_top_level, Bool_t save_links=true,
const Text_t* file=0);
void LoadFromFile(const Text_t* file=0);
virtual void Restore();
void SetTNode(TGeoNode* n);
TGeoVolume* GetVolume()
{ return mTNode ? mTNode->GetVolume() : 0; }
TObject* GetVolumeField()
{ return mTNode && mTNode->GetVolume() ? mTNode->GetVolume()->GetField() : 0; }
#include "ZGeoNode.h7"
ClassDef(ZGeoNode, 1);
};
#endif