Rocstar  1.0
Rocstar multiphysics simulation application
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
Halfedge_data_structure_decorator< _HDS > Class Template Reference

#include <Halfedge_data_structure_decorator.h>

Public Types

typedef _HDS HDS
 
typedef _HDS Halfedge_data_structure
 
typedef _HDS::Vertex Vertex
 
typedef _HDS::Halfedge Halfedge
 
typedef _HDS::Facet Facet
 
typedef _HDS::Point Point
 
typedef _HDS::Supports_vertex_point Supports_vertex_point
 
typedef
_HDS::Supports_vertex_halfedge 
Supports_vertex_halfedge
 
typedef
_HDS::Supports_halfedge_prev 
Supports_halfedge_prev
 
typedef
_HDS::Supports_halfedge_vertex 
Supports_halfedge_vertex
 
typedef
_HDS::Supports_halfedge_facet 
Supports_halfedge_facet
 
typedef
_HDS::Supports_facet_halfedge 
Supports_facet_halfedge
 
typedef _HDS::Supports_removal Supports_removal
 

Public Member Functions

Halfedgeget_vertex_halfedge (Vertex *v) const
 
Vertexget_vertex (Halfedge *h) const
 
Halfedgeget_prev (Halfedge *h) const
 
Halfedgefind_prev (Halfedge *h) const
 
Halfedgefind_prev_around_vertex (Halfedge *h) const
 
Facetget_facet (Halfedge *h) const
 
Halfedgeget_facet_halfedge (Facet *f) const
 
const Halfedgeget_vertex_halfedge (const Vertex *v) const
 
const Vertexget_vertex (const Halfedge *h) const
 
const Halfedgeget_prev (const Halfedge *h) const
 
const Halfedgefind_prev (const Halfedge *h) const
 
const Halfedgefind_prev_around_vertex (const Halfedge *h) const
 
const Facetget_facet (const Halfedge *h) const
 
const Halfedgeget_facet_halfedge (const Facet *f) const
 
Vertexnew_vertex (HDS &hds) const
 
Vertexnew_vertex (HDS &hds, const Point &p) const
 
Vertexnew_vertex (HDS &hds, const Vertex *v) const
 
Facetnew_facet (HDS &hds) const
 
Facetnew_facet (HDS &hds, const Facet *f) const
 
Halfedgecreate_loop (HDS &hds)
 
Halfedgecreate_segment (HDS &hds)
 
void delete_vertex (HDS &hds, Vertex *v)
 
void delete_facet (HDS &hds, Facet *f)
 
void close_tip (Halfedge *h) const
 
void close_tip (Halfedge *h, Vertex *v) const
 
void insert_tip (Halfedge *h, Halfedge *v) const
 
void remove_tip (Halfedge *h) const
 
void insert_halfedge (Halfedge *h, Halfedge *f) const
 
void remove_halfedge (Halfedge *h) const
 
void set_vertex_in_vertex_loop (Halfedge *, Vertex *, Tag_false)
 
void set_vertex_in_vertex_loop (Halfedge *h, Vertex *v, Tag_true)
 
void set_vertex_in_vertex_loop (Halfedge *h, Vertex *v)
 
void set_facet_in_facet_loop (Halfedge *, Facet *, Tag_false)
 
void set_facet_in_facet_loop (Halfedge *h, Facet *f, Tag_true)
 
void set_facet_in_facet_loop (Halfedge *h, Facet *f)
 
Halfedgesplit_facet (HDS &hds, Halfedge *h, Halfedge *g)
 
Halfedgejoin_facet (HDS &hds, Halfedge *h)
 
Halfedgesplit_vertex (HDS &hds, Halfedge *h, Halfedge *g)
 
Halfedgejoin_vertex (HDS &hds, Halfedge *h)
 
Halfedgesplit_loop (HDS &hds, Halfedge *h, Halfedge *i, Halfedge *j)
 
Halfedgejoin_loop (HDS &hds, Halfedge *h, Halfedge *g)
 
Halfedgemake_hole (HDS &hds, Halfedge *h)
 
Halfedgefill_hole (HDS &hds, Halfedge *h)
 
Halfedgeadd_facet_to_border (HDS &hds, Halfedge *h, Halfedge *g)
 
Halfedgeflip_edge (Halfedge *h)
 
void erase_facet (HDS &hds, Halfedge *h)
 
void erase_connected_component (HDS &hds, Halfedge *h)
 
void set_point (Vertex *v, const Point &p) const
 
void set_point (Halfedge *h, const Point &p) const
 
void set_vertex_halfedge (Vertex *v, Halfedge *g) const
 
void set_vertex_halfedge (Halfedge *h) const
 
void set_vertex (Halfedge *h, Vertex *v) const
 
void set_prev (Halfedge *h, Halfedge *g) const
 
void set_facet (Halfedge *h, Facet *f) const
 
void set_facet_halfedge (Facet *f, Halfedge *g) const
 
void set_facet_halfedge (Halfedge *h) const
 
Halfedgeget_vertex_halfedge (Vertex *, Tag_false) const
 
Halfedgeget_vertex_halfedge (Vertex *v, Tag_true) const
 
Vertexget_vertex (Halfedge *, Tag_false) const
 
Vertexget_vertex (Halfedge *h, Tag_true) const
 
Halfedgeget_prev (Halfedge *, Tag_false) const
 
Halfedgeget_prev (Halfedge *h, Tag_true) const
 
Halfedgefind_prev (Halfedge *h, Tag_true) const
 
Halfedgefind_prev (Halfedge *h, Tag_false) const
 
Halfedgefind_prev_around_vertex (Halfedge *h, Tag_true) const
 
Halfedgefind_prev_around_vertex (Halfedge *h, Tag_false) const
 
Facetget_facet (Halfedge *, Tag_false) const
 
Facetget_facet (Halfedge *h, Tag_true) const
 
Halfedgeget_facet_halfedge (Facet *, Tag_false) const
 
Halfedgeget_facet_halfedge (Facet *f, Tag_true) const
 
const Halfedgeget_vertex_halfedge (const Vertex *, Tag_false) const
 
const Halfedgeget_vertex_halfedge (const Vertex *v, Tag_true) const
 
const Vertexget_vertex (const Halfedge *, Tag_false) const
 
const Vertexget_vertex (const Halfedge *h, Tag_true) const
 
const Halfedgeget_prev (const Halfedge *, Tag_false) const
 
const Halfedgeget_prev (const Halfedge *h, Tag_true) const
 
const Halfedgefind_prev (const Halfedge *h, Tag_true) const
 
const Halfedgefind_prev (const Halfedge *h, Tag_false) const
 
const Halfedgefind_prev_around_vertex (const Halfedge *h, Tag_true) const
 
const Halfedgefind_prev_around_vertex (const Halfedge *h, Tag_false) const
 
const Facetget_facet (const Halfedge *, Tag_false) const
 
const Facetget_facet (const Halfedge *h, Tag_true) const
 
const Halfedgeget_facet_halfedge (const Facet *, Tag_false) const
 
const Halfedgeget_facet_halfedge (const Facet *f, Tag_true) const
 
Vertexnew_vertex (HDS &, Tag_false) const
 
Vertexnew_vertex (HDS &hds, Tag_true) const
 
Vertexnew_vertex (HDS &, const Point &, Tag_false) const
 
Vertexnew_vertex (HDS &hds, const Point &p, Tag_true) const
 
Vertexnew_vertex (HDS &, const Vertex *, Tag_false) const
 
Vertexnew_vertex (HDS &hds, const Vertex *v, Tag_true) const
 
Facetnew_facet (HDS &, Tag_false) const
 
Facetnew_facet (HDS &hds, Tag_true) const
 
Facetnew_facet (HDS &, const Facet *, Tag_false) const
 
Facetnew_facet (HDS &hds, const Facet *f, Tag_true) const
 
void delete_vertex (HDS &, Vertex *, Tag_false)
 
void delete_vertex (HDS &hds, Vertex *v, Tag_true)
 
void delete_facet (HDS &, Facet *, Tag_false)
 
void delete_facet (HDS &hds, Facet *f, Tag_true)
 
void set_point (Vertex *, const Point &, Tag_false) const
 
void set_point (Vertex *v, const Point &p, Tag_true) const
 
void set_point (Halfedge *, const Point &, Tag_false) const
 
void set_point (Halfedge *h, const Point &p, Tag_true) const
 
void set_vertex_halfedge (Vertex *, Halfedge *, Tag_false) const
 
void set_vertex_halfedge (Vertex *v, Halfedge *g, Tag_true) const
 
void set_vertex_halfedge (Halfedge *, Halfedge *, Tag_false) const
 
void set_vertex_halfedge (Halfedge *h, Halfedge *g, Tag_true) const
 
void set_vertex (Halfedge *, Vertex *, Tag_false) const
 
void set_vertex (Halfedge *h, Vertex *v, Tag_true) const
 
void set_prev (Halfedge *, Halfedge *, Tag_false) const
 
void set_prev (Halfedge *h, Halfedge *g, Tag_true) const
 
void set_facet (Halfedge *, Facet *, Tag_false) const
 
void set_facet (Halfedge *h, Facet *f, Tag_true) const
 
void set_facet_halfedge (Facet *, Halfedge *, Tag_false) const
 
void set_facet_halfedge (Facet *f, Halfedge *g, Tag_true) const
 
void set_facet_halfedge (Halfedge *, Halfedge *, Tag_false) const
 
void set_facet_halfedge (Halfedge *h, Halfedge *g, Tag_true) const
 
bool normalized_border_is_valid (const _HDS &hds, bool verb=false) const
 
bool is_valid (const _HDS &hds, bool verb=false, int level=0) const
 
void reorient_facet (Halfedge *first)
 
void inside_out (_HDS &hds, Tag_false)
 
void inside_out (_HDS &hds, Tag_true)
 
void inside_out (_HDS &hds)
 

Protected Types

typedef std::vector< Halfedge * > HVector
 

Protected Member Functions

void make_hole (HDS &, Halfedge *, Tag_false)
 
void fill_hole (HDS &, Halfedge *, Tag_false)
 
void make_hole (HDS &hds, Halfedge *h, Tag_true)
 
void fill_hole (HDS &hds, Halfedge *h, Tag_true)
 
void erase_facet (HDS &, Halfedge *, Tag_false)
 
void erase_facet (HDS &hds, Halfedge *h, Tag_true)
 
void erase_connected_component_vertex (HDS &hds, Halfedge *h, Tag_false)
 
void erase_connected_component_vertex (HDS &hds, Halfedge *h, Tag_true)
 
void erase_connected_component_vertex (HDS &hds, Halfedge *h)
 
void erase_connected_component_face_cycle (HDS &hds, Halfedge *h, HVector &stack)
 

Detailed Description

template<class _HDS>
class Halfedge_data_structure_decorator< _HDS >

Definition at line 69 of file Halfedge_data_structure_decorator.h.

Member Typedef Documentation

typedef _HDS::Facet Facet

Definition at line 87 of file Halfedge_data_structure_decorator.h.

typedef _HDS::Halfedge Halfedge

Definition at line 86 of file Halfedge_data_structure_decorator.h.

Definition at line 84 of file Halfedge_data_structure_decorator.h.

typedef _HDS HDS

Definition at line 83 of file Halfedge_data_structure_decorator.h.

typedef std::vector<Halfedge*> HVector
protected

Definition at line 789 of file Halfedge_data_structure_decorator.h.

typedef _HDS::Point Point

Definition at line 90 of file Halfedge_data_structure_decorator.h.

typedef _HDS::Supports_facet_halfedge Supports_facet_halfedge

Definition at line 106 of file Halfedge_data_structure_decorator.h.

typedef _HDS::Supports_halfedge_facet Supports_halfedge_facet

Definition at line 104 of file Halfedge_data_structure_decorator.h.

typedef _HDS::Supports_halfedge_prev Supports_halfedge_prev

Definition at line 100 of file Halfedge_data_structure_decorator.h.

typedef _HDS::Supports_halfedge_vertex Supports_halfedge_vertex

Definition at line 102 of file Halfedge_data_structure_decorator.h.

typedef _HDS::Supports_removal Supports_removal

Definition at line 108 of file Halfedge_data_structure_decorator.h.

typedef _HDS::Supports_vertex_halfedge Supports_vertex_halfedge

Definition at line 98 of file Halfedge_data_structure_decorator.h.

typedef _HDS::Supports_vertex_point Supports_vertex_point

Definition at line 96 of file Halfedge_data_structure_decorator.h.

typedef _HDS::Vertex Vertex

Definition at line 85 of file Halfedge_data_structure_decorator.h.

Member Function Documentation

Halfedge* add_facet_to_border ( HDS hds,
Halfedge h,
Halfedge g 
)
inline

Definition at line 671 of file Halfedge_data_structure_decorator.h.

References CGAL_precondition, Halfedge_data_structure_decorator< _HDS >::fill_hole(), Halfedge_data_structure_decorator< _HDS >::insert_tip(), and Halfedge::is_border().

671  {
672  // creates a new facet from `hds' within the hole incident to h
673  // and g by connecting the tip of g with the tip of h with a new
674  // halfedge from `hds' and filling this separated part of the hole
675  // with a new facet from `hds'. Returns the new halfedge incident
676  // to the new facet. Precondition: `h != NULL', `g != NULL',
677  // `h->is_border()', `g->is_border()' and g can be reached along
678  // the same hole starting with h.
679  CGAL_precondition( h != 0);
680  CGAL_precondition( g != 0);
683  Halfedge* hh = hds.new_edge();
684  insert_tip( hh, h);
685  insert_tip( hh->opposite(), g);
686  fill_hole( hds, g);
687  return hh;
688  }
This class encapsulate a halfedge over a window manifold.
Definition: Manifold_2.h:446
#define CGAL_precondition(EX)
Definition: assertions.h:147
void insert_tip(Halfedge *h, Halfedge *v) const
void fill_hole(HDS &, Halfedge *, Tag_false)
bool is_border() const
Is the edge a border edge?
Definition: Manifold_2.h:476

Here is the call graph for this function:

void close_tip ( Halfedge h) const
inline

Definition at line 293 of file Halfedge_data_structure_decorator.h.

References Halfedge::opposite(), and Halfedge_data_structure_decorator< _HDS >::set_prev().

Referenced by Halfedge_data_structure_decorator< _HDS >::split_loop().

293  {
294  // makes `h->opposite()' the successor of h.
295  h->set_next( h->opposite());
296  set_prev( h->opposite(), h);
297  }
Halfedge opposite() const
Get the ID of the opposite edge of a given edge.
Definition: Manifold_2.h:454
void set_prev(Halfedge *h, Halfedge *g) const

Here is the call graph for this function:

Here is the caller graph for this function:

void close_tip ( Halfedge h,
Vertex v 
) const
inline

Definition at line 299 of file Halfedge_data_structure_decorator.h.

References Halfedge::opposite(), Halfedge_data_structure_decorator< _HDS >::set_prev(), and Halfedge_data_structure_decorator< _HDS >::set_vertex().

