BALL
1.4.1
|
00001 // -*- Mode: C++; tab-width: 2; -*- 00002 // vi: set ts=2: 00003 // 00004 00005 #ifndef BALL_STRUCTURE_SESEDGE_H 00006 #define BALL_STRUCTURE_SESEDGE_H 00007 00008 #ifndef BALL_STRUCTURE_GRAPHEDGE_H 00009 # include <BALL/STRUCTURE/graphEdge.h> 00010 #endif 00011 00012 #ifndef BALL_STRUCTURE_RSEDGE_H 00013 # include <BALL/STRUCTURE/RSEdge.h> 00014 #endif 00015 00016 #ifndef BALL_MATHS_CIRCLE3_H 00017 # include <BALL/MATHS/circle3.h> 00018 #endif 00019 00020 namespace BALL 00021 { 00022 class SESFace; 00023 class SESVertex; 00024 class SolventExcludedSurface; 00025 class TriangulatedSES; 00026 class SESComputer; 00027 class SESSingularityCleaner; 00028 class SESTriangulator; 00029 00033 class BALL_EXPORT SESEdge : public GraphEdge< SESVertex,SESEdge,SESFace > 00034 { 00035 public: 00036 00048 friend class SESFace; 00049 friend class SESVertex; 00050 friend class SolventExcludedSurface; 00051 friend class SESComputer; 00052 friend class SESSingularityCleaner; 00053 friend class TriangulatedSES; 00054 friend class SESTriangulator; 00055 00056 BALL_CREATE(SESEdge) 00057 00058 00061 00067 enum Type 00068 { 00069 TYPE_CONCAVE = 0, 00070 TYPE_CONVEX = 1, 00071 TYPE_SINGULAR = 2 00072 }; 00073 00074 00076 00079 00083 SESEdge() 00084 ; 00085 00093 SESEdge(const SESEdge& sesedge, bool deep = false) 00094 ; 00095 00107 SESEdge 00108 (SESVertex* vertex0, 00109 SESVertex* vertex1, 00110 SESFace* face0, 00111 SESFace* face1, 00112 const TCircle3<double>& circle, 00113 RSEdge* rsedge, 00114 Type type, 00115 Index index) 00116 ; 00117 00121 virtual ~SESEdge() 00122 ; 00123 00125 00128 00135 void set(const SESEdge& sesedge, bool deep = false) 00136 ; 00137 00143 SESEdge& operator = (const SESEdge& sesedge) 00144 ; 00145 00156 void set(SESVertex* vertex0, 00157 SESVertex* vertex1, 00158 SESFace* face0, 00159 SESFace* face1, 00160 const TCircle3<double>& circle, 00161 RSEdge* rsedge, 00162 Type type, 00163 Index index) 00164 ; 00165 00167 00170 00174 void setCircle(const TCircle3<double>& center) 00175 ; 00176 00180 TCircle3<double> getCircle() const 00181 ; 00182 00186 void setRSEdge(RSEdge* rsedge) 00187 ; 00188 00192 RSEdge* getRSEdge() const 00193 ; 00194 00198 void setType(Type type) 00199 ; 00200 00204 Type getType() const 00205 ; 00206 00208 00211 00216 virtual bool operator == (const SESEdge& sesedge) const 00217 ; 00218 00223 virtual bool operator != (const SESEdge& sesedge) const 00224 ; 00225 00229 virtual bool operator *= (const SESEdge&) const 00230 ; 00231 00236 bool isFree() const 00237 ; 00238 00240 00241 protected: 00242 00243 /*_ @name Attributes 00244 */ 00246 00247 /*_ The circle on which the SESEdge lies. 00248 */ 00249 TCircle3<double> circle_; 00250 /*_ A pointer to the corresponding RSEdge. 00251 */ 00252 RSEdge* rsedge_; 00253 /*_ The type of the SESEdge. 00254 */ 00255 //int type; 00256 Type type_; 00257 00259 }; 00260 00264 00267 BALL_EXPORT std::ostream& operator << (std::ostream& s, const SESEdge& sesedge); 00268 00270 00271 00272 } // namespace BALL 00273 00274 #endif // BALL_STRUCTURE_SESEDGE_H