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

In This Package:

SolidPolyHedronHelper.h

Go to the documentation of this file.
00001 // $Id: SolidPolyHedronHelper.h,v 1.15 2007/09/20 15:17:05 wouter Exp $ 
00002 // ===========================================================================
00003 #ifndef     DETDESC_SOLIDPOLYHEDRONHELPER_H
00004 #define     DETDESC_SOLIDPOLYHEDRONHELPER_H 1
00006 #include <vector>
00008 #include "GaudiKernel/Point3DTypes.h"
00009 #include "GaudiKernel/Plane3DTypes.h"
00011 #include "DetDesc/SolidBase.h"
00012 #include "DetDesc/SolidException.h" 
00013 #include "DetDesc/SolidTicks.h"
00014 
00015 
00025 class SolidPolyHedronHelper: virtual public SolidBase
00026 {
00028 public:
00029   
00031   typedef std::vector<Gaudi::Plane3D>   PLANES   ;
00032   typedef std::vector<Gaudi::XYZPoint>   VERTICES ;
00033   
00034 public: 
00035   
00044   virtual bool isInside ( const Gaudi::XYZPoint& point ) const ;
00045   virtual bool isInside ( const Gaudi::Polar3DPoint   & point ) const;
00046   virtual bool isInside ( const Gaudi::RhoZPhiPoint   & point ) const; 
00066   virtual unsigned int intersectionTicks( const Gaudi::XYZPoint & Point,
00067                                           const Gaudi::XYZVector& Vector,
00068                                           ISolid::Ticks& ticks  ) const ;
00069 
00070   virtual unsigned int intersectionTicks( const Gaudi::Polar3DPoint  & Point,
00071                                           const Gaudi::Polar3DVector & Vector,
00072                                           ISolid::Ticks     & ticks) const ; 
00073 
00074   virtual unsigned int intersectionTicks( const Gaudi::RhoZPhiPoint  & Point,
00075                                           const Gaudi::RhoZPhiVector & Vector,
00076                                           ISolid::Ticks     & ticks) const ;
00081   Ticks::size_type maxNumberOfTicks() const ;
00082 
00083 protected:
00084   
00088   SolidPolyHedronHelper ( const std::string& Name = "Anonymous PoliHedron");
00089   
00091   virtual ~SolidPolyHedronHelper ();
00092   
00101   bool addFace
00102   ( const Gaudi::XYZPoint& Point1 , 
00103     const Gaudi::XYZPoint& Point2 , 
00104     const Gaudi::XYZPoint& Point3 );
00105   
00116   bool addFace
00117   ( const Gaudi::XYZPoint& Point1 , 
00118     const Gaudi::XYZPoint& Point2 , 
00119     const Gaudi::XYZPoint& Point3 , 
00120     const Gaudi::XYZPoint& Point4 );  
00121   
00125   inline const  PLANES&   planes  () const { return m_ph_planes   ; } 
00126   
00131   template<class aPoint>
00132   inline bool inside 
00133   (  const aPoint& Point , 
00134      const Gaudi::Plane3D& Plane ) const 
00135   { return 0 >= Plane.Distance( Point ) ; };
00136 
00139   void setBP();
00140 
00141 private:
00147   template<class aPoint>
00148   bool isInsideImpl(const aPoint& point) const;
00149 
00150   template<class aPoint, class aVector>
00151   unsigned int intersectionTicksImpl( const aPoint  & Point,
00152                                       const aVector & Vector,
00153                                       ISolid::Ticks& ticks ) const;
00154   
00155 protected: 
00156   
00158   PLANES   m_ph_planes   ;
00159   VERTICES m_ph_vertices ;
00160   
00161 };
00162 
00163 // ===========================================================================
00164 // The END 
00165 // ===========================================================================
00166 #endif  
00167 // ===========================================================================
| 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