| Classes | Job Modules | Data Objects | Services | Algorithms | Tools | Packages | Directories | Tracs |

In This Package:

SolidBoolean.h

Go to the documentation of this file.
00001 // $Id: SolidBoolean.h,v 1.21 2007/09/20 15:17:05 wouter Exp $ 
00002 // ===========================================================================
00003 #ifndef      DETDESC_SOLIDBOOLEAN_H 
00004 #define      DETDESC_SOLIDBOOLEAN_H  1 
00006 #include <string> 
00007 #include <vector> 
00008 #include <algorithm> 
00010 #include "DetDesc/SolidChild.h" 
00011 
00012 // Forward declarations
00013 class StatusCode;
00014 class MsgStream;
00015 
00016 
00027 class SolidBoolean: public virtual SolidBase
00028 {  
00029  public:
00030   //
00031   typedef std::vector<SolidChild*>         SolidChildrens;
00032   //
00033 
00037   virtual  std::string   typeName () const { return "SolidBoolean"; };
00038   
00042   virtual const ISolid* cover () const { return first()->cover() ; };  
00043 
00048   virtual const ISolid* coverTop () const { return first()->coverTop() ; };
00049   
00054   virtual  std::ostream& printOut ( std::ostream& os = std::cout ) const ;
00055   
00060   virtual  MsgStream&    printOut ( MsgStream&    os             ) const ;
00061   
00064   virtual ISolid* reset() ;
00065   
00074   virtual unsigned int intersectionTicks( const Gaudi::XYZPoint & Point,
00075                                           const Gaudi::XYZVector& Vector,
00076                                           ISolid::Ticks& ticks  ) const ;
00077 
00078   virtual unsigned int intersectionTicks( const Gaudi::Polar3DPoint  & Point,
00079                                           const Gaudi::Polar3DVector & Vector,
00080                                           ISolid::Ticks     & ticks) const ; 
00081 
00082   virtual unsigned int intersectionTicks( const Gaudi::RhoZPhiPoint  & Point,
00083                                           const Gaudi::RhoZPhiVector & Vector,
00084                                           ISolid::Ticks     & ticks) const ; 
00085 
00098   virtual unsigned int intersectionTicks( const Gaudi::XYZPoint& Point,
00099                                           const Gaudi::XYZVector & Vector,
00100                                           const ISolid::Tick& tickMin,
00101                                           const ISolid::Tick& tickMax,
00102                                           ISolid::Ticks& ticks   ) const ; 
00103 
00104   virtual unsigned int intersectionTicks( const Gaudi::Polar3DPoint& Point,
00105                                           const Gaudi::Polar3DVector & Vector,
00106                                           const ISolid::Tick& tickMin,
00107                                           const ISolid::Tick& tickMax,
00108                                           ISolid::Ticks& ticks   ) const ; 
00109 
00110   virtual unsigned int intersectionTicks( const Gaudi::RhoZPhiPoint& Point,
00111                                           const Gaudi::RhoZPhiVector & Vector,
00112                                           const ISolid::Tick& tickMin,
00113                                           const ISolid::Tick& tickMax,
00114                                           ISolid::Ticks& ticks   ) const ; 
00115 
00119   const  ISolid* first () const { return m_sb_first; } ; 
00120   
00124   unsigned int  noChildrens () const { return m_sb_childrens.size(); } ;
00125 
00130   const ISolid* operator[]  ( unsigned int index ) const 
00131   {  return  ( ( index < noChildrens() )  ? *(childBegin()+index) : 0 ) ; } ;
00132   
00136   SolidChildrens::const_iterator  
00137   childBegin () const { return m_sb_childrens.begin(); }; 
00138   
00142   SolidChildrens::const_iterator  
00143   childEnd   () const { return m_sb_childrens.end  (); }; 
00144   
00146 protected:
00147   
00153   SolidBoolean( const std::string& name  , 
00154                 ISolid*            solid );
00155   
00157   virtual ~SolidBoolean();
00158 
00162   SolidBoolean ( const std::string& name="Undefined" );
00163   
00169   StatusCode addChild   
00170   ( ISolid*               child , 
00171     const Gaudi::Transform3D* mtrx  );
00172   
00178   StatusCode addChild   
00179   ( ISolid*               child    , 
00180     const Gaudi::XYZPoint&     position , 
00181     const Gaudi::Rotation3D&    rotation );
00182 
00186   SolidChildrens::iterator 
00187   childBegin () { return m_sb_childrens.begin(); }; 
00188   
00192   SolidChildrens::iterator 
00193   childEnd   () { return m_sb_childrens.end  (); };
00194 
00199   Ticks::size_type maxNumberOfTicks() const ;
00200 
00201 private:
00202 
00203   // default constructor is disabled 
00204   // SolidBoolean() ;
00205   // assignement operator is disabled 
00206   SolidBoolean& operator=(SolidBoolean & ) ;
00207 
00208   template<class aPoint, class aVector>
00209   unsigned int intersectionTicksImpl( const aPoint  & Point,
00210                                       const aVector & Vector,
00211                                       const ISolid::Tick& tickMin,
00212                                       const ISolid::Tick& tickMax,
00213                                       ISolid::Ticks&  ticks) const;
00214 
00215   template<class aPoint, class aVector>
00216   unsigned int intersectionTicksImpl( const aPoint  & Point,
00217                                       const aVector & Vector,
00218                                       ISolid::Ticks& ticks ) const;
00219   
00220 protected:
00221   
00224   void setBP();
00225 
00226 private:
00228   std::string                    m_sb_name     ;    
00229   mutable     ISolid*            m_sb_first    ;  
00230   mutable     SolidChildrens     m_sb_childrens; 
00231   //
00232 };
00233 
00235 #endif   
00236 
| Classes | Job Modules | Data Objects | Services | Algorithms | Tools | Packages | Directories | Tracs |

Generated on Mon Apr 11 20:00:13 2011 for DetDesc by doxygen 1.4.7