Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Mesh 3 : initial_points_generator parameter for make_mesh_3 point initialization #7798

Open
wants to merge 108 commits into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from 89 commits
Commits
Show all changes
108 commits
Select commit Hold shift + click to select a range
3937c5d
Implemented make_mesh_3 param :
ange-clement Oct 13, 2023
2732dad
Fix CI
ange-clement Oct 16, 2023
bec5358
Fix CI
ange-clement Oct 16, 2023
0d0c1f3
Fix CI
ange-clement Oct 16, 2023
9fc7230
Fix CI
ange-clement Oct 16, 2023
f2af654
Use parameters instead of template
ange-clement Oct 17, 2023
268fd8b
Fix CI confusion between typedef and struct
ange-clement Oct 17, 2023
4ee4dff
Doc change + small fix
ange-clement Oct 17, 2023
c232929
Fix error when no initial_points_generator
ange-clement Oct 17, 2023
e5d2651
Fix unvoluntary copy
ange-clement Oct 17, 2023
cb71595
Doc changed example +
ange-clement Oct 18, 2023
6558190
Fixed doc
ange-clement Oct 18, 2023
91d66d0
Renamed Construct_initial_points_from_labeled_image.h
ange-clement Oct 18, 2023
23af3eb
Updated doc example snippets +
ange-clement Oct 18, 2023
932e8a2
Fix Doc missing end of description
ange-clement Oct 18, 2023
df6d1ed
Fix Doc :
ange-clement Oct 18, 2023
3ac0639
Small doc fix
ange-clement Oct 18, 2023
6955dbd
Doc operator()
ange-clement Oct 18, 2023
7eff272
Fix doc missing ref
ange-clement Oct 19, 2023
c014741
Doc add example +
ange-clement Oct 25, 2023
976e73c
Update Mesh_3/doc/Mesh_3/Mesh_3.txt
ange-clement Oct 25, 2023
ec5539e
Revision 1 :
ange-clement Oct 25, 2023
15e75d0
Small doc fix
ange-clement Oct 25, 2023
9d22242
Removed useless initialization files
ange-clement Oct 31, 2023
d7f110e
Changed InitialPointsGenerator concept :
ange-clement Oct 31, 2023
ea11f32
Doc update +
ange-clement Nov 3, 2023
455e865
Fix error
ange-clement Nov 6, 2023
ca7548b
Removed example +
ange-clement Nov 7, 2023
ca605fe
Fix doc build
ange-clement Nov 7, 2023
ec7a6ac
Added meshing parameter : initial_points
ange-clement Nov 10, 2023
c9eabbf
Fix demo errors
ange-clement Nov 10, 2023
d9f0f25
Added initial_points to the parameter doc
ange-clement Nov 13, 2023
2c9fb5c
doc
ange-clement Mar 28, 2024
e64e28d
Made initial_point parameter work with any Range
ange-clement Mar 29, 2024
5b0f1fc
Merge branch 'master' of https://github.com/CGAL/cgal into Mesh-3-rew…
ange-clement Mar 29, 2024
ae0f8f3
Finished Merge
ange-clement Mar 29, 2024
b1fb29c
InitialPointsGenerator parameter 'n' explanation
ange-clement Mar 29, 2024
da690fd
Fixed warning unused variables
ange-clement Apr 5, 2024
f2a2051
do not use deprecated include path
sloriot Apr 5, 2024
2701314
fix warnings
sloriot Apr 9, 2024
561256e
use override instead of virtual
lrineau Apr 15, 2024
cf01bdc
simplify the snippets
lrineau Apr 15, 2024
d7ea101
improve the doc sentences
lrineau Apr 29, 2024
2813d53
other changes I forgot to commit
lrineau Apr 29, 2024
fa6e044
Merge branch 'master' of https://github.com/CGAL/cgal into Mesh-3-rew…
ange-clement May 2, 2024
50dfc18
Merge branch 'Mesh-3-rework-make-mesh-point-initialization-2-aclement…
ange-clement May 2, 2024
8575f53
Doc upgrades + simplified initial_points_generator parameter + fixed…
ange-clement May 2, 2024
58d5050
Updated CHANGES.md
ange-clement May 22, 2024
2f25527
"at least n"
janetournois Sep 12, 2024
86edcf8
rename Functions to Functors
janetournois Sep 12, 2024
b754436
tell more about the "all connected components" thing
janetournois Sep 12, 2024
f09c8d9
cleaning
janetournois Sep 12, 2024
a360747
typos
janetournois Sep 12, 2024
4d40a05
doc
janetournois Sep 12, 2024
636fceb
remove the hardly readable std::tuple and use MeshDomain::Intersectio…
janetournois Sep 12, 2024
c55477c
document n
janetournois Sep 12, 2024
ce9cd9e
wip PR https://github.com/CGAL/cgal/pull/7798
janetournois Sep 17, 2024
026850c
use initial points vector
janetournois Sep 19, 2024
b574039
compilation of examples fixed
janetournois Sep 20, 2024
39254bb
introduce Dummy_initial_points_generator
janetournois Sep 20, 2024
b3a8530
use new API with named paremeter initial_points_generator in demo
janetournois Sep 24, 2024
490a6ad
update doc
janetournois Sep 24, 2024
f4e2b3d
remove useless generator() accessor
janetournois Sep 26, 2024
8d6e7f2
doc
janetournois Sep 26, 2024
f3b5333
doc
janetournois Sep 26, 2024
88457ee
make initialization logic consistent
janetournois Sep 30, 2024
76ee84e
mention features initialization in the insertion order description
janetournois Sep 30, 2024
f0ad731
cleaning
janetournois Sep 30, 2024
f3b9a5a
doc (Mael's review)
janetournois Sep 30, 2024
9645589
apply Mael's suggestions
janetournois Sep 30, 2024
7c4ab1c
remove outdated named parameter
janetournois Sep 30, 2024
883f062
Merge branch 'Mesh-3-rework-make-mesh-point-initialization-2-aclement…
janetournois Sep 30, 2024
32f147f
cleaning
janetournois Sep 30, 2024
74cd65e
move to 6.1
janetournois Sep 30, 2024
c1f2236
Merge remote-tracking branch 'cgal/master' into Mesh-3-rework-make-me…
janetournois Sep 30, 2024
4573f78
doc
janetournois Sep 30, 2024
435ea6e
doc
janetournois Sep 30, 2024
f77f9c6
Merge remote-tracking branch 'cgal/master' into Mesh-3-rework-make-me…
janetournois Oct 23, 2024
f3abf59
Merge remote-tracking branch 'cgal/master' into Mesh-3-rework-make-me…
janetournois Nov 4, 2024
75d3d30
fix unused variable warnings and add a const
janetournois Nov 5, 2024
13328c3
fix warning
sloriot Nov 6, 2024
d5203e3
doc
janetournois Nov 7, 2024
4215e18
fix CHANGES.md (lost by merge f77f9c68476de3abc9033e9f28b1b471e42c234b)
janetournois Nov 7, 2024
d08d664
Merge remote-tracking branch 'cgal/master' into Mesh-3-rework-make-me…
janetournois Nov 7, 2024
25b89cb
fix CHANGES.md
janetournois Nov 7, 2024
18a0f69
Merge remote-tracking branch 'cgal/master' into Mesh-3-rework-make-me…
janetournois Dec 5, 2024
5c70d48
actually allow tuple-like objects, and test that feature
lrineau Dec 17, 2024
79ebe7a
minor fixes
lrineau Dec 17, 2024
9803ab4
add test of initial_points_generator with a generator generating tupl…
lrineau Dec 17, 2024
820762d
proposal for a rewrite using a lamba expression as the point generator
lrineau Dec 18, 2024
e2d11a0
allow a range as parameter
lrineau Dec 18, 2024
eecff9d
add initial_points to the list of available functors for mesh initial…
lrineau Dec 18, 2024
8e5fab0
allow the initial points generator to be non-const
lrineau Dec 18, 2024
9ef32fb
remove memory leaks with VTK objects
lrineau Dec 18, 2024
51b9c4a
cleanup
lrineau Dec 18, 2024
740863c
doc review
janetournois Dec 19, 2024
7e5b9ee
rename concept with _3 postfix
janetournois Dec 19, 2024
2496122
fix missing fix
lrineau Dec 19, 2024
7f4e5b7
make doc more clear
janetournois Dec 19, 2024
1a4cc65
wip apply Laurent's reviews
janetournois Dec 19, 2024
2ed54df
add constructors documentation
janetournois Dec 19, 2024
84e55c3
fix include
janetournois Dec 19, 2024
a98101a
move tuple_like_helpers.h to STL_Extension to avoid dependency on Mesh_3
janetournois Dec 19, 2024
7e3aa09
complete move file
janetournois Dec 19, 2024
bc64faa
Laurent's review
janetournois Jan 17, 2025
c161fc1
with the point, snippet can't be found
janetournois Jan 20, 2025
1950235
remove extra point
janetournois Jan 20, 2025
1d6e305
typo
lrineau Jan 20, 2025
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 7 additions & 0 deletions Installation/CHANGES.md
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,13 @@

- Introduces two traits decorators, namely `Arr_tracing_traits_2` and `Arr_counting_traits_2`, which can be used to extract debugging and informative metadata about the traits in use while a program is being executed.

### [3D Mesh Generation](https://doc.cgal.org/6.1/Manual/packages.html#PkgMesh3)

- Added two new meshing parameters that enable mesh initialization customization :
- `initial_points_generator` : enables the user to specify a functor that generates initial points,
- `initial_points` : enables the user to specify a `Range` of initial points.


## [Release 6.0.1](https://github.com/CGAL/cgal/releases/tag/v6.0.1)

### [Poisson Surface Reconstruction](https://doc.cgal.org/6.0.1/Manual/packages.html#PkgPoissonSurfaceReconstruction3)
Expand Down
2 changes: 1 addition & 1 deletion Lab/demo/Lab/Plugins/Mesh_3/Mesh_3_plugin.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -592,7 +592,7 @@ void Mesh_3_plugin::mesh_3(const Mesh_type mesh_type,
ui.protect->setChecked(features_protection_available);

ui.facegraphCheckBox->setVisible(mesh_type == Mesh_type::SURFACE_ONLY);
ui.initializationGroup->setVisible(input_is_labeled_img);
ui.initializationGroup->setVisible(input_is_labeled_img || input_is_gray_img);
ui.grayImgGroup->setVisible(input_is_gray_img);

if(input_is_gray_img)
Expand Down
15 changes: 2 additions & 13 deletions Lab/demo/Lab/Plugins/Mesh_3/Mesh_3_plugin_cgal_code.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -20,19 +20,6 @@ using namespace CGAL::Three;

typedef Tr::Bare_point Bare_point;

struct Compare_to_isovalue {
double iso_value;
bool less;
typedef bool result_type;

Compare_to_isovalue(double iso_value, bool less)
: iso_value(iso_value), less(less) {}

bool operator()(double x) const {
return (x < iso_value) == less;
}
};

Meshing_thread* cgal_code_mesh_3(QList<const SMesh*> pMeshes,
const Polylines_container& polylines,
const SMesh* pBoundingMesh,
Expand Down Expand Up @@ -355,6 +342,8 @@ Meshing_thread* cgal_code_mesh_3(const Image* pImage,
param.protect_features
= protect_features || protect_borders || !polylines.empty();
param.detect_connected_components = detect_connected_components;
param.iso_value = iso_value;
param.inside_is_less = inside_is_less;
param.facet_angle = facet_angle;
param.facet_sizing = facet_sizing;
param.facet_min_sizing = facet_min_sizing;
Expand Down
87 changes: 74 additions & 13 deletions Lab/demo/Lab/Plugins/Mesh_3/Mesh_function.h
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,8 @@
#include <CGAL/Mesh_3/Mesher_3.h>
#include <CGAL/Mesh_criteria_3.h>
#include <CGAL/Mesh_3/Protect_edges_sizing_field.h>
#include <CGAL/Mesh_3/initialize_triangulation_from_labeled_image.h>
#include <CGAL/Mesh_3/Construct_initial_points_labeled_image.h>
#include <CGAL/Mesh_3/Construct_initial_points_gray_image.h>

#include "C3t3_type.h"
#include "Meshing_thread.h"
Expand All @@ -40,6 +41,19 @@ namespace CGAL {
class Image_3;
}

struct Compare_to_isovalue {
double iso_value;
bool less;
typedef bool result_type;

Compare_to_isovalue(double iso_value, bool less)
: iso_value(iso_value), less(less) {}

bool operator()(double x) const {
return (x < iso_value) == less;
}
};

struct Mesh_parameters
{
double facet_angle;
Expand All @@ -55,6 +69,8 @@ struct Mesh_parameters
double edge_distance;
bool protect_features;
bool detect_connected_components;
float iso_value;
bool inside_is_less;
int manifold;
const CGAL::Image_3* image_3_ptr;
const CGAL::Image_3* weights_ptr;
Expand Down Expand Up @@ -111,6 +127,7 @@ class Mesh_function

void initialize(const Mesh_criteria& criteria, Mesh_fnt::Domain_tag);
void initialize(const Mesh_criteria& criteria, Mesh_fnt::Labeled_image_domain_tag);
void initialize(const Mesh_criteria& criteria, Mesh_fnt::Gray_image_domain_tag);

Edge_criteria edge_criteria(double b, double minb, double d, Mesh_fnt::Domain_tag);
Edge_criteria edge_criteria(double b, double minb, double d, Mesh_fnt::Polyhedral_domain_tag);
Expand Down Expand Up @@ -229,16 +246,61 @@ Mesh_function<D_,Tag>::
initialize(const Mesh_criteria& criteria, Mesh_fnt::Labeled_image_domain_tag)
// for a labeled image
{
if(p_.detect_connected_components) {
CGAL_IMAGE_IO_CASE(p_.image_3_ptr->image(),
initialize_triangulation_from_labeled_image(c3t3_
, *domain_
, *p_.image_3_ptr
, criteria
, Word()
, p_.protect_features);
);
} else {
namespace p = CGAL::parameters;
// Initialization of the labeled image, either with the protection of sharp
// features, or with the initial points (or both).
if (p_.detect_connected_components)
{
CGAL::Mesh_3::internal::C3t3_initializer<
C3t3,
Domain,
Mesh_criteria,
CGAL::internal::has_Has_features<Domain>::value >()
(c3t3_,
*domain_,
criteria,
p_.protect_features,
p::mesh_3_options(p::pointer_to_stop_atomic_boolean = &stop_,
p::nonlinear_growth_of_balls = true).v,
CGAL::Construct_initial_points_labeled_image<C3t3, Domain>(*p_.image_3_ptr, *domain_));
}
else
{
initialize(criteria, Mesh_fnt::Domain_tag());
}
}

template < typename D_, typename Tag >
void
Mesh_function<D_,Tag>::
initialize(const Mesh_criteria& criteria, Mesh_fnt::Gray_image_domain_tag)
// for a gray image
{
namespace p = CGAL::parameters;
// Initialization of the gray image, either with the protection of sharp
// features, or with the initial points (or both).
if (p_.detect_connected_components)
{
CGAL::Construct_initial_points_gray_image<C3t3, Domain, Compare_to_isovalue> generator
(*p_.image_3_ptr,
*domain_,
p_.iso_value,
Compare_to_isovalue(p_.iso_value, p_.inside_is_less));
CGAL::Mesh_3::internal::C3t3_initializer<
C3t3,
Domain,
Mesh_criteria,
CGAL::internal::has_Has_features<Domain>::value >()
(c3t3_,
*domain_,
criteria,
p_.protect_features,
p::mesh_3_options(p::pointer_to_stop_atomic_boolean = &stop_,
p::nonlinear_growth_of_balls = true).v,
generator);
}
else
{
initialize(criteria, Mesh_fnt::Domain_tag());
}
}
Expand All @@ -252,8 +314,7 @@ initialize(const Mesh_criteria& criteria, Mesh_fnt::Domain_tag)
namespace p = CGAL::parameters;
// Initialization of the mesh, either with the protection of sharp
// features, or with the initial points (or both).
// If `detect_connected_components==true`, the initialization is
// already done.

CGAL::Mesh_3::internal::C3t3_initializer<
C3t3,
Domain,
Expand Down
81 changes: 81 additions & 0 deletions Mesh_3/doc/Mesh_3/CGAL/Mesh_3/parameters.h
Original file line number Diff line number Diff line change
Expand Up @@ -451,6 +451,87 @@ unspecified_type odt(const Named_function_parameters& np = parameters::default_v
template <class NamedParameters = parameters::Default_named_parameters>
unspecified_type perturb(const Named_function_parameters& np = parameters::default_values());

/*!
* \ingroup PkgMesh3Parameters
*
* The function `parameters::initial_points_generator()` enables the user to specify a functor that follows
* the `InitialPointsGenerator` concept to the mesh generation function `make_mesh_3()`. This functor is called
* for the initialization of the meshing process, by inserting well-distributed surface vertices.
* If this parameter is specified without arguments, the default behavior
* is executed, which calls the domain's `construct_initial_points_object()` for the initialization of the meshing process.
*
lrineau marked this conversation as resolved.
Show resolved Hide resolved
* If the parameter `parameters::initial_points()` is used,
* the points it provides are inserted after one dimensional features initialization.
*
lrineau marked this conversation as resolved.
Show resolved Hide resolved
* Initialization is considered to be complete if the triangulation is a 3D triangulation
* with at least one facet in the restricted Delaunay triangulation (i.e., its dual intersects the
* input surface).
* If the generator does not generate enough points for the initialization to be complete,
* the domain's `construct_initial_points_object()` will be called to generate enough input points.
*
* \tparam InitialPointsGenerator a model of the `InitialPointsGenerator` concept
*
* @param generator an instance of `InitialPointsGenerator`
*
* \cgalHeading{Example}
*
* \snippet mesh_3D_image_with_image_initialization.cpp Meshing
*
* \sa `CGAL::make_mesh_3()`
* \sa `CGAL::parameters::initial_points()`
* \sa `MeshDomain_3::Construct_initial_points`
*
*/
template <typename InitialPointsGenerator>
unspecified_type initial_points_generator(const InitialPointsGenerator& generator);

/*!
* \ingroup PkgMesh3Parameters
*
* The function `parameters::initial_points()` enables the user to specify a container, model of `Range`, that contains
* initial points to be used in the `make_mesh_3()` function for mesh generation. Items in the container are
* tuple-like objects containing a `Weighted_point_3`, an `int`, and a `MeshDomain::Index`,
* where `Weighted_point_3` represents the position and the weight of the point,
* `int` the dimension of the minimal subcomplex on which the point lies,
* and `MeshDomain::Index` the corresponding subcomplex index.
* These initial points are inserted after one dimensional features initialization.
*
* Initialization is considered to be complete if the triangulation is a 3D triangulation
* with at least one facet in the restricted Delaunay triangulation (i.e., its dual intersects the
* input surface).
*
* If the parameter `parameters::initial_points_generator()` is set,
* the points from this parameter will be inserted before calling the initial points generator.
*
* If after the insertion of initial points (possibly together with the input generator),
* the initialization is not complete,
* the domain's `construct_initial_points_object()` will be called.
*
* \tparam MeshDomain a model of `MeshDomain_3`
* \tparam C3t3 a model of `MeshComplex_3InTriangulation_3`
* \tparam InitialPointsRange a model of `Range` containing tuple-like objects of
* `C3t3::Triangulation::Geom_traits::Weighted_point_3, int, MeshDomain::Index`.
*
* @param initial_points an instance of `InitialPointsRange`
*
* \cgalHeading{Example}
*
* \code{.cpp}
* // Create the initial_points vector
* std::vector<std::tuple<K::Weighted_point_3, int, Mesh_domain::Index>> initial_points;
* // Perform mesh generation from a labeled image with initial points
* C3t3 c3t3 = make_mesh_3<c3t3>(domain,
* criteria,
* parameters::initial_points(std::cref(initial_points))); // Use std::cref to avoid a copy
* \endcode
*
* \sa `CGAL::make_mesh_3()`
* \sa `CGAL::parameters::initial_points_generator()`
* \sa `MeshDomain_3::Construct_initial_points`
*
*/
template <typename MeshDomain, typename C3t3, typename InitialPointsRange>
unspecified_type initial_points(const InitialPointsRange& initial_points);
} /* namespace parameters */

} /* namespace CGAL */
76 changes: 76 additions & 0 deletions Mesh_3/doc/Mesh_3/Concepts/InitialPointsGenerator.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,76 @@
/*!
\ingroup PkgMesh3SecondaryConcepts
\cgalConcept

The function object concept `InitialPointsGenerator` is designed to construct
a set of initial points on the surface of the domain.

\cgalHasModelsBegin
\cgalHasModels{CGAL::Construct_initial_points_labeled_image<C3t3, Mesh_domain>}
\cgalHasModels{CGAL::Construct_initial_points_gray_image<C3t3, Mesh_domain>}
\cgalHasModelsEnd

*/

class InitialPointsGenerator {
public:

/// \name Types
/// @{

/*!
* Mesh domain type to be meshed, model of `MeshDomain_3`
*/
typedef unspecified_type MeshDomain;

/*!
* Type of the output mesh complex, model of `MeshComplex_3InTriangulation_3`
*/
typedef unspecified_type C3t3;
/// @}

/// \name Operations
/// @{

/*!
outputs a set of surface points for mesh initialization to the
output iterator `pts`.

If, after insertion of these points, the triangulation is still not 3D,
or does not have any facets
in the restricted Delaunay triangulation, then more points will be added automatically
by the mesh generator.

@tparam OutputIterator model of `OutputIterator` whose value type is a tuple-like object made of 3 elements:
- a `C3t3::Triangulation::Point` : the point `p`,
- an `int` : the minimal dimension of the subcomplexes on which `p` lies,
- a `MeshDomain_3::Index` : the index of the corresponding subcomplex.

@param pts an output iterator for the points
@param n a lower bound on the number of points to construct for initialization.
A generator can choose to ignore this parameter.
janetournois marked this conversation as resolved.
Show resolved Hide resolved

*/
template <typename OutputIterator>
OutputIterator operator()(OutputIterator pts, const int n);

/*!
Same as above, without the `n` parameter.
Since there is no `n` given like above, the functor must provide enough
janetournois marked this conversation as resolved.
Show resolved Hide resolved
points to initialize the mesh generation process, i.e., to have a 3D triangulation
with at least one facet in the restricted Delaunay triangulation.

If these conditions are not satisfied, then more points will be added automatically
by the mesh generator.

@tparam OutputIterator model of `OutputIterator` whose value type is a tuple-like object made of 3 elements :
- a `C3t3::Triangulation::Point` : the point `p`,
- an `int` : the minimal dimension of the subcomplexes to which `p` belongs,
- a `MeshDomain_3::Index` : the index of the corresponding subcomplex.
*/
template <typename OutputIterator>
OutputIterator operator()(OutputIterator pts);

/// @}

}; /* end InitialPointsGenerator */
4 changes: 3 additions & 1 deletion Mesh_3/doc/Mesh_3/Doxyfile.in
Original file line number Diff line number Diff line change
Expand Up @@ -39,7 +39,9 @@ INPUT += \
${CGAL_PACKAGE_INCLUDE_DIR}/CGAL/Compact_mesh_cell_base_3.h \
${CGAL_PACKAGE_INCLUDE_DIR}/CGAL/Mesh_3/Detect_features_in_image.h \
${CGAL_PACKAGE_INCLUDE_DIR}/CGAL/Mesh_3/Detect_features_on_image_bbox.h \
${CGAL_PACKAGE_INCLUDE_DIR}/CGAL/Mesh_edge_criteria_3.h
${CGAL_PACKAGE_INCLUDE_DIR}/CGAL/Mesh_edge_criteria_3.h \
${CGAL_PACKAGE_INCLUDE_DIR}/CGAL/Mesh_3/Construct_initial_points_labeled_image.h \
${CGAL_PACKAGE_INCLUDE_DIR}/CGAL/Mesh_3/Construct_initial_points_gray_image.h

PROJECT_NAME = "CGAL ${CGAL_DOC_VERSION} - 3D Mesh Generation"
HTML_EXTRA_FILES = ${CGAL_PACKAGE_DOC_DIR}/fig/implicit_domain_3.jpg \
Expand Down
Loading
Loading