mirror of https://github.com/CGAL/cgal
* More links in CMap doc.
* Add tag in doxyassist for LCC. * Ok for LCC user manual.
This commit is contained in:
parent
2c4950eff3
commit
2a04b964cd
|
|
@ -1165,13 +1165,13 @@ because parameters are different depending on `i` and `j`.
|
|||
|
||||
`::insert_cell_0_in_cell_1<CMap>(cm,dh0)` adds a 0-cell in the 1-cell
|
||||
containing dart `d0`. The 1-cell is split in two. This operation is
|
||||
possible if `d0`\f$ \in\f$`cm.darts()` (see example on
|
||||
possible if `d0`\f$ \in\f$\ref CombinatorialMap::darts "cm.darts()" (see example on
|
||||
\cgalFigureRef{figinsertvertex}).
|
||||
|
||||
`::insert_cell_0_in_cell_2<CMap>(cm,dh0)` adds a 0-cell in the 2-cell
|
||||
containing dart `d0`. The 2-cell is split in triangles, one for each
|
||||
initial edge of the facet. This operation is possible if `d0`\f$
|
||||
\in\f$`cm.darts()` (see example on \cgalFigureRef{figtriangulate}).
|
||||
\in\f$\ref CombinatorialMap::darts "cm.darts()" (see example on \cgalFigureRef{figtriangulate}).
|
||||
|
||||
\cgalFigureBegin{figtriangulate,triangulation.png}
|
||||
Example of `::insert_cell_0_in_cell_2` operation.
|
||||
|
|
@ -1201,7 +1201,7 @@ map.
|
|||
`::insert_dangling_cell_1_in_cell_2<CMap>(cm,dh0)` adds a 1-cell in the
|
||||
2-cell containing dart `d0`, the 1-cell being attached by only one of
|
||||
its vertex to the 0-cell containing dart `d0`. This operation is
|
||||
possible if `d0`\f$ \in\f$`cm.darts()`.
|
||||
possible if `d0`\f$ \in\f$\ref CombinatorialMap::darts "cm.darts()".
|
||||
|
||||
`::insert_cell_2_in_cell_3<CMap>(cm,itbegin,itend)` adds a 2-cell in the
|
||||
3-cell containing all the darts between `itbegin` and `itend`, along
|
||||
|
|
|
|||
|
|
@ -325,7 +325,6 @@ namespace for the XML file to be processed properly. -->
|
|||
<string name="EXAMPLE_PATH">../Combinatorial_map/examples</string>
|
||||
<string name="IMAGE_PATH">../Combinatorial_map/doc/Combinatorial_map/fig</string>
|
||||
<list name="TAGFILES" append="true">
|
||||
<item>./tags/HalfedgeDS.tag=../../CGAL.CGAL.Halfedge-Data-Structures/html</item>
|
||||
<item>./tags/Polyhedron.tag=../../CGAL.CGAL.3D-Polyhedral-Surface/html</item>
|
||||
<item>./tags/Linear_cell_complex.tag=../../CGAL.CGAL.Linear-Cell-Complex/html</item>
|
||||
</list>
|
||||
|
|
@ -342,8 +341,12 @@ namespace for the XML file to be processed properly. -->
|
|||
<string name="EXAMPLE_PATH">../Linear_cell_complex/examples</string>
|
||||
<string name="IMAGE_PATH">../Linear_cell_complex/doc/Linear_cell_complex/fig</string>
|
||||
<list name="TAGFILES" append="true">
|
||||
<item>./tags/HalfedgeDS.tag=../../CGAL.CGAL.Halfedge-Data-Structures/html</item>
|
||||
<item>./tags/Polyhedron.tag=../../CGAL.CGAL.3D-Polyhedral-Surface/html</item>
|
||||
<item>./tags/Triangulation_3.tag=../../CGAL.CGAL.3D-Triangulations/html</item>
|
||||
<item>./tags/Combinatorial_map.tag=../../CGAL.CGAL.Combinatorial-Maps/html</item>
|
||||
<item>./tags/Kernel_23.tag=../../CGAL.CGAL.2D-and-3D-Linear-Geometry-Kernel/html</item>
|
||||
<item>./tags/Kernel_d.tag=../../CGAL.CGAL.dD-Geometry-Kernel/html</item>
|
||||
</list>
|
||||
</doxygen>
|
||||
</project>
|
||||
|
|
|
|||
|
|
@ -20,10 +20,10 @@ on.
|
|||
|
||||
The combinatorial part of a linear cell complex is described by a
|
||||
<I>d</I>D combinatorial map (it is strongly recommended to first
|
||||
read \ref ChapterCombinatorialMap
|
||||
read the \ref ChapterCombinatorialMap "Combinatorial maps user manual"
|
||||
for definitions). To add
|
||||
the linear geometrical embedding, a point (a model of
|
||||
`Point_2` or `Point_3` or `Point_d`) is
|
||||
\ref Kernel::Point_2 "Point_2" or \ref Kernel::Point_3 "Point_3" or \ref Kernel_d::Point_d "Point_d") is
|
||||
associated to each vertex of the combinatorial map.
|
||||
|
||||
\cgalFigureBegin{figexempleintroductif,objects2d-3d.png}
|
||||
|
|
@ -62,37 +62,38 @@ classes of the package. `Linear_cell_complex` is the main
|
|||
class (see Section \ref sseclinearcellcomplex), which inherits from
|
||||
the `Combinatorial_map` class. Attributes can be associated
|
||||
to some cells of the linear cell complex thanks to an items class (see
|
||||
Section \ref sseclccitem), which defines the dart type and the
|
||||
Section \ref sseclccitem "Linear Cell Complex Items"), which defines the dart type and the
|
||||
attributes types. These types may be different for different
|
||||
dimensions of cells, and they may also be void. In the class
|
||||
`Linear_cell_complex`, it is required that
|
||||
specific attributes are associated to all vertices of the
|
||||
combinatorial map. These attributes must contain a point (a model of
|
||||
`Point_2` or `Point_3` or `Point_d`),
|
||||
(a model of
|
||||
\ref Kernel::Point_2 "Point_2" or \ref Kernel::Point_3 "Point_3" or \ref Kernel_d::Point_d "Point_d"),
|
||||
and can be represented by instances of class
|
||||
`Cell_attribute_with_point` (see
|
||||
Section \ref ssecattributewp).
|
||||
Section \ref ssecattributewp "Cell Attributes").
|
||||
|
||||
\cgalFigureBegin{figdiagram_class_lcc,Diagramme_class.png}
|
||||
UML diagram of the main classes of the package. Gray elements come from the \ref ChapterCombinatorialMap.
|
||||
UML diagram of the main classes of the package. Gray elements come from the \ref ChapterCombinatorialMap "Combinatorial maps package".
|
||||
\cgalFigureEnd
|
||||
|
||||
|
||||
\section sseclinearcellcomplex Linear Cell Complex
|
||||
|
||||
The `Linear_cell_complex<d,d2,LCCTraits,Items,Alloc>` class
|
||||
The \ref CGAL::Linear_cell_complex "Linear_cell_complex<d,d2,LCCTraits,Items,Alloc>" class
|
||||
is a model of the `CombinatorialMap` concept. It guarantees that
|
||||
each vertex of the combinatorial map is associated with an attribute
|
||||
containing a point. This class can be used in geometric algorithms (it
|
||||
plays the same role as `Polyhedron_3` for `HalfedgeDS`).
|
||||
plays the same role as `Polyhedron_3` for \ref chapterHalfedgeDS "Halfedge Data Structures").
|
||||
|
||||
This class has five template parameters standing for the dimension of
|
||||
the combinatorial map, the dimension of the ambient space, a traits
|
||||
class (a model of the `LinearCellComplexTraits` concept, see
|
||||
Section \ref sseclcctraits), an items class (a model of the
|
||||
Section \ref sseclcctraits "Linear Cell Complex Traits"), an items class (a model of the
|
||||
`LinearCellComplexItems` concept, see
|
||||
Section \ref sseclccitem), and an allocator which must be a model
|
||||
of the allocator concept of \stl. Default classes are provided for
|
||||
Section \ref sseclccitem "Linear Cell Complex Items"), and an allocator which must be a model
|
||||
of the allocator concept of \stl. %Default classes are provided for
|
||||
the traits, items, and for the allocator classes, and by default
|
||||
`d2=d`.
|
||||
|
||||
|
|
@ -117,18 +118,18 @@ class is a model of the `CellAttributeWithPoint` concept, which is
|
|||
a refinement of the `CellAttribute` concept. It represents an
|
||||
attribute associated with a cell, which can contain an information
|
||||
(depending on whether `Info_==void` or not), but which always
|
||||
contains a point, an instance of `LCC::Point`.
|
||||
contains a point, an instance of \ref Linear_cell_complex::Point "LCC::Point".
|
||||
|
||||
\subsection Linear_cell_complexLinearCellComplexTraits Linear Cell Complex Traits
|
||||
\anchor sseclcctraits
|
||||
|
||||
The `LinearCellComplexTraits` geometric traits concept defines the
|
||||
required types and functors used in the `Linear_cell_complex`
|
||||
class. For example it defines `Point`, the type of points used,
|
||||
and `Vector`, the corresponding vector type. It also defines all
|
||||
class. For example it defines \ref LinearCellComplexTraits::Point "Point", the type of points used,
|
||||
and \ref LinearCellComplexTraits::Vector "Vector", the corresponding vector type. It also defines all
|
||||
the required functors used for constructions and operations, as for
|
||||
example `Construct_translated_point` or
|
||||
`Construct_sum_of_vectors`.
|
||||
example \ref LinearCellComplexTraits::Construct_translated_point "Construct_translated_point" or
|
||||
\ref LinearCellComplexTraits::Construct_sum_of_vectors "Construct_sum_of_vectors".
|
||||
|
||||
The class `Linear_cell_complex_traits<d,K>` is a model of
|
||||
`LinearCellComplexTraits`. It defines the different types which
|
||||
|
|
@ -148,32 +149,32 @@ The class `Linear_cell_complex_min_items<d>` is a
|
|||
model of `LinearCellComplexItems`. It uses `Dart<d>`,
|
||||
and instances of `Cell_attribute_with_point`
|
||||
(which contain no information) associated to each vertex. All other
|
||||
attributes are void.
|
||||
attributes are `void`.
|
||||
|
||||
\section Linear_cell_complexOperations Operations
|
||||
|
||||
Several operations defined in the combinatorial maps package can be
|
||||
used on a linear cell complex. This is the case for all the iteration
|
||||
operations that do not modify the model (see example in
|
||||
Section \ref ssec3Dlcc). This is also the case for
|
||||
all the operations that do not create new 0-cells: `sew`,
|
||||
`unsew`, `remove_cell`, `insert_cell_1_in_cell_2`,
|
||||
`insert_cell_2_in_cell_3`. Indeed, all these operations update
|
||||
non void attributes, and thus update vertex attributes of a linear
|
||||
Section \ref ssec3Dlcc "A 3D Linear Cell Complex"). This is also the case for
|
||||
all the operations that do not create new 0-cells: \ref CombinatorialMap::sew "sew",
|
||||
\ref CombinatorialMap::unsew "unsew", `::remove_cell`, `::insert_cell_1_in_cell_2`,
|
||||
`::insert_cell_2_in_cell_3`. Indeed, all these operations update
|
||||
non `void` attributes, and thus update vertex attributes of a linear
|
||||
cell complex. Note that some existing 0-attributes can be duplicated
|
||||
by the `unsew` method, but these 0-attributes are not new but
|
||||
by the \ref CombinatorialMap::unsew "unsew" method, but these 0-attributes are not new but
|
||||
copies of existing old 0-attributes.
|
||||
|
||||
However, operations that create a new 0-cell can not be directly used
|
||||
since the new 0-cell would not be associated with a vertex
|
||||
attribute. Indeed, it is not possible for these operations to
|
||||
automatically decide which point to create. These operations are:
|
||||
`insert_cell_0_in_cell_1`, `insert_cell_0_in_cell_2`
|
||||
`insert_dangling_cell_1_in_cell_2`, plus all the creation
|
||||
`::insert_cell_0_in_cell_1`, `::insert_cell_0_in_cell_2`,
|
||||
`::insert_dangling_cell_1_in_cell_2`, plus all the creation
|
||||
operations. For these operations, new versions are proposed taking
|
||||
some points as additional parameters. Lastly, some new operations are
|
||||
defined, which use the geometry (see sections \ref ssecconstructionsop and
|
||||
\ref ssecmodifop).
|
||||
defined, which use the geometry (see sections \ref ssecconstructionsop
|
||||
"Construction Operations" and \ref ssecmodifop "Modification Operations").
|
||||
|
||||
All the operations given in this section guarantee that given a valid
|
||||
linear cell complex and a possible operation, the result is a valid
|
||||
|
|
@ -184,42 +185,43 @@ restore the validity conditions.
|
|||
\subsection sseclcclinkdarts Sewing and Unsewing
|
||||
|
||||
As explained in the combinatorial map user manual,
|
||||
Section \ref sseclinkdarts, it is possible to glue two <I>i</I>-cells
|
||||
along an (<I>i</I>-1)-cell by using the `sew<i>` method. Since
|
||||
Section \ref sseclinkdarts "Sewing Orbits and Linking Darts", it is possible to glue two <I>i</I>-cells
|
||||
along an (<I>i</I>-1)-cell by using the \ref CombinatorialMap::sew "sew<i>" method. Since
|
||||
this method updates non void attributes, and since points are specific
|
||||
attributes, they are automatically updated during the `sew<i>`
|
||||
attributes, they are automatically updated during the \ref CombinatorialMap::sew "sew<i>"
|
||||
method. Thus the sewing of two <I>i</I>-cells could deform the
|
||||
geometry of the concerned objects.
|
||||
|
||||
For example, in \cgalFigureRef{figlccexemplesew}, we want to 3-sew the
|
||||
two initial 3-cells. `sew<3>(1,5)` links by \f$ \beta_3\f$ the pairs
|
||||
two initial 3-cells. \ref CombinatorialMap::sew "sew<3>(1,5)" links by \f$ \beta_3\f$ the pairs
|
||||
of darts (1,5), (2,8), (3,7) and (4,6). The eight vertex attributes
|
||||
around the facet between the two 3-cells before the sew are merged by
|
||||
pair during the sew operation (and the `On_merge` functor is
|
||||
pair during the sew operation (and the \ref CellAttribute::On_merge "On_merge" functor is
|
||||
called four times). Thus, after the sew, there are only four
|
||||
0-attributes around the facet. By default, the attributes associated
|
||||
with the first dart of the sew operation are kept (but this can be
|
||||
modified by defining your own functor in the attribute class as
|
||||
explained in the package combinatorial map, Section \ref sseclinkdarts).
|
||||
explained in the package combinatorial map, Section \ref sseclinkdarts "Sewing Orbits and Linking Darts").
|
||||
Intuitively, the
|
||||
geometry of the second 2-cell is deformed to fit to the first 2-cell.
|
||||
|
||||
\cgalFigureBegin{figlccexemplesew,exemple-lcc3d-sew.png}
|
||||
Example of 3-sew operation for linear cell complex. <B>Left</B>: A 3D linear cell complex containing two 3-cells that are not connected. Vertex attributes are drawn with circles containing point coordinates. Associations between darts and attributes are drawn with small lines between darts and disks. <B>Right</B>: The 3D linear cell complex obtained as result of `sew<3>(1,5)` (or `sew<3>(2,8)`, or `sew<3>(3,7)`, or `sew<3>(4,6)`). The eight 0-attributes around the facet between the two 3-cells before the sew operation, are merged into four 0-attributes after. The geometry of the pyramid is deformed since its base is fitted on the 2-cell of the cube.
|
||||
Example of \ref CombinatorialMap::sew "3-sew" operation for linear cell complex. <B>Left</B>: A 3D linear cell complex containing two 3-cells that are not connected. Vertex attributes are drawn with circles containing point coordinates. Associations between darts and attributes are drawn with small lines between darts and disks. <B>Right</B>: The 3D linear cell complex obtained as result of `sew<3>(1,5)` (or `sew<3>(2,8)`, or `sew<3>(3,7)`, or `sew<3>(4,6)`). The eight 0-attributes around the facet between the two 3-cells before the sew operation, are merged into four 0-attributes after. The geometry of the pyramid is deformed since its base is fitted on the 2-cell of the cube.
|
||||
\cgalFigureEnd
|
||||
|
||||
This is similar for the unsew operation, which removes \f$ \beta_i\f$ links
|
||||
This is similar for the \ref CombinatorialMap::unsew "unsew" operation, which removes \f$ \beta_i\f$ links
|
||||
of all the darts in
|
||||
\f$ \langle{}\f$\f$ \beta_1\f$,\f$ \ldots\f$,\f$ \beta_{i-2}\f$,\f$ \beta_{i+2}\f$,\f$ \ldots\f$,\f$ \beta_d\f$\f$ \rangle{}\f$(<I>d0</I>),
|
||||
and updates
|
||||
non void attributes which are no more associated to a same cell due to
|
||||
the unlinks. If we take the linear cell complex given in
|
||||
\cgalFigureRef{figlccexemplesew} (Right), and we call
|
||||
`unsew<3>(2)`, we obtain the linear cell complex in
|
||||
\ref CombinatorialMap::unsew "unsew<3>(2)", we obtain the linear cell complex in
|
||||
\cgalFigureRef{figlccexemplesew} (Left) except for the coordinates of
|
||||
the new four vertices, which by default are copies of original
|
||||
vertices (this behavior can be modified thanks to the functor
|
||||
`On_split` in the attribute class). The `unsew<3>` operation
|
||||
\ref CellAttribute::On_split "On_split" in the attribute class).
|
||||
The \ref CombinatorialMap::unsew "unsew<3>" operation
|
||||
has removed the four \f$ \beta_3\f$ links, and has duplicated the 0-attributes
|
||||
since vertices are split in two after the unsew operation.
|
||||
|
||||
|
|
@ -233,21 +235,23 @@ that the dimension of the linear cell complex must be large enough:
|
|||
darts must contain all the \f$ \beta\f$ used by the operation. All these
|
||||
methods add new darts in the current linear cell complex, existing
|
||||
darts are not modified. These functions
|
||||
are `make_segment()`, `make_triangle()`,
|
||||
`make_tetrahedron()` and `make_hexahedron()`.
|
||||
are \ref Linear_cell_complex::make_segment "make_segment",
|
||||
\ref Linear_cell_complex::make_triangle "make_triangle",
|
||||
\ref Linear_cell_complex::make_tetrahedron "make_tetrahedron" and
|
||||
\ref Linear_cell_complex::make_hexahedron "make_hexahedron".
|
||||
|
||||
There are two functions allowing to build a linear cell complex
|
||||
from two other \cgal data types:
|
||||
<UL>
|
||||
<LI>\link import_from_triangulation_3() `import_from_triangulation_3(lcc,atr)`\endlink: adds in `lcc` all
|
||||
the tetrahedra present in `atr`, a `Triangulation_3`;
|
||||
<LI>\link import_from_polyhedron_3() `import_from_polyhedron_3(lcc,ap)`\endlink: adds in `lcc` all
|
||||
<LI>\ref ::import_from_triangulation_3 "import_from_triangulation_3(lcc,atr)": adds in `lcc` all
|
||||
the tetrahedra present in `atr`, a \ref CGAL::Triangulation_3 "Triangulation_3";
|
||||
<LI>\ref ::import_from_polyhedron_3 "import_from_polyhedron_3(lcc,ap)": adds in `lcc` all
|
||||
the cells present in `ap`, a `Polyhedron_3`.
|
||||
</UL>
|
||||
|
||||
Lastly, the function \link import_from_polyhedron_3() `import_from_plane_graph(lcc,ais)` \endlink adds in
|
||||
Lastly, the function \ref ::import_from_plane_graph "import_from_plane_graph(lcc,ais)" adds in
|
||||
`lcc` all the cells reconstructed from the planar graph read in
|
||||
`ais`, a `std::istream` (see the reference manual for the file
|
||||
`ais`, a `std::istream` (see the \ref ::import_from_plane_graph "reference manual" for the file
|
||||
format).
|
||||
|
||||
\subsection Linear_cell_complexModificationOperations Modification Operations
|
||||
|
|
@ -260,17 +264,17 @@ handles for the darts `d0`, `d1`, `d2`, respectively. That
|
|||
is `d0 == *dh0`.
|
||||
|
||||
\cgalFigureBegin{figlccinsertvertex,insert-vertex.png}
|
||||
Example of `insert_barycenter_in_cell<1>` and `remove_cell<0>` operations. <B>Left</B>: Initial linear cell complex. <B>Right</B>: After the insertion of a point in the barycenter of the 1-cell containing dart <I>d1</I>. Now if we remove the 0-cell containing dart <I>d2</I>, we obtain a linear cell complex isomorphic to the initial one.
|
||||
Example of \ref Linear_cell_complex::insert_barycenter_in_cell "insert_barycenter_in_cell<1>" and `::remove_cell<0>` operations. <B>Left</B>: Initial linear cell complex. <B>Right</B>: After the insertion of a point in the barycenter of the 1-cell containing dart <I>d1</I>. Now if we remove the 0-cell containing dart <I>d2</I>, we obtain a linear cell complex isomorphic to the initial one.
|
||||
\cgalFigureEnd
|
||||
|
||||
|
||||
`lcc.insert_barycenter_in_cell<unsigned int i>(dh0)` adds the
|
||||
\ref Linear_cell_complex::insert_barycenter_in_cell "lcc.insert_barycenter_in_cell<unsigned int i>(dh0)" adds the
|
||||
barycenter of the <I>i</I>-cell containing dart `d0`. This
|
||||
operation is possible if `d0`\f$ \in\f$`lcc.darts()` (see examples
|
||||
operation is possible if `d0`\f$ \in\f$\ref CombinatorialMap::darts "lcc.darts()" (see examples
|
||||
on \cgalFigureRef{figlccinsertvertex} and
|
||||
\cgalFigureRef{figlcctriangulate}).
|
||||
|
||||
`lcc.insert_point_in_cell<unsigned int i>(dh0,p)` is an operation
|
||||
\ref Linear_cell_complex::insert_point_in_cell "lcc.insert_point_in_cell<unsigned int i>(dh0,p)" is an operation
|
||||
similar to the previous operation, the only difference being that the
|
||||
coordinates of the new point are here given by `p` instead of being
|
||||
computed as the barycenter of the <I>i</I>-cell. Currently, these two
|
||||
|
|
@ -278,24 +282,24 @@ operations are only defined for `i=1` to insert a point in an
|
|||
edge, or `i=2` to insert a point in a facet.
|
||||
|
||||
\cgalFigureBegin{figlcctriangulate,triangulation.png}
|
||||
Examples of `insert_barycenter_in_cell<2>` operation.
|
||||
Examples of \ref Linear_cell_complex::insert_barycenter_in_cell "insert_barycenter_in_cell<2>" operation.
|
||||
\cgalFigureEnd
|
||||
|
||||
|
||||
`lcc.insert_dangling_cell_1_in_cell_2(dh0,p)` adds a 1-cell in
|
||||
\ref Linear_cell_complex::insert_dangling_cell_1_in_cell_2 "lcc.insert_dangling_cell_1_in_cell_2(dh0,p)" adds a 1-cell in
|
||||
the 2-cell containing dart `d0`, the 1-cell being attached by only
|
||||
one of its vertex to the 0-cell containing dart `d0`. The second
|
||||
vertex of the new edge is associated with a new 0-attribute containing
|
||||
a copy of `p` as point. This operation is possible if
|
||||
`d0`\f$ \in\f$`lcc.darts()` (see example on
|
||||
`d0`\f$ \in\f$\ref CombinatorialMap::darts "lcc.darts()" (see example on
|
||||
\cgalFigureRef{figlccinsertdanglingedge}).
|
||||
|
||||
\cgalFigureBegin{figlccinsertdanglingedge,insert-edge.png}
|
||||
Example of `insert_dangling_cell_1_in_cell_2`, `insert_cell_1_in_cell_2` and `remove_cell<1>` operations. <B>Left</B>: Initial linear cell complex. <B>Right</B>: After the insertion of a dangling 1-cell in the 2-cell containing dart <I>d1</I>, and of a 1-cell in the 2-cell containing dart <I>d2</I>. Now if we remove the 1-cells containing dart <I>d4</I> and <I>d5</I>, we obtain a linear cell complex isomorphic to the initial one.
|
||||
Example of \ref Linear_cell_complex::insert_dangling_cell_1_in_cell_2 "insert_dangling_cell_1_in_cell_2", `::insert_cell_1_in_cell_2` and `::remove_cell<1>` operations. <B>Left</B>: Initial linear cell complex. <B>Right</B>: After the insertion of a dangling 1-cell in the 2-cell containing dart <I>d1</I>, and of a 1-cell in the 2-cell containing dart <I>d2</I>. Now if we remove the 1-cells containing dart <I>d4</I> and <I>d5</I>, we obtain a linear cell complex isomorphic to the initial one.
|
||||
\cgalFigureEnd
|
||||
|
||||
Some examples of use of these operations are given in
|
||||
Section \ref ssec5dexample.
|
||||
Section \ref ssec5dexample "A 4D Linear Cell Complex".
|
||||
|
||||
\section Linear_cell_complexExamples Examples
|
||||
|
||||
|
|
@ -304,8 +308,8 @@ Section \ref ssec5dexample.
|
|||
|
||||
This example uses a 3-dimensional linear cell complex. It creates two
|
||||
tetrahedra and displays all the points of the linear cell complex
|
||||
thanks to a `Vertex_attribute_const_range`. Then, the two
|
||||
tetrahedra are 3-sewn and we translate all the points of the second
|
||||
thanks to a \ref Linear_cell_complex::Vertex_attribute_const_range "Vertex_attribute_const_range". Then, the two
|
||||
tetrahedra are \ref CombinatorialMap::sew "3-sewn" and we translate all the points of the second
|
||||
tetrahedron along vector `v(3,1,1)`. Since the two tetrahedra
|
||||
are 3-sewn, this translation moves also the 2-cell of the first
|
||||
tetrahedron shared with the second one. This is illustrated by
|
||||
|
|
@ -327,7 +331,7 @@ LCC characteristics: #Darts=24, #0-cells=5, #1-cells=9, #2-cells=7, #3-cells=2,
|
|||
\endverbatim
|
||||
|
||||
The first line gives the points of the linear cell complex before the
|
||||
`sew<3>`. There are eight points, four for each tetrahedron.
|
||||
\ref CombinatorialMap::sew "sew<3>". There are eight points, four for each tetrahedron.
|
||||
After the sew, six vertices are merged two by two, thus there are five
|
||||
vertices. We can see the points of each 3-cell (lines Volume 1 and
|
||||
Volume 2) before the sew, after the sew and after the translation of
|
||||
|
|
@ -367,7 +371,7 @@ adding another information to vertices. For that, we need to define
|
|||
our own items class. The difference with the
|
||||
`Linear_cell_complex_min_items` class is about the definition of
|
||||
the vertex attribute where we use a `Cell_attribute_with_point`
|
||||
with a non void info. In this example, the "vextex color" is just
|
||||
with a non `void` info. In this example, the "vextex color" is just
|
||||
given by an `int` (the second template parameter of the
|
||||
`Cell_attribute_with_point`). Lastly, we define the
|
||||
`Average_functor` class in order to set the color of a vertex
|
||||
|
|
@ -381,8 +385,8 @@ Now we can use `LCC_3` in which each vertex is associated with an
|
|||
attribute containing both a point and an information. In the following
|
||||
example, we create two cubes, and set the color of the vertices of the
|
||||
first cube to 1 and of the second cube to 19 (by iterating through two
|
||||
`One_dart_per_incident_cell_range<0, 3>` ranges). Then we
|
||||
<I>3-sew</I> the two cubes along one facet. This operation merges some
|
||||
\ref CombinatorialMap::One_dart_per_incident_cell_range "One_dart_per_incident_cell_range<0, 3>" ranges). Then we
|
||||
\ref CombinatorialMap::sew "3-sew" the two cubes along one facet. This operation merges some
|
||||
vertices (as in the example of \cgalFigureRef{figlccexemplesew}). We
|
||||
insert a vertex in the common 2-cell between the two cubes, and set
|
||||
the information of the new 0-attribute to 5. In the last loop, we
|
||||
|
|
@ -409,15 +413,15 @@ point: 1 0 0, color: 19
|
|||
\endverbatim
|
||||
|
||||
Before applying the sew operation, the eight vertices of the first
|
||||
cube are colored by 1, and the eight vertices of the second cube by
|
||||
19. After the sew operation, there are eight vertices which are merged
|
||||
cube are colored by `1`, and the eight vertices of the second cube by
|
||||
`19`. After the sew operation, there are eight vertices which are merged
|
||||
two by two, and due to the average functor, the color of the four
|
||||
resulting vertices is now 10. Then we insert a vertex in the center
|
||||
of the common 2-cell between the two cubes. The coordinates of this
|
||||
vertex are initialized with the barycenter of the 2-cell
|
||||
(-1,0.5,0.5), and its color is not initialized by the method, thus we
|
||||
set its color manually by using the result of
|
||||
`insert_barycenter_in_cell<2>` which is a dart incident to the
|
||||
\ref Linear_cell_complex::insert_barycenter_in_cell "insert_barycenter_in_cell<2>" which is a dart incident to the
|
||||
new vertex.
|
||||
|
||||
\section Linear_cell_complexDesign Design and Implementation History
|
||||
|
|
|
|||
|
|
@ -1,13 +1,20 @@
|
|||
/// \defgroup PkgLinearCellComplex Linear Cell Complex Reference
|
||||
|
||||
/// \defgroup PkgLinearCellComplexConcepts Concepts
|
||||
/// \ingroup PkgLinearCellComplex
|
||||
|
||||
/// \defgroup PkgLinearCellComplexClasses Classes
|
||||
/// \ingroup PkgLinearCellComplex
|
||||
|
||||
/*! Basic constructions.
|
||||
#include <CGAL/Linear_cell_complex_constructors.h>
|
||||
*/
|
||||
/// \defgroup PkgLinearCellComplexConstructions Constructions for Linear Cell Complex
|
||||
/// \ingroup PkgLinearCellComplex
|
||||
|
||||
/*! High-level operations.
|
||||
#include <CGAL/Linear_cell_complex_operations.h>
|
||||
*/
|
||||
/// \defgroup PkgLinearCellComplexOperations Operations for Linear Cell Complex
|
||||
/// \ingroup PkgLinearCellComplex
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue