00001
00002
00003
00004
00005
00006
00007 #ifndef BALL_STRUCTURE_RSEDGE_H
00008 #define BALL_STRUCTURE_RSEDGE_H
00009
00010 #ifndef BALL_STRUCTURE_GRAPHEDGE_H
00011 # include <BALL/STRUCTURE/graphEdge.h>
00012 #endif
00013
00014 #ifndef BALL_MATHS_ANGLE_H
00015 # include <BALL/MATHS/angle.h>
00016 #endif
00017
00018 #ifndef BALL_MATHS_CIRCLE3_H
00019 # include <BALL/MATHS/circle3.h>
00020 #endif
00021
00022 #ifndef BALL_MATHS_VECTOR3_H
00023 # include <BALL/MATHS/vector3.h>
00024 #endif
00025
00026 namespace BALL
00027 {
00028 class RSFace;
00029 class RSVertex;
00030 class ReducedSurface;
00031 class RSComputer;
00032 class SESEdge;
00033 class SESFace;
00034 class SESVertex;
00035 class SolventExcludedSurface;
00036 class SESComputer;
00037 class SESSingularityCleaner;
00038 class TriangulatedSES;
00039 class SESTriangulator;
00040 class SASEdge;
00041 class SASFace;
00042 class SASVertex;
00043 class SolventAccessibleSurface;
00044 class TriangulatedSAS;
00045 class SASTriangulator;
00046
00050 class BALL_EXPORT RSEdge : public GraphEdge< RSVertex,RSEdge,RSFace >
00051 {
00052 public:
00053
00076 friend class RSFace;
00077 friend class RSVertex;
00078 friend class ReducedSurface;
00079 friend class RSComputer;
00080 friend class SESEdge;
00081 friend class SESFace;
00082 friend class SESVertex;
00083 friend class SolventExcludedSurface;
00084 friend class SESComputer;
00085 friend class SESSingularityCleaner;
00086 friend class TriangulatedSES;
00087 friend class SESTriangulator;
00088 friend class SASEdge;
00089 friend class SASFace;
00090 friend class SolventAccessibleSurface;
00091 friend class SASVertex;
00092 friend class TriangulatedSAS;
00093 friend class SASTriangulator;
00094
00095 BALL_CREATE(RSEdge)
00096
00097
00100
00104 RSEdge()
00105 ;
00106
00114 RSEdge(const RSEdge& rsedge, bool deep = false)
00115 ;
00116
00135 RSEdge(RSVertex* vertex1,
00136 RSVertex* vertex2,
00137 RSFace* face1,
00138 RSFace* face2,
00139 const TVector3<double>& center_of_torus,
00140 const double& radius_of_torus,
00141 const TAngle<double>& angle,
00142 const TCircle3<double>& circle1,
00143 const TCircle3<double>& circle2,
00144 const TVector3<double>& intersection_point1,
00145 const TVector3<double>& intersection_point2,
00146 bool singular,
00147 Index index)
00148 ;
00149
00154 virtual ~RSEdge()
00155 ;
00156
00158
00161
00168 void set(const RSEdge& rsedge, bool deep = false)
00169 ;
00170
00176 RSEdge& operator = (const RSEdge& rsedge)
00177 ;
00178
00196 void set(RSVertex* vertex0,
00197 RSVertex* vertex1,
00198 RSFace* face0,
00199 RSFace* face1,
00200 const TVector3<double>& center_of_torus,
00201 const double& radius_of_torus,
00202 const TAngle<double>& angle,
00203 const TCircle3<double>& circle0,
00204 const TCircle3<double>& circle1,
00205 const TVector3<double>& intersection_point0,
00206 const TVector3<double>& intersection_point1,
00207 bool singular,
00208 Index index)
00209 ;
00210
00212
00215
00221 void setCenterOfTorus(const TVector3<double>& center)
00222 ;
00223
00229 TVector3<double> getCenterOfTorus() const
00230 ;
00231
00237 void setMajorRadiusOfTorus(const double& radius)
00238 ;
00239
00245 double getMajorRadiusOfTorus() const
00246 ;
00247
00253 void setAngle(const TAngle<double>& angle)
00254 ;
00255
00261 TAngle<double> getAngle() const
00262 ;
00263
00271 void setContactCircle(Position i, const TCircle3<double>& circle)
00272 ;
00273
00282 TCircle3<double> getContactCircle(Position i) const
00283 ;
00284
00291 void setIntersectionPoint(Position i, const TVector3<double>& point)
00292 ;
00293
00302 TVector3<double> getIntersectionPoint(Position i) const
00303 throw(Exception::GeneralException);
00304
00307 void setSingular(bool singular)
00308 ;
00309
00311
00312
00316
00321 virtual bool operator == (const RSEdge& rsedge) const
00322 ;
00323
00328 virtual bool operator != (const RSEdge& rsedge) const
00329 ;
00330
00335 virtual bool operator *=(const RSEdge& rsedge) const
00336 ;
00337
00342 bool isSingular() const
00343 ;
00344
00348 bool isFree() const
00349 ;
00350
00352
00353 protected:
00354
00355
00356
00358
00359
00360
00361
00362 TVector3<double> center_of_torus_;
00363
00364
00365
00366 double radius_of_torus_;
00367
00368
00369
00370 TAngle<double> angle_;
00371
00372
00373 TCircle3<double> circle0_;
00374
00375
00376 TCircle3<double> circle1_;
00377
00378
00379
00380 TVector3<double> intersection_point0_;
00381
00382
00383
00384 TVector3<double> intersection_point1_;
00385
00386
00387 bool singular_;
00388
00390
00391 };
00392
00396
00399 BALL_EXPORT std::ostream& operator << (std::ostream& s, const RSEdge& rsedge);
00400
00402
00403
00404
00405 }
00406
00407 #endif // BALL_STRUCTURE_RSEDGE_H