5#ifndef BALL_STRUCTURE_GRAPHFACE_H
6#define BALL_STRUCTURE_GRAPHFACE_H
18 template <
typename Vertex,
typename Edge,
typename Face>
21 template <
typename Vertex,
typename Edge,
typename Face>
27 template <
typename Vertex,
typename Edge,
typename Face>
87 void set(const
GraphFace<Vertex,Edge,Face>& face,
bool deep = false);
95 (const
GraphFace<Vertex,Edge,Face>& face);
150 bool getEdges(const Vertex* vertex, Edge*& edge1, Edge*& edge2) const;
160 (const Vertex* vertex1,
161 const Vertex* vertex2,
177 bool substitute(const Vertex* old_vertex, Vertex* new_vertex);
185 bool substitute(const Edge* old_edge, Edge* new_edge);
195 virtual
bool operator == (const Face& face) const;
200 virtual
bool operator != (const Face& face) const;
205 virtual
bool operator *= (const Face& face) const;
212 Vertex*
has(Vertex* vertex) const;
218 Edge*
has(Edge* edge) const;
258 template <typename Vertex, typename Edge, typename Face>
267 template <
typename Vertex,
typename Edge,
typename Face>
282 template <
typename Vertex,
typename Edge,
typename Face>
288 template <
typename Vertex,
typename Edge,
typename Face>
304 template <
typename Vertex,
typename Edge,
typename Face>
318 template <
typename Vertex,
typename Edge,
typename Face>
321 typename std::list<Vertex*>::iterator v =
vertex_.begin();
323 while ((!found) && (v !=
vertex_.end()))
325 found = (*v == vertex);
335 template <
typename Vertex,
typename Edge,
typename Face>
338 typename std::list<Edge*>::iterator e =
edge_.begin();
340 while ((!found) && (e !=
edge_.end()))
342 found = (*e == edge);
347 edge_.push_back(edge);
352 template <
typename Vertex,
typename Edge,
typename Face>
359 template <
typename Vertex,
typename Edge,
typename Face>
366 template <
typename Vertex,
typename Edge,
typename Face>
373 template <
typename Vertex,
typename Edge,
typename Face>
380 template <
typename Vertex,
typename Edge,
typename Face>
387 template <
typename Vertex,
typename Edge,
typename Face>
394 template <
typename Vertex,
typename Edge,
typename Face>
396 (
const Vertex* vertex,
402 typename std::list<Edge*>::const_iterator e =
edge_.begin();
403 while ((!found1) && (e !=
edge_.end()))
405 if (((*e)->vertex_[0] == vertex) || ((*e)->vertex_[1] == vertex))
414 while ((!found2) && (e !=
edge_.end()))
416 if (((*e)->vertex_[0] == vertex) || ((*e)->vertex_[1] == vertex))
424 return (found1 && found2);
428 template <
typename Vertex,
typename Edge,
typename Face>
430 (
const Vertex* vertex1,
431 const Vertex* vertex2,
434 typename std::list<Edge*>::const_iterator e =
edge_.begin();
436 while ((!found) && (e !=
edge_.end()))
438 if ((((*e)->vertex_[0] == vertex1) && ((*e)->vertex_[1] == vertex2)) ||
439 (((*e)->vertex_[0] == vertex2) && ((*e)->vertex_[1] == vertex1)) )
450 template <
typename Vertex,
typename Edge,
typename Face>
453 typename std::list<Edge*>::const_iterator e =
edge_.begin();
454 while (e !=
edge_.end())
466 template <
typename Vertex,
typename Edge,
typename Face>
468 (
const Vertex* old_vertex, Vertex* new_vertex)
470 typename std::list<Vertex*>::iterator v =
vertex_.begin();
473 if (*v == old_vertex)
484 template <
typename Vertex,
typename Edge,
typename Face>
486 (
const Edge* old_edge, Edge* new_edge)
488 typename std::list<Edge*>::iterator e =
edge_.begin();
489 while (e !=
edge_.end())
502 template <
typename Vertex,
typename Edge,
typename Face>
509 template <
typename Vertex,
typename Edge,
typename Face>
516 template <
typename Vertex,
typename Edge,
typename Face>
523 template <
typename Vertex,
typename Edge,
typename Face>
526 typename std::list<Vertex*>::const_iterator v =
vertex_.begin();
539 template <
typename Vertex,
typename Edge,
typename Face>
542 typename std::list<Edge*>::const_iterator e =
edge_.begin();
543 while (e !=
edge_.end())
555 template <
typename Vertex,
typename Edge,
typename Face>
563 template <
typename Vertex,
typename Edge,
typename Face>
571 template <
typename Vertex,
typename Edge,
typename Face>
579 template <
typename Vertex,
typename Edge,
typename Face>
587 template <
typename Vertex,
typename Edge,
typename Face>
591 return edge_.begin();
595 template <
typename Vertex,
typename Edge,
typename Face>
599 return edge_.begin();
603 template <
typename Vertex,
typename Edge,
typename Face>
611 template <
typename Vertex,
typename Edge,
typename Face>
623 template <
typename Vertex,
typename Edge,
typename Face>
635 friend class GraphEdge<Vertex,Edge,Face>;
656 (const
GraphTriangle<Vertex,Edge,Face>& face,
bool deep = false);
669 (Vertex* vertex1, Vertex* vertex2, Vertex* vertex3,
670 Edge* edge1, Edge* edge2, Edge* edge3,
710 (Vertex* vertex1, Vertex* vertex2, Vertex* vertex3,
711 Edge* edge1, Edge* edge2, Edge* edge3,
769 bool getEdges(const Vertex* vertex, Edge*& edge1, Edge*& edge2) const;
780 (const Vertex* vertex1,
781 const Vertex* vertex2,
808 Vertex*
third(const Vertex* v1, const Vertex* v2) const;
815 Edge*
third(const Edge* e1, const Edge* e2) const;
839 bool substitute(const Vertex* old_vertex, Vertex* new_vertex);
847 bool substitute(const Edge* old_edge, Edge* new_edge);
857 virtual
bool operator == (const Face&) const;
862 virtual
bool operator != (const Face&) const;
867 virtual
bool operator *= (const Face&) const;
874 Vertex*
has(Vertex* vertex) const;
880 Edge*
has(Edge* edge) const;
900 template <typename Vertex, typename Edge, typename Face>
913 template <
typename Vertex,
typename Edge,
typename Face>
939 template <
typename Vertex,
typename Edge,
typename Face>
941 (Vertex* vertex1, Vertex* vertex2, Vertex* vertex3,
942 Edge* edge1, Edge* edge2, Edge* edge3,
955 template <
typename Vertex,
typename Edge,
typename Face>
961 template <
typename Vertex,
typename Edge,
typename Face>
990 template <
typename Vertex,
typename Edge,
typename Face>
999 edge_[0] = face.edge_[0];
1000 edge_[1] = face.edge_[1];
1001 edge_[2] = face.edge_[2];
1008 template <
typename Vertex,
typename Edge,
typename Face>
1010 (Vertex* vertex1, Vertex* vertex2, Vertex* vertex3,
1011 Edge* edge1, Edge* edge2, Edge* edge3,
1024 template <
typename Vertex,
typename Edge,
typename Face>
1038 template <
typename Vertex,
typename Edge,
typename Face>
1052 template <
typename Vertex,
typename Edge,
typename Face>
1066 template <
typename Vertex,
typename Edge,
typename Face>
1080 template <
typename Vertex,
typename Edge,
typename Face>
1087 template <
typename Vertex,
typename Edge,
typename Face>
1094 template <
typename Vertex,
typename Edge,
typename Face>
1096 (
const Vertex* vertex,
1101 bool found1 =
false;
1102 bool found2 =
false;
1103 while ((!found1) && (i < 3))
1105 if (
edge_[i] != NULL)
1118 while ((!found2) && (i < 3))
1120 if (
edge_[i] != NULL)
1132 return (found1 && found2);
1136 template <
typename Vertex,
typename Edge,
typename Face>
1138 (
const Vertex* vertex1,
1139 const Vertex* vertex2,
1144 while ((!found) && (i < 3))
1146 if (
edge_[i] != NULL)
1163 template <
typename Vertex,
typename Edge,
typename Face>
1165 (
const Edge* edge, Edge*& similar_edge)
const
1167 if (*
edge_[0] *= *edge)
1169 similar_edge =
edge_[0];
1172 if (*
edge_[1] *= *edge)
1174 similar_edge =
edge_[1];
1177 if (*
edge_[2] *= *edge)
1179 similar_edge =
edge_[2];
1182 similar_edge = NULL;
1187 template <
typename Vertex,
typename Edge,
typename Face>
1189 (
const Vertex* vertex)
const
1202 template <
typename Vertex,
typename Edge,
typename Face>
1204 (
const Edge* edge)
const
1208 if (
edge_[i] == edge)
1217 template <
typename Vertex,
typename Edge,
typename Face>
1219 (
const Vertex* v1,
const Vertex* v2)
const
1239 template <
typename Vertex,
typename Edge,
typename Face>
1241 (
const Edge* e1,
const Edge* e2)
const
1261 template <
typename Vertex,
typename Edge,
typename Face>
1263 (
const Vertex* vertex)
const
1277 template <
typename Vertex,
typename Edge,
typename Face>
1279 (
const Edge* edge)
const
1283 if ((
vertex_[i] != edge->vertex_[0]) &&
1284 (
vertex_[i] != edge->vertex_[1]) )
1293 template <
typename Vertex,
typename Edge,
typename Face>
1295 (
const Vertex* old_vertex, Vertex* new_vertex)
1309 template <
typename Vertex,
typename Edge,
typename Face>
1311 (
const Edge* old_edge, Edge* new_edge)
1315 if (
edge_[i] == old_edge)
1317 edge_[i] = new_edge;
1325 template <
typename Vertex,
typename Edge,
typename Face>
1332 template <
typename Vertex,
typename Edge,
typename Face>
1339 template <
typename Vertex,
typename Edge,
typename Face>
1346 template <
typename Vertex,
typename Edge,
typename Face>
1365 template <
typename Vertex,
typename Edge,
typename Face>
1368 if (
edge_[0] == edge)
1372 if (
edge_[1] == edge)
1376 if (
edge_[2] == edge)
void set(const GraphFace< SASVertex, SASEdge, SASFace > &face, bool deep=false)
VertexIterator endVertex()
SASVertex * has(SASVertex *vertex) const
bool getEdges(const SASVertex *vertex, SASEdge *&edge1, SASEdge *&edge2) const
std::list< Edge * > edge_
Position numberOfEdges() const
virtual bool operator!=(const Face &face) const
std::list< Vertex * >::iterator VertexIterator
void insert(SASVertex *vertex)
std::list< Vertex * > vertex_
SASEdge * getSimilarEdge(const SASEdge *edge) const
bool substitute(const SASVertex *old_vertex, SASVertex *new_vertex)
virtual bool operator==(const Face &face) const
Position numberOfVertices() const
std::list< Edge * >::const_iterator ConstEdgeIterator
std::list< Edge * >::iterator EdgeIterator
virtual bool operator*=(const Face &face) const
bool getEdge(const SASVertex *vertex1, const SASVertex *vertex2, SASEdge *&edge) const
void setIndex(Index index)
std::list< Vertex * >::const_iterator ConstVertexIterator
VertexIterator beginVertex()
void remove(SASVertex *vertex)
bool getEdges(const RSVertex *vertex, RSEdge *&edge1, RSEdge *&edge2) const
bool substitute(const RSVertex *old_vertex, RSVertex *new_vertex)
RSVertex * getOppositeVertex(const RSEdge *edge) const
void setIndex(Index index)
virtual bool operator*=(const Face &) const
virtual bool operator!=(const Face &) const
RSEdge * getEdge(Position i) const
RSEdge * getOppositeEdge(const RSVertex *vertex) const
Index getSimilarEdge(const RSEdge *edge, RSEdge *&similar_edge) const
void set(const GraphTriangle< RSVertex, RSEdge, RSFace > &face, bool deep=false)
virtual bool operator==(const Face &) const
Index getRelativeIndex(const RSVertex *vertex) const
RSVertex * getVertex(Position i) const
void setVertex(Position i, RSVertex *vertex)
void setEdge(Position i, RSEdge *edge)
RSVertex * has(RSVertex *vertex) const
RSVertex * third(const RSVertex *v1, const RSVertex *v2) const
#define BALL_CREATE(name)