RSEdge.h

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