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

In This Package:

SolidChild.h

Go to the documentation of this file.
00001 // $Id: SolidChild.h,v 1.20 2007/09/20 15:17:05 wouter Exp $ 
00002 // ===========================================================================
00003 #ifndef       DETDESC_SOLIDCHILD_H 
00004 #define       DETDESC_SOLIDCHILD_H 1
00006 #include <functional>
00007 // Geometry
00008 #include "GaudiKernel/Transform3DTypes.h"
00010 #include "DetDesc/SolidException.h" 
00011 #include "DetDesc/SolidBase.h" 
00013 class MsgStream;        
00014 class SolidBoolean;     
00015 template <class TYPE>
00016 class SolidFactory;     
00017 
00018 
00030 class SolidChild : public virtual SolidBase
00031 {
00033   friend class SolidBoolean;
00034   friend class SolidFactory<SolidChild>;
00036 protected:
00037  
00041   SolidChild( const std::string& Name = "" );
00042   
00048   SolidChild( ISolid*               solid      , 
00049               const Gaudi::Transform3D* mtrx  = 0  ,
00050               const std::string&    Name  = "" );
00051   
00058   SolidChild( ISolid*               solid                 ,
00059               const Gaudi::XYZPoint&     pos                   , 
00060               const Gaudi::Rotation3D&    rot   = Gaudi::Rotation3D() ,
00061               const std::string&    Name  = ""            ); 
00062   
00063 public:
00064  
00066   virtual ~SolidChild();
00067 
00068 public:
00069   
00073   inline virtual std::string typeName   () const { return "SolidChild" ; }
00074   
00078   inline virtual const ISolid* cover () const { return solid()->cover() ; };
00079   
00084   virtual inline const ISolid* coverTop () const 
00085   { return solid()->coverTop() ; };
00086   
00091   virtual std::ostream& printOut ( std::ostream& os = std::cout ) const ;
00092 
00097   virtual MsgStream&    printOut ( MsgStream&    os             ) const ;
00098 
00107   virtual bool isInside ( const Gaudi::XYZPoint& point) const;
00108   virtual bool isInside ( const Gaudi::Polar3DPoint   & point ) const;
00109   virtual bool isInside ( const Gaudi::RhoZPhiPoint   & point ) const; 
00112   virtual ISolid*  reset();
00113   
00132   virtual unsigned int 
00133   intersectionTicks ( const Gaudi::XYZPoint&  Point  ,
00134                       const Gaudi::XYZVector& Vector ,
00135                       ISolid::Ticks&          ticks  ) const;
00136   virtual unsigned int
00137   intersectionTicks  ( const Gaudi::Polar3DPoint&  Point  ,
00138                        const Gaudi::Polar3DVector& Vector ,
00139                        ISolid::Ticks&              ticks  ) const;
00140 
00141   virtual unsigned int
00142   intersectionTicks  ( const Gaudi::RhoZPhiPoint  & Point  ,
00143                        const Gaudi::RhoZPhiVector & Vector ,
00144                        ISolid::Ticks              & ticks  ) const;
00145 
00150   Ticks::size_type maxNumberOfTicks() const { return solid() ? solid()->maxNumberOfTicks() : 0 ; }
00151   
00152 public:
00153 
00155   inline const ISolid* solid () const { return m_sc_solid; };
00156   // is solid transformed?  
00157   inline       bool    simple() const { return m_sc_simple; };  
00158   // transfromation
00159   inline const Gaudi::Transform3D& matrix () const  
00160   {
00161     if( 0 == m_sc_matrix ) { m_sc_matrix = new  Gaudi::Transform3D; }
00162     return *m_sc_matrix;
00163   };
00164 
00165 protected:
00166   
00169   void setBP();
00170 
00171 private:
00172   
00176   SolidChild           ( const SolidChild& solid );
00177   
00182   SolidChild& operator=( const SolidChild& solid );
00183 
00189   template<class aPoint>
00190   bool isInsideImpl(const aPoint& point) const;
00191 
00192   template<class aPoint, class aVector>
00193   unsigned int intersectionTicksImpl ( const aPoint&  Point  ,
00194                                        const aVector& Vector ,
00195                                        ISolid::Ticks& ticks  ) const;
00196 
00197 private:
00199   ISolid*                  m_sc_solid   ; 
00200   mutable Gaudi::Transform3D*  m_sc_matrix  ; 
00201   bool                     m_sc_simple  ; 
00202 
00203 };
00204 
00206 #endif   
00207 
| 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