00001
00002
00003
00004
00005 #ifndef BALL_STRUCTURE_RSEDGE_H
00006 #define BALL_STRUCTURE_RSEDGE_H
00007
00008 #ifndef BALL_STRUCTURE_GRAPHEDGE_H
00009 # include <BALL/STRUCTURE/graphEdge.h>
00010 #endif
00011
00012 #ifndef BALL_MATHS_ANGLE_H
00013 # include <BALL/MATHS/angle.h>
00014 #endif
00015
00016 #ifndef BALL_MATHS_CIRCLE3_H
00017 # include <BALL/MATHS/circle3.h>
00018 #endif
00019
00020 #ifndef BALL_MATHS_VECTOR3_H
00021 # include <BALL/MATHS/vector3.h>
00022 #endif
00023
00024 namespace BALL
00025 {
00026 class RSFace;
00027 class RSVertex;
00028 class ReducedSurface;
00029 class RSComputer;
00030 class SESEdge;
00031 class SESFace;
00032 class SESVertex;
00033 class SolventExcludedSurface;
00034 class SESComputer;
00035 class SESSingularityCleaner;
00036 class TriangulatedSES;
00037 class SESTriangulator;
00038 class SASEdge;
00039 class SASFace;
00040 class SASVertex;
00041 class SolventAccessibleSurface;
00042 class TriangulatedSAS;
00043 class SASTriangulator;
00044
00048 class BALL_EXPORT RSEdge : public GraphEdge< RSVertex,RSEdge,RSFace >
00049 {
00050 public:
00051
00074 friend class RSFace;
00075 friend class RSVertex;
00076 friend class ReducedSurface;
00077 friend class RSComputer;
00078 friend class SESEdge;
00079 friend class SESFace;
00080 friend class SESVertex;
00081 friend class SolventExcludedSurface;
00082 friend class SESComputer;
00083 friend class SESSingularityCleaner;
00084 friend class TriangulatedSES;
00085 friend class SESTriangulator;
00086 friend class SASEdge;
00087 friend class SASFace;
00088 friend class SolventAccessibleSurface;
00089 friend class SASVertex;
00090 friend class TriangulatedSAS;
00091 friend class SASTriangulator;
00092
00093 BALL_CREATE(RSEdge)
00094
00095
00098
00102 RSEdge()
00103 ;
00104
00112 RSEdge(const RSEdge& rsedge, bool deep = false)
00113 ;
00114
00133 RSEdge(RSVertex* vertex1,
00134 RSVertex* vertex2,
00135 RSFace* face1,
00136 RSFace* face2,
00137 const TVector3<double>& center_of_torus,
00138 const double& radius_of_torus,
00139 const TAngle<double>& angle,
00140 const TCircle3<double>& circle1,
00141 const TCircle3<double>& circle2,
00142 const TVector3<double>& intersection_point1,
00143 const TVector3<double>& intersection_point2,
00144 bool singular,
00145 Index index)
00146 ;
00147
00152 virtual ~RSEdge()
00153 ;
00154
00156
00159
00166 void set(const RSEdge& rsedge, bool deep = false)
00167 ;
00168
00174 RSEdge& operator = (const RSEdge& rsedge)
00175 ;
00176
00194 void set(RSVertex* vertex0,
00195 RSVertex* vertex1,
00196 RSFace* face0,
00197 RSFace* face1,
00198 const TVector3<double>& center_of_torus,
00199 const double& radius_of_torus,
00200 const TAngle<double>& angle,
00201 const TCircle3<double>& circle0,
00202 const TCircle3<double>& circle1,
00203 const TVector3<double>& intersection_point0,
00204 const TVector3<double>& intersection_point1,
00205 bool singular,
00206 Index index)
00207 ;
00208
00210
00213
00219 void setCenterOfTorus(const TVector3<double>& center)
00220 ;
00221
00227 TVector3<double> getCenterOfTorus() const
00228 ;
00229
00235 void setMajorRadiusOfTorus(const double& radius)
00236 ;
00237
00243 double getMajorRadiusOfTorus() const
00244 ;
00245
00251 void setAngle(const TAngle<double>& angle)
00252 ;
00253
00259 TAngle<double> getAngle() const
00260 ;
00261
00269 void setContactCircle(Position i, const TCircle3<double>& circle)
00270 ;
00271
00280 TCircle3<double> getContactCircle(Position i) const
00281 ;
00282
00289 void setIntersectionPoint(Position i, const TVector3<double>& point)
00290 ;
00291
00300 TVector3<double> getIntersectionPoint(Position i) const
00301 throw(Exception::GeneralException);
00302
00305 void setSingular(bool singular)
00306 ;
00307
00309
00310
00314
00319 virtual bool operator == (const RSEdge& rsedge) const
00320 ;
00321
00326 virtual bool operator != (const RSEdge& rsedge) const
00327 ;
00328
00333 virtual bool operator *=(const RSEdge& rsedge) const
00334 ;
00335
00340 bool isSingular() const
00341 ;
00342
00346 bool isFree() const
00347 ;
00348
00350
00351 protected:
00352
00353
00354
00356
00357
00358
00359
00360 TVector3<double> center_of_torus_;
00361
00362
00363
00364 double radius_of_torus_;
00365
00366
00367
00368 TAngle<double> angle_;
00369
00370
00371 TCircle3<double> circle0_;
00372
00373
00374 TCircle3<double> circle1_;
00375
00376
00377
00378 TVector3<double> intersection_point0_;
00379
00380
00381
00382 TVector3<double> intersection_point1_;
00383
00384
00385 bool singular_;
00386
00388
00389 };
00390
00394
00397 BALL_EXPORT std::ostream& operator << (std::ostream& s, const RSEdge& rsedge);
00398
00400
00401
00402
00403 }
00404
00405 #endif // BALL_STRUCTURE_RSEDGE_H