299  {
300  // makes `h->opposite()' the successor of h and sets the vertex to
301  // v.
302  h->set_next( h->opposite());
303  set_prev( h->opposite(), h);
304  set_vertex( h, v);
305  }
Halfedge opposite() const
Get the ID of the opposite edge of a given edge.
Definition: Manifold_2.h:454
*********************************************************************Illinois Open Source License ****University of Illinois NCSA **Open Source License University of Illinois All rights reserved ****Developed free of to any person **obtaining a copy of this software and associated documentation to deal with the Software without including without limitation the rights to and or **sell copies of the and to permit persons to whom the **Software is furnished to do subject to the following this list of conditions and the following disclaimers ****Redistributions in binary form must reproduce the above **copyright this list of conditions and the following **disclaimers in the documentation and or other materials **provided with the distribution ****Neither the names of the Center for Simulation of Advanced the University of nor the names of its **contributors may be used to endorse or promote products derived **from this Software without specific prior written permission ****THE SOFTWARE IS PROVIDED AS WITHOUT WARRANTY OF ANY **EXPRESS OR INCLUDING BUT NOT LIMITED TO THE WARRANTIES **OF FITNESS FOR A PARTICULAR PURPOSE AND **NONINFRINGEMENT IN NO EVENT SHALL THE CONTRIBUTORS OR **COPYRIGHT HOLDERS BE LIABLE FOR ANY DAMAGES OR OTHER WHETHER IN AN ACTION OF TORT OR **ARISING OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE **USE OR OTHER DEALINGS WITH THE SOFTWARE v
Definition: roccomf90.h:20
void set_vertex(Halfedge *h, Vertex *v) const
void set_prev(Halfedge *h, Halfedge *g) const

Here is the call graph for this function:

Halfedge* create_loop ( HDS hds)
inline

Definition at line 239 of file Halfedge_data_structure_decorator.h.

References Halfedge_data_structure_decorator< _HDS >::get_vertex(), Halfedge_data_structure_decorator< _HDS >::new_facet(), Halfedge_data_structure_decorator< _HDS >::new_vertex(), Halfedge::opposite(), Halfedge_data_structure_decorator< _HDS >::set_facet(), Halfedge_data_structure_decorator< _HDS >::set_facet_halfedge(), Halfedge_data_structure_decorator< _HDS >::set_prev(), Halfedge_data_structure_decorator< _HDS >::set_vertex(), and Halfedge_data_structure_decorator< _HDS >::set_vertex_halfedge().

239  {
240  // returns a halfedge from a newly created loop in `hds'
241  // consisting of a single closed edge, one vertex and two facets
242  // (if supported respectively).
243  Halfedge* h = hds.new_edge();
244  h->set_next( h);
245  h->opposite()->set_next( h->opposite());
246  set_prev( h, h);
247  set_prev( h->opposite(), h->opposite());
248  set_vertex( h, new_vertex(hds));
249  set_vertex( h->opposite(), get_vertex(h));
250  set_facet( h, new_facet(hds));
251  set_facet( h->opposite(), new_facet(hds));
252  set_facet_halfedge( h);
255  return h;
256  }
Halfedge opposite() const
Get the ID of the opposite edge of a given edge.
Definition: Manifold_2.h:454
This class encapsulate a halfedge over a window manifold.
Definition: Manifold_2.h:446
void set_facet_halfedge(Facet *f, Halfedge *g) const
void set_facet(Halfedge *h, Facet *f) const
void set_vertex_halfedge(Vertex *v, Halfedge *g) const
void set_vertex(Halfedge *h, Vertex *v) const
void set_prev(Halfedge *h, Halfedge *g) const

Here is the call graph for this function:

Halfedge* create_segment ( HDS hds)
inline

Definition at line 258 of file Halfedge_data_structure_decorator.h.

References Halfedge_data_structure_decorator< _HDS >::get_facet(), Halfedge_data_structure_decorator< _HDS >::new_facet(), Halfedge_data_structure_decorator< _HDS >::new_vertex(), Halfedge::opposite(), Halfedge_data_structure_decorator< _HDS >::set_facet(), Halfedge_data_structure_decorator< _HDS >::set_facet_halfedge(), Halfedge_data_structure_decorator< _HDS >::set_prev(), Halfedge_data_structure_decorator< _HDS >::set_vertex(), and Halfedge_data_structure_decorator< _HDS >::set_vertex_halfedge().

258  {
259  // returns a halfedge from a newly created segment in `hds'
260  // consisting of a single open edge, two vertices and one facet
261  // (if supported respectively).
262  Halfedge* h = hds.new_edge();
263  h->set_next( h->opposite());
264  h->opposite()->set_next( h);
265  set_prev( h, h->opposite());
266  set_prev( h->opposite(), h);
267  set_vertex( h, new_vertex(hds));
268  set_vertex( h->opposite(), new_vertex(hds));
269  set_facet( h, new_facet(hds));
270  set_facet( h->opposite(), get_facet(h));
271  set_facet_halfedge( h);
274  return h;
275  }
Halfedge opposite() const
Get the ID of the opposite edge of a given edge.
Definition: Manifold_2.h:454
This class encapsulate a halfedge over a window manifold.
Definition: Manifold_2.h:446
void set_facet_halfedge(Facet *f, Halfedge *g) const
void set_facet(Halfedge *h, Facet *f) const
void set_vertex_halfedge(Vertex *v, Halfedge *g) const
void set_vertex(Halfedge *h, Vertex *v) const
void set_prev(Halfedge *h, Halfedge *g) const

Here is the call graph for this function:

void delete_facet ( HDS hds,
Facet f 
)
inline

Definition at line 285 of file Halfedge_data_structure_decorator.h.

Referenced by Halfedge_data_structure_decorator< _HDS >::erase_connected_component_face_cycle(), Halfedge_data_structure_decorator< _HDS >::join_facet(), and Halfedge_data_structure_decorator< _HDS >::join_loop().

285  {
286  // removes the facet f if facets are supported.
288  }
_HDS::Supports_halfedge_facet Supports_halfedge_facet

Here is the caller graph for this function:

void delete_facet ( HDS ,
Facet ,
Tag_false   
)
inline

Definition at line 1047 of file Halfedge_data_structure_decorator.h.

1047 {}
void delete_facet ( HDS hds,
Facet f,
Tag_true   
)
inline

Definition at line 1048 of file Halfedge_data_structure_decorator.h.

1048  {
1049  hds.delete_facet( f);
1050  }
void delete_vertex ( HDS hds,
Vertex v 
)
inline

Definition at line 280 of file Halfedge_data_structure_decorator.h.

Referenced by Halfedge_data_structure_decorator< _HDS >::erase_facet(), Halfedge_data_structure_decorator< _HDS >::join_loop(), and Halfedge_data_structure_decorator< _HDS >::join_vertex().

280  {
281  // removes the vertex v if vertices are supported.
283  }
*********************************************************************Illinois Open Source License ****University of Illinois NCSA **Open Source License University of Illinois All rights reserved ****Developed free of to any person **obtaining a copy of this software and associated documentation to deal with the Software without including without limitation the rights to and or **sell copies of the and to permit persons to whom the **Software is furnished to do subject to the following this list of conditions and the following disclaimers ****Redistributions in binary form must reproduce the above **copyright this list of conditions and the following **disclaimers in the documentation and or other materials **provided with the distribution ****Neither the names of the Center for Simulation of Advanced the University of nor the names of its **contributors may be used to endorse or promote products derived **from this Software without specific prior written permission ****THE SOFTWARE IS PROVIDED AS WITHOUT WARRANTY OF ANY **EXPRESS OR INCLUDING BUT NOT LIMITED TO THE WARRANTIES **OF FITNESS FOR A PARTICULAR PURPOSE AND **NONINFRINGEMENT IN NO EVENT SHALL THE CONTRIBUTORS OR **COPYRIGHT HOLDERS BE LIABLE FOR ANY DAMAGES OR OTHER WHETHER IN AN ACTION OF TORT OR **ARISING OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE **USE OR OTHER DEALINGS WITH THE SOFTWARE v
Definition: roccomf90.h:20
_HDS::Supports_halfedge_vertex Supports_halfedge_vertex

Here is the caller graph for this function:

void delete_vertex ( HDS ,
Vertex ,
Tag_false   
)
inline

Definition at line 1042 of file Halfedge_data_structure_decorator.h.

1042 {}
void delete_vertex ( HDS hds,
Vertex v,
Tag_true   
)
inline

Definition at line 1043 of file Halfedge_data_structure_decorator.h.

1043  {
1044  hds.delete_vertex( v);
1045  }
*********************************************************************Illinois Open Source License ****University of Illinois NCSA **Open Source License University of Illinois All rights reserved ****Developed free of to any person **obtaining a copy of this software and associated documentation to deal with the Software without including without limitation the rights to and or **sell copies of the and to permit persons to whom the **Software is furnished to do subject to the following this list of conditions and the following disclaimers ****Redistributions in binary form must reproduce the above **copyright this list of conditions and the following **disclaimers in the documentation and or other materials **provided with the distribution ****Neither the names of the Center for Simulation of Advanced the University of nor the names of its **contributors may be used to endorse or promote products derived **from this Software without specific prior written permission ****THE SOFTWARE IS PROVIDED AS WITHOUT WARRANTY OF ANY **EXPRESS OR INCLUDING BUT NOT LIMITED TO THE WARRANTIES **OF FITNESS FOR A PARTICULAR PURPOSE AND **NONINFRINGEMENT IN NO EVENT SHALL THE CONTRIBUTORS OR **COPYRIGHT HOLDERS BE LIABLE FOR ANY DAMAGES OR OTHER WHETHER IN AN ACTION OF TORT OR **ARISING OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE **USE OR OTHER DEALINGS WITH THE SOFTWARE v
Definition: roccomf90.h:20
void erase_connected_component ( HDS hds,
Halfedge h 
)
inline

Definition at line 813 of file Halfedge_data_structure_decorator.h.

References Assert_compile_time_tag(), CGAL_assertion, Halfedge_data_structure_decorator< _HDS >::erase_connected_component_face_cycle(), Halfedge::next(), and Halfedge::opposite().

813  {
815  HVector stack;
816  // Algorithm: The next() pointer is used as visited tag
817  // for a graph search. If the next pointer of an halfedge
818  // or its opposite halfedge is set to 0, this edge has already
819  // been visited and must not be put on the stack again.
820  // Initializing: Cycle through the face-cycle of h and put
821  // all opposite halfedges on the stack. Put h->opposite()
822  // on the stack. Note that even if the face cycle of h looks
823  // ugly ( e.g. h->opposite() is also in the cycle), neither
824  // h nor h->opposite() will be put on the stack. If
825  // h->opposite() is in the cycle, when h will be popped from
826  // the stack it will be immediately deleted.
827  // Loop invariant: For each edge h on the stack h->opposite()->
828  // next() == NULL.
829  // Looping: For each edge h on the stack, if h->next() is
830  // not already equal to NULL, cycle through the face-cycle
831  // of h and put all opposite halfedges on the stack.
832  // Delete h.
833  // Where: Cycle through a face means: If h->facet() != NULL
834  // delete h->facet() and set all facet handles to NULL.
835  // Loop through the halfedges g around the facet, call
836  // erase_connected_component_vertex for each g, push
837  // g->opposite() on the stack if g->opposite()->next()
838  // is not already NULL. This implies that h->opposite()
839  // is not put on the stack again.
840  erase_connected_component_face_cycle( hds, h, stack);
841  stack.push_back( h->opposite());
842  while ( ! stack.empty()) {
843  h = stack.back();
844  stack.pop_back();
845  CGAL_assertion( h->opposite()->next() == 0);
846  if ( h->next() != 0)
847  erase_connected_component_face_cycle( hds, h, stack);
848  hds.delete_edge( h);
849  }
850  }
#define CGAL_assertion(EX)
Definition: assertions.h:87
void erase_connected_component_face_cycle(HDS &hds, Halfedge *h, HVector &stack)
Halfedge opposite() const
Get the ID of the opposite edge of a given edge.
Definition: Manifold_2.h:454
Halfedge next() const
Get the next halfedge of its owner element.
Definition: Manifold_2.h:465
void Assert_compile_time_tag(const Tag &, const Derived &b)

Here is the call graph for this function:

void erase_connected_component_face_cycle ( HDS hds,
Halfedge h,
HVector stack 
)
inlineprotected

Definition at line 790 of file Halfedge_data_structure_decorator.h.

References Halfedge_data_structure_decorator< _HDS >::delete_facet(), Halfedge_data_structure_decorator< _HDS >::erase_connected_component_vertex(), Halfedge_data_structure_decorator< _HDS >::get_facet(), Halfedge::next(), Halfedge::opposite(), and Halfedge_data_structure_decorator< _HDS >::set_facet_in_facet_loop().

Referenced by Halfedge_data_structure_decorator< _HDS >::erase_connected_component().

791  {
792  // Delete incident facet and set all incidences to 0.
793  if ( get_facet(h) != 0) {
794  delete_facet( hds, get_facet(h));
796  }
797  // Cycle around facet, delete incident vertices, push new
798  // edges on the stack and mark edges as visited.
800  Halfedge* g = h->next();
801  h->set_next(0);
802  while (g != h) {
804  if ( g->opposite()->next() != 0)
805  stack.push_back( g->opposite());
806  Halfedge* gg = g->next();
807  g->set_next(0);
808  g = gg;
809  }
810  }
void erase_connected_component_vertex(HDS &hds, Halfedge *h, Tag_false)
Halfedge opposite() const
Get the ID of the opposite edge of a given edge.
Definition: Manifold_2.h:454
This class encapsulate a halfedge over a window manifold.
Definition: Manifold_2.h:446
Halfedge next() const
Get the next halfedge of its owner element.
Definition: Manifold_2.h:465
void set_facet_in_facet_loop(Halfedge *, Facet *, Tag_false)

Here is the call graph for this function:

Here is the caller graph for this function:

void erase_connected_component_vertex ( HDS hds,
Halfedge h,
Tag_false   
)
inlineprotected
void erase_connected_component_vertex ( HDS hds,
Halfedge h,
Tag_true   
)
inlineprotected

Definition at line 770 of file Halfedge_data_structure_decorator.h.

References Halfedge_data_structure_decorator< _HDS >::set_vertex_in_vertex_loop().

771  {
772  // Erases the the vertex incident to h and sets all references
773  // from halfedges around this vertex to NULL,
774  // if the incident vertex handle is not already equal to
775  // NULL. It is used to erase vertices as soon
776  // as an vertex is encountered in the graph traversal. At this
777  // point of the graph traversal the halfedge cycle around the
778  // vertex is still closed. Lateron it will be broken.
779  if ( h->vertex() != NULL) {
780  hds.delete_vertex( h->vertex());
781  set_vertex_in_vertex_loop( h, NULL);
782  }
783  }
void set_vertex_in_vertex_loop(Halfedge *, Vertex *, Tag_false)

Here is the call graph for this function:

void erase_connected_component_vertex ( HDS hds,
Halfedge h 
)
inlineprotected

Definition at line 784 of file Halfedge_data_structure_decorator.h.

References Halfedge_data_structure_decorator< _HDS >::erase_connected_component_vertex().

784  {
787  }
void erase_connected_component_vertex(HDS &hds, Halfedge *h, Tag_false)
_HDS::Supports_halfedge_vertex Supports_halfedge_vertex

Here is the call graph for this function:

void erase_facet ( HDS ,
Halfedge ,
Tag_false   
)
inlineprotected

Definition at line 720 of file Halfedge_data_structure_decorator.h.

Referenced by Halfedge_data_structure_decorator< _HDS >::erase_facet().

720 {}

Here is the caller graph for this function:

void erase_facet ( HDS hds,
Halfedge h,
Tag_true   
)
inlineprotected

Definition at line 721 of file Halfedge_data_structure_decorator.h.

References Assert_compile_time_tag(), CGAL_assertion, CGAL_assertion_code, CGAL_precondition, Halfedge_data_structure_decorator< _HDS >::delete_vertex(), Halfedge_data_structure_decorator< _HDS >::find_prev_around_vertex(), Halfedge_data_structure_decorator< _HDS >::get_vertex(), Halfedge::is_border(), Halfedge::next(), Halfedge::opposite(), Halfedge_data_structure_decorator< _HDS >::remove_tip(), Halfedge_data_structure_decorator< _HDS >::set_facet(), and Halfedge_data_structure_decorator< _HDS >::set_vertex_halfedge().

