00001
00002
00003
00004
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
00272
00274
00275
00276
00277 TVector3<double> center_;
00278
00279
00280 TVector3<double> normal_;
00281
00282
00283 bool singular_;
00284
00286
00287 };
00288
00292
00295 BALL_EXPORT std::ostream& operator << (std::ostream& s, const RSFace& rsface);
00296
00298
00299 }
00300
00301 #endif // BALL_STRUCTURE_RSFACE_H