Changes between Initial Version and Version 1 of soc/2007/GenericGeometricLibrary


Ignore:
Timestamp:
May 24, 2007, 5:09:41 AM (15 years ago)
Author:
Huseyin Akcan
Comment:

--

Legend:

Unmodified
Added
Removed
Modified
  • soc/2007/GenericGeometricLibrary

    v1 v1  
     1= Halfedge Data Structure Template Library =
     2
     3== 0. Introduction ==
     4
     5In this project, we will develop a generic halfedge data structure template library.
     6A brief overview of halfedge data structures by Herve Bronnimann is available [http://geometry.poly.edu/HDSTL/doc/hdstl/hdstl_introduction.htm here] (Sections 1-3).
     7In this project, we will follow the same design principle described in the introduction
     8document, with various modifications and additions.
     9
     10''The purpose of this document is to share the design decisions with the Boost community, and receive feedback. Please feel free to comment and discuss possible ideas as all feedback are welcome.''
     11
     12----
     13
     14== 1. Halfedge Data Structure Concepts ==
     15
     16We give the concepts of halfedges in the following sections. First
     17we analyze the halfedge data structure traits, which define various
     18choices about the HDS and lets us configure the halfedges.
     19Later we present the Halfedge data structure and design details.
     20
     21----
     22
     23=== 1.0. HDS Traits ===
     24
     25We define the HDS traits concept as a class, which provides all the
     26component types for HDS and defines the choices. In this class the
     27choices about the HDS is two folds:
     28
     29  *  '''The mandatory types:'''
     30  such as the type of the HDS, iterators for halfedges.
     31
     32  *  '''The optional types:'''
     33  such as enabling facets, enabling vertex types, using
     34  extra HDS access methods additional to the mandatory types.
     35
     36The optional
     37types are added to data structure only if they are '''explicitly defined''',
     38otherwise based on zero overhead principle '''no storage is assigned
     39for them'''. In this traits class we discuss the advantages and disadvantages of
     40each choice, including runtime options and storage  options.
     41
     42{{{
     43#!html
     44<IMG src="http://geometry.poly.edu/HDSTL/doc/hdstl/halfedge.png" halfedge/>
     45<br>
     46<b>Figure 1. </b> Halfedge data structure with all available features.
     47}}}
     48
     49Figure 1 shows all available access methods and pointers for a halfedge
     50data structure. However, not all of these have to be used in order to
     51implement a HDS. Below we define the types in the HDS traits class, and
     52discuss the options.
     53
     54||'''Type'''||'''Mandatory or optional'''||'''Allocates memory'''||'''Definition'''||
     55||Vertex type||optional||Only if defined||Defines the type of vertex stored in the HDS.||
     56||Vertex handle||optional||Only if defined||Defined only if vertex type is defined. Defines an iterator to access vertices.||
     57||Vertex const handle||optional||Only if defined||Same as vertex handle, only iterator is defined as non mutable.||
     58||Halfedge type||mandatory||yes, based on #of types used||Defines the type of the halfedges stored in HDS (such as forward, backward, bidirectional etc.).||
     59||Halfedge handle||mandatory||yes, based on #of types used||Defines an iterator to access halfedges, based on halfedge type.||
     60||Halfedge const handle||mandatory||yes, based on #of types used||Same as halfedge handle, only non mutable.||
     61||Facet type||optional||Only if defined||Defines the type of the facet.||
     62||Facet handle||optional||Only if defined||Defined if only facet type is also defined. Defines an iterator to access facets.||
     63||Facet const handle||optional||Only if defined||Same as facet handle, only non mutable.||
     64||Hole type||optional||Only if defined||Requires facets are defined. By default we assume HDS has no holes. If set means that HDS supports holes.||
     65||Hole handle||optional||Only if defined||Requires Hole type defined. Defines an iterator to access holes in a facet.|| 
     66||Hole const handle||optional||Only if defined||Same as hole handle, only non mutable.||
     67
     68HDS types and basic operations are defined as:
     69
     70  * '''Forward_hds:''' Defines that the rotations around vertices are clockwise and rotation around facets are counter             clockwise. Requires at least one of next_at_facet(), next_at_source(), next_at_target() halfedge operations are implemented.
     71
     72  * '''Backwards_hds:''' Defines that the rotations around vertices are counter clockwise and rotation around facets are clockwise. Requires at least one of prev_at_facet(), prev_at_source(), prev_at_target() halfedge operations are implemented.
     73
     74  * '''Bidirectional_hds:''' Defines that rotations can be on both directions for both vertices and facets. Requires that at least one operation from forward_hds and backward_hds each is defined.
     75
     76----
     77
     78=== 1.1. Halfedge Data Structure ===
     79
     80This class provides the halfedges, access to halfedges, operations
     81on halfedges based on the configuration done using the traits.
     82HDS class has the following operations:
     83
     84||'''Name'''||'''Definition'''||
     85||create new edge||Creates two halfedges, as halfedges are required to be created by their opposite.||
     86||delete edge||Deletes a halfedge and its opposite||
     87||opposite edge||Gets the opposite edge of the given halfedge||
     88||Default constructor||Create an empty HDS.||
     89||copy constructor||To create a new HDS.||
     90||Halfedge container||Grant access to the container.||
     91||Euler operations||Various Euler operations on the HDS. This contains multiple methods.||
     92
     93----
     94
     95== 2. Algorithms ==
     96A set of algorithms on entities obeying the defined concepts (in the
     97intrusive fashion). More details coming soon.
     98
     99----
     100
     101== 3. Implementation details ==
     102An homemade implementation of the concepts (various HDS) as well
     103as adapters for Leda and CGAL. More details coming soon.
     104
     105----
     106
     107== 4. Examples ==
     108Examples using alfedge data structures for Voronoi / Meshing and for 2D Polygonal
     109Modeling. More details coming soon.