MeshDomain_3

Definition

The concept MeshDomain_3 describes the knowledge required on the object to be discretized. More specifically the concept provides a method to localize a point with regards to the input domain. Moreover, as the concept SurfaceMeshTraits_3, it also provides predicates which test whether a query segment (or a ray, or a line) intersects the boundary of the domain or of some 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 class 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.


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_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.


MeshDomain_3::Subdomain
Return type of Is_in_domain queries. Must be convertible to bool. If it converts to false, the query point is outside the domain. Otherwise the query point subdomain index must be accessible using operator*(). Note that boost::optional<Subdomain_index> is a natural model of this concept.

MeshDomain_3::Surface_patch
Return type of Do_intersect_surface queries. Must be convertible to bool. If it converts to false, no surface is intersected by the query. Otherwise the surface index of one of the intersected surface patches must be accessible using operator*(). Note that boost::optional<Surface_index> is a natural model of this concept.

typedef CGAL::cpp0x::tuple<Point_3, Index, int>
Intersection; Return type of Construct_intersection queries. int represents the dimension of the lower dimensionnal face of the input complex on which the 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 if 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:
Subdomain 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:
Surface_patch operator()(Segment_3 s)
Surface_patch operator()(Ray_3 r)
Surface_patch operator()(Line_3 l)
The Surface_patch output tells whether or not the query intersects a surface patch. In the positive case, it yields the Surface_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_index ( Surface_index surface_index)
Returns the index to be stored at a vertex lying on the surface patch identified by surface_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_index domain.surface_index ( Index index)
Returns the Surface_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
make_mesh_3
refine_mesh_3