CGAL/Mesh_3/Labeled_mesh_domain_3.h
CGAL/Mesh_3/Implicit_to_labeled_function_wrapper.h
So, some branches in development using theses features won't be broken.
In Implicit_multi_domain_to_labeling_function_wrapper, the point
type is deduced if ImplicitFunction is a pointer function, else it must
be a nested type of ImplicitFunction.
BGT isn't required anymore for this wrapper.
The constructor of Implicit_multi_domain_to_labeling_function_wrapper taking
only one argument has a new way for auto-making the vector of vector of
positions. In this case, the union of the components equals to the union
of the functions.
The user can indicate more precisely which components he wants.
For each component that the user want, he must provide the matching
vector of signs. All these vector of positions must be put in a vector
passed as second parameter to the constructor of that wrapper.
Doc and examples are updated.
This wrapper allow the user to define a domain following several functions.
A point will be in the domain if the result sign of each function
matches the ones expected by the user.
Periodic domain isn't based on Implicit_mesh_domain_3 anymore.
So, these modifications making Implicit_mesh_domain_3 compatible with
periodic cases are obsolete.
In periodic cases, we may want to pass an bouding box with exact coordinates.
But, this is impossible to do with Bbox_3 which always has double
coordinates.
This wrapper allow the user to define a domain following several functions.
A point will be in the domain if the result sign of each function
matches the ones expected by the user.
This branch fixes a bug in the sliver perturber.
It introduces some new data structures to backup the metadata
stored in cells before each perturbation. This allows to
recover these data without recomputing them in case the move
is reverted.
The bug fix comes from the fact that rec-omputed values might
have been different after the move from what they were before the
move, in a tetrahedron which is the same but for which the
Cell_handle is new.
Approved by the release manager.
In CGAL-4.2 and previous, when a facet f was between finite cells c1,
and c2, with different subdomain indices, the surface patch index of f
was the pair { c1->subdomain_index(), c2->subdomain_index() }, say the
pair (1, 2). Since CGAL-4.3, with
CGAL_MESH_3_NO_LONGER_CALLS_DO_INTERSECT_3, the Do_intersect functor of
the domain is no longer called, and only Construct_intersection. If the
bissection eventually found out that the bissection ended up between the
volumes labeled 1 and 3, then the returned surface patch index was
{1,3}, instead of {1,2}. That commit fixes that "bug", and restores
the behavior of CGAL-4.2.
- Update_c3t3::operator()(Cell_handle) returns a
boost::optional<Subdomain_index> instead of a Boolean.
- Update_c3t3::operator()(Facet) returns a
boost::optional<Surface_patch_index> instead of a Boolean.
- Update_c3t3::operator()(Facet) gets a new option that allows to update
the facet surface center, without updating the c3t3 itself.
valid_move(c3t3_cells(conflict_cells)) was computed using the outdated
c3t3-ness of cells
Now c3t3 update is done iff the surface has not been broken, and
new sliver_criterion values are computed on updated cells
vertex indices in Cell_from_ids should not be sorted,
otherwise, what is stored in surface_patch_index[i]
does not correspond to the right i.
Copy indices to have them :
- in the original order
- and sorted (for set::find)