ROOT logo
// $Id: ZGeoRepacker.h 2088 2008-11-23 20:26:46Z matevz $

// Copyright (C) 1999-2008, Matevz Tadel. All rights reserved.
// This file is part of GLED, released under GNU General Public License version 2.
// For the licensing terms see $GLEDSYS/LICENSE or http://www.gnu.org/.

#ifndef RootGeo_ZGeoRepacker_H
#define RootGeo_ZGeoRepacker_H

#include <Glasses/ZGlass.h>
#include <Glasses/ZGeoNode.h>

class TGeoShapeExtract;

class TGeoManager;
class TGeoShape; class TGeoVolume; class TGeoNode;

#ifndef __CINT__
#include <ext/hash_set>
#endif

class ZGeoRepacker : public ZGlass
{
  MAC_RNR_FRIENDS(ZGeoRepacker);

private:
  void _init();

protected:
#ifndef __CINT__
  typedef hash_map<TObject*, int>            foo_t;
  typedef hash_map<TObject*, int>::iterator  foo_i;

#define _PAIN_(X) \
  foo_t mh ## X; \
  bool Has ## X(TObject* o) { foo_i i=mh ## X.find(o); return i!=mh ## X.end();} \
  void Put ## X(TObject* o) { mh ## X[o]++; } \
  int  Get ## X(TObject* o) { return mh ## X[o]; }

  _PAIN_(Shape);
  _PAIN_(Volume);
  //  _PAIN_(Node);

#undef _PAIN_
#endif

  TGeoManager*	  mSrcGeo;  //!
  TGeoManager*	  mNeoGeo;  //!

  ZLink<ZGeoNode> mRoot;    // X{gS} L{}
  TString         mOutFile; // X{GS} 7 Textor()

  void repack_geometry(ZGeoNode* zgnode, TGeoVolume* parent_volume);

  TGeoShapeExtract* dump_shape_tree(ZGeoNode* zgnode, TGeoShapeExtract* parent);

public:
  ZGeoRepacker(const Text_t* n="ZGeoRepacker", const Text_t* t=0) :
    ZGlass(n,t) { _init(); }

  void RepackGeometry(); // X{Ed} 7 MButt()
  void DumpShapeTree(const Text_t* name="Gentle");  // X{Ed} 7 MCWButt()

#include "ZGeoRepacker.h7"
  ClassDef(ZGeoRepacker, 1);
}; // endclass ZGeoRepacker


#endif
 ZGeoRepacker.h:1
 ZGeoRepacker.h:2
 ZGeoRepacker.h:3
 ZGeoRepacker.h:4
 ZGeoRepacker.h:5
 ZGeoRepacker.h:6
 ZGeoRepacker.h:7
 ZGeoRepacker.h:8
 ZGeoRepacker.h:9
 ZGeoRepacker.h:10
 ZGeoRepacker.h:11
 ZGeoRepacker.h:12
 ZGeoRepacker.h:13
 ZGeoRepacker.h:14
 ZGeoRepacker.h:15
 ZGeoRepacker.h:16
 ZGeoRepacker.h:17
 ZGeoRepacker.h:18
 ZGeoRepacker.h:19
 ZGeoRepacker.h:20
 ZGeoRepacker.h:21
 ZGeoRepacker.h:22
 ZGeoRepacker.h:23
 ZGeoRepacker.h:24
 ZGeoRepacker.h:25
 ZGeoRepacker.h:26
 ZGeoRepacker.h:27
 ZGeoRepacker.h:28
 ZGeoRepacker.h:29
 ZGeoRepacker.h:30
 ZGeoRepacker.h:31
 ZGeoRepacker.h:32
 ZGeoRepacker.h:33
 ZGeoRepacker.h:34
 ZGeoRepacker.h:35
 ZGeoRepacker.h:36
 ZGeoRepacker.h:37
 ZGeoRepacker.h:38
 ZGeoRepacker.h:39
 ZGeoRepacker.h:40
 ZGeoRepacker.h:41
 ZGeoRepacker.h:42
 ZGeoRepacker.h:43
 ZGeoRepacker.h:44
 ZGeoRepacker.h:45
 ZGeoRepacker.h:46
 ZGeoRepacker.h:47
 ZGeoRepacker.h:48
 ZGeoRepacker.h:49
 ZGeoRepacker.h:50
 ZGeoRepacker.h:51
 ZGeoRepacker.h:52
 ZGeoRepacker.h:53
 ZGeoRepacker.h:54
 ZGeoRepacker.h:55
 ZGeoRepacker.h:56
 ZGeoRepacker.h:57
 ZGeoRepacker.h:58
 ZGeoRepacker.h:59
 ZGeoRepacker.h:60
 ZGeoRepacker.h:61
 ZGeoRepacker.h:62
 ZGeoRepacker.h:63
 ZGeoRepacker.h:64
 ZGeoRepacker.h:65
 ZGeoRepacker.h:66
 ZGeoRepacker.h:67
 ZGeoRepacker.h:68
 ZGeoRepacker.h:69