Concept

MeshDomain_3

Definition

The concept MeshDomain_3 describes the knowledge required on the object to be discretized. The concept MeshDomain_3 is the concept to be used when the input domain does not have 0 or 1-dimensional features that need to be accurately approximated by the mesh. In such a case, the queries issued by the meshing process concern only the faces of the input domain with dimension 3 and 2, that are respectively called subdomains and surface patches.

More specifically the concept MeshDomain_3 provides a method to localize a point with respect to the input domain and its subdomains. Moreover, as the concept SurfaceMeshTraits_3, it also provides predicates to test whether a query segment (or a ray, or a line) intersects the boundary of the domain or of the subdomains, and constructors to compute some intersection point if any. It also includes a method able to provide a small set of initial points on the boundary.

In the following we consider only proper intersection with the domain and subdomain boundaries. A segment, ray or line is said to intersect properly the domain boundary (resp. a subdomain boundary) if it includes points which are strictly inside and strictly outside the domain (resp. the subdomain).

Types

MeshDomain_3::R
Geometric traits class. This type is defined to ensure compatibility with CGAL::Kernel_traits<T>.


MeshDomain_3::Point_3
Point type.

MeshDomain_3::Segment_3
Segment type.

MeshDomain_3::Ray_3
Ray type.

MeshDomain_3::Line_3
Line type.

typedef CGAL::Tag_false Has_features; A type to distinguish MeshDomain_3 models from MeshDomainWithFeatures_3 models.

MeshDomain_3::Subdomain_index
Type of indices for subdomains of the input domain. Must be a model of CopyConstructible, Assignable, DefaultConstructible and EqualityComparable. The default constructed value must match the label of the exterior of the domain (which contains at least the unbounded component).

MeshDomain_3::Surface_patch_index
Type of indices for surface patches (boundaries and interfaces) of the input domain. Must be a model of CopyConstructible, Assignable, DefaultConstructible and EqualityComparable. The default constructed value must be the index value assigned to a non surface facet.

MeshDomain_3::Index
Type of indices to be stored at mesh vertices to characterize the lowest dimensional face of the input complex on which the vertex lies. Must be a model of CopyConstructible, Assignable, DefaultConstructible and EqualityComparable.

typedef CGAL::cpp0x::tuple<Point_3, Index, int>
Intersection; Return type of Construct_intersection queries. int represents the dimension of the lower dimensional face of the input complex on which the intersection point lies and Index is the index of this face.

MeshDomain_3::Construct_initial_points
A function object to construct a set of initial points on the surface of the domain. Provides the following operators:
template<typename OutputIterator>\ OutputIterator operator()(OutputIterator pts)
template<typename OutputIterator>\ OutputIterator operator()(int n, OutputIterator pts)
Those two operators output a set of (n) surface points to the output iterator pts, as objects of type std::pair<Point_3, Index>. If n is not given, the functor must provide enough points to initialize the mesh generation process.


MeshDomain_3::Is_in_domain
A function object to query whether a point is in the input domain or not. In the positive case, it outputs the subdomain which includes the query point. Provides the operator:
boost::optional<Subdomain_index> operator()(Point_3 p)


MeshDomain_3::Do_intersect_surface
A function object which answers intersection queries between the surface patches of the domain and objects of type Segment_3, Ray_3 or Line_3. Provides the operators:
boost::optional<Surface_patch_index> operator()(Segment_3 s)
boost::optional<Surface_patch_index> operator()(Ray_3 r)
boost::optional<Surface_patch_index> operator()(Line_3 l)
The return type of the operators tell whether or not the query intersects a surface patch. In the positive case, it provides (through operator*()) the Surface_patch_index of one of the intersected surface patches.


MeshDomain_3::Construct_intersection
A function object to construct the intersection between an object of type Segment_3, Ray_3 or Line_3 and an interface. Provides the operators:
Intersection operator()(Segment_3 s)
Intersection operator()(Ray_3 r)
Intersection operator()(Line_3 l)
Precondition: do_intersect_surface(s/r/l) == true

Operations

The following functions give access to the function objects:

Construct_initial_points domain.construct_initial_points_object ()
Is_in_domain domain.is_in_domain_object ()
Do_intersect_surface domain.do_intersect_surface_object ()
Construct_intersection domain.construct_intersection_object ()

These methods are designed to convert indices:

Index domain.index_from_surface_patch_index ( Surface_patch_index surface_patch_index)
Returns the index to be stored at a vertex lying on the surface patch identified by surface_patch_index.
Index domain.index_from_subdomain_index ( Subdomain_index subdomain_index)
Returns the index to be stored at a vertex lying in the subdomain identified by subdomain_index.
Surface_patch_index domain.surface_patch_index ( Index index)
Returns the Surface_patch_index of the surface patch where lies a vertex with dimension 2 and index index.
Subdomain_index domain.subdomain_index ( Index index)
Returns the index of the subdomain containing a vertex with dimension 3 and index index.

Has Models

Polyhedral_mesh_domain_3<Polyhedron,IGT,TriangleAccessor>
Implicit_mesh_domain_3<Function,BGT>
Labeled_image_mesh_domain_3<Image,BGT>

See Also

MeshVertexBase_3
MeshCellBase_3
CGAL::make_mesh_3
CGAL::refine_mesh_3