BALL  1.4.2
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Groups Pages
SESFace.h
Go to the documentation of this file.
1 // -*- Mode: C++; tab-width: 2; -*-
2 // vi: set ts=2:
3 //
4 
5 #ifndef BALL_STRUCTURE_SESFACE_H
6 #define BALL_STRUCTURE_SESFACE_H
7 
8 #ifndef BALL_STRUCTURE_GRAPHFACE_H
10 #endif
11 
12 #ifndef BALL_STRUCTURE_RSEDGE_H
13 # include <BALL/STRUCTURE/RSEdge.h>
14 #endif
15 
16 #ifndef BALL_STRUCTURE_RSFACE_H
17 # include <BALL/STRUCTURE/RSFace.h>
18 #endif
19 
20 #ifndef BALL_STRUCTURE_RSVERTEX_H
21 # include <BALL/STRUCTURE/RSVertex.h>
22 #endif
23 
24 namespace BALL
25 {
26  class SESEdge;
27  class SESVertex;
28  class SolventExcludedSurface;
29  class TriangulatedSES;
30  class SESComputer;
31  class SESSingularityCleaner;
32  class SESTriangulator;
33 
37  class BALL_EXPORT SESFace : public GraphFace< SESVertex,SESEdge,SESFace >
38  {
39  public:
40 
52  friend class SESEdge;
53  friend class SESVertex;
54  friend class SolventExcludedSurface;
55  friend class SESComputer;
56  friend class SESSingularityCleaner;
57  friend class TriangulatedSES;
58  friend class SESTriangulator;
59 
61 
62 
65 
72  enum Type
73  {
74  TYPE_SPHERIC = 0,
75  TYPE_TORIC = 1,
76  TYPE_CONTACT = 2,
77  TYPE_TORIC_SINGULAR = 3
78  };
79 
81 
84 
88  SESFace()
89  ;
90 
98  SESFace(const SESFace& sesface, bool deep = false)
99  ;
100 
108  SESFace
109  (Type type,
110  RSVertex* rsvertex,
111  RSEdge* rsedge,
112  RSFace* rsface)
113  ;
114 
118  virtual ~SESFace()
119  ;
120 
122 
125 
132  void set(const SESFace& sesface, bool deep = false)
133  ;
134 
140  SESFace& operator = (const SESFace& sesface)
141  ;
142 
146  void setType(Type type)
147  ;
148 
152  Type getType() const
153  ;
154 
158  void setRSVertex(RSVertex* rsvertex)
159  ;
160 
164  RSVertex* getRSVertex() const
165  ;
166 
170  void setRSEdge(RSEdge* rsedge)
171  ;
172 
176  RSEdge* getRSEdge() const
177  ;
178 
182  void setRSFace(RSFace* rsface)
183  ;
184 
188  RSFace* getRSFace() const
189  ;
190 
192 
195 
198  void normalize(bool singular)
199  ;
200 
202 
205 
209  virtual bool operator == (const SESFace&) const
210  ;
211 
215  virtual bool operator != (const SESFace&) const
216  ;
217 
221  virtual bool operator *= (const SESFace&) const
222  ;
223 
230  bool isNeighbouredTo(SESFace* face) const
231  ;
232 
237  bool isFree() const
238  ;
239 
244  bool hasSingularEdges() const
245  ;
246 
248 
249  private:
250 
251  void normalizeNonSingularToricFace_()
252  ;
253 
254  void normalizeSingularToricFace_()
255  ;
256 
257  void findTriangle_
258  (bool first,
259  SESEdge*& edge0,
260  SESEdge*& edge1,
261  SESEdge*& edge2,
262  SESVertex*& vertex0,
263  SESVertex*& vertex1,
264  SESVertex*& vertex2)
265  ;
266 
267  protected:
268 
272 
273  /*_ The type of the face.
274  */
276  /*_ A pointer to the corresponding RSVertex
277  (if type_ is TYPE_CONTACT).
278  */
280  /*_ A pointer to the corresponding RSEdge
281  (if type_ is TYPE_TORIC or TYPE_TORIC_SINGULAR).
282  */
284  /*_ A pointer to the corresponding RSFace
285  (if type_ is TYPE_SPHERIC).
286  */
288 
290  };
291 
295 
298  BALL_EXPORT std::ostream& operator << (std::ostream& s, const SESFace& sesface);
299 
301 
302 
303 } // namespace BALL
304 
305 #endif // BALL_STRUCTURE_SESFACE_H