BALL
1.4.1
|
00001 // -*- Mode: C++; tab-width: 2; -*- 00002 // vi: set ts=2: 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 /*_ @name Attributes 00354 */ 00356 00357 /*_ The center of the torus described by the probe when ir rolls over 00358 the RSEdge 00359 */ 00360 TVector3<double> center_of_torus_; 00361 /*_ The major radius of the torus described by the probe when ir rolls 00362 over the RSEdge 00363 */ 00364 double radius_of_torus_; 00365 /*_ The rotation angle between the starting and ending position of the 00366 probe sphere when it rolls over the RSEdge 00367 */ 00368 TAngle<double> angle_; 00369 /*_ The contact circle of the probe sphere with the first RSVertex 00370 */ 00371 TCircle3<double> circle0_; 00372 /*_ The contact circle of the probe sphere with the second RSVertex 00373 */ 00374 TCircle3<double> circle1_; 00375 /*_ The intersection point of the probe sphere with the RSEdge near to 00376 the first RSVertex (in singular case). 00377 */ 00378 TVector3<double> intersection_point0_; 00379 /*_ The intersection point of the probe sphere with the RSEdge near to 00380 the second RSVertex (in singular case). 00381 */ 00382 TVector3<double> intersection_point1_; 00383 /*_ singular 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 } // namespace BALL 00404 00405 #endif // BALL_STRUCTURE_RSEDGE_H