RSFace.h

Go to the documentation of this file.
00001 // -*- Mode: C++; tab-width: 2; -*-
00002 // vi: set ts=2:
00003 //
00004 // $Id: RSFace.h,v 1.33 2005/12/23 17:02:01 amoll Exp $
00005 //
00006 
00007 #ifndef BALL_STRUCTURE_RSFACE_H
00008 #define BALL_STRUCTURE_RSFACE_H
00009 
00010 #ifndef BALL_STRUCTURE_GRAPHFACE_H
00011 # include <BALL/STRUCTURE/graphFace.h>
00012 #endif
00013 
00014 #ifndef BALL_MATHS_VECTOR3_H
00015 # include <BALL/MATHS/vector3.h>
00016 #endif
00017 
00018 namespace BALL
00019 {
00020   class RSVertex;
00021   class RSEdge;
00022   class ReducedSurface;
00023   class RSComputer;
00024   class SolventExcludedSurface;
00025   class SESComputer;
00026   class SESSingularityCleaner;
00027   class SESEdge;
00028   class SESFace;
00029   class SESVertex;
00030   class TriangulatedSES;
00031   class SASTriangulator;
00032   class SolventAccessibleSurface;
00033   class SASEdge;
00034   class SASFace;
00035   class SASVertex;
00036   class TriangulatedSAS;
00037   class SESTriangulator;
00038 
00042   class BALL_EXPORT RSFace  : public GraphTriangle< RSVertex,RSEdge,RSFace >
00043   {
00044     public:
00045 
00068     friend class RSEdge;
00069     friend class RSVertex;
00070     friend class ReducedSurface;
00071     friend class RSComputer;
00072     friend class SESEdge;
00073     friend class SESFace;
00074     friend class SESVertex;
00075     friend class SolventExcludedSurface;
00076     friend class SESComputer;
00077     friend class SESSingularityCleaner;
00078     friend class TriangulatedSES;
00079     friend class SESTriangulator;
00080     friend class SASEdge;
00081     friend class SASFace;
00082     friend class SASVertex;
00083     friend class SolventAccessibleSurface;
00084     friend class TriangulatedSAS;
00085     friend class SASTriangulator;
00086 
00087     BALL_CREATE(RSFace)
00088 
00089     
00092 
00096     RSFace()
00097       ;
00098 
00106     RSFace(const RSFace& rsface, bool deep = false)
00107       ;
00108 
00122     RSFace(RSVertex* vertex1,
00123         RSVertex* vertex2,
00124         RSVertex* vertex3,
00125         RSEdge* edge1,
00126         RSEdge* edge2,
00127         RSEdge* edge3,
00128         const TVector3<double>& center,
00129         const TVector3<double>& normal,
00130         bool singular,
00131         Index index)
00132       throw(Exception::DivisionByZero);
00133 
00137     virtual ~RSFace()
00138       ;
00139 
00141 
00144 
00151     void set(const RSFace& rsface, bool deep = false)
00152       ;
00153 
00159     RSFace& operator = (const RSFace& rsface)
00160       ;
00161 
00174     void set(RSVertex* vertex1,
00175         RSVertex* vertex2,
00176         RSVertex* vertex3,
00177         RSEdge* edge1,
00178         RSEdge* edge2,
00179         RSEdge* edge3,
00180         const TVector3<double>& center,
00181         const TVector3<double>& normal,
00182         bool singular,
00183         Index index)
00184       throw(Exception::DivisionByZero);
00185 
00187 
00190 
00195     virtual bool operator == (const RSFace& rsface) const
00196       ;
00197 
00202     virtual bool operator != (const RSFace& rsface) const
00203       ;
00204 
00209     virtual bool operator *=(const RSFace& rsface) const
00210       ;
00211     
00216     bool isSingular() const
00217       ;
00218 
00220 
00223 
00227     void setCenter(const TVector3<double>& center)
00228       ;
00229 
00233     TVector3<double> getCenter() const
00234       ;
00235 
00239     void setNormal(const TVector3<double>& normal)
00240       throw(Exception::DivisionByZero);
00241 
00245     TVector3<double> getNormal() const
00246       ;
00247 
00250     void setSingular(bool singular)
00251       ;
00252 
00261     void remove
00262         (HashSet<RSEdge*>&    edges,
00263          HashSet<RSVertex*>&  vertices,
00264          HashSet<RSFace*>&    faces)
00265       ;
00266 
00268 
00269     protected:
00270 
00271     /*_ @name Attributes
00272     */
00274 
00275     /*_ The center of the probe sphere defining the RSFace
00276     */
00277     TVector3<double> center_;
00278     /*_ The vector orthogonal to the RSFace
00279     */
00280     TVector3<double> normal_;
00281     /*_ singular
00282     */
00283     bool singular_;
00284 
00286 
00287   };
00288 
00292 
00295   BALL_EXPORT std::ostream& operator << (std::ostream& s, const RSFace& rsface);
00296 
00298 
00299 } // namespace BALL
00300 
00301 #endif // BALL_STRUCTURE_RSFACE_H