721  {
723  CGAL_precondition( h != 0);
724  CGAL_precondition( ! h->is_border());
725  hds.delete_facet( h->facet());
726  CGAL_assertion_code( std::size_t termination_count = 0;)
727  Halfedge* end = h;
728  do {
729  CGAL_assertion( ++termination_count != 0);
730  set_facet( h, 0);
731  Halfedge* g = h->next();
732  bool h_tag = h->opposite()->is_border();
733  bool g_tag = g->opposite()->is_border();
734  if ( h_tag && g_tag && g->opposite()->next() == h->opposite()){
735  delete_vertex( hds, get_vertex(h));
736  if ( h != end)
737  hds.delete_edge(h);
738  } else {
739  if ( g_tag) {
741  remove_tip(h);
742  }
743  if ( h_tag) {
746  if ( h != end)
747  hds.delete_edge(h);
748  }
749  }
750  h = g;
751  } while ( h != end);
752  if ( h->opposite()->is_border())
753  hds.delete_edge(h);
754  }
#define CGAL_assertion(EX)
Definition: assertions.h:87
Halfedge opposite() const
Get the ID of the opposite edge of a given edge.
Definition: Manifold_2.h:454
This class encapsulate a halfedge over a window manifold.
Definition: Manifold_2.h:446
Halfedge next() const
Get the next halfedge of its owner element.
Definition: Manifold_2.h:465
#define CGAL_assertion_code(CODE)
Definition: assertions.h:91
#define CGAL_precondition(EX)
Definition: assertions.h:147
bool is_border() const
Is the edge a border edge?
Definition: Manifold_2.h:476
void Assert_compile_time_tag(const Tag &, const Derived &b)
void set_facet(Halfedge *h, Facet *f) const
void set_vertex_halfedge(Vertex *v, Halfedge *g) const
Halfedge * find_prev_around_vertex(Halfedge *h) const

Here is the call graph for this function:

void erase_facet ( HDS hds,
Halfedge h 
)
inline

Definition at line 757 of file Halfedge_data_structure_decorator.h.

References Halfedge_data_structure_decorator< _HDS >::erase_facet().

757  {
758  // removes the facet incident to `h' from `hds' and changes all
759  // halfedges incident to the facet into border edges or removes
760  // them from the polyhedral surface if they were already border
761  // edges. See `make_hole(h)' for a more specialized variant.
762  // Precondition: `h != NULL'. If facets are supported,
763  // `Supports_removal' must be equivalent to `Tag_true'.
765  }
_HDS::Supports_halfedge_facet Supports_halfedge_facet
void erase_facet(HDS &, Halfedge *, Tag_false)

Here is the call graph for this function:

void fill_hole ( HDS ,
Halfedge ,
Tag_false   
)
inlineprotected

Definition at line 635 of file Halfedge_data_structure_decorator.h.

Referenced by Halfedge_data_structure_decorator< _HDS >::add_facet_to_border(), and Halfedge_data_structure_decorator< _HDS >::fill_hole().

635 {}

Here is the caller graph for this function:

void fill_hole ( HDS hds,
Halfedge h,
Tag_true   
)
inlineprotected
Halfedge* fill_hole ( HDS hds,
Halfedge h 
)
inline

Definition at line 663 of file Halfedge_data_structure_decorator.h.

References Halfedge_data_structure_decorator< _HDS >::fill_hole().

663  {
664  // fill a hole with a new created facet. Makes all border
665  // halfedges of the hole denoted by h incident to the new facet.
666  // Returns h. Precondition: `h.is_border()'.
668  return h;
669  }
_HDS::Supports_halfedge_facet Supports_halfedge_facet
void fill_hole(HDS &, Halfedge *, Tag_false)

Here is the call graph for this function:

Halfedge* find_prev ( Halfedge h) const
inline

Definition at line 137 of file Halfedge_data_structure_decorator.h.

Referenced by Halfedge_data_structure_decorator< _HDS >::find_prev(), Halfedge_data_structure_decorator< _HDS >::join_facet(), and Halfedge_data_structure_decorator< _HDS >::join_vertex().

137  {
138  // returns the previous halfedge of h. Uses the `prev()' method if
139  // supported or performs a search around the facet using `next()'.
140  return find_prev( h, Supports_halfedge_prev());
141  }

Here is the caller graph for this function:

const Halfedge* find_prev ( const Halfedge h) const
inline

Definition at line 181 of file Halfedge_data_structure_decorator.h.

References Halfedge_data_structure_decorator< _HDS >::find_prev().

181  {
182  // returns the previous halfedge of h. Uses the `prev()' method if
183  // supported or performs a search around the facet using `next()'.
184  return find_prev( h, Supports_halfedge_prev());
185  }

Here is the call graph for this function:

Halfedge* find_prev ( Halfedge h,
Tag_true   
) const
inline

Definition at line 920 of file Halfedge_data_structure_decorator.h.

References Halfedge::prev().

920 { return h->prev(); }
Halfedge prev() const
Get the previous halfedge of its owner element.
Definition: Manifold_2.h:460

Here is the call graph for this function:

Halfedge* find_prev ( Halfedge h,
Tag_false   
) const
inline

Definition at line 921 of file Halfedge_data_structure_decorator.h.

References Halfedge::next().

921  {
922  Halfedge* g = h;
923  while ( g->next() != h)
924  g = g->next();
925  return g;
926  }
This class encapsulate a halfedge over a window manifold.
Definition: Manifold_2.h:446
Halfedge next() const
Get the next halfedge of its owner element.
Definition: Manifold_2.h:465

Here is the call graph for this function:

const Halfedge* find_prev ( const Halfedge h,
Tag_true   
) const
inline

Definition at line 969 of file Halfedge_data_structure_decorator.h.

References Halfedge::prev().

969 { return h->prev(); }
Halfedge prev() const
Get the previous halfedge of its owner element.
Definition: Manifold_2.h:460

Here is the call graph for this function:

const Halfedge* find_prev ( const Halfedge h,
Tag_false   
) const
inline

Definition at line 971 of file Halfedge_data_structure_decorator.h.

References Halfedge::next().

971  {
972  const Halfedge* g = h;
973  while ( g->next() != h)
974  g = g->next();
975  return g;
976  }
This class encapsulate a halfedge over a window manifold.
Definition: Manifold_2.h:446
Halfedge next() const
Get the next halfedge of its owner element.
Definition: Manifold_2.h:465

Here is the call graph for this function:

Halfedge* find_prev_around_vertex ( Halfedge h) const
inline

Definition at line 143 of file Halfedge_data_structure_decorator.h.

Referenced by Halfedge_data_structure_decorator< _HDS >::erase_facet(), and Halfedge_data_structure_decorator< _HDS >::find_prev_around_vertex().

143  {
144  // returns the previous halfedge of h. Uses the `prev()' method if
145  // supported or performs a search around the vertex using `next()'.
147  }
Halfedge * find_prev_around_vertex(Halfedge *h) const

Here is the caller graph for this function:

const Halfedge* find_prev_around_vertex ( const Halfedge h) const
inline

Definition at line 187 of file Halfedge_data_structure_decorator.h.

References Halfedge_data_structure_decorator< _HDS >::find_prev_around_vertex().

187  {
188  // returns the previous halfedge of h. Uses the `prev()' method if
189  // supported or performs a search around the vertex using `next()'.
191  }
Halfedge * find_prev_around_vertex(Halfedge *h) const

Here is the call graph for this function:

Halfedge* find_prev_around_vertex ( Halfedge h,
Tag_true   
) const
inline

Definition at line 928 of file Halfedge_data_structure_decorator.h.

References Halfedge::prev().

928  {
929  return h->prev();
930  }
Halfedge prev() const
Get the previous halfedge of its owner element.
Definition: Manifold_2.h:460

Here is the call graph for this function:

Halfedge* find_prev_around_vertex ( Halfedge h,
Tag_false   
) const
inline

Definition at line 931 of file Halfedge_data_structure_decorator.h.

References Halfedge::next(), and Halfedge::opposite().

931  {
932  Halfedge* g = h->opposite();
933  while ( g->next() != h)
934  g = g->next()->opposite();
935  return g;
936  }
Halfedge opposite() const
Get the ID of the opposite edge of a given edge.
Definition: Manifold_2.h:454
This class encapsulate a halfedge over a window manifold.
Definition: Manifold_2.h:446
Halfedge next() const
Get the next halfedge of its owner element.
Definition: Manifold_2.h:465

Here is the call graph for this function:

const Halfedge* find_prev_around_vertex ( const Halfedge h,
Tag_true   
) const
inline

Definition at line 978 of file Halfedge_data_structure_decorator.h.

References Halfedge::prev().

979  {
980  return h->prev();
981  }
Halfedge prev() const
Get the previous halfedge of its owner element.
Definition: Manifold_2.h:460

Here is the call graph for this function:

const Halfedge* find_prev_around_vertex ( const Halfedge h,
Tag_false   
) const
inline

Definition at line 982 of file Halfedge_data_structure_decorator.h.

References Halfedge::next(), and Halfedge::opposite().

983  {
984  const Halfedge* g = h->opposite();
985  while ( g->next() != h)
986  g = g->next()->opposite();
987  return g;
988  }
Halfedge opposite() const
Get the ID of the opposite edge of a given edge.
Definition: Manifold_2.h:454
This class encapsulate a halfedge over a window manifold.
Definition: Manifold_2.h:446
Halfedge next() const
Get the next halfedge of its owner element.
Definition: Manifold_2.h:465

Here is the call graph for this function:

Halfedge* flip_edge ( Halfedge h)
inline

Definition at line 690 of file Halfedge_data_structure_decorator.h.

References CGAL_postcondition, CGAL_precondition, Halfedge_data_structure_decorator< _HDS >::insert_tip(), Halfedge::next(), Halfedge::opposite(), Halfedge_data_structure_decorator< _HDS >::remove_tip(), Halfedge_data_structure_decorator< _HDS >::set_facet(), Halfedge_data_structure_decorator< _HDS >::set_facet_halfedge(), and Halfedge_data_structure_decorator< _HDS >::set_vertex_halfedge().

690  {
691  // Left rotate of edge.
692  // Precond: both incident facets are triangles.
693  CGAL_precondition( h == h->next()->next()->next());
694  CGAL_precondition( h->opposite() ==
695  h->opposite()->next()->next()->next());
696  Halfedge* hprev = h->next()->next();
697  Halfedge* gprev = h->opposite()->next()->next();
698  remove_tip( hprev);
699  remove_tip( gprev);
700  set_facet_halfedge( hprev);
701  set_facet_halfedge( gprev);
702  set_vertex_halfedge( hprev);
703  set_vertex_halfedge( gprev);
704  set_facet( hprev->next(), hprev->facet());
705  set_facet( gprev->next(), gprev->facet());
706  hprev = hprev->next();
707  gprev = gprev->next();
708  insert_tip( h, gprev);
709  insert_tip( h->opposite(), hprev);
710  CGAL_postcondition( h == h->next()->next()->next());
712  h->opposite()->next()->next()->next());
713  return h;
714  }
Halfedge opposite() const
Get the ID of the opposite edge of a given edge.
Definition: Manifold_2.h:454
This class encapsulate a halfedge over a window manifold.
Definition: Manifold_2.h:446
void set_facet_halfedge(Facet *f, Halfedge *g) const
Halfedge next() const
Get the next halfedge of its owner element.
Definition: Manifold_2.h:465
#define CGAL_precondition(EX)
Definition: assertions.h:147
void insert_tip(Halfedge *h, Halfedge *v) const
void set_facet(Halfedge *h, Facet *f) const
void set_vertex_halfedge(Vertex *v, Halfedge *g) const
#define CGAL_postcondition(EX)
Definition: assertions.h:207

Here is the call graph for this function:

const Facet* get_facet ( const Halfedge h) const
inline

Definition at line 193 of file Halfedge_data_structure_decorator.h.

References Halfedge_data_structure_decorator< _HDS >::get_facet().

193  {
194  // returns the incident facet of h if supported, `NULL' otherwise.
195  return get_facet( h, Supports_halfedge_facet());
196  }
_HDS::Supports_halfedge_facet Supports_halfedge_facet

Here is the call graph for this function:

Facet* get_facet ( Halfedge ,
Tag_false   
) const
inline

Definition at line 938 of file Halfedge_data_structure_decorator.h.

938 { return NULL;}
Facet* get_facet ( Halfedge h,
Tag_true   
) const
inline

Definition at line 939 of file Halfedge_data_structure_decorator.h.

939 { return h->facet();}
const Facet* get_facet ( const Halfedge ,
Tag_false   
) const
inline

Definition at line 991 of file Halfedge_data_structure_decorator.h.

991 { return NULL;}
const Facet* get_facet ( const Halfedge h,
Tag_true   
) const
inline

Definition at line 993 of file Halfedge_data_structure_decorator.h.

993 { return h->facet();}
Halfedge* get_facet_halfedge ( Facet f) const
inline

Definition at line 154 of file Halfedge_data_structure_decorator.h.

Referenced by Halfedge_data_structure_decorator< _HDS >::get_facet_halfedge().

154  {
155  // returns the incident halfedge of f if supported, `NULL'
156  // otherwise.
158  }
_HDS::Supports_facet_halfedge Supports_facet_halfedge

Here is the caller graph for this function:

const Halfedge* get_facet_halfedge ( const Facet f) const
inline

Definition at line 198 of file Halfedge_data_structure_decorator.h.

References Halfedge_data_structure_decorator< _HDS >::get_facet_halfedge().

198  {
199  // returns the incident halfedge of f if supported, `NULL'
200  // otherwise.
202  }
_HDS::Supports_facet_halfedge Supports_facet_halfedge

Here is the call graph for this function:

Halfedge* get_facet_halfedge ( Facet ,
Tag_false   
) const
inline

Definition at line 941 of file Halfedge_data_structure_decorator.h.

941  {
942  return NULL;
943  }
Halfedge* get_facet_halfedge ( Facet f,
Tag_true   
) const
inline

Definition at line 944 of file Halfedge_data_structure_decorator.h.

944  {
945  return f->halfedge();
946  }
const Halfedge* get_facet_halfedge ( const Facet ,
Tag_false   
) const
inline

Definition at line 996 of file Halfedge_data_structure_decorator.h.

996  {
997  return NULL;
998  }
const Halfedge* get_facet_halfedge ( const Facet f,
Tag_true   
) const
inline

Definition at line 1000 of file Halfedge_data_structure_decorator.h.

1000  {
1001  return f->halfedge();
1002  }
Halfedge* get_prev ( Halfedge h) const
inline

Definition at line 131 of file Halfedge_data_structure_decorator.h.

Referenced by Halfedge_data_structure_decorator< _HDS >::get_prev(), and Halfedge_data_structure_using_vector< V, H, F >::pointer_update().

131  {
132  // returns the previous halfedge of h if supported, `NULL'
133  // otherwise.
134  return get_prev( h, Supports_halfedge_prev());
135  }

Here is the caller graph for this function:

const Halfedge* get_prev ( const Halfedge h) const
inline

Definition at line 175 of file Halfedge_data_structure_decorator.h.

References Halfedge_data_structure_decorator< _HDS >::get_prev().

175  {
176  // returns the previous halfedge of h if supported, `NULL'
177  // otherwise.
178  return get_prev( h, Supports_halfedge_prev());
179  }

Here is the call graph for this function:

Halfedge* get_prev ( Halfedge ,
Tag_false   
) const
inline

Definition at line 917 of file Halfedge_data_structure_decorator.h.

917 {return NULL;}
Halfedge* get_prev ( Halfedge h,
Tag_true   
) const
inline

