BALL  1.4.1
RSEdge.h
Go to the documentation of this file.
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
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Defines