00001
00002
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
00244
00246
00247
00248
00249 TCircle3<double> circle_;
00250
00251
00252 RSEdge* rsedge_;
00253
00254
00255
00256 Type type_;
00257
00259 };
00260
00264
00267 BALL_EXPORT std::ostream& operator << (std::ostream& s, const SESEdge& sesedge);
00268
00270
00271
00272 }
00273
00274 #endif // BALL_STRUCTURE_SESEDGE_H