Definition at line 918 of file Halfedge_data_structure_decorator.h.

References Halfedge::prev().

918 {return h->prev();}
Halfedge prev() const
Get the previous halfedge of its owner element.
Definition: Manifold_2.h:460

Here is the call graph for this function:

const Halfedge* get_prev ( const Halfedge ,
Tag_false   
) const
inline

Definition at line 964 of file Halfedge_data_structure_decorator.h.

964 { return NULL; }
const Halfedge* get_prev ( const Halfedge h,
Tag_true   
) const
inline

Definition at line 966 of file Halfedge_data_structure_decorator.h.

References Halfedge::prev().

966 { return h->prev(); }
Halfedge prev() const
Get the previous halfedge of its owner element.
Definition: Manifold_2.h:460

Here is the call graph for this function:

const Vertex* get_vertex ( const Halfedge h) const
inline

Definition at line 169 of file Halfedge_data_structure_decorator.h.

References Halfedge_data_structure_decorator< _HDS >::get_vertex().

169  {
170  // returns the incident vertex of h if supported, `NULL'
171  // otherwise.
172  return get_vertex( h, Supports_halfedge_vertex());
173  }
_HDS::Supports_halfedge_vertex Supports_halfedge_vertex

Here is the call graph for this function:

Vertex* get_vertex ( Halfedge ,
Tag_false   
) const
inline

Definition at line 912 of file Halfedge_data_structure_decorator.h.

912 { return NULL;}
Vertex* get_vertex ( Halfedge h,
Tag_true   
) const
inline

Definition at line 913 of file Halfedge_data_structure_decorator.h.

913  {
914  return h->vertex();
915  }
const Vertex* get_vertex ( const Halfedge ,
Tag_false   
) const
inline

Definition at line 959 of file Halfedge_data_structure_decorator.h.

959 { return NULL; }
const Vertex* get_vertex ( const Halfedge h,
Tag_true   
) const
inline

Definition at line 961 of file Halfedge_data_structure_decorator.h.

961 { return h->vertex(); }
Halfedge* get_vertex_halfedge ( Vertex v) const
inline

Definition at line 119 of file Halfedge_data_structure_decorator.h.

Referenced by Halfedge_data_structure_decorator< _HDS >::get_vertex_halfedge().

119  {
120  // returns the incident halfedge of v if supported, `NULL'
121  // otherwise.
123  }
_HDS::Supports_vertex_halfedge Supports_vertex_halfedge
*********************************************************************Illinois Open Source License ****University of Illinois NCSA **Open Source License University of Illinois All rights reserved ****Developed free of to any person **obtaining a copy of this software and associated documentation to deal with the Software without including without limitation the rights to and or **sell copies of the and to permit persons to whom the **Software is furnished to do subject to the following this list of conditions and the following disclaimers ****Redistributions in binary form must reproduce the above **copyright this list of conditions and the following **disclaimers in the documentation and or other materials **provided with the distribution ****Neither the names of the Center for Simulation of Advanced the University of nor the names of its **contributors may be used to endorse or promote products derived **from this Software without specific prior written permission ****THE SOFTWARE IS PROVIDED AS WITHOUT WARRANTY OF ANY **EXPRESS OR INCLUDING BUT NOT LIMITED TO THE WARRANTIES **OF FITNESS FOR A PARTICULAR PURPOSE AND **NONINFRINGEMENT IN NO EVENT SHALL THE CONTRIBUTORS OR **COPYRIGHT HOLDERS BE LIABLE FOR ANY DAMAGES OR OTHER WHETHER IN AN ACTION OF TORT OR **ARISING OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE **USE OR OTHER DEALINGS WITH THE SOFTWARE v
Definition: roccomf90.h:20

Here is the caller graph for this function:

const Halfedge* get_vertex_halfedge ( const Vertex v) const
inline

Definition at line 163 of file Halfedge_data_structure_decorator.h.

References Halfedge_data_structure_decorator< _HDS >::get_vertex_halfedge().

163  {
164  // returns the incident halfedge of v if supported, `NULL'
165  // otherwise.
167  }
_HDS::Supports_vertex_halfedge Supports_vertex_halfedge
*********************************************************************Illinois Open Source License ****University of Illinois NCSA **Open Source License University of Illinois All rights reserved ****Developed free of to any person **obtaining a copy of this software and associated documentation to deal with the Software without including without limitation the rights to and or **sell copies of the and to permit persons to whom the **Software is furnished to do subject to the following this list of conditions and the following disclaimers ****Redistributions in binary form must reproduce the above **copyright this list of conditions and the following **disclaimers in the documentation and or other materials **provided with the distribution ****Neither the names of the Center for Simulation of Advanced the University of nor the names of its **contributors may be used to endorse or promote products derived **from this Software without specific prior written permission ****THE SOFTWARE IS PROVIDED AS WITHOUT WARRANTY OF ANY **EXPRESS OR INCLUDING BUT NOT LIMITED TO THE WARRANTIES **OF FITNESS FOR A PARTICULAR PURPOSE AND **NONINFRINGEMENT IN NO EVENT SHALL THE CONTRIBUTORS OR **COPYRIGHT HOLDERS BE LIABLE FOR ANY DAMAGES OR OTHER WHETHER IN AN ACTION OF TORT OR **ARISING OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE **USE OR OTHER DEALINGS WITH THE SOFTWARE v
Definition: roccomf90.h:20

Here is the call graph for this function:

Halfedge* get_vertex_halfedge ( Vertex ,
Tag_false   
) const
inline

Definition at line 905 of file Halfedge_data_structure_decorator.h.

905  {
906  return NULL;
907  }
Halfedge* get_vertex_halfedge ( Vertex v,
Tag_true   
) const
inline

Definition at line 908 of file Halfedge_data_structure_decorator.h.

908  {
909  return v->halfedge();
910  }
*********************************************************************Illinois Open Source License ****University of Illinois NCSA **Open Source License University of Illinois All rights reserved ****Developed free of to any person **obtaining a copy of this software and associated documentation to deal with the Software without including without limitation the rights to and or **sell copies of the and to permit persons to whom the **Software is furnished to do subject to the following this list of conditions and the following disclaimers ****Redistributions in binary form must reproduce the above **copyright this list of conditions and the following **disclaimers in the documentation and or other materials **provided with the distribution ****Neither the names of the Center for Simulation of Advanced the University of nor the names of its **contributors may be used to endorse or promote products derived **from this Software without specific prior written permission ****THE SOFTWARE IS PROVIDED AS WITHOUT WARRANTY OF ANY **EXPRESS OR INCLUDING BUT NOT LIMITED TO THE WARRANTIES **OF FITNESS FOR A PARTICULAR PURPOSE AND **NONINFRINGEMENT IN NO EVENT SHALL THE CONTRIBUTORS OR **COPYRIGHT HOLDERS BE LIABLE FOR ANY DAMAGES OR OTHER WHETHER IN AN ACTION OF TORT OR **ARISING OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE **USE OR OTHER DEALINGS WITH THE SOFTWARE v
Definition: roccomf90.h:20
const Halfedge* get_vertex_halfedge ( const Vertex ,
Tag_false   
) const
inline

Definition at line 952 of file Halfedge_data_structure_decorator.h.

952 { return NULL; }
const Halfedge* get_vertex_halfedge ( const Vertex v,
Tag_true   
) const
inline

Definition at line 954 of file Halfedge_data_structure_decorator.h.

954  {
955  return v->halfedge();
956  }
*********************************************************************Illinois Open Source License ****University of Illinois NCSA **Open Source License University of Illinois All rights reserved ****Developed free of to any person **obtaining a copy of this software and associated documentation to deal with the Software without including without limitation the rights to and or **sell copies of the and to permit persons to whom the **Software is furnished to do subject to the following this list of conditions and the following disclaimers ****Redistributions in binary form must reproduce the above **copyright this list of conditions and the following **disclaimers in the documentation and or other materials **provided with the distribution ****Neither the names of the Center for Simulation of Advanced the University of nor the names of its **contributors may be used to endorse or promote products derived **from this Software without specific prior written permission ****THE SOFTWARE IS PROVIDED AS WITHOUT WARRANTY OF ANY **EXPRESS OR INCLUDING BUT NOT LIMITED TO THE WARRANTIES **OF FITNESS FOR A PARTICULAR PURPOSE AND **NONINFRINGEMENT IN NO EVENT SHALL THE CONTRIBUTORS OR **COPYRIGHT HOLDERS BE LIABLE FOR ANY DAMAGES OR OTHER WHETHER IN AN ACTION OF TORT OR **ARISING OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE **USE OR OTHER DEALINGS WITH THE SOFTWARE v
Definition: roccomf90.h:20
void insert_halfedge ( Halfedge h,
Halfedge f 
) const
inline

Definition at line 327 of file Halfedge_data_structure_decorator.h.

References Halfedge_data_structure_decorator< _HDS >::get_facet(), Halfedge::next(), Halfedge_data_structure_decorator< _HDS >::set_facet(), and Halfedge_data_structure_decorator< _HDS >::set_prev().

Referenced by Halfedge_data_structure_decorator< _HDS >::split_vertex().

327  {
328  // inserts the halfedge h between f and `f->next()'. The facet of
329  // h will be the one f points to if facets are supported.
330  h->set_next( f->next());
331  f->set_next( h);
332  set_prev( h->next(), h);
333  set_prev( h, f);
334  set_facet( h, get_facet( f));
335  }
Halfedge next() const
Get the next halfedge of its owner element.
Definition: Manifold_2.h:465
void set_facet(Halfedge *h, Facet *f) const
void set_prev(Halfedge *h, Halfedge *g) const

Here is the call graph for this function:

Here is the caller graph for this function:

void insert_tip ( Halfedge h,
Halfedge v 
) const
inline

Definition at line 307 of file Halfedge_data_structure_decorator.h.

References Halfedge_data_structure_decorator< _HDS >::get_vertex(), Halfedge::next(), Halfedge::opposite(), Halfedge_data_structure_decorator< _HDS >::set_prev(), Halfedge_data_structure_decorator< _HDS >::set_vertex(), and v.

Referenced by Halfedge_data_structure_decorator< _HDS >::add_facet_to_border(), Halfedge_data_structure_decorator< _HDS >::flip_edge(), Halfedge_data_structure_decorator< _HDS >::split_facet(), and Halfedge_data_structure_decorator< _HDS >::split_loop().

307  {
308  // inserts the tip of the edge h into the halfedges around the
309  // vertex pointed to by v. `h->opposite()' is the new successor of
310  // v and `h->next()' will be set to `v->next()'. The vertex of h
311  // will be the one v points to if vertices are supported.
312  h->set_next( v->next());
313  v->set_next( h->opposite());
314  set_prev( h->next(), h);
315  set_prev( h->opposite(), v);
316  set_vertex( h, get_vertex( v));
317  }
Halfedge opposite() const
Get the ID of the opposite edge of a given edge.
Definition: Manifold_2.h:454
Halfedge next() const
Get the next halfedge of its owner element.
Definition: Manifold_2.h:465
*********************************************************************Illinois Open Source License ****University of Illinois NCSA **Open Source License University of Illinois All rights reserved ****Developed free of to any person **obtaining a copy of this software and associated documentation to deal with the Software without including without limitation the rights to and or **sell copies of the and to permit persons to whom the **Software is furnished to do subject to the following this list of conditions and the following disclaimers ****Redistributions in binary form must reproduce the above **copyright this list of conditions and the following **disclaimers in the documentation and or other materials **provided with the distribution ****Neither the names of the Center for Simulation of Advanced the University of nor the names of its **contributors may be used to endorse or promote products derived **from this Software without specific prior written permission ****THE SOFTWARE IS PROVIDED AS WITHOUT WARRANTY OF ANY **EXPRESS OR INCLUDING BUT NOT LIMITED TO THE WARRANTIES **OF FITNESS FOR A PARTICULAR PURPOSE AND **NONINFRINGEMENT IN NO EVENT SHALL THE CONTRIBUTORS OR **COPYRIGHT HOLDERS BE LIABLE FOR ANY DAMAGES OR OTHER WHETHER IN AN ACTION OF TORT OR **ARISING OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE **USE OR OTHER DEALINGS WITH THE SOFTWARE v
Definition: roccomf90.h:20
void set_vertex(Halfedge *h, Vertex *v) const
void set_prev(Halfedge *h, Halfedge *g) const

Here is the call graph for this function:

Here is the caller graph for this function:

void inside_out ( _HDS &  hds,
Tag_false   
)

Definition at line 1395 of file Halfedge_data_structure_decorator.h.

References CGAL_assertion, d, and Halfedge::next().

Referenced by Halfedge_data_structure_decorator< _HDS >::inside_out().

1395  {
1396  typedef typename _HDS::Halfedge_iterator Halfedge_iterator;
1397  Halfedge_iterator begin = hds.halfedges_begin();
1398  Halfedge_iterator end = hds.halfedges_end();
1399  for( ; begin != end; ++begin) {
1400  // Define the halfedge with the `smallest' pointer
1401  // value as the one that is used to reorient the facet.
1402  Halfedge* h = &*begin;
1403  bool is_min = true;
1404  Halfedge* c = h;
1405  Halfedge* d = c;
1406  do {
1407  CGAL_assertion( c != NULL);
1408  if ( h > c)
1409  is_min = false;
1410  c = c->next();
1411  } while ( c != d && is_min);
1412  if ( is_min)
1413  reorient_facet( h);
1414  }
1415 }
#define CGAL_assertion(EX)
Definition: assertions.h:87
const NT & d
This class encapsulate a halfedge over a window manifold.
Definition: Manifold_2.h:446
Halfedge next() const
Get the next halfedge of its owner element.
Definition: Manifold_2.h:465

Here is the call graph for this function:

Here is the caller graph for this function:

void inside_out ( _HDS &  hds,
Tag_true   
)

Definition at line 1420 of file Halfedge_data_structure_decorator.h.

1420  {
1421  typedef typename _HDS::Halfedge_iterator Halfedge_iterator;
1422  typedef typename _HDS::Facet_iterator Facet_iterator;
1423  Facet_iterator begin = hds.facets_begin();
1424  Facet_iterator end = hds.facets_end();
1425  for( ; begin != end; ++begin)
1426  reorient_facet( begin->halfedge());
1427  // Note: A border edge is now parallel to its opposite edge.
1428  // We scan all border edges for this property. If it holds, we
1429  // reorient the associated hole and search again until no border
1430  // edge with that property exists any longer. Then, all holes are
1431  // reoriented.
1432  Halfedge_iterator first = hds.halfedges_begin();
1433  Halfedge_iterator last = hds.halfedges_end();
1434  for( ; first != last; ++first) {
1435  if ( first->is_border() &&
1436  first->vertex() == first->opposite()->vertex())
1437  reorient_facet( &*first);
1438  }
1439 }
void inside_out ( _HDS &  hds)
inline

Definition at line 1112 of file Halfedge_data_structure_decorator.h.

References Halfedge_data_structure_decorator< _HDS >::inside_out().

1112  {
1114  }
_HDS::Supports_facet_halfedge Supports_facet_halfedge

Here is the call graph for this function:

bool is_valid ( const _HDS &  hds,
bool  verb = false,
int  level = 0 
) const

Definition at line 1172 of file Halfedge_data_structure_decorator.h.

References check_tag(), n, Halfedge::next(), Halfedge::opposite(), and v.

