ROOT logo
// @(#)root/geom:$Id: TGeoOverlap.h 24893 2008-07-18 15:08:05Z brun $
// Author: Andrei Gheata   09/02/03

/*************************************************************************
 * 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_TGeoOverlap
#define ROOT_TGeoOverlap

#ifndef ROOT_TNamed
#include "TNamed.h"
#endif

#ifndef ROOT_TAttLine
#include "TAttLine.h"
#endif

#ifndef ROOT_TAttFill
#include "TAttFill.h"
#endif

#ifndef ROOT_TAtt3D
#include "TAtt3D.h"
#endif

#ifndef ROOT_TGeoMatrix
#include "TGeoMatrix.h"
#endif

///////////////////////////////////////////////////////////////////////////
//                                                                       //
// TGeoOverlap - base class describing geometry overlaps. Overlaps apply //
//   to the nodes contained inside a volume. These should not overlap to //
//   each other nor extrude the shape of their mother volume.            //
//                                                                       //
///////////////////////////////////////////////////////////////////////////

class TGeoVolume;
class TPolyMarker3D;
class TBrowser;

class TGeoOverlap : public TNamed,
                    public TAttLine,
                    public TAttFill,
                    public TAtt3D
{
public:
enum EOverlapType {
   kGeoOverlap    = BIT(14),
   kGeoExtrusion  = BIT(15)
};

private:
   TGeoOverlap(const TGeoOverlap&); // Not implemented
   TGeoOverlap& operator=(const TGeoOverlap&); // Not implemented
   
protected:
   Double_t         fOverlap;     // overlap distance
   TGeoVolume      *fVolume1;     // first volume
   TGeoVolume      *fVolume2;     // second volume
   TGeoHMatrix     *fMatrix1;     // positioning matrix for first volume
   TGeoHMatrix     *fMatrix2;     // positioning matrix for second volume
   TPolyMarker3D   *fMarker;     // points in the overlapping region

public:
   TGeoOverlap();
   TGeoOverlap(const char *name, TGeoVolume *vol1, TGeoVolume *vol2,
               const TGeoMatrix *matrix1, const TGeoMatrix *matrix2,
               Bool_t isovlp=kTRUE,  Double_t ovlp=0.01);
   virtual           ~TGeoOverlap();
   
   void              Browse(TBrowser *b);
   virtual Int_t     Compare(const TObject *obj) const;
   virtual Int_t     DistancetoPrimitive(Int_t px, Int_t py);
   virtual void      Draw(Option_t *option=""); // *MENU*
   virtual void      ExecuteEvent(Int_t event, Int_t px, Int_t py);
   TPolyMarker3D    *GetPolyMarker() const {return fMarker;}
   TGeoVolume       *GetFirstVolume() const {return fVolume1;}
   TGeoVolume       *GetSecondVolume() const {return fVolume2;}
   TGeoHMatrix      *GetFirstMatrix() const {return fMatrix1;}
   TGeoHMatrix      *GetSecondMatrix() const {return fMatrix2;}
   Double_t          GetOverlap() const {return fOverlap;}
   Bool_t            IsExtrusion() const {return TObject::TestBit(kGeoExtrusion);}
   Bool_t            IsOverlap() const {return TObject::TestBit(kGeoOverlap);}
   Bool_t            IsFolder() const {return kFALSE;}
   virtual Bool_t    IsSortable() const {return kTRUE;}
   virtual void      Paint(Option_t *option="");
   virtual void      Print(Option_t *option="") const; // *MENU*
   virtual void      PrintInfo() const;
   virtual void      Sizeof3D() const;
   void              SampleOverlap(Int_t npoints=1000000); // *MENU*
   void              SetIsExtrusion(Bool_t flag=kTRUE) {TObject::SetBit(kGeoExtrusion,flag); TObject::SetBit(kGeoOverlap,!flag);}
   void              SetIsOverlap(Bool_t flag=kTRUE) {TObject::SetBit(kGeoOverlap,flag); TObject::SetBit(kGeoExtrusion,!flag);}
   void              SetNextPoint(Double_t x, Double_t y, Double_t z);
   void              SetFirstVolume(TGeoVolume *vol) {fVolume1=vol;}
   void              SetSecondVolume(TGeoVolume *vol) {fVolume2=vol;}
   void              SetFirstMatrix(TGeoMatrix *matrix) {*fMatrix1 = matrix;}
   void              SetSecondMatrix(TGeoMatrix *matrix) {*fMatrix2 = matrix;}
   void              SetOverlap(Double_t ovlp)  {fOverlap=ovlp;}
   void              Validate() const; // *MENU*
   
   ClassDef(TGeoOverlap, 2)         // base class for geometical overlaps
};
      
#endif
 
 TGeoOverlap.h:1
 TGeoOverlap.h:2
 TGeoOverlap.h:3
 TGeoOverlap.h:4
 TGeoOverlap.h:5
 TGeoOverlap.h:6
 TGeoOverlap.h:7
 TGeoOverlap.h:8
 TGeoOverlap.h:9
 TGeoOverlap.h:10
 TGeoOverlap.h:11
 TGeoOverlap.h:12
 TGeoOverlap.h:13
 TGeoOverlap.h:14
 TGeoOverlap.h:15
 TGeoOverlap.h:16
 TGeoOverlap.h:17
 TGeoOverlap.h:18
 TGeoOverlap.h:19
 TGeoOverlap.h:20
 TGeoOverlap.h:21
 TGeoOverlap.h:22
 TGeoOverlap.h:23
 TGeoOverlap.h:24
 TGeoOverlap.h:25
 TGeoOverlap.h:26
 TGeoOverlap.h:27
 TGeoOverlap.h:28
 TGeoOverlap.h:29
 TGeoOverlap.h:30
 TGeoOverlap.h:31
 TGeoOverlap.h:32
 TGeoOverlap.h:33
 TGeoOverlap.h:34
 TGeoOverlap.h:35
 TGeoOverlap.h:36
 TGeoOverlap.h:37
 TGeoOverlap.h:38
 TGeoOverlap.h:39
 TGeoOverlap.h:40
 TGeoOverlap.h:41
 TGeoOverlap.h:42
 TGeoOverlap.h:43
 TGeoOverlap.h:44
 TGeoOverlap.h:45
 TGeoOverlap.h:46
 TGeoOverlap.h:47
 TGeoOverlap.h:48
 TGeoOverlap.h:49
 TGeoOverlap.h:50
 TGeoOverlap.h:51
 TGeoOverlap.h:52
 TGeoOverlap.h:53
 TGeoOverlap.h:54
 TGeoOverlap.h:55
 TGeoOverlap.h:56
 TGeoOverlap.h:57
 TGeoOverlap.h:58
 TGeoOverlap.h:59
 TGeoOverlap.h:60
 TGeoOverlap.h:61
 TGeoOverlap.h:62
 TGeoOverlap.h:63
 TGeoOverlap.h:64
 TGeoOverlap.h:65
 TGeoOverlap.h:66
 TGeoOverlap.h:67
 TGeoOverlap.h:68
 TGeoOverlap.h:69
 TGeoOverlap.h:70
 TGeoOverlap.h:71
 TGeoOverlap.h:72
 TGeoOverlap.h:73
 TGeoOverlap.h:74
 TGeoOverlap.h:75
 TGeoOverlap.h:76
 TGeoOverlap.h:77
 TGeoOverlap.h:78
 TGeoOverlap.h:79
 TGeoOverlap.h:80
 TGeoOverlap.h:81
 TGeoOverlap.h:82
 TGeoOverlap.h:83
 TGeoOverlap.h:84
 TGeoOverlap.h:85
 TGeoOverlap.h:86
 TGeoOverlap.h:87
 TGeoOverlap.h:88
 TGeoOverlap.h:89
 TGeoOverlap.h:90
 TGeoOverlap.h:91
 TGeoOverlap.h:92
 TGeoOverlap.h:93
 TGeoOverlap.h:94
 TGeoOverlap.h:95
 TGeoOverlap.h:96
 TGeoOverlap.h:97
 TGeoOverlap.h:98
 TGeoOverlap.h:99
 TGeoOverlap.h:100
 TGeoOverlap.h:101
 TGeoOverlap.h:102
 TGeoOverlap.h:103
 TGeoOverlap.h:104
 TGeoOverlap.h:105
 TGeoOverlap.h:106
 TGeoOverlap.h:107
 TGeoOverlap.h:108
 TGeoOverlap.h:109
 TGeoOverlap.h:110
 TGeoOverlap.h:111