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:
* - The edge `e` is no longer in `g`.
* - The faces incident to edge `e` are no longer in `g`.
* - The triangle faces incident to edge `e` are no longer in `g`.
* - `v0` is no longer in `g`.
* - If `h` is not a border halfedge, `p_h` is no longer in `g` and is replaced by `o_n_h`.
* - If the opposite of `h` is not a border halfedge, `p_o_h` is no longer in `g` and is replaced by `o_n_o_h`.
* - If `h` is part of a triangle face, `p_h` is no longer in `g` and is replaced by `o_n_h`.
* - If the opposite of `h` is part of a triangle face, `p_o_h` is no longer in `g` and is replaced by `o_n_o_h`.
* - The halfedges kept in `g` that had `v0` as target and source now have `v1` as target and source, respectively.
* - No other incidence information is changed in `g`.
*
@ -1575,9 +1575,8 @@ collapse_edge(typename boost::graph_traits<Graph>::edge_descriptor e,
bool lBottomFaceExists = ! is_border(qp,g);
bool lTopLeftFaceExists = lTopFaceExists && ! is_border(pt,g);
bool lBottomRightFaceExists = lBottomFaceExists && ! is_border(qb,g);
CGAL_precondition( !lTopFaceExists || (lTopFaceExists && ( degree(target(pt, g), g) > 2 ) ) ) ;
CGAL_precondition( !lBottomFaceExists || (lBottomFaceExists && ( degree(target(qb, g), g) > 2 ) ) ) ;
bool lBottomIsTriangle = lBottomFaceExists && is_triangle(qp,g);
bool lTopIsTriangle = lTopFaceExists && is_triangle(pq,g);
vertex_descriptor q = target(pq, g);
vertex_descriptor p = source(pq, g);
@ -1585,7 +1584,7 @@ collapse_edge(typename boost::graph_traits<Graph>::edge_descriptor e,
bool lP_Erased = false;
if ( lTopFaceExists )
if ( lTopIsTriangle)
{
CGAL_precondition( ! is_border(opposite(pt, g),g) ) ; // p-q-t is a face of the mesh
if ( lTopLeftFaceExists )
@ -1612,7 +1611,7 @@ collapse_edge(typename boost::graph_traits<Graph>::edge_descriptor e,
}
}
if ( lBottomFaceExists )
if ( lBottomIsTriangle)
{
CGAL_precondition( ! is_border(opposite(qb, g),g) ) ; // p-q-b is a face of the mesh
if ( lBottomRightFaceExists )
@ -1659,7 +1658,7 @@ collapse_edge(typename boost::graph_traits<Graph>::edge_descriptor e,
* collapses an edge in a graph having non-collapsable edges.
*
* Let `h` be the halfedge of `e`, and let `v0` and `v1` be the source and target vertices of `h`.
* Collapses the edge `e` replacing it with `v1`, as described in the paragraph above
* Collapses the edge `e` replacing it with `v1`, as described in the other overload
* and guarantees that an edge `e2`, for which `get(edge_is_constrained_map, e2)==true`,
* is not removed after the collapse.
*
@ -1669,14 +1668,14 @@ collapse_edge(typename boost::graph_traits<Graph>::edge_descriptor e,
*
* \returns vertex `v1`.
* \pre This function requires `g` to be an oriented 2-manifold with or without boundaries.
* Furthermore, the edge `v0v1` must satisfy the link condition, which guarantees that the surface mesh is also 2-manifold after the edge collapse.
* \pre `get(edge_is_constrained_map, v0v1)==false`.
* Furthermore, the edge `e` must satisfy the link condition, which guarantees that the surface mesh is also 2-manifold after the edge collapse.
* \pre `get(edge_is_constrained_map, e)==false`.
* \pre `v0` and `v1` are not both incident to a constrained edge.
*/
template<typename Graph, typename EdgeIsConstrainedMap>
typename boost::graph_traits<Graph>::vertex_descriptor
collapse_edge(typename boost::graph_traits<Graph>::edge_descriptor v0v1,
collapse_edge(typename boost::graph_traits<Graph>::edge_descriptor e,
Graph& g,
EdgeIsConstrainedMap Edge_is_constrained_map)
{
@ -1684,11 +1683,11 @@ collapse_edge(typename boost::graph_traits<Graph>::edge_descriptor v0v1,
typedef typename Traits::vertex_descriptor vertex_descriptor;
typedef typename Traits::halfedge_descriptor halfedge_descriptor;
CGAL_precondition(is_valid_edge_descriptor(v0v1, g));
CGAL_precondition(does_satisfy_link_condition(v0v1,g));
CGAL_precondition(!get(Edge_is_constrained_map, v0v1));
CGAL_precondition(is_valid_edge_descriptor(e, g));
CGAL_precondition(does_satisfy_link_condition(e,g));
CGAL_precondition(!get(Edge_is_constrained_map, e));
halfedge_descriptor pq = halfedge(v0v1,g);
halfedge_descriptor pq = halfedge(e,g);
halfedge_descriptor qp = opposite(pq,g);
halfedge_descriptor pt = opposite(prev(pq,g),g);
@ -1698,6 +1697,8 @@ collapse_edge(typename boost::graph_traits<Graph>::edge_descriptor v0v1,
bool lTopFaceExists = ! is_border(pq,g) ;
bool lBottomFaceExists = ! is_border(qp,g) ;
bool lTopIsTriangle = lTopFaceExists && is_triangle(pq,g);
bool lBottomIsTriangle = lBottomFaceExists && is_triangle(qp,g);
vertex_descriptor q = target(pq,g);
vertex_descriptor p = source(pq,g);
@ -1708,7 +1709,7 @@ collapse_edge(typename boost::graph_traits<Graph>::edge_descriptor v0v1,
// If the top facet exists, we need to choose one out of the two edges which one disappears:
// p-t if it is not constrained and t-q otherwise
if ( lTopFaceExists )
if ( lTopIsTriangle )
{
if ( !get(Edge_is_constrained_map,edge(pt,g)) )
{
@ -1722,7 +1723,7 @@ collapse_edge(typename boost::graph_traits<Graph>::edge_descriptor v0v1,
// If the bottom facet exists, we need to choose one out of the two edges which one disappears:
// q-b if it is not constrained and b-p otherwise
if ( lBottomFaceExists )
if ( lBottomIsTriangle )
{
if ( !get(Edge_is_constrained_map,edge(qb,g)) )
{
@ -1733,7 +1734,7 @@ collapse_edge(typename boost::graph_traits<Graph>::edge_descriptor v0v1,
}
}
if (lTopFaceExists && lBottomFaceExists)
if (lTopIsTriangle && lBottomIsTriangle)
{
if ( face(edges_to_erase[0],g) == face(edges_to_erase[1],g)
&& (! is_border(edges_to_erase[0],g)) )
@ -1780,7 +1781,7 @@ collapse_edge(typename boost::graph_traits<Graph>::edge_descriptor v0v1,
}
else
{
if (lTopFaceExists)
if (lTopIsTriangle)
{
if (!(is_border(edges_to_erase[0],g))){
join_face(edges_to_erase[0],g);
@ -1795,11 +1796,15 @@ collapse_edge(typename boost::graph_traits<Graph>::edge_descriptor v0v1,
remove_face(opposite(edges_to_erase[0],g),g);
return q;
}
else
{
if (lBottomIsTriangle)
{
if (! (is_border(edges_to_erase[0],g))){
// q will be removed, swap it with p
internal::swap_vertices(p, q, g);
join_face(edges_to_erase[0],g);
CGAL_assertion(source(qp,g)==p);
join_vertex(qp,g);
return q;
}
@ -1811,6 +1816,13 @@ collapse_edge(typename boost::graph_traits<Graph>::edge_descriptor v0v1,
remove_face(opposite(edges_to_erase[0],g),g);
return q;
}
else
{
join_vertex(pq,g);
return q;
}
}
}
}
/// performs an edge flip, rotating the edge pointed by

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/IO/OFF.h>
#include <boost/range/distance.hpp>
#include <string>
@ -213,12 +212,30 @@ collapse_edge_test()
assert(found == 2);
CGAL::clear(test_mesh);
}
// Case 6 non pure triangle mesh
{
Mesh ref;
if(!CGAL::IO::read_OFF("data/polygon_mesh_to_collapse.off", ref))
{
std::cout << "Error reading file: data/polygon_mesh_to_collapse.off" << std::endl;
exit(1);
}
std::size_t nbe=halfedges(ref).size();
for (std::size_t i=0; i< nbe; ++i)
{
Mesh m = ref;
auto h = *std::next(halfedges(m).begin(), i);
if (CGAL::Euler::does_satisfy_link_condition(edge(h,m),m))
CGAL::Euler::collapse_edge(edge(h,m), m);
assert(CGAL::is_valid_polygon_mesh(m));
}
}
}
int main()
{
collapse_edge_test<Polyhedron>();
collapse_edge_test<SM>();

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_mv_34_vertices.cpp")
find_package(Eigen3 3.1.0 QUIET) # (3.1.0 or greater)
find_package(Eigen3 QUIET)
include(CGAL_Eigen3_support)
if(TARGET CGAL::Eigen3_support)
create_single_source_cgal_program("benchmark_hm_4_vertices.cpp")
target_link_libraries(benchmark_hm_4_vertices PUBLIC CGAL::Eigen3_support)

View File

@ -17,8 +17,9 @@ create_single_source_cgal_program("terrain_height_modeling.cpp")
# this code is deprecated:
create_single_source_cgal_program("deprecated_coordinates.cpp")
find_package(Eigen3 3.1.0 QUIET) # (3.1.0 or greater)
find_package(Eigen3 QUIET)
include(CGAL_Eigen3_support)
if(TARGET CGAL::Eigen3_support)
create_single_source_cgal_program("affine_coordinates.cpp")
target_link_libraries(affine_coordinates PUBLIC CGAL::Eigen3_support)

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_dh_deprecated_api.cpp")
find_package(Eigen3 3.1.0 QUIET) # (3.1.0 or greater)
find_package(Eigen3 QUIET)
include(CGAL_Eigen3_support)
if(TARGET CGAL::Eigen3_support)
create_single_source_cgal_program("test_hm_unit_square.cpp")
target_link_libraries(test_hm_unit_square PUBLIC CGAL::Eigen3_support)

View File

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

View File

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

View File

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

View File

@ -20,8 +20,9 @@ set(CMAKE_LIBRARY_OUTPUT_DIRECTORY "${CMAKE_RUNTIME_OUTPUT_DIRECTORY}")
find_package(CGAL REQUIRED COMPONENTS Core)
find_package(Eigen3 3.1.0 QUIET) #(requires 3.1.0 or greater)
find_package(Eigen3 QUIET)
include(CGAL_Eigen3_support)
if(NOT TARGET CGAL::Eigen3_support)
message("NOTICE: This project requires the Eigen library, and will not be compiled.")
return()

View File

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

View File

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

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.
It requires \qt6 installed on your system.
In case \qt is not yet installed on your system, you can download
it from <A HREF="https://www.qt-project.org/">`https://www.qt-project.org/`</A>.
it from <A HREF="https://contribute.qt-project.org/">`https://contribute.qt-project.org/`</A>.
The exhaustive list of \qt6 components used in demos is:
`Core`, `Gui`, `Help`, `OpenGL`, `OpenGLWidgets`, `Qml`, `Svg`, `Widgets`,
`WebSockets`, `Network`, and `qcollectiongenerator` (with `sqlite` driver plugin).
\subsection thirdpartyEigen Eigen
<b>Version 3.3.7 or later</b>
<b>Version 3.3.7 or later (including Eigen3 5.0.0)</b>
\eigen is a `C++` template library for linear algebra. \eigen supports all
matrix sizes, various matrix decomposition methods and sparse linear solvers.
@ -138,7 +138,7 @@ Overview</a> page. In order to use Eigen in \cgal programs, the
executables should be linked with the CMake imported target
`CGAL::Eigen3_support` provided in `CGAL_Eigen3_support.cmake`.
The \eigen web site is <A HREF="https://eigen.tuxfamily.org/index.php?title=Main_Page">`https://eigen.tuxfamily.org`</A>.
The \eigen web site is <A HREF="https://libeigen.gitlab.io/">`https://libeigen.gitlab.io/`</A>.
\subsection thirdpartyOpenGR OpenGR
@ -167,17 +167,6 @@ Alternatively, version 1.3.1 of \libpointmatcher is supported with version 3.3.7
`https://github.com/ethz-asl/libpointmatcher/blob/master/doc/Compilation.md`:`NABO_INCLUDE_DIR` becomes `libnabo_INCLUDE_DIRS`
and `NABO_LIBRARY` becomes `libnabo_LIBRARIES` in the "Build libpointmatcher" section.
\subsection thirdpartyLeda LEDA
<b>Version 6.2 or later</b>
\leda is a library of efficient data structures and
algorithms. Like \core, \leda offers a real number data type.
In \cgal this library is optional, and its number types can
be used as an alternative to \gmp, \mpfr, and \core.
Free and commercial editions of \leda are available from <A HREF="https://www.algorithmic-solutions.com">`https://www.algorithmic-solutions.com`</A>.
\subsection thirdpartyMPFI Multiple Precision Floating-point Interval (MPFI)
<b>Version 1.4 or later</b>
@ -278,7 +267,7 @@ vcpkg install suitesparse
\subsection thirdpartyMETIS METIS
<b>Version 5.1 or later</b>
\metis is a library developed by the <A HREF="http://glaros.dtc.umn.edu/gkhome/">Karypis Lab</A>
\metis is a library developed by the <A HREF="https://github.com/KarypisLab/">Karypis Lab</A>
and designed to partition graphs and produce fill-reducing matrix orderings.
\cgal offers wrappers around some of the methods of the \metis library
@ -287,7 +276,7 @@ to allow the partitioning of graphs that are models of the concepts of the
and, by extension, of surface meshes (see Section \ref BGLPartitioning of the package \ref PkgBGL).
More information is available on the METIS library
at <A HREF="http://glaros.dtc.umn.edu/gkhome/metis/metis/overview">`http://glaros.dtc.umn.edu/gkhome/metis/metis/overview`</A>.
at <A HREF="https://github.com/KarypisLab/METIS">`https://github.com/KarypisLab/METIS`</A>.
\subsection thirdpartyzlib zlib

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("sphere_d.cpp")
find_package(Eigen3 3.1.0 QUIET) #(3.1.0 or greater)
find_package(Eigen3 QUIET)
include(CGAL_Eigen3_support)
if(TARGET CGAL::Eigen3_support)
create_single_source_cgal_program("random_points_in_tetrahedral_mesh_3.cpp")
target_link_libraries(random_points_in_tetrahedral_mesh_3 PRIVATE CGAL::Eigen3_support)

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_3.cpp")
find_package(Eigen3 3.1.0 QUIET) #(3.1.0 or greater)
find_package(Eigen3 QUIET)
include(CGAL_Eigen3_support)
if(TARGET CGAL::Eigen3_support)
create_single_source_cgal_program("generic_random_test.cpp")
target_link_libraries(generic_random_test PRIVATE CGAL::Eigen3_support)

View File

@ -8,7 +8,7 @@ find_package(CGAL REQUIRED OPTIONAL_COMPONENTS Qt6)
find_package(Qt6 QUIET COMPONENTS Widgets)
find_package(Eigen3 3.1.91 QUIET) #(requires 3.1.91 or greater)
find_package(Eigen3 QUIET)
include(CGAL_Eigen3_support)
if(NOT TARGET CGAL::Eigen3_support)

View File

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

View File

@ -221,7 +221,10 @@ void
DemosMainWindow::popupAboutBox(QString title, QString html_resource_name)
{
QFile about_CGAL(html_resource_name);
about_CGAL.open(QIODevice::ReadOnly);
if (!about_CGAL.open(QIODevice::ReadOnly)) {
QMessageBox::warning(this, tr("Error"), tr("Could not open resource file: %1").arg(html_resource_name));
return;
}
QString about_CGAL_txt = QTextStream(&about_CGAL).readAll();
#ifdef CGAL_VERSION_STR
QString cgal_version(CGAL_VERSION_STR);

View File

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

View File

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

View File

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

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(NOT TARGET Threads::Threads)
find_package(Threads REQUIRED)

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@ -52,12 +52,14 @@ if(Qt6_FOUND)
add_definitions(-DSCENE_IMAGE_GL_BUFFERS_AVAILABLE)
endif(Qt6_FOUND)
find_package(Eigen3 3.2.0 QUIET) #(requires 3.2.0 or greater)
find_package(Eigen3 QUIET)
include(CGAL_Eigen3_support)
set_package_properties(
Eigen3 PROPERTIES
DESCRIPTION "A library for linear algebra."
PURPOSE "Required for most plugins (Meshing, Mesh and Point Set Processing, etc.).")
include(CGAL_Eigen3_support)
if(NOT TARGET CGAL::Eigen3_support)
message(STATUS "NOTICE: Eigen was not found.")
endif()

View File

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

View File

@ -1,6 +1,6 @@
include(CGALlab_macros)
if(TARGET CGAL::Eigen3_support AND "${Eigen3_VERSION}" VERSION_GREATER "3.1.90")
if(TARGET CGAL::Eigen3_support)
qt6_wrap_ui(editionUI_FILES Deform_mesh.ui)
add_item(scene_edit_item

View File

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

View File

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

View File

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

View File

@ -14,6 +14,7 @@ find_package(CGAL REQUIRED)
find_package(Eigen3 QUIET)
include(CGAL_Eigen3_support)
if(TARGET CGAL::Eigen3_support)
file(
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( "Gmpfr_bug.cpp" )
create_single_source_cgal_program( "test_eigen.cpp" )
find_package(Eigen3 3.2.0 QUIET) #(requires 3.2.0 or greater)
find_package(Eigen3 QUIET)
include(CGAL_Eigen3_support)
if (TARGET CGAL::Eigen3_support)
target_link_libraries(test_eigen PUBLIC CGAL::Eigen3_support)
endif()

View File

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

View File

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

View File

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

View File

@ -17,6 +17,8 @@
#include <CGAL/OTR_2/Cost.h>
#include <CGAL/Triangulation_face_base_2.h>
#include <CGAL/Has_timestamp.h>
#include <CGAL/Time_stamper.h>
#include <vector>
@ -62,6 +64,8 @@ private:
FT m_relevance[3];
std::size_t time_stamp_ = std::size_t(-2);
public:
Reconstruction_face_base_2()
{
@ -190,6 +194,18 @@ public:
for (int i = 0; i < 3; ++i)
clean_samples(i);
}
/// For the determinism of Compact_container iterators
///@{
typedef Tag_true Has_timestamp;
std::size_t time_stamp() const {
return time_stamp_;
}
void set_time_stamp(const std::size_t& ts) {
time_stamp_ = ts;
}
///@}
};
//---------------STRUCT LESS FACE_HANDLE---------------------

View File

@ -16,6 +16,8 @@
#include <CGAL/Triangulation_vertex_base_2.h>
#include <CGAL/Has_timestamp.h>
#include <CGAL/Time_stamper.h>
#include <CGAL/OTR_2/Sample.h>
namespace CGAL {
@ -53,6 +55,7 @@ private:
int m_sample;
Point m_relocated;
FT m_relevance;
std::size_t time_stamp_ = std::size_t(-2);
public:
@ -110,6 +113,18 @@ public:
Point& relocated() { return m_relocated; }
bool has_sample_assigned() const { return sample() != -1; }
/// For the determinism of Compact_container iterators
///@{
typedef Tag_true Has_timestamp;
std::size_t time_stamp() const {
return time_stamp_;
}
void set_time_stamp(const std::size_t& ts) {
time_stamp_ = ts;
}
///@}
};
//---------------STRUCT LESS VERTEX_HANDLE---------------------
template <class T>

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("quadtree_build_manually.cpp")
find_package(Eigen3 3.1.91 QUIET) #(requires 3.1.91 or greater)
find_package(Eigen3 QUIET)
include(CGAL_Eigen3_support)
if (TARGET CGAL::Eigen3_support)
create_single_source_cgal_program("orthtree_build.cpp")
target_link_libraries(orthtree_build PUBLIC CGAL::Eigen3_support)

View File

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

View File

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

View File

@ -138,7 +138,12 @@ public Q_SLOTS:
private:
void showFileBox(QString title, QString fileName) {
QFile textFile(fileName);
textFile.open(QIODevice::ReadOnly);
bool b = textFile.open(QIODevice::ReadOnly);
if(!b){
QMessageBox::critical(this, tr("Error"),
tr("Could not open file %1.").arg(fileName));
return;
}
QMessageBox mb(QMessageBox::NoIcon,
title,
QTextStream(&textFile).readAll(),

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_read_ply.cpp")
find_package(Eigen3 3.1.0 QUIET) #(requires 3.1.0 or greater)
find_package(Eigen3 QUIET)
include(CGAL_Eigen3_support)
if(TARGET CGAL::Eigen3_support)
create_single_source_cgal_program("point_set_algo.cpp")
target_link_libraries(point_set_algo PUBLIC CGAL::Eigen3_support)

View File

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

View File

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

View File

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

View File

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

View File

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

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("soup_autorefinement.cpp")
find_package(Eigen3 3.2.0 QUIET) #(requires 3.2.0 or greater)
find_package(Eigen3 QUIET)
include(CGAL_Eigen3_support)
if(TARGET CGAL::Eigen3_support)
create_single_source_cgal_program("hole_filling_example.cpp")
target_link_libraries(hole_filling_example PUBLIC CGAL::Eigen3_support)

View File

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

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("test_pmp_repair_self_intersections.cpp")
find_package(Eigen3 3.2.0 QUIET) #(requires 3.2.0 or greater)
find_package(Eigen3 QUIET)
include(CGAL_Eigen3_support)
if(TARGET CGAL::Eigen3_support)
create_single_source_cgal_program("fairing_test.cpp")
target_link_libraries(fairing_test PUBLIC CGAL::Eigen3_support)

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@ -6,8 +6,9 @@ find_package(CGAL REQUIRED)
create_single_source_cgal_program("dynamic_properties.cpp")
find_package(Eigen3 3.1.0 QUIET) #(requires 3.1.0 or greater)
find_package(Eigen3 QUIET)
include(CGAL_Eigen3_support)
if(TARGET CGAL::Eigen3_support)
create_single_source_cgal_program("custom_property_map.cpp")
target_link_libraries(custom_property_map PUBLIC CGAL::Eigen3_support)

View File

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

View File

@ -6,8 +6,9 @@ project(Ridges_3_Tests)
find_package(CGAL REQUIRED)
find_package(Eigen3 3.1.0 QUIET) #(requires 3.1.0 or greater)
find_package(Eigen3 QUIET)
include(CGAL_Eigen3_support)
if(TARGET CGAL::Eigen3_support)
create_single_source_cgal_program("ridge_test.cpp")
target_link_libraries(ridge_test PUBLIC CGAL::Eigen3_support)

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_tet_soup_to_c3t3.cpp")
find_package(Eigen3 3.1.0 QUIET) #(requires 3.1.0 or greater)
find_package(Eigen3 QUIET)
include(CGAL_Eigen3_support)
if(TARGET CGAL::Eigen3_support)
create_single_source_cgal_program( "test_c3t3.cpp" )
create_single_source_cgal_program( "test_c3t3_io.cpp" )

View File

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

View File

@ -6,8 +6,9 @@ project(Shape_detection_Benchmarks)
find_package(CGAL REQUIRED COMPONENTS Core)
find_package(Eigen3 3.1.0 QUIET) # (3.1.0 or greater)
find_package(Eigen3 QUIET)
include(CGAL_Eigen3_support)
if(TARGET CGAL::Eigen3_support)
create_single_source_cgal_program("benchmark_region_growing_on_point_set_2.cpp")
target_link_libraries(benchmark_region_growing_on_point_set_2 PUBLIC CGAL::Eigen3_support)

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_point_access.cpp")
find_package(Eigen3 3.1.0 QUIET) # (3.1.0 or greater)
find_package(Eigen3 QUIET)
include(CGAL_Eigen3_support)
if(TARGET CGAL::Eigen3_support)
message(STATUS "Found Eigen 3")

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_scene.cpp")
find_package(Eigen3 3.1.0 QUIET) # (3.1.0 or greater)
find_package(Eigen3 QUIET)
include(CGAL_Eigen3_support)
if(TARGET CGAL::Eigen3_support)
if(TARGET CGAL::Eigen3_support)
create_single_source_cgal_program("test_region_growing_basic.cpp")
create_single_source_cgal_program("test_region_growing_strict.cpp")
create_single_source_cgal_program("test_region_growing_on_cube.cpp")

View File

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

View File

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

View File

@ -8,8 +8,9 @@ find_package(CGAL REQUIRED COMPONENTS Core)
include_directories(BEFORE "include")
find_package(Eigen3 3.1.91 QUIET) # (requires 3.1.91 or greater)
find_package(Eigen3 QUIET)
include(CGAL_Eigen3_support)
if(NOT TARGET CGAL::Eigen3_support)
message("NOTICE: These benchmarks require Eigen 3.1.91 (or greater), and will not be compiled.")
return()

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("splitter_worst_cases.cpp")
find_package(Eigen3 3.1.91 QUIET) #(requires 3.1.91 or greater)
find_package(Eigen3 QUIET)
include(CGAL_Eigen3_support)
if(TARGET CGAL::Eigen3_support)
create_single_source_cgal_program("fuzzy_range_query.cpp")
target_link_libraries(fuzzy_range_query PUBLIC CGAL::Eigen3_support)

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@ -3,8 +3,9 @@ project(benchmark_for_closest_rotation)
find_package(CGAL REQUIRED COMPONENTS Core)
find_package(Eigen3 3.1.0 QUIET) #(requires 3.1.0 or greater)
find_package(Eigen3 QUIET)
include(CGAL_Eigen3_support)
if(TARGET CGAL::Eigen3_support)
create_single_source_cgal_program("benchmark_for_concept_models.cpp")
target_link_libraries(benchmark_for_concept_models PUBLIC CGAL::Eigen3_support)

View File

@ -8,8 +8,9 @@ set_property(DIRECTORY PROPERTY CGAL_NO_TESTING TRUE)
find_package(CGAL REQUIRED)
find_package(Eigen3 3.1.91 QUIET) #(requires 3.1.91 or greater)
find_package(Eigen3 QUIET)
include(CGAL_Eigen3_support)
if(TARGET CGAL::Eigen3_support)
create_single_source_cgal_program("deform_mesh_for_botsch08_format.cpp")
target_link_libraries(deform_mesh_for_botsch08_format PUBLIC CGAL::Eigen3_support)

View File

@ -6,8 +6,9 @@ project(Surface_mesh_deformation_Examples)
find_package(CGAL REQUIRED)
find_package(Eigen3 3.1.91 QUIET) #(requires 3.1.91 or greater)
find_package(Eigen3 QUIET)
include(CGAL_Eigen3_support)
if(TARGET CGAL::Eigen3_support)
create_single_source_cgal_program("all_roi_assign_example.cpp")
create_single_source_cgal_program("all_roi_assign_example_custom_polyhedron.cpp")

View File

@ -6,8 +6,9 @@ project(Surface_mesh_deformation_Tests)
find_package(CGAL REQUIRED)
find_package(Eigen3 3.1.91 QUIET) #(requires 3.1.91 or greater)
find_package(Eigen3 QUIET)
include(CGAL_Eigen3_support)
if(TARGET CGAL::Eigen3_support)
create_single_source_cgal_program("Cactus_deformation_session.cpp")
target_link_libraries(Cactus_deformation_session PUBLIC CGAL::Eigen3_support)

View File

@ -5,8 +5,9 @@ project(Surface_mesh_parameterization_Examples)
find_package(CGAL REQUIRED)
find_package(Eigen3 3.1.0 QUIET) #(requires 3.1.0 or greater)
find_package(Eigen3 QUIET)
include(CGAL_Eigen3_support)
if(TARGET CGAL::Eigen3_support)
# Executables that require Eigen 3.1

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.")
endif()
find_package(Eigen3 3.1.0 QUIET) #(requires 3.1.0 or greater)
find_package(Eigen3 QUIET)
include(CGAL_Eigen3_support)
if(TARGET CGAL::Eigen3_support)
create_single_source_cgal_program("extensive_parameterization_test.cpp")
target_link_libraries(extensive_parameterization_test PUBLIC CGAL::Eigen3_support)

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_visitor_surface_mesh.cpp")
find_package(Eigen3 3.1.0 QUIET) #(3.1.0 or greater)
find_package(Eigen3 QUIET)
include(CGAL_Eigen3_support)
if(TARGET CGAL::Eigen3_support)
create_single_source_cgal_program("edge_collapse_garland_heckbert.cpp")
target_link_libraries(edge_collapse_garland_heckbert PUBLIC CGAL::Eigen3_support)

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_collapse_stability.cpp")
find_package(Eigen3 3.1.0 QUIET) #(3.1.0 or greater)
find_package(Eigen3 QUIET)
include(CGAL_Eigen3_support)
if(TARGET CGAL::Eigen3_support)
create_single_source_cgal_program("edge_collapse_garland_heckbert_variations.cpp")
target_link_libraries(edge_collapse_garland_heckbert_variations PUBLIC CGAL::Eigen3_support)

View File

@ -7,8 +7,9 @@ project(Mean_curvature_skeleton)
# CGAL and its components
find_package(CGAL REQUIRED)
find_package(Eigen3 3.2.0 QUIET) #(requires 3.2.0 or greater)
find_package(Eigen3 QUIET)
include(CGAL_Eigen3_support)
if(TARGET CGAL::Eigen3_support)
create_single_source_cgal_program("solver_benchmark.cpp")
target_link_libraries(solver_benchmark PUBLIC CGAL::Eigen3_support)

View File

@ -6,8 +6,9 @@ project(Surface_mesh_skeletonization_Examples)
find_package(CGAL REQUIRED)
find_package(Eigen3 3.2.0 QUIET) #(requires 3.2.0 or greater)
find_package(Eigen3 QUIET)
include(CGAL_Eigen3_support)
if(TARGET CGAL::Eigen3_support)
create_single_source_cgal_program("simple_mcfskel_example.cpp")
create_single_source_cgal_program("simple_mcfskel_sm_example.cpp")

View File

@ -6,8 +6,9 @@ project(Surface_mesh_skeletonization_Tests)
find_package(CGAL REQUIRED)
find_package(Eigen3 3.2.0 QUIET) #(requires 3.2.0 or greater)
find_package(Eigen3 QUIET)
include(CGAL_Eigen3_support)
if(TARGET CGAL::Eigen3_support)
create_single_source_cgal_program("MCF_Skeleton_test.cpp")
target_link_libraries(MCF_Skeleton_test PUBLIC CGAL::Eigen3_support)

View File

@ -25,8 +25,9 @@ else()
endif()
# Use Eigen for Mesh_3
find_package(Eigen3 3.1.0 QUIET) #(3.1.0 or greater)
find_package(Eigen3 QUIET)
include(CGAL_Eigen3_support)
if(TARGET CGAL::Eigen3_support)
create_single_source_cgal_program( "mesh_and_remesh_polyhedral_domain_with_features.cpp" )
target_link_libraries(mesh_and_remesh_polyhedral_domain_with_features PUBLIC CGAL::Eigen3_support)

View File

@ -27,8 +27,9 @@ cgal_add_test(test_tetrahedral_remeshing_mls)
# Tests using Mesh_3 require Eigen
find_package(Eigen3 3.1.0 QUIET) #(3.1.0 or greater)
find_package(Eigen3 QUIET)
include(CGAL_Eigen3_support)
if(TARGET CGAL::Eigen3_support)
create_single_source_cgal_program("test_mesh_and_remesh_polyhedron_with_features.cpp")
target_link_libraries(test_mesh_and_remesh_polyhedron_with_features PUBLIC CGAL::Eigen3_support)

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@ -209,31 +209,3 @@ void MainWindow::on_actionClear_Scene_triggered()
// update viewer
Q_EMIT( sceneChanged() );
}
void MainWindow::popupAboutCGAL()
{
// read contents from .html file
QFile about_CGAL(":/documentation/documentation/about_CGAL.html");
about_CGAL.open(QIODevice::ReadOnly|QIODevice::Text);
QString about_CGAL_txt = QTextStream(&about_CGAL).readAll();
// popup a message box
QMessageBox mb(QMessageBox::NoIcon,
tr("About CGAL..."),
about_CGAL_txt,
QMessageBox::Ok,
this);
// set links to be accessible by mouse or keyboard
QLabel* mb_label = mb.findChild<QLabel*>("qt_msgbox_label");
if(mb_label) {
mb_label->setTextInteractionFlags(mb_label->textInteractionFlags() |
::Qt::LinksAccessibleByMouse |
::Qt::LinksAccessibleByKeyboard);
} else {
std::cerr << "Cannot find child \"qt_msgbox_label\" in QMessageBox\n"
<< " with Qt version " << QT_VERSION_STR << "!\n";
}
mb.exec();
}

View File

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

View File

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

View File

@ -183,13 +183,13 @@ void Viewer::compile_shaders()
"} \n"
"\n"
};
QOpenGLShader *vertex_shader = new QOpenGLShader(QOpenGLShader::Vertex);
QOpenGLShader *vertex_shader = new QOpenGLShader(QOpenGLShader::Vertex, this);
if(!vertex_shader->compileSourceCode(vertex_source))
{
std::cerr<<"Compiling vertex source FAILED"<<std::endl;
}
QOpenGLShader *fragment_shader= new QOpenGLShader(QOpenGLShader::Fragment);
QOpenGLShader *fragment_shader= new QOpenGLShader(QOpenGLShader::Fragment, this);
if(!fragment_shader->compileSourceCode(fragment_source))
{
std::cerr<<"Compiling fragmentsource FAILED"<<std::endl;
@ -258,14 +258,14 @@ void Viewer::compile_shaders()
"} \n"
"\n"
};
QOpenGLShader *vertex_shader_spheres = new QOpenGLShader(QOpenGLShader::Vertex);
QOpenGLShader *vertex_shader_spheres = new QOpenGLShader(QOpenGLShader::Vertex, this);
if(!vertex_shader_spheres->compileSourceCode(vertex_source_spheres))
{
std::cerr<<"Compiling vertex source FAILED"<<std::endl;
}
QOpenGLShader *fragment_shader_spheres= new QOpenGLShader(QOpenGLShader::Fragment);
QOpenGLShader *fragment_shader_spheres= new QOpenGLShader(QOpenGLShader::Fragment, this);
if(!fragment_shader_spheres->compileSourceCode(fragment_source_spheres))
{
std::cerr<<"Compiling fragmentsource FAILED"<<std::endl;
@ -312,7 +312,7 @@ void Viewer::compile_shaders()
QOpenGLShader *vertex_shader_cylinders = new QOpenGLShader(QOpenGLShader::Vertex);
QOpenGLShader *vertex_shader_cylinders = new QOpenGLShader(QOpenGLShader::Vertex, this);
if(!vertex_shader_cylinders->compileSourceCode(vertex_source_cylinders))
{
std::cerr<<"Compiling vertex source FAILED"<<std::endl;
@ -1628,7 +1628,7 @@ void Viewer::draw()
}
void Viewer::drawVertex(const Point_3& p, std::vector<float> *vertices)
void Viewer::drawVertex(const Point_3& p, Coords_ptr& vertices)
{
vertices->push_back(p.x()); vertices->push_back(p.y()); vertices->push_back(p.z());
@ -1636,13 +1636,13 @@ void Viewer::drawVertex(const Point_3& p, std::vector<float> *vertices)
}
void Viewer::drawEdge(const Point_3& from, const Point_3& to, std::vector<float> *vertices)
void Viewer::drawEdge(const Point_3& from, const Point_3& to, Coords_ptr& vertices)
{
vertices->push_back( from.x()); vertices->push_back(from.y()); vertices->push_back(from.z());
vertices->push_back( to.x()); vertices->push_back(to.y()); vertices->push_back(to.z());
}
void Viewer::drawFacet(const Triangle_3& t, std::vector<float> *vertices)
void Viewer::drawFacet(const Triangle_3& t, Coords_ptr& vertices)
{
Point_3 p0 = t.vertex(0);
Point_3 p1 = t.vertex(1);
@ -2482,7 +2482,7 @@ void Viewer::incremental_insert() {
}
void Viewer::draw_cylinder(float R, int prec, std::vector<float> *vertices, std::vector<float> *normals)
void Viewer::draw_cylinder(float R, int prec, Coords_ptr& vertices, Coords_ptr& normals)
{
vertices->resize(0);
normals->resize(0);
@ -2551,7 +2551,7 @@ void Viewer::draw_cylinder(float R, int prec, std::vector<float> *vertices, std:
}
}
void Viewer::draw_sphere(float R, int prec, std::vector<float> *vertices, std::vector<float> *normals)
void Viewer::draw_sphere(float R, int prec, Coords_ptr& vertices, Coords_ptr& normals)
{
vertices->resize(0);
normals->resize(0);

View File

@ -42,42 +42,41 @@ public:
, m_hasEmptyS(false)
, m_showTrackball(true)
, m_pDlgPrefer(nullptr)
{
pos_emptyFacet = new std::vector<float>();
pos_emptySphere= new std::vector<float>();
points_emptySphere = new std::vector<float>();
pos_points = new std::vector<float>();
pos_newPoint = new std::vector<float>();
pos_selectedVertex = new std::vector<float>();
pos_movingPoint = new std::vector<float>();
pos_queryPoint = new std::vector<float>();
pos_trackBall = new std::vector<float>();
pos_voronoi = new std::vector<float>();
pos_delaunay = new std::vector<float>();
pos_facets = new std::vector<float>();
pos_newFacet = new std::vector<float>();
pos_nearest_neighbor = new std::vector<float>();
points_locationSphere = new std::vector<float>();
points_cylinder = new std::vector<float>();
normals_cylinder = new std::vector<float>();
points_sphere = new std::vector<float>();
points_trackBall = new std::vector<float>();
normals_sphere = new std::vector<float>();
normals_emptySphere = new std::vector<float>();
normals_trackBall= new std::vector<float>();
transfo1_voronoi = new std::vector<float>();
transfo2_voronoi = new std::vector<float>();
transfo3_voronoi = new std::vector<float>();
transfo4_voronoi = new std::vector<float>();
transfo1_delaunay = new std::vector<float>();
transfo2_delaunay = new std::vector<float>();
transfo3_delaunay = new std::vector<float>();
transfo4_delaunay = new std::vector<float>();
incremental_points = new std::vector<float>();
incremental_next_point = new std::vector<float>();
incremental_facet = new std::vector<float>();
incremental_conflict = new std::vector<float>();
}
, pos_emptyFacet{new Coords}
, pos_emptySphere{new Coords}
, points_emptySphere{new Coords}
, pos_points{new Coords}
, pos_newPoint{new Coords}
, pos_selectedVertex{new Coords}
, pos_movingPoint{new Coords}
, pos_queryPoint{new Coords}
, pos_trackBall{ new Coords}
, pos_voronoi{new Coords}
, pos_delaunay{new Coords}
, pos_facets{new Coords}
, pos_newFacet{new Coords}
, pos_nearest_neighbor{new Coords}
, points_locationSphere{new Coords}
, points_cylinder{new Coords}
, normals_cylinder{new Coords}
, points_sphere{new Coords}
, points_trackBall{new Coords}
, normals_sphere{new Coords}
, normals_emptySphere{new Coords}
, normals_trackBall{new Coords}
, transfo1_voronoi{new Coords}
, transfo2_voronoi{new Coords}
, transfo3_voronoi{new Coords}
, transfo4_voronoi{new Coords}
, transfo1_delaunay{new Coords}
, transfo2_delaunay{new Coords}
, transfo3_delaunay{new Coords}
, transfo4_delaunay{new Coords}
, incremental_points{new Coords}
, incremental_next_point{new Coords}
, incremental_facet{new Coords}
, incremental_conflict{new Coords}
{}
~Viewer()
{
@ -269,12 +268,15 @@ protected:
QString helpString() const;
private:
using Coords = std::vector<float>;
using Coords_ptr = std::unique_ptr<std::vector<float>>;
// draw a 3d effect vertex
void drawVertex(const Point_3& p, std::vector<float> *vertices);
void drawVertex(const Point_3& p, Coords_ptr& vertices);
// draw a 3d effect edge
void drawEdge(const Point_3& from, const Point_3 &to, std::vector<float> *vertices);
void drawEdge(const Point_3& from, const Point_3 &to, Coords_ptr& vertices);
// draw a facet
void drawFacet(const Triangle_3& t, std::vector<float> *vertices);
void drawFacet(const Triangle_3& t, Coords_ptr& vertices);
// test whether the give 3D point is on the sphere
inline bool isOnSphere( const Point_3 & pt ) {
return ( (pt.x()*pt.x() + pt.y()*pt.y() + pt.z()*pt.z()) == (m_fRadius*m_fRadius) );
@ -362,42 +364,41 @@ private:
bool are_buffers_initialized;
bool extension_is_found;
std::vector<float> *pos_emptyFacet;
std::vector<float> *pos_emptySphere;
std::vector<float> *points_emptySphere;
std::vector<float> *pos_points;
std::vector<float> *pos_newPoint;
std::vector<float> *pos_selectedVertex;
std::vector<float> *pos_movingPoint;
std::vector<float> *pos_queryPoint;
std::vector<float> *pos_trackBall;
std::vector<float> *points_trackBall;
std::vector<float> *pos_voronoi;
std::vector<float> *pos_delaunay;
std::vector<float> *pos_facets;
std::vector<float> *pos_newFacet;
std::vector<float> *pos_nearest_neighbor;
std::vector<float> *points_locationSphere;
std::vector<float> *points_cylinder;
std::vector<float> *normals_cylinder;
std::vector<float> *points_sphere;
std::vector<float> *normals_sphere;
std::vector<float> *normals_emptySphere;
std::vector<float> *normals_trackBall;
std::vector<float> *transfo1_voronoi;
std::vector<float> *transfo2_voronoi;
std::vector<float> *transfo3_voronoi;
std::vector<float> *transfo4_voronoi;
std::vector<float> *transfo1_delaunay;
std::vector<float> *transfo2_delaunay;
std::vector<float> *transfo3_delaunay;
std::vector<float> *transfo4_delaunay;
std::vector<float> *incremental_points;
std::vector<float> *incremental_next_point;
std::vector<float> *incremental_facet;
std::vector<float> *incremental_conflict;
//picking
Coords_ptr pos_emptyFacet;
Coords_ptr pos_emptySphere;
Coords_ptr points_emptySphere;
Coords_ptr pos_points;
Coords_ptr pos_newPoint;
Coords_ptr pos_selectedVertex;
Coords_ptr pos_movingPoint;
Coords_ptr pos_queryPoint;
Coords_ptr pos_trackBall;
Coords_ptr pos_voronoi;
Coords_ptr pos_delaunay;
Coords_ptr pos_facets;
Coords_ptr pos_newFacet;
Coords_ptr pos_nearest_neighbor;
Coords_ptr points_locationSphere;
Coords_ptr points_cylinder;
Coords_ptr normals_cylinder;
Coords_ptr points_sphere;
Coords_ptr points_trackBall;
Coords_ptr normals_sphere;
Coords_ptr normals_emptySphere;
Coords_ptr normals_trackBall;
Coords_ptr transfo1_voronoi;
Coords_ptr transfo2_voronoi;
Coords_ptr transfo3_voronoi;
Coords_ptr transfo4_voronoi;
Coords_ptr transfo1_delaunay;
Coords_ptr transfo2_delaunay;
Coords_ptr transfo3_delaunay;
Coords_ptr transfo4_delaunay;
Coords_ptr incremental_points;
Coords_ptr incremental_next_point;
Coords_ptr incremental_facet;
Coords_ptr incremental_conflict;
//pickin
QMap<float, int> picked_IDs;
QPoint picking_pos;
@ -414,8 +415,8 @@ private:
void compute_elements();
void attrib_buffers(CGAL::QGLViewer*);
void compile_shaders();
void draw_cylinder(float R, int prec, std::vector<float> *vertices, std::vector<float> *normals);
void draw_sphere(float R, int prec, std::vector<float> *vertices, std::vector<float> *normals);
void draw_cylinder(float R, int prec, Coords_ptr& vertices, Coords_ptr& normals);
void draw_sphere(float R, int prec, Coords_ptr& vertices, Coords_ptr& normals);
};
#endif

View File

@ -18,7 +18,7 @@ find_package(CGAL REQUIRED OPTIONAL_COMPONENTS Qt6)
# Find Qt6 itself
find_package(Qt6 QUIET COMPONENTS Widgets OpenGL)
find_package(Eigen3 3.1.0 QUIET) #(requires 3.1.0 or greater)
find_package(Eigen3 QUIET)
include(CGAL_Eigen3_support)
if(CGAL_Qt6_FOUND AND Qt6_FOUND AND TARGET CGAL::Eigen3_support)

Some files were not shown because too many files have changed in this diff Show More