1172  {
1173  // checks the combinatorial consistency.
1174  typedef typename _HDS::Halfedge_const_iterator Halfedge_const_iterator;
1175  typedef typename _HDS::Vertex_const_iterator Vertex_const_iterator;
1176  typedef typename _HDS::Facet_const_iterator Facet_const_iterator;
1177  typedef typename _HDS::Size Size;
1178  typedef typename _HDS::Supports_halfedge_prev Supports_halfedge_prev;
1179  typedef typename _HDS::Supports_halfedge_vertex
1181  typedef typename _HDS::Supports_vertex_halfedge
1183  typedef typename _HDS::Supports_halfedge_facet
1185  typedef typename _HDS::Supports_facet_halfedge
1187 
1188  Verbose_ostream verr(verb);
1189  verr << "begin Halfedge_data_structure_decorator<HDS>::is_valid("
1190  " verb=true, level = " << level << "):" << std::endl;
1191 
1192  bool valid = ( 1 != (hds.size_of_halfedges() & 1));
1193  if ( ! valid)
1194  verr << "number of halfedges is odd." << std::endl;
1195 
1196  // All halfedges.
1197  Halfedge_const_iterator begin = hds.halfedges_begin();
1198  Halfedge_const_iterator end = hds.halfedges_end();
1199  Size n = 0;
1200  Size nb = 0;
1201  for( ; valid && (begin != end); begin++) {
1202  verr << "halfedge " << n << std::endl;
1203  if ( begin->is_border())
1204  verr << " is border halfedge" << std::endl;
1205  // Pointer integrity.
1206  valid = valid && ( begin->next() != NULL);
1207  valid = valid && ( begin->opposite() != NULL);
1208  if ( ! valid) {
1209  verr << " pointer integrity corrupted (ptr==NULL)."
1210  << std::endl;
1211  break;
1212  }
1213  // opposite integrity.
1214  valid = valid && ( begin->opposite() != &*begin);
1215  valid = valid && ( begin->opposite()->opposite() == &*begin);
1216  if ( ! valid) {
1217  verr << " opposite pointer integrity corrupted."
1218  << std::endl;
1219  break;
1220  }
1221  // previous integrity.
1222  valid = valid && ( ! check_tag( Supports_halfedge_prev()) ||
1223  get_prev(begin->next()) == &*begin);
1224  if ( ! valid) {
1225  verr << " previous pointer integrity corrupted."
1226  << std::endl;
1227  break;
1228  }
1229  if ( level > 0) {
1230  // vertex integrity.
1231  valid = valid && ( ! check_tag( Supports_halfedge_vertex())
1232  || get_vertex( &*begin) != NULL);
1233  valid = valid && ( get_vertex( &*begin) ==
1234  get_vertex( begin->next()->opposite()));
1235  if ( ! valid) {
1236  verr << " vertex pointer integrity corrupted."
1237  << std::endl;
1238  break;
1239  }
1240  // facet integrity.
1241  valid = valid && ( ! check_tag( Supports_halfedge_facet())
1242  || begin->is_border() || get_facet( &*begin) != NULL);
1243  valid = valid && ( get_facet( &*begin) ==
1244  get_facet( begin->next()));
1245  if ( ! valid) {
1246  verr << " facet pointer integrity corrupted."
1247  << std::endl;
1248  break;
1249  }
1250  }
1251  ++n;
1252  if ( begin->is_border())
1253  ++nb;
1254  }
1255  verr << "summe border halfedges (2*nb) = " << 2 * nb << std::endl;
1256  if ( valid && n != hds.size_of_halfedges())
1257  verr << "counting halfedges failed." << std::endl;
1258  if ( valid && level >= 4 && (nb != hds.size_of_border_halfedges()))
1259  verr << "counting border halfedges failed." << std::endl;
1260  valid = valid && ( n == hds.size_of_halfedges());
1261  valid = valid && ( level < 4 ||
1262  (nb == hds.size_of_border_halfedges()));
1263 
1264  // All vertices.
1265  Vertex_const_iterator vbegin = hds.vertices_begin();
1266  Vertex_const_iterator vend = hds.vertices_end();
1267  Size v = 0;
1268  n = 0;
1269  for( ; valid && (vbegin != vend); ++vbegin) {
1270  verr << "vertex " << v << std::endl;
1271  // Pointer integrity.
1272  if ( get_vertex_halfedge( &*vbegin) != NULL)
1273  valid = valid && ( ! check_tag(
1275  get_vertex( get_vertex_halfedge( &*vbegin)) == &*vbegin);
1276  else
1277  valid = valid && (! check_tag(
1279  if ( ! valid) {
1280  verr << " halfedge pointer in vertex corrupted."
1281  << std::endl;
1282  break;
1283  }
1284  // cycle-around-vertex test.
1285  const Halfedge* h = get_vertex_halfedge( &*vbegin);
1286  if ( h) {
1287  const Halfedge* g = h;
1288  do {
1289  verr << " halfedge " << n << std::endl;
1290  ++n;
1291  h = h->next()->opposite();
1292  valid = valid && ( n <= hds.size_of_halfedges() && n != 0);
1293  } while ( valid && (h != g));
1294  }
1295  ++v;
1296  }
1297  if ( valid && v != hds.size_of_vertices())
1298  verr << "counting vertices failed." << std::endl;
1299  if ( valid && level >= 2 && ( check_tag( Supports_vertex_halfedge())
1300  && n != hds.size_of_halfedges()))
1301  verr << "counting halfedges via vertices failed." << std::endl;
1302  valid = valid && ( v == hds.size_of_vertices());
1303  valid = valid && ( level < 2 ||
1305  n == hds.size_of_halfedges());
1306 
1307  // All facets.
1308  Facet_const_iterator fbegin = hds.facets_begin();
1309  Facet_const_iterator fend = hds.facets_end();
1310  Size f = 0;
1311  n = 0;
1312  for( ; valid && (fbegin != fend); ++fbegin) {
1313  verr << "facet " << f << std::endl;
1314  // Pointer integrity.
1315  if ( get_facet_halfedge( &*fbegin) != NULL)
1316  valid = valid && ( ! check_tag(
1318  get_facet( get_facet_halfedge( &*fbegin)) == &*fbegin);
1319  else
1320  valid = valid && (! check_tag(
1321  Supports_facet_halfedge()) || begin->is_border());
1322  if ( ! valid) {
1323  verr << " halfedge pointer in facet corrupted."
1324  << std::endl;
1325  break;
1326  }
1327  // cycle-around-facet test.
1328  const Halfedge* h = get_facet_halfedge( &*fbegin);
1329  if ( h) {
1330  const Halfedge* g = h;
1331  do {
1332  verr << " halfedge " << n << std::endl;
1333  ++n;
1334  h = h->next();
1335  valid = valid && ( n <= hds.size_of_halfedges() && n != 0);
1336  } while ( valid && (h != g));
1337  }
1338  ++f;
1339  }
1340  if ( valid && f != hds.size_of_facets())
1341  verr << "counting facets failed." << std::endl;
1342  if ( valid && level >= 3 && check_tag( Supports_facet_halfedge()) &&
1343  n + nb != hds.size_of_halfedges())
1344  verr << "counting halfedges via facets failed." << std::endl;
1345  valid = valid && ( f == hds.size_of_facets());
1346  valid = valid && ( level < 3 ||
1348  n + nb == hds.size_of_halfedges());
1349 
1350  if ( level >= 4) {
1351  verr << "level 4: normalized_border_is_valid( verbose = true)"
1352  << std::endl;
1353  valid = valid && ( normalized_border_is_valid( hds, verb));
1354  }
1355  verr << "end of Halfedge_data_structure_decorator<HDS>::"
1356  "is_valid(): structure is " << ( valid ? "valid." :
1357  "NOT VALID.") << std::endl;
1358  return valid;
1359 }
_HDS::Supports_halfedge_facet Supports_halfedge_facet
_HDS::Supports_vertex_halfedge Supports_vertex_halfedge
Halfedge opposite() const
Get the ID of the opposite edge of a given edge.
Definition: Manifold_2.h:454
This class encapsulate a halfedge over a window manifold.
Definition: Manifold_2.h:446
Halfedge next() const
Get the next halfedge of its owner element.
Definition: Manifold_2.h:465
*********************************************************************Illinois Open Source License ****University of Illinois NCSA **Open Source License University of Illinois All rights reserved ****Developed free of to any person **obtaining a copy of this software and associated documentation to deal with the Software without including without limitation the rights to and or **sell copies of the and to permit persons to whom the **Software is furnished to do subject to the following this list of conditions and the following disclaimers ****Redistributions in binary form must reproduce the above **copyright this list of conditions and the following **disclaimers in the documentation and or other materials **provided with the distribution ****Neither the names of the Center for Simulation of Advanced the University of nor the names of its **contributors may be used to endorse or promote products derived **from this Software without specific prior written permission ****THE SOFTWARE IS PROVIDED AS WITHOUT WARRANTY OF ANY **EXPRESS OR INCLUDING BUT NOT LIMITED TO THE WARRANTIES **OF FITNESS FOR A PARTICULAR PURPOSE AND **NONINFRINGEMENT IN NO EVENT SHALL THE CONTRIBUTORS OR **COPYRIGHT HOLDERS BE LIABLE FOR ANY DAMAGES OR OTHER WHETHER IN AN ACTION OF TORT OR **ARISING OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE **USE OR OTHER DEALINGS WITH THE SOFTWARE v
Definition: roccomf90.h:20
bool check_tag(Tag_true)
_HDS::Supports_facet_halfedge Supports_facet_halfedge
const NT & n
_HDS::Supports_halfedge_vertex Supports_halfedge_vertex
bool normalized_border_is_valid(const _HDS &hds, bool verb=false) const

Here is the call graph for this function:

Halfedge* join_facet ( HDS hds,
Halfedge h 
)
inline

Definition at line 404 of file Halfedge_data_structure_decorator.h.

References Assert_compile_time_tag(), CGAL_assertion, CGAL_assertion_code, Halfedge_data_structure_decorator< _HDS >::delete_facet(), Halfedge_data_structure_decorator< _HDS >::find_prev(), Halfedge_data_structure_decorator< _HDS >::get_facet(), Halfedge::next(), Halfedge::opposite(), Halfedge_data_structure_decorator< _HDS >::remove_tip(), Halfedge_data_structure_decorator< _HDS >::set_facet(), Halfedge_data_structure_decorator< _HDS >::set_facet_halfedge(), and Halfedge_data_structure_decorator< _HDS >::set_vertex_halfedge().

404  {
405  // join the two facets incident to h. The facet incident to
406  // `h->opposite()' gets removed. Both facets might be holes.
407  // Returns the predecessor of h. The invariant `join_facet(
408  // split_facet( h, g))' returns h and keeps `hds'
409  // unchanged. The time is proportional to the size of the facet
410  // removed and the time to compute `h.prev()'. Precondition:
411  // `HDS' supports removal of facets.
413  Halfedge* hprev = find_prev( h);
414  Halfedge* gprev = find_prev( h->opposite());
415  remove_tip( hprev);
416  remove_tip( gprev);
417  hds.delete_edge( h);
418  if ( get_facet( gprev) != 0)
419  delete_facet( hds, get_facet( gprev));
420  h = hprev;
421  // 'half' of the halfedges have their correct facets.
422  // Here we do the remaining halfedges.
423  CGAL_assertion_code( std::size_t termination_count = 0;)
424  while ( h != gprev) {
425  CGAL_assertion( ++termination_count != 0);
426  h = h->next();
427  set_facet( h, get_facet( hprev));
428  }
429  if ( get_facet( hprev) != 0)
430  set_facet_halfedge( hprev);
431  set_vertex_halfedge( hprev);
432  set_vertex_halfedge( gprev);
433  return hprev;
434  }
#define CGAL_assertion(EX)
Definition: assertions.h:87
Halfedge opposite() const
Get the ID of the opposite edge of a given edge.
Definition: Manifold_2.h:454
This class encapsulate a halfedge over a window manifold.
Definition: Manifold_2.h:446
void set_facet_halfedge(Facet *f, Halfedge *g) const
Halfedge next() const
Get the next halfedge of its owner element.
Definition: Manifold_2.h:465
#define CGAL_assertion_code(CODE)
Definition: assertions.h:91
void Assert_compile_time_tag(const Tag &, const Derived &b)
void set_facet(Halfedge *h, Facet *f) const
void set_vertex_halfedge(Vertex *v, Halfedge *g) const

Here is the call graph for this function:

Halfedge* join_loop ( HDS hds,
Halfedge h,
Halfedge g 
)
inline

Definition at line 580 of file Halfedge_data_structure_decorator.h.

References Assert_compile_time_tag(), CGAL_assertion, CGAL_assertion_code, CGAL_precondition, Halfedge_data_structure_decorator< _HDS >::delete_facet(), Halfedge_data_structure_decorator< _HDS >::delete_vertex(), Halfedge_data_structure_decorator< _HDS >::get_facet(), Halfedge_data_structure_decorator< _HDS >::get_vertex(), Halfedge::next(), Halfedge::opposite(), Halfedge_data_structure_decorator< _HDS >::set_facet(), Halfedge_data_structure_decorator< _HDS >::set_facet_halfedge(), Halfedge_data_structure_decorator< _HDS >::set_prev(), and Halfedge_data_structure_decorator< _HDS >::set_vertex().

580  {
581  // glues the boundary of two facets together. Both facets and the
582  // vertices of the facet loop g gets removed. Returns h. The
583  // invariant `join_loop( h, split_loop( h, i, j))' returns h and
584  // keeps `hds' unchanged. Precondition: `HDS' supports
585  // removal of vertices and facets. The facets denoted by h and g
586  // are different and have have equal size.
589  || get_facet(h) != get_facet(g));
590  if ( get_facet(h) != 0)
591  delete_facet( hds, get_facet(h));
592  if ( get_facet(g) != 0)
593  delete_facet( hds, get_facet(g));
594  Halfedge* hi = h;
595  Halfedge* gi = g;
596  CGAL_assertion_code( std::size_t termination_count = 0;)
597  do {
598  CGAL_assertion( ++termination_count != 0);
599  Halfedge* hii = hi;
600  Halfedge* gii = gi;
601  hi = hi->next();
602  // gi = find_prev(gi); // Replaced by search around vertex.
603  set_facet( hii, get_facet( gii->opposite()));
604  set_facet_halfedge( hii);
605  delete_vertex( hds, get_vertex( gii->opposite()));
606  if ( gii->opposite()->next()->opposite()->next() == gii) {
607  gi = gii->opposite()->next()->opposite();
608  } else {
609  hii->set_next( gii->opposite()->next());
610  set_prev( hii->next(), hii);
611  gii = gii->opposite()->next()->opposite();
612  set_vertex( gii, get_vertex(hii));
613  while ( gii->next()->opposite()->next() != gi) {
614  CGAL_assertion( ++termination_count != 0);
615  gii = gii->next()->opposite();
616  set_vertex( gii, get_vertex(hii));
617  }
618  gi = gii->next()->opposite();
619  gii->set_next( hi);
620  set_prev( gii->next(), gii);
621  }
622  } while ( hi != h);
623  CGAL_assertion( gi == g);
624  do {
625  Halfedge* gii = gi;
626  gi = gi->next();
627  hds.delete_edge( gii);
628  } while ( gi != g);
629  return h;
630  }
#define CGAL_assertion(EX)
Definition: assertions.h:87
Halfedge opposite() const
Get the ID of the opposite edge of a given edge.
Definition: Manifold_2.h:454
This class encapsulate a halfedge over a window manifold.
Definition: Manifold_2.h:446
void set_facet_halfedge(Facet *f, Halfedge *g) const
Halfedge next() const
Get the next halfedge of its owner element.
Definition: Manifold_2.h:465
#define CGAL_assertion_code(CODE)
Definition: assertions.h:91
#define CGAL_precondition(EX)
Definition: assertions.h:147
void Assert_compile_time_tag(const Tag &, const Derived &b)
void set_facet(Halfedge *h, Facet *f) const
void set_vertex(Halfedge *h, Vertex *v) const
void set_prev(Halfedge *h, Halfedge *g) const

Here is the call graph for this function:

Halfedge* join_vertex ( HDS hds,
Halfedge h 
)
inline

Definition at line 452 of file Halfedge_data_structure_decorator.h.

References Assert_compile_time_tag(), CGAL_assertion, CGAL_assertion_code, Halfedge_data_structure_decorator< _HDS >::delete_vertex(), Halfedge_data_structure_decorator< _HDS >::find_prev(), Halfedge_data_structure_decorator< _HDS >::get_vertex(), Halfedge::is_border(), Halfedge::next(), Halfedge::opposite(), Halfedge_data_structure_decorator< _HDS >::remove_halfedge(), Halfedge_data_structure_decorator< _HDS >::set_facet_halfedge(), Halfedge_data_structure_decorator< _HDS >::set_vertex(), and Halfedge_data_structure_decorator< _HDS >::set_vertex_halfedge().

452  {
453  // join the two vertices incident to h. The vertex denoted by
454  // `h->opposite()' gets removed. Returns the predecessor of h. The
455  // invariant `join_vertex( split_vertex( h, g))' returns h and
456  // keeps `hds' unchanged. The time is proportional to the
457  // degree of the vertex removed and the time to compute `h.prev()'
458  // . Precondition: `HDS' supports removal of vertices.
460  Halfedge* hprev = find_prev( h->opposite());
461  Halfedge* gprev = find_prev( h);
462  remove_halfedge( hprev);
463  remove_halfedge( gprev);
464  hds.delete_edge( h);
465  delete_vertex( hds, get_vertex( gprev));
466  // 'half' of the halfedges have their correct vertex.
467  // Here we do the remaining halfedges.
468  h = hprev;
469  CGAL_assertion_code( std::size_t termination_count = 0;)
470  while ( h != gprev) {
471  CGAL_assertion( ++termination_count != 0);
472  h = h->next()->opposite();
473  set_vertex( h, get_vertex( hprev));
474  }
475  set_vertex_halfedge( hprev);
476  if ( ! hprev->is_border())
477  set_facet_halfedge( hprev);
478  if ( ! gprev->is_border())
479  set_facet_halfedge( gprev);
480  return hprev;
481  }
#define CGAL_assertion(EX)
Definition: assertions.h:87
Halfedge opposite() const
Get the ID of the opposite edge of a given edge.
Definition: Manifold_2.h:454
This class encapsulate a halfedge over a window manifold.
Definition: Manifold_2.h:446
void set_facet_halfedge(Facet *f, Halfedge *g) const
Halfedge next() const
Get the next halfedge of its owner element.
Definition: Manifold_2.h:465
#define CGAL_assertion_code(CODE)
Definition: assertions.h:91
bool is_border() const
Is the edge a border edge?
Definition: Manifold_2.h:476
void Assert_compile_time_tag(const Tag &, const Derived &b)
void set_vertex_halfedge(Vertex *v, Halfedge *g) const
void set_vertex(Halfedge *h, Vertex *v) const

Here is the call graph for this function:

void make_hole ( HDS ,
Halfedge ,
Tag_false   
)
inlineprotected

Definition at line 634 of file Halfedge_data_structure_decorator.h.

Referenced by Halfedge_data_structure_decorator< _HDS >::make_hole().

634 {}

Here is the caller graph for this function:

void make_hole ( HDS hds,
Halfedge h,
Tag_true   
)
inlineprotected

Definition at line 637 of file Halfedge_data_structure_decorator.h.

References Assert_compile_time_tag(), CGAL_precondition, Halfedge::is_border(), and Halfedge_data_structure_decorator< _HDS >::set_facet_in_facet_loop().

637  {
639  CGAL_precondition( h != 0);
640  CGAL_precondition( ! h->is_border());
641  hds.delete_facet( h->facet());
643  }
void set_facet_in_facet_loop(Halfedge *, Facet *, Tag_false)
#define CGAL_precondition(EX)
Definition: assertions.h:147
bool is_border() const
Is the edge a border edge?
Definition: Manifold_2.h:476
void Assert_compile_time_tag(const Tag &, const Derived &b)

Here is the call graph for this function:

Halfedge* make_hole ( HDS hds,
Halfedge h 
)
inline

Definition at line 655 of file Halfedge_data_structure_decorator.h.

References Halfedge_data_structure_decorator< _HDS >::make_hole().

655  {
656  // removes incident facet and makes all halfedges incident to the
657  // facet to border edges. Returns h. Precondition: `HDS'
658  // supports removal of facets. `! h.is_border()'.
660  return h;
661  }
_HDS::Supports_halfedge_facet Supports_halfedge_facet
void make_hole(HDS &, Halfedge *, Tag_false)

Here is the call graph for this function:

Facet* new_facet ( HDS hds,
const Facet f 
) const
inline

Definition at line 231 of file Halfedge_data_structure_decorator.h.

References Halfedge_data_structure_decorator< _HDS >::new_facet().

231  {
232  // returns a copy of f from `hds' if facets
233  // are supported, `NULL' otherwise.
234  return new_facet( hds, f, Supports_halfedge_facet());
235  }
_HDS::Supports_halfedge_facet Supports_halfedge_facet

Here is the call graph for this function:

Facet* new_facet ( HDS ,
Tag_false   
) const
inline

Definition at line 1026 of file Halfedge_data_structure_decorator.h.

1026 { return NULL;}
Facet* new_facet ( HDS hds,
Tag_true   
) const
inline

Definition at line 1027 of file Halfedge_data_structure_decorator.h.

1027  {
1028  return hds.new_facet();
1029  }
Facet* new_facet ( HDS ,
const Facet ,
Tag_false   
) const
inline

Definition at line 1031 of file Halfedge_data_structure_decorator.h.

1031  {
1032  return NULL;
1033  }
Facet* new_facet ( HDS hds,
const Facet f,
Tag_true   
) const
inline

Definition at line 1034 of file Halfedge_data_structure_decorator.h.

1034  {
1035  return hds.new_facet(f);
1036  }
Vertex* new_vertex ( HDS hds,
const Point p 
) const
inline

Definition at line 213 of file Halfedge_data_structure_decorator.h.

References Halfedge_data_structure_decorator< _HDS >::new_vertex().

213  {
214  // returns a new vertex from `hds' initialized to p if vertices
215  // are supported, `NULL' otherwise.
216  return new_vertex( hds, p, Supports_halfedge_vertex());
217  }
_HDS::Supports_halfedge_vertex Supports_halfedge_vertex

Here is the call graph for this function:

Vertex* new_vertex ( HDS hds,
const Vertex v 
) const
inline

Definition at line 219 of file Halfedge_data_structure_decorator.h.

References Halfedge_data_structure_decorator< _HDS >::new_vertex().

219  {
220  // returns a copy of v from `hds' if vertices
221  // are supported, `NULL' otherwise.
222  return new_vertex( hds, v, Supports_halfedge_vertex());
223  }
*********************************************************************Illinois Open Source License ****University of Illinois NCSA **Open Source License University of Illinois All rights reserved ****Developed free of to any person **obtaining a copy of this software and associated documentation to deal with the Software without including without limitation the rights to and or **sell copies of the and to permit persons to whom the **Software is furnished to do subject to the following this list of conditions and the following disclaimers ****Redistributions in binary form must reproduce the above **copyright this list of conditions and the following **disclaimers in the documentation and or other materials **provided with the distribution ****Neither the names of the Center for Simulation of Advanced the University of nor the names of its **contributors may be used to endorse or promote products derived **from this Software without specific prior written permission ****THE SOFTWARE IS PROVIDED AS WITHOUT WARRANTY OF ANY **EXPRESS OR INCLUDING BUT NOT LIMITED TO THE WARRANTIES **OF FITNESS FOR A PARTICULAR PURPOSE AND **NONINFRINGEMENT IN NO EVENT SHALL THE CONTRIBUTORS OR **COPYRIGHT HOLDERS BE LIABLE FOR ANY DAMAGES OR OTHER WHETHER IN AN ACTION OF TORT OR **ARISING OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE **USE OR OTHER DEALINGS WITH THE SOFTWARE v
Definition: roccomf90.h:20
_HDS::Supports_halfedge_vertex Supports_halfedge_vertex

Here is the call graph for this function:

Vertex* new_vertex ( HDS ,
Tag_false   
) const
inline

Definition at line 1007 of file Halfedge_data_structure_decorator.h.

1007 { return NULL;}
Vertex* new_vertex ( HDS hds,
Tag_true   
) const
inline

Definition at line 1008 of file Halfedge_data_structure_decorator.h.

1008  {
1009  return hds.new_vertex();
1010  }
Vertex* new_vertex ( HDS ,
const Point ,
Tag_false   
) const
inline

Definition at line 1012 of file Halfedge_data_structure_decorator.h.

1012  {
1013  return NULL;
1014  }
Vertex* new_vertex ( HDS hds,
const Point p,
Tag_true   
) const
inline

Definition at line 1015 of file Halfedge_data_structure_decorator.h.

1015  {
1016  return hds.new_vertex(p);
1017  }
Vertex* new_vertex ( HDS ,
const Vertex ,
Tag_false   
) const
inline

Definition at line 1019 of file Halfedge_data_structure_decorator.h.

1019  {
1020  return NULL;
1021  }
Vertex* new_vertex ( HDS hds,
const Vertex v,
Tag_true   
) const
inline

Definition at line 1022 of file Halfedge_data_structure_decorator.h.

1022  {
1023  return hds.new_vertex(v);
1024  }
*********************************************************************Illinois Open Source License ****University of Illinois NCSA **Open Source License University of Illinois All rights reserved ****Developed free of to any person **obtaining a copy of this software and associated documentation to deal with the Software without including without limitation the rights to and or **sell copies of the and to permit persons to whom the **Software is furnished to do subject to the following this list of conditions and the following disclaimers ****Redistributions in binary form must reproduce the above **copyright this list of conditions and the following **disclaimers in the documentation and or other materials **provided with the distribution ****Neither the names of the Center for Simulation of Advanced the University of nor the names of its **contributors may be used to endorse or promote products derived **from this Software without specific prior written permission ****THE SOFTWARE IS PROVIDED AS WITHOUT WARRANTY OF ANY **EXPRESS OR INCLUDING BUT NOT LIMITED TO THE WARRANTIES **OF FITNESS FOR A PARTICULAR PURPOSE AND **NONINFRINGEMENT IN NO EVENT SHALL THE CONTRIBUTORS OR **COPYRIGHT HOLDERS BE LIABLE FOR ANY DAMAGES OR OTHER WHETHER IN AN ACTION OF TORT OR **ARISING OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE **USE OR OTHER DEALINGS WITH THE SOFTWARE v
Definition: roccomf90.h:20
bool normalized_border_is_valid ( const _HDS &  hds,
bool  verb = false 
) const

Definition at line 1120 of file Halfedge_data_structure_decorator.h.

1120  {
1121  // checks whether all non-border edges precedes the border edges.
1122  typedef typename _HDS::Halfedge_const_iterator Halfedge_const_iterator;
1123  typedef typename _HDS::Size Size;
1124  bool valid = true;
1125  Verbose_ostream verr(verb);
1126  verr << "begin Halfedge_data_structure_decorator<HDS>::"
1127  "normalized_border_is_valid( verb=true):" << std::endl;
1128 
1129  Halfedge_const_iterator e = hds.halfedges_begin();
1130  Size count = 0;
1131  while( e != hds.halfedges_end() && ! e->is_border() && !
1132  e->opposite()->is_border()) {
1133  ++e;
1134  ++e;
1135  ++count;
1136  }
1137  verr << " non-border edges: " << count << std::endl;
1138  if ( e != hds.border_halfedges_begin()) {
1139  verr << " first border edge does not start at "
1140  "border_halfedges_begin()" << std::endl;
1141  valid = false;
1142  } else {
1143  count = 0;
1144  while( valid && e != hds.halfedges_end() &&
1145  e->opposite()->is_border()) {
1146  ++e;
1147  ++e;
1148  ++count;
1149  }
1150  verr << " border edges: " << count << std::endl;
1151  verr << " total edges: " << hds.size_of_halfedges()/2
1152  << std::endl;
1153  if ( e != hds.halfedges_end()) {
1154  if ( e->is_border()) {
1155  verr << " border edge " << count
1156  << ": wrong orientation." << std::endl;
1157  }
1158  verr << " the sum of full + border equals not total edges."
1159  << std::endl;
1160  valid = false;
1161  }
1162  }
1163  verr << "end of Halfedge_data_structure_decorator<HDS>::"
1164  "normalized_border_is_valid(): structure is "
1165  << ( valid ? "valid." : "NOT VALID.") << std::endl;
1166  return valid;
1167 }
void remove_halfedge ( Halfedge h) const
inline

Definition at line 337 of file Halfedge_data_structure_decorator.h.

References Halfedge::next(), and Halfedge_data_structure_decorator< _HDS >::set_prev().

Referenced by Halfedge_data_structure_decorator< _HDS >::join_vertex().

337  {
338  // removes `h->next()' from the halfedge circle around the facet
339  // pointed to by h. The new successor of h will be `h->next()
340  // ->next()'.
341  h->set_next( h->next()->next());
342  set_prev( h->next(), h);
343  }
Halfedge next() const
Get the next halfedge of its owner element.
Definition: Manifold_2.h:465
void set_prev(Halfedge *h, Halfedge *g) const

Here is the call graph for this function:

Here is the caller graph for this function:

void remove_tip ( Halfedge h) const
inline

Definition at line 319 of file Halfedge_data_structure_decorator.h.

References Halfedge::next(), Halfedge::opposite(), and Halfedge_data_structure_decorator< _HDS >::set_prev().

Referenced by Halfedge_data_structure_decorator< _HDS >::erase_facet(), Halfedge_data_structure_decorator< _HDS >::flip_edge(), and Halfedge_data_structure_decorator< _HDS >::join_facet().

319  {
320  // removes `h->next()->opposite()' from the halfedge circle around
321  // the vertex pointed to by h. The new successor of h will be
322  // `h->next()->opposite()->next()'.
323  h->set_next( h->next()->opposite()->next());
324  set_prev( h->next(), h);
325  }
Halfedge opposite() const
Get the ID of the opposite edge of a given edge.
Definition: Manifold_2.h:454
Halfedge next() const
Get the next halfedge of its owner element.
Definition: Manifold_2.h:465
void set_prev(Halfedge *h, Halfedge *g) const

Here is the call graph for this function:

Here is the caller graph for this function:

CGAL_MEDIUM_INLINE void reorient_facet ( Halfedge first)

Definition at line 1365 of file Halfedge_data_structure_decorator.h.

References Halfedge_data_structure_decorator< _HDS >::get_vertex(), Halfedge::next(), Halfedge_data_structure_decorator< _HDS >::set_prev(), Halfedge_data_structure_decorator< _HDS >::set_vertex(), and Halfedge_data_structure_decorator< _HDS >::set_vertex_halfedge().

1365  {
1366  if ( first == NULL)
1367  return;
1369  Halfedge* last = first;
1370  Halfedge* prev = first;
1371  Halfedge* start = first;
1372  first = first->next();
1373  Vertex* new_v = decorator.get_vertex( start);
1374  while (first != last) {
1375  Vertex* tmp_v = decorator.get_vertex( first);
1376  decorator.set_vertex( first, new_v);
1377  decorator.set_vertex_halfedge( first);
1378  new_v = tmp_v;
1379  Halfedge* next = first->next();
1380  first->set_next( prev);
1381  decorator.set_prev( first, next);
1382  prev = first;
1383  first = next;
1384  }
1385  decorator.set_vertex( start, new_v);
1386  decorator.set_vertex_halfedge( start);
1387  Halfedge* next = start->next();
1388  start->set_next( prev);
1389  decorator.set_prev( start, next);
1390 }
This class encapsulate a halfedge over a window manifold.
Definition: Manifold_2.h:446
Halfedge next() const
Get the next halfedge of its owner element.
Definition: Manifold_2.h:465
void set_vertex_halfedge(Vertex *v, Halfedge *g) const
void set_vertex(Halfedge *h, Vertex *v) const
void set_prev(Halfedge *h, Halfedge *g) const

Here is the call graph for this function:

void set_facet ( Halfedge ,
Facet ,
Tag_false   
) const
inline

Definition at line 1084 of file Halfedge_data_structure_decorator.h.

1084 {}
void set_facet ( Halfedge h,
Facet f,
Tag_true   
) const
inline

Definition at line 1085 of file Halfedge_data_structure_decorator.h.

1085  {
1086  h->set_facet(f);
1087  }
void set_facet_halfedge ( Halfedge h) const
inline

Definition at line 895 of file Halfedge_data_structure_decorator.h.

References Halfedge_data_structure_decorator< _HDS >::set_facet_halfedge().

895  {
896  // sets the incident halfedge of the facet incident to h to h.
898  }
_HDS::Supports_halfedge_facet Supports_halfedge_facet
void set_facet_halfedge(Facet *f, Halfedge *g) const

Here is the call graph for this function:

void set_facet_halfedge ( Facet ,
Halfedge ,
Tag_false   
) const
inline

Definition at line 1089 of file Halfedge_data_structure_decorator.h.

1089 {}
void set_facet_halfedge ( Facet f,
Halfedge g,
Tag_true   
) const
inline

Definition at line 1090 of file Halfedge_data_structure_decorator.h.

1090  {
1091  f->set_halfedge(g);
1092  }
void set_facet_halfedge ( Halfedge ,
Halfedge ,
Tag_false   
) const
inline

Definition at line 1094 of file Halfedge_data_structure_decorator.h.

1094 {}
void set_facet_halfedge ( Halfedge h,
Halfedge g,
Tag_true   
) const
inline

Definition at line 1095 of file Halfedge_data_structure_decorator.h.

References Halfedge_data_structure_decorator< _HDS >::set_facet_halfedge().

1095  {
1096  set_facet_halfedge( h->facet(), g);
1097  }
void set_facet_halfedge(Facet *f, Halfedge *g) const

Here is the call graph for this function:

void set_facet_in_facet_loop ( Halfedge h,
Facet f,
Tag_true   
)
inline

Definition at line 366 of file Halfedge_data_structure_decorator.h.

References CGAL_assertion, CGAL_assertion_code, and Halfedge::next().

366  {
367  CGAL_assertion_code( std::size_t termination_count = 0;)
368  Halfedge* end = h;
369  do {
370  CGAL_assertion( ++termination_count != 0);
371  h->set_facet( f);
372  h = h->next();
373  } while ( h != end);
374  }
#define CGAL_assertion(EX)
Definition: assertions.h:87
This class encapsulate a halfedge over a window manifold.
Definition: Manifold_2.h:446
Halfedge next() const
Get the next halfedge of its owner element.
Definition: Manifold_2.h:465
#define CGAL_assertion_code(CODE)
Definition: assertions.h:91

Here is the call graph for this function:

void set_facet_in_facet_loop ( Halfedge h,
Facet f 
)
inline

Definition at line 376 of file Halfedge_data_structure_decorator.h.

References CGAL_precondition, and Halfedge_data_structure_decorator< _HDS >::set_facet_in_facet_loop().

376  {
377  // Loops around the facet incident to h and sets all facet
378  // pointers to f. Precondition: `h != NULL'.
379  CGAL_precondition( h != 0);
381  }
_HDS::Supports_halfedge_facet Supports_halfedge_facet
void set_facet_in_facet_loop(Halfedge *, Facet *, Tag_false)
#define CGAL_precondition(EX)
Definition: assertions.h:147

Here is the call graph for this function:

void set_point ( Vertex v,
const Point p 
) const
inline

Definition at line 855 of file Halfedge_data_structure_decorator.h.

Referenced by Halfedge_data_structure_decorator< _HDS >::set_point().

855  {
857  // sets the point of v to p.
858  }
*********************************************************************Illinois Open Source License ****University of Illinois NCSA **Open Source License University of Illinois All rights reserved ****Developed free of to any person **obtaining a copy of this software and associated documentation to deal with the Software without including without limitation the rights to and or **sell copies of the and to permit persons to whom the **Software is furnished to do subject to the following this list of conditions and the following disclaimers ****Redistributions in binary form must reproduce the above **copyright this list of conditions and the following **disclaimers in the documentation and or other materials **provided with the distribution ****Neither the names of the Center for Simulation of Advanced the University of nor the names of its **contributors may be used to endorse or promote products derived **from this Software without specific prior written permission ****THE SOFTWARE IS PROVIDED AS WITHOUT WARRANTY OF ANY **EXPRESS OR INCLUDING BUT NOT LIMITED TO THE WARRANTIES **OF FITNESS FOR A PARTICULAR PURPOSE AND **NONINFRINGEMENT IN NO EVENT SHALL THE CONTRIBUTORS OR **COPYRIGHT HOLDERS BE LIABLE FOR ANY DAMAGES OR OTHER WHETHER IN AN ACTION OF TORT OR **ARISING OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE **USE OR OTHER DEALINGS WITH THE SOFTWARE v
Definition: roccomf90.h:20
void set_point(Vertex *v, const Point &p) const

Here is the caller graph for this function:

void set_point ( Halfedge h,
const Point p 
) const
inline

Definition at line 860 of file Halfedge_data_structure_decorator.h.

References Halfedge_data_structure_decorator< _HDS >::set_point().

860  {
861  // sets the point of the vertex incident to h to p.
863  }
void set_point(Vertex *v, const Point &p) const
_HDS::Supports_halfedge_vertex Supports_halfedge_vertex

Here is the call graph for this function:

void set_point ( Vertex ,
const Point ,
Tag_false   
) const
inline

Definition at line 1054 of file Halfedge_data_structure_decorator.h.

1054 {}
void set_point ( Vertex v,
const Point p,
Tag_true   
) const
inline

Definition at line 1055 of file Halfedge_data_structure_decorator.h.

1055  {
1056  v->point() = p;
1057  }
*********************************************************************Illinois Open Source License ****University of Illinois NCSA **Open Source License University of Illinois All rights reserved ****Developed free of to any person **obtaining a copy of this software and associated documentation to deal with the Software without including without limitation the rights to and or **sell copies of the and to permit persons to whom the **Software is furnished to do subject to the following this list of conditions and the following disclaimers ****Redistributions in binary form must reproduce the above **copyright this list of conditions and the following **disclaimers in the documentation and or other materials **provided with the distribution ****Neither the names of the Center for Simulation of Advanced the University of nor the names of its **contributors may be used to endorse or promote products derived **from this Software without specific prior written permission ****THE SOFTWARE IS PROVIDED AS WITHOUT WARRANTY OF ANY **EXPRESS OR INCLUDING BUT NOT LIMITED TO THE WARRANTIES **OF FITNESS FOR A PARTICULAR PURPOSE AND **NONINFRINGEMENT IN NO EVENT SHALL THE CONTRIBUTORS OR **COPYRIGHT HOLDERS BE LIABLE FOR ANY DAMAGES OR OTHER WHETHER IN AN ACTION OF TORT OR **ARISING OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE **USE OR OTHER DEALINGS WITH THE SOFTWARE v
Definition: roccomf90.h:20
void set_point ( Halfedge ,
const Point ,
Tag_false   
) const
inline

Definition at line 1059 of file Halfedge_data_structure_decorator.h.

1059 {}
void set_point ( Halfedge h,
const Point p,
Tag_true   
) const
inline

Definition at line 1060 of file Halfedge_data_structure_decorator.h.

References Halfedge_data_structure_decorator< _HDS >::set_point().

1060  {
1061  set_point( h->vertex(), p);
1062  }
void set_point(Vertex *v, const Point &p) const

Here is the call graph for this function:

void set_prev ( Halfedge ,
Halfedge ,
Tag_false   
) const
inline

Definition at line 1079 of file Halfedge_data_structure_decorator.h.

1079 {}
void set_prev ( Halfedge h,
Halfedge g,
Tag_true   
) const
inline

Definition at line 1080 of file Halfedge_data_structure_decorator.h.

1080  {
1081  h->set_prev( g);
1082  }
void set_vertex ( Halfedge h,
Vertex v 
) const
inline

Definition at line 875 of file Halfedge_data_structure_decorator.h.

Referenced by Halfedge_data_structure_decorator< _HDS >::close_tip(), Halfedge_data_structure_decorator< _HDS >::create_loop(), Halfedge_data_structure_decorator< _HDS >::create_segment(), Halfedge_data_structure_decorator< _HDS >::insert_tip(), Halfedge_data_structure_decorator< _HDS >::join_loop(), Halfedge_data_structure_decorator< _HDS >::join_vertex(), Halfedge_data_structure_using_vector< V, H, F >::pointer_update(), Halfedge_data_structure_decorator< _HDS >::reorient_facet(), Halfedge_data_structure_decorator< _HDS >::split_loop(), and Halfedge_data_structure_decorator< _HDS >::split_vertex().

875  {
876  // sets the incident vertex of h to v.
878  }
*********************************************************************Illinois Open Source License ****University of Illinois NCSA **Open Source License University of Illinois All rights reserved ****Developed free of to any person **obtaining a copy of this software and associated documentation to deal with the Software without including without limitation the rights to and or **sell copies of the and to permit persons to whom the **Software is furnished to do subject to the following this list of conditions and the following disclaimers ****Redistributions in binary form must reproduce the above **copyright this list of conditions and the following **disclaimers in the documentation and or other materials **provided with the distribution ****Neither the names of the Center for Simulation of Advanced the University of nor the names of its **contributors may be used to endorse or promote products derived **from this Software without specific prior written permission ****THE SOFTWARE IS PROVIDED AS WITHOUT WARRANTY OF ANY **EXPRESS OR INCLUDING BUT NOT LIMITED TO THE WARRANTIES **OF FITNESS FOR A PARTICULAR PURPOSE AND **NONINFRINGEMENT IN NO EVENT SHALL THE CONTRIBUTORS OR **COPYRIGHT HOLDERS BE LIABLE FOR ANY DAMAGES OR OTHER WHETHER IN AN ACTION OF TORT OR **ARISING OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE **USE OR OTHER DEALINGS WITH THE SOFTWARE v
Definition: roccomf90.h:20
_HDS::Supports_halfedge_vertex Supports_halfedge_vertex
void set_vertex(Halfedge *h, Vertex *v) const

Here is the caller graph for this function:

void set_vertex ( Halfedge ,
Vertex ,
Tag_false   
) const
inline

Definition at line 1074 of file Halfedge_data_structure_decorator.h.

1074 {}
void set_vertex ( Halfedge h,
Vertex v,
Tag_true   
) const
inline

Definition at line 1075 of file Halfedge_data_structure_decorator.h.

1075  {
1076  h->set_vertex(v);
1077  }
*********************************************************************Illinois Open Source License ****University of Illinois NCSA **Open Source License University of Illinois All rights reserved ****Developed free of to any person **obtaining a copy of this software and associated documentation to deal with the Software without including without limitation the rights to and or **sell copies of the and to permit persons to whom the **Software is furnished to do subject to the following this list of conditions and the following disclaimers ****Redistributions in binary form must reproduce the above **copyright this list of conditions and the following **disclaimers in the documentation and or other materials **provided with the distribution ****Neither the names of the Center for Simulation of Advanced the University of nor the names of its **contributors may be used to endorse or promote products derived **from this Software without specific prior written permission ****THE SOFTWARE IS PROVIDED AS WITHOUT WARRANTY OF ANY **EXPRESS OR INCLUDING BUT NOT LIMITED TO THE WARRANTIES **OF FITNESS FOR A PARTICULAR PURPOSE AND **NONINFRINGEMENT IN NO EVENT SHALL THE CONTRIBUTORS OR **COPYRIGHT HOLDERS BE LIABLE FOR ANY DAMAGES OR OTHER WHETHER IN AN ACTION OF TORT OR **ARISING OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE **USE OR OTHER DEALINGS WITH THE SOFTWARE v
Definition: roccomf90.h:20
void set_vertex_halfedge ( Vertex v,
Halfedge g 
) const
inline

Definition at line 865 of file Halfedge_data_structure_decorator.h.

Referenced by Polyhedron_incremental_builder_3< HDS >::add_vertex(), Halfedge_data_structure_decorator< _HDS >::create_loop(), Halfedge_data_structure_decorator< _HDS >::create_segment(), Halfedge_data_structure_decorator< _HDS >::erase_facet(), Halfedge_data_structure_decorator< _HDS >::flip_edge(), Halfedge_data_structure_decorator< _HDS >::join_facet(), Halfedge_data_structure_decorator< _HDS >::join_vertex(), Halfedge_data_structure_using_vector< V, H, F >::pointer_update(), Halfedge_data_structure_decorator< _HDS >::reorient_facet(), Halfedge_data_structure_decorator< _HDS >::set_vertex_halfedge(), Halfedge_data_structure_decorator< _HDS >::split_loop(), and Halfedge_data_structure_decorator< _HDS >::split_vertex().

865  {
866  // sets the incident halfedge of v to g.
868  }
_HDS::Supports_vertex_halfedge Supports_vertex_halfedge
*********************************************************************Illinois Open Source License ****University of Illinois NCSA **Open Source License University of Illinois All rights reserved ****Developed free of to any person **obtaining a copy of this software and associated documentation to deal with the Software without including without limitation the rights to and or **sell copies of the and to permit persons to whom the **Software is furnished to do subject to the following this list of conditions and the following disclaimers ****Redistributions in binary form must reproduce the above **copyright this list of conditions and the following **disclaimers in the documentation and or other materials **provided with the distribution ****Neither the names of the Center for Simulation of Advanced the University of nor the names of its **contributors may be used to endorse or promote products derived **from this Software without specific prior written permission ****THE SOFTWARE IS PROVIDED AS WITHOUT WARRANTY OF ANY **EXPRESS OR INCLUDING BUT NOT LIMITED TO THE WARRANTIES **OF FITNESS FOR A PARTICULAR PURPOSE AND **NONINFRINGEMENT IN NO EVENT SHALL THE CONTRIBUTORS OR **COPYRIGHT HOLDERS BE LIABLE FOR ANY DAMAGES OR OTHER WHETHER IN AN ACTION OF TORT OR **ARISING OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE **USE OR OTHER DEALINGS WITH THE SOFTWARE v
Definition: roccomf90.h:20
void set_vertex_halfedge(Vertex *v, Halfedge *g) const

Here is the caller graph for this function:

void set_vertex_halfedge ( Halfedge h) const
inline

Definition at line 870 of file Halfedge_data_structure_decorator.h.

References Halfedge_data_structure_decorator< _HDS >::set_vertex_halfedge().

870  {
871  // sets the incident halfedge of the vertex incident to h to h.
873  }
void set_vertex_halfedge(Vertex *v, Halfedge *g) const
_HDS::Supports_halfedge_vertex Supports_halfedge_vertex

Here is the call graph for this function:

void set_vertex_halfedge ( Vertex ,
Halfedge ,
Tag_false   
) const
inline

Definition at line 1064 of file Halfedge_data_structure_decorator.h.

1064 {}
void set_vertex_halfedge ( Vertex v,
Halfedge g,
Tag_true   
) const
inline

Definition at line 1065 of file Halfedge_data_structure_decorator.h.

1065  {
1066  v->set_halfedge(g);
1067  }
*********************************************************************Illinois Open Source License ****University of Illinois NCSA **Open Source License University of Illinois All rights reserved ****Developed free of to any person **obtaining a copy of this software and associated documentation to deal with the Software without including without limitation the rights to and or **sell copies of the and to permit persons to whom the **Software is furnished to do subject to the following this list of conditions and the following disclaimers ****Redistributions in binary form must reproduce the above **copyright this list of conditions and the following **disclaimers in the documentation and or other materials **provided with the distribution ****Neither the names of the Center for Simulation of Advanced the University of nor the names of its **contributors may be used to endorse or promote products derived **from this Software without specific prior written permission ****THE SOFTWARE IS PROVIDED AS WITHOUT WARRANTY OF ANY **EXPRESS OR INCLUDING BUT NOT LIMITED TO THE WARRANTIES **OF FITNESS FOR A PARTICULAR PURPOSE AND **NONINFRINGEMENT IN NO EVENT SHALL THE CONTRIBUTORS OR **COPYRIGHT HOLDERS BE LIABLE FOR ANY DAMAGES OR OTHER WHETHER IN AN ACTION OF TORT OR **ARISING OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE **USE OR OTHER DEALINGS WITH THE SOFTWARE v
Definition: roccomf90.h:20
void set_vertex_halfedge ( Halfedge ,
Halfedge ,
Tag_false   
) const
inline

Definition at line 1069 of file Halfedge_data_structure_decorator.h.

1069 {}
void set_vertex_halfedge ( Halfedge h,
Halfedge g,
Tag_true   
) const
inline

Definition at line 1070 of file Halfedge_data_structure_decorator.h.

References Halfedge_data_structure_decorator< _HDS >::set_vertex_halfedge().

1070  {
1071  set_vertex_halfedge( h->vertex(), g);
1072  }
void set_vertex_halfedge(Vertex *v, Halfedge *g) const

Here is the call graph for this function:

void set_vertex_in_vertex_loop ( Halfedge h,
Vertex v,
Tag_true   
)
inline

Definition at line 347 of file Halfedge_data_structure_decorator.h.

References CGAL_assertion, CGAL_assertion_code, Halfedge::next(), and Halfedge::opposite().

348  {
349  CGAL_assertion_code( std::size_t termination_count = 0;)
350  Halfedge* end = h;
351  do {
352  CGAL_assertion( ++termination_count != 0);
353  h->set_vertex( v);
354  h = h->next()->opposite();
355  } while ( h != end);
356  }
#define CGAL_assertion(EX)
Definition: assertions.h:87
Halfedge opposite() const
Get the ID of the opposite edge of a given edge.
Definition: Manifold_2.h:454
This class encapsulate a halfedge over a window manifold.
Definition: Manifold_2.h:446
Halfedge next() const
Get the next halfedge of its owner element.
Definition: Manifold_2.h:465
#define CGAL_assertion_code(CODE)
Definition: assertions.h:91
*********************************************************************Illinois Open Source License ****University of Illinois NCSA **Open Source License University of Illinois All rights reserved ****Developed free of to any person **obtaining a copy of this software and associated documentation to deal with the Software without including without limitation the rights to and or **sell copies of the and to permit persons to whom the **Software is furnished to do subject to the following this list of conditions and the following disclaimers ****Redistributions in binary form must reproduce the above **copyright this list of conditions and the following **disclaimers in the documentation and or other materials **provided with the distribution ****Neither the names of the Center for Simulation of Advanced the University of nor the names of its **contributors may be used to endorse or promote products derived **from this Software without specific prior written permission ****THE SOFTWARE IS PROVIDED AS WITHOUT WARRANTY OF ANY **EXPRESS OR INCLUDING BUT NOT LIMITED TO THE WARRANTIES **OF FITNESS FOR A PARTICULAR PURPOSE AND **NONINFRINGEMENT IN NO EVENT SHALL THE CONTRIBUTORS OR **COPYRIGHT HOLDERS BE LIABLE FOR ANY DAMAGES OR OTHER WHETHER IN AN ACTION OF TORT OR **ARISING OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE **USE OR OTHER DEALINGS WITH THE SOFTWARE v
Definition: roccomf90.h:20

Here is the call graph for this function:

void set_vertex_in_vertex_loop ( Halfedge h,
Vertex v 
)
inline

Definition at line 358 of file Halfedge_data_structure_decorator.h.

References CGAL_precondition, and Halfedge_data_structure_decorator< _HDS >::set_vertex_in_vertex_loop().

358  {
359  // Loops around the vertex incident to h and sets all vertex
360  // pointers to v. Precondition: `h != NULL'.
361  CGAL_precondition( h != 0);
363  }
void set_vertex_in_vertex_loop(Halfedge *, Vertex *, Tag_false)
*********************************************************************Illinois Open Source License ****University of Illinois NCSA **Open Source License University of Illinois All rights reserved ****Developed free of to any person **obtaining a copy of this software and associated documentation to deal with the Software without including without limitation the rights to and or **sell copies of the and to permit persons to whom the **Software is furnished to do subject to the following this list of conditions and the following disclaimers ****Redistributions in binary form must reproduce the above **copyright this list of conditions and the following **disclaimers in the documentation and or other materials **provided with the distribution ****Neither the names of the Center for Simulation of Advanced the University of nor the names of its **contributors may be used to endorse or promote products derived **from this Software without specific prior written permission ****THE SOFTWARE IS PROVIDED AS WITHOUT WARRANTY OF ANY **EXPRESS OR INCLUDING BUT NOT LIMITED TO THE WARRANTIES **OF FITNESS FOR A PARTICULAR PURPOSE AND **NONINFRINGEMENT IN NO EVENT SHALL THE CONTRIBUTORS OR **COPYRIGHT HOLDERS BE LIABLE FOR ANY DAMAGES OR OTHER WHETHER IN AN ACTION OF TORT OR **ARISING OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE **USE OR OTHER DEALINGS WITH THE SOFTWARE v
Definition: roccomf90.h:20
#define CGAL_precondition(EX)
Definition: assertions.h:147
_HDS::Supports_halfedge_vertex Supports_halfedge_vertex

Here is the call graph for this function:

Halfedge* split_facet ( HDS hds,
Halfedge h,
Halfedge g 
)
inline

Definition at line 387 of file Halfedge_data_structure_decorator.h.

References Halfedge_data_structure_decorator< _HDS >::get_facet(), Halfedge_data_structure_decorator< _HDS >::insert_tip(), Halfedge_data_structure_decorator< _HDS >::new_facet(), Halfedge::opposite(), Halfedge_data_structure_decorator< _HDS >::set_facet(), Halfedge_data_structure_decorator< _HDS >::set_facet_halfedge(), and Halfedge_data_structure_decorator< _HDS >::set_facet_in_facet_loop().

387  {
388  // split the facet incident to `h' and `g' into two facets with a
389  // new diagonal between the two vertices denoted by `h' and `g'
390  // respectively. The second (new) facet is a copy of the first
391  // facet. It returns the new diagonal. The time is proportional to
392  // the distance from `h' to `g' around the facet.
393  Halfedge* hnew = hds.new_edge();
394  Facet* fnew = new_facet( hds, get_facet(h));
395  insert_tip( hnew, g);
396  insert_tip( hnew->opposite(), h);
397  set_facet( hnew, get_facet(h));
398  set_facet_in_facet_loop( hnew->opposite(), fnew);
399  set_facet_halfedge( hnew);
400  set_facet_halfedge( hnew->opposite());
401  return hnew;
402  }
Halfedge opposite() const
Get the ID of the opposite edge of a given edge.
Definition: Manifold_2.h:454
This class encapsulate a halfedge over a window manifold.
Definition: Manifold_2.h:446
void set_facet_halfedge(Facet *f, Halfedge *g) const
void set_facet_in_facet_loop(Halfedge *, Facet *, Tag_false)
void insert_tip(Halfedge *h, Halfedge *v) const
void set_facet(Halfedge *h, Facet *f) const

Here is the call graph for this function:

Halfedge* split_loop ( HDS hds,
Halfedge h,
Halfedge i,
Halfedge j 
)
inline

Definition at line 483 of file Halfedge_data_structure_decorator.h.

References CGAL_assertion, CGAL_assertion_code, CGAL_precondition, Halfedge_data_structure_decorator< _HDS >::close_tip(), Halfedge_data_structure_decorator< _HDS >::get_vertex(), i, Halfedge_data_structure_decorator< _HDS >::insert_tip(), j, Halfedge_data_structure_decorator< _HDS >::new_facet(), Halfedge_data_structure_decorator< _HDS >::new_vertex(), Halfedge::next(), Halfedge::opposite(), Halfedge_data_structure_decorator< _HDS >::set_facet(), Halfedge_data_structure_decorator< _HDS >::set_facet_halfedge(), Halfedge_data_structure_decorator< _HDS >::set_prev(), Halfedge_data_structure_decorator< _HDS >::set_vertex(), and Halfedge_data_structure_decorator< _HDS >::set_vertex_halfedge().

483  {
484  // cuts `hds' into two parts along the cycle (h,i,j).
485  // Three copies of the vertices, three copies of the halfedges,
486  // and two new triangles will be created. h,i,j will be incident
487  // to the first new triangle. The returnvalue will be an halfedge
488  // iterator denoting the new halfedge of the second new triangle
489  // which was h beforehand. Precondition: h,i,j are distinct,
490  // consecutive vertices of `hds' and form a cycle: i.e.
491  // `h->vertex() == i->opposite()->vertex()', ..., `j->vertex() ==
492  // h->opposite()->vertex()'.
493  CGAL_precondition( h != i);
494  CGAL_precondition( h != j);
495  CGAL_precondition( i != j);
499  // Create a copy of the triangle.
500  Halfedge* hnew = hds.new_edge( h);
501  Halfedge* inew = hds.new_edge( i);
502  Halfedge* jnew = hds.new_edge( j);
503  close_tip( hnew, new_vertex( hds, get_vertex( h)));
504  close_tip( inew, new_vertex( hds, get_vertex( i)));
505  close_tip( jnew, new_vertex( hds, get_vertex( j)));
506  insert_tip( inew->opposite(), hnew);
507  insert_tip( jnew->opposite(), inew);
508  insert_tip( hnew->opposite(), jnew);
509  // Make the new incidences with the old stucture.
510  CGAL_assertion_code( std::size_t termination_count = 0;)
511  if ( h->next() != i) {
512  Halfedge* g = h->next();
513  h->set_next( i);
514  set_prev( i, h);
515  hnew->set_next( g);
516  set_prev( g, hnew);
517  g = g->opposite();
518  while ( g->next() != i) {
519  CGAL_assertion( ++termination_count != 0);
520  set_vertex( g, get_vertex( hnew));
521  g = g->next()->opposite();
522  }
523  set_vertex( g, get_vertex( hnew));
524  g->set_next( inew);
525  set_prev( inew, g);
526  }
527  if ( i->next() != j) {
528  Halfedge* g = i->next();
529  i->set_next( j);
530  set_prev( j, i);
531  inew->set_next( g);
532  set_prev( g, inew);
533  g = g->opposite();
534  while ( g->next() != j) {
535  CGAL_assertion( ++termination_count != 0);
536  set_vertex( g, get_vertex( inew));
537  g = g->next()->opposite();
538  }
539  set_vertex( g, get_vertex( inew));
540  g->set_next( jnew);
541  set_prev( jnew, g);
542  }
543  if ( j->next() != h) {
544  Halfedge* g = j->next();
545  j->set_next( h);
546  set_prev( h, j);
547  jnew->set_next( g);
548  set_prev( g, jnew);
549  g = g->opposite();
550  while ( g->next() != h) {
551  CGAL_assertion( ++termination_count != 0);
552  set_vertex( g, get_vertex( jnew));
553  g = g->next()->opposite();
554  }
555  set_vertex( g, get_vertex( jnew));
556  g->set_next( hnew);
557  set_prev( hnew, g);
558  }
559  // Fill the holes with two new facets.
560  Facet* f = new_facet(hds);
561  set_facet( h, f);
562  set_facet( i, f);
563  set_facet( j, f);
564  set_facet_halfedge( h);
565  f = new_facet(hds);
566  set_facet( hnew->opposite(), f);
567  set_facet( inew->opposite(), f);
568  set_facet( jnew->opposite(), f);
569  set_facet_halfedge( hnew->opposite());
570  // Take care of maybe changed halfedge pointers.
571  set_facet_halfedge( hnew);
572  set_facet_halfedge( inew);
573  set_facet_halfedge( jnew);
574  set_vertex_halfedge( hnew);
575  set_vertex_halfedge( inew);
576  set_vertex_halfedge( jnew);
577  return hnew->opposite();
578  }
#define CGAL_assertion(EX)
Definition: assertions.h:87
Halfedge opposite() const
Get the ID of the opposite edge of a given edge.
Definition: Manifold_2.h:454
This class encapsulate a halfedge over a window manifold.
Definition: Manifold_2.h:446
void set_facet_halfedge(Facet *f, Halfedge *g) const
Halfedge next() const
Get the next halfedge of its owner element.
Definition: Manifold_2.h:465
#define CGAL_assertion_code(CODE)
Definition: assertions.h:91
#define CGAL_precondition(EX)
Definition: assertions.h:147
blockLoc i
Definition: read.cpp:79
void insert_tip(Halfedge *h, Halfedge *v) const
j indices j
Definition: Indexing.h:6
void set_facet(Halfedge *h, Facet *f) const
void set_vertex_halfedge(Vertex *v, Halfedge *g) const
void set_vertex(Halfedge *h, Vertex *v) const
void set_prev(Halfedge *h, Halfedge *g) const

Here is the call graph for this function:

Halfedge* split_vertex ( HDS hds,
Halfedge h,
Halfedge g 
)
inline

Definition at line 436 of file Halfedge_data_structure_decorator.h.

References Halfedge_data_structure_decorator< _HDS >::get_vertex(), Halfedge_data_structure_decorator< _HDS >::insert_halfedge(), Halfedge_data_structure_decorator< _HDS >::new_vertex(), Halfedge::opposite(), Halfedge_data_structure_decorator< _HDS >::set_vertex(), Halfedge_data_structure_decorator< _HDS >::set_vertex_halfedge(), and Halfedge_data_structure_decorator< _HDS >::set_vertex_in_vertex_loop().

436  {
437  // split the vertex incident to `h' and `g' into two vertices and
438  // connects them with a new edge. The second (new) vertex is a
439  // copy of the first vertex. It returns the new edge. The time is
440  // proportional to the distance from `h' to `g' around the vertex.
441  Halfedge* hnew = hds.new_edge();
442  Vertex* vnew = new_vertex( hds, get_vertex(h));
443  insert_halfedge( hnew, g);
444  insert_halfedge( hnew->opposite(), h);
445  set_vertex( hnew, get_vertex(h));
446  set_vertex_in_vertex_loop( hnew->opposite(), vnew);
447  set_vertex_halfedge( hnew);
448  set_vertex_halfedge( hnew->opposite());
449  return hnew;
450  }
Halfedge opposite() const
Get the ID of the opposite edge of a given edge.
Definition: Manifold_2.h:454
This class encapsulate a halfedge over a window manifold.
Definition: Manifold_2.h:446
void set_vertex_in_vertex_loop(Halfedge *, Vertex *, Tag_false)
void set_vertex_halfedge(Vertex *v, Halfedge *g) const
void set_vertex(Halfedge *h, Vertex *v) const
void insert_halfedge(Halfedge *h, Halfedge *f) const

Here is the call graph for this function:


The documentation for this class was generated from the following file: