There are no such concepts or models with _stencil

This commit is contained in:
Andreas Fabri 2017-01-04 10:28:01 +01:00 committed by Mael Rouxel-Labbé
parent 813cb94b8b
commit 594a5a0a58
2 changed files with 18 additions and 17 deletions

View File

@ -22,8 +22,9 @@ the subdivision methods.
The natural intuition of the geometry suffices to control the The natural intuition of the geometry suffices to control the
subdivision methods. subdivision methods.
`Subdivision_method_3`, designed to work on the class `Subdivision_method_3` works for the classes
`Polyhedron_3`, aims to be easy to use and to extend. `Polyhedron_3` and `Surface_mesh`, as they are models of the concept
`MutableFaceGraph`, and it aims to be easy to use and to extend.
`Subdivision_method_3` is not a class, but a namespace `Subdivision_method_3` is not a class, but a namespace
which contains four popular subdivision methods and their refinement which contains four popular subdivision methods and their refinement
functions. These include Catmull-Clark, Loop, Doo-Sabin and functions. These include Catmull-Clark, Loop, Doo-Sabin and
@ -188,15 +189,17 @@ three components of the Catmull-Clark subdivision method.
\code{.cpp} \code{.cpp}
template <class Polyhedron_3, template <typename> class Mask> template <class PolygonMesh, template <typename> class Mask>
void PQQ(Polyhedron_3& p, Mask<Polyhedron_3> mask, int depth) void PQQ(PolygonMesh& p, Mask<PolygonMesh>> mask, int depth)
\endcode \endcode
`Polyhedron_3` is a generic mesh data structure for `PolygonMesh` must be an instantiation of `Polyhedron_3`,
`Surface_mesh`, or any other model of the concept `MutableFaceGraph`.
It is a generic mesh data structure for
arbitrary 2-manifolds. `PQQ()`, which refines the control mesh arbitrary 2-manifolds. `PQQ()`, which refines the control mesh
`p`, is a <I>refinement host</I> that uses a policy class `p`, is a <I>refinement host</I> that uses a policy class
`Mask<Polyhedron_3>` as part of it geometry computation. `Mask<PolygonMesh>` as part of it geometry computation.
During the refinement, `PQQ()` computes and assigns During the refinement, `PQQ()` computes and assigns
new points by cooperating with the `mask`. new points by cooperating with the `mask`.
To implement Catmull-Clark subdivision, To implement Catmull-Clark subdivision,
@ -215,7 +218,7 @@ for the PQQ refinement.
\code{.cpp} \code{.cpp}
template <class PolygonMesh> template <class PolygonMesh>
class PQQ_stencil_3 { class PQQMask_3 {
void face_node(boost::graph_traits<PolygonMesh>::face_descriptor facet, Point_3& pt); void face_node(boost::graph_traits<PolygonMesh>::face_descriptor facet, Point_3& pt);
void edge_node(boost::graph_traits<PolygonMesh>::halfedge_descriptor edge, Point_3& pt); void edge_node(boost::graph_traits<PolygonMesh>::halfedge_descriptor edge, Point_3& pt);
void vertex_node(boost::graph_traits<PolygonMesh>::vertex_descriptor vertex, Point_3& pt); void vertex_node(boost::graph_traits<PolygonMesh>::vertex_descriptor vertex, Point_3& pt);
@ -223,7 +226,7 @@ class PQQ_stencil_3 {
\endcode \endcode
Each class function in `PQQ_stencil_3` Each class function in `PQQMask_3`
computes a new point based on the neighborhood of the primitive computes a new point based on the neighborhood of the primitive
descriptor, and assigns the new point to `Point_3& pt`. descriptor, and assigns the new point to `Point_3& pt`.
@ -344,7 +347,7 @@ void Sqrt3(TriangleMesh& p, Mask<TriangleMesh> mask, int step)
\endcode \endcode
The mesh class is a specialization of The mesh class is a specialization of
`MutableFaceGraph` and it must be a triangle mesh or a quad mesh, `MutableFaceGraph` and it must be a triangle mesh or a polygon mesh,
and the mask is a policy class realizing the geometry masks of the and the mask is a policy class realizing the geometry masks of the
subdivision method. subdivision method.
@ -468,7 +471,7 @@ void border_node(boost::graph_traits<PolygonMesh>::halfedge_descriptor edge, Poi
\endcode \endcode
The mask interfaces of all four refinement hosts are listed below. The mask interfaces of all four refinement hosts are listed below.
`DQQ_stencil_3` and `Sqrt3_stencil_3` `DQQMask_3` and `Sqrt3Mask_3`
do not have the border-node stencil because the refinement hosts of do not have the border-node stencil because the refinement hosts of
DQQ and \f$ \sqrt{3}\f$ refinements do not support global boundaries in the DQQ and \f$ \sqrt{3}\f$ refinements do not support global boundaries in the
current release. This might be changed in the future releases. current release. This might be changed in the future releases.
@ -476,7 +479,7 @@ current release. This might be changed in the future releases.
\code{.cpp} \code{.cpp}
template <class PolygonMesh> template <class PolygonMesh>
class PQQ_stencil_3 { class PQQMask_3 {
void face_node(boost::graph_traits<PolygonMesh>::face_descriptor, Point_3&); void face_node(boost::graph_traits<PolygonMesh>::face_descriptor, Point_3&);
void edge_node(boost::graph_traits<PolygonMesh>::halfedge_descriptor, Point_3&); void edge_node(boost::graph_traits<PolygonMesh>::halfedge_descriptor, Point_3&);
void vertex_node(boost::graph_traits<PolygonMesh>::vertex_descriptor, Point_3&); void vertex_node(boost::graph_traits<PolygonMesh>::vertex_descriptor, Point_3&);
@ -485,7 +488,7 @@ class PQQ_stencil_3 {
}; };
template <class TriangleMesh> template <class TriangleMesh>
class PTQ_stencil_3 { class PTQMask_3 {
void edge_node(boost::graph_traits<TriangleMesh>::halfedge_descriptor, Point_3&); void edge_node(boost::graph_traits<TriangleMesh>::halfedge_descriptor, Point_3&);
void vertex_node(boost::graph_traits<TriangleMesh>::vertex_descriptor, Point_3&); void vertex_node(boost::graph_traits<TriangleMesh>::vertex_descriptor, Point_3&);
@ -493,13 +496,13 @@ class PTQ_stencil_3 {
}; };
template <class PolygonMesh> template <class PolygonMesh>
class DQQ_stencil_3 { class DQQMask_3 {
public: public:
void corner_node(boost::graph_traits<PolygonMesh>::halfedge_descriptor edge, Point_3& pt); void corner_node(boost::graph_traits<PolygonMesh>::halfedge_descriptor edge, Point_3& pt);
}; };
template <class TriangleMesh> template <class TriangleMesh>
class Sqrt3_stencil_3 { class Sqrt3Mask_3 {
public: public:
void vertex_node(boost::graph_traits<TriangleMesh>::vertex_descriptor vertex, Point_3& pt); void vertex_node(boost::graph_traits<TriangleMesh>::vertex_descriptor vertex, Point_3& pt);
}; };

View File

@ -1,13 +1,11 @@
#include <CGAL/Simple_cartesian.h> #include <CGAL/Simple_cartesian.h>
#include <CGAL/Surface_mesh.h>
#include <CGAL/Polyhedron_3.h> #include <CGAL/Polyhedron_3.h>
#include <CGAL/Subdivision_method_3.h> #include <CGAL/Subdivision_method_3.h>
#include <iostream> #include <iostream>
typedef CGAL::Simple_cartesian<double> Kernel; typedef CGAL::Simple_cartesian<double> Kernel;
typedef CGAL::Surface_mesh<Kernel::Point_3> Polyhedron; typedef CGAL::Polyhedron_3<Kernel> Polyhedron;
//typedef CGAL::Polyhedron_3<Kernel> Polyhedron;
using namespace std; using namespace std;
using namespace CGAL; using namespace CGAL;