Any boundary facet is labeled <a,b>, with a<b, where a and b are the tags of its incident subdomains. Thus, a boundary facet of the domain is labeled <0,b>, where b!=0.
This class includes a labeling function that provides the index of the subdomain in which any query point lies. An intersection between a segment and bounding surfaces is detected when both segment endpoints are associated with different values of subdomain indices. The intersection is then constructed by bisection. The bisection stops when the query segment is shorter than an error bound e given by the product of the length of the diagonal of the bounding box (in world coordinates), or the radius of the bounding sphere, and a relative error bound passed as argument to the constructor of Labeled_mesh_domain_3.
This class has a constructor taking a labeling function. It has also three static template member functions that act as named constructors:
is a geometric traits class that provides the basic operations to implement intersection tests and intersection computations through a bisection method. This parameter must be instantiated with a model of the concept BisectionGeometricTraits_3.
Labeling function
A labeling function f must return 0 if the point isn't located in any subdomain. The return type of labeling functions is an integer.
The function type can be any model of the concept Callable compatible with the signature Subdomain_index(const Point_3&): it can be a function, a function object, a lambda expression... that takes a Point_3 as argument, and returns a type convertible to Subdomain_index.
an optional sequence of Named Parameters among the ones listed below:
Optional Named Parameters
the relative error bound used to compute intersection points between the implicit surface and query segments. The bisection is stopped when the length of the intersected segment is less than the product of relative_error_bound by the diameter of the bounding object.
This static method is a named constructor. It constructs a domain described by a 3D gray image. A 3D gray image is a grid of voxels, where each voxel is associated with a gray level value. Unless otherwise specified by the parameter image_values_to_subdom_indices, the domain to be discretized is the union of voxels that lie inside a surface described by an isolevel value, called isovalue. The voxels lying inside the domain have gray level values that are larger than the isovalue.
The value of voxels is interpolated to a gray level value at any query point.
an optional sequence of Named Parameters among the ones listed below:
Optional Named Parameters
the isovalue, inside image, of the surface describing the boundary of the object to be meshed.
Default: 0
a function or a function object, compatible with the signature Subdomain_index(double). This function returns the subdomain index corresponding to a pixel value. If this parameter is used, then the parameter iso_value is ignored.
Default: Null_functor()
the value attached to voxels outside of the domain to be meshed. It should be lower than iso_value.
Default: 0
is the relative error bound, relative to the diameter of the box of the image.
This static method is a named constructor. It constructs a domain whose bounding surface is described implicitly as the zero level set of a function. The domain to be discretized is assumed to be the domain where the function has negative values.
The method takes as argument a bounding sphere which is required to circumscribe the surface and to have its center inside the domain.
Template Parameters
Function
a type compatible with the signature FT(Point_3): it takes a point as argument, and returns a scalar value. That object must be model of CopyConstructible
This static method is a named constructor. It constructs a domain described by a 3D labeled image. A 3D labeled image is a grid of voxels, where each voxel is associated with an index (a subdomain index) characterizing the subdomain in which the voxel lies. The domain to be discretized is the union of voxels that have non-zero values.
an optional sequence of Named Parameters among the ones listed below:
Optional Named Parameters
a reference to an input 3D image that provides weights associated to each voxel (the word type is unsigned char, and the voxels values are integers between 0 and 255). The weights image can be generated with CGAL::Mesh_3::generate_label_weights(). Its dimensions must be the same as the dimensions of parameters::image.
Extra: if features_detector is provided, weights should be modified accordingly. The available functors described in See Feature Detection implement the necessary modifications.
Extra: if input_features is provided, weights should be modified accordingly to keep consistency of the output MeshDomainWithFeatures_3
the value attached to voxels outside of the domain to be meshed. It should be lower than iso_value.
Default: 0
is the relative error bound, relative to the diameter of the box of the image.
Default: FT(1e-3)
a functor that implements std::vector<std::vector<Point>> operator()(const Image_3& img) const, and std::vector<std::vector<Point>> operator()(const Image_3& img, Image_3& weights) const, where Point matches the mesh domain point type, that both return a range of detected polyline features for feature protection. Only one implementation is used, depending on whether the named parameter weights is provided or not. Polyline features are added to the domain for further feature protection. See Feature Detection for available functors.
Extra: The return type of the function depends on whether this parameter or input_features are provided or not.
Extra: If weights is provided, it must either be adapted to the detected features, or post-processed during feature detection to keep consistency of the output MeshDomainWithFeatures_3. Available functors implement the necessary modifications.
a Range of polyline features, represented as Ranges of Point_3. Polyline features are added to the domain for further feature protection. Input polyline features must be different from the detected features and can intersect only at vertices, if they do. Otherwise, the meshing process may not terminate.