mirror of https://github.com/CGAL/cgal
Compare commits
25 Commits
b04bbd81df
...
543d424f58
| Author | SHA1 | Date |
|---|---|---|
|
|
543d424f58 | |
|
|
0fc710e95d | |
|
|
dee5ed8cc2 | |
|
|
737bcb264e | |
|
|
2f9854b422 | |
|
|
e12a760f03 | |
|
|
12445cc6e1 | |
|
|
07347da411 | |
|
|
d226e504c4 | |
|
|
097fc2c5ab | |
|
|
066159f792 | |
|
|
31734df2ef | |
|
|
3ef43324bb | |
|
|
3c7d507530 | |
|
|
faae741666 | |
|
|
9e36c6744b | |
|
|
05bf3c4ffc | |
|
|
25005a97d8 | |
|
|
3fe83c7ce0 | |
|
|
c60cc5049d | |
|
|
712464b690 | |
|
|
b08f0a4aae | |
|
|
42068f6009 | |
|
|
754e57ac3c | |
|
|
2f6e3defa7 |
|
|
@ -1543,10 +1543,10 @@ does_satisfy_link_condition(typename boost::graph_traits<Graph>::edge_descriptor
|
|||
*
|
||||
* After the collapse of edge `e` the following holds:
|
||||
* - The edge `e` is no longer in `g`.
|
||||
* - The faces incident to edge `e` are no longer in `g`.
|
||||
* - The triangle faces incident to edge `e` are no longer in `g`.
|
||||
* - `v0` is no longer in `g`.
|
||||
* - If `h` is not a border halfedge, `p_h` is no longer in `g` and is replaced by `o_n_h`.
|
||||
* - If the opposite of `h` is not a border halfedge, `p_o_h` is no longer in `g` and is replaced by `o_n_o_h`.
|
||||
* - If `h` is part of a triangle face, `p_h` is no longer in `g` and is replaced by `o_n_h`.
|
||||
* - If the opposite of `h` is part of a triangle face, `p_o_h` is no longer in `g` and is replaced by `o_n_o_h`.
|
||||
* - The halfedges kept in `g` that had `v0` as target and source now have `v1` as target and source, respectively.
|
||||
* - No other incidence information is changed in `g`.
|
||||
*
|
||||
|
|
@ -1575,9 +1575,8 @@ collapse_edge(typename boost::graph_traits<Graph>::edge_descriptor e,
|
|||
bool lBottomFaceExists = ! is_border(qp,g);
|
||||
bool lTopLeftFaceExists = lTopFaceExists && ! is_border(pt,g);
|
||||
bool lBottomRightFaceExists = lBottomFaceExists && ! is_border(qb,g);
|
||||
|
||||
CGAL_precondition( !lTopFaceExists || (lTopFaceExists && ( degree(target(pt, g), g) > 2 ) ) ) ;
|
||||
CGAL_precondition( !lBottomFaceExists || (lBottomFaceExists && ( degree(target(qb, g), g) > 2 ) ) ) ;
|
||||
bool lBottomIsTriangle = lBottomFaceExists && is_triangle(qp,g);
|
||||
bool lTopIsTriangle = lTopFaceExists && is_triangle(pq,g);
|
||||
|
||||
vertex_descriptor q = target(pq, g);
|
||||
vertex_descriptor p = source(pq, g);
|
||||
|
|
@ -1585,7 +1584,7 @@ collapse_edge(typename boost::graph_traits<Graph>::edge_descriptor e,
|
|||
|
||||
bool lP_Erased = false;
|
||||
|
||||
if ( lTopFaceExists )
|
||||
if ( lTopIsTriangle)
|
||||
{
|
||||
CGAL_precondition( ! is_border(opposite(pt, g),g) ) ; // p-q-t is a face of the mesh
|
||||
if ( lTopLeftFaceExists )
|
||||
|
|
@ -1612,7 +1611,7 @@ collapse_edge(typename boost::graph_traits<Graph>::edge_descriptor e,
|
|||
}
|
||||
}
|
||||
|
||||
if ( lBottomFaceExists )
|
||||
if ( lBottomIsTriangle)
|
||||
{
|
||||
CGAL_precondition( ! is_border(opposite(qb, g),g) ) ; // p-q-b is a face of the mesh
|
||||
if ( lBottomRightFaceExists )
|
||||
|
|
@ -1659,7 +1658,7 @@ collapse_edge(typename boost::graph_traits<Graph>::edge_descriptor e,
|
|||
* collapses an edge in a graph having non-collapsable edges.
|
||||
*
|
||||
* Let `h` be the halfedge of `e`, and let `v0` and `v1` be the source and target vertices of `h`.
|
||||
* Collapses the edge `e` replacing it with `v1`, as described in the paragraph above
|
||||
* Collapses the edge `e` replacing it with `v1`, as described in the other overload
|
||||
* and guarantees that an edge `e2`, for which `get(edge_is_constrained_map, e2)==true`,
|
||||
* is not removed after the collapse.
|
||||
*
|
||||
|
|
@ -1669,14 +1668,14 @@ collapse_edge(typename boost::graph_traits<Graph>::edge_descriptor e,
|
|||
*
|
||||
* \returns vertex `v1`.
|
||||
* \pre This function requires `g` to be an oriented 2-manifold with or without boundaries.
|
||||
* Furthermore, the edge `v0v1` must satisfy the link condition, which guarantees that the surface mesh is also 2-manifold after the edge collapse.
|
||||
* \pre `get(edge_is_constrained_map, v0v1)==false`.
|
||||
* Furthermore, the edge `e` must satisfy the link condition, which guarantees that the surface mesh is also 2-manifold after the edge collapse.
|
||||
* \pre `get(edge_is_constrained_map, e)==false`.
|
||||
* \pre `v0` and `v1` are not both incident to a constrained edge.
|
||||
*/
|
||||
|
||||
template<typename Graph, typename EdgeIsConstrainedMap>
|
||||
typename boost::graph_traits<Graph>::vertex_descriptor
|
||||
collapse_edge(typename boost::graph_traits<Graph>::edge_descriptor v0v1,
|
||||
collapse_edge(typename boost::graph_traits<Graph>::edge_descriptor e,
|
||||
Graph& g,
|
||||
EdgeIsConstrainedMap Edge_is_constrained_map)
|
||||
{
|
||||
|
|
@ -1684,11 +1683,11 @@ collapse_edge(typename boost::graph_traits<Graph>::edge_descriptor v0v1,
|
|||
typedef typename Traits::vertex_descriptor vertex_descriptor;
|
||||
typedef typename Traits::halfedge_descriptor halfedge_descriptor;
|
||||
|
||||
CGAL_precondition(is_valid_edge_descriptor(v0v1, g));
|
||||
CGAL_precondition(does_satisfy_link_condition(v0v1,g));
|
||||
CGAL_precondition(!get(Edge_is_constrained_map, v0v1));
|
||||
CGAL_precondition(is_valid_edge_descriptor(e, g));
|
||||
CGAL_precondition(does_satisfy_link_condition(e,g));
|
||||
CGAL_precondition(!get(Edge_is_constrained_map, e));
|
||||
|
||||
halfedge_descriptor pq = halfedge(v0v1,g);
|
||||
halfedge_descriptor pq = halfedge(e,g);
|
||||
|
||||
halfedge_descriptor qp = opposite(pq,g);
|
||||
halfedge_descriptor pt = opposite(prev(pq,g),g);
|
||||
|
|
@ -1698,6 +1697,8 @@ collapse_edge(typename boost::graph_traits<Graph>::edge_descriptor v0v1,
|
|||
|
||||
bool lTopFaceExists = ! is_border(pq,g) ;
|
||||
bool lBottomFaceExists = ! is_border(qp,g) ;
|
||||
bool lTopIsTriangle = lTopFaceExists && is_triangle(pq,g);
|
||||
bool lBottomIsTriangle = lBottomFaceExists && is_triangle(qp,g);
|
||||
|
||||
vertex_descriptor q = target(pq,g);
|
||||
vertex_descriptor p = source(pq,g);
|
||||
|
|
@ -1708,7 +1709,7 @@ collapse_edge(typename boost::graph_traits<Graph>::edge_descriptor v0v1,
|
|||
|
||||
// If the top facet exists, we need to choose one out of the two edges which one disappears:
|
||||
// p-t if it is not constrained and t-q otherwise
|
||||
if ( lTopFaceExists )
|
||||
if ( lTopIsTriangle )
|
||||
{
|
||||
if ( !get(Edge_is_constrained_map,edge(pt,g)) )
|
||||
{
|
||||
|
|
@ -1722,7 +1723,7 @@ collapse_edge(typename boost::graph_traits<Graph>::edge_descriptor v0v1,
|
|||
|
||||
// If the bottom facet exists, we need to choose one out of the two edges which one disappears:
|
||||
// q-b if it is not constrained and b-p otherwise
|
||||
if ( lBottomFaceExists )
|
||||
if ( lBottomIsTriangle )
|
||||
{
|
||||
if ( !get(Edge_is_constrained_map,edge(qb,g)) )
|
||||
{
|
||||
|
|
@ -1733,7 +1734,7 @@ collapse_edge(typename boost::graph_traits<Graph>::edge_descriptor v0v1,
|
|||
}
|
||||
}
|
||||
|
||||
if (lTopFaceExists && lBottomFaceExists)
|
||||
if (lTopIsTriangle && lBottomIsTriangle)
|
||||
{
|
||||
if ( face(edges_to_erase[0],g) == face(edges_to_erase[1],g)
|
||||
&& (! is_border(edges_to_erase[0],g)) )
|
||||
|
|
@ -1780,7 +1781,7 @@ collapse_edge(typename boost::graph_traits<Graph>::edge_descriptor v0v1,
|
|||
}
|
||||
else
|
||||
{
|
||||
if (lTopFaceExists)
|
||||
if (lTopIsTriangle)
|
||||
{
|
||||
if (!(is_border(edges_to_erase[0],g))){
|
||||
join_face(edges_to_erase[0],g);
|
||||
|
|
@ -1795,21 +1796,32 @@ collapse_edge(typename boost::graph_traits<Graph>::edge_descriptor v0v1,
|
|||
remove_face(opposite(edges_to_erase[0],g),g);
|
||||
return q;
|
||||
}
|
||||
|
||||
if (! (is_border(edges_to_erase[0],g))){
|
||||
// q will be removed, swap it with p
|
||||
internal::swap_vertices(p, q, g);
|
||||
join_face(edges_to_erase[0],g);
|
||||
join_vertex(qp,g);
|
||||
return q;
|
||||
}
|
||||
if(!is_border(opposite(next(qp,g),g),g))
|
||||
else
|
||||
{
|
||||
// q will be removed, swap it with p
|
||||
internal::swap_vertices(p, q, g);
|
||||
if (lBottomIsTriangle)
|
||||
{
|
||||
if (! (is_border(edges_to_erase[0],g))){
|
||||
// q will be removed, swap it with p
|
||||
internal::swap_vertices(p, q, g);
|
||||
join_face(edges_to_erase[0],g);
|
||||
CGAL_assertion(source(qp,g)==p);
|
||||
join_vertex(qp,g);
|
||||
return q;
|
||||
}
|
||||
if(!is_border(opposite(next(qp,g),g),g))
|
||||
{
|
||||
// q will be removed, swap it with p
|
||||
internal::swap_vertices(p, q, g);
|
||||
}
|
||||
remove_face(opposite(edges_to_erase[0],g),g);
|
||||
return q;
|
||||
}
|
||||
else
|
||||
{
|
||||
join_vertex(pq,g);
|
||||
return q;
|
||||
}
|
||||
}
|
||||
remove_face(opposite(edges_to_erase[0],g),g);
|
||||
return q;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -0,0 +1,42 @@
|
|||
OFF
|
||||
25 13 0
|
||||
|
||||
0.39160239696502686 1.3864846229553223 4.8046874923102223e-08
|
||||
0.053782559931278229 1.3864846229553223 4.8046874923102223e-08
|
||||
-0.94644606113433838 1.6651756763458252 4.8046874923102223e-08
|
||||
-1.3082554340362549 1.7385153770446777 4.8046874923102223e-08
|
||||
-1.3033660650253296 1.1860226392745972 4.8046874923102223e-08
|
||||
1.61628258228302 -0.17601536214351654 4.8046874923102223e-08
|
||||
0.55834579467773438 -0.19216139614582062 4.8046874923102223e-08
|
||||
0.053782559931278229 -0.17601536214351654 4.8046874923102223e-08
|
||||
-0.24240998923778534 -0.22679123282432556 4.8046874923102223e-08
|
||||
-0.58168435096740723 -0.25845989584922791 4.8046874923102223e-08
|
||||
-1.2915089130401611 -0.17601536214351654 4.8046874923102223e-08
|
||||
-1.50871741771698 -0.17601536214351654 4.8046874923102223e-08
|
||||
1.61628258228302 -1.7385153770446777 4.8046874923102223e-08
|
||||
1.1978726387023926 -1.7385153770446777 4.8046874923102223e-08
|
||||
0.71942150592803955 -1.7385153770446777 4.8046874923102223e-08
|
||||
0.053782559931278229 -1.7385153770446777 4.8046874923102223e-08
|
||||
-0.73973840475082397 -1.7385153770446777 4.8046874923102223e-08
|
||||
1.61628258228302 0.36264327168464661 4.8046874923102223e-08
|
||||
-0.26156377792358398 0.45463424921035767 4.8046874923102223e-08
|
||||
-0.028661971911787987 -0.78840988874435425 4.8046874923102223e-08
|
||||
0.053782559931278229 -1.2213115692138672 4.8046874923102223e-08
|
||||
-1.5918357372283936 1.5331641435623169 4.8046874923102223e-08
|
||||
-1.6162823438644409 0.87338578701019287 4.8046874923102223e-08
|
||||
-1.50871741771698 -0.0072435899637639523 4.8046874923102223e-08
|
||||
-1.50871741771698 -1.3000825643539429 4.8046874923102223e-08
|
||||
7 18 2 3 4 22 9 8
|
||||
3 2 18 1
|
||||
7 18 7 6 5 17 0 1
|
||||
7 12 5 6 7 8 19 13
|
||||
6 11 24 16 15 20 10
|
||||
3 9 19 8
|
||||
4 10 20 19 9
|
||||
3 7 18 8
|
||||
3 14 20 15
|
||||
4 13 19 20 14
|
||||
3 3 21 4
|
||||
4 9 22 23 10
|
||||
3 10 23 11
|
||||
|
||||
|
|
@ -2,7 +2,6 @@
|
|||
|
||||
#include <CGAL/boost/graph/Euler_operations.h>
|
||||
#include <CGAL/boost/graph/IO/OFF.h>
|
||||
|
||||
#include <boost/range/distance.hpp>
|
||||
|
||||
#include <string>
|
||||
|
|
@ -213,12 +212,30 @@ collapse_edge_test()
|
|||
assert(found == 2);
|
||||
CGAL::clear(test_mesh);
|
||||
}
|
||||
// Case 6 non pure triangle mesh
|
||||
{
|
||||
Mesh ref;
|
||||
if(!CGAL::IO::read_OFF("data/polygon_mesh_to_collapse.off", ref))
|
||||
{
|
||||
std::cout << "Error reading file: data/polygon_mesh_to_collapse.off" << std::endl;
|
||||
exit(1);
|
||||
}
|
||||
std::size_t nbe=halfedges(ref).size();
|
||||
for (std::size_t i=0; i< nbe; ++i)
|
||||
{
|
||||
Mesh m = ref;
|
||||
auto h = *std::next(halfedges(m).begin(), i);
|
||||
|
||||
if (CGAL::Euler::does_satisfy_link_condition(edge(h,m),m))
|
||||
CGAL::Euler::collapse_edge(edge(h,m), m);
|
||||
assert(CGAL::is_valid_polygon_mesh(m));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
int main()
|
||||
{
|
||||
|
||||
collapse_edge_test<Polyhedron>();
|
||||
collapse_edge_test<SM>();
|
||||
|
||||
|
|
|
|||
|
|
@ -14,8 +14,9 @@ create_single_source_cgal_program("benchmark_polygon_16_vertices.cpp")
|
|||
create_single_source_cgal_program("benchmark_polygon_100_vertices.cpp")
|
||||
create_single_source_cgal_program("benchmark_mv_34_vertices.cpp")
|
||||
|
||||
find_package(Eigen3 3.1.0 QUIET) # (3.1.0 or greater)
|
||||
find_package(Eigen3 QUIET)
|
||||
include(CGAL_Eigen3_support)
|
||||
|
||||
if(TARGET CGAL::Eigen3_support)
|
||||
create_single_source_cgal_program("benchmark_hm_4_vertices.cpp")
|
||||
target_link_libraries(benchmark_hm_4_vertices PUBLIC CGAL::Eigen3_support)
|
||||
|
|
|
|||
|
|
@ -17,8 +17,9 @@ create_single_source_cgal_program("terrain_height_modeling.cpp")
|
|||
# this code is deprecated:
|
||||
create_single_source_cgal_program("deprecated_coordinates.cpp")
|
||||
|
||||
find_package(Eigen3 3.1.0 QUIET) # (3.1.0 or greater)
|
||||
find_package(Eigen3 QUIET)
|
||||
include(CGAL_Eigen3_support)
|
||||
|
||||
if(TARGET CGAL::Eigen3_support)
|
||||
create_single_source_cgal_program("affine_coordinates.cpp")
|
||||
target_link_libraries(affine_coordinates PUBLIC CGAL::Eigen3_support)
|
||||
|
|
|
|||
|
|
@ -42,8 +42,9 @@ create_single_source_cgal_program("test_wp_deprecated_api.cpp")
|
|||
create_single_source_cgal_program("test_mv_deprecated_api.cpp")
|
||||
create_single_source_cgal_program("test_dh_deprecated_api.cpp")
|
||||
|
||||
find_package(Eigen3 3.1.0 QUIET) # (3.1.0 or greater)
|
||||
find_package(Eigen3 QUIET)
|
||||
include(CGAL_Eigen3_support)
|
||||
|
||||
if(TARGET CGAL::Eigen3_support)
|
||||
create_single_source_cgal_program("test_hm_unit_square.cpp")
|
||||
target_link_libraries(test_hm_unit_square PUBLIC CGAL::Eigen3_support)
|
||||
|
|
|
|||
|
|
@ -11,7 +11,7 @@ project(Basic_viewer_Examples)
|
|||
|
||||
#CGAL_Qt6 is needed for the drawing.
|
||||
find_package(CGAL REQUIRED OPTIONAL_COMPONENTS Qt6)
|
||||
find_package(Eigen3 3.1.0)
|
||||
find_package(Eigen3 QUIET)
|
||||
include(CGAL_Eigen3_support)
|
||||
|
||||
create_single_source_cgal_program("draw_lcc.cpp")
|
||||
|
|
|
|||
|
|
@ -4,7 +4,7 @@ project(Approximate_min_ellipsoid_d_Examples)
|
|||
find_package(CGAL REQUIRED)
|
||||
|
||||
# Use Eigen
|
||||
find_package(Eigen3 3.1.0 QUIET) #(3.1.0 or greater)
|
||||
find_package(Eigen3 QUIET)
|
||||
include(CGAL_Eigen3_support)
|
||||
|
||||
# create a target per cppfile
|
||||
|
|
|
|||
|
|
@ -7,7 +7,7 @@ project(Bounding_volumes_Tests)
|
|||
find_package(CGAL REQUIRED COMPONENTS Core)
|
||||
|
||||
# Use Eigen
|
||||
find_package(Eigen3 3.1.0 QUIET) #(3.1.0 or greater)
|
||||
find_package(Eigen3 QUIET)
|
||||
include(CGAL_Eigen3_support)
|
||||
|
||||
# create a target per cppfile
|
||||
|
|
|
|||
|
|
@ -20,8 +20,9 @@ set(CMAKE_LIBRARY_OUTPUT_DIRECTORY "${CMAKE_RUNTIME_OUTPUT_DIRECTORY}")
|
|||
|
||||
find_package(CGAL REQUIRED COMPONENTS Core)
|
||||
|
||||
find_package(Eigen3 3.1.0 QUIET) #(requires 3.1.0 or greater)
|
||||
find_package(Eigen3 QUIET)
|
||||
include(CGAL_Eigen3_support)
|
||||
|
||||
if(NOT TARGET CGAL::Eigen3_support)
|
||||
message("NOTICE: This project requires the Eigen library, and will not be compiled.")
|
||||
return()
|
||||
|
|
|
|||
|
|
@ -23,8 +23,9 @@ if(NOT TARGET CGAL::Boost_iostreams_support)
|
|||
set(Classification_dependencies_met FALSE)
|
||||
endif()
|
||||
|
||||
find_package(Eigen3 3.1.0 QUIET) #(3.1.0 or greater)
|
||||
find_package(Eigen3 QUIET)
|
||||
include(CGAL_Eigen3_support)
|
||||
|
||||
if(NOT TARGET CGAL::Eigen3_support)
|
||||
message("NOTICE: This project requires the Eigen library, and will not be compiled.")
|
||||
set(Classification_dependencies_met FALSE)
|
||||
|
|
|
|||
|
|
@ -23,8 +23,9 @@ if(NOT TARGET CGAL::Boost_iostreams_support)
|
|||
set(Classification_dependencies_met FALSE)
|
||||
endif()
|
||||
|
||||
find_package(Eigen3 3.1.0 QUIET) #(3.1.0 or greater)
|
||||
find_package(Eigen3 QUIET)
|
||||
include(CGAL_Eigen3_support)
|
||||
|
||||
if(NOT TARGET CGAL::Eigen3_support)
|
||||
message("NOTICE: This project requires the Eigen library, and will not be compiled.")
|
||||
set(Classification_dependencies_met FALSE)
|
||||
|
|
|
|||
|
|
@ -117,14 +117,14 @@ Qt is a cross-platform application and UI framework.
|
|||
The component `CGAL_Qt6` is essential to run the \cgal demos and basic viewers.
|
||||
It requires \qt6 installed on your system.
|
||||
In case \qt is not yet installed on your system, you can download
|
||||
it from <A HREF="https://www.qt-project.org/">`https://www.qt-project.org/`</A>.
|
||||
it from <A HREF="https://contribute.qt-project.org/">`https://contribute.qt-project.org/`</A>.
|
||||
|
||||
The exhaustive list of \qt6 components used in demos is:
|
||||
`Core`, `Gui`, `Help`, `OpenGL`, `OpenGLWidgets`, `Qml`, `Svg`, `Widgets`,
|
||||
`WebSockets`, `Network`, and `qcollectiongenerator` (with `sqlite` driver plugin).
|
||||
|
||||
\subsection thirdpartyEigen Eigen
|
||||
<b>Version 3.3.7 or later</b>
|
||||
<b>Version 3.3.7 or later (including Eigen3 5.0.0)</b>
|
||||
|
||||
\eigen is a `C++` template library for linear algebra. \eigen supports all
|
||||
matrix sizes, various matrix decomposition methods and sparse linear solvers.
|
||||
|
|
@ -138,7 +138,7 @@ Overview</a> page. In order to use Eigen in \cgal programs, the
|
|||
executables should be linked with the CMake imported target
|
||||
`CGAL::Eigen3_support` provided in `CGAL_Eigen3_support.cmake`.
|
||||
|
||||
The \eigen web site is <A HREF="https://eigen.tuxfamily.org/index.php?title=Main_Page">`https://eigen.tuxfamily.org`</A>.
|
||||
The \eigen web site is <A HREF="https://libeigen.gitlab.io/">`https://libeigen.gitlab.io/`</A>.
|
||||
|
||||
\subsection thirdpartyOpenGR OpenGR
|
||||
|
||||
|
|
@ -167,17 +167,6 @@ Alternatively, version 1.3.1 of \libpointmatcher is supported with version 3.3.7
|
|||
`https://github.com/ethz-asl/libpointmatcher/blob/master/doc/Compilation.md`:`NABO_INCLUDE_DIR` becomes `libnabo_INCLUDE_DIRS`
|
||||
and `NABO_LIBRARY` becomes `libnabo_LIBRARIES` in the "Build libpointmatcher" section.
|
||||
|
||||
\subsection thirdpartyLeda LEDA
|
||||
<b>Version 6.2 or later</b>
|
||||
|
||||
\leda is a library of efficient data structures and
|
||||
algorithms. Like \core, \leda offers a real number data type.
|
||||
|
||||
In \cgal this library is optional, and its number types can
|
||||
be used as an alternative to \gmp, \mpfr, and \core.
|
||||
|
||||
Free and commercial editions of \leda are available from <A HREF="https://www.algorithmic-solutions.com">`https://www.algorithmic-solutions.com`</A>.
|
||||
|
||||
\subsection thirdpartyMPFI Multiple Precision Floating-point Interval (MPFI)
|
||||
<b>Version 1.4 or later</b>
|
||||
|
||||
|
|
@ -278,7 +267,7 @@ vcpkg install suitesparse
|
|||
\subsection thirdpartyMETIS METIS
|
||||
<b>Version 5.1 or later</b>
|
||||
|
||||
\metis is a library developed by the <A HREF="http://glaros.dtc.umn.edu/gkhome/">Karypis Lab</A>
|
||||
\metis is a library developed by the <A HREF="https://github.com/KarypisLab/">Karypis Lab</A>
|
||||
and designed to partition graphs and produce fill-reducing matrix orderings.
|
||||
|
||||
\cgal offers wrappers around some of the methods of the \metis library
|
||||
|
|
@ -287,7 +276,7 @@ to allow the partitioning of graphs that are models of the concepts of the
|
|||
and, by extension, of surface meshes (see Section \ref BGLPartitioning of the package \ref PkgBGL).
|
||||
|
||||
More information is available on the METIS library
|
||||
at <A HREF="http://glaros.dtc.umn.edu/gkhome/metis/metis/overview">`http://glaros.dtc.umn.edu/gkhome/metis/metis/overview`</A>.
|
||||
at <A HREF="https://github.com/KarypisLab/METIS">`https://github.com/KarypisLab/METIS`</A>.
|
||||
|
||||
\subsection thirdpartyzlib zlib
|
||||
|
||||
|
|
|
|||
|
|
@ -28,8 +28,9 @@ create_single_source_cgal_program("random_segments1.cpp")
|
|||
create_single_source_cgal_program("random_segments2.cpp")
|
||||
create_single_source_cgal_program("sphere_d.cpp")
|
||||
|
||||
find_package(Eigen3 3.1.0 QUIET) #(3.1.0 or greater)
|
||||
find_package(Eigen3 QUIET)
|
||||
include(CGAL_Eigen3_support)
|
||||
|
||||
if(TARGET CGAL::Eigen3_support)
|
||||
create_single_source_cgal_program("random_points_in_tetrahedral_mesh_3.cpp")
|
||||
target_link_libraries(random_points_in_tetrahedral_mesh_3 PRIVATE CGAL::Eigen3_support)
|
||||
|
|
|
|||
|
|
@ -15,8 +15,9 @@ create_single_source_cgal_program("test_tetrahedron_3.cpp")
|
|||
create_single_source_cgal_program("test_triangle_2.cpp")
|
||||
create_single_source_cgal_program("test_triangle_3.cpp")
|
||||
|
||||
find_package(Eigen3 3.1.0 QUIET) #(3.1.0 or greater)
|
||||
find_package(Eigen3 QUIET)
|
||||
include(CGAL_Eigen3_support)
|
||||
|
||||
if(TARGET CGAL::Eigen3_support)
|
||||
create_single_source_cgal_program("generic_random_test.cpp")
|
||||
target_link_libraries(generic_random_test PRIVATE CGAL::Eigen3_support)
|
||||
|
|
|
|||
|
|
@ -8,7 +8,7 @@ find_package(CGAL REQUIRED OPTIONAL_COMPONENTS Qt6)
|
|||
|
||||
find_package(Qt6 QUIET COMPONENTS Widgets)
|
||||
|
||||
find_package(Eigen3 3.1.91 QUIET) #(requires 3.1.91 or greater)
|
||||
find_package(Eigen3 QUIET)
|
||||
include(CGAL_Eigen3_support)
|
||||
|
||||
if(NOT TARGET CGAL::Eigen3_support)
|
||||
|
|
|
|||
|
|
@ -6,8 +6,9 @@ project(Polygon_Demo)
|
|||
|
||||
find_package(CGAL REQUIRED OPTIONAL_COMPONENTS Qt6 Core)
|
||||
|
||||
find_package(Eigen3 3.1.0 QUIET) #(requires 3.1.0 or greater)
|
||||
find_package(Eigen3 QUIET)
|
||||
include(CGAL_Eigen3_support)
|
||||
|
||||
if(NOT TARGET CGAL::Eigen3_support)
|
||||
message("NOTICE: This demo requires the Eigen library, and will not be compiled.")
|
||||
return()
|
||||
|
|
|
|||
|
|
@ -221,7 +221,10 @@ void
|
|||
DemosMainWindow::popupAboutBox(QString title, QString html_resource_name)
|
||||
{
|
||||
QFile about_CGAL(html_resource_name);
|
||||
about_CGAL.open(QIODevice::ReadOnly);
|
||||
if (!about_CGAL.open(QIODevice::ReadOnly)) {
|
||||
QMessageBox::warning(this, tr("Error"), tr("Could not open resource file: %1").arg(html_resource_name));
|
||||
return;
|
||||
}
|
||||
QString about_CGAL_txt = QTextStream(&about_CGAL).readAll();
|
||||
#ifdef CGAL_VERSION_STR
|
||||
QString cgal_version(CGAL_VERSION_STR);
|
||||
|
|
|
|||
|
|
@ -7,8 +7,9 @@ project(Heat_method_3_Examples)
|
|||
# CGAL and its components
|
||||
find_package(CGAL REQUIRED)
|
||||
|
||||
find_package(Eigen3 3.3.0 QUIET)
|
||||
find_package(Eigen3 QUIET)
|
||||
include(CGAL_Eigen3_support)
|
||||
|
||||
if(NOT TARGET CGAL::Eigen3_support)
|
||||
message("NOTICE: These examples require the Eigen library (3.3 or greater), and will not be compiled.")
|
||||
return()
|
||||
|
|
|
|||
|
|
@ -7,8 +7,9 @@ project(Heat_method_3_Tests)
|
|||
# CGAL and its components
|
||||
find_package(CGAL REQUIRED)
|
||||
|
||||
find_package(Eigen3 3.3.0 QUIET)
|
||||
find_package(Eigen3 QUIET)
|
||||
include(CGAL_Eigen3_support)
|
||||
|
||||
if(NOT TARGET CGAL::Eigen3_support)
|
||||
message("NOTICE: These tests require the Eigen library (3.3 or greater), and will not be compiled.")
|
||||
return()
|
||||
|
|
|
|||
|
|
@ -3,5 +3,5 @@ if(CERES_FOUND AND NOT TARGET CGAL::Ceres_support)
|
|||
set_target_properties(CGAL::Ceres_support PROPERTIES
|
||||
INTERFACE_COMPILE_DEFINITIONS "CGAL_PMP_USE_CERES_SOLVER"
|
||||
INTERFACE_INCLUDE_DIRECTORIES "${CERES_INCLUDE_DIRS}"
|
||||
INTERFACE_LINK_LIBRARIES "ceres")
|
||||
INTERFACE_LINK_LIBRARIES "Ceres::ceres")
|
||||
endif()
|
||||
|
|
|
|||
|
|
@ -1,3 +1,10 @@
|
|||
if((EIGEN3_FOUND OR Eigen3_FOUND) AND NOT TARGET CGAL::Eigen3_support)
|
||||
if ("${Eigen3_VERSION}" VERSION_LESS "3.3.7")
|
||||
set (EIGEN3_FOUND 0)
|
||||
find_package(Eigen3 3.3.7 QUIET) # (3.3.7 or greater)
|
||||
endif()
|
||||
endif()
|
||||
|
||||
if((EIGEN3_FOUND OR Eigen3_FOUND) AND NOT TARGET CGAL::Eigen3_support)
|
||||
if(NOT TARGET Threads::Threads)
|
||||
find_package(Threads REQUIRED)
|
||||
|
|
|
|||
|
|
@ -7,8 +7,9 @@ project(Jet_fitting_3_Examples)
|
|||
find_package(CGAL REQUIRED)
|
||||
|
||||
# use Eigen
|
||||
find_package(Eigen3 3.1.0 QUIET) #(requires 3.1.0 or greater)
|
||||
find_package(Eigen3 QUIET)
|
||||
include(CGAL_Eigen3_support)
|
||||
|
||||
if(TARGET CGAL::Eigen3_support)
|
||||
|
||||
# Link with Boost.ProgramOptions (optional)
|
||||
|
|
|
|||
|
|
@ -7,8 +7,9 @@ project(Jet_fitting_3_Tests)
|
|||
find_package(CGAL REQUIRED)
|
||||
|
||||
# use Eigen
|
||||
find_package(Eigen3 3.1.0 QUIET) #(requires 3.1.0 or greater)
|
||||
find_package(Eigen3 QUIET)
|
||||
include(CGAL_Eigen3_support)
|
||||
|
||||
if(TARGET CGAL::Eigen3_support)
|
||||
create_single_source_cgal_program("blind_1pt.cpp")
|
||||
target_link_libraries(blind_1pt PUBLIC CGAL::Eigen3_support)
|
||||
|
|
|
|||
|
|
@ -8,7 +8,7 @@ project(Kinetic_space_partition_Examples)
|
|||
find_package(CGAL REQUIRED)
|
||||
include(CGAL_CreateSingleSourceCGALProgram)
|
||||
|
||||
find_package(Eigen3 3.1.0 REQUIRED)
|
||||
find_package(Eigen3 QUIET)
|
||||
include(CGAL_Eigen3_support)
|
||||
|
||||
if(TARGET CGAL::Eigen3_support)
|
||||
|
|
|
|||
|
|
@ -8,7 +8,7 @@ project(Kinetic_space_partition_Tests)
|
|||
find_package(CGAL REQUIRED)
|
||||
include(CGAL_CreateSingleSourceCGALProgram)
|
||||
|
||||
find_package(Eigen3 3.1.0 REQUIRED)
|
||||
find_package(Eigen3 QUIET)
|
||||
include(CGAL_Eigen3_support)
|
||||
|
||||
if(TARGET CGAL::Eigen3_support)
|
||||
|
|
|
|||
|
|
@ -8,7 +8,7 @@ project(Kinetic_surface_reconstruction_Examples)
|
|||
find_package(CGAL REQUIRED)
|
||||
include(CGAL_CreateSingleSourceCGALProgram)
|
||||
|
||||
find_package(Eigen3 3.1.0 REQUIRED)
|
||||
find_package(Eigen3 QUIET)
|
||||
include(CGAL_Eigen3_support)
|
||||
|
||||
if(TARGET CGAL::Eigen3_support)
|
||||
|
|
|
|||
|
|
@ -8,7 +8,7 @@ project(Kinetic_surface_reconstruction_Tests)
|
|||
find_package(CGAL REQUIRED)
|
||||
include(CGAL_CreateSingleSourceCGALProgram)
|
||||
|
||||
find_package(Eigen3 3.1.0 REQUIRED)
|
||||
find_package(Eigen3 QUIET)
|
||||
include(CGAL_Eigen3_support)
|
||||
|
||||
if(TARGET CGAL::Eigen3_support)
|
||||
|
|
|
|||
|
|
@ -52,12 +52,14 @@ if(Qt6_FOUND)
|
|||
add_definitions(-DSCENE_IMAGE_GL_BUFFERS_AVAILABLE)
|
||||
endif(Qt6_FOUND)
|
||||
|
||||
find_package(Eigen3 3.2.0 QUIET) #(requires 3.2.0 or greater)
|
||||
find_package(Eigen3 QUIET)
|
||||
include(CGAL_Eigen3_support)
|
||||
|
||||
set_package_properties(
|
||||
Eigen3 PROPERTIES
|
||||
DESCRIPTION "A library for linear algebra."
|
||||
PURPOSE "Required for most plugins (Meshing, Mesh and Point Set Processing, etc.).")
|
||||
include(CGAL_Eigen3_support)
|
||||
|
||||
if(NOT TARGET CGAL::Eigen3_support)
|
||||
message(STATUS "NOTICE: Eigen was not found.")
|
||||
endif()
|
||||
|
|
|
|||
|
|
@ -79,8 +79,9 @@ target_link_libraries(
|
|||
scene_implicit_function_item)
|
||||
|
||||
# Use Eigen
|
||||
find_package(Eigen3 3.1.0 QUIET) #(3.1.0 or greater)
|
||||
find_package(Eigen3 QUIET)
|
||||
include(CGAL_Eigen3_support)
|
||||
|
||||
if(TARGET CGAL::Eigen3_support)
|
||||
target_link_libraries(mesh_3_optimization_plugin PUBLIC CGAL::Eigen3_support)
|
||||
else()
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
include(CGALlab_macros)
|
||||
|
||||
if(TARGET CGAL::Eigen3_support AND "${Eigen3_VERSION}" VERSION_GREATER "3.1.90")
|
||||
if(TARGET CGAL::Eigen3_support)
|
||||
|
||||
qt6_wrap_ui(editionUI_FILES Deform_mesh.ui)
|
||||
add_item(scene_edit_item
|
||||
|
|
|
|||
|
|
@ -14,7 +14,7 @@ cgal_lab_plugin(
|
|||
target_link_libraries(tetrahedral_remeshing_plugin PUBLIC scene_c3t3_item
|
||||
${OPENGL_gl_LIBRARY})
|
||||
|
||||
find_package(Eigen3 3.1.0 REQUIRED) #(3.1.0 or greater)
|
||||
find_package(Eigen3 QUIET)
|
||||
include(CGAL_Eigen3_support)
|
||||
if(TARGET CGAL::Eigen3_support)
|
||||
target_link_libraries(tetrahedral_remeshing_plugin PUBLIC CGAL::Eigen3_support)
|
||||
|
|
|
|||
|
|
@ -19,8 +19,9 @@ if(CGAL_ACTIVATE_CONCURRENT_MESH_3 OR "$ENV{CGAL_ACTIVATE_CONCURRENT_MESH_3}")
|
|||
endif()
|
||||
|
||||
# Use Eigen
|
||||
find_package(Eigen3 3.1.0 QUIET) #(3.1.0 or greater)
|
||||
find_package(Eigen3 QUIET)
|
||||
include(CGAL_Eigen3_support)
|
||||
|
||||
if(NOT TARGET CGAL::Eigen3_support)
|
||||
message("NOTICE: All examples require the Eigen3 library, and will not be compiled.")
|
||||
return()
|
||||
|
|
|
|||
|
|
@ -7,8 +7,9 @@ project( Mesh_3_Tests )
|
|||
find_package(CGAL REQUIRED COMPONENTS ImageIO)
|
||||
|
||||
# Use Eigen
|
||||
find_package(Eigen3 3.1.0 QUIET) #(3.1.0 or greater)
|
||||
find_package(Eigen3 QUIET)
|
||||
include(CGAL_Eigen3_support)
|
||||
|
||||
if (NOT TARGET CGAL::Eigen3_support)
|
||||
message("NOTICE: This project requires the Eigen library, and will not be compiled.")
|
||||
return()
|
||||
|
|
|
|||
|
|
@ -14,6 +14,7 @@ find_package(CGAL REQUIRED)
|
|||
|
||||
find_package(Eigen3 QUIET)
|
||||
include(CGAL_Eigen3_support)
|
||||
|
||||
if(TARGET CGAL::Eigen3_support)
|
||||
file(
|
||||
GLOB cppfiles
|
||||
|
|
|
|||
|
|
@ -80,8 +80,10 @@ if(NOT CGAL_DISABLE_GMP)
|
|||
create_single_source_cgal_program( "Gmpfi.cpp" )
|
||||
create_single_source_cgal_program( "Gmpfr_bug.cpp" )
|
||||
create_single_source_cgal_program( "test_eigen.cpp" )
|
||||
find_package(Eigen3 3.2.0 QUIET) #(requires 3.2.0 or greater)
|
||||
|
||||
find_package(Eigen3 QUIET)
|
||||
include(CGAL_Eigen3_support)
|
||||
|
||||
if (TARGET CGAL::Eigen3_support)
|
||||
target_link_libraries(test_eigen PUBLIC CGAL::Eigen3_support)
|
||||
endif()
|
||||
|
|
|
|||
|
|
@ -7,8 +7,9 @@ project(Optimal_bounding_box_Benchmark)
|
|||
# CGAL and its components
|
||||
find_package(CGAL REQUIRED)
|
||||
|
||||
find_package(Eigen3 3.1.0 QUIET) #(3.1.0 or greater)
|
||||
find_package(Eigen3 QUIET)
|
||||
include(CGAL_Eigen3_support)
|
||||
|
||||
if(NOT TARGET CGAL::Eigen3_support)
|
||||
message("NOTICE: This project requires the Eigen library, and will not be compiled.")
|
||||
return()
|
||||
|
|
|
|||
|
|
@ -6,8 +6,9 @@ project(Optimal_bounding_box_Examples)
|
|||
|
||||
find_package(CGAL REQUIRED)
|
||||
|
||||
find_package(Eigen3 3.1.0 QUIET) #(3.1.0 or greater)
|
||||
find_package(Eigen3 QUIET)
|
||||
include(CGAL_Eigen3_support)
|
||||
|
||||
if(NOT TARGET CGAL::Eigen3_support)
|
||||
message("NOTICE: This project requires the Eigen library, and will not be compiled.")
|
||||
return()
|
||||
|
|
|
|||
|
|
@ -6,8 +6,9 @@ project(Optimal_bounding_box_Tests)
|
|||
|
||||
find_package(CGAL REQUIRED)
|
||||
|
||||
find_package(Eigen3 3.1.0 QUIET) #(3.1.0 or greater)
|
||||
find_package(Eigen3 QUIET)
|
||||
include(CGAL_Eigen3_support)
|
||||
|
||||
if(NOT TARGET CGAL::Eigen3_support)
|
||||
message("NOTICE: This project requires the Eigen library, and will not be compiled.")
|
||||
return()
|
||||
|
|
|
|||
|
|
@ -17,6 +17,8 @@
|
|||
|
||||
#include <CGAL/OTR_2/Cost.h>
|
||||
#include <CGAL/Triangulation_face_base_2.h>
|
||||
#include <CGAL/Has_timestamp.h>
|
||||
#include <CGAL/Time_stamper.h>
|
||||
|
||||
#include <vector>
|
||||
|
||||
|
|
@ -62,6 +64,8 @@ private:
|
|||
|
||||
FT m_relevance[3];
|
||||
|
||||
std::size_t time_stamp_ = std::size_t(-2);
|
||||
|
||||
public:
|
||||
Reconstruction_face_base_2()
|
||||
{
|
||||
|
|
@ -190,6 +194,18 @@ public:
|
|||
for (int i = 0; i < 3; ++i)
|
||||
clean_samples(i);
|
||||
}
|
||||
|
||||
/// For the determinism of Compact_container iterators
|
||||
///@{
|
||||
typedef Tag_true Has_timestamp;
|
||||
|
||||
std::size_t time_stamp() const {
|
||||
return time_stamp_;
|
||||
}
|
||||
void set_time_stamp(const std::size_t& ts) {
|
||||
time_stamp_ = ts;
|
||||
}
|
||||
///@}
|
||||
};
|
||||
|
||||
//---------------STRUCT LESS FACE_HANDLE---------------------
|
||||
|
|
|
|||
|
|
@ -16,6 +16,8 @@
|
|||
|
||||
|
||||
#include <CGAL/Triangulation_vertex_base_2.h>
|
||||
#include <CGAL/Has_timestamp.h>
|
||||
#include <CGAL/Time_stamper.h>
|
||||
#include <CGAL/OTR_2/Sample.h>
|
||||
|
||||
namespace CGAL {
|
||||
|
|
@ -53,6 +55,7 @@ private:
|
|||
int m_sample;
|
||||
Point m_relocated;
|
||||
FT m_relevance;
|
||||
std::size_t time_stamp_ = std::size_t(-2);
|
||||
|
||||
|
||||
public:
|
||||
|
|
@ -110,6 +113,18 @@ public:
|
|||
Point& relocated() { return m_relocated; }
|
||||
|
||||
bool has_sample_assigned() const { return sample() != -1; }
|
||||
|
||||
/// For the determinism of Compact_container iterators
|
||||
///@{
|
||||
typedef Tag_true Has_timestamp;
|
||||
|
||||
std::size_t time_stamp() const {
|
||||
return time_stamp_;
|
||||
}
|
||||
void set_time_stamp(const std::size_t& ts) {
|
||||
time_stamp_ = ts;
|
||||
}
|
||||
///@}
|
||||
};
|
||||
//---------------STRUCT LESS VERTEX_HANDLE---------------------
|
||||
template <class T>
|
||||
|
|
|
|||
|
|
@ -18,8 +18,9 @@ create_single_source_cgal_program("quadtree_build_from_point_vector.cpp")
|
|||
create_single_source_cgal_program("octree_surface_mesh.cpp")
|
||||
create_single_source_cgal_program("quadtree_build_manually.cpp")
|
||||
|
||||
find_package(Eigen3 3.1.91 QUIET) #(requires 3.1.91 or greater)
|
||||
find_package(Eigen3 QUIET)
|
||||
include(CGAL_Eigen3_support)
|
||||
|
||||
if (TARGET CGAL::Eigen3_support)
|
||||
create_single_source_cgal_program("orthtree_build.cpp")
|
||||
target_link_libraries(orthtree_build PUBLIC CGAL::Eigen3_support)
|
||||
|
|
|
|||
|
|
@ -8,8 +8,9 @@ project(Periodic_3_mesh_3_Examples)
|
|||
find_package(CGAL REQUIRED)
|
||||
|
||||
# Use Eigen
|
||||
find_package(Eigen3 3.1.0 QUIET) #(3.1.0 or greater)
|
||||
find_package(Eigen3 QUIET)
|
||||
include(CGAL_Eigen3_support)
|
||||
|
||||
if(NOT TARGET CGAL::Eigen3_support)
|
||||
message("NOTICE: This project requires the Eigen library, and will not be compiled.")
|
||||
return()
|
||||
|
|
|
|||
|
|
@ -7,8 +7,9 @@ project(Periodic_3_mesh_3_Tests)
|
|||
find_package(CGAL REQUIRED COMPONENTS ImageIO)
|
||||
|
||||
# Use Eigen
|
||||
find_package(Eigen3 3.1.0 QUIET) #(3.1.0 or greater)
|
||||
find_package(Eigen3 QUIET)
|
||||
include(CGAL_Eigen3_support)
|
||||
|
||||
if(NOT TARGET CGAL::Eigen3_support)
|
||||
message("NOTICE: This project requires the Eigen library, and will not be compiled.")
|
||||
return()
|
||||
|
|
|
|||
|
|
@ -138,7 +138,12 @@ public Q_SLOTS:
|
|||
private:
|
||||
void showFileBox(QString title, QString fileName) {
|
||||
QFile textFile(fileName);
|
||||
textFile.open(QIODevice::ReadOnly);
|
||||
bool b = textFile.open(QIODevice::ReadOnly);
|
||||
if(!b){
|
||||
QMessageBox::critical(this, tr("Error"),
|
||||
tr("Could not open file %1.").arg(fileName));
|
||||
return;
|
||||
}
|
||||
QMessageBox mb(QMessageBox::NoIcon,
|
||||
title,
|
||||
QTextStream(&textFile).readAll(),
|
||||
|
|
|
|||
|
|
@ -13,8 +13,9 @@ create_single_source_cgal_program("point_set_read_xyz.cpp")
|
|||
create_single_source_cgal_program("point_set_advanced.cpp")
|
||||
create_single_source_cgal_program("point_set_read_ply.cpp")
|
||||
|
||||
find_package(Eigen3 3.1.0 QUIET) #(requires 3.1.0 or greater)
|
||||
find_package(Eigen3 QUIET)
|
||||
include(CGAL_Eigen3_support)
|
||||
|
||||
if(TARGET CGAL::Eigen3_support)
|
||||
create_single_source_cgal_program("point_set_algo.cpp")
|
||||
target_link_libraries(point_set_algo PUBLIC CGAL::Eigen3_support)
|
||||
|
|
|
|||
|
|
@ -67,8 +67,9 @@ else()
|
|||
endif()
|
||||
|
||||
# Use Eigen
|
||||
find_package(Eigen3 3.1.0 QUIET) #(requires 3.1.0 or greater)
|
||||
find_package(Eigen3 QUIET)
|
||||
include(CGAL_Eigen3_support)
|
||||
|
||||
if(TARGET CGAL::Eigen3_support)
|
||||
|
||||
# Executables that require Eigen
|
||||
|
|
|
|||
|
|
@ -47,8 +47,9 @@ else()
|
|||
endif()
|
||||
|
||||
# Use Eigen
|
||||
find_package(Eigen3 3.1.0 QUIET) #(requires 3.1.0 or greater)
|
||||
find_package(Eigen3 QUIET)
|
||||
include(CGAL_Eigen3_support)
|
||||
|
||||
if(TARGET CGAL::Eigen3_support)
|
||||
# Executables that require Eigen
|
||||
create_single_source_cgal_program( "normal_estimation_test.cpp" )
|
||||
|
|
|
|||
|
|
@ -21,9 +21,10 @@ endif()
|
|||
# Activate Parallelism in Mesh_3
|
||||
option(CGAL_ACTIVATE_CONCURRENT_MESH_3 "Activate parallelism in Mesh_3" OFF)
|
||||
|
||||
# Find Eigen3 (requires 3.1.0 or greater)
|
||||
find_package(Eigen3 3.1.0 QUIET)
|
||||
# Find Eigen3
|
||||
find_package(Eigen3 QUIET)
|
||||
include(CGAL_Eigen3_support)
|
||||
|
||||
if(TARGET CGAL::Eigen3_support)
|
||||
# Executables that require Eigen 3
|
||||
create_single_source_cgal_program("poisson_reconstruction_example.cpp")
|
||||
|
|
|
|||
|
|
@ -18,7 +18,7 @@ if(MSVC)
|
|||
message(STATUS "USING RELEASE EXEFLAGS = '${CMAKE_EXE_LINKER_FLAGS} ${CMAKE_EXE_LINKER_FLAGS_RELEASE}'")
|
||||
endif()
|
||||
|
||||
find_package(Eigen3 3.1.0 QUIET) #(requires 3.1.0 or greater)
|
||||
find_package(Eigen3 QUIET)
|
||||
include(CGAL_Eigen3_support)
|
||||
if(TARGET CGAL::Eigen3_support)
|
||||
# Executables that require Eigen 3.1
|
||||
|
|
|
|||
|
|
@ -7,8 +7,9 @@ project(Polygon_mesh_processing)
|
|||
# CGAL and its components
|
||||
find_package(CGAL REQUIRED)
|
||||
|
||||
find_package(Eigen3 3.2.0 QUIET) #(requires 3.2.0 or greater)
|
||||
find_package(Eigen3 QUIET)
|
||||
include(CGAL_Eigen3_support)
|
||||
|
||||
if(NOT TARGET CGAL::Eigen3_support)
|
||||
message("NOTICE: Benchmarks require Eigen 3.2 (or greater), and will not be compiled")
|
||||
return()
|
||||
|
|
|
|||
|
|
@ -59,8 +59,9 @@ create_single_source_cgal_program("isotropic_remeshing_with_allow_move.cpp")
|
|||
create_single_source_cgal_program("triangle_mesh_autorefinement.cpp")
|
||||
create_single_source_cgal_program("soup_autorefinement.cpp")
|
||||
|
||||
find_package(Eigen3 3.2.0 QUIET) #(requires 3.2.0 or greater)
|
||||
find_package(Eigen3 QUIET)
|
||||
include(CGAL_Eigen3_support)
|
||||
|
||||
if(TARGET CGAL::Eigen3_support)
|
||||
create_single_source_cgal_program("hole_filling_example.cpp")
|
||||
target_link_libraries(hole_filling_example PUBLIC CGAL::Eigen3_support)
|
||||
|
|
|
|||
|
|
@ -1447,6 +1447,12 @@ triangulate_hole_polyline_with_cdt(const PointRange& points,
|
|||
vertices[v->info()] = v;
|
||||
}
|
||||
|
||||
if (vertices.size()!=cdt.number_of_vertices())
|
||||
{
|
||||
visitor.end_planar_phase(false);
|
||||
return false;
|
||||
}
|
||||
|
||||
try
|
||||
{
|
||||
for (std::size_t i = 0; i < size; ++i) {
|
||||
|
|
|
|||
|
|
@ -73,8 +73,9 @@ create_single_source_cgal_program("issue_8730.cpp")
|
|||
create_single_source_cgal_program("issue_7164.cpp")
|
||||
# create_single_source_cgal_program("test_pmp_repair_self_intersections.cpp")
|
||||
|
||||
find_package(Eigen3 3.2.0 QUIET) #(requires 3.2.0 or greater)
|
||||
find_package(Eigen3 QUIET)
|
||||
include(CGAL_Eigen3_support)
|
||||
|
||||
if(TARGET CGAL::Eigen3_support)
|
||||
create_single_source_cgal_program("fairing_test.cpp")
|
||||
target_link_libraries(fairing_test PUBLIC CGAL::Eigen3_support)
|
||||
|
|
|
|||
|
|
@ -8,8 +8,9 @@ project(Polygonal_surface_reconstruction_Examples)
|
|||
# CGAL and its components
|
||||
find_package(CGAL REQUIRED)
|
||||
|
||||
find_package(Eigen3 3.1.0 QUIET) #(requires 3.1.0 or greater)
|
||||
find_package(Eigen3 QUIET)
|
||||
include(CGAL_Eigen3_support)
|
||||
|
||||
if(NOT TARGET CGAL::Eigen3_support)
|
||||
message("NOTICE: This project requires Eigen 3.1 (or greater), and will not be compiled.")
|
||||
return()
|
||||
|
|
|
|||
|
|
@ -8,8 +8,9 @@ project(Polygonal_surface_reconstruction_Tests)
|
|||
# CGAL and its components
|
||||
find_package(CGAL REQUIRED)
|
||||
|
||||
find_package(Eigen3 3.1.0 QUIET) #(requires 3.1.0 or greater)
|
||||
find_package(Eigen3 QUIET)
|
||||
include(CGAL_Eigen3_support)
|
||||
|
||||
if(NOT TARGET CGAL::Eigen3_support)
|
||||
message("NOTICE: This project requires Eigen 3.1 (or greater), and will not be compiled.")
|
||||
return()
|
||||
|
|
|
|||
|
|
@ -8,8 +8,9 @@ include_directories(./)
|
|||
# Find CGAL and CGAL Qt6
|
||||
find_package(CGAL REQUIRED OPTIONAL_COMPONENTS Qt6)
|
||||
|
||||
find_package(Eigen3 3.1.0 QUIET) #(requires 3.1.0 or greater)
|
||||
find_package(Eigen3 QUIET)
|
||||
include(CGAL_Eigen3_support)
|
||||
|
||||
if(NOT TARGET CGAL::Eigen3_support)
|
||||
message("NOTICE: This project requires the Eigen library, and will not be compiled.")
|
||||
return()
|
||||
|
|
|
|||
|
|
@ -7,8 +7,9 @@ project(Principal_component_analysis_Examples)
|
|||
find_package(CGAL REQUIRED)
|
||||
|
||||
# Use Eigen
|
||||
find_package(Eigen3 3.1.0 QUIET) #(requires 3.1.0 or greater)
|
||||
find_package(Eigen3 QUIET)
|
||||
include(CGAL_Eigen3_support)
|
||||
|
||||
if(NOT TARGET CGAL::Eigen3_support)
|
||||
message("NOTICE: This project requires Eigen 3.1 (or greater), and will not be compiled.")
|
||||
return()
|
||||
|
|
|
|||
|
|
@ -7,8 +7,9 @@ project(Principal_component_analysis_Tests)
|
|||
find_package(CGAL REQUIRED)
|
||||
|
||||
# Use Eigen
|
||||
find_package(Eigen3 3.1.0 QUIET) #(requires 3.1.0 or greater)
|
||||
find_package(Eigen3 QUIET)
|
||||
include(CGAL_Eigen3_support)
|
||||
|
||||
if(NOT TARGET CGAL::Eigen3_support)
|
||||
message("NOTICE: This project requires Eigen 3.1 (or greater), and will not be compiled.")
|
||||
return()
|
||||
|
|
|
|||
|
|
@ -6,8 +6,9 @@ find_package(CGAL REQUIRED)
|
|||
|
||||
create_single_source_cgal_program("dynamic_properties.cpp")
|
||||
|
||||
find_package(Eigen3 3.1.0 QUIET) #(requires 3.1.0 or greater)
|
||||
find_package(Eigen3 QUIET)
|
||||
include(CGAL_Eigen3_support)
|
||||
|
||||
if(TARGET CGAL::Eigen3_support)
|
||||
create_single_source_cgal_program("custom_property_map.cpp")
|
||||
target_link_libraries(custom_property_map PUBLIC CGAL::Eigen3_support)
|
||||
|
|
|
|||
|
|
@ -4,8 +4,9 @@ project(Ridges_3_Examples)
|
|||
|
||||
find_package(CGAL REQUIRED)
|
||||
|
||||
find_package(Eigen3 3.1.0 QUIET) #(requires 3.1.0 or greater)
|
||||
find_package(Eigen3 QUIET)
|
||||
include(CGAL_Eigen3_support)
|
||||
|
||||
if(TARGET CGAL::Eigen3_support)
|
||||
|
||||
# Link with Boost.ProgramOptions (optional)
|
||||
|
|
|
|||
|
|
@ -6,8 +6,9 @@ project(Ridges_3_Tests)
|
|||
|
||||
find_package(CGAL REQUIRED)
|
||||
|
||||
find_package(Eigen3 3.1.0 QUIET) #(requires 3.1.0 or greater)
|
||||
find_package(Eigen3 QUIET)
|
||||
include(CGAL_Eigen3_support)
|
||||
|
||||
if(TARGET CGAL::Eigen3_support)
|
||||
create_single_source_cgal_program("ridge_test.cpp")
|
||||
target_link_libraries(ridge_test PUBLIC CGAL::Eigen3_support)
|
||||
|
|
|
|||
|
|
@ -9,8 +9,9 @@ find_package(CGAL REQUIRED)
|
|||
create_single_source_cgal_program( "test_simplicial_cb_vb.cpp")
|
||||
create_single_source_cgal_program( "test_tet_soup_to_c3t3.cpp")
|
||||
|
||||
find_package(Eigen3 3.1.0 QUIET) #(requires 3.1.0 or greater)
|
||||
find_package(Eigen3 QUIET)
|
||||
include(CGAL_Eigen3_support)
|
||||
|
||||
if(TARGET CGAL::Eigen3_support)
|
||||
create_single_source_cgal_program( "test_c3t3.cpp" )
|
||||
create_single_source_cgal_program( "test_c3t3_io.cpp" )
|
||||
|
|
|
|||
|
|
@ -14,8 +14,9 @@ if(ACTIVATE_CONCURRENCY)
|
|||
endif()
|
||||
endif()
|
||||
|
||||
find_package(Eigen3 3.1.0 QUIET)
|
||||
find_package(Eigen3 QUIET)
|
||||
include(CGAL_Eigen3_support)
|
||||
|
||||
if(TARGET CGAL::Eigen3_support)
|
||||
create_single_source_cgal_program("scale_space.cpp")
|
||||
target_link_libraries(scale_space PUBLIC CGAL::Eigen3_support)
|
||||
|
|
|
|||
|
|
@ -6,8 +6,9 @@ project(Shape_detection_Benchmarks)
|
|||
|
||||
find_package(CGAL REQUIRED COMPONENTS Core)
|
||||
|
||||
find_package(Eigen3 3.1.0 QUIET) # (3.1.0 or greater)
|
||||
find_package(Eigen3 QUIET)
|
||||
include(CGAL_Eigen3_support)
|
||||
|
||||
if(TARGET CGAL::Eigen3_support)
|
||||
create_single_source_cgal_program("benchmark_region_growing_on_point_set_2.cpp")
|
||||
target_link_libraries(benchmark_region_growing_on_point_set_2 PUBLIC CGAL::Eigen3_support)
|
||||
|
|
|
|||
|
|
@ -10,8 +10,9 @@ create_single_source_cgal_program("efficient_RANSAC_with_custom_shape.cpp")
|
|||
create_single_source_cgal_program("efficient_RANSAC_with_parameters.cpp")
|
||||
create_single_source_cgal_program("efficient_RANSAC_with_point_access.cpp")
|
||||
|
||||
find_package(Eigen3 3.1.0 QUIET) # (3.1.0 or greater)
|
||||
find_package(Eigen3 QUIET)
|
||||
include(CGAL_Eigen3_support)
|
||||
|
||||
if(TARGET CGAL::Eigen3_support)
|
||||
message(STATUS "Found Eigen 3")
|
||||
|
||||
|
|
|
|||
|
|
@ -18,10 +18,10 @@ create_single_source_cgal_program("test_efficient_RANSAC_torus_connected_compone
|
|||
create_single_source_cgal_program("test_efficient_RANSAC_torus_parameters.cpp")
|
||||
create_single_source_cgal_program("test_efficient_RANSAC_scene.cpp")
|
||||
|
||||
find_package(Eigen3 3.1.0 QUIET) # (3.1.0 or greater)
|
||||
find_package(Eigen3 QUIET)
|
||||
include(CGAL_Eigen3_support)
|
||||
if(TARGET CGAL::Eigen3_support)
|
||||
|
||||
if(TARGET CGAL::Eigen3_support)
|
||||
create_single_source_cgal_program("test_region_growing_basic.cpp")
|
||||
create_single_source_cgal_program("test_region_growing_strict.cpp")
|
||||
create_single_source_cgal_program("test_region_growing_on_cube.cpp")
|
||||
|
|
|
|||
|
|
@ -27,8 +27,9 @@ if(TARGET CGAL::OSQP_support)
|
|||
endforeach()
|
||||
|
||||
# Use Eigen.
|
||||
find_package(Eigen3 3.1.0 QUIET) # (3.1.0 or greater)
|
||||
find_package(Eigen3 QUIET)
|
||||
include(CGAL_Eigen3_support)
|
||||
|
||||
if(TARGET CGAL::Eigen3_support)
|
||||
message(STATUS "Found Eigen")
|
||||
|
||||
|
|
|
|||
|
|
@ -7,8 +7,9 @@ project(Solver_interface_Examples)
|
|||
find_package(CGAL REQUIRED)
|
||||
|
||||
# Use Eigen
|
||||
find_package(Eigen3 3.1.0 QUIET) #(requires 3.1.0 or greater)
|
||||
find_package(Eigen3 QUIET)
|
||||
include(CGAL_Eigen3_support)
|
||||
|
||||
if(TARGET CGAL::Eigen3_support)
|
||||
create_single_source_cgal_program("singular_value_decomposition.cpp")
|
||||
target_link_libraries(singular_value_decomposition PUBLIC CGAL::Eigen3_support)
|
||||
|
|
|
|||
|
|
@ -8,8 +8,9 @@ find_package(CGAL REQUIRED COMPONENTS Core)
|
|||
|
||||
include_directories(BEFORE "include")
|
||||
|
||||
find_package(Eigen3 3.1.91 QUIET) # (requires 3.1.91 or greater)
|
||||
find_package(Eigen3 QUIET)
|
||||
include(CGAL_Eigen3_support)
|
||||
|
||||
if(NOT TARGET CGAL::Eigen3_support)
|
||||
message("NOTICE: These benchmarks require Eigen 3.1.91 (or greater), and will not be compiled.")
|
||||
return()
|
||||
|
|
|
|||
|
|
@ -26,8 +26,9 @@ create_single_source_cgal_program("weighted_Minkowski_distance.cpp")
|
|||
create_single_source_cgal_program("searching_sphere_orthogonally.cpp")
|
||||
create_single_source_cgal_program("splitter_worst_cases.cpp")
|
||||
|
||||
find_package(Eigen3 3.1.91 QUIET) #(requires 3.1.91 or greater)
|
||||
find_package(Eigen3 QUIET)
|
||||
include(CGAL_Eigen3_support)
|
||||
|
||||
if(TARGET CGAL::Eigen3_support)
|
||||
create_single_source_cgal_program("fuzzy_range_query.cpp")
|
||||
target_link_libraries(fuzzy_range_query PUBLIC CGAL::Eigen3_support)
|
||||
|
|
|
|||
|
|
@ -93,7 +93,7 @@ public:
|
|||
|
||||
template <class StreamLinesTraits_2>
|
||||
inline
|
||||
typename Regular_grid_2<StreamLinesTraits_2>::Geom_traits::Iso_rectangle_2
|
||||
typename StreamLinesTraits_2::Iso_rectangle_2
|
||||
Regular_grid_2<StreamLinesTraits_2>::bbox() const
|
||||
{
|
||||
return typename Geom_traits::Iso_rectangle_2(0.0, 0.0,
|
||||
|
|
|
|||
|
|
@ -134,7 +134,7 @@ protected:
|
|||
|
||||
template <class StreamLinesTraits_2>
|
||||
inline
|
||||
typename Triangular_field_2<StreamLinesTraits_2>::Geom_traits::Iso_rectangle_2
|
||||
typename StreamLinesTraits_2::Iso_rectangle_2
|
||||
Triangular_field_2<StreamLinesTraits_2>::bbox() const
|
||||
{
|
||||
return typename Geom_traits::Iso_rectangle_2(minx, miny, maxx,
|
||||
|
|
|
|||
|
|
@ -23,12 +23,13 @@ int main()
|
|||
std::vector<PointVectorPair> pv_pairs;
|
||||
const std::function<void(const PointVectorPair& p)> lambda =
|
||||
[&](const PointVectorPair& p) {
|
||||
FT len = p.second.squared_length();
|
||||
if (len > 0 || len != 1.0) {
|
||||
Vector_3 n = p.second * (1.0 / CGAL::sqrt(len));
|
||||
pv_pairs.push_back(std::make_pair(p.first, n));
|
||||
}
|
||||
else pv_pairs.push_back(p);
|
||||
const FT len = CGAL::sqrt(p.second.squared_length());
|
||||
if (len > 0) {
|
||||
Vector_3 n = p.second / len;
|
||||
pv_pairs.push_back(std::make_pair(p.first, n));
|
||||
} else {
|
||||
pv_pairs.push_back(p);
|
||||
}
|
||||
};
|
||||
|
||||
pv_pairs.clear();
|
||||
|
|
|
|||
|
|
@ -8,8 +8,9 @@ project(Surface_mesh_approximation_Examples)
|
|||
find_package(CGAL REQUIRED)
|
||||
|
||||
# Use Eigen (for PCA)
|
||||
find_package(Eigen3 3.1.0 QUIET) #(3.1.0 or greater)
|
||||
find_package(Eigen3 QUIET)
|
||||
include(CGAL_Eigen3_support)
|
||||
|
||||
if(NOT TARGET CGAL::Eigen3_support)
|
||||
message("NOTICE: This project requires Eigen 3.1 (or greater), and will not be compiled.")
|
||||
return()
|
||||
|
|
|
|||
|
|
@ -8,8 +8,9 @@ project(Surface_mesh_approximation_Tests)
|
|||
find_package(CGAL REQUIRED)
|
||||
|
||||
# Use Eigen (for PCA)
|
||||
find_package(Eigen3 3.1.0 QUIET) #(3.1.0 or greater)
|
||||
find_package(Eigen3 QUIET)
|
||||
include(CGAL_Eigen3_support)
|
||||
|
||||
if(NOT TARGET CGAL::Eigen3_support)
|
||||
message("NOTICE: This project requires Eigen 3.1 (or greater), and will not be compiled.")
|
||||
return()
|
||||
|
|
|
|||
|
|
@ -3,8 +3,9 @@ project(benchmark_for_closest_rotation)
|
|||
|
||||
find_package(CGAL REQUIRED COMPONENTS Core)
|
||||
|
||||
find_package(Eigen3 3.1.0 QUIET) #(requires 3.1.0 or greater)
|
||||
find_package(Eigen3 QUIET)
|
||||
include(CGAL_Eigen3_support)
|
||||
|
||||
if(TARGET CGAL::Eigen3_support)
|
||||
create_single_source_cgal_program("benchmark_for_concept_models.cpp")
|
||||
target_link_libraries(benchmark_for_concept_models PUBLIC CGAL::Eigen3_support)
|
||||
|
|
|
|||
|
|
@ -8,8 +8,9 @@ set_property(DIRECTORY PROPERTY CGAL_NO_TESTING TRUE)
|
|||
|
||||
find_package(CGAL REQUIRED)
|
||||
|
||||
find_package(Eigen3 3.1.91 QUIET) #(requires 3.1.91 or greater)
|
||||
find_package(Eigen3 QUIET)
|
||||
include(CGAL_Eigen3_support)
|
||||
|
||||
if(TARGET CGAL::Eigen3_support)
|
||||
create_single_source_cgal_program("deform_mesh_for_botsch08_format.cpp")
|
||||
target_link_libraries(deform_mesh_for_botsch08_format PUBLIC CGAL::Eigen3_support)
|
||||
|
|
|
|||
|
|
@ -6,8 +6,9 @@ project(Surface_mesh_deformation_Examples)
|
|||
|
||||
find_package(CGAL REQUIRED)
|
||||
|
||||
find_package(Eigen3 3.1.91 QUIET) #(requires 3.1.91 or greater)
|
||||
find_package(Eigen3 QUIET)
|
||||
include(CGAL_Eigen3_support)
|
||||
|
||||
if(TARGET CGAL::Eigen3_support)
|
||||
create_single_source_cgal_program("all_roi_assign_example.cpp")
|
||||
create_single_source_cgal_program("all_roi_assign_example_custom_polyhedron.cpp")
|
||||
|
|
|
|||
|
|
@ -6,8 +6,9 @@ project(Surface_mesh_deformation_Tests)
|
|||
|
||||
find_package(CGAL REQUIRED)
|
||||
|
||||
find_package(Eigen3 3.1.91 QUIET) #(requires 3.1.91 or greater)
|
||||
find_package(Eigen3 QUIET)
|
||||
include(CGAL_Eigen3_support)
|
||||
|
||||
if(TARGET CGAL::Eigen3_support)
|
||||
create_single_source_cgal_program("Cactus_deformation_session.cpp")
|
||||
target_link_libraries(Cactus_deformation_session PUBLIC CGAL::Eigen3_support)
|
||||
|
|
|
|||
|
|
@ -5,8 +5,9 @@ project(Surface_mesh_parameterization_Examples)
|
|||
|
||||
find_package(CGAL REQUIRED)
|
||||
|
||||
find_package(Eigen3 3.1.0 QUIET) #(requires 3.1.0 or greater)
|
||||
find_package(Eigen3 QUIET)
|
||||
include(CGAL_Eigen3_support)
|
||||
|
||||
if(TARGET CGAL::Eigen3_support)
|
||||
# Executables that require Eigen 3.1
|
||||
|
||||
|
|
|
|||
|
|
@ -14,8 +14,9 @@ else()
|
|||
message(STATUS "NOTICE: Examples will be compiled without the SuiteSparse library and UmfPack. Try setting CMAKE_PREFIX_PATH to your SuiteSparse installation.")
|
||||
endif()
|
||||
|
||||
find_package(Eigen3 3.1.0 QUIET) #(requires 3.1.0 or greater)
|
||||
find_package(Eigen3 QUIET)
|
||||
include(CGAL_Eigen3_support)
|
||||
|
||||
if(TARGET CGAL::Eigen3_support)
|
||||
create_single_source_cgal_program("extensive_parameterization_test.cpp")
|
||||
target_link_libraries(extensive_parameterization_test PUBLIC CGAL::Eigen3_support)
|
||||
|
|
|
|||
|
|
@ -19,8 +19,9 @@ create_single_source_cgal_program("edge_collapse_all_short_edges.cpp")
|
|||
create_single_source_cgal_program("edge_collapse_bounded_normal_change.cpp")
|
||||
create_single_source_cgal_program("edge_collapse_visitor_surface_mesh.cpp")
|
||||
|
||||
find_package(Eigen3 3.1.0 QUIET) #(3.1.0 or greater)
|
||||
find_package(Eigen3 QUIET)
|
||||
include(CGAL_Eigen3_support)
|
||||
|
||||
if(TARGET CGAL::Eigen3_support)
|
||||
create_single_source_cgal_program("edge_collapse_garland_heckbert.cpp")
|
||||
target_link_libraries(edge_collapse_garland_heckbert PUBLIC CGAL::Eigen3_support)
|
||||
|
|
|
|||
|
|
@ -14,8 +14,9 @@ create_single_source_cgal_program("test_edge_profile_link.cpp")
|
|||
create_single_source_cgal_program("test_edge_deprecated_stop_predicates.cpp")
|
||||
create_single_source_cgal_program("test_edge_collapse_stability.cpp")
|
||||
|
||||
find_package(Eigen3 3.1.0 QUIET) #(3.1.0 or greater)
|
||||
find_package(Eigen3 QUIET)
|
||||
include(CGAL_Eigen3_support)
|
||||
|
||||
if(TARGET CGAL::Eigen3_support)
|
||||
create_single_source_cgal_program("edge_collapse_garland_heckbert_variations.cpp")
|
||||
target_link_libraries(edge_collapse_garland_heckbert_variations PUBLIC CGAL::Eigen3_support)
|
||||
|
|
|
|||
|
|
@ -7,8 +7,9 @@ project(Mean_curvature_skeleton)
|
|||
# CGAL and its components
|
||||
find_package(CGAL REQUIRED)
|
||||
|
||||
find_package(Eigen3 3.2.0 QUIET) #(requires 3.2.0 or greater)
|
||||
find_package(Eigen3 QUIET)
|
||||
include(CGAL_Eigen3_support)
|
||||
|
||||
if(TARGET CGAL::Eigen3_support)
|
||||
create_single_source_cgal_program("solver_benchmark.cpp")
|
||||
target_link_libraries(solver_benchmark PUBLIC CGAL::Eigen3_support)
|
||||
|
|
|
|||
|
|
@ -6,8 +6,9 @@ project(Surface_mesh_skeletonization_Examples)
|
|||
|
||||
find_package(CGAL REQUIRED)
|
||||
|
||||
find_package(Eigen3 3.2.0 QUIET) #(requires 3.2.0 or greater)
|
||||
find_package(Eigen3 QUIET)
|
||||
include(CGAL_Eigen3_support)
|
||||
|
||||
if(TARGET CGAL::Eigen3_support)
|
||||
create_single_source_cgal_program("simple_mcfskel_example.cpp")
|
||||
create_single_source_cgal_program("simple_mcfskel_sm_example.cpp")
|
||||
|
|
|
|||
|
|
@ -6,8 +6,9 @@ project(Surface_mesh_skeletonization_Tests)
|
|||
|
||||
find_package(CGAL REQUIRED)
|
||||
|
||||
find_package(Eigen3 3.2.0 QUIET) #(requires 3.2.0 or greater)
|
||||
find_package(Eigen3 QUIET)
|
||||
include(CGAL_Eigen3_support)
|
||||
|
||||
if(TARGET CGAL::Eigen3_support)
|
||||
create_single_source_cgal_program("MCF_Skeleton_test.cpp")
|
||||
target_link_libraries(MCF_Skeleton_test PUBLIC CGAL::Eigen3_support)
|
||||
|
|
|
|||
|
|
@ -25,8 +25,9 @@ else()
|
|||
endif()
|
||||
|
||||
# Use Eigen for Mesh_3
|
||||
find_package(Eigen3 3.1.0 QUIET) #(3.1.0 or greater)
|
||||
find_package(Eigen3 QUIET)
|
||||
include(CGAL_Eigen3_support)
|
||||
|
||||
if(TARGET CGAL::Eigen3_support)
|
||||
create_single_source_cgal_program( "mesh_and_remesh_polyhedral_domain_with_features.cpp" )
|
||||
target_link_libraries(mesh_and_remesh_polyhedral_domain_with_features PUBLIC CGAL::Eigen3_support)
|
||||
|
|
|
|||
|
|
@ -27,8 +27,9 @@ cgal_add_test(test_tetrahedral_remeshing_mls)
|
|||
|
||||
|
||||
# Tests using Mesh_3 require Eigen
|
||||
find_package(Eigen3 3.1.0 QUIET) #(3.1.0 or greater)
|
||||
find_package(Eigen3 QUIET)
|
||||
include(CGAL_Eigen3_support)
|
||||
|
||||
if(TARGET CGAL::Eigen3_support)
|
||||
create_single_source_cgal_program("test_mesh_and_remesh_polyhedron_with_features.cpp")
|
||||
target_link_libraries(test_mesh_and_remesh_polyhedron_with_features PUBLIC CGAL::Eigen3_support)
|
||||
|
|
|
|||
|
|
@ -7,8 +7,9 @@ project(Triangulation_apps)
|
|||
# CGAL and its components
|
||||
find_package(CGAL REQUIRED)
|
||||
|
||||
find_package(Eigen3 3.1.0 QUIET)
|
||||
find_package(Eigen3 QUIET)
|
||||
include(CGAL_Eigen3_support)
|
||||
|
||||
if(NOT TARGET CGAL::Eigen3_support)
|
||||
message("NOTICE: Applications require Eigen 3.1 (or greater), and will not be compiled")
|
||||
return()
|
||||
|
|
|
|||
|
|
@ -6,8 +6,9 @@ project(Triangulation_benchmark)
|
|||
|
||||
find_package(CGAL REQUIRED COMPONENTS Core)
|
||||
|
||||
find_package(Eigen3 3.1.0 QUIET)
|
||||
find_package(Eigen3 QUIET)
|
||||
include(CGAL_Eigen3_support)
|
||||
|
||||
if(TARGET CGAL::Eigen3_support)
|
||||
include_directories(BEFORE "include")
|
||||
|
||||
|
|
|
|||
|
|
@ -11,8 +11,9 @@ endif()
|
|||
|
||||
find_package(CGAL REQUIRED)
|
||||
|
||||
find_package(Eigen3 3.1.0 QUIET)
|
||||
find_package(Eigen3 QUIET)
|
||||
include(CGAL_Eigen3_support)
|
||||
|
||||
if(TARGET CGAL::Eigen3_support)
|
||||
create_single_source_cgal_program("barycentric_subdivision.cpp")
|
||||
create_single_source_cgal_program("delaunay_triangulation.cpp")
|
||||
|
|
|
|||
|
|
@ -11,8 +11,9 @@ endif()
|
|||
|
||||
find_package(CGAL REQUIRED)
|
||||
|
||||
find_package(Eigen3 3.1.0 QUIET)
|
||||
find_package(Eigen3 QUIET)
|
||||
include(CGAL_Eigen3_support)
|
||||
|
||||
if(TARGET CGAL::Eigen3_support)
|
||||
include_directories(BEFORE "include")
|
||||
|
||||
|
|
|
|||
|
|
@ -63,9 +63,6 @@ if(CGAL_Qt6_FOUND AND Qt6_FOUND)
|
|||
include(${CGAL_MODULES_DIR}/CGAL_add_test.cmake)
|
||||
cgal_add_compilation_test(T3_demo)
|
||||
|
||||
include(${CGAL_MODULES_DIR}/CGAL_add_test.cmake)
|
||||
cgal_add_compilation_test(T3_demo)
|
||||
|
||||
else(CGAL_Qt6_FOUND AND Qt6_FOUND)
|
||||
|
||||
set(TRIANGULATION_3_MISSING_DEPS "")
|
||||
|
|
|
|||
|
|
@ -209,31 +209,3 @@ void MainWindow::on_actionClear_Scene_triggered()
|
|||
// update viewer
|
||||
Q_EMIT( sceneChanged() );
|
||||
}
|
||||
|
||||
void MainWindow::popupAboutCGAL()
|
||||
{
|
||||
// read contents from .html file
|
||||
QFile about_CGAL(":/documentation/documentation/about_CGAL.html");
|
||||
about_CGAL.open(QIODevice::ReadOnly|QIODevice::Text);
|
||||
QString about_CGAL_txt = QTextStream(&about_CGAL).readAll();
|
||||
|
||||
// popup a message box
|
||||
QMessageBox mb(QMessageBox::NoIcon,
|
||||
tr("About CGAL..."),
|
||||
about_CGAL_txt,
|
||||
QMessageBox::Ok,
|
||||
this);
|
||||
|
||||
// set links to be accessible by mouse or keyboard
|
||||
QLabel* mb_label = mb.findChild<QLabel*>("qt_msgbox_label");
|
||||
if(mb_label) {
|
||||
mb_label->setTextInteractionFlags(mb_label->textInteractionFlags() |
|
||||
::Qt::LinksAccessibleByMouse |
|
||||
::Qt::LinksAccessibleByKeyboard);
|
||||
} else {
|
||||
std::cerr << "Cannot find child \"qt_msgbox_label\" in QMessageBox\n"
|
||||
<< " with Qt version " << QT_VERSION_STR << "!\n";
|
||||
}
|
||||
|
||||
mb.exec();
|
||||
}
|
||||
|
|
|
|||
|
|
@ -36,9 +36,6 @@ public Q_SLOTS:
|
|||
// show menu
|
||||
void on_actionClear_Scene_triggered();
|
||||
|
||||
// about menu
|
||||
void popupAboutCGAL();
|
||||
|
||||
Q_SIGNALS:
|
||||
void sceneChanged();
|
||||
|
||||
|
|
|
|||
|
|
@ -25,6 +25,9 @@ int main(int argc, char** argv)
|
|||
app.setOrganizationName("INRIA");
|
||||
app.setApplicationName("3D Triangulation Demo");
|
||||
|
||||
// Import resources from libCGALQt (Qt6).
|
||||
CGAL_QT_INIT_RESOURCES;
|
||||
|
||||
MainWindow mw;
|
||||
mw.show();
|
||||
|
||||
|
|
|
|||
|
|
@ -183,13 +183,13 @@ void Viewer::compile_shaders()
|
|||
"} \n"
|
||||
"\n"
|
||||
};
|
||||
QOpenGLShader *vertex_shader = new QOpenGLShader(QOpenGLShader::Vertex);
|
||||
QOpenGLShader *vertex_shader = new QOpenGLShader(QOpenGLShader::Vertex, this);
|
||||
if(!vertex_shader->compileSourceCode(vertex_source))
|
||||
{
|
||||
std::cerr<<"Compiling vertex source FAILED"<<std::endl;
|
||||
}
|
||||
|
||||
QOpenGLShader *fragment_shader= new QOpenGLShader(QOpenGLShader::Fragment);
|
||||
QOpenGLShader *fragment_shader= new QOpenGLShader(QOpenGLShader::Fragment, this);
|
||||
if(!fragment_shader->compileSourceCode(fragment_source))
|
||||
{
|
||||
std::cerr<<"Compiling fragmentsource FAILED"<<std::endl;
|
||||
|
|
@ -258,14 +258,14 @@ void Viewer::compile_shaders()
|
|||
"} \n"
|
||||
"\n"
|
||||
};
|
||||
QOpenGLShader *vertex_shader_spheres = new QOpenGLShader(QOpenGLShader::Vertex);
|
||||
QOpenGLShader *vertex_shader_spheres = new QOpenGLShader(QOpenGLShader::Vertex, this);
|
||||
if(!vertex_shader_spheres->compileSourceCode(vertex_source_spheres))
|
||||
{
|
||||
std::cerr<<"Compiling vertex source FAILED"<<std::endl;
|
||||
}
|
||||
|
||||
|
||||
QOpenGLShader *fragment_shader_spheres= new QOpenGLShader(QOpenGLShader::Fragment);
|
||||
QOpenGLShader *fragment_shader_spheres= new QOpenGLShader(QOpenGLShader::Fragment, this);
|
||||
if(!fragment_shader_spheres->compileSourceCode(fragment_source_spheres))
|
||||
{
|
||||
std::cerr<<"Compiling fragmentsource FAILED"<<std::endl;
|
||||
|
|
@ -312,7 +312,7 @@ void Viewer::compile_shaders()
|
|||
|
||||
|
||||
|
||||
QOpenGLShader *vertex_shader_cylinders = new QOpenGLShader(QOpenGLShader::Vertex);
|
||||
QOpenGLShader *vertex_shader_cylinders = new QOpenGLShader(QOpenGLShader::Vertex, this);
|
||||
if(!vertex_shader_cylinders->compileSourceCode(vertex_source_cylinders))
|
||||
{
|
||||
std::cerr<<"Compiling vertex source FAILED"<<std::endl;
|
||||
|
|
@ -1628,7 +1628,7 @@ void Viewer::draw()
|
|||
|
||||
}
|
||||
|
||||
void Viewer::drawVertex(const Point_3& p, std::vector<float> *vertices)
|
||||
void Viewer::drawVertex(const Point_3& p, Coords_ptr& vertices)
|
||||
{
|
||||
|
||||
vertices->push_back(p.x()); vertices->push_back(p.y()); vertices->push_back(p.z());
|
||||
|
|
@ -1636,13 +1636,13 @@ void Viewer::drawVertex(const Point_3& p, std::vector<float> *vertices)
|
|||
|
||||
}
|
||||
|
||||
void Viewer::drawEdge(const Point_3& from, const Point_3& to, std::vector<float> *vertices)
|
||||
void Viewer::drawEdge(const Point_3& from, const Point_3& to, Coords_ptr& vertices)
|
||||
{
|
||||
vertices->push_back( from.x()); vertices->push_back(from.y()); vertices->push_back(from.z());
|
||||
vertices->push_back( to.x()); vertices->push_back(to.y()); vertices->push_back(to.z());
|
||||
}
|
||||
|
||||
void Viewer::drawFacet(const Triangle_3& t, std::vector<float> *vertices)
|
||||
void Viewer::drawFacet(const Triangle_3& t, Coords_ptr& vertices)
|
||||
{
|
||||
Point_3 p0 = t.vertex(0);
|
||||
Point_3 p1 = t.vertex(1);
|
||||
|
|
@ -2482,7 +2482,7 @@ void Viewer::incremental_insert() {
|
|||
}
|
||||
|
||||
|
||||
void Viewer::draw_cylinder(float R, int prec, std::vector<float> *vertices, std::vector<float> *normals)
|
||||
void Viewer::draw_cylinder(float R, int prec, Coords_ptr& vertices, Coords_ptr& normals)
|
||||
{
|
||||
vertices->resize(0);
|
||||
normals->resize(0);
|
||||
|
|
@ -2551,7 +2551,7 @@ void Viewer::draw_cylinder(float R, int prec, std::vector<float> *vertices, std:
|
|||
}
|
||||
}
|
||||
|
||||
void Viewer::draw_sphere(float R, int prec, std::vector<float> *vertices, std::vector<float> *normals)
|
||||
void Viewer::draw_sphere(float R, int prec, Coords_ptr& vertices, Coords_ptr& normals)
|
||||
{
|
||||
vertices->resize(0);
|
||||
normals->resize(0);
|
||||
|
|
|
|||
|
|
@ -42,42 +42,41 @@ public:
|
|||
, m_hasEmptyS(false)
|
||||
, m_showTrackball(true)
|
||||
, m_pDlgPrefer(nullptr)
|
||||
{
|
||||
pos_emptyFacet = new std::vector<float>();
|
||||
pos_emptySphere= new std::vector<float>();
|
||||
points_emptySphere = new std::vector<float>();
|
||||
pos_points = new std::vector<float>();
|
||||
pos_newPoint = new std::vector<float>();
|
||||
pos_selectedVertex = new std::vector<float>();
|
||||
pos_movingPoint = new std::vector<float>();
|
||||
pos_queryPoint = new std::vector<float>();
|
||||
pos_trackBall = new std::vector<float>();
|
||||
pos_voronoi = new std::vector<float>();
|
||||
pos_delaunay = new std::vector<float>();
|
||||
pos_facets = new std::vector<float>();
|
||||
pos_newFacet = new std::vector<float>();
|
||||
pos_nearest_neighbor = new std::vector<float>();
|
||||
points_locationSphere = new std::vector<float>();
|
||||
points_cylinder = new std::vector<float>();
|
||||
normals_cylinder = new std::vector<float>();
|
||||
points_sphere = new std::vector<float>();
|
||||
points_trackBall = new std::vector<float>();
|
||||
normals_sphere = new std::vector<float>();
|
||||
normals_emptySphere = new std::vector<float>();
|
||||
normals_trackBall= new std::vector<float>();
|
||||
transfo1_voronoi = new std::vector<float>();
|
||||
transfo2_voronoi = new std::vector<float>();
|
||||
transfo3_voronoi = new std::vector<float>();
|
||||
transfo4_voronoi = new std::vector<float>();
|
||||
transfo1_delaunay = new std::vector<float>();
|
||||
transfo2_delaunay = new std::vector<float>();
|
||||
transfo3_delaunay = new std::vector<float>();
|
||||
transfo4_delaunay = new std::vector<float>();
|
||||
incremental_points = new std::vector<float>();
|
||||
incremental_next_point = new std::vector<float>();
|
||||
incremental_facet = new std::vector<float>();
|
||||
incremental_conflict = new std::vector<float>();
|
||||
}
|
||||
, pos_emptyFacet{new Coords}
|
||||
, pos_emptySphere{new Coords}
|
||||
, points_emptySphere{new Coords}
|
||||
, pos_points{new Coords}
|
||||
, pos_newPoint{new Coords}
|
||||
, pos_selectedVertex{new Coords}
|
||||
, pos_movingPoint{new Coords}
|
||||
, pos_queryPoint{new Coords}
|
||||
, pos_trackBall{ new Coords}
|
||||
, pos_voronoi{new Coords}
|
||||
, pos_delaunay{new Coords}
|
||||
, pos_facets{new Coords}
|
||||
, pos_newFacet{new Coords}
|
||||
, pos_nearest_neighbor{new Coords}
|
||||
, points_locationSphere{new Coords}
|
||||
, points_cylinder{new Coords}
|
||||
, normals_cylinder{new Coords}
|
||||
, points_sphere{new Coords}
|
||||
, points_trackBall{new Coords}
|
||||
, normals_sphere{new Coords}
|
||||
, normals_emptySphere{new Coords}
|
||||
, normals_trackBall{new Coords}
|
||||
, transfo1_voronoi{new Coords}
|
||||
, transfo2_voronoi{new Coords}
|
||||
, transfo3_voronoi{new Coords}
|
||||
, transfo4_voronoi{new Coords}
|
||||
, transfo1_delaunay{new Coords}
|
||||
, transfo2_delaunay{new Coords}
|
||||
, transfo3_delaunay{new Coords}
|
||||
, transfo4_delaunay{new Coords}
|
||||
, incremental_points{new Coords}
|
||||
, incremental_next_point{new Coords}
|
||||
, incremental_facet{new Coords}
|
||||
, incremental_conflict{new Coords}
|
||||
{}
|
||||
|
||||
~Viewer()
|
||||
{
|
||||
|
|
@ -269,12 +268,15 @@ protected:
|
|||
QString helpString() const;
|
||||
|
||||
private:
|
||||
using Coords = std::vector<float>;
|
||||
using Coords_ptr = std::unique_ptr<std::vector<float>>;
|
||||
|
||||
// draw a 3d effect vertex
|
||||
void drawVertex(const Point_3& p, std::vector<float> *vertices);
|
||||
void drawVertex(const Point_3& p, Coords_ptr& vertices);
|
||||
// draw a 3d effect edge
|
||||
void drawEdge(const Point_3& from, const Point_3 &to, std::vector<float> *vertices);
|
||||
void drawEdge(const Point_3& from, const Point_3 &to, Coords_ptr& vertices);
|
||||
// draw a facet
|
||||
void drawFacet(const Triangle_3& t, std::vector<float> *vertices);
|
||||
void drawFacet(const Triangle_3& t, Coords_ptr& vertices);
|
||||
// test whether the give 3D point is on the sphere
|
||||
inline bool isOnSphere( const Point_3 & pt ) {
|
||||
return ( (pt.x()*pt.x() + pt.y()*pt.y() + pt.z()*pt.z()) == (m_fRadius*m_fRadius) );
|
||||
|
|
@ -347,75 +349,74 @@ private:
|
|||
static const int vaoSize = 29;
|
||||
static const int vboSize = 34;
|
||||
// define material
|
||||
QVector4D ambient;
|
||||
QVector4D diffuse;
|
||||
QVector4D specular;
|
||||
GLfloat shininess ;
|
||||
int poly_vertexLocation[3];
|
||||
int normalsLocation[3];
|
||||
int mvpLocation[3];
|
||||
int mvLocation[2];
|
||||
int centerLocation[5];
|
||||
int colorLocation[3];
|
||||
int lightLocation[5*2];
|
||||
QVector4D ambient;
|
||||
QVector4D diffuse;
|
||||
QVector4D specular;
|
||||
GLfloat shininess ;
|
||||
int poly_vertexLocation[3];
|
||||
int normalsLocation[3];
|
||||
int mvpLocation[3];
|
||||
int mvLocation[2];
|
||||
int centerLocation[5];
|
||||
int colorLocation[3];
|
||||
int lightLocation[5*2];
|
||||
|
||||
bool are_buffers_initialized;
|
||||
bool extension_is_found;
|
||||
bool are_buffers_initialized;
|
||||
bool extension_is_found;
|
||||
|
||||
std::vector<float> *pos_emptyFacet;
|
||||
std::vector<float> *pos_emptySphere;
|
||||
std::vector<float> *points_emptySphere;
|
||||
std::vector<float> *pos_points;
|
||||
std::vector<float> *pos_newPoint;
|
||||
std::vector<float> *pos_selectedVertex;
|
||||
std::vector<float> *pos_movingPoint;
|
||||
std::vector<float> *pos_queryPoint;
|
||||
std::vector<float> *pos_trackBall;
|
||||
std::vector<float> *points_trackBall;
|
||||
std::vector<float> *pos_voronoi;
|
||||
std::vector<float> *pos_delaunay;
|
||||
std::vector<float> *pos_facets;
|
||||
std::vector<float> *pos_newFacet;
|
||||
std::vector<float> *pos_nearest_neighbor;
|
||||
std::vector<float> *points_locationSphere;
|
||||
std::vector<float> *points_cylinder;
|
||||
std::vector<float> *normals_cylinder;
|
||||
std::vector<float> *points_sphere;
|
||||
std::vector<float> *normals_sphere;
|
||||
std::vector<float> *normals_emptySphere;
|
||||
std::vector<float> *normals_trackBall;
|
||||
std::vector<float> *transfo1_voronoi;
|
||||
std::vector<float> *transfo2_voronoi;
|
||||
std::vector<float> *transfo3_voronoi;
|
||||
std::vector<float> *transfo4_voronoi;
|
||||
std::vector<float> *transfo1_delaunay;
|
||||
std::vector<float> *transfo2_delaunay;
|
||||
std::vector<float> *transfo3_delaunay;
|
||||
std::vector<float> *transfo4_delaunay;
|
||||
std::vector<float> *incremental_points;
|
||||
std::vector<float> *incremental_next_point;
|
||||
std::vector<float> *incremental_facet;
|
||||
std::vector<float> *incremental_conflict;
|
||||
Coords_ptr pos_emptyFacet;
|
||||
Coords_ptr pos_emptySphere;
|
||||
Coords_ptr points_emptySphere;
|
||||
Coords_ptr pos_points;
|
||||
Coords_ptr pos_newPoint;
|
||||
Coords_ptr pos_selectedVertex;
|
||||
Coords_ptr pos_movingPoint;
|
||||
Coords_ptr pos_queryPoint;
|
||||
Coords_ptr pos_trackBall;
|
||||
Coords_ptr pos_voronoi;
|
||||
Coords_ptr pos_delaunay;
|
||||
Coords_ptr pos_facets;
|
||||
Coords_ptr pos_newFacet;
|
||||
Coords_ptr pos_nearest_neighbor;
|
||||
Coords_ptr points_locationSphere;
|
||||
Coords_ptr points_cylinder;
|
||||
Coords_ptr normals_cylinder;
|
||||
Coords_ptr points_sphere;
|
||||
Coords_ptr points_trackBall;
|
||||
Coords_ptr normals_sphere;
|
||||
Coords_ptr normals_emptySphere;
|
||||
Coords_ptr normals_trackBall;
|
||||
Coords_ptr transfo1_voronoi;
|
||||
Coords_ptr transfo2_voronoi;
|
||||
Coords_ptr transfo3_voronoi;
|
||||
Coords_ptr transfo4_voronoi;
|
||||
Coords_ptr transfo1_delaunay;
|
||||
Coords_ptr transfo2_delaunay;
|
||||
Coords_ptr transfo3_delaunay;
|
||||
Coords_ptr transfo4_delaunay;
|
||||
Coords_ptr incremental_points;
|
||||
Coords_ptr incremental_next_point;
|
||||
Coords_ptr incremental_facet;
|
||||
Coords_ptr incremental_conflict;
|
||||
//pickin
|
||||
QMap<float, int> picked_IDs;
|
||||
QPoint picking_pos;
|
||||
|
||||
//picking
|
||||
QMap<float, int> picked_IDs;
|
||||
QPoint picking_pos;
|
||||
|
||||
QOpenGLBuffer buffers[vboSize];
|
||||
QOpenGLVertexArrayObject vao[vaoSize];
|
||||
QOpenGLShaderProgram rendering_program;
|
||||
QOpenGLShaderProgram rendering_program_spheres;
|
||||
QOpenGLShaderProgram rendering_program_cylinders;
|
||||
typedef void (APIENTRYP PFNGLDRAWARRAYSINSTANCEDARBPROC) (GLenum mode, GLint first, GLsizei count, GLsizei primcount);
|
||||
typedef void (APIENTRYP PFNGLVERTEXATTRIBDIVISORARBPROC) (GLuint index, GLuint divisor);
|
||||
PFNGLDRAWARRAYSINSTANCEDARBPROC glDrawArraysInstanced;
|
||||
PFNGLVERTEXATTRIBDIVISORARBPROC glVertexAttribDivisor;
|
||||
void initialize_buffers();
|
||||
void compute_elements();
|
||||
void attrib_buffers(CGAL::QGLViewer*);
|
||||
void compile_shaders();
|
||||
void draw_cylinder(float R, int prec, std::vector<float> *vertices, std::vector<float> *normals);
|
||||
void draw_sphere(float R, int prec, std::vector<float> *vertices, std::vector<float> *normals);
|
||||
QOpenGLBuffer buffers[vboSize];
|
||||
QOpenGLVertexArrayObject vao[vaoSize];
|
||||
QOpenGLShaderProgram rendering_program;
|
||||
QOpenGLShaderProgram rendering_program_spheres;
|
||||
QOpenGLShaderProgram rendering_program_cylinders;
|
||||
typedef void (APIENTRYP PFNGLDRAWARRAYSINSTANCEDARBPROC) (GLenum mode, GLint first, GLsizei count, GLsizei primcount);
|
||||
typedef void (APIENTRYP PFNGLVERTEXATTRIBDIVISORARBPROC) (GLuint index, GLuint divisor);
|
||||
PFNGLDRAWARRAYSINSTANCEDARBPROC glDrawArraysInstanced;
|
||||
PFNGLVERTEXATTRIBDIVISORARBPROC glVertexAttribDivisor;
|
||||
void initialize_buffers();
|
||||
void compute_elements();
|
||||
void attrib_buffers(CGAL::QGLViewer*);
|
||||
void compile_shaders();
|
||||
void draw_cylinder(float R, int prec, Coords_ptr& vertices, Coords_ptr& normals);
|
||||
void draw_sphere(float R, int prec, Coords_ptr& vertices, Coords_ptr& normals);
|
||||
};
|
||||
|
||||
#endif
|
||||
|
|
|
|||
|
|
@ -18,7 +18,7 @@ find_package(CGAL REQUIRED OPTIONAL_COMPONENTS Qt6)
|
|||
# Find Qt6 itself
|
||||
find_package(Qt6 QUIET COMPONENTS Widgets OpenGL)
|
||||
|
||||
find_package(Eigen3 3.1.0 QUIET) #(requires 3.1.0 or greater)
|
||||
find_package(Eigen3 QUIET)
|
||||
include(CGAL_Eigen3_support)
|
||||
|
||||
if(CGAL_Qt6_FOUND AND Qt6_FOUND AND TARGET CGAL::Eigen3_support)
|
||||
|
|
|
|||
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue