// @(#):$Id$
// Author: Andrei Gheata   07/02/2012

/*************************************************************************
 * 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_TGeoStateInfo
#define ROOT_TGeoStateInfo

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

class TGeoNode;
class TGeoPolygon;
struct TGeoStateInfo;

////////////////////////////////////////////////////////////////////////////
//                                                                        //
// TGeoStateInfo - statefull info for the current geometry level.         //
//                                                                        //
////////////////////////////////////////////////////////////////////////////

struct TGeoStateInfo {
   TGeoNode            *fNode;           // Node to which applies
   // Assembly data
   Int_t                fAsmCurrent;     // Index for current entered node (assemblies)
   Int_t                fAsmNext;        // Index for next entered node (assemblies)
   // Divisions data
   Int_t                fDivCurrent;     // Index for the current division node
   Int_t                fDivNext;        // Index for the next division node
   TGeoTranslation      fDivTrans;       // Translation used by current division node
   TGeoRotation         fDivRot;         // Rotation used by current division node
   TGeoCombiTrans       fDivCombi;       // Combi transformation used by current division
   // Voxels data
   Int_t                fVoxNcandidates; // Number of candidates
   Int_t                fVoxCurrent;     // Index of current voxel in sorted list
   Int_t               *fVoxCheckList;   // List of candidates
   UChar_t             *fVoxBits1;       // Bits used for list intersection
   Int_t                fVoxSlices[3];   // Slice indices for current voxel
   Int_t                fVoxInc[3];      // Slice index increment
   Double_t             fVoxInvdir[3];   // 1/current director cosines
   Double_t             fVoxLimits[3];   // Limits on X,Y,Z
   // Composite shape data
   Int_t                fBoolSelected;   // Selected Boolean node
   // Xtru shape data
   Int_t                fXtruSeg;        // current segment [0,fNvert-1]
   Int_t                fXtruIz;         // current z plane [0,fNz-1]
   Double_t            *fXtruXc;         // [fNvert] current X positions for polygon vertices
   Double_t            *fXtruYc;         // [fNvert] current Y positions for polygon vertices
   TGeoPolygon         *fXtruPoly;       // polygon defining section shape

   TGeoStateInfo(Int_t maxdaughters=0);
   TGeoStateInfo(const TGeoStateInfo &other);
   TGeoStateInfo & operator=(const TGeoStateInfo &other);
   virtual ~TGeoStateInfo();

   ClassDef(TGeoStateInfo, 0)  // No I/O for this structure
};

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