mirror of https://github.com/CGAL/cgal
Update also LCC doc accordingly.
This commit is contained in:
parent
091ae2ab8e
commit
7e3cb2094e
|
|
@ -4,23 +4,18 @@ namespace CGAL {
|
|||
/*!
|
||||
\ingroup PkgLinearCellComplexClasses
|
||||
|
||||
The class `Cell_attribute_with_point` represents an attribute containing a point and
|
||||
containing an information when `Info_` is different from `void`.
|
||||
This class can typically be used to associate a point to each 0-cell
|
||||
of a combinatorial map.
|
||||
The class `Cell_attribute_with_point` represents an attribute containing a point and containing an information when `Info_` is different from `void`. This class can typically be used to associate a point to each 0-cell of a \tred{combinatorial or a generalized map}.
|
||||
|
||||
\cgalModels `CellAttributeWithPoint`
|
||||
|
||||
\tparam LCC must be an instantiation of `Linear_cell_complex` class,
|
||||
\tparam Info_ is the type of the information contained in the attribute, `void` for no information,
|
||||
|
||||
\tparam Tag is `::Tag_true` to enable the storage of a \ref Cell_attribute_with_point::Dart_handle "Dart_handle" of the associated cell, `::Tag_false` otherwise,
|
||||
\tparam Tag is `::Tag_true` to enable the storage of a \link Cell_attribute_with_point::Dart_handle `Dart_handle`\endlink of the associated cell, `::Tag_false` otherwise,
|
||||
\tparam OnMerge is a functor called when two attributes are merged,
|
||||
\tparam OnSplit is a functor called when one attribute is split in two.
|
||||
|
||||
By default, `OnMerge` and `OnSplit` are equal to
|
||||
`Null_functor`; `Tag` is equal to
|
||||
`::Tag_true`; and `Info_` is equal to `void`.
|
||||
By default, `OnMerge` and `OnSplit` are equal to `Null_functor`; `Tag` is equal to `::Tag_true`; and `Info_` is equal to `void`.
|
||||
|
||||
\sa `CGAL::Linear_cell_complex<d,d2,LCCTraits,Items,Alloc>`
|
||||
\sa `CGAL::Linear_cell_complex_min_items<d>`
|
||||
|
|
|
|||
|
|
@ -4,33 +4,20 @@ namespace CGAL {
|
|||
/*!
|
||||
\ingroup PkgLinearCellComplexClasses
|
||||
|
||||
The class `Linear_cell_complex` represents a linear cell complex in dimension `d`,
|
||||
in an ambient space of dimension `d2`. This is a model of the concept of
|
||||
`CombinatorialMap` adding a requirement to ensure that
|
||||
each vertex of the map is associated with a
|
||||
model of `CellAttributeWithPoint`.
|
||||
The class `Linear_cell_complex` represents a linear cell complex in dimension `d`, in an ambient space of dimension `d2`. This is a model of the concept of `CombinatorialMap` adding a requirement to ensure that each vertex of the map is associated with a model of `CellAttributeWithPoint`.
|
||||
|
||||
\cgalModels `CombinatorialMap`
|
||||
|
||||
\tparam d an integer for the dimension of the combinatorial map,
|
||||
\tparam d2 an integer for the dimension of the ambient space,
|
||||
\tparam LCCTraits must be a model of the `LinearCellComplexTraits` concept,
|
||||
satisfying \ref LinearCellComplexTraits::ambient_dimension "LCCTraits::ambient_dimension"`==d2`,
|
||||
\tparam LCCTraits must be a model of the `LinearCellComplexTraits` concept, satisfying \link LinearCellComplexTraits::ambient_dimension `LCCTraits::ambient_dimension`\endlink`==d2`,
|
||||
\tparam Items must be a model of the `LinearCellComplexItems` concept,
|
||||
\tparam Alloc has to match the standard allocator requirements.
|
||||
|
||||
There are four default template arguments:
|
||||
`d2` is equal to `d`,
|
||||
`LCCTraits` is equal to `CGAL::Linear_cell_complex_traits<d2>`,
|
||||
`Items` is equal to `CGAL::Linear_cell_complex_min_items<d>` and
|
||||
`Alloc` is `CGAL_ALLOCATOR(int)`.
|
||||
There are four default template arguments: `d2` is equal to `d`, `LCCTraits` is equal to `CGAL::Linear_cell_complex_traits<d2>`, `Items` is equal to `CGAL::Linear_cell_complex_min_items<d>` and `Alloc` is `CGAL_ALLOCATOR(int)`.
|
||||
|
||||
\cgalAdvancedBegin
|
||||
Note that there is an additional, and undocumented, template
|
||||
parameter `CMap` for
|
||||
`Linear_cell_complex<d,d2,LCCTraits,Items,Alloc,CMap>` allowing to
|
||||
inherit from any model of the `CombinatorialMap` concept.
|
||||
\cgalAdvancedEnd
|
||||
Note that there is an additional, and undocumented, template parameter `CMap` for `Linear_cell_complex<d,d2,LCCTraits,Items,Alloc,CMap>` allowing to inherit from any model of the `CombinatorialMap` or `GeneralizedMap` concept. \cgalAdvancedEnd
|
||||
|
||||
\sa `CombinatorialMap`
|
||||
\sa `CGAL::Combinatorial_map<d,Items,Alloc>`
|
||||
|
|
@ -75,7 +62,7 @@ static unsigned int ambient_dimension = d2;
|
|||
typedef Linear_cell_complex<d,d2,LCCTraits,Items,Alloc> Self;
|
||||
|
||||
/*!
|
||||
The type of dart, must satisfy \ref Dart::dimension "Dart::dimension"`==d`.
|
||||
The type of dart, must satisfy \link Dart::dimension `Dart::dimension`\endlink`==d`.
|
||||
*/
|
||||
typedef Items::Dart_wrapper<Self>::Dart Dart;
|
||||
|
||||
|
|
@ -130,14 +117,14 @@ typedef unspecified_type Vertex_attribute_const_handle;
|
|||
/*!
|
||||
%Range of all the 0-attributes, a model of the `Range` concept
|
||||
(a shortcut for \link CombinatorialMap::Attribute_range `Attribute_range<0>::type` \endlink).
|
||||
%Iterator inner type is bidirectional iterator and value type is \ref Linear_cell_complex::Vertex_attribute "Vertex_attribute".
|
||||
%Iterator inner type is bidirectional iterator and value type is \link Linear_cell_complex::Vertex_attribute `Vertex_attribute`\endlink.
|
||||
*/
|
||||
typedef unspecified_type Vertex_attribute_range;
|
||||
|
||||
/*!
|
||||
%Const range of all the 0-attributes, a model of the `ConstRange` concept
|
||||
a shortcut for \link CombinatorialMap::Attribute_const_range `Attribute_const_range<0>::type` \endlink).
|
||||
%Iterator inner type is bidirectional iterator and value type is \ref Linear_cell_complex::Vertex_attribute "Vertex_attribute".
|
||||
%Iterator inner type is bidirectional iterator and value type is \link Linear_cell_complex::Vertex_attribute `Vertex_attribute`\endlink.
|
||||
*/
|
||||
typedef unspecified_type Vertex_attribute_const_range;
|
||||
|
||||
|
|
@ -148,13 +135,13 @@ typedef unspecified_type Vertex_attribute_const_range;
|
|||
|
||||
/*!
|
||||
Returns a range of all the 0-attributes in this linear cell complex
|
||||
(a shortcut for \ref CombinatorialMap::attributes "attributes<0>()").
|
||||
(a shortcut for \link CombinatorialMap::attributes `attributes<0>()`\endlink).
|
||||
*/
|
||||
Vertex_attribute_range& vertex_attributes();
|
||||
|
||||
/*!
|
||||
Returns a const range of all the 0-attributes in this linear cell complex
|
||||
(a shortcut for \ref CombinatorialMap::attributes "attributes<0>() const").
|
||||
(a shortcut for \link CombinatorialMap::attributes `attributes<0>() const`\endlink).
|
||||
*/
|
||||
Vertex_attribute_const_range& vertex_attributes() const;
|
||||
|
||||
|
|
@ -168,13 +155,13 @@ Returns true iff this linear cell complex is valid.
|
|||
|
||||
A linear cell complex `lcc` is valid if it is a valid combinatorial
|
||||
map (cf. `CombinatorialMap::is_valid()`), and if for each dart handle <I>dh</I> such that
|
||||
`*dh`\f$\in\f$\ref CombinatorialMap::darts "darts()": \ref Dart::attribute "dh->attribute<0>()"`!=NULL`.
|
||||
`*dh`\f$\in\f$\link CombinatorialMap::darts `darts()`\endlink: \link Dart::attribute `dh->attribute<0>()`\endlink`!=NULL`.
|
||||
*/
|
||||
bool is_valid() const;
|
||||
|
||||
/*!
|
||||
Returns the number of 0-attributes in this linear cell complex
|
||||
(a shortcut for \ref CombinatorialMap::number_of_attributes "number_of_attributes<0>()").
|
||||
(a shortcut for \link CombinatorialMap::number_of_attributes `number_of_attributes<0>()`\endlink).
|
||||
*/
|
||||
size_type number_of_vertex_attributes() const;
|
||||
|
||||
|
|
@ -231,9 +218,9 @@ Dart_handle create_dart(const Point& apoint);
|
|||
/*!
|
||||
Creates a new 0-attribute in this linear cell complex,
|
||||
and returns the corresponding handle (a shortcut for
|
||||
\ref CombinatorialMap::create_attribute "create_attribute<0>(t1)").
|
||||
\link CombinatorialMap::create_attribute `create_attribute<0>(t1)`\endlink).
|
||||
Calls the constructor of
|
||||
\ref Linear_cell_complex::Vertex_attribute "Vertex_attribute" having `T1` as parameter. Overloads of this
|
||||
\link Linear_cell_complex::Vertex_attribute `Vertex_attribute`\endlink having `T1` as parameter. Overloads of this
|
||||
member function are defined that take from zero to nine arguments.
|
||||
With zero argument, `create_vertex_attribute()` creates a new
|
||||
0-attribute by using the default constructor.
|
||||
|
|
@ -243,7 +230,7 @@ create_vertex_attribute(T1 t1);
|
|||
|
||||
/*!
|
||||
Removes the 0-attribute pointed to by `vh` from this linear cell complex
|
||||
(a shortcut for \ref CombinatorialMap::erase_attribute "erase_attribute<0>(vh)").
|
||||
(a shortcut for \link CombinatorialMap::erase_attribute `erase_attribute<0>(vh)`\endlink).
|
||||
\pre `*vh`\f$ \in\f$`vertex_attributes()`.
|
||||
|
||||
*/
|
||||
|
|
@ -252,8 +239,8 @@ void erase_vertex_attribute(Vertex_attribute_handle vh);
|
|||
/*!
|
||||
Associates the 0-attribute of all the darts of the 0-cell
|
||||
containing `dh` to `vh`
|
||||
(a shortcut for \ref CombinatorialMap::set_attribute "set_attribute<0>(dh,vh)").
|
||||
\pre `*dh`\f$ \in\f$\ref CombinatorialMap::darts "darts()" and `*vh`\f$ \in\f$`vertex_attributes()`.
|
||||
(a shortcut for \link CombinatorialMap::set_attribute `set_attribute<0>(dh,vh)`\endlink).
|
||||
\pre `*dh`\f$ \in\f$\link CombinatorialMap::darts `darts()`\endlink and `*vh`\f$ \in\f$`vertex_attributes()`.
|
||||
|
||||
*/
|
||||
void set_vertex_attribute(Dart_handle dh, Vertex_attribute_handle vh);
|
||||
|
|
@ -277,7 +264,7 @@ void correct_invalid_attributes();
|
|||
|
||||
/*!
|
||||
Returns the barycenter of the <I>i</I>-cell containing `dh`.
|
||||
\pre 1\f$ \leq\f$<I>i</I>\f$ \leq\f$\ref CombinatorialMap::dimension "dimension" and `*dh`\f$ \in\f$\ref CombinatorialMap::darts "darts()".
|
||||
\pre 1\f$ \leq\f$<I>i</I>\f$ \leq\f$\link CombinatorialMap::dimension `dimension`\endlink and `*dh`\f$ \in\f$\link CombinatorialMap::darts `darts()`\endlink.
|
||||
|
||||
*/
|
||||
template<unsigned int i> Point barycenter(Dart_const_handle dh) const;
|
||||
|
|
@ -285,11 +272,11 @@ template<unsigned int i> Point barycenter(Dart_const_handle dh) const;
|
|||
/*!
|
||||
Inserts a point, copy of `p`, in the <I>i</I>-cell containing `dh`.
|
||||
Returns a handle on one dart of this cell.
|
||||
\pre <I>i</I>\f$ \leq\f$\ref CombinatorialMap::dimension "dimension"\f$ \leq\f$ 2 and `*dh`\f$ \in\f$\ref CombinatorialMap::darts "darts()".
|
||||
\pre <I>i</I>\f$ \leq\f$\link CombinatorialMap::dimension `dimension`\endlink \f$ \leq\f$ 2 and `*dh`\f$ \in\f$\link CombinatorialMap::darts `darts()`\endlink.
|
||||
|
||||
If \link CombinatorialMap::are_attributes_automatically_managed `are_attributes_automatically_managed()`\endlink`==true`,
|
||||
if <I>i</I>-attributes are non void,
|
||||
\ref CellAttribute::On_split "Attribute_type<i>::type::On_split"(<I>a</I>,<I>a'</I>) is called,
|
||||
\link CellAttribute::On_split `Attribute_type<i>::type::On_split`\endlink(<I>a</I>,<I>a'</I>) is called,
|
||||
with <I>a</I> the original <I>i</I>-attribute associated
|
||||
with <I>dh</I> and <I>a'</I> each new <I>i</I>-attribute created during the operation.
|
||||
|
||||
|
|
@ -304,9 +291,9 @@ template <unsigned int i> Dart_handle insert_point_in_cell(Dart_handle dh, Point
|
|||
/*!
|
||||
Inserts a point in the barycenter of the <I>i</I>-cell containing `dh`.
|
||||
Returns a handle on one dart of this cell.
|
||||
\pre <I>i</I>\f$ \leq\f$\ref CombinatorialMap::dimension "dimension"\f$ \leq\f$ 2 and `*dh`\f$ \in\f$\ref CombinatorialMap::darts "darts()".
|
||||
\pre <I>i</I>\f$ \leq\f$\link CombinatorialMap::dimension `dimension`\endlink \f$ \leq\f$ 2 and `*dh`\f$ \in\f$\link CombinatorialMap::darts `darts()`\endlink.
|
||||
|
||||
If \link CombinatorialMap::are_attributes_automatically_managed `are_attributes_automatically_managed()`\endlink`==true`, if <I>i</I>-attributes are non void, \ref CellAttribute::On_split "Attribute_type<i>::type::On_split"(<I>a</I>,<I>a'</I>) is called, with <I>a</I> the original <I>i</I>-attribute associated with <I>dh</I> and <I>a'</I> each new <I>i</I>-attribute created during the operation.
|
||||
If \link CombinatorialMap::are_attributes_automatically_managed `are_attributes_automatically_managed()`\endlink`==true`, if <I>i</I>-attributes are non void, \link CellAttribute::On_split `Attribute_type<i>::type::On_split`\endlink(<I>a</I>,<I>a'</I>) is called, with <I>a</I> the original <I>i</I>-attribute associated with <I>dh</I> and <I>a'</I> each new <I>i</I>-attribute created during the operation.
|
||||
|
||||
\cgalAdvancedBegin
|
||||
If \link CombinatorialMap::are_attributes_automatically_managed `are_attributes_automatically_managed()`\endlink`==false`, non void attributes are
|
||||
|
|
@ -321,7 +308,7 @@ Inserts a 1-cell in the 2-cell containing `dh`, the 1-cell
|
|||
being attached only by one of its vertex to the 0-cell containing `dh`.
|
||||
The second vertex is associated with a new 0-attribute containing a copy of
|
||||
`p` as point. Returns a handle on one dart belonging to the new 0-cell.
|
||||
\pre 2\f$ \leq\f$\ref CombinatorialMap::dimension "dimension" and `*dh`\f$ \in\f$\ref CombinatorialMap::darts "darts()".
|
||||
\pre 2\f$ \leq\f$\link CombinatorialMap::dimension `dimension`\endlink and `*dh`\f$ \in\f$\link CombinatorialMap::darts `darts()`\endlink.
|
||||
|
||||
\cgalAdvancedBegin
|
||||
If \link CombinatorialMap::are_attributes_automatically_managed `are_attributes_automatically_managed()`\endlink`==false`, non void attributes are not updated; thus the combinatorial map can be no more valid after this operation.
|
||||
|
|
@ -338,7 +325,7 @@ Dart_handle insert_dangling_cell_1_in_cell_2(Dart_handle dh, Point p);
|
|||
/*!
|
||||
Creates an isolated segment in this linear cell complex (two darts linked by \f$ \beta_2\f$) having `p0`, `p1` as points.
|
||||
Returns a handle on the dart associated with `p0`.
|
||||
\pre \ref CombinatorialMap::dimension "dimension"\f$ \geq\f$ 2.
|
||||
\pre \link CombinatorialMap::dimension `dimension`\endlink \f$ \geq\f$ 2.
|
||||
|
||||
\image html lcc_make_segment.png "Example of r=lcc.make_segment(p0,p1), left for combinatorial map as combinatorial data-structure, right for generalized maps."
|
||||
\image latex lcc_make_segment.png "Example of r=lcc.make_segment(p0,p1), left for combinatorial map as combinatorial data-structure, right for generalized maps."
|
||||
|
|
@ -348,7 +335,7 @@ Dart_handle make_segment(const Point& p0, const Point& p1);
|
|||
/*!
|
||||
Creates an isolated triangle in this linear cell complex having `p0`, `p1`, `p2` as points.
|
||||
Returns a handle on the dart associated with `p0` and with edge [`p0`,`p1`].
|
||||
\pre \ref CombinatorialMap::dimension "dimension"\f$ \geq\f$ 1.
|
||||
\pre \link CombinatorialMap::dimension `dimension`\endlink \f$ \geq\f$ 1.
|
||||
|
||||
\image html lcc_make_triangle.png "Example of r=lcc.make_triangle(p0,p1,p2), left for combinatorial map as combinatorial data-structure, right for generalized maps."
|
||||
\image latex lcc_make_triangle.png "Example of r=lcc.make_triangle(p0,p1,p2), left for combinatorial map as combinatorial data-structure, right for generalized maps."
|
||||
|
|
@ -358,7 +345,7 @@ Dart_handle make_triangle(const Point& p0, const Point& p1, const Point& p2);
|
|||
/*!
|
||||
Creates an isolated quadrangle in this linear cell complex having `p0`, `p1`, `p2`, `p3` as points.
|
||||
Returns a handle on the dart associated with `p0` and with edge [`p0`,`p1`].
|
||||
\pre \ref CombinatorialMap::dimension "dimension"\f$ \geq\f$ 1.
|
||||
\pre \link CombinatorialMap::dimension `dimension`\endlink \f$ \geq\f$ 1.
|
||||
|
||||
\image html lcc_make_quadrilateral.png "Example of r=lcc.make_quadrangle(p0,p1,p2,p3), left for combinatorial map as combinatorial data-structure, right for generalized maps."
|
||||
\image latex lcc_make_quadrilateral.png "Example of r=lcc.make_quadrangle(p0,p1,p2,p3), left for combinatorial map as combinatorial data-structure, right for generalized maps."
|
||||
|
|
@ -368,7 +355,7 @@ Dart_handle make_quadrangle(const Point& p0,const Point& p1,const Point& p2,cons
|
|||
/*!
|
||||
Creates an isolated tetrahedron in this linear cell complex having `p0`, `p1`,`p2`,`p3` as points.
|
||||
Returns a handle on the dart associated with `p0`, with edge [`p0`,`p1`] and belonging to the 2-cell having `p0`, `p1`, `p2` as points.
|
||||
\pre \ref CombinatorialMap::dimension "dimension"\f$ \geq\f$ 2.
|
||||
\pre \link CombinatorialMap::dimension `dimension`\endlink \f$ \geq\f$ 2.
|
||||
|
||||
\image html lcc_make_tetrahedron.png "Example of r=lcc.make_tetrahedron(p0,p1,p2,p3), left for combinatorial map as combinatorial data-structure, right for generalized maps."
|
||||
\image latex lcc_make_tetrahedron.png "Example of r=lcc.make_tetrahedron(p0,p1,p2,p3), left for combinatorial map as combinatorial data-structure, right for generalized maps."
|
||||
|
|
@ -378,7 +365,7 @@ Dart_handle make_tetrahedron(const Point& p0,const Point& p1,const Point& p2,con
|
|||
/*!
|
||||
Creates an isolated hexahedron in this linear cell complex having `p0`, `p1`, `p2`, `p3`, `p4`, `p5`, `p6`, `p7` as points.
|
||||
Returns a handle on the dart associated with `p0`, with edge [`p0`,`p5`] and belonging to the 2-cell having `p0`, `p5`, `p6`, `p1` as points.
|
||||
\pre \ref CombinatorialMap::dimension "dimension" \f$ \geq \f$ 2.
|
||||
\pre \link CombinatorialMap::dimension `dimension`\endlink \f$ \geq \f$ 2.
|
||||
|
||||
\image html lcc_make_hexahedron.png "Example of r=lcc.make_hexahedron(p0,p1,p2,p3,p4,p5,p6,p7), left for combinatorial map as combinatorial data-structure, right for generalized maps."
|
||||
\image latex lcc_make_hexahedron.png "Example of r=lcc.make_hexahedron(p0,p1,p2,p3,p4,p5,p6,p7), left for combinatorial map as combinatorial data-structure, right for generalized maps."
|
||||
|
|
|
|||
|
|
@ -6,8 +6,8 @@ namespace CGAL {
|
|||
Imports an embedded plane graph read from `ais` into `lcc`.
|
||||
Objects are added in `lcc`, existing darts are not modified.
|
||||
Returns a dart created during the import.
|
||||
\pre \ref CombinatorialMap::dimension "LCC::dimension"\f$ \geq\f$ 2
|
||||
and \ref Linear_cell_complex::ambient_dimension "LCC::ambient_dimension"==2.
|
||||
\pre \link CombinatorialMap::dimension `LCC::dimension`\endlink \f$ \geq\f$ 2
|
||||
and \link Linear_cell_complex::ambient_dimension `LCC::ambient_dimension`\endlink==2.
|
||||
|
||||
\cgalHeading{File format}
|
||||
|
||||
|
|
|
|||
|
|
@ -5,7 +5,7 @@ namespace CGAL {
|
|||
\ingroup PkgLinearCellComplexClasses
|
||||
|
||||
The class `Linear_cell_complex_min_items` defines the type of darts, which is a
|
||||
\ref CombinatorialMapItems::Dart_wrapper "Dart_wrapper::Dart<d,LCC>", and the traits class used. In
|
||||
\link CombinatorialMapItems::Dart_wrapper `Dart_wrapper::Dart<d,LCC>`\endlink, and the traits class used. In
|
||||
this class, 0-attributes are enabled and associated with
|
||||
`Cell_attribute_with_point`.
|
||||
|
||||
|
|
|
|||
|
|
@ -5,8 +5,8 @@ namespace CGAL {
|
|||
|
||||
Returns the normal vector of the 0-cell containing `dh`, i.e.\ the average of
|
||||
all the normal vectors of the 2-cells incident to the 0-cell containing `dh`.
|
||||
\pre \ref Linear_cell_complex::ambient_dimension "LCC::ambient_dimension"==3 and
|
||||
`*dh`\f$ \in\f$\ref CombinatorialMap::darts "lcc.darts()"`.
|
||||
\pre \link Linear_cell_complex::ambient_dimension `LCC::ambient_dimension`\endlink==3 and
|
||||
`*dh`\f$ \in\f$\link CombinatorialMap::darts `lcc.darts()`\endlink`.
|
||||
|
||||
\sa `CGAL::compute_normal_of_cell_2<LCC>`
|
||||
|
||||
|
|
@ -19,8 +19,8 @@ typename LCC::Dart_const_handle dh);
|
|||
\ingroup PkgLinearCellComplexOperations
|
||||
|
||||
Returns the normal vector of the 2-cell containing `dh`.
|
||||
\pre \ref Linear_cell_complex::ambient_dimension "LCC::ambient_dimension"==3 and
|
||||
`*dh`\f$ \in\f$\ref CombinatorialMap::darts "lcc.darts()"`.
|
||||
\pre \link Linear_cell_complex::ambient_dimension `LCC::ambient_dimension`\endlink==3 and
|
||||
`*dh`\f$ \in\f$\link CombinatorialMap::darts `lcc.darts()`\endlink`.
|
||||
|
||||
\sa `CGAL::compute_normal_of_cell_0<LCC>`
|
||||
*/
|
||||
|
|
|
|||
|
|
@ -8,7 +8,7 @@ concept, to represent a cell attribute containing a point.
|
|||
|
||||
\cgalRefines `CellAttribute`
|
||||
|
||||
\cgalHasModel \ref CGAL::Cell_attribute_with_point "CGAL::Cell_attribute_with_point<LCC,Info_,Tag,OnMerge,OnSplit>"
|
||||
\cgalHasModel \link CGAL::Cell_attribute_with_point `CGAL::Cell_attribute_with_point<LCC,Info_,Tag,OnMerge,OnSplit>`\endlink
|
||||
|
||||
\sa `LinearCellComplexItems`
|
||||
|
||||
|
|
@ -42,15 +42,15 @@ CellAttributeWithPoint();
|
|||
|
||||
/*!
|
||||
Constructor initializing the point of this attribute by the
|
||||
copy contructor \ref Point "Point"`(apoint)`.
|
||||
copy contructor \link Point `Point`\endlink`(apoint)`.
|
||||
*/
|
||||
CellAttributeWithPoint(const Point&apoint);
|
||||
|
||||
/*!
|
||||
Constructor initializing the point of this attribute by the
|
||||
copy contructor \ref Point "Point"`(apoint)` and initializing the
|
||||
copy contructor \link Point `Point`\endlink`(apoint)` and initializing the
|
||||
information of this attribute by the
|
||||
copy contructor \ref Info "Info"`(info)`.
|
||||
copy contructor \link Info `Info`\endlink`(info)`.
|
||||
Defined only if `Info` is different from `void`.
|
||||
*/
|
||||
CellAttributeWithPoint(const Point&apoint, const Info& info);
|
||||
|
|
|
|||
|
|
@ -3,17 +3,13 @@
|
|||
\ingroup PkgLinearCellComplexConcepts
|
||||
\cgalConcept
|
||||
|
||||
The concept `LinearCellComplexItems` refines the concept of
|
||||
`CombinatorialMapItems` by adding the requirement that
|
||||
0-attributes are enabled, and associated with attributes that are
|
||||
models of the `CellAttributeWithPoint` concept.
|
||||
The concept `LinearCellComplexItems` refines the concept of `CombinatorialMapItems` by adding the requirement that 0-attributes are enabled, and associated with attributes that are models of the `CellAttributeWithPoint` concept.
|
||||
|
||||
\cgalRefines `CombinatorialMapItems`
|
||||
|
||||
The first type in \ref CombinatorialMapItems::Dart_wrapper "Attributes" must be a model of the
|
||||
`CellAttributeWithPoint` concept.
|
||||
The first type in \link CombinatorialMapItems::Dart_wrapper `Attributes`\endlink must be a model of the `CellAttributeWithPoint` concept.
|
||||
|
||||
\cgalHasModel \ref CGAL::Linear_cell_complex_min_items "CGAL::Linear_cell_complex_min_items<d>"
|
||||
\cgalHasModel \link CGAL::Linear_cell_complex_min_items `CGAL::Linear_cell_complex_min_items<d>`\endlink
|
||||
|
||||
\sa `CGAL::Linear_cell_complex<d,d2,LCCTraits,Items,Alloc>`
|
||||
\sa `CellAttributeWithPoint`
|
||||
|
|
|
|||
|
|
@ -3,11 +3,9 @@
|
|||
\ingroup PkgLinearCellComplexConcepts
|
||||
\cgalConcept
|
||||
|
||||
Required types and functors for the `LinearCellComplexTraits` concept. This
|
||||
geometric traits concept is used in the \ref CGAL::Linear_cell_complex "Linear_cell_complex"
|
||||
class.
|
||||
Required types and functors for the `LinearCellComplexTraits` concept. This geometric traits concept is used in the \link CGAL::Linear_cell_complex `Linear_cell_complex`\endlink class.
|
||||
|
||||
\cgalHasModel \ref CGAL::Linear_cell_complex_traits "CGAL::Linear_cell_complex_traits<d,K>"
|
||||
\cgalHasModel \link CGAL::Linear_cell_complex_traits `CGAL::Linear_cell_complex_traits<d,K>`\endlink
|
||||
|
||||
\sa `CGAL::Linear_cell_complex<d,d2,LCCTraits,Items,Alloc>`
|
||||
|
||||
|
|
@ -49,45 +47,45 @@ typedef unspecified_type Vector;
|
|||
/// @{
|
||||
|
||||
/*!
|
||||
Functor that provides \ref LinearCellComplexTraits::Point "Point " `operator() (const` \ref Point " Point"`& p, const` \ref LinearCellComplexTraits::Vector " Vector"` & v)`,
|
||||
Functor that provides
|
||||
\link LinearCellComplexTraits::Point `Point`\endlink `operator() (const` \link Point `Point`\endlink`& p, const` \link LinearCellComplexTraits::Vector `Vector`\endlink`& v)`,
|
||||
which constructs the translation of point `p` by vector `v`, and
|
||||
\ref LinearCellComplexTraits::Point "Point " `operator() (const CGAL::Origin&, const ` \ref LinearCellComplexTraits::Vector " Vector"& v)`,
|
||||
which constructs the translation of a point at the origin by vector `v`
|
||||
(used in \ref CGAL::Linear_cell_complex::barycenter "Linear_cell_complex::barycenter").
|
||||
\link LinearCellComplexTraits::Point `Point`\endlink `operator() (const CGAL::Origin&, const` \link LinearCellComplexTraits::Vector `Vector`\endlink`& v)`,
|
||||
which constructs the translation of a point at the origin by vector `v` (used in \link CGAL::Linear_cell_complex::barycenter `Linear_cell_complex::barycenter`\endlink).
|
||||
*/
|
||||
typedef unspecified_type Construct_translated_point;
|
||||
|
||||
/*!
|
||||
Functor that provides \ref LinearCellComplexTraits::Vector " Vector " `operator() (const ` \ref Point "Point"`& p1, const ` \ref Point " Point"`& p2)`
|
||||
Functor that provides \link LinearCellComplexTraits::Vector ` Vector `\endlink `operator() (const ` \link Point `Point`\endlink`& p1, const ` \link Point ` Point`\endlink`& p2)`
|
||||
which constructs a vector as the difference of points `p2-p1`, and
|
||||
\ref LinearCellComplexTraits::Vector " Vector " `operator() (const CGAL::Origin&, const ` \ref Point " Point"`& p)`
|
||||
\link LinearCellComplexTraits::Vector ` Vector `\endlink `operator() (const CGAL::Origin&, const ` \link Point ` Point`\endlink`& p)`
|
||||
which constructs a vector as the difference of point `p` and a point at the origin
|
||||
(used in \ref CGAL::Linear_cell_complex::barycenter "Linear_cell_complex::barycenter"
|
||||
(used in \link CGAL::Linear_cell_complex::barycenter `Linear_cell_complex::barycenter`\endlink
|
||||
and `CGAL::import_from_plane_graph`).
|
||||
*/
|
||||
typedef unspecified_type Construct_vector;
|
||||
|
||||
/*!
|
||||
Functor that provides \ref LinearCellComplexTraits::Vector " Vector " `operator() (const` \ref LinearCellComplexTraits::Vector " Vector"`& v1, const` \ref LinearCellComplexTraits::Vector " Vector"`& v2)`
|
||||
Functor that provides \link LinearCellComplexTraits::Vector ` Vector `\endlink `operator() (const` \link LinearCellComplexTraits::Vector ` Vector`\endlink`& v1, const` \link LinearCellComplexTraits::Vector ` Vector`\endlink`& v2)`
|
||||
which constructs a vector as the sum of vectors `v1+v2`
|
||||
(used in \ref CGAL::Linear_cell_complex::barycenter "Linear_cell_complex::barycenter",
|
||||
(used in \link CGAL::Linear_cell_complex::barycenter `Linear_cell_complex::barycenter`\endlink,
|
||||
`CGAL::compute_normal_of_cell_0`
|
||||
and `CGAL::compute_normal_of_cell_2`).
|
||||
*/
|
||||
typedef unspecified_type Construct_sum_of_vectors;
|
||||
|
||||
/*!
|
||||
Functor that provides \ref LinearCellComplexTraits::Vector " Vector " `operator() (const` \ref LinearCellComplexTraits::Vector " Vector"`& v, ` \ref LinearCellComplexTraits::FT "FT" `scale)`
|
||||
Functor that provides \link LinearCellComplexTraits::Vector ` Vector `\endlink `operator() (const` \link LinearCellComplexTraits::Vector ` Vector`\endlink`& v, ` \link LinearCellComplexTraits::FT `FT`\endlink `scale)`
|
||||
which constructs a vector equal to vector `v` scaled by `scale` factor
|
||||
(used in \ref CGAL::Linear_cell_complex::barycenter "Linear_cell_complex::barycenter",
|
||||
(used in \link CGAL::Linear_cell_complex::barycenter `Linear_cell_complex::barycenter`\endlink,
|
||||
`CGAL::compute_normal_of_cell_0` and `CGAL::compute_normal_of_cell_2`).
|
||||
*/
|
||||
typedef unspecified_type Construct_scaled_vector;
|
||||
|
||||
/*!
|
||||
Functor that provides \ref LinearCellComplexTraits::Point "Point " `operator() (const ` \ref Point "Point"`& p1, const ` \ref Point "Point"`& p2)`
|
||||
Functor that provides \link LinearCellComplexTraits::Point `Point `\endlink `operator() (const ` \link Point `Point`\endlink`& p1, const ` \link Point `Point`\endlink`& p2)`
|
||||
which constructs the midpoint of points `p1` and `p2`
|
||||
(used in \ref CGAL::Linear_cell_complex::barycenter "Linear_cell_complex::barycenter").
|
||||
(used in \link CGAL::Linear_cell_complex::barycenter `Linear_cell_complex::barycenter`\endlink).
|
||||
*/
|
||||
typedef unspecified_type Construct_midpoint;
|
||||
|
||||
|
|
@ -98,12 +96,12 @@ typedef unspecified_type Construct_midpoint;
|
|||
/// @{
|
||||
|
||||
/*!
|
||||
a model of \ref Kernel::Direction_2 "Direction_2".
|
||||
a model of \link Kernel::Direction_2 `Direction_2`\endlink.
|
||||
*/
|
||||
typedef unspecified_type Direction_2;
|
||||
|
||||
/*!
|
||||
a model of \ref Kernel::ConstructDirection_2 "ConstructDirection_2" (used in `CGAL::import_from_plane_graph`).
|
||||
a model of \link Kernel::ConstructDirection_2 `ConstructDirection_2`\endlink (used in `CGAL::import_from_plane_graph`).
|
||||
*/
|
||||
typedef unspecified_type Construct_direction_2;
|
||||
|
||||
|
|
@ -114,16 +112,15 @@ typedef unspecified_type Construct_direction_2;
|
|||
/// @{
|
||||
|
||||
/*!
|
||||
a model of \ref Kernel::ConstructNormal_3 "ConstructNormal_3" (used in `CGAL::compute_normal_of_cell_2`).
|
||||
a model of \link Kernel::ConstructNormal_3 `ConstructNormal_3`\endlink (used in `CGAL::compute_normal_of_cell_2`).
|
||||
*/
|
||||
typedef unspecified_type Construct_normal_3;
|
||||
|
||||
/*!
|
||||
a model of \ref Kernel::Collinear_3 "Collinear_3" (used in `CGAL::compute_normal_of_cell_2`).
|
||||
a model of \link Kernel::Collinear_3 `Collinear_3`\endlink (used in `CGAL::compute_normal_of_cell_2`).
|
||||
*/
|
||||
typedef unspecified_type Collinear_3;
|
||||
|
||||
/// @}
|
||||
|
||||
}; /* end LinearCellComplexTraits */
|
||||
|
||||
|
|
|
|||
|
|
@ -1,3 +1,4 @@
|
|||
@INCLUDE = ${CGAL_DOC_PACKAGE_DEFAULTS}
|
||||
|
||||
PROJECT_NAME = "CGAL ${CGAL_DOC_VERSION} - Linear Cell Complex"
|
||||
ALIASES += tred{1}="\htmlonly <b><font color='red'>\endhtmlonly \1 \htmlonly </font></b> \endhtmlonly "
|
||||
|
|
|
|||
|
|
@ -23,7 +23,7 @@ The combinatorial part of a linear cell complex is described by a
|
|||
read the \ref ChapterCombinatorialMap "Combinatorial maps user manual"
|
||||
for definitions). To add
|
||||
the linear geometrical embedding, a point (a model of
|
||||
\ref Kernel::Point_2 "Point_2" or \ref Kernel::Point_3 "Point_3" or \ref Kernel_d::Point_d "Point_d") is
|
||||
\link Kernel::Point_2 `Point_2`\endlink or \link Kernel::Point_3 `Point_3`\endlink or \link Kernel_d::Point_d `Point_d`\endlink) is
|
||||
associated to each vertex of the combinatorial map.
|
||||
|
||||
\cgalFigureBegin{fig_lcc_example_subdivisions,lcc_example_subdivisions.svg}
|
||||
|
|
@ -69,7 +69,7 @@ dimensions of cells, and they may also be void. In the class
|
|||
specific attributes are associated to all vertices of the
|
||||
combinatorial map. These attributes must contain a point (a model of
|
||||
(a model of
|
||||
\ref Kernel::Point_2 "Point_2" or \ref Kernel::Point_3 "Point_3" or \ref Kernel_d::Point_d "Point_d"),
|
||||
\link Kernel::Point_2 `Point_2`\endlink or \link Kernel::Point_3 `Point_3`\endlink or \link Kernel_d::Point_d `Point_d`\endlink),
|
||||
and can be represented by instances of class
|
||||
`Cell_attribute_with_point` (see
|
||||
Section \ref ssecattributewp "Cell Attributes").
|
||||
|
|
@ -81,7 +81,7 @@ UML diagram of the main classes of the package. Gray elements come from the \ref
|
|||
|
||||
\section sseclinearcellcomplex Linear Cell Complex
|
||||
|
||||
The \ref CGAL::Linear_cell_complex "Linear_cell_complex<d,d2,LCCTraits,Items,Alloc>" class
|
||||
The \link CGAL::Linear_cell_complex `Linear_cell_complex<d,d2,LCCTraits,Items,Alloc>`\endlink 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
|
||||
|
|
@ -118,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 \ref Linear_cell_complex::Point "LCC::Point".
|
||||
contains a point, an instance of \link Linear_cell_complex::Point `LCC::Point`\endlink.
|
||||
|
||||
\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 \ref LinearCellComplexTraits::Point "Point", the type of points used,
|
||||
and \ref LinearCellComplexTraits::Vector "Vector", the corresponding vector type. It also defines all
|
||||
class. For example it defines \link LinearCellComplexTraits::Point `Point`\endlink, the type of points used,
|
||||
and \link LinearCellComplexTraits::Vector `Vector`\endlink, the corresponding vector type. It also defines all
|
||||
the required functors used for constructions and operations, as for
|
||||
example \ref LinearCellComplexTraits::Construct_translated_point "Construct_translated_point" or
|
||||
\ref LinearCellComplexTraits::Construct_sum_of_vectors "Construct_sum_of_vectors".
|
||||
example \link LinearCellComplexTraits::Construct_translated_point `Construct_translated_point`\endlink or
|
||||
\link LinearCellComplexTraits::Construct_sum_of_vectors `Construct_sum_of_vectors`\endlink.
|
||||
|
||||
The class `Linear_cell_complex_traits<d,K>` is a model of
|
||||
`LinearCellComplexTraits`. It defines the different types which
|
||||
|
|
@ -153,28 +153,9 @@ 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 "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 \ref CombinatorialMap::unsew "unsew" method, but these 0-attributes are not new but
|
||||
copies of existing old 0-attributes.
|
||||
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 "A 3D Linear Cell Complex"). This is also the case for all the operations that do not create new 0-cells: \link CombinatorialMap::sew `sew`\endlink, \link CombinatorialMap::unsew `unsew`\endlink, \link CombinatorialMap::remove_cell `remove_cell`\endlink, \link CombinatorialMap::insert_cell_1_in_cell_2 `insert_cell_1_in_cell_2`\endlink, \link CombinatorialMap::insert_cell_2_in_cell_3 `insert_cell_2_in_cell_3`\endlink. 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 \link CombinatorialMap::unsew `unsew`\endlink 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
|
||||
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
|
||||
"Construction Operations" and \ref ssecmodifop "Modification Operations").
|
||||
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: \link CombinatorialMap::insert_cell_0_in_cell_1 `insert_cell_0_in_cell_1`\endlink, \link CombinatorialMap::insert_cell_0_in_cell_2 `insert_cell_0_in_cell_2`\endlink, \link CombinatorialMap::insert_dangling_cell_1_in_cell_2 `insert_dangling_cell_1_in_cell_2`\endlink, 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 "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
|
||||
|
|
@ -186,17 +167,17 @@ restore the validity conditions.
|
|||
|
||||
As explained in the combinatorial map user manual,
|
||||
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
|
||||
along an (<I>i</I>-1)-cell by using the \link CombinatorialMap::sew `sew<i>`\endlink method. Since
|
||||
this method updates non void attributes, and since points are specific
|
||||
attributes, they are automatically updated during the \ref CombinatorialMap::sew "sew<i>"
|
||||
attributes, they are automatically updated during the \link CombinatorialMap::sew `sew<i>`\endlink
|
||||
method. Thus the sewing of two <I>i</I>-cells could deform the
|
||||
geometry of the concerned objects.
|
||||
|
||||
For example, in \cgalFigureRef{fig_lcc_example_3d_sew}, we want to 3-sew the
|
||||
two initial 3-cells. \ref CombinatorialMap::sew "sew<3>(1,5)" links by \f$ \beta_3\f$ the pairs
|
||||
two initial 3-cells. \link CombinatorialMap::sew `sew<3>(1,5)`\endlink 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 \ref CellAttribute::On_merge "On_merge" functor is
|
||||
pair during the sew operation (and the \link CellAttribute::On_merge `On_merge`\endlink 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
|
||||
|
|
@ -206,22 +187,22 @@ Intuitively, the
|
|||
geometry of the second 2-cell is deformed to fit to the first 2-cell.
|
||||
|
||||
\cgalFigureBegin{fig_lcc_example_3d_sew,lcc_example_3d_sew.svg}
|
||||
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.
|
||||
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 \link CombinatorialMap::sew `sew<3>(1,5)`\endlink (or \link CombinatorialMap::sew `sew<3>(2,8)`\endlink, or \link CombinatorialMap::sew `sew<3>(3,7)`\endlink, or \link CombinatorialMap::sew `sew<3>(4,6)`\endlink). 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 \ref CombinatorialMap::unsew "unsew" operation, which removes \f$ \beta_i\f$ links
|
||||
This is similar for link \link CombinatorialMap::unsew `unsew`\endlink 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{fig_lcc_example_3d_sew} (Right), and we call
|
||||
\ref CombinatorialMap::unsew "unsew<3>(2)", we obtain the linear cell complex in
|
||||
\link CombinatorialMap::unsew `unsew<3>(2)`\endlink, we obtain the linear cell complex in
|
||||
\cgalFigureRef{fig_lcc_example_3d_sew} (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
|
||||
\ref CellAttribute::On_split "On_split" in the attribute class).
|
||||
The \ref CombinatorialMap::unsew "unsew<3>" operation
|
||||
\link CellAttribute::On_split `On_split`\endlink in the attribute class).
|
||||
The \link CombinatorialMap::unsew `unsew<3>`\endlink 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.
|
||||
|
||||
|
|
@ -240,23 +221,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 \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".
|
||||
are \link Linear_cell_complex::make_segment `make_segment`\endlink,
|
||||
\link Linear_cell_complex::make_triangle `make_triangle`\endlink,
|
||||
\link Linear_cell_complex::make_tetrahedron `make_tetrahedron`\endlink and
|
||||
\link Linear_cell_complex::make_hexahedron `make_hexahedron`\endlink.
|
||||
|
||||
There are two functions allowing to build a linear cell complex
|
||||
from two other \cgal data types:
|
||||
<UL>
|
||||
<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
|
||||
<LI>\link ::import_from_triangulation_3 `import_from_triangulation_3(lcc,atr)`\endlink: adds in `lcc` all
|
||||
the tetrahedra present in `atr`, a \link CGAL::Triangulation_3 `Triangulation_3`\endlink;
|
||||
<LI>\link ::import_from_polyhedron_3 `import_from_polyhedron_3(lcc,ap)`\endlink: adds in `lcc` all
|
||||
the cells present in `ap`, a `Polyhedron_3`.
|
||||
</UL>
|
||||
|
||||
Lastly, the function \ref ::import_from_plane_graph "import_from_plane_graph(lcc,ais)" adds in
|
||||
Lastly, the function \link ::import_from_plane_graph `import_from_plane_graph(lcc,ais)`\endlink adds in
|
||||
`lcc` all the cells reconstructed from the planar graph read in
|
||||
`ais`, a `std::istream` (see the \ref ::import_from_plane_graph "reference manual" for the file
|
||||
`ais`, a `std::istream` (see the \link ::import_from_plane_graph `reference manual`\endlink for the file
|
||||
format).
|
||||
|
||||
\subsection Linear_cell_complexModificationOperations Modification Operations
|
||||
|
|
@ -269,17 +250,17 @@ handles for the darts `d0`, `d1`, `d2`, respectively. That
|
|||
is `d0 == *dh0`.
|
||||
|
||||
\cgalFigureBegin{fig_lcc_insert_vertex,lcc_insert_vertex.svg}
|
||||
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.
|
||||
Example of \link Linear_cell_complex::insert_barycenter_in_cell `insert_barycenter_in_cell<1>`\endlink and \link CombinatorialMap::remove_cell `remove_cell<0>`\endlink 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
|
||||
|
||||
|
||||
\ref Linear_cell_complex::insert_barycenter_in_cell "lcc.insert_barycenter_in_cell<unsigned int i>(dh0)" adds the
|
||||
\link Linear_cell_complex::insert_barycenter_in_cell `lcc.insert_barycenter_in_cell<unsigned int i>(dh0)`\endlink adds the
|
||||
barycenter of the <I>i</I>-cell containing dart `d0`. This
|
||||
operation is possible if `d0`\f$ \in\f$\ref CombinatorialMap::darts "lcc.darts()" (see examples
|
||||
operation is possible if `d0`\f$ \in\f$\link CombinatorialMap::darts `lcc.darts()`\endlink (see examples
|
||||
on \cgalFigureRef{fig_lcc_insert_vertex} and
|
||||
\cgalFigureRef{fig_lcc_triangulation}).
|
||||
|
||||
\ref Linear_cell_complex::insert_point_in_cell "lcc.insert_point_in_cell<unsigned int i>(dh0,p)" is an operation
|
||||
\link Linear_cell_complex::insert_point_in_cell `lcc.insert_point_in_cell<unsigned int i>(dh0,p)`\endlink 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
|
||||
|
|
@ -287,20 +268,20 @@ 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{fig_lcc_triangulation,lcc_triangulation.svg}
|
||||
Examples of \ref Linear_cell_complex::insert_barycenter_in_cell "insert_barycenter_in_cell<2>" operation.
|
||||
Examples of \link Linear_cell_complex::insert_barycenter_in_cell `insert_barycenter_in_cell<2>`\endlink operation.
|
||||
\cgalFigureEnd
|
||||
|
||||
|
||||
\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
|
||||
\link Linear_cell_complex::insert_dangling_cell_1_in_cell_2 `lcc.insert_dangling_cell_1_in_cell_2(dh0,p)`\endlink 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$\ref CombinatorialMap::darts "lcc.darts()" (see example on
|
||||
`d0`\f$ \in\f$\link CombinatorialMap::darts `lcc.darts()`\endlink (see example on
|
||||
\cgalFigureRef{fig_lcc_insert_edge}).
|
||||
|
||||
\cgalFigureBegin{fig_lcc_insert_edge,lcc_insert_edge.svg}
|
||||
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.
|
||||
Example of \link Linear_cell_complex::insert_dangling_cell_1_in_cell_2 `insert_dangling_cell_1_in_cell_2`\endlink, `::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
|
||||
|
|
@ -317,8 +298,8 @@ If \link CombinatorialMap::set_automatic_attributes_management `set_automatic_at
|
|||
|
||||
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 \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
|
||||
thanks to a \link Linear_cell_complex::Vertex_attribute_const_range `Vertex_attribute_const_range`\endlink. Then, the two
|
||||
tetrahedra are \link CombinatorialMap::sew `3-sewn`\endlink 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
|
||||
|
|
@ -340,7 +321,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
|
||||
\ref CombinatorialMap::sew "sew<3>". There are eight points, four for each tetrahedron.
|
||||
\link CombinatorialMap::sew `sew<3>`\endlink. 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
|
||||
|
|
@ -394,8 +375,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
|
||||
\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
|
||||
\link CombinatorialMap::One_dart_per_incident_cell_range `One_dart_per_incident_cell_range<0, 3>`\endlink ranges). Then we
|
||||
\link CombinatorialMap::sew `3-sew`\endlink the two cubes along one facet. This operation merges some
|
||||
vertices (as in the example of \cgalFigureRef{fig_lcc_example_3d_sew}). 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
|
||||
|
|
@ -430,7 +411,7 @@ 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
|
||||
\ref Linear_cell_complex::insert_barycenter_in_cell "insert_barycenter_in_cell<2>" which is a dart incident to the
|
||||
\link Linear_cell_complex::insert_barycenter_in_cell `insert_barycenter_in_cell<2>`\endlink which is a dart incident to the
|
||||
new vertex.
|
||||
|
||||
\subsection Linear_cell_complexAutomaticAttributesManagement Automatic attributes management
|
||||
|
|
|
|||
Loading…
Reference in New Issue