Compare commits

...

25 Commits

Author SHA1 Message Date
Andreas Fabri 543d424f58 Periodic_triangulation_3: Fix warning in demo 2025-12-03 11:36:14 +01:00
Sebastien Loriot 0fc710e95d
Fix bad 'if' condition & warning (#9126)
## Summary of Changes

```
Building CXX object test/Stream_support/CMakeFiles/issue8155.dir/issue8155.cpp.o
cd /home/cgal_tester/build/src/cmake/platforms/ArchLinux-clang-CXX20-Release/test/Stream_support && /bin/clang++ -DCGAL_DATA_DIR=\"/mnt/testsuite/data\" -DCGAL_TEST_SUITE=1 -DCGAL_USE_GMPXX=1 -I/home/cgal_tester/build/src/cmake/platforms/ArchLinux-clang-CXX20-Release/include -I/mnt/testsuite/include -isystem /usr/local/boost/include -Wall -O3 -std=c++20 -DCGAL_NDEBUG -MD -MT test/Stream_support/CMakeFiles/issue8155.dir/issue8155.cpp.o -MF CMakeFiles/issue8155.dir/issue8155.cpp.o.d -o CMakeFiles/issue8155.dir/issue8155.cpp.o -c /mnt/testsuite/test/Stream_support/issue8155.cpp
/mnt/testsuite/test/Stream_support/issue8155.cpp:27:17: warning: overlapping comparisons always evaluate to true [-Wtautological-overlap-compare]
   27 |     if (len > 0 || len != 1.0) {
      |         ~~~~~~~~^~~~~~~~~~~~~
1 warning generated.
```


https://cgal.geometryfactory.com/CGAL/testsuite/CGAL-6.2-Ic-36/Stream_support/TestReport_cgaltest_ArchLinux-clang-CXX20-Release.gz

## Release Management

* Affected package(s): `Stream_support`
* Issue(s) solved (if any): n/a
* Feature/Small Feature (if any): n/a
* License and copyright ownership: no change
2025-11-19 14:43:26 +01:00
Sebastien Loriot dee5ed8cc2
Fix edge collapse with incident non-triangular faces (#9117)
Make collapse able to handle non-triangular faces. The fix is easy as
you simply don't need to join faces in case the face won't disappear
after collapse

**TODO:**
update doc and constrained version
2025-11-19 14:42:28 +01:00
Sebastien Loriot 737bcb264e
Doc: fixing thirdparty links (#9134)
## Summary of Changes

fixed Metis/Eigen3/Qt6 links in Thirdparty
removed LEDA from doc as it is outdated

## Release Management

* Affected package(s): Documentation
2025-11-19 14:41:58 +01:00
Sebastien Loriot 2f9854b422
Fix warning about discarding return type of function with [[nodiscard]] (#9127)
## Summary of Changes

```
Building CXX object test/Generator_Demo/CMakeFiles/Generator_2.dir/Generator_2.cpp.o
cd /home/cgal_tester/build/src/cmake/platforms/ArchLinux-clang/test/Generator_Demo && /bin/clang++ -DCGAL_TEST_SUITE=1 -DCGAL_USE_GMPXX=1 -DQT_CORE_LIB -DQT_GUI_LIB -DQT_NO_KEYWORDS -DQT_OPENGLWIDGETS_LIB -DQT_OPENGL_LIB -DQT_WIDGETS_LIB -I/home/cgal_tester/build/src/cmake/platforms/ArchLinux-clang/test/Generator_Demo -I/mnt/testsuite/test/Generator_Demo -I/home/cgal_tester/build/src/cmake/platforms/ArchLinux-clang/include -I/mnt/testsuite/include -I/home/cgal_tester/build/src/cmake/platforms/ArchLinux-clang/test/AABB_tree_Demo -isystem /home/cgal_tester/build/src/cmake/platforms/ArchLinux-clang/test/Generator_Demo/Generator_2_autogen/include -isystem /usr/include/qt6/QtCore -isystem /usr/include/qt6 -isystem /usr/lib/qt6/mkspecs/linux-g++ -isystem /usr/include/qt6/QtOpenGLWidgets -isystem /usr/include/qt6/QtOpenGL -isystem /usr/include/qt6/QtGui -isystem /usr/include/qt6/QtWidgets -Wall  -fno-direct-access-external-data -MD -MT test/Generator_Demo/CMakeFiles/Generator_2.dir/Generator_2.cpp.o -MF CMakeFiles/Generator_2.dir/Generator_2.cpp.o.d -o CMakeFiles/Generator_2.dir/Generator_2.cpp.o -c /mnt/testsuite/test/Generator_Demo/Generator_2.cpp
In file included from /mnt/testsuite/test/Generator_Demo/Generator_2.cpp:27:
In file included from /mnt/testsuite/include/CGAL/Qt/DemosMainWindow.h:130:
/mnt/testsuite/include/CGAL/Qt/DemosMainWindow_impl.h:224:3: warning: ignoring return value of function declared with 'nodiscard' attribute [-Wunused-result]
  224 |   about_CGAL.open(QIODevice::ReadOnly);
      |   ^~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~
1 warning generated.
```


https://cgal.geometryfactory.com/CGAL/testsuite/CGAL-6.2-Ic-36/Generator_Demo/TestReport_gimeno_ArchLinux-clang.gz

## Release Management

* Affected package(s): `GraphicsView`
* Issue(s) solved (if any): n/a
* Feature/Small Feature (if any): n/a
* License and copyright ownership: no change
2025-11-19 14:41:07 +01:00
Sven Oesau e12a760f03 fixed Metis/Eigen3/Qt6 links in Thirdparty
removed LEDA from doc as it is outdated
2025-11-13 16:32:40 +01:00
Laurent Rineau 12445cc6e1 revert unintended modification 2025-11-13 11:52:21 +01:00
Sebastien Loriot 07347da411
Fix Ceres deprecation warning (#9121)
## Summary of Changes

Changing the used cmake target for Ceres to Ceres::ceres.

## Release Management

* Affected package(s): Installation, Polygon_mesh_processing
2025-11-13 10:02:36 +01:00
Laurent Rineau d226e504c4 fix a warning
use the correct implementation `popupAboutCGAL` from the base class
2025-11-12 16:48:59 +01:00
Laurent Rineau 097fc2c5ab fix memory leaks 2025-11-12 16:48:29 +01:00
Sébastien Loriot 066159f792 assertion should be before the removal... 2025-11-10 10:17:33 +01:00
Mael Rouxel-Labbé 31734df2ef Fix warning about discarding return type of function with [[nodiscard]] 2025-11-07 17:16:31 +01:00
Mael Rouxel-Labbé 3ef43324bb Fix bad 'if' condition & warning 2025-11-07 17:05:21 +01:00
Sébastien Loriot 3c7d507530 update doc + apply changes to the constrained version 2025-11-06 19:40:48 +01:00
Sebastien Loriot faae741666
Eigen3 5.0.0 support (#9112)
## Summary of Changes

Adding support for Eigen3 5.0.0 by updating CMakeLists.txt scripts.

## Release Management

* Issue(s) solved (if any): fix #9110
2025-11-06 10:03:20 +01:00
Sven Oesau 9e36c6744b adding support for Eigen3 5.0.0
moving the Eigen3 version check into CGAL_Eigen3_support.cmake
2025-11-06 10:01:01 +01:00
Sven Oesau 05bf3c4ffc Changing cmake target for Ceres 2025-11-04 17:04:58 +01:00
Sébastien Loriot 25005a97d8 clean up 2025-11-03 09:24:31 +01:00
Sébastien Loriot 3fe83c7ce0 handle non-triangular faces 2025-10-31 11:36:44 +01:00
Sebastien Loriot c60cc5049d
Workaround erros with recent gcc (#9105)
Should fix [those
errors](https://cgal.geometryfactory.com/CGAL/testsuite/CGAL-6.2-Ic-23/Stream_lines_2/TestReport_lrineau_Ubuntu-latest-GCC6-CXX1z.gz)
2025-10-30 20:17:22 +01:00
Sébastien Loriot 712464b690 try to please recent gcc 2025-10-21 08:26:34 +02:00
Sebastien Loriot b08f0a4aae
Handle case of identical projected points (#9100)
Do not try to insert constraint if two points are projected onto the
same 2D vertex
2025-10-17 10:06:08 +02:00
Sébastien Loriot 42068f6009 handle case of identical projected points 2025-10-15 11:03:16 +02:00
Sebastien Loriot 754e57ac3c
[OTR2] Deterministic reconstruction (#9092)
## Summary of Changes

Using timestamps to make iteration through vertices, edges and faces
deterministic

## Release Management

* Affected package(s): Optimal_transportation_reconstruction_2
* Issue(s) solved (if any): fix #8745
2025-10-13 09:33:46 +02:00
Sven Oesau 2f6e3defa7 using timestamps to make iteration through vertices, edges and faces deterministic 2025-10-01 13:42:30 +02:00
103 changed files with 451 additions and 296 deletions

View File

@ -1543,10 +1543,10 @@ does_satisfy_link_condition(typename boost::graph_traits<Graph>::edge_descriptor
* *
* After the collapse of edge `e` the following holds: * After the collapse of edge `e` the following holds:
* - The edge `e` is no longer in `g`. * - 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`. * - `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 `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 not a border halfedge, `p_o_h` is no longer in `g` and is replaced by `o_n_o_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. * - 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`. * - 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 lBottomFaceExists = ! is_border(qp,g);
bool lTopLeftFaceExists = lTopFaceExists && ! is_border(pt,g); bool lTopLeftFaceExists = lTopFaceExists && ! is_border(pt,g);
bool lBottomRightFaceExists = lBottomFaceExists && ! is_border(qb,g); bool lBottomRightFaceExists = lBottomFaceExists && ! is_border(qb,g);
bool lBottomIsTriangle = lBottomFaceExists && is_triangle(qp,g);
CGAL_precondition( !lTopFaceExists || (lTopFaceExists && ( degree(target(pt, g), g) > 2 ) ) ) ; bool lTopIsTriangle = lTopFaceExists && is_triangle(pq,g);
CGAL_precondition( !lBottomFaceExists || (lBottomFaceExists && ( degree(target(qb, g), g) > 2 ) ) ) ;
vertex_descriptor q = target(pq, g); vertex_descriptor q = target(pq, g);
vertex_descriptor p = source(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; 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 CGAL_precondition( ! is_border(opposite(pt, g),g) ) ; // p-q-t is a face of the mesh
if ( lTopLeftFaceExists ) 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 CGAL_precondition( ! is_border(opposite(qb, g),g) ) ; // p-q-b is a face of the mesh
if ( lBottomRightFaceExists ) 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. * 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`. * 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`, * and guarantees that an edge `e2`, for which `get(edge_is_constrained_map, e2)==true`,
* is not removed after the collapse. * is not removed after the collapse.
* *
@ -1669,14 +1668,14 @@ collapse_edge(typename boost::graph_traits<Graph>::edge_descriptor e,
* *
* \returns vertex `v1`. * \returns vertex `v1`.
* \pre This function requires `g` to be an oriented 2-manifold with or without boundaries. * \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. * 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, v0v1)==false`. * \pre `get(edge_is_constrained_map, e)==false`.
* \pre `v0` and `v1` are not both incident to a constrained edge. * \pre `v0` and `v1` are not both incident to a constrained edge.
*/ */
template<typename Graph, typename EdgeIsConstrainedMap> template<typename Graph, typename EdgeIsConstrainedMap>
typename boost::graph_traits<Graph>::vertex_descriptor 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, Graph& g,
EdgeIsConstrainedMap Edge_is_constrained_map) 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::vertex_descriptor vertex_descriptor;
typedef typename Traits::halfedge_descriptor halfedge_descriptor; typedef typename Traits::halfedge_descriptor halfedge_descriptor;
CGAL_precondition(is_valid_edge_descriptor(v0v1, g)); CGAL_precondition(is_valid_edge_descriptor(e, g));
CGAL_precondition(does_satisfy_link_condition(v0v1,g)); CGAL_precondition(does_satisfy_link_condition(e,g));
CGAL_precondition(!get(Edge_is_constrained_map, v0v1)); 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 qp = opposite(pq,g);
halfedge_descriptor pt = opposite(prev(pq,g),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 lTopFaceExists = ! is_border(pq,g) ;
bool lBottomFaceExists = ! is_border(qp,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 q = target(pq,g);
vertex_descriptor p = source(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: // 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 // p-t if it is not constrained and t-q otherwise
if ( lTopFaceExists ) if ( lTopIsTriangle )
{ {
if ( !get(Edge_is_constrained_map,edge(pt,g)) ) 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: // 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 // q-b if it is not constrained and b-p otherwise
if ( lBottomFaceExists ) if ( lBottomIsTriangle )
{ {
if ( !get(Edge_is_constrained_map,edge(qb,g)) ) 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) if ( face(edges_to_erase[0],g) == face(edges_to_erase[1],g)
&& (! is_border(edges_to_erase[0],g)) ) && (! is_border(edges_to_erase[0],g)) )
@ -1780,7 +1781,7 @@ collapse_edge(typename boost::graph_traits<Graph>::edge_descriptor v0v1,
} }
else else
{ {
if (lTopFaceExists) if (lTopIsTriangle)
{ {
if (!(is_border(edges_to_erase[0],g))){ if (!(is_border(edges_to_erase[0],g))){
join_face(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); remove_face(opposite(edges_to_erase[0],g),g);
return q; return q;
} }
else
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))
{ {
// q will be removed, swap it with p if (lBottomIsTriangle)
internal::swap_vertices(p, q, g); {
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;
} }
} }

View File

@ -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

View File

@ -2,7 +2,6 @@
#include <CGAL/boost/graph/Euler_operations.h> #include <CGAL/boost/graph/Euler_operations.h>
#include <CGAL/boost/graph/IO/OFF.h> #include <CGAL/boost/graph/IO/OFF.h>
#include <boost/range/distance.hpp> #include <boost/range/distance.hpp>
#include <string> #include <string>
@ -213,12 +212,30 @@ collapse_edge_test()
assert(found == 2); assert(found == 2);
CGAL::clear(test_mesh); 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() int main()
{ {
collapse_edge_test<Polyhedron>(); collapse_edge_test<Polyhedron>();
collapse_edge_test<SM>(); collapse_edge_test<SM>();

View File

@ -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_polygon_100_vertices.cpp")
create_single_source_cgal_program("benchmark_mv_34_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) include(CGAL_Eigen3_support)
if(TARGET CGAL::Eigen3_support) if(TARGET CGAL::Eigen3_support)
create_single_source_cgal_program("benchmark_hm_4_vertices.cpp") create_single_source_cgal_program("benchmark_hm_4_vertices.cpp")
target_link_libraries(benchmark_hm_4_vertices PUBLIC CGAL::Eigen3_support) target_link_libraries(benchmark_hm_4_vertices PUBLIC CGAL::Eigen3_support)

View File

@ -17,8 +17,9 @@ create_single_source_cgal_program("terrain_height_modeling.cpp")
# this code is deprecated: # this code is deprecated:
create_single_source_cgal_program("deprecated_coordinates.cpp") 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) include(CGAL_Eigen3_support)
if(TARGET CGAL::Eigen3_support) if(TARGET CGAL::Eigen3_support)
create_single_source_cgal_program("affine_coordinates.cpp") create_single_source_cgal_program("affine_coordinates.cpp")
target_link_libraries(affine_coordinates PUBLIC CGAL::Eigen3_support) target_link_libraries(affine_coordinates PUBLIC CGAL::Eigen3_support)

View File

@ -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_mv_deprecated_api.cpp")
create_single_source_cgal_program("test_dh_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) include(CGAL_Eigen3_support)
if(TARGET CGAL::Eigen3_support) if(TARGET CGAL::Eigen3_support)
create_single_source_cgal_program("test_hm_unit_square.cpp") create_single_source_cgal_program("test_hm_unit_square.cpp")
target_link_libraries(test_hm_unit_square PUBLIC CGAL::Eigen3_support) target_link_libraries(test_hm_unit_square PUBLIC CGAL::Eigen3_support)

View File

@ -11,7 +11,7 @@ project(Basic_viewer_Examples)
#CGAL_Qt6 is needed for the drawing. #CGAL_Qt6 is needed for the drawing.
find_package(CGAL REQUIRED OPTIONAL_COMPONENTS Qt6) find_package(CGAL REQUIRED OPTIONAL_COMPONENTS Qt6)
find_package(Eigen3 3.1.0) find_package(Eigen3 QUIET)
include(CGAL_Eigen3_support) include(CGAL_Eigen3_support)
create_single_source_cgal_program("draw_lcc.cpp") create_single_source_cgal_program("draw_lcc.cpp")

View File

@ -4,7 +4,7 @@ project(Approximate_min_ellipsoid_d_Examples)
find_package(CGAL REQUIRED) find_package(CGAL REQUIRED)
# Use Eigen # Use Eigen
find_package(Eigen3 3.1.0 QUIET) #(3.1.0 or greater) find_package(Eigen3 QUIET)
include(CGAL_Eigen3_support) include(CGAL_Eigen3_support)
# create a target per cppfile # create a target per cppfile

View File

@ -7,7 +7,7 @@ project(Bounding_volumes_Tests)
find_package(CGAL REQUIRED COMPONENTS Core) find_package(CGAL REQUIRED COMPONENTS Core)
# Use Eigen # Use Eigen
find_package(Eigen3 3.1.0 QUIET) #(3.1.0 or greater) find_package(Eigen3 QUIET)
include(CGAL_Eigen3_support) include(CGAL_Eigen3_support)
# create a target per cppfile # create a target per cppfile

View File

@ -20,8 +20,9 @@ set(CMAKE_LIBRARY_OUTPUT_DIRECTORY "${CMAKE_RUNTIME_OUTPUT_DIRECTORY}")
find_package(CGAL REQUIRED COMPONENTS Core) 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) include(CGAL_Eigen3_support)
if(NOT TARGET CGAL::Eigen3_support) if(NOT TARGET CGAL::Eigen3_support)
message("NOTICE: This project requires the Eigen library, and will not be compiled.") message("NOTICE: This project requires the Eigen library, and will not be compiled.")
return() return()

View File

@ -23,8 +23,9 @@ if(NOT TARGET CGAL::Boost_iostreams_support)
set(Classification_dependencies_met FALSE) set(Classification_dependencies_met FALSE)
endif() endif()
find_package(Eigen3 3.1.0 QUIET) #(3.1.0 or greater) find_package(Eigen3 QUIET)
include(CGAL_Eigen3_support) include(CGAL_Eigen3_support)
if(NOT TARGET CGAL::Eigen3_support) if(NOT TARGET CGAL::Eigen3_support)
message("NOTICE: This project requires the Eigen library, and will not be compiled.") message("NOTICE: This project requires the Eigen library, and will not be compiled.")
set(Classification_dependencies_met FALSE) set(Classification_dependencies_met FALSE)

View File

@ -23,8 +23,9 @@ if(NOT TARGET CGAL::Boost_iostreams_support)
set(Classification_dependencies_met FALSE) set(Classification_dependencies_met FALSE)
endif() endif()
find_package(Eigen3 3.1.0 QUIET) #(3.1.0 or greater) find_package(Eigen3 QUIET)
include(CGAL_Eigen3_support) include(CGAL_Eigen3_support)
if(NOT TARGET CGAL::Eigen3_support) if(NOT TARGET CGAL::Eigen3_support)
message("NOTICE: This project requires the Eigen library, and will not be compiled.") message("NOTICE: This project requires the Eigen library, and will not be compiled.")
set(Classification_dependencies_met FALSE) set(Classification_dependencies_met FALSE)

View File

@ -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. The component `CGAL_Qt6` is essential to run the \cgal demos and basic viewers.
It requires \qt6 installed on your system. It requires \qt6 installed on your system.
In case \qt is not yet installed on your system, you can download 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: The exhaustive list of \qt6 components used in demos is:
`Core`, `Gui`, `Help`, `OpenGL`, `OpenGLWidgets`, `Qml`, `Svg`, `Widgets`, `Core`, `Gui`, `Help`, `OpenGL`, `OpenGLWidgets`, `Qml`, `Svg`, `Widgets`,
`WebSockets`, `Network`, and `qcollectiongenerator` (with `sqlite` driver plugin). `WebSockets`, `Network`, and `qcollectiongenerator` (with `sqlite` driver plugin).
\subsection thirdpartyEigen Eigen \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 \eigen is a `C++` template library for linear algebra. \eigen supports all
matrix sizes, various matrix decomposition methods and sparse linear solvers. 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 executables should be linked with the CMake imported target
`CGAL::Eigen3_support` provided in `CGAL_Eigen3_support.cmake`. `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 \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` `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. 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) \subsection thirdpartyMPFI Multiple Precision Floating-point Interval (MPFI)
<b>Version 1.4 or later</b> <b>Version 1.4 or later</b>
@ -278,7 +267,7 @@ vcpkg install suitesparse
\subsection thirdpartyMETIS METIS \subsection thirdpartyMETIS METIS
<b>Version 5.1 or later</b> <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. and designed to partition graphs and produce fill-reducing matrix orderings.
\cgal offers wrappers around some of the methods of the \metis library \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). and, by extension, of surface meshes (see Section \ref BGLPartitioning of the package \ref PkgBGL).
More information is available on the METIS library 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 \subsection thirdpartyzlib zlib

View File

@ -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("random_segments2.cpp")
create_single_source_cgal_program("sphere_d.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) include(CGAL_Eigen3_support)
if(TARGET CGAL::Eigen3_support) if(TARGET CGAL::Eigen3_support)
create_single_source_cgal_program("random_points_in_tetrahedral_mesh_3.cpp") 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) target_link_libraries(random_points_in_tetrahedral_mesh_3 PRIVATE CGAL::Eigen3_support)

View File

@ -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_2.cpp")
create_single_source_cgal_program("test_triangle_3.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) include(CGAL_Eigen3_support)
if(TARGET CGAL::Eigen3_support) if(TARGET CGAL::Eigen3_support)
create_single_source_cgal_program("generic_random_test.cpp") create_single_source_cgal_program("generic_random_test.cpp")
target_link_libraries(generic_random_test PRIVATE CGAL::Eigen3_support) target_link_libraries(generic_random_test PRIVATE CGAL::Eigen3_support)

View File

@ -8,7 +8,7 @@ find_package(CGAL REQUIRED OPTIONAL_COMPONENTS Qt6)
find_package(Qt6 QUIET COMPONENTS Widgets) 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) include(CGAL_Eigen3_support)
if(NOT TARGET CGAL::Eigen3_support) if(NOT TARGET CGAL::Eigen3_support)

View File

@ -6,8 +6,9 @@ project(Polygon_Demo)
find_package(CGAL REQUIRED OPTIONAL_COMPONENTS Qt6 Core) 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) include(CGAL_Eigen3_support)
if(NOT TARGET CGAL::Eigen3_support) if(NOT TARGET CGAL::Eigen3_support)
message("NOTICE: This demo requires the Eigen library, and will not be compiled.") message("NOTICE: This demo requires the Eigen library, and will not be compiled.")
return() return()

View File

@ -221,7 +221,10 @@ void
DemosMainWindow::popupAboutBox(QString title, QString html_resource_name) DemosMainWindow::popupAboutBox(QString title, QString html_resource_name)
{ {
QFile about_CGAL(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(); QString about_CGAL_txt = QTextStream(&about_CGAL).readAll();
#ifdef CGAL_VERSION_STR #ifdef CGAL_VERSION_STR
QString cgal_version(CGAL_VERSION_STR); QString cgal_version(CGAL_VERSION_STR);

View File

@ -7,8 +7,9 @@ project(Heat_method_3_Examples)
# CGAL and its components # CGAL and its components
find_package(CGAL REQUIRED) find_package(CGAL REQUIRED)
find_package(Eigen3 3.3.0 QUIET) find_package(Eigen3 QUIET)
include(CGAL_Eigen3_support) include(CGAL_Eigen3_support)
if(NOT TARGET 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.") message("NOTICE: These examples require the Eigen library (3.3 or greater), and will not be compiled.")
return() return()

View File

@ -7,8 +7,9 @@ project(Heat_method_3_Tests)
# CGAL and its components # CGAL and its components
find_package(CGAL REQUIRED) find_package(CGAL REQUIRED)
find_package(Eigen3 3.3.0 QUIET) find_package(Eigen3 QUIET)
include(CGAL_Eigen3_support) include(CGAL_Eigen3_support)
if(NOT TARGET 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.") message("NOTICE: These tests require the Eigen library (3.3 or greater), and will not be compiled.")
return() return()

View File

@ -3,5 +3,5 @@ if(CERES_FOUND AND NOT TARGET CGAL::Ceres_support)
set_target_properties(CGAL::Ceres_support PROPERTIES set_target_properties(CGAL::Ceres_support PROPERTIES
INTERFACE_COMPILE_DEFINITIONS "CGAL_PMP_USE_CERES_SOLVER" INTERFACE_COMPILE_DEFINITIONS "CGAL_PMP_USE_CERES_SOLVER"
INTERFACE_INCLUDE_DIRECTORIES "${CERES_INCLUDE_DIRS}" INTERFACE_INCLUDE_DIRECTORIES "${CERES_INCLUDE_DIRS}"
INTERFACE_LINK_LIBRARIES "ceres") INTERFACE_LINK_LIBRARIES "Ceres::ceres")
endif() endif()

View File

@ -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((EIGEN3_FOUND OR Eigen3_FOUND) AND NOT TARGET CGAL::Eigen3_support)
if(NOT TARGET Threads::Threads) if(NOT TARGET Threads::Threads)
find_package(Threads REQUIRED) find_package(Threads REQUIRED)

View File

@ -7,8 +7,9 @@ project(Jet_fitting_3_Examples)
find_package(CGAL REQUIRED) find_package(CGAL REQUIRED)
# use Eigen # use Eigen
find_package(Eigen3 3.1.0 QUIET) #(requires 3.1.0 or greater) find_package(Eigen3 QUIET)
include(CGAL_Eigen3_support) include(CGAL_Eigen3_support)
if(TARGET CGAL::Eigen3_support) if(TARGET CGAL::Eigen3_support)
# Link with Boost.ProgramOptions (optional) # Link with Boost.ProgramOptions (optional)

View File

@ -7,8 +7,9 @@ project(Jet_fitting_3_Tests)
find_package(CGAL REQUIRED) find_package(CGAL REQUIRED)
# use Eigen # use Eigen
find_package(Eigen3 3.1.0 QUIET) #(requires 3.1.0 or greater) find_package(Eigen3 QUIET)
include(CGAL_Eigen3_support) include(CGAL_Eigen3_support)
if(TARGET CGAL::Eigen3_support) if(TARGET CGAL::Eigen3_support)
create_single_source_cgal_program("blind_1pt.cpp") create_single_source_cgal_program("blind_1pt.cpp")
target_link_libraries(blind_1pt PUBLIC CGAL::Eigen3_support) target_link_libraries(blind_1pt PUBLIC CGAL::Eigen3_support)

View File

@ -8,7 +8,7 @@ project(Kinetic_space_partition_Examples)
find_package(CGAL REQUIRED) find_package(CGAL REQUIRED)
include(CGAL_CreateSingleSourceCGALProgram) include(CGAL_CreateSingleSourceCGALProgram)
find_package(Eigen3 3.1.0 REQUIRED) find_package(Eigen3 QUIET)
include(CGAL_Eigen3_support) include(CGAL_Eigen3_support)
if(TARGET CGAL::Eigen3_support) if(TARGET CGAL::Eigen3_support)

View File

@ -8,7 +8,7 @@ project(Kinetic_space_partition_Tests)
find_package(CGAL REQUIRED) find_package(CGAL REQUIRED)
include(CGAL_CreateSingleSourceCGALProgram) include(CGAL_CreateSingleSourceCGALProgram)
find_package(Eigen3 3.1.0 REQUIRED) find_package(Eigen3 QUIET)
include(CGAL_Eigen3_support) include(CGAL_Eigen3_support)
if(TARGET CGAL::Eigen3_support) if(TARGET CGAL::Eigen3_support)

View File

@ -8,7 +8,7 @@ project(Kinetic_surface_reconstruction_Examples)
find_package(CGAL REQUIRED) find_package(CGAL REQUIRED)
include(CGAL_CreateSingleSourceCGALProgram) include(CGAL_CreateSingleSourceCGALProgram)
find_package(Eigen3 3.1.0 REQUIRED) find_package(Eigen3 QUIET)
include(CGAL_Eigen3_support) include(CGAL_Eigen3_support)
if(TARGET CGAL::Eigen3_support) if(TARGET CGAL::Eigen3_support)

View File

@ -8,7 +8,7 @@ project(Kinetic_surface_reconstruction_Tests)
find_package(CGAL REQUIRED) find_package(CGAL REQUIRED)
include(CGAL_CreateSingleSourceCGALProgram) include(CGAL_CreateSingleSourceCGALProgram)
find_package(Eigen3 3.1.0 REQUIRED) find_package(Eigen3 QUIET)
include(CGAL_Eigen3_support) include(CGAL_Eigen3_support)
if(TARGET CGAL::Eigen3_support) if(TARGET CGAL::Eigen3_support)

View File

@ -52,12 +52,14 @@ if(Qt6_FOUND)
add_definitions(-DSCENE_IMAGE_GL_BUFFERS_AVAILABLE) add_definitions(-DSCENE_IMAGE_GL_BUFFERS_AVAILABLE)
endif(Qt6_FOUND) 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( set_package_properties(
Eigen3 PROPERTIES Eigen3 PROPERTIES
DESCRIPTION "A library for linear algebra." DESCRIPTION "A library for linear algebra."
PURPOSE "Required for most plugins (Meshing, Mesh and Point Set Processing, etc.).") PURPOSE "Required for most plugins (Meshing, Mesh and Point Set Processing, etc.).")
include(CGAL_Eigen3_support)
if(NOT TARGET CGAL::Eigen3_support) if(NOT TARGET CGAL::Eigen3_support)
message(STATUS "NOTICE: Eigen was not found.") message(STATUS "NOTICE: Eigen was not found.")
endif() endif()

View File

@ -79,8 +79,9 @@ target_link_libraries(
scene_implicit_function_item) scene_implicit_function_item)
# Use Eigen # Use Eigen
find_package(Eigen3 3.1.0 QUIET) #(3.1.0 or greater) find_package(Eigen3 QUIET)
include(CGAL_Eigen3_support) include(CGAL_Eigen3_support)
if(TARGET CGAL::Eigen3_support) if(TARGET CGAL::Eigen3_support)
target_link_libraries(mesh_3_optimization_plugin PUBLIC CGAL::Eigen3_support) target_link_libraries(mesh_3_optimization_plugin PUBLIC CGAL::Eigen3_support)
else() else()

View File

@ -1,6 +1,6 @@
include(CGALlab_macros) 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) qt6_wrap_ui(editionUI_FILES Deform_mesh.ui)
add_item(scene_edit_item add_item(scene_edit_item

View File

@ -14,7 +14,7 @@ cgal_lab_plugin(
target_link_libraries(tetrahedral_remeshing_plugin PUBLIC scene_c3t3_item target_link_libraries(tetrahedral_remeshing_plugin PUBLIC scene_c3t3_item
${OPENGL_gl_LIBRARY}) ${OPENGL_gl_LIBRARY})
find_package(Eigen3 3.1.0 REQUIRED) #(3.1.0 or greater) find_package(Eigen3 QUIET)
include(CGAL_Eigen3_support) include(CGAL_Eigen3_support)
if(TARGET CGAL::Eigen3_support) if(TARGET CGAL::Eigen3_support)
target_link_libraries(tetrahedral_remeshing_plugin PUBLIC CGAL::Eigen3_support) target_link_libraries(tetrahedral_remeshing_plugin PUBLIC CGAL::Eigen3_support)

View File

@ -19,8 +19,9 @@ if(CGAL_ACTIVATE_CONCURRENT_MESH_3 OR "$ENV{CGAL_ACTIVATE_CONCURRENT_MESH_3}")
endif() endif()
# Use Eigen # Use Eigen
find_package(Eigen3 3.1.0 QUIET) #(3.1.0 or greater) find_package(Eigen3 QUIET)
include(CGAL_Eigen3_support) include(CGAL_Eigen3_support)
if(NOT TARGET CGAL::Eigen3_support) if(NOT TARGET CGAL::Eigen3_support)
message("NOTICE: All examples require the Eigen3 library, and will not be compiled.") message("NOTICE: All examples require the Eigen3 library, and will not be compiled.")
return() return()

View File

@ -7,8 +7,9 @@ project( Mesh_3_Tests )
find_package(CGAL REQUIRED COMPONENTS ImageIO) find_package(CGAL REQUIRED COMPONENTS ImageIO)
# Use Eigen # Use Eigen
find_package(Eigen3 3.1.0 QUIET) #(3.1.0 or greater) find_package(Eigen3 QUIET)
include(CGAL_Eigen3_support) include(CGAL_Eigen3_support)
if (NOT TARGET CGAL::Eigen3_support) if (NOT TARGET CGAL::Eigen3_support)
message("NOTICE: This project requires the Eigen library, and will not be compiled.") message("NOTICE: This project requires the Eigen library, and will not be compiled.")
return() return()

View File

@ -14,6 +14,7 @@ find_package(CGAL REQUIRED)
find_package(Eigen3 QUIET) find_package(Eigen3 QUIET)
include(CGAL_Eigen3_support) include(CGAL_Eigen3_support)
if(TARGET CGAL::Eigen3_support) if(TARGET CGAL::Eigen3_support)
file( file(
GLOB cppfiles GLOB cppfiles

View File

@ -80,8 +80,10 @@ if(NOT CGAL_DISABLE_GMP)
create_single_source_cgal_program( "Gmpfi.cpp" ) create_single_source_cgal_program( "Gmpfi.cpp" )
create_single_source_cgal_program( "Gmpfr_bug.cpp" ) create_single_source_cgal_program( "Gmpfr_bug.cpp" )
create_single_source_cgal_program( "test_eigen.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) include(CGAL_Eigen3_support)
if (TARGET CGAL::Eigen3_support) if (TARGET CGAL::Eigen3_support)
target_link_libraries(test_eigen PUBLIC CGAL::Eigen3_support) target_link_libraries(test_eigen PUBLIC CGAL::Eigen3_support)
endif() endif()

View File

@ -7,8 +7,9 @@ project(Optimal_bounding_box_Benchmark)
# CGAL and its components # CGAL and its components
find_package(CGAL REQUIRED) find_package(CGAL REQUIRED)
find_package(Eigen3 3.1.0 QUIET) #(3.1.0 or greater) find_package(Eigen3 QUIET)
include(CGAL_Eigen3_support) include(CGAL_Eigen3_support)
if(NOT TARGET CGAL::Eigen3_support) if(NOT TARGET CGAL::Eigen3_support)
message("NOTICE: This project requires the Eigen library, and will not be compiled.") message("NOTICE: This project requires the Eigen library, and will not be compiled.")
return() return()

View File

@ -6,8 +6,9 @@ project(Optimal_bounding_box_Examples)
find_package(CGAL REQUIRED) find_package(CGAL REQUIRED)
find_package(Eigen3 3.1.0 QUIET) #(3.1.0 or greater) find_package(Eigen3 QUIET)
include(CGAL_Eigen3_support) include(CGAL_Eigen3_support)
if(NOT TARGET CGAL::Eigen3_support) if(NOT TARGET CGAL::Eigen3_support)
message("NOTICE: This project requires the Eigen library, and will not be compiled.") message("NOTICE: This project requires the Eigen library, and will not be compiled.")
return() return()

View File

@ -6,8 +6,9 @@ project(Optimal_bounding_box_Tests)
find_package(CGAL REQUIRED) find_package(CGAL REQUIRED)
find_package(Eigen3 3.1.0 QUIET) #(3.1.0 or greater) find_package(Eigen3 QUIET)
include(CGAL_Eigen3_support) include(CGAL_Eigen3_support)
if(NOT TARGET CGAL::Eigen3_support) if(NOT TARGET CGAL::Eigen3_support)
message("NOTICE: This project requires the Eigen library, and will not be compiled.") message("NOTICE: This project requires the Eigen library, and will not be compiled.")
return() return()

View File

@ -17,6 +17,8 @@
#include <CGAL/OTR_2/Cost.h> #include <CGAL/OTR_2/Cost.h>
#include <CGAL/Triangulation_face_base_2.h> #include <CGAL/Triangulation_face_base_2.h>
#include <CGAL/Has_timestamp.h>
#include <CGAL/Time_stamper.h>
#include <vector> #include <vector>
@ -62,6 +64,8 @@ private:
FT m_relevance[3]; FT m_relevance[3];
std::size_t time_stamp_ = std::size_t(-2);
public: public:
Reconstruction_face_base_2() Reconstruction_face_base_2()
{ {
@ -190,6 +194,18 @@ public:
for (int i = 0; i < 3; ++i) for (int i = 0; i < 3; ++i)
clean_samples(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--------------------- //---------------STRUCT LESS FACE_HANDLE---------------------

View File

@ -16,6 +16,8 @@
#include <CGAL/Triangulation_vertex_base_2.h> #include <CGAL/Triangulation_vertex_base_2.h>
#include <CGAL/Has_timestamp.h>
#include <CGAL/Time_stamper.h>
#include <CGAL/OTR_2/Sample.h> #include <CGAL/OTR_2/Sample.h>
namespace CGAL { namespace CGAL {
@ -53,6 +55,7 @@ private:
int m_sample; int m_sample;
Point m_relocated; Point m_relocated;
FT m_relevance; FT m_relevance;
std::size_t time_stamp_ = std::size_t(-2);
public: public:
@ -110,6 +113,18 @@ public:
Point& relocated() { return m_relocated; } Point& relocated() { return m_relocated; }
bool has_sample_assigned() const { return sample() != -1; } 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--------------------- //---------------STRUCT LESS VERTEX_HANDLE---------------------
template <class T> template <class T>

View File

@ -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("octree_surface_mesh.cpp")
create_single_source_cgal_program("quadtree_build_manually.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) include(CGAL_Eigen3_support)
if (TARGET CGAL::Eigen3_support) if (TARGET CGAL::Eigen3_support)
create_single_source_cgal_program("orthtree_build.cpp") create_single_source_cgal_program("orthtree_build.cpp")
target_link_libraries(orthtree_build PUBLIC CGAL::Eigen3_support) target_link_libraries(orthtree_build PUBLIC CGAL::Eigen3_support)

View File

@ -8,8 +8,9 @@ project(Periodic_3_mesh_3_Examples)
find_package(CGAL REQUIRED) find_package(CGAL REQUIRED)
# Use Eigen # Use Eigen
find_package(Eigen3 3.1.0 QUIET) #(3.1.0 or greater) find_package(Eigen3 QUIET)
include(CGAL_Eigen3_support) include(CGAL_Eigen3_support)
if(NOT TARGET CGAL::Eigen3_support) if(NOT TARGET CGAL::Eigen3_support)
message("NOTICE: This project requires the Eigen library, and will not be compiled.") message("NOTICE: This project requires the Eigen library, and will not be compiled.")
return() return()

View File

@ -7,8 +7,9 @@ project(Periodic_3_mesh_3_Tests)
find_package(CGAL REQUIRED COMPONENTS ImageIO) find_package(CGAL REQUIRED COMPONENTS ImageIO)
# Use Eigen # Use Eigen
find_package(Eigen3 3.1.0 QUIET) #(3.1.0 or greater) find_package(Eigen3 QUIET)
include(CGAL_Eigen3_support) include(CGAL_Eigen3_support)
if(NOT TARGET CGAL::Eigen3_support) if(NOT TARGET CGAL::Eigen3_support)
message("NOTICE: This project requires the Eigen library, and will not be compiled.") message("NOTICE: This project requires the Eigen library, and will not be compiled.")
return() return()

View File

@ -138,7 +138,12 @@ public Q_SLOTS:
private: private:
void showFileBox(QString title, QString fileName) { void showFileBox(QString title, QString fileName) {
QFile textFile(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, QMessageBox mb(QMessageBox::NoIcon,
title, title,
QTextStream(&textFile).readAll(), QTextStream(&textFile).readAll(),

View File

@ -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_advanced.cpp")
create_single_source_cgal_program("point_set_read_ply.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) include(CGAL_Eigen3_support)
if(TARGET CGAL::Eigen3_support) if(TARGET CGAL::Eigen3_support)
create_single_source_cgal_program("point_set_algo.cpp") create_single_source_cgal_program("point_set_algo.cpp")
target_link_libraries(point_set_algo PUBLIC CGAL::Eigen3_support) target_link_libraries(point_set_algo PUBLIC CGAL::Eigen3_support)

View File

@ -67,8 +67,9 @@ else()
endif() endif()
# Use Eigen # Use Eigen
find_package(Eigen3 3.1.0 QUIET) #(requires 3.1.0 or greater) find_package(Eigen3 QUIET)
include(CGAL_Eigen3_support) include(CGAL_Eigen3_support)
if(TARGET CGAL::Eigen3_support) if(TARGET CGAL::Eigen3_support)
# Executables that require Eigen # Executables that require Eigen

View File

@ -47,8 +47,9 @@ else()
endif() endif()
# Use Eigen # Use Eigen
find_package(Eigen3 3.1.0 QUIET) #(requires 3.1.0 or greater) find_package(Eigen3 QUIET)
include(CGAL_Eigen3_support) include(CGAL_Eigen3_support)
if(TARGET CGAL::Eigen3_support) if(TARGET CGAL::Eigen3_support)
# Executables that require Eigen # Executables that require Eigen
create_single_source_cgal_program( "normal_estimation_test.cpp" ) create_single_source_cgal_program( "normal_estimation_test.cpp" )

View File

@ -21,9 +21,10 @@ endif()
# Activate Parallelism in Mesh_3 # Activate Parallelism in Mesh_3
option(CGAL_ACTIVATE_CONCURRENT_MESH_3 "Activate parallelism in Mesh_3" OFF) option(CGAL_ACTIVATE_CONCURRENT_MESH_3 "Activate parallelism in Mesh_3" OFF)
# Find Eigen3 (requires 3.1.0 or greater) # Find Eigen3
find_package(Eigen3 3.1.0 QUIET) find_package(Eigen3 QUIET)
include(CGAL_Eigen3_support) include(CGAL_Eigen3_support)
if(TARGET CGAL::Eigen3_support) if(TARGET CGAL::Eigen3_support)
# Executables that require Eigen 3 # Executables that require Eigen 3
create_single_source_cgal_program("poisson_reconstruction_example.cpp") create_single_source_cgal_program("poisson_reconstruction_example.cpp")

View File

@ -18,7 +18,7 @@ if(MSVC)
message(STATUS "USING RELEASE EXEFLAGS = '${CMAKE_EXE_LINKER_FLAGS} ${CMAKE_EXE_LINKER_FLAGS_RELEASE}'") message(STATUS "USING RELEASE EXEFLAGS = '${CMAKE_EXE_LINKER_FLAGS} ${CMAKE_EXE_LINKER_FLAGS_RELEASE}'")
endif() endif()
find_package(Eigen3 3.1.0 QUIET) #(requires 3.1.0 or greater) find_package(Eigen3 QUIET)
include(CGAL_Eigen3_support) include(CGAL_Eigen3_support)
if(TARGET CGAL::Eigen3_support) if(TARGET CGAL::Eigen3_support)
# Executables that require Eigen 3.1 # Executables that require Eigen 3.1

View File

@ -7,8 +7,9 @@ project(Polygon_mesh_processing)
# CGAL and its components # CGAL and its components
find_package(CGAL REQUIRED) 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) include(CGAL_Eigen3_support)
if(NOT TARGET CGAL::Eigen3_support) if(NOT TARGET CGAL::Eigen3_support)
message("NOTICE: Benchmarks require Eigen 3.2 (or greater), and will not be compiled") message("NOTICE: Benchmarks require Eigen 3.2 (or greater), and will not be compiled")
return() return()

View File

@ -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("triangle_mesh_autorefinement.cpp")
create_single_source_cgal_program("soup_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) include(CGAL_Eigen3_support)
if(TARGET CGAL::Eigen3_support) if(TARGET CGAL::Eigen3_support)
create_single_source_cgal_program("hole_filling_example.cpp") create_single_source_cgal_program("hole_filling_example.cpp")
target_link_libraries(hole_filling_example PUBLIC CGAL::Eigen3_support) target_link_libraries(hole_filling_example PUBLIC CGAL::Eigen3_support)

View File

@ -1447,6 +1447,12 @@ triangulate_hole_polyline_with_cdt(const PointRange& points,
vertices[v->info()] = v; vertices[v->info()] = v;
} }
if (vertices.size()!=cdt.number_of_vertices())
{
visitor.end_planar_phase(false);
return false;
}
try try
{ {
for (std::size_t i = 0; i < size; ++i) { for (std::size_t i = 0; i < size; ++i) {

View File

@ -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("issue_7164.cpp")
# create_single_source_cgal_program("test_pmp_repair_self_intersections.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) include(CGAL_Eigen3_support)
if(TARGET CGAL::Eigen3_support) if(TARGET CGAL::Eigen3_support)
create_single_source_cgal_program("fairing_test.cpp") create_single_source_cgal_program("fairing_test.cpp")
target_link_libraries(fairing_test PUBLIC CGAL::Eigen3_support) target_link_libraries(fairing_test PUBLIC CGAL::Eigen3_support)

View File

@ -8,8 +8,9 @@ project(Polygonal_surface_reconstruction_Examples)
# CGAL and its components # CGAL and its components
find_package(CGAL REQUIRED) 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) include(CGAL_Eigen3_support)
if(NOT TARGET CGAL::Eigen3_support) if(NOT TARGET CGAL::Eigen3_support)
message("NOTICE: This project requires Eigen 3.1 (or greater), and will not be compiled.") message("NOTICE: This project requires Eigen 3.1 (or greater), and will not be compiled.")
return() return()

View File

@ -8,8 +8,9 @@ project(Polygonal_surface_reconstruction_Tests)
# CGAL and its components # CGAL and its components
find_package(CGAL REQUIRED) 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) include(CGAL_Eigen3_support)
if(NOT TARGET CGAL::Eigen3_support) if(NOT TARGET CGAL::Eigen3_support)
message("NOTICE: This project requires Eigen 3.1 (or greater), and will not be compiled.") message("NOTICE: This project requires Eigen 3.1 (or greater), and will not be compiled.")
return() return()

View File

@ -8,8 +8,9 @@ include_directories(./)
# Find CGAL and CGAL Qt6 # Find CGAL and CGAL Qt6
find_package(CGAL REQUIRED OPTIONAL_COMPONENTS 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) include(CGAL_Eigen3_support)
if(NOT TARGET CGAL::Eigen3_support) if(NOT TARGET CGAL::Eigen3_support)
message("NOTICE: This project requires the Eigen library, and will not be compiled.") message("NOTICE: This project requires the Eigen library, and will not be compiled.")
return() return()

View File

@ -7,8 +7,9 @@ project(Principal_component_analysis_Examples)
find_package(CGAL REQUIRED) find_package(CGAL REQUIRED)
# Use Eigen # Use Eigen
find_package(Eigen3 3.1.0 QUIET) #(requires 3.1.0 or greater) find_package(Eigen3 QUIET)
include(CGAL_Eigen3_support) include(CGAL_Eigen3_support)
if(NOT TARGET CGAL::Eigen3_support) if(NOT TARGET CGAL::Eigen3_support)
message("NOTICE: This project requires Eigen 3.1 (or greater), and will not be compiled.") message("NOTICE: This project requires Eigen 3.1 (or greater), and will not be compiled.")
return() return()

View File

@ -7,8 +7,9 @@ project(Principal_component_analysis_Tests)
find_package(CGAL REQUIRED) find_package(CGAL REQUIRED)
# Use Eigen # Use Eigen
find_package(Eigen3 3.1.0 QUIET) #(requires 3.1.0 or greater) find_package(Eigen3 QUIET)
include(CGAL_Eigen3_support) include(CGAL_Eigen3_support)
if(NOT TARGET CGAL::Eigen3_support) if(NOT TARGET CGAL::Eigen3_support)
message("NOTICE: This project requires Eigen 3.1 (or greater), and will not be compiled.") message("NOTICE: This project requires Eigen 3.1 (or greater), and will not be compiled.")
return() return()

View File

@ -6,8 +6,9 @@ find_package(CGAL REQUIRED)
create_single_source_cgal_program("dynamic_properties.cpp") 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) include(CGAL_Eigen3_support)
if(TARGET CGAL::Eigen3_support) if(TARGET CGAL::Eigen3_support)
create_single_source_cgal_program("custom_property_map.cpp") create_single_source_cgal_program("custom_property_map.cpp")
target_link_libraries(custom_property_map PUBLIC CGAL::Eigen3_support) target_link_libraries(custom_property_map PUBLIC CGAL::Eigen3_support)

View File

@ -4,8 +4,9 @@ project(Ridges_3_Examples)
find_package(CGAL REQUIRED) 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) include(CGAL_Eigen3_support)
if(TARGET CGAL::Eigen3_support) if(TARGET CGAL::Eigen3_support)
# Link with Boost.ProgramOptions (optional) # Link with Boost.ProgramOptions (optional)

View File

@ -6,8 +6,9 @@ project(Ridges_3_Tests)
find_package(CGAL REQUIRED) 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) include(CGAL_Eigen3_support)
if(TARGET CGAL::Eigen3_support) if(TARGET CGAL::Eigen3_support)
create_single_source_cgal_program("ridge_test.cpp") create_single_source_cgal_program("ridge_test.cpp")
target_link_libraries(ridge_test PUBLIC CGAL::Eigen3_support) target_link_libraries(ridge_test PUBLIC CGAL::Eigen3_support)

View File

@ -9,8 +9,9 @@ find_package(CGAL REQUIRED)
create_single_source_cgal_program( "test_simplicial_cb_vb.cpp") create_single_source_cgal_program( "test_simplicial_cb_vb.cpp")
create_single_source_cgal_program( "test_tet_soup_to_c3t3.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) include(CGAL_Eigen3_support)
if(TARGET CGAL::Eigen3_support) if(TARGET CGAL::Eigen3_support)
create_single_source_cgal_program( "test_c3t3.cpp" ) create_single_source_cgal_program( "test_c3t3.cpp" )
create_single_source_cgal_program( "test_c3t3_io.cpp" ) create_single_source_cgal_program( "test_c3t3_io.cpp" )

View File

@ -14,8 +14,9 @@ if(ACTIVATE_CONCURRENCY)
endif() endif()
endif() endif()
find_package(Eigen3 3.1.0 QUIET) find_package(Eigen3 QUIET)
include(CGAL_Eigen3_support) include(CGAL_Eigen3_support)
if(TARGET CGAL::Eigen3_support) if(TARGET CGAL::Eigen3_support)
create_single_source_cgal_program("scale_space.cpp") create_single_source_cgal_program("scale_space.cpp")
target_link_libraries(scale_space PUBLIC CGAL::Eigen3_support) target_link_libraries(scale_space PUBLIC CGAL::Eigen3_support)

View File

@ -6,8 +6,9 @@ project(Shape_detection_Benchmarks)
find_package(CGAL REQUIRED COMPONENTS Core) 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) include(CGAL_Eigen3_support)
if(TARGET CGAL::Eigen3_support) if(TARGET CGAL::Eigen3_support)
create_single_source_cgal_program("benchmark_region_growing_on_point_set_2.cpp") 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) target_link_libraries(benchmark_region_growing_on_point_set_2 PUBLIC CGAL::Eigen3_support)

View File

@ -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_parameters.cpp")
create_single_source_cgal_program("efficient_RANSAC_with_point_access.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) include(CGAL_Eigen3_support)
if(TARGET CGAL::Eigen3_support) if(TARGET CGAL::Eigen3_support)
message(STATUS "Found Eigen 3") message(STATUS "Found Eigen 3")

View File

@ -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_torus_parameters.cpp")
create_single_source_cgal_program("test_efficient_RANSAC_scene.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) 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_basic.cpp")
create_single_source_cgal_program("test_region_growing_strict.cpp") create_single_source_cgal_program("test_region_growing_strict.cpp")
create_single_source_cgal_program("test_region_growing_on_cube.cpp") create_single_source_cgal_program("test_region_growing_on_cube.cpp")

View File

@ -27,8 +27,9 @@ if(TARGET CGAL::OSQP_support)
endforeach() endforeach()
# Use Eigen. # Use Eigen.
find_package(Eigen3 3.1.0 QUIET) # (3.1.0 or greater) find_package(Eigen3 QUIET)
include(CGAL_Eigen3_support) include(CGAL_Eigen3_support)
if(TARGET CGAL::Eigen3_support) if(TARGET CGAL::Eigen3_support)
message(STATUS "Found Eigen") message(STATUS "Found Eigen")

View File

@ -7,8 +7,9 @@ project(Solver_interface_Examples)
find_package(CGAL REQUIRED) find_package(CGAL REQUIRED)
# Use Eigen # Use Eigen
find_package(Eigen3 3.1.0 QUIET) #(requires 3.1.0 or greater) find_package(Eigen3 QUIET)
include(CGAL_Eigen3_support) include(CGAL_Eigen3_support)
if(TARGET CGAL::Eigen3_support) if(TARGET CGAL::Eigen3_support)
create_single_source_cgal_program("singular_value_decomposition.cpp") create_single_source_cgal_program("singular_value_decomposition.cpp")
target_link_libraries(singular_value_decomposition PUBLIC CGAL::Eigen3_support) target_link_libraries(singular_value_decomposition PUBLIC CGAL::Eigen3_support)

View File

@ -8,8 +8,9 @@ find_package(CGAL REQUIRED COMPONENTS Core)
include_directories(BEFORE "include") 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) include(CGAL_Eigen3_support)
if(NOT TARGET 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.") message("NOTICE: These benchmarks require Eigen 3.1.91 (or greater), and will not be compiled.")
return() return()

View File

@ -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("searching_sphere_orthogonally.cpp")
create_single_source_cgal_program("splitter_worst_cases.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) include(CGAL_Eigen3_support)
if(TARGET CGAL::Eigen3_support) if(TARGET CGAL::Eigen3_support)
create_single_source_cgal_program("fuzzy_range_query.cpp") create_single_source_cgal_program("fuzzy_range_query.cpp")
target_link_libraries(fuzzy_range_query PUBLIC CGAL::Eigen3_support) target_link_libraries(fuzzy_range_query PUBLIC CGAL::Eigen3_support)

View File

@ -93,7 +93,7 @@ public:
template <class StreamLinesTraits_2> template <class StreamLinesTraits_2>
inline 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 Regular_grid_2<StreamLinesTraits_2>::bbox() const
{ {
return typename Geom_traits::Iso_rectangle_2(0.0, 0.0, return typename Geom_traits::Iso_rectangle_2(0.0, 0.0,

View File

@ -134,7 +134,7 @@ protected:
template <class StreamLinesTraits_2> template <class StreamLinesTraits_2>
inline 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 Triangular_field_2<StreamLinesTraits_2>::bbox() const
{ {
return typename Geom_traits::Iso_rectangle_2(minx, miny, maxx, return typename Geom_traits::Iso_rectangle_2(minx, miny, maxx,

View File

@ -23,12 +23,13 @@ int main()
std::vector<PointVectorPair> pv_pairs; std::vector<PointVectorPair> pv_pairs;
const std::function<void(const PointVectorPair& p)> lambda = const std::function<void(const PointVectorPair& p)> lambda =
[&](const PointVectorPair& p) { [&](const PointVectorPair& p) {
FT len = p.second.squared_length(); const FT len = CGAL::sqrt(p.second.squared_length());
if (len > 0 || len != 1.0) { if (len > 0) {
Vector_3 n = p.second * (1.0 / CGAL::sqrt(len)); Vector_3 n = p.second / len;
pv_pairs.push_back(std::make_pair(p.first, n)); pv_pairs.push_back(std::make_pair(p.first, n));
} } else {
else pv_pairs.push_back(p); pv_pairs.push_back(p);
}
}; };
pv_pairs.clear(); pv_pairs.clear();

View File

@ -8,8 +8,9 @@ project(Surface_mesh_approximation_Examples)
find_package(CGAL REQUIRED) find_package(CGAL REQUIRED)
# Use Eigen (for PCA) # Use Eigen (for PCA)
find_package(Eigen3 3.1.0 QUIET) #(3.1.0 or greater) find_package(Eigen3 QUIET)
include(CGAL_Eigen3_support) include(CGAL_Eigen3_support)
if(NOT TARGET CGAL::Eigen3_support) if(NOT TARGET CGAL::Eigen3_support)
message("NOTICE: This project requires Eigen 3.1 (or greater), and will not be compiled.") message("NOTICE: This project requires Eigen 3.1 (or greater), and will not be compiled.")
return() return()

View File

@ -8,8 +8,9 @@ project(Surface_mesh_approximation_Tests)
find_package(CGAL REQUIRED) find_package(CGAL REQUIRED)
# Use Eigen (for PCA) # Use Eigen (for PCA)
find_package(Eigen3 3.1.0 QUIET) #(3.1.0 or greater) find_package(Eigen3 QUIET)
include(CGAL_Eigen3_support) include(CGAL_Eigen3_support)
if(NOT TARGET CGAL::Eigen3_support) if(NOT TARGET CGAL::Eigen3_support)
message("NOTICE: This project requires Eigen 3.1 (or greater), and will not be compiled.") message("NOTICE: This project requires Eigen 3.1 (or greater), and will not be compiled.")
return() return()

View File

@ -3,8 +3,9 @@ project(benchmark_for_closest_rotation)
find_package(CGAL REQUIRED COMPONENTS Core) 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) include(CGAL_Eigen3_support)
if(TARGET CGAL::Eigen3_support) if(TARGET CGAL::Eigen3_support)
create_single_source_cgal_program("benchmark_for_concept_models.cpp") create_single_source_cgal_program("benchmark_for_concept_models.cpp")
target_link_libraries(benchmark_for_concept_models PUBLIC CGAL::Eigen3_support) target_link_libraries(benchmark_for_concept_models PUBLIC CGAL::Eigen3_support)

View File

@ -8,8 +8,9 @@ set_property(DIRECTORY PROPERTY CGAL_NO_TESTING TRUE)
find_package(CGAL REQUIRED) 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) include(CGAL_Eigen3_support)
if(TARGET CGAL::Eigen3_support) if(TARGET CGAL::Eigen3_support)
create_single_source_cgal_program("deform_mesh_for_botsch08_format.cpp") create_single_source_cgal_program("deform_mesh_for_botsch08_format.cpp")
target_link_libraries(deform_mesh_for_botsch08_format PUBLIC CGAL::Eigen3_support) target_link_libraries(deform_mesh_for_botsch08_format PUBLIC CGAL::Eigen3_support)

View File

@ -6,8 +6,9 @@ project(Surface_mesh_deformation_Examples)
find_package(CGAL REQUIRED) 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) include(CGAL_Eigen3_support)
if(TARGET 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.cpp")
create_single_source_cgal_program("all_roi_assign_example_custom_polyhedron.cpp") create_single_source_cgal_program("all_roi_assign_example_custom_polyhedron.cpp")

View File

@ -6,8 +6,9 @@ project(Surface_mesh_deformation_Tests)
find_package(CGAL REQUIRED) 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) include(CGAL_Eigen3_support)
if(TARGET CGAL::Eigen3_support) if(TARGET CGAL::Eigen3_support)
create_single_source_cgal_program("Cactus_deformation_session.cpp") create_single_source_cgal_program("Cactus_deformation_session.cpp")
target_link_libraries(Cactus_deformation_session PUBLIC CGAL::Eigen3_support) target_link_libraries(Cactus_deformation_session PUBLIC CGAL::Eigen3_support)

View File

@ -5,8 +5,9 @@ project(Surface_mesh_parameterization_Examples)
find_package(CGAL REQUIRED) 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) include(CGAL_Eigen3_support)
if(TARGET CGAL::Eigen3_support) if(TARGET CGAL::Eigen3_support)
# Executables that require Eigen 3.1 # Executables that require Eigen 3.1

View File

@ -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.") message(STATUS "NOTICE: Examples will be compiled without the SuiteSparse library and UmfPack. Try setting CMAKE_PREFIX_PATH to your SuiteSparse installation.")
endif() endif()
find_package(Eigen3 3.1.0 QUIET) #(requires 3.1.0 or greater) find_package(Eigen3 QUIET)
include(CGAL_Eigen3_support) include(CGAL_Eigen3_support)
if(TARGET CGAL::Eigen3_support) if(TARGET CGAL::Eigen3_support)
create_single_source_cgal_program("extensive_parameterization_test.cpp") create_single_source_cgal_program("extensive_parameterization_test.cpp")
target_link_libraries(extensive_parameterization_test PUBLIC CGAL::Eigen3_support) target_link_libraries(extensive_parameterization_test PUBLIC CGAL::Eigen3_support)

View File

@ -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_bounded_normal_change.cpp")
create_single_source_cgal_program("edge_collapse_visitor_surface_mesh.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) include(CGAL_Eigen3_support)
if(TARGET CGAL::Eigen3_support) if(TARGET CGAL::Eigen3_support)
create_single_source_cgal_program("edge_collapse_garland_heckbert.cpp") create_single_source_cgal_program("edge_collapse_garland_heckbert.cpp")
target_link_libraries(edge_collapse_garland_heckbert PUBLIC CGAL::Eigen3_support) target_link_libraries(edge_collapse_garland_heckbert PUBLIC CGAL::Eigen3_support)

View File

@ -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_deprecated_stop_predicates.cpp")
create_single_source_cgal_program("test_edge_collapse_stability.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) include(CGAL_Eigen3_support)
if(TARGET CGAL::Eigen3_support) if(TARGET CGAL::Eigen3_support)
create_single_source_cgal_program("edge_collapse_garland_heckbert_variations.cpp") create_single_source_cgal_program("edge_collapse_garland_heckbert_variations.cpp")
target_link_libraries(edge_collapse_garland_heckbert_variations PUBLIC CGAL::Eigen3_support) target_link_libraries(edge_collapse_garland_heckbert_variations PUBLIC CGAL::Eigen3_support)

View File

@ -7,8 +7,9 @@ project(Mean_curvature_skeleton)
# CGAL and its components # CGAL and its components
find_package(CGAL REQUIRED) 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) include(CGAL_Eigen3_support)
if(TARGET CGAL::Eigen3_support) if(TARGET CGAL::Eigen3_support)
create_single_source_cgal_program("solver_benchmark.cpp") create_single_source_cgal_program("solver_benchmark.cpp")
target_link_libraries(solver_benchmark PUBLIC CGAL::Eigen3_support) target_link_libraries(solver_benchmark PUBLIC CGAL::Eigen3_support)

View File

@ -6,8 +6,9 @@ project(Surface_mesh_skeletonization_Examples)
find_package(CGAL REQUIRED) 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) include(CGAL_Eigen3_support)
if(TARGET CGAL::Eigen3_support) if(TARGET CGAL::Eigen3_support)
create_single_source_cgal_program("simple_mcfskel_example.cpp") create_single_source_cgal_program("simple_mcfskel_example.cpp")
create_single_source_cgal_program("simple_mcfskel_sm_example.cpp") create_single_source_cgal_program("simple_mcfskel_sm_example.cpp")

View File

@ -6,8 +6,9 @@ project(Surface_mesh_skeletonization_Tests)
find_package(CGAL REQUIRED) 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) include(CGAL_Eigen3_support)
if(TARGET CGAL::Eigen3_support) if(TARGET CGAL::Eigen3_support)
create_single_source_cgal_program("MCF_Skeleton_test.cpp") create_single_source_cgal_program("MCF_Skeleton_test.cpp")
target_link_libraries(MCF_Skeleton_test PUBLIC CGAL::Eigen3_support) target_link_libraries(MCF_Skeleton_test PUBLIC CGAL::Eigen3_support)

View File

@ -25,8 +25,9 @@ else()
endif() endif()
# Use Eigen for Mesh_3 # 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) include(CGAL_Eigen3_support)
if(TARGET CGAL::Eigen3_support) if(TARGET CGAL::Eigen3_support)
create_single_source_cgal_program( "mesh_and_remesh_polyhedral_domain_with_features.cpp" ) 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) target_link_libraries(mesh_and_remesh_polyhedral_domain_with_features PUBLIC CGAL::Eigen3_support)

View File

@ -27,8 +27,9 @@ cgal_add_test(test_tetrahedral_remeshing_mls)
# Tests using Mesh_3 require Eigen # 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) include(CGAL_Eigen3_support)
if(TARGET CGAL::Eigen3_support) if(TARGET CGAL::Eigen3_support)
create_single_source_cgal_program("test_mesh_and_remesh_polyhedron_with_features.cpp") 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) target_link_libraries(test_mesh_and_remesh_polyhedron_with_features PUBLIC CGAL::Eigen3_support)

View File

@ -7,8 +7,9 @@ project(Triangulation_apps)
# CGAL and its components # CGAL and its components
find_package(CGAL REQUIRED) find_package(CGAL REQUIRED)
find_package(Eigen3 3.1.0 QUIET) find_package(Eigen3 QUIET)
include(CGAL_Eigen3_support) include(CGAL_Eigen3_support)
if(NOT TARGET CGAL::Eigen3_support) if(NOT TARGET CGAL::Eigen3_support)
message("NOTICE: Applications require Eigen 3.1 (or greater), and will not be compiled") message("NOTICE: Applications require Eigen 3.1 (or greater), and will not be compiled")
return() return()

View File

@ -6,8 +6,9 @@ project(Triangulation_benchmark)
find_package(CGAL REQUIRED COMPONENTS Core) find_package(CGAL REQUIRED COMPONENTS Core)
find_package(Eigen3 3.1.0 QUIET) find_package(Eigen3 QUIET)
include(CGAL_Eigen3_support) include(CGAL_Eigen3_support)
if(TARGET CGAL::Eigen3_support) if(TARGET CGAL::Eigen3_support)
include_directories(BEFORE "include") include_directories(BEFORE "include")

View File

@ -11,8 +11,9 @@ endif()
find_package(CGAL REQUIRED) find_package(CGAL REQUIRED)
find_package(Eigen3 3.1.0 QUIET) find_package(Eigen3 QUIET)
include(CGAL_Eigen3_support) include(CGAL_Eigen3_support)
if(TARGET CGAL::Eigen3_support) if(TARGET CGAL::Eigen3_support)
create_single_source_cgal_program("barycentric_subdivision.cpp") create_single_source_cgal_program("barycentric_subdivision.cpp")
create_single_source_cgal_program("delaunay_triangulation.cpp") create_single_source_cgal_program("delaunay_triangulation.cpp")

View File

@ -11,8 +11,9 @@ endif()
find_package(CGAL REQUIRED) find_package(CGAL REQUIRED)
find_package(Eigen3 3.1.0 QUIET) find_package(Eigen3 QUIET)
include(CGAL_Eigen3_support) include(CGAL_Eigen3_support)
if(TARGET CGAL::Eigen3_support) if(TARGET CGAL::Eigen3_support)
include_directories(BEFORE "include") include_directories(BEFORE "include")

View File

@ -63,9 +63,6 @@ if(CGAL_Qt6_FOUND AND Qt6_FOUND)
include(${CGAL_MODULES_DIR}/CGAL_add_test.cmake) include(${CGAL_MODULES_DIR}/CGAL_add_test.cmake)
cgal_add_compilation_test(T3_demo) 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) else(CGAL_Qt6_FOUND AND Qt6_FOUND)
set(TRIANGULATION_3_MISSING_DEPS "") set(TRIANGULATION_3_MISSING_DEPS "")

View File

@ -209,31 +209,3 @@ void MainWindow::on_actionClear_Scene_triggered()
// update viewer // update viewer
Q_EMIT( sceneChanged() ); 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();
}

View File

@ -36,9 +36,6 @@ public Q_SLOTS:
// show menu // show menu
void on_actionClear_Scene_triggered(); void on_actionClear_Scene_triggered();
// about menu
void popupAboutCGAL();
Q_SIGNALS: Q_SIGNALS:
void sceneChanged(); void sceneChanged();

View File

@ -25,6 +25,9 @@ int main(int argc, char** argv)
app.setOrganizationName("INRIA"); app.setOrganizationName("INRIA");
app.setApplicationName("3D Triangulation Demo"); app.setApplicationName("3D Triangulation Demo");
// Import resources from libCGALQt (Qt6).
CGAL_QT_INIT_RESOURCES;
MainWindow mw; MainWindow mw;
mw.show(); mw.show();

View File

@ -183,13 +183,13 @@ void Viewer::compile_shaders()
"} \n" "} \n"
"\n" "\n"
}; };
QOpenGLShader *vertex_shader = new QOpenGLShader(QOpenGLShader::Vertex); QOpenGLShader *vertex_shader = new QOpenGLShader(QOpenGLShader::Vertex, this);
if(!vertex_shader->compileSourceCode(vertex_source)) if(!vertex_shader->compileSourceCode(vertex_source))
{ {
std::cerr<<"Compiling vertex source FAILED"<<std::endl; 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)) if(!fragment_shader->compileSourceCode(fragment_source))
{ {
std::cerr<<"Compiling fragmentsource FAILED"<<std::endl; std::cerr<<"Compiling fragmentsource FAILED"<<std::endl;
@ -258,14 +258,14 @@ void Viewer::compile_shaders()
"} \n" "} \n"
"\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)) if(!vertex_shader_spheres->compileSourceCode(vertex_source_spheres))
{ {
std::cerr<<"Compiling vertex source FAILED"<<std::endl; 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)) if(!fragment_shader_spheres->compileSourceCode(fragment_source_spheres))
{ {
std::cerr<<"Compiling fragmentsource FAILED"<<std::endl; 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)) if(!vertex_shader_cylinders->compileSourceCode(vertex_source_cylinders))
{ {
std::cerr<<"Compiling vertex source FAILED"<<std::endl; 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()); 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( 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()); 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 p0 = t.vertex(0);
Point_3 p1 = t.vertex(1); 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); vertices->resize(0);
normals->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); vertices->resize(0);
normals->resize(0); normals->resize(0);

View File

@ -42,42 +42,41 @@ public:
, m_hasEmptyS(false) , m_hasEmptyS(false)
, m_showTrackball(true) , m_showTrackball(true)
, m_pDlgPrefer(nullptr) , m_pDlgPrefer(nullptr)
{ , pos_emptyFacet{new Coords}
pos_emptyFacet = new std::vector<float>(); , pos_emptySphere{new Coords}
pos_emptySphere= new std::vector<float>(); , points_emptySphere{new Coords}
points_emptySphere = new std::vector<float>(); , pos_points{new Coords}
pos_points = new std::vector<float>(); , pos_newPoint{new Coords}
pos_newPoint = new std::vector<float>(); , pos_selectedVertex{new Coords}
pos_selectedVertex = new std::vector<float>(); , pos_movingPoint{new Coords}
pos_movingPoint = new std::vector<float>(); , pos_queryPoint{new Coords}
pos_queryPoint = new std::vector<float>(); , pos_trackBall{ new Coords}
pos_trackBall = new std::vector<float>(); , pos_voronoi{new Coords}
pos_voronoi = new std::vector<float>(); , pos_delaunay{new Coords}
pos_delaunay = new std::vector<float>(); , pos_facets{new Coords}
pos_facets = new std::vector<float>(); , pos_newFacet{new Coords}
pos_newFacet = new std::vector<float>(); , pos_nearest_neighbor{new Coords}
pos_nearest_neighbor = new std::vector<float>(); , points_locationSphere{new Coords}
points_locationSphere = new std::vector<float>(); , points_cylinder{new Coords}
points_cylinder = new std::vector<float>(); , normals_cylinder{new Coords}
normals_cylinder = new std::vector<float>(); , points_sphere{new Coords}
points_sphere = new std::vector<float>(); , points_trackBall{new Coords}
points_trackBall = new std::vector<float>(); , normals_sphere{new Coords}
normals_sphere = new std::vector<float>(); , normals_emptySphere{new Coords}
normals_emptySphere = new std::vector<float>(); , normals_trackBall{new Coords}
normals_trackBall= new std::vector<float>(); , transfo1_voronoi{new Coords}
transfo1_voronoi = new std::vector<float>(); , transfo2_voronoi{new Coords}
transfo2_voronoi = new std::vector<float>(); , transfo3_voronoi{new Coords}
transfo3_voronoi = new std::vector<float>(); , transfo4_voronoi{new Coords}
transfo4_voronoi = new std::vector<float>(); , transfo1_delaunay{new Coords}
transfo1_delaunay = new std::vector<float>(); , transfo2_delaunay{new Coords}
transfo2_delaunay = new std::vector<float>(); , transfo3_delaunay{new Coords}
transfo3_delaunay = new std::vector<float>(); , transfo4_delaunay{new Coords}
transfo4_delaunay = new std::vector<float>(); , incremental_points{new Coords}
incremental_points = new std::vector<float>(); , incremental_next_point{new Coords}
incremental_next_point = new std::vector<float>(); , incremental_facet{new Coords}
incremental_facet = new std::vector<float>(); , incremental_conflict{new Coords}
incremental_conflict = new std::vector<float>(); {}
}
~Viewer() ~Viewer()
{ {
@ -269,12 +268,15 @@ protected:
QString helpString() const; QString helpString() const;
private: private:
using Coords = std::vector<float>;
using Coords_ptr = std::unique_ptr<std::vector<float>>;
// draw a 3d effect vertex // 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 // 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 // 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 // test whether the give 3D point is on the sphere
inline bool isOnSphere( const Point_3 & pt ) { inline bool isOnSphere( const Point_3 & pt ) {
return ( (pt.x()*pt.x() + pt.y()*pt.y() + pt.z()*pt.z()) == (m_fRadius*m_fRadius) ); 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 vaoSize = 29;
static const int vboSize = 34; static const int vboSize = 34;
// define material // define material
QVector4D ambient; QVector4D ambient;
QVector4D diffuse; QVector4D diffuse;
QVector4D specular; QVector4D specular;
GLfloat shininess ; GLfloat shininess ;
int poly_vertexLocation[3]; int poly_vertexLocation[3];
int normalsLocation[3]; int normalsLocation[3];
int mvpLocation[3]; int mvpLocation[3];
int mvLocation[2]; int mvLocation[2];
int centerLocation[5]; int centerLocation[5];
int colorLocation[3]; int colorLocation[3];
int lightLocation[5*2]; int lightLocation[5*2];
bool are_buffers_initialized; bool are_buffers_initialized;
bool extension_is_found; bool extension_is_found;
std::vector<float> *pos_emptyFacet; Coords_ptr pos_emptyFacet;
std::vector<float> *pos_emptySphere; Coords_ptr pos_emptySphere;
std::vector<float> *points_emptySphere; Coords_ptr points_emptySphere;
std::vector<float> *pos_points; Coords_ptr pos_points;
std::vector<float> *pos_newPoint; Coords_ptr pos_newPoint;
std::vector<float> *pos_selectedVertex; Coords_ptr pos_selectedVertex;
std::vector<float> *pos_movingPoint; Coords_ptr pos_movingPoint;
std::vector<float> *pos_queryPoint; Coords_ptr pos_queryPoint;
std::vector<float> *pos_trackBall; Coords_ptr pos_trackBall;
std::vector<float> *points_trackBall; Coords_ptr pos_voronoi;
std::vector<float> *pos_voronoi; Coords_ptr pos_delaunay;
std::vector<float> *pos_delaunay; Coords_ptr pos_facets;
std::vector<float> *pos_facets; Coords_ptr pos_newFacet;
std::vector<float> *pos_newFacet; Coords_ptr pos_nearest_neighbor;
std::vector<float> *pos_nearest_neighbor; Coords_ptr points_locationSphere;
std::vector<float> *points_locationSphere; Coords_ptr points_cylinder;
std::vector<float> *points_cylinder; Coords_ptr normals_cylinder;
std::vector<float> *normals_cylinder; Coords_ptr points_sphere;
std::vector<float> *points_sphere; Coords_ptr points_trackBall;
std::vector<float> *normals_sphere; Coords_ptr normals_sphere;
std::vector<float> *normals_emptySphere; Coords_ptr normals_emptySphere;
std::vector<float> *normals_trackBall; Coords_ptr normals_trackBall;
std::vector<float> *transfo1_voronoi; Coords_ptr transfo1_voronoi;
std::vector<float> *transfo2_voronoi; Coords_ptr transfo2_voronoi;
std::vector<float> *transfo3_voronoi; Coords_ptr transfo3_voronoi;
std::vector<float> *transfo4_voronoi; Coords_ptr transfo4_voronoi;
std::vector<float> *transfo1_delaunay; Coords_ptr transfo1_delaunay;
std::vector<float> *transfo2_delaunay; Coords_ptr transfo2_delaunay;
std::vector<float> *transfo3_delaunay; Coords_ptr transfo3_delaunay;
std::vector<float> *transfo4_delaunay; Coords_ptr transfo4_delaunay;
std::vector<float> *incremental_points; Coords_ptr incremental_points;
std::vector<float> *incremental_next_point; Coords_ptr incremental_next_point;
std::vector<float> *incremental_facet; Coords_ptr incremental_facet;
std::vector<float> *incremental_conflict; Coords_ptr incremental_conflict;
//pickin
QMap<float, int> picked_IDs;
QPoint picking_pos;
//picking QOpenGLBuffer buffers[vboSize];
QMap<float, int> picked_IDs; QOpenGLVertexArrayObject vao[vaoSize];
QPoint picking_pos; QOpenGLShaderProgram rendering_program;
QOpenGLShaderProgram rendering_program_spheres;
QOpenGLBuffer buffers[vboSize]; QOpenGLShaderProgram rendering_program_cylinders;
QOpenGLVertexArrayObject vao[vaoSize]; typedef void (APIENTRYP PFNGLDRAWARRAYSINSTANCEDARBPROC) (GLenum mode, GLint first, GLsizei count, GLsizei primcount);
QOpenGLShaderProgram rendering_program; typedef void (APIENTRYP PFNGLVERTEXATTRIBDIVISORARBPROC) (GLuint index, GLuint divisor);
QOpenGLShaderProgram rendering_program_spheres; PFNGLDRAWARRAYSINSTANCEDARBPROC glDrawArraysInstanced;
QOpenGLShaderProgram rendering_program_cylinders; PFNGLVERTEXATTRIBDIVISORARBPROC glVertexAttribDivisor;
typedef void (APIENTRYP PFNGLDRAWARRAYSINSTANCEDARBPROC) (GLenum mode, GLint first, GLsizei count, GLsizei primcount); void initialize_buffers();
typedef void (APIENTRYP PFNGLVERTEXATTRIBDIVISORARBPROC) (GLuint index, GLuint divisor); void compute_elements();
PFNGLDRAWARRAYSINSTANCEDARBPROC glDrawArraysInstanced; void attrib_buffers(CGAL::QGLViewer*);
PFNGLVERTEXATTRIBDIVISORARBPROC glVertexAttribDivisor; void compile_shaders();
void initialize_buffers(); void draw_cylinder(float R, int prec, Coords_ptr& vertices, Coords_ptr& normals);
void compute_elements(); void draw_sphere(float R, int prec, Coords_ptr& vertices, Coords_ptr& normals);
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);
}; };
#endif #endif

View File

@ -18,7 +18,7 @@ find_package(CGAL REQUIRED OPTIONAL_COMPONENTS Qt6)
# Find Qt6 itself # Find Qt6 itself
find_package(Qt6 QUIET COMPONENTS Widgets OpenGL) 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) include(CGAL_Eigen3_support)
if(CGAL_Qt6_FOUND AND Qt6_FOUND AND TARGET 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