From c5724abebe3332196e587253cd7f9d74f0ad5c55 Mon Sep 17 00:00:00 2001 From: Maxime Gimeno Date: Mon, 9 Jul 2018 16:53:04 +0200 Subject: [PATCH 001/268] Replace Polyhedorn by SMesh in c3t3_item --- Polyhedron/demo/Polyhedron/CMakeLists.txt | 2 +- Polyhedron/demo/Polyhedron/Scene_c3t3_item.cpp | 5 +++-- Polyhedron/demo/Polyhedron/Scene_c3t3_item.h | 1 - 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/Polyhedron/demo/Polyhedron/CMakeLists.txt b/Polyhedron/demo/Polyhedron/CMakeLists.txt index fcc77ebd995..1072c1e886f 100644 --- a/Polyhedron/demo/Polyhedron/CMakeLists.txt +++ b/Polyhedron/demo/Polyhedron/CMakeLists.txt @@ -230,7 +230,7 @@ if(CGAL_Qt5_FOUND AND Qt5_FOUND AND OPENGL_FOUND ) endmacro(add_item) add_item(scene_c3t3_item Scene_c3t3_item.cpp) - target_link_libraries(scene_c3t3_item PUBLIC scene_polyhedron_item scene_polygon_soup_item scene_basic_objects ${TBB_LIBRARIES}) + target_link_libraries(scene_c3t3_item PUBLIC scene_surface_mesh_item scene_polygon_soup_item scene_basic_objects ${TBB_LIBRARIES}) if(TBB_FOUND) CGAL_target_use_TBB(scene_c3t3_item) endif() diff --git a/Polyhedron/demo/Polyhedron/Scene_c3t3_item.cpp b/Polyhedron/demo/Polyhedron/Scene_c3t3_item.cpp index 80a04dd2c94..484a1ac2dc4 100644 --- a/Polyhedron/demo/Polyhedron/Scene_c3t3_item.cpp +++ b/Polyhedron/demo/Polyhedron/Scene_c3t3_item.cpp @@ -1,6 +1,7 @@ #include "config.h" #include "Scene_spheres_item.h" #include "Scene_c3t3_item.h" +#include "Scene_surface_mesh_item.h" #include #include @@ -1308,7 +1309,7 @@ void Scene_c3t3_item::export_facets_in_complex() } namespace PMP = CGAL::Polygon_mesh_processing; - Polyhedron outmesh; + SMesh outmesh; if (PMP::is_polygon_soup_a_polygon_mesh(polygons)) { @@ -1317,7 +1318,7 @@ void Scene_c3t3_item::export_facets_in_complex() CGAL_assertion(orientable); PMP::polygon_soup_to_polygon_mesh(points, polygons, outmesh); - Scene_polyhedron_item* item = new Scene_polyhedron_item(outmesh); + Scene_surface_mesh_item* item = new Scene_surface_mesh_item(outmesh); item->setName(QString("%1_%2").arg(this->name()).arg("facets")); scene->addItem(item); } diff --git a/Polyhedron/demo/Polyhedron/Scene_c3t3_item.h b/Polyhedron/demo/Polyhedron/Scene_c3t3_item.h index 43c17e9e00e..701c1cd421e 100644 --- a/Polyhedron/demo/Polyhedron/Scene_c3t3_item.h +++ b/Polyhedron/demo/Polyhedron/Scene_c3t3_item.h @@ -19,7 +19,6 @@ #include #include -#include #include #include #include From 451a4f89d858cdb9072d0554db6bc0dad24d3811 Mon Sep 17 00:00:00 2001 From: Maxime Gimeno Date: Mon, 9 Jul 2018 17:03:39 +0200 Subject: [PATCH 002/268] Use Surface_mesh in Random_perturbation_plugin --- .../demo/Polyhedron/Plugins/PMP/CMakeLists.txt | 2 +- .../Plugins/PMP/Random_perturbation_plugin.cpp | 16 ++++++++-------- 2 files changed, 9 insertions(+), 9 deletions(-) diff --git a/Polyhedron/demo/Polyhedron/Plugins/PMP/CMakeLists.txt b/Polyhedron/demo/Polyhedron/Plugins/PMP/CMakeLists.txt index a626bc567d9..22b42ac8442 100644 --- a/Polyhedron/demo/Polyhedron/Plugins/PMP/CMakeLists.txt +++ b/Polyhedron/demo/Polyhedron/Plugins/PMP/CMakeLists.txt @@ -154,7 +154,7 @@ target_compile_definitions(distance_sm_plugin PUBLIC "-DUSE_SURFACE_MESH" ) qt5_wrap_ui( randomPerturbationUI_FILES Random_perturbation_dialog.ui) polyhedron_demo_plugin(random_perturbation_plugin Random_perturbation_plugin ${randomPerturbationUI_FILES}) -target_link_libraries(random_perturbation_plugin PUBLIC scene_polyhedron_item scene_polyhedron_selection_item) +target_link_libraries(random_perturbation_plugin PUBLIC scene_surface_mesh_item scene_surface_mesh_selection_item) polyhedron_demo_plugin(degenerated_faces_poly_plugin Degenerated_faces_plugin) target_link_libraries(degenerated_faces_poly_plugin PUBLIC scene_polyhedron_item scene_polyhedron_selection_item) diff --git a/Polyhedron/demo/Polyhedron/Plugins/PMP/Random_perturbation_plugin.cpp b/Polyhedron/demo/Polyhedron/Plugins/PMP/Random_perturbation_plugin.cpp index 92d59940bbc..56d996f60cb 100644 --- a/Polyhedron/demo/Polyhedron/Plugins/PMP/Random_perturbation_plugin.cpp +++ b/Polyhedron/demo/Polyhedron/Plugins/PMP/Random_perturbation_plugin.cpp @@ -3,7 +3,7 @@ #include -#include "Scene_polyhedron_item.h" +#include "Scene_surface_mesh_item.h" #include "Scene_polyhedron_selection_item.h" #include "Polyhedron_type.h" @@ -60,7 +60,7 @@ public: bool applicable(QAction*) const { const Scene_interface::Item_id index = scene->mainSelectionIndex(); - if (qobject_cast(scene->item(index))) + if (qobject_cast(scene->item(index))) return true; else if (qobject_cast(scene->item(index))) return true; @@ -72,8 +72,8 @@ public Q_SLOTS: void random_perturb() { const Scene_interface::Item_id index = scene->mainSelectionIndex(); - Scene_polyhedron_item* poly_item = - qobject_cast(scene->item(index)); + Scene_surface_mesh_item* poly_item = + qobject_cast(scene->item(index)); Scene_polyhedron_selection_item* selection_item = qobject_cast(scene->item(index)); @@ -104,7 +104,7 @@ public Q_SLOTS: if (poly_item) { - Polyhedron& pmesh = *poly_item->polyhedron(); + SMesh& pmesh = *poly_item->face_graph(); if(ui.deterministic_checkbox->isChecked()) { unsigned int seed = static_cast(ui.seed_spinbox->value()); @@ -119,7 +119,7 @@ public Q_SLOTS: } poly_item->invalidateOpenGLBuffers(); - Q_EMIT poly_item->itemChanged(); + poly_item->itemChanged(); } else if (selection_item) { @@ -134,7 +134,7 @@ public Q_SLOTS: QApplication::restoreOverrideCursor(); return; } - Polyhedron& pmesh = *selection_item->polyhedron(); + SMesh& pmesh = *selection_item->polyhedron(); if (ui.deterministic_checkbox->isChecked()) { unsigned int seed = static_cast(ui.seed_spinbox->value()); @@ -172,7 +172,7 @@ public Q_SLOTS: Ui::Random_perturbation_dialog perturb_dialog(QDialog* dialog, - Scene_polyhedron_item* poly_item, + Scene_surface_mesh_item* poly_item, Scene_polyhedron_selection_item* selection_item) { Ui::Random_perturbation_dialog ui; From 163f5518a615c67661fa124f8bf78d3b7fb6ce64 Mon Sep 17 00:00:00 2001 From: Maxime Gimeno Date: Tue, 10 Jul 2018 08:55:22 +0200 Subject: [PATCH 003/268] Use surface_mesh for plane_detection --- .../Plugins/Surface_mesh/CMakeLists.txt | 2 +- .../Mesh_plane_detection_plugin.cpp | 79 ++++++++----------- 2 files changed, 35 insertions(+), 46 deletions(-) diff --git a/Polyhedron/demo/Polyhedron/Plugins/Surface_mesh/CMakeLists.txt b/Polyhedron/demo/Polyhedron/Plugins/Surface_mesh/CMakeLists.txt index b55fb050ecf..d312df34f05 100644 --- a/Polyhedron/demo/Polyhedron/Plugins/Surface_mesh/CMakeLists.txt +++ b/Polyhedron/demo/Polyhedron/Plugins/Surface_mesh/CMakeLists.txt @@ -22,7 +22,7 @@ target_link_libraries(mesh_segmentation_plugin PUBLIC scene_polyhedron_item scen qt5_wrap_ui( mesh_plane_detectionUI_FILES Mesh_plane_detection_dialog.ui) polyhedron_demo_plugin(mesh_plane_detection_plugin Mesh_plane_detection_plugin ${mesh_plane_detectionUI_FILES}) -target_link_libraries(mesh_plane_detection_plugin PUBLIC scene_polyhedron_item) +target_link_libraries(mesh_plane_detection_plugin PUBLIC scene_surface_mesh_item) qt5_wrap_ui( mesh_simplificationUI_FILES Mesh_simplification_dialog.ui) polyhedron_demo_plugin(mesh_simplification_plugin Mesh_simplification_plugin ${mesh_simplificationUI_FILES}) diff --git a/Polyhedron/demo/Polyhedron/Plugins/Surface_mesh/Mesh_plane_detection_plugin.cpp b/Polyhedron/demo/Polyhedron/Plugins/Surface_mesh/Mesh_plane_detection_plugin.cpp index b5c649bc824..64ba417428f 100644 --- a/Polyhedron/demo/Polyhedron/Plugins/Surface_mesh/Mesh_plane_detection_plugin.cpp +++ b/Polyhedron/demo/Polyhedron/Plugins/Surface_mesh/Mesh_plane_detection_plugin.cpp @@ -1,7 +1,7 @@ #include #include -#include "Scene_polyhedron_item.h" +#include "Scene_surface_mesh_item.h" #include "Polyhedron_type.h" #include "Scene.h" #include "Color_map.h" @@ -44,7 +44,7 @@ class Polyhedron_demo_mesh_plane_detection_plugin : bool applicable(QAction*) const { return - qobject_cast(scene->item(scene->mainSelectionIndex())); + qobject_cast(scene->item(scene->mainSelectionIndex())); } void init(QMainWindow* mainWindow, CGAL::Three::Scene_interface* scene_interface, Messages_interface*) { @@ -66,9 +66,9 @@ class Polyhedron_demo_mesh_plane_detection_plugin : } template - void colorize_segmentation(Scene_polyhedron_item* item, SegmentPropertyMap& segment_ids, std::vector& color_vector); + void colorize_segmentation(Scene_surface_mesh_item* item, SegmentPropertyMap& segment_ids, std::vector& color_vector); - void check_and_set_ids(Polyhedron* polyhedron); + void check_and_set_ids(SMesh *sm); public Q_SLOTS: void on_actionPlaneDetection_triggered(); @@ -78,37 +78,34 @@ private: template - void detect_planes_in_mesh (Polyhedron& mesh, const double area_min, + void detect_planes_in_mesh (SMesh& mesh, const double area_min, const double angle_max, OutputIterator output) { std::cerr << "Detecting planes with:" << std::endl << " * Area min = " << area_min << std::endl << " * Min cos angle = " << angle_max << std::endl; - std::vector label_region(mesh.size_of_facets(), 0); + std::vector label_region(mesh.number_of_faces(), 0); int class_index = 0; - std::vector facets (mesh.size_of_facets()); - for (typename Polyhedron::Facet_iterator f = mesh.facets_begin(); f != mesh.facets_end(); ++f) - facets[f->id()] = f; - for (typename Polyhedron::Facet_iterator f = mesh.facets_begin(); f != mesh.facets_end(); ++f) + for (typename SMesh::Face_iterator f = mesh.faces_begin(); f != mesh.faces_end(); ++f) { - if (label_region[f->id()] != 0) + if (label_region[static_cast(*f)] != 0) continue; class_index++; - label_region[f->id()] = class_index; - double area = PMP::face_area (f, mesh, PMP::parameters::geom_traits(Kernel())); + label_region[static_cast(*f)] = class_index; + double area = PMP::face_area (*f, mesh, PMP::parameters::geom_traits(Kernel())); //characteristics of the seed - Kernel::Vector_3 normal_seed = PMP::compute_face_normal (f, mesh, PMP::parameters::geom_traits(Kernel())); - Kernel::Point_3 pt_seed = f->halfedge()->vertex()->point(); + Kernel::Vector_3 normal_seed = PMP::compute_face_normal (*f, mesh, PMP::parameters::geom_traits(Kernel())); + Kernel::Point_3 pt_seed = mesh.point(target(halfedge(*f, mesh), mesh)); Kernel::Plane_3 optimal_plane(pt_seed, normal_seed); // Kernel::Plane_3 optimal_plane = f->plane(); //initialization containers - std::vector index_container (1, f->id()); - std::vector index_container_former_ring (1, f->id()); + std::vector index_container (1, static_cast(*f)); + std::vector index_container_former_ring (1, static_cast(*f)); std::list index_container_current_ring; //propagation @@ -119,17 +116,18 @@ private: for (std::size_t k = 0; k < index_container_former_ring.size(); k++) { - typename Polyhedron::Halfedge_around_facet_circulator - circ = facets[index_container_former_ring[k]]->facet_begin(), start = circ; + typename SMesh::Halfedge_around_face_circulator + circ( mesh.halfedge(SMesh::Face_index(index_container_former_ring[k])), mesh) + , start = circ; do { - if (circ->is_border_edge()) + if (is_border(*circ, mesh)) continue; - typename Polyhedron::Facet_handle - neighbor = circ->opposite()->facet(); - std::size_t neighbor_index = neighbor->id(); + typename SMesh::Face_index + neighbor = mesh.face(opposite(*circ, mesh)); + std::size_t neighbor_index = static_cast(neighbor); if (label_region[neighbor_index] == 0) { Kernel::Vector_3 normal @@ -163,7 +161,7 @@ private: if (area < area_min) { class_index--; - label_region[f->id()] = 0; + label_region[static_cast(*f)] = 0; for (std::size_t k = 0; k < index_container.size(); k++) label_region[index_container[k]] = 0; } @@ -183,12 +181,12 @@ void Polyhedron_demo_mesh_plane_detection_plugin::on_actionPlaneDetection_trigge { const CGAL::Three::Scene_interface::Item_id index = scene->mainSelectionIndex(); - Scene_polyhedron_item* poly_item = - qobject_cast(scene->item(index)); + Scene_surface_mesh_item* poly_item = + qobject_cast(scene->item(index)); if (poly_item) { - Polyhedron& pmesh =*poly_item->polyhedron(); + SMesh& pmesh =*poly_item->polyhedron(); QDialog dialog(mw); Ui::Mesh_plane_detection_dialog ui; @@ -204,18 +202,18 @@ void Polyhedron_demo_mesh_plane_detection_plugin::on_actionPlaneDetection_trigge QApplication::setOverrideCursor(Qt::WaitCursor); QApplication::processEvents(); - check_and_set_ids (&pmesh); + //check_and_set_ids (&pmesh); std::vector indices; detect_planes_in_mesh (pmesh, ui.minimumAreaDoubleSpinBox->value(), std::fabs(std::cos (CGAL_PI * ui.maximumDeviationFromNormalSpinBox->value() / 180.)), std::back_inserter (indices)); - poly_item->set_color_vector_read_only(true); + //poly_item->set_color_vector_read_only(true); colorize_segmentation (poly_item, indices, poly_item->color_vector()); std::cerr << "ok (" << time.elapsed() << " ms, " - << pmesh.size_of_halfedges() / 2 << " edges)" << std::endl; + << pmesh.number_of_halfedges() / 2 << " edges)" << std::endl; poly_item->invalidateOpenGLBuffers(); scene->itemChanged(index); @@ -224,30 +222,21 @@ void Polyhedron_demo_mesh_plane_detection_plugin::on_actionPlaneDetection_trigge } - -void Polyhedron_demo_mesh_plane_detection_plugin::check_and_set_ids(Polyhedron* polyhedron) -{ - std::size_t facet_id = 0; - for(Polyhedron::Facet_iterator facet_it = polyhedron->facets_begin(); - facet_it != polyhedron->facets_end(); ++facet_it, ++facet_id) - facet_it->id() = facet_id; -} - template void Polyhedron_demo_mesh_plane_detection_plugin::colorize_segmentation( - Scene_polyhedron_item* item, + Scene_surface_mesh_item* item, SegmentPropertyMap& segment_ids, std::vector& color_vector) { item->setItemIsMulticolor(true); - Polyhedron* polyhedron = item->polyhedron(); + SMesh* sm = item->face_graph(); color_vector.clear(); std::size_t max_segment = 0; - for(Polyhedron::Facet_iterator facet_it = polyhedron->facets_begin(); - facet_it != polyhedron->facets_end(); ++facet_it) + for(SMesh::Face_iterator facet_it = sm->faces_begin(); + facet_it != sm->faces_end(); ++facet_it) { - std::size_t segment_id = segment_ids[facet_it->id()]; - facet_it->set_patch_id(static_cast(segment_id)); + std::size_t segment_id = segment_ids[static_cast(*facet_it)]; + sm->property_map("f:patch_id").first[*facet_it] = static_cast(segment_id); max_segment = (std::max)(max_segment, segment_id); } color_vector.push_back(QColor(0, 0, 0)); From 5d98437e822ee068282f09c16f960dc19c04b1bd Mon Sep 17 00:00:00 2001 From: Maxime Gimeno Date: Tue, 10 Jul 2018 09:22:56 +0200 Subject: [PATCH 004/268] OFF_plugin use surface_mesh --- .../Polyhedron/Plugins/IO/OFF_io_plugin.cpp | 148 ++++++++---------- 1 file changed, 67 insertions(+), 81 deletions(-) diff --git a/Polyhedron/demo/Polyhedron/Plugins/IO/OFF_io_plugin.cpp b/Polyhedron/demo/Polyhedron/Plugins/IO/OFF_io_plugin.cpp index cfe9f558948..b302e2764b1 100644 --- a/Polyhedron/demo/Polyhedron/Plugins/IO/OFF_io_plugin.cpp +++ b/Polyhedron/demo/Polyhedron/Plugins/IO/OFF_io_plugin.cpp @@ -1,7 +1,8 @@ -#include "Scene_polyhedron_item.h" +#include "Scene_surface_mesh_item.h" #include "Scene_polygon_soup_item.h" #include "Scene_points_with_normal_item.h" -#include "Polyhedron_type.h" +#include + #include @@ -25,7 +26,7 @@ class Polyhedron_demo_off_plugin : public: bool isDefaultLoader(const Scene_item *item) const { - if(qobject_cast(item) + if(qobject_cast(item) || qobject_cast(item)) return true; return false; @@ -65,68 +66,72 @@ Polyhedron_demo_off_plugin::load_off(QFileInfo fileinfo) { std::cerr << "Error! Cannot open file " << (const char*)fileinfo.filePath().toUtf8() << std::endl; return NULL; } - - + + CGAL::File_scanner_OFF scanner( in, false); - + // Try to read .off in a point set if (scanner.size_of_facets() == 0) - { - in.seekg(0); - Scene_points_with_normal_item* item = new Scene_points_with_normal_item(); - item->setName(fileinfo.completeBaseName()); - if (scanner.size_of_vertices()==0) return item; - if(!item->read_off_point_set(in)) - { - delete item; - return 0; - } - - return item; - } - - // to detect isolated vertices - std::size_t total_nb_of_vertices = scanner.size_of_vertices(); - in.seekg(0); - - // Try to read .off in a polyhedron - Scene_polyhedron_item* item = new Scene_polyhedron_item(); - item->setName(fileinfo.completeBaseName()); - if(!item->load(in)) { - delete item; - - // Try to read .off in a polygon soup - Scene_polygon_soup_item* soup_item = new Scene_polygon_soup_item; - soup_item->setName(fileinfo.completeBaseName()); + in.seekg(0); + Scene_points_with_normal_item* item = new Scene_points_with_normal_item(); + item->setName(fileinfo.completeBaseName()); + if (scanner.size_of_vertices()==0) return item; + if(!item->read_off_point_set(in)) + { + delete item; + return 0; + } + + return item; + } + + in.seekg(0); + // Try to read .off in a surface_mesh + SMesh *surface_mesh = new SMesh(); + in >> *surface_mesh; + if(!in || surface_mesh->is_empty()) + { + delete surface_mesh; in.close(); + // Try to read .off in a polygon soup + Scene_polygon_soup_item* soup_item = new Scene_polygon_soup_item(); + soup_item->setName(fileinfo.completeBaseName()); std::ifstream in2(fileinfo.filePath().toUtf8()); if(!soup_item->load(in2)) { + QMessageBox::warning( + CGAL::Three::Three::mainWindow(), + "Cannot Open File", + QString("Cannot open file %1").arg((const char*)fileinfo.filePath().toUtf8())); delete soup_item; return 0; } + QMessageBox::information( + CGAL::Three::Three::mainWindow(), + "Cannot Open File", + "The facets don't seem to be oriented. Loading a Soup of polygons instead." + "To convert it to a Surface_mesh, use Polygon Mesh Processing -> Orient polygon soup"); return soup_item; } - else - if( total_nb_of_vertices!= item->polyhedron()->size_of_vertices()) - { - item->setNbIsolatedvertices(total_nb_of_vertices - item->polyhedron()->size_of_vertices()); - //needs two restore, it's not a typo - QApplication::restoreOverrideCursor(); - QMessageBox::warning((QWidget*)NULL, - tr("Isolated vertices found"), - tr("%1 isolated vertices ignored") - .arg(item->getNbIsolatedvertices())); - } - - //if file > 100 MB, assume it is a very big file and disable flat shading to gain memory. - if(fileinfo.size() > 100000000)//100 MB + Scene_surface_mesh_item* item = new Scene_surface_mesh_item(surface_mesh); + item->setName(fileinfo.completeBaseName()); + std::size_t isolated_v = 0; + BOOST_FOREACH(vertex_descriptor v, vertices(*surface_mesh)) { - item->set_flat_disabled(true); + if(surface_mesh->is_isolated(v)) + { + ++isolated_v; + } + } + if(isolated_v >0) + { + item->setNbIsolatedvertices(isolated_v); + //needs two restore, it's not a typo QApplication::restoreOverrideCursor(); QMessageBox::warning((QWidget*)NULL, - tr("The file seems to be very big."), - tr("Flat shading has been disabled to gain memory. You can force it in the context menu of the item.")); + tr("Isolated vertices"), + tr("%1 isolated vertices found") + .arg(item->getNbIsolatedvertices())); } return item; } @@ -139,62 +144,43 @@ Polyhedron_demo_off_plugin::load_obj(QFileInfo fileinfo) { std::cerr << "Error! Cannot open file " << (const char*)fileinfo.filePath().toUtf8() << std::endl; return NULL; } - typedef Polyhedron::Vertex::Point Point; - std::vector points; - std::vector > faces; - if(!CGAL::read_OBJ(in,points,faces)) return 0; - - Scene_item* item = 0; - - namespace pmp = CGAL::Polygon_mesh_processing; - if(pmp::is_polygon_soup_a_polygon_mesh(faces)) { - Scene_polyhedron_item* poly_item = new Scene_polyhedron_item(); - pmp::polygon_soup_to_polygon_mesh(std::move(points), - std::move(faces), - *(poly_item->polyhedron())); - item = poly_item; - item->invalidateOpenGLBuffers(); - } else { - Scene_polygon_soup_item* polygon_soup_item = new Scene_polygon_soup_item(); - polygon_soup_item->load(std::move(points), std::move(faces)); - item = polygon_soup_item; - } - // Try to read .obj in a polyhedron - item->setName(fileinfo.completeBaseName()); - return item; + Scene_surface_mesh_item* item = new Scene_surface_mesh_item(); + if(item->load_obj(in)) + return item; + return 0; } bool Polyhedron_demo_off_plugin::canSave(const CGAL::Three::Scene_item* item) { - // This plugin supports polyhedrons and polygon soups - return qobject_cast(item) || + // This plugin supports surface_meshes and polygon soups + return qobject_cast(item) || qobject_cast(item) || qobject_cast(item); } bool Polyhedron_demo_off_plugin::save(const CGAL::Three::Scene_item* item, QFileInfo fileinfo) { - // This plugin supports point sets, polyhedrons and polygon soups + // This plugin supports point sets, surface_meshes and polygon soups const Scene_points_with_normal_item* points_item = qobject_cast(item); - const Scene_polyhedron_item* poly_item = - qobject_cast(item); + const Scene_surface_mesh_item* sm_item = + qobject_cast(item); const Scene_polygon_soup_item* soup_item = qobject_cast(item); - if(!poly_item && !soup_item && !points_item) + if(!sm_item && !soup_item && !points_item) return false; std::ofstream out(fileinfo.filePath().toUtf8()); out.precision (std::numeric_limits::digits10 + 2); if(fileinfo.suffix().toLower() == "off"){ - return (poly_item && poly_item->save(out)) || + return (sm_item && sm_item->save(out)) || (soup_item && soup_item->save(out)) || (points_item && points_item->write_off_point_set(out)); } if(fileinfo.suffix().toLower() == "obj"){ - return (poly_item && poly_item->save_obj(out)); + return (sm_item && sm_item->save_obj(out)); } return false; } From 9f1b4d3e73f3c6e5a1f70d347dd0e3f51a45e5a9 Mon Sep 17 00:00:00 2001 From: Maxime Gimeno Date: Tue, 10 Jul 2018 11:32:33 +0200 Subject: [PATCH 005/268] remove polyhedron_mode --- Polyhedron/demo/Polyhedron/MainWindow.cpp | 26 +-- Polyhedron/demo/Polyhedron/MainWindow.h | 7 - .../Convex_decomposition/Nef_plugin.cpp | 12 -- .../Convex_hull/Convex_hull_plugin.cpp | 22 +-- .../Polyhedron/Plugins/IO/GOCAD_io_plugin.cpp | 80 +++----- .../Polyhedron/Plugins/IO/STL_io_plugin.cpp | 39 +--- .../Polyhedron/Plugins/IO/Surf_io_plugin.cpp | 5 +- .../Plugins/Mesh_2/Mesh_2_plugin.cpp | 27 +-- .../Plugins/Mesh_3/Mesh_3_plugin.cpp | 42 ++--- .../Plugins/PCA/Basic_generator_plugin.cpp | 31 +-- .../Plugins/PCA/Edit_box_plugin.cpp | 19 -- .../PMP/Hole_filling_polyline_plugin.cpp | 55 ++---- .../Point_set_shape_detection_plugin.cpp | 7 +- .../Surface_reconstruction_plugin.cpp | 177 +++++------------- Polyhedron/demo/Polyhedron/Preferences.ui | 32 ---- 15 files changed, 137 insertions(+), 444 deletions(-) diff --git a/Polyhedron/demo/Polyhedron/MainWindow.cpp b/Polyhedron/demo/Polyhedron/MainWindow.cpp index 01ef18cc607..2a94d2b8dd8 100644 --- a/Polyhedron/demo/Polyhedron/MainWindow.cpp +++ b/Polyhedron/demo/Polyhedron/MainWindow.cpp @@ -1409,7 +1409,6 @@ void MainWindow::readSettings() // read plugin blacklist QStringList blacklist=settings.value("plugin_blacklist",QStringList()).toStringList(); Q_FOREACH(QString name,blacklist){ plugin_blacklist.insert(name); } - set_facegraph_mode_adapter(settings.value("polyhedron_mode", true).toBool()); } void MainWindow::writeSettings() @@ -1424,8 +1423,6 @@ void MainWindow::writeSettings() Q_FOREACH(QString name,plugin_blacklist){ blacklist << name; } if ( !blacklist.isEmpty() ) settings.setValue("plugin_blacklist",blacklist); else settings.remove("plugin_blacklist"); - //setting polyhedron mode - settings.setValue("polyhedron_mode", this->property("is_polyhedron_mode").toBool()); } std::cerr << "Write setting... done.\n"; } @@ -1745,15 +1742,7 @@ void MainWindow::on_actionPreferences_triggered() QDialog dialog(this); Ui::PreferencesDialog prefdiag; prefdiag.setupUi(&dialog); - if(this->property("is_polyhedron_mode").toBool()) - prefdiag.polyRadioButton->setChecked(true); - else - prefdiag.smRadioButton->setChecked(true); - connect(prefdiag.polyRadioButton, &QRadioButton::toggled, - this, &MainWindow::set_facegraph_mode_adapter); - - //QStandardItemModel* iStandardModel = new QStandardItemModel(this); - + std::vector items; QBrush successBrush(Qt::green), errorBrush(Qt::red), @@ -2126,20 +2115,7 @@ void MainWindow::colorItems() } viewer->update(); } -// Only used to make the doc clearer. Only the adapter is actueally used in the code, -// for signal/slots reasons. -void MainWindow::set_face_graph_default_type(Face_graph_mode m) -{ - this->setProperty("is_polyhedron_mode", m); -} -void MainWindow::set_facegraph_mode_adapter(bool is_polyhedron) -{ - if(is_polyhedron) - set_face_graph_default_type(POLYHEDRON); - else - set_face_graph_default_type(SURFACE_MESH); -} void MainWindow::exportStatistics() { diff --git a/Polyhedron/demo/Polyhedron/MainWindow.h b/Polyhedron/demo/Polyhedron/MainWindow.h index c1eb1079623..fd7784d0699 100644 --- a/Polyhedron/demo/Polyhedron/MainWindow.h +++ b/Polyhedron/demo/Polyhedron/MainWindow.h @@ -238,11 +238,6 @@ public Q_SLOTS: /// This slot is used to test exception handling in Qt Scripts. void throw_exception(); - /*! - * set_face_graph_default_type sets the global state of the application to `Polyhedron mode` or `Surface_mesh mode`. - */ - void set_face_graph_default_type(MainWindow::Face_graph_mode m); - /*! * Writes the statistics dialog content in a text file. */ @@ -434,8 +429,6 @@ public: void evaluate_script_quiet(QString script, const QString & fileName = QString()); #endif -private Q_SLOTS: - void set_facegraph_mode_adapter(bool is_polyhedron); }; #endif // ifndef MAINWINDOW_H diff --git a/Polyhedron/demo/Polyhedron/Plugins/Convex_decomposition/Nef_plugin.cpp b/Polyhedron/demo/Polyhedron/Plugins/Convex_decomposition/Nef_plugin.cpp index ed9d0dff936..40c17566297 100644 --- a/Polyhedron/demo/Polyhedron/Plugins/Convex_decomposition/Nef_plugin.cpp +++ b/Polyhedron/demo/Polyhedron/Plugins/Convex_decomposition/Nef_plugin.cpp @@ -216,17 +216,6 @@ Polyhedron_demo_nef_plugin::on_actionToPoly_triggered() QApplication::restoreOverrideCursor(); return; } - if(this->mw->property("is_polyhedron_mode").toBool()) - { - Scene_polyhedron_item* new_item = item->convert_to_polyhedron(); - new_item->setName(tr("%1 (from nef)").arg(item->name())); - new_item->setRenderingMode(item->renderingMode()); - item->setVisible(false); - scene->itemChanged(index); - scene->addItem(new_item); - } - else - { Scene_surface_mesh_item* new_item = item->convert_to_surface_mesh(); new_item->setName(tr("%1 (from nef)").arg(item->name())); new_item->setRenderingMode(item->renderingMode()); @@ -236,7 +225,6 @@ Polyhedron_demo_nef_plugin::on_actionToPoly_triggered() } std::cerr << "ok (" << time.elapsed() << " ms)" << std::endl; QApplication::restoreOverrideCursor(); - } } void Polyhedron_demo_nef_plugin::on_actionUnion_triggered() diff --git a/Polyhedron/demo/Polyhedron/Plugins/Convex_hull/Convex_hull_plugin.cpp b/Polyhedron/demo/Polyhedron/Plugins/Convex_hull/Convex_hull_plugin.cpp index de075a1841c..caa573e2d66 100644 --- a/Polyhedron/demo/Polyhedron/Plugins/Convex_hull/Convex_hull_plugin.cpp +++ b/Polyhedron/demo/Polyhedron/Plugins/Convex_hull/Convex_hull_plugin.cpp @@ -143,23 +143,11 @@ void Polyhedron_demo_convex_hull_plugin::on_actionConvexHull_triggered() } std::cout << "ok (" << time.elapsed() << " ms)" << std::endl; - if(mw->property("is_polyhedron_mode").toBool()){ - Polyhedron *poly = new Polyhedron; - CGAL::copy_face_graph(*pConvex_hull,*poly); - delete pConvex_hull; - - Scene_polyhedron_item* new_item = new Scene_polyhedron_item(poly); - new_item->setName(tr("%1 (convex hull)").arg(scene->item(index)->name())); - new_item->setColor(Qt::magenta); - new_item->setRenderingMode(FlatPlusEdges); - scene->addItem(new_item); - } else { - Scene_surface_mesh_item* new_item = new Scene_surface_mesh_item(pConvex_hull); - new_item->setName(tr("%1 (convex hull)").arg(scene->item(index)->name())); - new_item->setColor(Qt::magenta); - new_item->setRenderingMode(FlatPlusEdges); - scene->addItem(new_item); - } + Scene_surface_mesh_item* new_item = new Scene_surface_mesh_item(pConvex_hull); + new_item->setName(tr("%1 (convex hull)").arg(scene->item(index)->name())); + new_item->setColor(Qt::magenta); + new_item->setRenderingMode(FlatPlusEdges); + scene->addItem(new_item); // default cursor QApplication::restoreOverrideCursor(); diff --git a/Polyhedron/demo/Polyhedron/Plugins/IO/GOCAD_io_plugin.cpp b/Polyhedron/demo/Polyhedron/Plugins/IO/GOCAD_io_plugin.cpp index 4b526e26a07..a78b8a64356 100644 --- a/Polyhedron/demo/Polyhedron/Plugins/IO/GOCAD_io_plugin.cpp +++ b/Polyhedron/demo/Polyhedron/Plugins/IO/GOCAD_io_plugin.cpp @@ -69,64 +69,32 @@ Polyhedron_demo_gocad_plugin::load(QFileInfo fileinfo) { CGAL::Timer t; t.start(); - if(this->mw->property("is_polyhedron_mode").toBool()) - { - // Try to read GOCAD file in a polyhedron - - Scene_polyhedron_item* item = new Scene_polyhedron_item(Polyhedron()); - Polyhedron& P = * const_cast(item->polyhedron()); - - std::string name, color; - if(! read_gocad(P, in, name, color)){ - std::cerr << "Error: Invalid polyhedron" << std::endl; - delete item; - return 0; - } - - t.stop(); - std::cerr << "Reading took " << t.time() << " sec." << std::endl; - if(name.size() == 0){ - item->setName(fileinfo.baseName()); - } else { - item->setName(name.c_str()); - } - QColor qcolor(color.c_str()); - if(qcolor.isValid()) - { - item->setColor(qcolor); - item->invalidateOpenGLBuffers(); - } - return item; + // Try to read GOCAD file in a surface_mesh + Scene_surface_mesh_item* item = new Scene_surface_mesh_item(new SMesh()); + SMesh& P = * const_cast(item->polyhedron()); + + std::string name, color; + if(! read_gocad(P, in, name, color)){ + std::cerr << "Error: Invalid polyhedron" << std::endl; + delete item; + return 0; } - else - { - - // Try to read GOCAD file in a surface_mesh - Scene_surface_mesh_item* item = new Scene_surface_mesh_item(new SMesh()); - SMesh& P = * const_cast(item->polyhedron()); - - std::string name, color; - if(! read_gocad(P, in, name, color)){ - std::cerr << "Error: Invalid polyhedron" << std::endl; - delete item; - return 0; - } - - t.stop(); - std::cerr << "Reading took " << t.time() << " sec." << std::endl; - if(name.size() == 0){ - item->setName(fileinfo.baseName()); - } else { - item->setName(name.c_str()); - } - QColor qcolor(color.c_str()); - if(qcolor.isValid()) - { - item->setColor(qcolor); - item->invalidateOpenGLBuffers(); - } - return item; + + t.stop(); + std::cerr << "Reading took " << t.time() << " sec." << std::endl; + if(name.size() == 0){ + item->setName(fileinfo.baseName()); + } else { + item->setName(name.c_str()); } + QColor qcolor(color.c_str()); + if(qcolor.isValid()) + { + item->setColor(qcolor); + item->invalidateOpenGLBuffers(); + } + return item; + return NULL; } diff --git a/Polyhedron/demo/Polyhedron/Plugins/IO/STL_io_plugin.cpp b/Polyhedron/demo/Polyhedron/Plugins/IO/STL_io_plugin.cpp index 9eada718ae9..99ec2585900 100644 --- a/Polyhedron/demo/Polyhedron/Plugins/IO/STL_io_plugin.cpp +++ b/Polyhedron/demo/Polyhedron/Plugins/IO/STL_io_plugin.cpp @@ -82,36 +82,17 @@ Polyhedron_demo_stl_plugin::load(QFileInfo fileinfo) { } try{ - if(this->mw->property("is_polyhedron_mode").toBool()) - { - // Try building a polyhedron - Polyhedron P; - if (CGAL::Polygon_mesh_processing::is_polygon_soup_a_polygon_mesh(triangles)) - CGAL::Polygon_mesh_processing::polygon_soup_to_polygon_mesh(points, triangles, P); - - if(! P.is_valid() || P.empty()){ - std::cerr << "Error: Invalid facegraph" << std::endl; - } - else{ - Scene_polyhedron_item* item = new Scene_polyhedron_item(P); - item->setName(fileinfo.completeBaseName()); - return item; - } + // Try building a surface_mesh + SMesh* SM = new SMesh(); + if (CGAL::Polygon_mesh_processing::is_polygon_soup_a_polygon_mesh(triangles)) + CGAL::Polygon_mesh_processing::polygon_soup_to_polygon_mesh(points, triangles, *SM); + if(!SM->is_valid() || SM->is_empty()){ + std::cerr << "Error: Invalid facegraph" << std::endl; } - else - { - // Try building a surface_mesh - SMesh* SM = new SMesh(); - if (CGAL::Polygon_mesh_processing::is_polygon_soup_a_polygon_mesh(triangles)) - CGAL::Polygon_mesh_processing::polygon_soup_to_polygon_mesh(points, triangles, *SM); - if(!SM->is_valid() || SM->is_empty()){ - std::cerr << "Error: Invalid facegraph" << std::endl; - } - else{ - Scene_surface_mesh_item* item = new Scene_surface_mesh_item(SM); - item->setName(fileinfo.completeBaseName()); - return item; - } + else{ + Scene_surface_mesh_item* item = new Scene_surface_mesh_item(SM); + item->setName(fileinfo.completeBaseName()); + return item; } } catch(...){} diff --git a/Polyhedron/demo/Polyhedron/Plugins/IO/Surf_io_plugin.cpp b/Polyhedron/demo/Polyhedron/Plugins/IO/Surf_io_plugin.cpp index 43f44a90613..41574bf1aab 100644 --- a/Polyhedron/demo/Polyhedron/Plugins/IO/Surf_io_plugin.cpp +++ b/Polyhedron/demo/Polyhedron/Plugins/IO/Surf_io_plugin.cpp @@ -55,10 +55,7 @@ public: CGAL::Three::Scene_item* Surf_io_plugin::load(QFileInfo fileinfo) { - if(mw->property("is_polyhedron_mode").toBool()) - return actual_load(fileinfo); - else - return actual_load(fileinfo); + return actual_load(fileinfo); } template< class FaceGraphItem> CGAL::Three::Scene_item* Surf_io_plugin::actual_load(QFileInfo fileinfo) diff --git a/Polyhedron/demo/Polyhedron/Plugins/Mesh_2/Mesh_2_plugin.cpp b/Polyhedron/demo/Polyhedron/Plugins/Mesh_2/Mesh_2_plugin.cpp index acbfab9cdd5..9de7b9df74c 100644 --- a/Polyhedron/demo/Polyhedron/Plugins/Mesh_2/Mesh_2_plugin.cpp +++ b/Polyhedron/demo/Polyhedron/Plugins/Mesh_2/Mesh_2_plugin.cpp @@ -341,26 +341,15 @@ private: QString("2dmesh_"); iname+=QString::number(target_length); if (runLloyd) iname+=QString("_Lloyd_")+QString::number(nb_iter); + Scene_surface_mesh_item* poly_item = new Scene_surface_mesh_item(); + poly_item->setName(iname); + cdt2_to_face_graph(cdt, + *poly_item->polyhedron(), + constant_coordinate_index, + constant_coordinate); + scene->addItem(poly_item); + poly_item->invalidateOpenGLBuffers(); - if(mw->property("is_polyhedron_mode").toBool()){ - Scene_polyhedron_item* poly_item = new Scene_polyhedron_item(); - poly_item->setName(iname); - cdt2_to_face_graph(cdt, - *poly_item->polyhedron(), - constant_coordinate_index, - constant_coordinate); - scene->addItem(poly_item); - poly_item->invalidateOpenGLBuffers(); - }else{ - Scene_surface_mesh_item* poly_item = new Scene_surface_mesh_item(); - poly_item->setName(iname); - cdt2_to_face_graph(cdt, - *poly_item->polyhedron(), - constant_coordinate_index, - constant_coordinate); - scene->addItem(poly_item); - poly_item->invalidateOpenGLBuffers(); - } std::cout << "ok (" << time.elapsed() << " ms)" << std::endl; // default cursor QApplication::restoreOverrideCursor(); diff --git a/Polyhedron/demo/Polyhedron/Plugins/Mesh_3/Mesh_3_plugin.cpp b/Polyhedron/demo/Polyhedron/Plugins/Mesh_3/Mesh_3_plugin.cpp index 83e6ad3f671..ff8fd6f8f61 100644 --- a/Polyhedron/demo/Polyhedron/Plugins/Mesh_3/Mesh_3_plugin.cpp +++ b/Polyhedron/demo/Polyhedron/Plugins/Mesh_3/Mesh_3_plugin.cpp @@ -744,38 +744,18 @@ treat_result(Scene_item& source_item, } else { - if(mw->property("is_polyhedron_mode").toBool()) - { - Scene_polyhedron_item* new_item = new Scene_polyhedron_item; - CGAL::facets_in_complex_3_to_triangle_mesh(result_item->c3t3(), *new_item->face_graph()); - new_item->setName(tr("%1 [Remeshed as Polyhedron_3]").arg(source_item.name())); - Q_FOREACH(int ind, scene->selectionIndices()) { - scene->item(ind)->setVisible(false); - } - const Scene_interface::Item_id index = scene->mainSelectionIndex(); - scene->itemChanged(index); - scene->setSelectedItem(-1); - Scene_interface::Item_id new_item_id = scene->addItem(new_item); - scene->setSelectedItem(new_item_id); - delete result_item; - } - else - { - { - Scene_surface_mesh_item* new_item = new Scene_surface_mesh_item; - CGAL::facets_in_complex_3_to_triangle_mesh(result_item->c3t3(), *new_item->face_graph()); - new_item->setName(tr("%1 [Remeshed as Surface_mesh]").arg(source_item.name())); - Q_FOREACH(int ind, scene->selectionIndices()) { - scene->item(ind)->setVisible(false); - } - const Scene_interface::Item_id index = scene->mainSelectionIndex(); - scene->itemChanged(index); - scene->setSelectedItem(-1); - Scene_interface::Item_id new_item_id = scene->addItem(new_item); - scene->setSelectedItem(new_item_id); - delete result_item; - } + Scene_surface_mesh_item* new_item = new Scene_surface_mesh_item; + CGAL::facets_in_complex_3_to_triangle_mesh(result_item->c3t3(), *new_item->face_graph()); + new_item->setName(tr("%1 [Remeshed as Surface_mesh]").arg(source_item.name())); + Q_FOREACH(int ind, scene->selectionIndices()) { + scene->item(ind)->setVisible(false); } + const Scene_interface::Item_id index = scene->mainSelectionIndex(); + scene->itemChanged(index); + scene->setSelectedItem(-1); + Scene_interface::Item_id new_item_id = scene->addItem(new_item); + scene->setSelectedItem(new_item_id); + delete result_item; } } diff --git a/Polyhedron/demo/Polyhedron/Plugins/PCA/Basic_generator_plugin.cpp b/Polyhedron/demo/Polyhedron/Plugins/PCA/Basic_generator_plugin.cpp index c3b3f4f15ef..02d598373bd 100644 --- a/Polyhedron/demo/Polyhedron/Plugins/PCA/Basic_generator_plugin.cpp +++ b/Polyhedron/demo/Polyhedron/Plugins/PCA/Basic_generator_plugin.cpp @@ -285,53 +285,34 @@ void Basic_generator_plugin::on_tab_changed() //generate void Basic_generator_plugin::on_generate_clicked() { - bool is_polyhedron = mw->property("is_polyhedron_mode").toBool(); switch(dock_widget->selector_tabWidget->currentIndex()) { case PRISM: - if(is_polyhedron) - generatePrism(); - else - generatePrism(); + generatePrism(); ++nbs[PRISM]; break; case SPHERE: - if(is_polyhedron) - generateSphere(); - else - generateSphere(); + generateSphere(); ++nbs[SPHERE]; break; case PYRAMID: - if(is_polyhedron) - generatePyramid(); - else - generatePyramid(); + generatePyramid(); ++nbs[PYRAMID]; break; case HEXAHEDRON: - if(is_polyhedron) - generateCube(); - else - generateCube(); + generateCube(); ++nbs[HEXAHEDRON]; break; case TETRAHEDRON: - if(is_polyhedron) - generateTetrahedron(); - else - generateTetrahedron(); + generateTetrahedron(); ++nbs[TETRAHEDRON]; break; case GRID: - if(is_polyhedron) - generateGrid(); - else - generateGrid(); + generateGrid(); ++nbs[GRID]; break; case POINT_SET: diff --git a/Polyhedron/demo/Polyhedron/Plugins/PCA/Edit_box_plugin.cpp b/Polyhedron/demo/Polyhedron/Plugins/PCA/Edit_box_plugin.cpp index bee21b495b2..4638a738276 100644 --- a/Polyhedron/demo/Polyhedron/Plugins/PCA/Edit_box_plugin.cpp +++ b/Polyhedron/demo/Polyhedron/Plugins/PCA/Edit_box_plugin.cpp @@ -121,24 +121,6 @@ void Edit_box_plugin::exportToPoly() points[i] = Polyhedron::Point_3(item->point(i,0),item->point(i,1), item->point(i,2))-offset; } - if(mw->property("is_polyhedron_mode").toBool()){ - Scene_polyhedron_item* poly_item = new Scene_polyhedron_item(); - CGAL::make_hexahedron(points[0], - points[3], - points[2], - points[1], - points[5], - points[4], - points[7], - points[6], - *poly_item->polyhedron()); - CGAL::Polygon_mesh_processing::triangulate_faces(*poly_item->polyhedron()); - item->setName("Edit box"); - item->setRenderingMode(FlatPlusEdges); - scene->replaceItem(id, poly_item, true); - item->deleteLater(); - actionBbox->setEnabled(true); - }else{ Scene_surface_mesh_item* poly_item = new Scene_surface_mesh_item(); CGAL::make_hexahedron(points[0], points[3], @@ -155,6 +137,5 @@ void Edit_box_plugin::exportToPoly() scene->replaceItem(id, poly_item, true); item->deleteLater(); actionBbox->setEnabled(true); - } } #include "Edit_box_plugin.moc" diff --git a/Polyhedron/demo/Polyhedron/Plugins/PMP/Hole_filling_polyline_plugin.cpp b/Polyhedron/demo/Polyhedron/Plugins/PMP/Hole_filling_polyline_plugin.cpp index 0b1c3a79f5f..eda615096bc 100644 --- a/Polyhedron/demo/Polyhedron/Plugins/PMP/Hole_filling_polyline_plugin.cpp +++ b/Polyhedron/demo/Polyhedron/Plugins/PMP/Hole_filling_polyline_plugin.cpp @@ -123,47 +123,26 @@ public Q_SLOTS: continue; } } - - if(mw->property("is_polyhedron_mode").toBool()){ - Polyhedron* poly = new Polyhedron; - CGAL::Polygon_mesh_processing::polygon_soup_to_polygon_mesh(*it, - patch, - *poly); - - if(also_refine) { - timer.reset(); - CGAL::Polygon_mesh_processing::refine(*poly, faces(*poly), - Nop_out(), Nop_out(), - CGAL::Polygon_mesh_processing::parameters::density_control_factor(density_control_factor)); - print_message(QString("Refined in %1 sec.").arg(timer.time())); - } - - Scene_polyhedron_item* poly_item = new Scene_polyhedron_item(poly); - poly_item->setName(tr("%1-filled-%2").arg(polylines_item->name()).arg(counter)); - poly_item->setRenderingMode(FlatPlusEdges); - scene->setSelectedItem(scene->addItem(poly_item)); - } else { - SMesh* poly = new SMesh; - CGAL::Polygon_mesh_processing::polygon_soup_to_polygon_mesh(*it, - patch, - *poly); - - if(also_refine) { - timer.reset(); - CGAL::Polygon_mesh_processing::refine(*poly, faces(*poly), - Nop_out(), Nop_out(), - CGAL::Polygon_mesh_processing::parameters::density_control_factor(density_control_factor)); - print_message(QString("Refined in %1 sec.").arg(timer.time())); - } - - Scene_surface_mesh_item* poly_item = new Scene_surface_mesh_item(poly); - poly_item->setName(tr("%1-filled-%2").arg(polylines_item->name()).arg(counter)); - poly_item->setRenderingMode(FlatPlusEdges); - scene->setSelectedItem(scene->addItem(poly_item)); + SMesh* poly = new SMesh; + CGAL::Polygon_mesh_processing::polygon_soup_to_polygon_mesh(*it, + patch, + *poly); + + if(also_refine) { + timer.reset(); + CGAL::Polygon_mesh_processing::refine(*poly, faces(*poly), + Nop_out(), Nop_out(), + CGAL::Polygon_mesh_processing::parameters::density_control_factor(density_control_factor)); + print_message(QString("Refined in %1 sec.").arg(timer.time())); } + + Scene_surface_mesh_item* poly_item = new Scene_surface_mesh_item(poly); + poly_item->setName(tr("%1-filled-%2").arg(polylines_item->name()).arg(counter)); + poly_item->setRenderingMode(FlatPlusEdges); + scene->setSelectedItem(scene->addItem(poly_item)); } QApplication::restoreOverrideCursor(); - } + } private: QMainWindow* mw; diff --git a/Polyhedron/demo/Polyhedron/Plugins/Point_set/Point_set_shape_detection_plugin.cpp b/Polyhedron/demo/Polyhedron/Plugins/Point_set/Point_set_shape_detection_plugin.cpp index eef452a345c..5c3c5399e75 100644 --- a/Polyhedron/demo/Polyhedron/Plugins/Point_set/Point_set_shape_detection_plugin.cpp +++ b/Polyhedron/demo/Polyhedron/Plugins/Point_set/Point_set_shape_detection_plugin.cpp @@ -404,11 +404,8 @@ private: // If plane, build alpha shape Scene_polyhedron_item* poly_item = NULL; Scene_surface_mesh_item* sm_item = NULL; - if(mw->property("is_polyhedron_mode").toBool()){ - poly_item = new Scene_polyhedron_item; - } else { - sm_item = new Scene_surface_mesh_item; - } + sm_item = new Scene_surface_mesh_item; + build_alpha_shape (*(point_item->point_set()), pshape, poly_item, sm_item, dialog.cluster_epsilon()); diff --git a/Polyhedron/demo/Polyhedron/Plugins/Point_set/Surface_reconstruction_plugin.cpp b/Polyhedron/demo/Polyhedron/Plugins/Point_set/Surface_reconstruction_plugin.cpp index 8b62dbf4cc1..02f203f5905 100644 --- a/Polyhedron/demo/Polyhedron/Plugins/Point_set/Surface_reconstruction_plugin.cpp +++ b/Polyhedron/demo/Polyhedron/Plugins/Point_set/Surface_reconstruction_plugin.cpp @@ -875,44 +875,23 @@ private: local_timer.start(); Priority_with_structure_coherence priority (structuring, 10. * op.cluster_epsilon); - - if(mw->property("is_polyhedron_mode").toBool()) - { - Scene_polyhedron_item* reco_item = new Scene_polyhedron_item(Polyhedron()); - Polyhedron& P = * const_cast(reco_item->polyhedron()); - Construct construct(P,structured->point_set()->points().begin(),structured->point_set()->points().end()); - CGAL::advancing_front_surface_reconstruction(structured->point_set()->points().begin(), - structured->point_set()->points().end(), - construct, - priority, - 5., - 0.52); - local_timer.stop(); - std::cerr << "done in " << local_timer.time() << " second(s)" << std::endl; - - reco_item->setName(tr("%1 (RANSAC-based reconstruction)").arg(scene->item(index)->name())); - reco_item->setColor(Qt::magenta); - reco_item->setRenderingMode(FlatPlusEdges); - scene->addItem(reco_item); - } - else - { - Scene_surface_mesh_item* reco_item = new Scene_surface_mesh_item(SMesh()); - SMesh& P = * const_cast(reco_item->polyhedron()); - Construct construct(P,structured->point_set()->points().begin(),structured->point_set()->points().end()); - CGAL::advancing_front_surface_reconstruction(structured->point_set()->points().begin(), - structured->point_set()->points().end(), - construct, - priority, - 5., - 0.52); - local_timer.stop(); - std::cerr << "done in " << local_timer.time() << " second(s)" << std::endl; - reco_item->setName(tr("%1 (RANSAC-based reconstruction)").arg(scene->item(index)->name())); - reco_item->setColor(Qt::magenta); - reco_item->setRenderingMode(FlatPlusEdges); - scene->addItem(reco_item); - } + + Scene_surface_mesh_item* reco_item = new Scene_surface_mesh_item(SMesh()); + SMesh& P = * const_cast(reco_item->polyhedron()); + Construct construct(P,structured->point_set()->points().begin(),structured->point_set()->points().end()); + CGAL::advancing_front_surface_reconstruction(structured->point_set()->points().begin(), + structured->point_set()->points().end(), + construct, + priority, + 5., + 0.52); + local_timer.stop(); + std::cerr << "done in " << local_timer.time() << " second(s)" << std::endl; + reco_item->setName(tr("%1 (RANSAC-based reconstruction)").arg(scene->item(index)->name())); + reco_item->setColor(Qt::magenta); + reco_item->setRenderingMode(FlatPlusEdges); + scene->addItem(reco_item); + if (dialog.generate_structured ()) { structured->setName(tr("%1 (structured)").arg(point_set_item->name())); @@ -1082,27 +1061,14 @@ void Polyhedron_demo_surface_reconstruction_plugin::automatic_reconstruction std::cerr << "Advancing front reconstruction... "; time.restart(); - if(mw->property("is_polyhedron_mode").toBool()) - { - Scene_polyhedron_item* reco_item = new Scene_polyhedron_item(Polyhedron()); - SurfaceReconstruction::advancing_front (*points, reco_item, 10. * (std::max)(noise_size, aniso_size)); - - reco_item->setName(tr("%1 (advancing front)").arg(scene->item(index)->name())); - reco_item->setColor(Qt::lightGray); - reco_item->setRenderingMode(FlatPlusEdges); - scene->addItem(reco_item); - } - else - { - Scene_surface_mesh_item* reco_item = new Scene_surface_mesh_item(SMesh()); - SurfaceReconstruction::advancing_front (*points, reco_item, 10. * (std::max)(noise_size, aniso_size)); - - reco_item->setName(tr("%1 (advancing front)").arg(scene->item(index)->name())); - reco_item->setColor(Qt::lightGray); - reco_item->setRenderingMode(FlatPlusEdges); - scene->addItem(reco_item); - } - std::cerr << "ok (" << time.elapsed() << " ms)" << std::endl; + Scene_surface_mesh_item* reco_item = new Scene_surface_mesh_item(SMesh()); + SurfaceReconstruction::advancing_front (*points, reco_item, 10. * (std::max)(noise_size, aniso_size)); + + reco_item->setName(tr("%1 (advancing front)").arg(scene->item(index)->name())); + reco_item->setColor(Qt::lightGray); + reco_item->setRenderingMode(FlatPlusEdges); + scene->addItem(reco_item); + std::cerr << "ok (" << time.elapsed() << " ms)" << std::endl; } } @@ -1113,26 +1079,14 @@ void Polyhedron_demo_surface_reconstruction_plugin::automatic_reconstruction std::cerr << "Advancing front reconstruction... "; time.restart(); - if(mw->property("is_polyhedron_mode").toBool()) - { - Scene_polyhedron_item* reco_item = new Scene_polyhedron_item(Polyhedron()); - SurfaceReconstruction::advancing_front (*points, reco_item, 10. * (std::max)(noise_size, aniso_size)); - - reco_item->setName(tr("%1 (advancing front)").arg(scene->item(index)->name())); - reco_item->setColor(Qt::lightGray); - reco_item->setRenderingMode(FlatPlusEdges); - scene->addItem(reco_item); - } - else - { - Scene_surface_mesh_item* reco_item = new Scene_surface_mesh_item(SMesh()); - SurfaceReconstruction::advancing_front (*points, reco_item, 10. * (std::max)(noise_size, aniso_size)); - - reco_item->setName(tr("%1 (advancing front)").arg(scene->item(index)->name())); - reco_item->setColor(Qt::lightGray); - reco_item->setRenderingMode(FlatPlusEdges); - scene->addItem(reco_item); - } + Scene_surface_mesh_item* reco_item = new Scene_surface_mesh_item(SMesh()); + SurfaceReconstruction::advancing_front (*points, reco_item, 10. * (std::max)(noise_size, aniso_size)); + + reco_item->setName(tr("%1 (advancing front)").arg(scene->item(index)->name())); + reco_item->setColor(Qt::lightGray); + reco_item->setRenderingMode(FlatPlusEdges); + scene->addItem(reco_item); + std::cerr << "ok (" << time.elapsed() << " ms)" << std::endl; } @@ -1155,18 +1109,12 @@ void Polyhedron_demo_surface_reconstruction_plugin::automatic_reconstruction time.restart(); Polyhedron* pRemesh = NULL; SMesh* smRemesh = NULL; - if(mw->property("is_polyhedron_mode").toBool()) - pRemesh = poisson_reconstruct_polyhedron(*points, - 20, - 100 * (std::max)(noise_size, aniso_size), - (std::max)(noise_size, aniso_size), - QString ("Eigen - built-in CG"), false, false); - else - smRemesh = poisson_reconstruct_sm(*points, - 20, - 100 * (std::max)(noise_size, aniso_size), - (std::max)(noise_size, aniso_size), - QString ("Eigen - built-in CG"), false, false); + + smRemesh = poisson_reconstruct_sm(*points, + 20, + 100 * (std::max)(noise_size, aniso_size), + (std::max)(noise_size, aniso_size), + QString ("Eigen - built-in CG"), false, false); if(pRemesh) { // Add polyhedron to scene @@ -1220,34 +1168,17 @@ void Polyhedron_demo_surface_reconstruction_plugin::advancing_front_reconstructi QApplication::setOverrideCursor(Qt::WaitCursor); std::cerr << "Advancing front reconstruction... "; - - if(mw->property("is_polyhedron_mode").toBool()) - { - Scene_polyhedron_item* reco_item = new Scene_polyhedron_item(Polyhedron()); - SurfaceReconstruction::advancing_front (*points, reco_item, - dialog.longest_edge (), - dialog.radius_ratio_bound (), - CGAL_PI * dialog.beta_angle () / 180.); - - reco_item->setName(tr("%1 (advancing front)").arg(scene->item(index)->name())); - reco_item->setColor(Qt::lightGray); - reco_item->setRenderingMode(FlatPlusEdges); - scene->addItem(reco_item); - } - else - { - Scene_surface_mesh_item* reco_item = new Scene_surface_mesh_item(SMesh()); - SurfaceReconstruction::advancing_front (*points, reco_item, - dialog.longest_edge (), - dialog.radius_ratio_bound (), - CGAL_PI * dialog.beta_angle () / 180.); - - reco_item->setName(tr("%1 (advancing front)").arg(scene->item(index)->name())); - reco_item->setColor(Qt::lightGray); - reco_item->setRenderingMode(FlatPlusEdges); - scene->addItem(reco_item); - } - + + Scene_surface_mesh_item* reco_item = new Scene_surface_mesh_item(SMesh()); + SurfaceReconstruction::advancing_front (*points, reco_item, + dialog.longest_edge (), + dialog.radius_ratio_bound (), + CGAL_PI * dialog.beta_angle () / 180.); + + reco_item->setName(tr("%1 (advancing front)").arg(scene->item(index)->name())); + reco_item->setColor(Qt::lightGray); + reco_item->setRenderingMode(FlatPlusEdges); + scene->addItem(reco_item); QApplication::restoreOverrideCursor(); } } @@ -1366,12 +1297,8 @@ void Polyhedron_demo_surface_reconstruction_plugin::poisson_reconstruction // Reconstruct point set as a polyhedron Polyhedron* pRemesh = NULL; SMesh* smRemesh= NULL; - if(mw->property("is_polyhedron_mode").toBool()) - pRemesh = poisson_reconstruct_polyhedron(*points, sm_angle, sm_radius, sm_distance, sm_solver, use_two_passes, - do_not_fill_holes); - else - smRemesh = poisson_reconstruct_sm(*points, sm_angle, sm_radius, sm_distance, sm_solver, use_two_passes, - do_not_fill_holes); + smRemesh = poisson_reconstruct_sm(*points, sm_angle, sm_radius, sm_distance, sm_solver, use_two_passes, + do_not_fill_holes); if(pRemesh) { // Add polyhedron to scene diff --git a/Polyhedron/demo/Polyhedron/Preferences.ui b/Polyhedron/demo/Polyhedron/Preferences.ui index 9ee87e2be7a..85e7167b3e7 100644 --- a/Polyhedron/demo/Polyhedron/Preferences.ui +++ b/Polyhedron/demo/Polyhedron/Preferences.ui @@ -14,38 +14,6 @@ Preferences - - - - Face_graph Mode - - - - - - <html><head/><body><p align="justify">The default FaceGraph item is the Scene_polyhedron_item.</p><p align="justify"><br/></p><p align="justify">Plugins generating FaceGraph items from another type of item will create a Scene_polyhedron_item. This mode might be more stable and a few plugins only exist for it.</p></body></html> - - - Polyhedron - - - true - - - - - - - <html><head/><body><p>The default FaceGraph item is the Scene_surface_mesh_item.</p><p align="justify"><br/></p><p align="justify">Plugins generating FaceGraph items from another type of item will create a Scene_surface_mesh_item. This mode is globally more efficient in terms of memory and performance, but a few plugins have not been implemented for it yet.</p></body></html> - - - Surface_mesh - - - - - - From bd4b47cac34a59eac98848356a8b8e9ce98d2ecf Mon Sep 17 00:00:00 2001 From: Maxime Gimeno Date: Tue, 10 Jul 2018 11:47:54 +0200 Subject: [PATCH 006/268] WIP: remove polyhedron_item from plugins --- .../Plugins/AABB_tree/Cut_plugin.cpp | 230 ++++-------------- .../Convex_decomposition/Nef_plugin.cpp | 50 ++-- .../Polyhedron/Scene_nef_polyhedron_item.cpp | 39 +-- .../Polyhedron/Scene_nef_polyhedron_item.h | 6 +- 4 files changed, 76 insertions(+), 249 deletions(-) diff --git a/Polyhedron/demo/Polyhedron/Plugins/AABB_tree/Cut_plugin.cpp b/Polyhedron/demo/Polyhedron/Plugins/AABB_tree/Cut_plugin.cpp index f3fa1f76c55..7ccc7e97719 100644 --- a/Polyhedron/demo/Polyhedron/Plugins/AABB_tree/Cut_plugin.cpp +++ b/Polyhedron/demo/Polyhedron/Plugins/AABB_tree/Cut_plugin.cpp @@ -7,7 +7,6 @@ #include "Color_ramp.h" #include "Messages_interface.h" #include "Scene_plane_item.h" -#include "Scene_polyhedron_item.h" #include "Scene_surface_mesh_item.h" #include #include @@ -24,8 +23,6 @@ #include -#include "Polyhedron_type.h" - #include #include @@ -74,23 +71,22 @@ Simple_kernel::Vector_3 random_vector() //functor for tbb parallelization -template +template class FillGridSize { std::size_t grid_size; Point_distance (&distance_function)[100][100]; FT diag; FT& max_distance_function; - std::vector&trees; std::vector&sm_trees; bool is_signed; CGAL::qglviewer::ManipulatedFrame* frame; public: FillGridSize(std::size_t grid_size, FT diag, Point_distance (&distance_function)[100][100], - FT& max_distance_function, std::vector& trees, std::vector& sm_trees, + FT& max_distance_function, std::vector& sm_trees, bool is_signed, CGAL::qglviewer::ManipulatedFrame* frame) : grid_size(grid_size), distance_function (distance_function), diag(diag), max_distance_function(max_distance_function), - trees(trees), sm_trees(sm_trees), is_signed(is_signed), frame(frame) + sm_trees(sm_trees), is_signed(is_signed), frame(frame) { } template @@ -104,7 +100,6 @@ public: const FT dy = 2*diag; const FT z (0); const FT fd = FT(1); - Tree *min_tree = NULL ; SM_Tree *min_sm_tree = NULL; for( std::size_t t = r.begin(); t != r.end(); ++t) { @@ -116,24 +111,12 @@ public: Simple_kernel::Vector_3 offset(v_offset.x, v_offset.y, v_offset.z); Point query = transfo( Point(x,y,z))-offset; FT min = DBL_MAX; - bool is_min_sm = false; - Q_FOREACH(Tree *tree, trees) - { - FT dist = CGAL::sqrt( tree->squared_distance(query) ); - if(dist < min) - { - min = dist; - if(is_signed) - min_tree = tree; - } - } Q_FOREACH(SM_Tree *tree, sm_trees) { FT dist = CGAL::sqrt( tree->squared_distance(query) ); if(dist < min) { min = dist; - is_min_sm = true; if(is_signed) min_sm_tree = tree; } @@ -144,13 +127,13 @@ public: if(is_signed) { - if(!min_tree && !min_sm_tree) + if(!min_sm_tree) { distance_function[i][j] = Point_distance(query,DBL_MAX); max_distance_function = DBL_MAX;//(std::max)(min, max_distance_function); continue; } - typedef typename Tree::size_type size_type; + typedef typename SM_Tree::size_type size_type; Simple_kernel::Vector_3 random_vec = random_vector(); const Simple_kernel::Point_3& p = distance_function[i][j].first; @@ -158,8 +141,7 @@ public: // get sign through ray casting (random vector) Simple_kernel::Ray_3 ray(p, random_vec); - size_type nbi = (is_min_sm) ? min_sm_tree->number_of_intersected_primitives(ray) - : min_tree->number_of_intersected_primitives(ray); + size_type nbi = min_sm_tree->number_of_intersected_primitives(ray); FT sign ( (nbi&1) == 0 ? 1 : -1); distance_function[i][j].second = sign * unsigned_distance; @@ -226,18 +208,6 @@ struct PPMAP } }; -typedef CGAL::AABB_face_graph_triangle_primitive > Facet_primitive; -typedef CGAL::AABB_traits Facet_traits; -typedef CGAL::AABB_tree Facet_tree; - -typedef CGAL::AABB_halfedge_graph_segment_primitive > Edge_primitive; -typedef CGAL::AABB_traits Edge_traits; -typedef CGAL::AABB_tree Edge_tree; - - -typedef QMap Facet_trees; -typedef QMap Edge_trees; - typedef CGAL::AABB_face_graph_triangle_primitive > Facet_sm_primitive; typedef CGAL::AABB_traits Facet_sm_traits; typedef CGAL::AABB_tree Facet_sm_tree; @@ -254,31 +224,6 @@ class Q_DECL_EXPORT Scene_aabb_item : public CGAL::Three::Scene_item { Q_OBJECT public: - Scene_aabb_item(const Facet_tree& tree) : CGAL::Three::Scene_item(1,1) - { - const CGAL::qglviewer::Vec offset = static_cast(CGAL::QGLViewer::QGLViewerPool().first())->offset(); - positions_lines.clear(); - - CGAL::AABB_drawing_traits > traits; - traits.v_edges = &positions_lines; - for(int i=0; i<3; ++i) - traits.offset[i] = offset[i]; - - tree.traversal(0, traits); - const CGAL::Bbox_3 bbox = tree.bbox(); - _bbox = Bbox(bbox.xmin(), - bbox.ymin(), - bbox.zmin(), - bbox.xmax(), - bbox.ymax(), - bbox.zmax()); - qDebug()<name()<<" at creation: "<(CGAL::QGLViewer::QGLViewerPool().first())->offset(); @@ -626,16 +571,6 @@ public: texture = new Texture(m_grid_size,m_grid_size); } - void set_facet_trees(Facet_trees *facet_trees) - { - this->facet_trees = facet_trees; - } - - void set_edge_trees(Edge_trees *edge_trees) - { - this->edge_trees = edge_trees; - } - void set_facet_sm_trees(Facet_sm_trees *facet_trees) { this->facet_sm_trees = facet_trees; @@ -717,8 +652,6 @@ public: void setCutPlaneType(Cut_planes_types type){ m_cut_plane = type;} Cut_planes_types cutPlaneType()const {return m_cut_plane;} private: - Edge_trees* edge_trees; - Facet_trees* facet_trees; Edge_sm_trees* edge_sm_trees; Facet_sm_trees* facet_sm_trees; enum VAOs{ @@ -741,7 +674,7 @@ private: mutable Point_distance m_distance_function[100][100]; mutable GLuint textureId; mutable Texture *texture; - // An aabb_tree indexing polyhedron facets/segments + // An aabb_tree indexing surface_mesh facets/segments mutable Color_ramp m_red_ramp; mutable Color_ramp m_blue_ramp; mutable Color_ramp m_thermal_ramp; @@ -749,29 +682,23 @@ private: mutable std::vector tex_map; mutable Cut_planes_types m_cut_plane; mutable std::vector buffers; - template - - - void compute_distance_function(QMap *trees, QMap *sm_trees, bool is_signed = false)const + template + void compute_distance_function(QMap *sm_trees, bool is_signed = false)const { m_max_distance_function = FT(0); FT diag = scene_diag(); - std::vector closed_trees; std::vector closed_sm_trees; - Q_FOREACH(Tree *tree, trees->values()) - if(!(is_signed && !qobject_cast(trees->key(tree))->polyhedron()->is_closed())) - closed_trees.push_back(tree); Q_FOREACH(SM_Tree *sm_tree, sm_trees->values()) - if(!(is_signed && !CGAL::is_closed(*qobject_cast(sm_trees->key(sm_tree))->polyhedron()))) - closed_sm_trees.push_back(sm_tree); + if(!(is_signed && !CGAL::is_closed(*qobject_cast(sm_trees->key(sm_tree))->polyhedron()))) + closed_sm_trees.push_back(sm_tree); #ifndef CGAL_LINKED_WITH_TBB - FillGridSize f(m_grid_size, diag, m_distance_function, m_max_distance_function, closed_trees, closed_sm_trees, is_signed, frame); + FillGridSize f(m_grid_size, diag, m_distance_function, m_max_distance_function, closed_sm_trees, is_signed, frame); HackRange range(0, static_cast(m_grid_size*m_grid_size)); f(range); #else - FillGridSize f(m_grid_size, diag, m_distance_function, m_max_distance_function, closed_trees, closed_sm_trees, is_signed, frame); + FillGridSize f(m_grid_size, diag, m_distance_function, m_max_distance_function, closed_sm_trees, is_signed, frame); tbb::parallel_for(tbb::blocked_range(0, m_grid_size*m_grid_size), f); #endif } @@ -819,17 +746,17 @@ private: switch(m_cut_plane) { case UNSIGNED_FACETS: - if ( facet_trees->empty() && facet_sm_trees->empty() ) { return; } - compute_distance_function(facet_trees, facet_sm_trees); + if ( facet_sm_trees->empty() ) { return; } + compute_distance_function(facet_sm_trees); break; case SIGNED_FACETS: - if ( facet_trees->empty() && facet_sm_trees->empty() ) { return; } - compute_distance_function(facet_trees, facet_sm_trees, true); + if (facet_sm_trees->empty() ) { return; } + compute_distance_function( facet_sm_trees, true); break; case UNSIGNED_EDGES: - if ( edge_trees->empty() && edge_sm_trees->empty()) { return; } - compute_distance_function(edge_trees, edge_sm_trees); + if ( edge_sm_trees->empty()) { return; } + compute_distance_function( edge_sm_trees); break; default: break; @@ -976,11 +903,10 @@ public: virtual ~Polyhedron_demo_cut_plugin(); bool applicable(QAction*) const { - // returns true if one polyhedron is in the entries + // returns true if one surface_mesh is in the entries for (int i=0; i< scene->numberOfEntries(); ++i) { - if ( qobject_cast(scene->item(i)) - || qobject_cast(scene->item(i)) ) + if ( qobject_cast(scene->item(i)) ) return true; } return false; @@ -1101,59 +1027,30 @@ public Q_SLOTS: } void deleteTrees(CGAL::Three::Scene_item* sender) { - Scene_polyhedron_item* item = qobject_cast(sender); - if(item) + Scene_surface_mesh_item* sm_item = qobject_cast(sender); + if(!sm_item) + return; + if(facet_sm_trees.keys().contains(sm_item)) { - if(facet_trees.keys().contains(item)) - { - delete facet_trees[item]; - facet_trees.remove(item); - } - if(edge_trees.keys().contains(item)) - { - delete edge_trees[item]; - edge_trees.remove(item); - } - if(facet_trees.empty()) - { - if(plane_item) - scene->erase(scene->item_id(plane_item)); - if(edges_item) - scene->erase(scene->item_id(edges_item)); - } - else - { - ready_to_cut = true; - cut(); - } + delete facet_sm_trees[sm_item]; + facet_sm_trees.remove(sm_item); + } + if(edge_sm_trees.keys().contains(sm_item)) + { + delete edge_sm_trees[sm_item]; + edge_sm_trees.remove(sm_item); + } + if(facet_sm_trees.empty()) + { + if(plane_item) + scene->erase(scene->item_id(plane_item)); + if(edges_item) + scene->erase(scene->item_id(edges_item)); } else { - Scene_surface_mesh_item* sm_item = qobject_cast(sender); - if(!sm_item) - return; - if(facet_sm_trees.keys().contains(sm_item)) - { - delete facet_sm_trees[sm_item]; - facet_sm_trees.remove(sm_item); - } - if(edge_sm_trees.keys().contains(sm_item)) - { - delete edge_sm_trees[sm_item]; - edge_sm_trees.remove(sm_item); - } - if(facet_sm_trees.empty()) - { - if(plane_item) - scene->erase(scene->item_id(plane_item)); - if(edges_item) - scene->erase(scene->item_id(edges_item)); - } - else - { - ready_to_cut = true; - cut(); - } + ready_to_cut = true; + cut(); } } void updateTrees(int id); @@ -1170,8 +1067,6 @@ private: QAction* actionUnsignedEdges; bool ready_to_cut; - Facet_trees facet_trees; - Edge_trees edge_trees; Facet_sm_trees facet_sm_trees; Edge_sm_trees edge_sm_trees; @@ -1182,11 +1077,11 @@ private: Polyhedron_demo_cut_plugin::~Polyhedron_demo_cut_plugin() { - Q_FOREACH(Facet_tree *tree, facet_trees.values()) + Q_FOREACH(Facet_sm_tree *tree, facet_sm_trees.values()) { delete tree; } - Q_FOREACH(Edge_tree *tree, edge_trees.values()) + Q_FOREACH(Edge_sm_tree *tree, edge_sm_trees.values()) { delete tree; } @@ -1250,8 +1145,7 @@ QList Polyhedron_demo_cut_plugin::actions() const { void Polyhedron_demo_cut_plugin::updateTrees(int id) { if(plane_item && - (qobject_cast(scene->item(id)) - || qobject_cast(scene->item(id)))) + qobject_cast(scene->item(id))) createCutPlane(); } @@ -1341,13 +1235,10 @@ void Polyhedron_demo_cut_plugin::createCutPlane() { } else scene->addItem(plane_item); - // Hide polyhedrons and call cut() (avoid that nothing shows up until user + // Hide surface_meshes and call cut() (avoid that nothing shows up until user // decides to move the plane item) for(int i = 0, end = scene->numberOfEntries(); i < end; ++i) { CGAL::Three::Scene_item* item = scene->item(i); - Scene_polyhedron_item* poly_item = qobject_cast(item); - if ( NULL != poly_item ) - poly_item->setVisible(false); Scene_surface_mesh_item* sm_item = qobject_cast(item); if ( NULL != sm_item ) @@ -1356,22 +1247,13 @@ void Polyhedron_demo_cut_plugin::createCutPlane() { //fills the tree maps for(int i = 0, end = scene->numberOfEntries(); i < end; ++i) { CGAL::Three::Scene_item* item = scene->item(i); - Scene_polyhedron_item* poly_item = qobject_cast(item); Scene_surface_mesh_item* sm_item = qobject_cast(item); - if(!poly_item) + if(sm_item) { - if(sm_item) - { - apply(sm_item,facet_sm_trees, edge_sm_trees); - } + apply(sm_item,facet_sm_trees, edge_sm_trees); } - else - apply(poly_item, facet_trees, edge_trees); } - plane_item->set_facet_trees(&facet_trees); - plane_item->set_edge_trees(&edge_trees); - plane_item->set_facet_sm_trees(&facet_sm_trees); plane_item->set_edge_sm_trees(&edge_sm_trees); @@ -1453,24 +1335,6 @@ void Polyhedron_demo_cut_plugin::computeIntersection() QTime time; time.start(); bool does_intersect = false; - for(Facet_trees::iterator it = facet_trees.begin(); it != facet_trees.end(); ++it) - { - if(!CGAL::do_intersect(plane, it.value()->bbox())) - continue; - does_intersect = true; - std::vector intersections; - it.value()->all_intersections(plane, std::back_inserter(intersections)); - - for ( std::vector::iterator it = intersections.begin(), - end = intersections.end() ; it != end ; ++it ) - { - const Simple_kernel::Segment_3* inter_seg = - CGAL::object_cast(&(it->first)); - - if ( NULL != inter_seg ) - edges_item->edges.push_back(*inter_seg); - } - } for(Facet_sm_trees::iterator it = facet_sm_trees.begin(); it != facet_sm_trees.end(); ++it) { if(!CGAL::do_intersect(plane, it.value()->bbox())) diff --git a/Polyhedron/demo/Polyhedron/Plugins/Convex_decomposition/Nef_plugin.cpp b/Polyhedron/demo/Polyhedron/Plugins/Convex_decomposition/Nef_plugin.cpp index 40c17566297..2d932bed12c 100644 --- a/Polyhedron/demo/Polyhedron/Plugins/Convex_decomposition/Nef_plugin.cpp +++ b/Polyhedron/demo/Polyhedron/Plugins/Convex_decomposition/Nef_plugin.cpp @@ -1,4 +1,3 @@ -#include "Scene_polyhedron_item.h" #include "Scene_surface_mesh_item.h" #include "Scene_nef_polyhedron_item.h" @@ -66,8 +65,7 @@ bool applicable(QAction* action) const { const int indexB = scene->selectionBindex(); if( action == actionToNef) - return qobject_cast(scene->item(scene->mainSelectionIndex())) - || qobject_cast(scene->item(scene->mainSelectionIndex())); + return qobject_cast(scene->item(scene->mainSelectionIndex())); else if( action == actionToPoly) return qobject_cast(scene->item(scene->mainSelectionIndex())); @@ -109,11 +107,9 @@ Polyhedron_demo_nef_plugin::on_actionToNef_triggered() { const CGAL::Three::Scene_interface::Item_id index = scene->mainSelectionIndex(); - Scene_polyhedron_item* item = - qobject_cast(scene->item(index)); Scene_surface_mesh_item* sm_item = qobject_cast(scene->item(index)); - if(!item && !sm_item) + if(!sm_item) { return; } @@ -124,20 +120,10 @@ Polyhedron_demo_nef_plugin::on_actionToNef_triggered() std::cerr << "Convert facegraph to nef polyhedron..."; Scene_nef_polyhedron_item* new_nef_item; - if(item) - { - new_nef_item = Scene_nef_polyhedron_item::from_polygon_mesh(item); - new_nef_item->setName(tr("%1 (Nef_polyhedron_3)").arg(item->name())); - new_nef_item->setRenderingMode(item->renderingMode()); - item->setVisible(false); - } - else - { - new_nef_item = Scene_nef_polyhedron_item::from_polygon_mesh(sm_item); - new_nef_item->setName(tr("%1 (Nef_polyhedron_3)").arg(sm_item->name())); - new_nef_item->setRenderingMode(sm_item->renderingMode()); - sm_item->setVisible(false); - } + new_nef_item = Scene_nef_polyhedron_item::from_polygon_mesh(sm_item); + new_nef_item->setName(tr("%1 (Nef_polyhedron_3)").arg(sm_item->name())); + new_nef_item->setRenderingMode(sm_item->renderingMode()); + sm_item->setVisible(false); scene->itemChanged(index); new_nef_item->invalidateOpenGLBuffers(); scene->addItem(new_nef_item); @@ -152,11 +138,11 @@ Polyhedron_demo_nef_plugin::on_actionConvexDecomposition_triggered() QApplication::setOverrideCursor(Qt::WaitCursor); const CGAL::Three::Scene_interface::Item_id index = scene->mainSelectionIndex(); - Scene_polyhedron_item* pitem = - qobject_cast(scene->item(index)); + Scene_surface_mesh_item* smitem = + qobject_cast(scene->item(index)); Scene_nef_polyhedron_item* item = - (pitem)? Scene_nef_polyhedron_item::from_polygon_mesh(pitem) + (smitem)? Scene_nef_polyhedron_item::from_polygon_mesh(smitem) : qobject_cast(scene->item(index)); QApplication::restoreOverrideCursor(); if(item) { @@ -166,10 +152,10 @@ Polyhedron_demo_nef_plugin::on_actionConvexDecomposition_triggered() QApplication::setOverrideCursor(Qt::WaitCursor); - std::list convex_parts; + std::list convex_parts; item->convex_decomposition(convex_parts); int i = 0; - for(std::list::iterator it = convex_parts.begin(); + for(std::list::iterator it = convex_parts.begin(); it != convex_parts.end(); ++it){ (*it)->setName(tr("part %1 of %2").arg(i++).arg(item->name())); @@ -177,9 +163,9 @@ Polyhedron_demo_nef_plugin::on_actionConvexDecomposition_triggered() scene->addItem(*it); } - if(pitem){ + if(smitem){ delete item; - pitem->setVisible(false); + smitem->setVisible(false); } else { item->setVisible(false); } @@ -222,9 +208,9 @@ Polyhedron_demo_nef_plugin::on_actionToPoly_triggered() item->setVisible(false); scene->itemChanged(index); scene->addItem(new_item); - } - std::cerr << "ok (" << time.elapsed() << " ms)" << std::endl; - QApplication::restoreOverrideCursor(); + std::cerr << "ok (" << time.elapsed() << " ms)" << std::endl; + QApplication::restoreOverrideCursor(); + } } void Polyhedron_demo_nef_plugin::on_actionUnion_triggered() @@ -264,8 +250,8 @@ void Polyhedron_demo_nef_plugin::boolean_operation(const Boolean_operation opera if(indexA < 0 || indexB < 0) return; if(indexA == indexB) return; - if(qobject_cast(scene->item(indexA)) || - qobject_cast(scene->item(indexB))) { + if(qobject_cast(scene->item(indexA)) || + qobject_cast(scene->item(indexB))) { QMenu* menu = mw->findChild("menu_Boolean_operations"); if(!menu) qWarning("Do not find object named \"menu_Boolean_operations\"!"); QMessageBox::warning(mw, diff --git a/Polyhedron/demo/Polyhedron/Scene_nef_polyhedron_item.cpp b/Polyhedron/demo/Polyhedron/Scene_nef_polyhedron_item.cpp index 4714e39c8a3..d903e021a2d 100644 --- a/Polyhedron/demo/Polyhedron/Scene_nef_polyhedron_item.cpp +++ b/Polyhedron/demo/Polyhedron/Scene_nef_polyhedron_item.cpp @@ -1,9 +1,8 @@ #include "Scene_nef_polyhedron_item.h" #include -#include "Scene_polyhedron_item.h" #include "Scene_surface_mesh_item.h" #include "Nef_type.h" -#include "Polyhedron_type.h" +#include "SMesh_type.h" #include #include #include @@ -663,18 +662,19 @@ private: template void copy_to(const Poly_A& poly_a, Poly_B& poly_b) { - Copy_polyhedron_to modifier(poly_a); - poly_b.delegate(modifier); + //Copy_polyhedron_to modifier(poly_a); + //poly_b.delegate(modifier); + CGAL::copy_face_graph(poly_a, poly_b); } void from_exact(Exact_polyhedron& in, - Polyhedron& out) + SMesh& out) { copy_to(in, out); CGAL_assertion(out.is_valid()); } -void to_exact(Polyhedron& in, +void to_exact(SMesh& in, Exact_polyhedron& out) { copy_to(in, out); @@ -697,19 +697,6 @@ struct Face_index_pmap }; // [static] -Scene_nef_polyhedron_item* -Scene_nef_polyhedron_item::from_polygon_mesh(Scene_polyhedron_item *item) -{ - //return from_templated_polygon_mesh(item); - Polyhedron* poly = item->polyhedron(); - if(!poly) return 0; - CGAL::Polyhedron_3 exact_poly; - CGAL::copy_face_graph(*poly, exact_poly); - Nef_polyhedron* nef_poly = new Nef_polyhedron(exact_poly); - - return new Scene_nef_polyhedron_item(nef_poly); -} - Scene_nef_polyhedron_item* Scene_nef_polyhedron_item::from_polygon_mesh(Scene_surface_mesh_item* item) { @@ -721,13 +708,7 @@ Scene_nef_polyhedron_item::from_polygon_mesh(Scene_surface_mesh_item* item) return new Scene_nef_polyhedron_item(nef_poly); } -Scene_polyhedron_item* Scene_nef_polyhedron_item::convert_to_polyhedron() const -{ - Polyhedron* poly = new Polyhedron(); - CGAL::convert_nef_polyhedron_to_polygon_mesh(*this->nef_polyhedron(), *poly); - CGAL::Polygon_mesh_processing::triangulate_faces(*poly); - return new Scene_polyhedron_item(poly); -} + Scene_surface_mesh_item* Scene_nef_polyhedron_item::convert_to_surface_mesh() const { SMesh* poly = new SMesh(); @@ -771,7 +752,7 @@ sum(const Scene_nef_polyhedron_item& a, void Scene_nef_polyhedron_item:: -convex_decomposition(std::list< Scene_polyhedron_item*>& convex_parts) +convex_decomposition(std::list< Scene_surface_mesh_item*>& convex_parts) { // copy the Nef polyhedron, as markers are added Nef_polyhedron N(*d->nef_poly); @@ -784,9 +765,9 @@ convex_decomposition(std::list< Scene_polyhedron_item*>& convex_parts) if(ci->mark()) { Exact_polyhedron P; N.convert_inner_shell_to_polyhedron(ci->shells_begin(), P); - Polyhedron* poly = new Polyhedron; + SMesh* poly = new SMesh; from_exact(P, *poly); - Scene_polyhedron_item *spoly = new Scene_polyhedron_item(poly); + Scene_surface_mesh_item *spoly = new Scene_surface_mesh_item(poly); convex_parts.push_back(spoly); spoly->invalidateOpenGLBuffers(); } diff --git a/Polyhedron/demo/Polyhedron/Scene_nef_polyhedron_item.h b/Polyhedron/demo/Polyhedron/Scene_nef_polyhedron_item.h index 2c5f8d1a2a1..728fb7054bb 100644 --- a/Polyhedron/demo/Polyhedron/Scene_nef_polyhedron_item.h +++ b/Polyhedron/demo/Polyhedron/Scene_nef_polyhedron_item.h @@ -5,7 +5,6 @@ #include "Nef_type_fwd.h" #include #include -class Scene_polyhedron_item; class Scene_surface_mesh_item; struct Scene_nef_polyhedron_item_priv; class SCENE_NEF_POLYHEDRON_ITEM_EXPORT Scene_nef_polyhedron_item @@ -50,11 +49,8 @@ public: bool is_simple() const; bool is_Triangle; // conversion operations - static Scene_nef_polyhedron_item* from_polygon_mesh(Scene_polyhedron_item *); static Scene_nef_polyhedron_item* from_polygon_mesh(Scene_surface_mesh_item*); - - Scene_polyhedron_item* convert_to_polyhedron() const; Scene_surface_mesh_item* convert_to_surface_mesh() const; // Nef boolean operations @@ -71,7 +67,7 @@ public: sum(const Scene_nef_polyhedron_item&, const Scene_nef_polyhedron_item&); - void convex_decomposition(std::list< Scene_polyhedron_item*>&); + void convex_decomposition(std::list< Scene_surface_mesh_item*>&); protected: friend struct Scene_nef_polyhedron_item_priv; Scene_nef_polyhedron_item_priv* d; From 448589fbdbe54941c9f771c0747e51a24620df36 Mon Sep 17 00:00:00 2001 From: Maxime Gimeno Date: Tue, 10 Jul 2018 12:32:27 +0200 Subject: [PATCH 007/268] WIP: Remove Polyhedron_item from plugins --- Polyhedron/demo/Polyhedron/CMakeLists.txt | 68 +++------- .../Plugins/AABB_tree/CMakeLists.txt | 2 +- .../Plugins/Convex_hull/CMakeLists.txt | 4 +- .../Convex_hull/Convex_hull_plugin.cpp | 29 ++-- .../Plugins/Convex_hull/Kernel_plugin.cpp | 125 +++++++----------- .../demo/Polyhedron/Plugins/IO/CMakeLists.txt | 21 +-- .../Polyhedron/Plugins/IO/GOCAD_io_plugin.cpp | 30 ++--- .../Polyhedron/Plugins/IO/PLY_io_plugin.cpp | 11 +- .../Polyhedron/Plugins/IO/STL_io_plugin.cpp | 15 +-- .../Polyhedron/Plugins/IO/Surf_io_plugin.cpp | 2 +- .../Polyhedron/Plugins/IO/VTK_io_plugin.cpp | 18 +-- .../Polyhedron/Plugins/Mesh_2/CMakeLists.txt | 1 - .../Plugins/Mesh_2/Mesh_2_plugin.cpp | 5 +- .../Polyhedron/Plugins/Mesh_3/CMakeLists.txt | 4 +- .../Plugins/Mesh_3/Mesh_3_plugin.cpp | 93 +------------ .../Mesh_3/Optimization_plugin_cgal_code.cpp | 25 +--- .../Operations_on_polyhedra/CMakeLists.txt | 14 +- .../Clip_polyhedron_plugin.cpp | 26 +--- .../Partition_graph_plugin.cpp | 23 +--- .../Point_set_from_vertices_plugin.cpp | 13 +- .../Surface_mesh_to_polyhedron_plugin.cpp | 90 ------------- .../Plugins/PCA/Affine_transform_plugin.cpp | 43 +----- .../Plugins/PCA/Basic_generator_plugin.cpp | 1 - .../Polyhedron/Plugins/PCA/CMakeLists.txt | 13 +- .../Plugins/PCA/Create_bbox_mesh_plugin.cpp | 34 ++--- .../Plugins/PCA/Edit_box_plugin.cpp | 5 +- .../Polyhedron/Plugins/PCA/Pca_plugin.cpp | 47 +++---- .../PCA/Scene_facegraph_transform_item.h | 8 -- .../Polyhedron/Plugins/PMP/CMakeLists.txt | 112 ++++------------ .../Plugins/PMP/Corefinement_plugin.cpp | 18 --- .../Plugins/PMP/Degenerated_faces_plugin.cpp | 8 -- .../Plugins/PMP/Detect_sharp_edges_plugin.cpp | 13 -- .../Plugins/PMP/Distance_plugin.cpp | 10 -- .../Polyhedron/Plugins/PMP/Extrude_plugin.cpp | 10 -- .../Polyhedron/Plugins/PMP/Fairing_plugin.cpp | 27 +--- .../Plugins/PMP/Hole_filling_plugin.cpp | 31 +---- .../PMP/Hole_filling_polyline_plugin.cpp | 8 -- .../Plugins/PMP/Inside_out_plugin.cpp | 39 +----- .../PMP/Isotropic_remeshing_plugin.cpp | 48 ++----- .../Plugins/PMP/Jet_fitting_plugin.cpp | 20 +-- .../PMP/Join_and_split_polyhedra_plugin.cpp | 13 +- .../Mean_curvature_flow_skeleton_plugin.cpp | 29 +--- .../Plugins/PMP/Orient_soup_plugin.cpp | 64 +-------- .../PMP/Point_inside_polyhedron_plugin.cpp | 52 +------- .../Plugins/PMP/Polyhedron_slicer_plugin.cpp | 27 ++-- .../PMP/Polyhedron_stitching_plugin.cpp | 8 +- .../Scene_facegraph_item_k_ring_selection.h | 28 +--- .../Plugins/Point_set/CMakeLists.txt | 6 +- .../Subdivision_methods/CMakeLists.txt | 2 +- .../Plugins/Surface_mesh/CMakeLists.txt | 26 +--- .../Surface_mesh_deformation/CMakeLists.txt | 8 +- .../Polyhedron/Scene_nef_polyhedron_item.cpp | 59 --------- .../Scene_polyhedron_item_decorator.h | 5 - .../Scene_polyhedron_selection_item.cpp | 4 - .../Scene_polyhedron_selection_item.h | 8 -- .../Polyhedron/Scene_surface_mesh_item.cpp | 2 + .../demo/Polyhedron/include/CGAL/Dualizer.h | 2 +- 57 files changed, 254 insertions(+), 1203 deletions(-) delete mode 100644 Polyhedron/demo/Polyhedron/Plugins/Operations_on_polyhedra/Surface_mesh_to_polyhedron_plugin.cpp diff --git a/Polyhedron/demo/Polyhedron/CMakeLists.txt b/Polyhedron/demo/Polyhedron/CMakeLists.txt index 1072c1e886f..2319de22405 100644 --- a/Polyhedron/demo/Polyhedron/CMakeLists.txt +++ b/Polyhedron/demo/Polyhedron/CMakeLists.txt @@ -234,10 +234,7 @@ if(CGAL_Qt5_FOUND AND Qt5_FOUND AND OPENGL_FOUND ) if(TBB_FOUND) CGAL_target_use_TBB(scene_c3t3_item) endif() - add_item(scene_polyhedron_item Scene_polyhedron_item.cpp) - add_item(scene_polyhedron_transform_item Plugins/PCA/Scene_facegraph_transform_item.cpp ) - add_item(scene_sm_transform_item Plugins/PCA/Scene_facegraph_transform_item.cpp ) - target_compile_definitions(scene_sm_transform_item PUBLIC "-DCGAL_USE_SURFACE_MESH" ) + add_item(scene_transform_item Plugins/PCA/Scene_facegraph_transform_item.cpp ) add_item(scene_edit_box_item Plugins/PCA/Scene_edit_box_item.cpp ) add_item(scene_image_item Scene_image_item.cpp) add_item(scene_surface_mesh_item Scene_surface_mesh_item.cpp) @@ -247,57 +244,36 @@ if(CGAL_Qt5_FOUND AND Qt5_FOUND AND OPENGL_FOUND ) add_item(scene_polylines_item Scene_polylines_item.cpp) target_link_libraries(scene_polylines_item PUBLIC scene_basic_objects) - add_item(scene_polyhedron_item_decorator Scene_polyhedron_item_decorator.cpp ) - target_link_libraries(scene_polyhedron_item_decorator PUBLIC scene_polyhedron_item) - - add_item(scene_surface_mesh_item_decorator Scene_polyhedron_item_decorator.cpp ) - target_link_libraries(scene_surface_mesh_item_decorator PUBLIC scene_surface_mesh_item) - target_compile_definitions(scene_surface_mesh_item_decorator PUBLIC "-DUSE_SURFACE_MESH" ) - - add_item(scene_polyhedron_and_sm_item_k_ring_selection Scene_polyhedron_item_k_ring_selection.cpp) - target_link_libraries(scene_polyhedron_and_sm_item_k_ring_selection PUBLIC scene_polyhedron_item scene_surface_mesh_item) - - add_item(scene_poly_item_k_ring_selection Plugins/PMP/Scene_facegraph_item_k_ring_selection.cpp) - target_link_libraries(scene_poly_item_k_ring_selection PUBLIC scene_polyhedron_item) + add_item(scene_item_decorator Scene_polyhedron_item_decorator.cpp ) + target_link_libraries(scene_item_decorator PUBLIC scene_surface_mesh_item) + + add_item(scene_k_ring_selection Plugins/PMP/Scene_facegraph_item_k_ring_selection.cpp) + target_link_libraries(scene_k_ring_selection PUBLIC scene_surface_mesh_item) - add_item(scene_sm_item_k_ring_selection Plugins/PMP/Scene_facegraph_item_k_ring_selection.cpp) - target_link_libraries(scene_sm_item_k_ring_selection PUBLIC scene_surface_mesh_item) - target_compile_definitions(scene_sm_item_k_ring_selection PUBLIC "-DUSE_SURFACE_MESH" ) + add_item(scene_selection_item Scene_polyhedron_selection_item.cpp) + target_link_libraries(scene_selection_item PUBLIC scene_item_decorator scene_k_ring_selection) - add_item(scene_polyhedron_selection_item Scene_polyhedron_selection_item.cpp) - target_link_libraries(scene_polyhedron_selection_item PUBLIC scene_polyhedron_item_decorator scene_poly_item_k_ring_selection) - - add_item(scene_surface_mesh_selection_item Scene_polyhedron_selection_item.cpp) - target_link_libraries(scene_surface_mesh_selection_item PUBLIC scene_surface_mesh_item_decorator scene_sm_item_k_ring_selection) - target_compile_definitions(scene_surface_mesh_selection_item PUBLIC "-DUSE_SURFACE_MESH" ) - - add_item(scene_polyhedron_shortest_path_item Plugins/Surface_mesh/Scene_polyhedron_shortest_path_item.cpp) - target_link_libraries(scene_polyhedron_shortest_path_item PUBLIC scene_polyhedron_item_decorator scene_polyhedron_item scene_polylines_item) - - add_item(scene_sm_shortest_path_item Plugins/Surface_mesh/Scene_polyhedron_shortest_path_item.cpp) - target_link_libraries(scene_sm_shortest_path_item PUBLIC scene_surface_mesh_item_decorator scene_surface_mesh_item scene_polylines_item) + add_item(scene_shortest_path_item Plugins/Surface_mesh/Scene_polyhedron_shortest_path_item.cpp) + target_link_libraries(scene_shortest_path_item PUBLIC scene_item_decorator scene_surface_mesh_item scene_polylines_item) if(EIGEN3_FOUND ) - add_item(scene_textured_polyhedron_item Scene_textured_polyhedron_item.cpp texture.cpp) - add_item(scene_textured_surface_mesh_item Scene_textured_surface_mesh_item.cpp texture.cpp) + add_item(scene_textured_item Scene_textured_surface_mesh_item.cpp texture.cpp) qt5_wrap_ui( editionUI_FILES Plugins/Surface_mesh_deformation/Deform_mesh.ui ) - add_item(scene_edit_polyhedron_item Plugins/Surface_mesh_deformation/Scene_edit_polyhedron_item.cpp + add_item(scene_edit_item Plugins/Surface_mesh_deformation/Scene_edit_polyhedron_item.cpp ${editionUI_FILES}) - target_link_libraries(scene_edit_polyhedron_item PUBLIC scene_polyhedron_item scene_surface_mesh_item scene_polyhedron_and_sm_item_k_ring_selection + target_link_libraries(scene_edit_item PUBLIC scene_surface_mesh_item scene_k_ring_selection scene_basic_objects) - add_item(scene_mcf_poly_item Plugins/PMP/Scene_mcf_item.cpp) - add_item(scene_mcf_sm_item Plugins/PMP/Scene_mcf_item.cpp) - target_compile_definitions(scene_mcf_sm_item PUBLIC "-DUSE_SURFACE_MESH" ) + add_item(scene_mcf_item Plugins/PMP/Scene_mcf_item.cpp) endif() add_item(scene_implicit_function_item Scene_implicit_function_item.cpp ) target_link_libraries(scene_implicit_function_item PUBLIC scene_color_ramp) add_item(scene_polygon_soup_item Scene_polygon_soup_item.cpp) - target_link_libraries(scene_polygon_soup_item PUBLIC scene_polyhedron_item scene_surface_mesh_item) + target_link_libraries(scene_polygon_soup_item PUBLIC scene_surface_mesh_item) add_item(scene_nef_polyhedron_item Scene_nef_polyhedron_item.cpp) - target_link_libraries(scene_nef_polyhedron_item PUBLIC scene_polyhedron_item scene_surface_mesh_item) + target_link_libraries(scene_nef_polyhedron_item PUBLIC scene_surface_mesh_item) find_package(LASLIB) if (LASLIB_FOUND) @@ -321,7 +297,6 @@ if(CGAL_Qt5_FOUND AND Qt5_FOUND AND OPENGL_FOUND ) demo_framework scene_basic_objects scene_color_ramp - scene_polyhedron_item scene_polygon_soup_item scene_nef_polyhedron_item) add_to_cached_list( CGAL_EXECUTABLE_TARGETS ${lib} ) @@ -386,20 +361,15 @@ if(CGAL_Qt5_FOUND AND Qt5_FOUND AND OPENGL_FOUND ) export( TARGETS demo_framework - scene_polyhedron_item scene_surface_mesh_item scene_points_with_normal_item scene_color_ramp scene_implicit_function_item scene_polylines_item scene_basic_objects - scene_polyhedron_selection_item - scene_surface_mesh_selection_item - scene_polyhedron_item_decorator - scene_surface_mesh_item_decorator - scene_polyhedron_and_sm_item_k_ring_selection - scene_poly_item_k_ring_selection - scene_sm_item_k_ring_selection + scene_selection_item + scene_item_decorator + scene_k_ring_selection NAMESPACE Polyhedron_ APPEND FILE polyhedron_demo_targets.cmake) diff --git a/Polyhedron/demo/Polyhedron/Plugins/AABB_tree/CMakeLists.txt b/Polyhedron/demo/Polyhedron/Plugins/AABB_tree/CMakeLists.txt index 367251c51fe..14d2e71a30c 100644 --- a/Polyhedron/demo/Polyhedron/Plugins/AABB_tree/CMakeLists.txt +++ b/Polyhedron/demo/Polyhedron/Plugins/AABB_tree/CMakeLists.txt @@ -1,7 +1,7 @@ include( polyhedron_demo_macros ) polyhedron_demo_plugin(cut_plugin Cut_plugin ) -target_link_libraries(cut_plugin PUBLIC scene_polyhedron_item scene_surface_mesh_item scene_basic_objects scene_color_ramp) +target_link_libraries(cut_plugin PUBLIC scene_surface_mesh_item scene_basic_objects scene_color_ramp) if(TBB_FOUND) CGAL_target_use_TBB(cut_plugin) endif() diff --git a/Polyhedron/demo/Polyhedron/Plugins/Convex_hull/CMakeLists.txt b/Polyhedron/demo/Polyhedron/Plugins/Convex_hull/CMakeLists.txt index a0f11636ede..900441b871b 100644 --- a/Polyhedron/demo/Polyhedron/Plugins/Convex_hull/CMakeLists.txt +++ b/Polyhedron/demo/Polyhedron/Plugins/Convex_hull/CMakeLists.txt @@ -1,7 +1,7 @@ include( polyhedron_demo_macros ) polyhedron_demo_plugin(convex_hull_plugin Convex_hull_plugin) -target_link_libraries(convex_hull_plugin PUBLIC scene_polyhedron_item scene_points_with_normal_item scene_polylines_item scene_polyhedron_selection_item scene_surface_mesh_item) +target_link_libraries(convex_hull_plugin PUBLIC scene_points_with_normal_item scene_polylines_item scene_selection_item scene_surface_mesh_item) polyhedron_demo_plugin(kernel_plugin Kernel_plugin) -target_link_libraries(kernel_plugin PUBLIC scene_polyhedron_item scene_surface_mesh_item) +target_link_libraries(kernel_plugin PUBLIC scene_surface_mesh_item) diff --git a/Polyhedron/demo/Polyhedron/Plugins/Convex_hull/Convex_hull_plugin.cpp b/Polyhedron/demo/Polyhedron/Plugins/Convex_hull/Convex_hull_plugin.cpp index caa573e2d66..f14931d93e7 100644 --- a/Polyhedron/demo/Polyhedron/Plugins/Convex_hull/Convex_hull_plugin.cpp +++ b/Polyhedron/demo/Polyhedron/Plugins/Convex_hull/Convex_hull_plugin.cpp @@ -5,12 +5,11 @@ #include #include "opengl_tools.h" -#include "Scene_polyhedron_item.h" #include "Scene_surface_mesh_item.h" #include "Scene_points_with_normal_item.h" #include "Scene_polylines_item.h" #include "Scene_polyhedron_selection_item.h" -#include "Polyhedron_type.h" +#include "SMesh_type.h" #include @@ -42,7 +41,6 @@ public: bool applicable(QAction*) const { return - qobject_cast(scene->item(scene->mainSelectionIndex())) || qobject_cast(scene->item(scene->mainSelectionIndex())) || qobject_cast(scene->item(scene->mainSelectionIndex())) || qobject_cast(scene->item(scene->mainSelectionIndex())) || @@ -67,11 +65,7 @@ struct Get_point { void Polyhedron_demo_convex_hull_plugin::on_actionConvexHull_triggered() { const CGAL::Three::Scene_interface::Item_id index = scene->mainSelectionIndex(); - - Scene_polyhedron_item* poly_item = - qobject_cast(scene->item(index)); - - Scene_points_with_normal_item* pts_item = + Scene_points_with_normal_item* pts_item = qobject_cast(scene->item(index)); Scene_polylines_item* lines_item = @@ -83,7 +77,7 @@ void Polyhedron_demo_convex_hull_plugin::on_actionConvexHull_triggered() Scene_surface_mesh_item* sm_item = qobject_cast(scene->item(index)); - if(poly_item || pts_item || lines_item || selection_item || sm_item) + if( pts_item || lines_item || selection_item || sm_item) { // wait cursor QApplication::setOverrideCursor(Qt::WaitCursor); @@ -94,21 +88,20 @@ void Polyhedron_demo_convex_hull_plugin::on_actionConvexHull_triggered() // add convex hull as new polyhedron SMesh *pConvex_hull = new SMesh; + typedef boost::property_map::type Vpmap; + typedef CGAL::Property_map_to_unary_function Vpmap_fct; if(selection_item) { + SMesh* pMesh = selection_item->polyhedron(); + Vpmap vpm = get(CGAL::vertex_point,*pMesh); + + Vpmap_fct v2p(vpm); CGAL::convex_hull_3( - boost::make_transform_iterator(selection_item->selected_vertices.begin(), Get_point()), - boost::make_transform_iterator(selection_item->selected_vertices.end(), Get_point()), + boost::make_transform_iterator(selection_item->selected_vertices.begin(), v2p), + boost::make_transform_iterator(selection_item->selected_vertices.end(), v2p), *pConvex_hull); } - else if ( poly_item ){ - Polyhedron* pMesh = poly_item->polyhedron(); - CGAL::convex_hull_3(pMesh->points_begin(),pMesh->points_end(),*pConvex_hull); - } else if ( sm_item ){ SMesh* pMesh = sm_item->polyhedron(); - typedef boost::property_map::type Vpmap; - - typedef CGAL::Property_map_to_unary_function Vpmap_fct; Vpmap vpm = get(CGAL::vertex_point,*pMesh); Vpmap_fct v2p(vpm); diff --git a/Polyhedron/demo/Polyhedron/Plugins/Convex_hull/Kernel_plugin.cpp b/Polyhedron/demo/Polyhedron/Plugins/Convex_hull/Kernel_plugin.cpp index 28383306d81..c35e4a5a046 100644 --- a/Polyhedron/demo/Polyhedron/Plugins/Convex_hull/Kernel_plugin.cpp +++ b/Polyhedron/demo/Polyhedron/Plugins/Convex_hull/Kernel_plugin.cpp @@ -5,9 +5,8 @@ #include #include -#include "Scene_polyhedron_item.h" #include "Scene_surface_mesh_item.h" -#include "Polyhedron_type.h" +#include "SMesh_type.h" #include #include @@ -39,8 +38,7 @@ public: } bool applicable(QAction*) const { - return qobject_cast(scene->item(scene->mainSelectionIndex())) || - qobject_cast(scene->item(scene->mainSelectionIndex())); + return qobject_cast(scene->item(scene->mainSelectionIndex())); } void init(QMainWindow* mainWindow, CGAL::Three::Scene_interface* scene_interface, Messages_interface*) @@ -65,29 +63,22 @@ private: void Polyhedron_demo_kernel_plugin::on_actionKernel_triggered() { const CGAL::Three::Scene_interface::Item_id index = scene->mainSelectionIndex(); - - Scene_polyhedron_item* item = - qobject_cast(scene->item(index)); Scene_surface_mesh_item* sm_item = qobject_cast(scene->item(index)); - if(item || sm_item) + if(sm_item) { QApplication::setOverrideCursor(Qt::WaitCursor); - Polyhedron* pMesh = (item)?item->polyhedron():NULL; - SMesh* sMesh = (sm_item)?sm_item->polyhedron():NULL; + SMesh* sMesh = sm_item->polyhedron(); typedef CGAL::Exact_rational ET; typedef Polyhedron_kernel Polyhedron_kernel; // get triangles from polyhedron std::list triangles; - if(pMesh){ - get_triangles(*pMesh,std::back_inserter(triangles)); - } else { - get_triangles(*sMesh,std::back_inserter(triangles)); - } + get_triangles(*sMesh,std::back_inserter(triangles)); + // solve LP std::cout << "Solve linear program..." << triangles.size(); Polyhedron_kernel kernel; @@ -97,7 +88,7 @@ void Polyhedron_demo_kernel_plugin::on_actionKernel_triggered() std::cout << "done (empty kernel)" << std::endl; QMessageBox::information(mw, tr("Empty Kernel"), tr("The kernel of the polyhedron \"%1\" is empty."). - arg((item)?item->name():sm_item->name())); + arg(sm_item->name())); return; } std::cout << "done" << std::endl; @@ -130,72 +121,50 @@ void Polyhedron_demo_kernel_plugin::on_actionKernel_triggered() // compute convex hull in dual space std::cout << "convex hull in dual space..."; - Polyhedron convex_hull; + SMesh convex_hull; CGAL::convex_hull_3(dual_points.begin(),dual_points.end(),convex_hull); std::cout << "ok" << std::endl; - - if(pMesh){ - // add kernel as new polyhedron - Polyhedron *pKernel = new Polyhedron; - - // dualize and translate back to get final kernel - Dualizer dualizer; - dualizer.run(convex_hull,*pKernel); - ::translate(*pKernel,translate); - pKernel->inside_out(); - - Scene_polyhedron_item* new_item = new Scene_polyhedron_item(pKernel); - new_item->setName(tr("%1 (kernel)").arg(item->name())); - new_item->setColor(Qt::magenta); - new_item->setRenderingMode(item->renderingMode()); - item->setRenderingMode(Wireframe); - - scene->addItem(new_item); - scene->itemChanged(item); - } else { // sMesh - // add kernel as new polyhedron - typedef SMesh SMesh; - SMesh* pKernel = new SMesh; - - typedef CGAL::Dual Dual; - typedef boost::graph_traits::vertex_descriptor dual_vertex_descriptor; - - std::ofstream out("primal.off"); - out << convex_hull << std::endl; - out.close(); - Dual dual(convex_hull); - - std::map vpm; - BOOST_FOREACH(boost::graph_traits::face_descriptor fd, faces(convex_hull)){ - Point points[3]; - int i = 0; - BOOST_FOREACH(boost::graph_traits::vertex_descriptor vd, - vertices_around_face(halfedge(fd,convex_hull),convex_hull)){ - points[i++] = get(CGAL::vertex_point,convex_hull,vd); - } - Plane plane(points[0],points[1],points[2]); - FT sqd = CGAL::squared_distance(Point(CGAL::ORIGIN),plane); - FT distance_to_origin = std::sqrt(sqd); - Vector normal = plane.orthogonal_vector(); - normal = normal / std::sqrt(normal * normal); - vpm[fd] = CGAL::ORIGIN + normal / distance_to_origin + translate; - } - CGAL::copy_face_graph(dual, *pKernel, - CGAL::parameters::vertex_point_map( - boost::make_assoc_property_map(vpm))); - + // sMesh + // add kernel as new polyhedron + typedef SMesh SMesh; + SMesh* pKernel = new SMesh; - // pKernel->inside_out(); - - Scene_surface_mesh_item* new_item = new Scene_surface_mesh_item(pKernel); - new_item->setName(tr("%1 (kernel)").arg(sm_item->name())); - new_item->setColor(Qt::magenta); - new_item->setRenderingMode(sm_item->renderingMode()); - sm_item->setRenderingMode(Wireframe); - - scene->addItem(new_item); - scene->itemChanged(sm_item); + typedef CGAL::Dual Dual; + typedef boost::graph_traits::vertex_descriptor dual_vertex_descriptor; + + std::ofstream out("primal.off"); + out << convex_hull << std::endl; + out.close(); + Dual dual(convex_hull); + + std::map vpm; + BOOST_FOREACH(boost::graph_traits::face_descriptor fd, faces(convex_hull)){ + Point points[3]; + int i = 0; + BOOST_FOREACH(boost::graph_traits::vertex_descriptor vd, + vertices_around_face(halfedge(fd,convex_hull),convex_hull)){ + points[i++] = get(CGAL::vertex_point,convex_hull,vd); + } + Plane plane(points[0],points[1],points[2]); + FT sqd = CGAL::squared_distance(Point(CGAL::ORIGIN),plane); + FT distance_to_origin = std::sqrt(sqd); + Vector normal = plane.orthogonal_vector(); + normal = normal / std::sqrt(normal * normal); + vpm[fd] = CGAL::ORIGIN + normal / distance_to_origin + translate; } + CGAL::copy_face_graph(dual, *pKernel, + CGAL::parameters::vertex_point_map( + boost::make_assoc_property_map(vpm))); + + Scene_surface_mesh_item* new_item = new Scene_surface_mesh_item(pKernel); + new_item->setName(tr("%1 (kernel)").arg(sm_item->name())); + new_item->setColor(Qt::magenta); + new_item->setRenderingMode(sm_item->renderingMode()); + sm_item->setRenderingMode(Wireframe); + + scene->addItem(new_item); + scene->itemChanged(sm_item); + QApplication::restoreOverrideCursor(); } } diff --git a/Polyhedron/demo/Polyhedron/Plugins/IO/CMakeLists.txt b/Polyhedron/demo/Polyhedron/Plugins/IO/CMakeLists.txt index d3c8a046946..b9ed2a51bdc 100644 --- a/Polyhedron/demo/Polyhedron/Plugins/IO/CMakeLists.txt +++ b/Polyhedron/demo/Polyhedron/Plugins/IO/CMakeLists.txt @@ -1,7 +1,7 @@ include( polyhedron_demo_macros ) polyhedron_demo_plugin(gocad_plugin GOCAD_io_plugin) -target_link_libraries(gocad_plugin PUBLIC scene_polyhedron_item scene_surface_mesh_item) +target_link_libraries(gocad_plugin PUBLIC scene_surface_mesh_item) qt5_wrap_ui( funcUI_FILES Function_dialog.ui ) polyhedron_demo_plugin(io_implicit_function_plugin Implicit_function_io_plugin ${funcUI_FILES}) @@ -11,7 +11,7 @@ polyhedron_demo_plugin(nef_io_plugin Nef_io_plugin) target_link_libraries(nef_io_plugin PUBLIC scene_nef_polyhedron_item) polyhedron_demo_plugin(off_plugin OFF_io_plugin) -target_link_libraries(off_plugin PUBLIC scene_polyhedron_item scene_polygon_soup_item scene_points_with_normal_item) +target_link_libraries(off_plugin PUBLIC scene_polygon_soup_item scene_points_with_normal_item) polyhedron_demo_plugin(off_to_nef_plugin OFF_to_nef_io_plugin) target_link_libraries(off_to_nef_plugin PUBLIC scene_nef_polyhedron_item) @@ -20,19 +20,16 @@ polyhedron_demo_plugin(polylines_io_plugin Polylines_io_plugin) target_link_libraries(polylines_io_plugin PUBLIC scene_polylines_item) polyhedron_demo_plugin(selection_io_plugin Selection_io_plugin) -target_link_libraries(selection_io_plugin PUBLIC scene_polyhedron_selection_item selection_plugin) - -polyhedron_demo_plugin(selection_io_sm_plugin Selection_io_plugin) -target_link_libraries(selection_io_sm_plugin PUBLIC scene_surface_mesh_selection_item selection_sm_plugin) +target_link_libraries(selection_io_plugin PUBLIC scene_selection_item selection_plugin) polyhedron_demo_plugin(stl_plugin STL_io_plugin) -target_link_libraries(stl_plugin PUBLIC scene_polyhedron_item scene_surface_mesh_item scene_polygon_soup_item) +target_link_libraries(stl_plugin PUBLIC scene_surface_mesh_item scene_polygon_soup_item) polyhedron_demo_plugin(surface_mesh_io_plugin Surface_mesh_io_plugin) target_link_libraries(surface_mesh_io_plugin PUBLIC scene_surface_mesh_item scene_polygon_soup_item) polyhedron_demo_plugin(surf_io_plugin Surf_io_plugin) -target_link_libraries(surf_io_plugin PUBLIC scene_polyhedron_item scene_surface_mesh_item) +target_link_libraries(surf_io_plugin PUBLIC scene_surface_mesh_item) @@ -43,16 +40,10 @@ if (VTK_FOUND) if ("${VTK_VERSION_MAJOR}" GREATER "5") if(VTK_LIBRARIES) polyhedron_demo_plugin(vtk_plugin VTK_io_plugin) - target_link_libraries(vtk_plugin PUBLIC scene_polyhedron_item scene_polylines_item scene_c3t3_item + target_link_libraries(vtk_plugin PUBLIC scene_surface_mesh_item scene_polylines_item scene_c3t3_item vtkCommonCore vtkIOCore vtkIOLegacy vtkIOXML vtkFiltersCore vtkFiltersSources) - polyhedron_demo_plugin(vtk_sm_plugin VTK_io_plugin) - target_link_libraries(vtk_sm_plugin PUBLIC scene_surface_mesh_item scene_polylines_item scene_c3t3_item - vtkCommonCore vtkIOCore vtkIOLegacy vtkIOXML - vtkFiltersCore vtkFiltersSources) - target_compile_definitions(vtk_sm_plugin PUBLIC "-DUSE_SURFACE_MESH" ) - else() message(STATUS "NOTICE : the vtk IO plugin needs VTK libraries and will not be compiled.") endif() diff --git a/Polyhedron/demo/Polyhedron/Plugins/IO/GOCAD_io_plugin.cpp b/Polyhedron/demo/Polyhedron/Plugins/IO/GOCAD_io_plugin.cpp index a78b8a64356..243f3f947a7 100644 --- a/Polyhedron/demo/Polyhedron/Plugins/IO/GOCAD_io_plugin.cpp +++ b/Polyhedron/demo/Polyhedron/Plugins/IO/GOCAD_io_plugin.cpp @@ -1,9 +1,8 @@ -#include "Scene_polyhedron_item.h" #include "Scene_polygon_soup_item.h" #include "Scene_surface_mesh_item.h" #include "Kernel_type.h" #include "Scene.h" -#include "Polyhedron_type.h" +#include "SMesh_type.h" #include #include #include @@ -101,35 +100,22 @@ return NULL; bool Polyhedron_demo_gocad_plugin::canSave(const CGAL::Three::Scene_item* item) { // This plugin supports polyhedrons - return qobject_cast(item) - || qobject_cast(item); + return qobject_cast(item); } bool Polyhedron_demo_gocad_plugin::save(const CGAL::Three::Scene_item* item, QFileInfo fileinfo) { // This plugin supports polyhedrons - const Scene_polyhedron_item* poly_item = - qobject_cast(item); const Scene_surface_mesh_item* sm_item = - qobject_cast(item); - - if(!poly_item && !sm_item) + qobject_cast(item); + + if(!sm_item) return false; - + std::ofstream out(fileinfo.filePath().toUtf8()); out.precision (std::numeric_limits::digits10 + 2); - if(poly_item) - { - Polyhedron* poly = const_cast(poly_item->polyhedron()); - write_gocad(*poly, out, qPrintable(fileinfo.baseName())); - } - else - { - SMesh* poly = const_cast(sm_item->polyhedron()); - write_gocad(*poly, out, qPrintable(fileinfo.baseName())); - } - - + SMesh* poly = const_cast(sm_item->polyhedron()); + write_gocad(*poly, out, qPrintable(fileinfo.baseName())); return true; } diff --git a/Polyhedron/demo/Polyhedron/Plugins/IO/PLY_io_plugin.cpp b/Polyhedron/demo/Polyhedron/Plugins/IO/PLY_io_plugin.cpp index 19f788c1bb8..846172e6c45 100644 --- a/Polyhedron/demo/Polyhedron/Plugins/IO/PLY_io_plugin.cpp +++ b/Polyhedron/demo/Polyhedron/Plugins/IO/PLY_io_plugin.cpp @@ -1,6 +1,5 @@ #include "Scene_polygon_soup_item.h" #include "Scene_surface_mesh_item.h" -#include "Scene_polyhedron_item.h" #include "Scene_points_with_normal_item.h" #include @@ -169,8 +168,7 @@ bool Polyhedron_demo_ply_plugin::canSave(const CGAL::Three::Scene_item* item) // This plugin supports point sets and any type of surface return (qobject_cast(item) || qobject_cast(item) - || qobject_cast(item) - || qobject_cast(item)); + || qobject_cast(item)); } bool Polyhedron_demo_ply_plugin::save(const CGAL::Three::Scene_item* item, QFileInfo fileinfo) @@ -210,13 +208,6 @@ bool Polyhedron_demo_ply_plugin::save(const CGAL::Three::Scene_item* item, QFile qobject_cast(item); if (sm_item) return CGAL::write_PLY (out, *(sm_item->polyhedron())); - - // This plugin supports polyhedrons - const Scene_polyhedron_item* poly_item = - qobject_cast(item); - if (poly_item) - return CGAL::write_PLY (out, *(poly_item->polyhedron())); - return false; } diff --git a/Polyhedron/demo/Polyhedron/Plugins/IO/STL_io_plugin.cpp b/Polyhedron/demo/Polyhedron/Plugins/IO/STL_io_plugin.cpp index 99ec2585900..0bcfbaba51a 100644 --- a/Polyhedron/demo/Polyhedron/Plugins/IO/STL_io_plugin.cpp +++ b/Polyhedron/demo/Polyhedron/Plugins/IO/STL_io_plugin.cpp @@ -1,9 +1,8 @@ #include "Scene_surface_mesh_item.h" -#include "Scene_polyhedron_item.h" #include "Scene_polygon_soup_item.h" #include "Kernel_type.h" #include "Scene.h" -#include "Polyhedron_type.h" +#include "SMesh_type.h" #include #include @@ -105,18 +104,15 @@ Polyhedron_demo_stl_plugin::load(QFileInfo fileinfo) { bool Polyhedron_demo_stl_plugin::canSave(const CGAL::Three::Scene_item* item) { - return qobject_cast(item) || - qobject_cast(item); + return qobject_cast(item); } bool Polyhedron_demo_stl_plugin::save(const CGAL::Three::Scene_item* item, QFileInfo fileinfo) { - const Scene_polyhedron_item* poly_item = - qobject_cast(item); const Scene_surface_mesh_item* sm_item = qobject_cast(item); - if(!poly_item && !sm_item) + if(!sm_item) return false; QStringList list; @@ -143,11 +139,6 @@ bool Polyhedron_demo_stl_plugin::save(const CGAL::Three::Scene_item* item, QFile CGAL::write_STL(*sm_item->face_graph(), out); return true; } - if (poly_item) - { - CGAL::write_STL(*poly_item->polyhedron(), out); - return true; - } return false; } diff --git a/Polyhedron/demo/Polyhedron/Plugins/IO/Surf_io_plugin.cpp b/Polyhedron/demo/Polyhedron/Plugins/IO/Surf_io_plugin.cpp index 41574bf1aab..1968a950685 100644 --- a/Polyhedron/demo/Polyhedron/Plugins/IO/Surf_io_plugin.cpp +++ b/Polyhedron/demo/Polyhedron/Plugins/IO/Surf_io_plugin.cpp @@ -1,4 +1,3 @@ -#include "Scene_polyhedron_item.h" #include "Polyhedron_type.h" #include "Scene_surface_mesh_item.h" @@ -92,6 +91,7 @@ CGAL::Three::Scene_item* Surf_io_plugin::actual_load(QFileInfo fileinfo) compute_color_map(QColor(100, 100, 255), static_cast(patches.size()), std::back_inserter(colors_)); Scene_group_item* group = new Scene_group_item(fileinfo.completeBaseName()); + group->setScene(scene); for(std::size_t i=0; i -#ifdef USE_SURFACE_MESH #include "Scene_surface_mesh_item.h" -#else -#include "Polyhedron_type.h" -#include "Scene_polyhedron_item.h" -#include -#endif #include "Scene_polylines_item.h" #include @@ -76,11 +70,8 @@ #include #include -#ifdef USE_SURFACE_MESH + typedef Scene_surface_mesh_item Scene_facegraph_item; -#else -typedef Scene_polyhedron_item Scene_facegraph_item; -#endif typedef Scene_facegraph_item::Face_graph FaceGraph; typedef boost::property_traits::type>::value_type Point; namespace CGAL{ @@ -286,15 +277,10 @@ public: typedef boost::graph_traits::vertex_descriptor vertex_descriptor; typedef boost::graph_traits::face_descriptor face_descriptor; -#ifdef USE_SURFACE_MESH + QString nameFilters() const { return "VTK PolyData files Surface_mesh (*.vtk);; VTK XML PolyData Surface_mesh (*.vtp);; VTK XML UnstructuredGrid Surface_mesh(*.vtu)"; } QString name() const { return "vtk_sm_plugin"; } -#else - QString nameFilters() const { - return "VTK PolyData files Polyhedron (*.vtk);; VTK XML PolyData Polyhedron (*.vtp);; VTK XML UnstructuredGrid Polyhedron(*.vtu)"; } - QString name() const { return "vtk_plugin"; } -#endif bool canSave(const CGAL::Three::Scene_item* item) { return (qobject_cast(item) diff --git a/Polyhedron/demo/Polyhedron/Plugins/Mesh_2/CMakeLists.txt b/Polyhedron/demo/Polyhedron/Plugins/Mesh_2/CMakeLists.txt index 4efa4d8d677..7c0b0bd6cbe 100644 --- a/Polyhedron/demo/Polyhedron/Plugins/Mesh_2/CMakeLists.txt +++ b/Polyhedron/demo/Polyhedron/Plugins/Mesh_2/CMakeLists.txt @@ -4,7 +4,6 @@ qt5_wrap_ui( mesh_2UI_FILES mesh_2_dialog.ui) polyhedron_demo_plugin(mesh_2_plugin Mesh_2_plugin ${mesh_2UI_FILES}) #if the plugin uses external libraries like scene_items target_link_libraries(mesh_2_plugin PUBLIC - scene_polyhedron_item scene_surface_mesh_item scene_polylines_item scene_points_with_normal_item) diff --git a/Polyhedron/demo/Polyhedron/Plugins/Mesh_2/Mesh_2_plugin.cpp b/Polyhedron/demo/Polyhedron/Plugins/Mesh_2/Mesh_2_plugin.cpp index 9de7b9df74c..b00669c131a 100644 --- a/Polyhedron/demo/Polyhedron/Plugins/Mesh_2/Mesh_2_plugin.cpp +++ b/Polyhedron/demo/Polyhedron/Plugins/Mesh_2/Mesh_2_plugin.cpp @@ -15,11 +15,10 @@ #include #include -#include "Scene_polyhedron_item.h" + #include "Scene_surface_mesh_item.h" #include "Scene_polylines_item.h" #include "Scene_points_with_normal_item.h" -#include "Polyhedron_type.h" #include @@ -334,7 +333,7 @@ private: std::cout << " done (" << ltime.elapsed() << " ms)" << std::endl; } - // export result as a polyhedron item + // export result as a surface_mesh item QString iname = polylines_items.size()==1? polylines_items.front()->name()+QString("_meshed_"): diff --git a/Polyhedron/demo/Polyhedron/Plugins/Mesh_3/CMakeLists.txt b/Polyhedron/demo/Polyhedron/Plugins/Mesh_3/CMakeLists.txt index 193ee13fec7..7b420f5c6a3 100644 --- a/Polyhedron/demo/Polyhedron/Plugins/Mesh_3/CMakeLists.txt +++ b/Polyhedron/demo/Polyhedron/Plugins/Mesh_3/CMakeLists.txt @@ -9,7 +9,7 @@ if ( Boost_VERSION GREATER 103400 ) polyhedron_demo_plugin(mesh_3_plugin Mesh_3_plugin Mesh_3_plugin_cgal_code.cpp Meshing_thread.cpp split_polylines.cpp ${meshingUI_FILES}) - target_link_libraries(mesh_3_plugin PUBLIC scene_polyhedron_item scene_polygon_soup_item scene_polylines_item scene_implicit_function_item scene_image_item + target_link_libraries(mesh_3_plugin PUBLIC scene_polygon_soup_item scene_polylines_item scene_implicit_function_item scene_image_item scene_surface_mesh_item scene_c3t3_item ${OPENGL_gl_LIBRARY} ) set(VTK_LIBS "") @@ -41,7 +41,7 @@ if ( Boost_VERSION GREATER 103400 ) polyhedron_demo_plugin(mesh_3_optimization_plugin Optimization_plugin Optimization_plugin_cgal_code.cpp Optimizer_thread.cpp ${meshingUI_FILES}) - target_link_libraries(mesh_3_optimization_plugin PUBLIC scene_c3t3_item scene_polyhedron_item scene_surface_mesh_item scene_image_item scene_implicit_function_item ) + target_link_libraries(mesh_3_optimization_plugin PUBLIC scene_c3t3_item scene_surface_mesh_item scene_image_item scene_implicit_function_item ) diff --git a/Polyhedron/demo/Polyhedron/Plugins/Mesh_3/Mesh_3_plugin.cpp b/Polyhedron/demo/Polyhedron/Plugins/Mesh_3/Mesh_3_plugin.cpp index ff8fd6f8f61..198f58adf01 100644 --- a/Polyhedron/demo/Polyhedron/Plugins/Mesh_3/Mesh_3_plugin.cpp +++ b/Polyhedron/demo/Polyhedron/Plugins/Mesh_3/Mesh_3_plugin.cpp @@ -18,7 +18,6 @@ #include #include -#include "Scene_polyhedron_item.h" #include "Scene_polylines_item.h" #ifdef CGAL_MESH_3_DEMO_ACTIVATE_IMPLICIT_FUNCTIONS @@ -103,19 +102,12 @@ public: } #endif Q_FOREACH(int ind, scene->selectionIndices()){ - Scene_polyhedron_item* poly_item - = qobject_cast(scene->item(ind)); Scene_surface_mesh_item* sm_item = qobject_cast(scene->item(ind)); - if (NULL == poly_item) - { - if(NULL == sm_item) - continue; - } + if(NULL == sm_item) + continue; if (a == actionMesh_3) { - if(poly_item) - return poly_item->polyhedron()->is_closed(); if(sm_item) return is_closed(*sm_item->polyhedron()); } @@ -189,8 +181,6 @@ void Mesh_3_plugin::mesh_3_volume() void Mesh_3_plugin::mesh_3(const bool surface_only, const bool use_defaults) { - Scene_polyhedron_item* poly_item = NULL; - Scene_polyhedron_item* bounding_poly_item = NULL; Scene_surface_mesh_item* sm_item = NULL; Scene_surface_mesh_item* bounding_sm_item = NULL; Scene_implicit_function_item* function_item = NULL; @@ -198,29 +188,6 @@ void Mesh_3_plugin::mesh_3(const bool surface_only, const bool use_defaults) Scene_polylines_item* polylines_item = NULL; Q_FOREACH(int ind, scene->selectionIndices()) { - - if(poly_item == NULL) - { - poly_item = qobject_cast(scene->item(ind)); - if (poly_item != NULL - && scene->selectionIndices().size() == 2 - && bounding_poly_item == NULL) - { - bounding_poly_item = qobject_cast( - scene->item(scene->selectionIndices().back())); - if (bounding_poly_item != NULL) - { - //if poly is bounding, and bounding_poly is a non-closed surface - if (is_closed(*poly_item->polyhedron()) - && !is_closed(*bounding_poly_item->polyhedron())) - { - //todo : check poly_item is inside bounding_poly_item - std::swap(poly_item, bounding_poly_item); - //now bounding_poly_item is the bounding one - } - } - } - } if(sm_item == NULL) { sm_item = qobject_cast(scene->item(ind)); @@ -258,24 +225,6 @@ void Mesh_3_plugin::mesh_3(const bool surface_only, const bool use_defaults) } Scene_item* item = NULL; bool features_protection_available = false; - if(NULL != poly_item) - { - if (!poly_item->polyhedron()->is_pure_triangle()) - { - QMessageBox::warning(mw, tr(""), - tr("Selected Scene_polyhedron_item is not triangulated.")); - return; - } - if (NULL != bounding_poly_item - && !bounding_poly_item->polyhedron()->is_pure_triangle()) - { - QMessageBox::warning(mw, tr(""), - tr("Selected Scene_polyhedron_item is not triangulated.")); - return; - } - item = poly_item; - features_protection_available = true; - } if(NULL != sm_item) { if (!is_triangle_mesh(*sm_item->polyhedron())) @@ -424,13 +373,11 @@ void Mesh_3_plugin::mesh_3(const bool surface_only, const bool use_defaults) ui.facegraphCheckBox->setVisible(surface_only); ui.initializationGroup->setVisible(image_item != NULL && !image_item->isGray()); ui.grayImgGroup->setVisible(image_item != NULL && image_item->isGray()); - if (poly_item != NULL) - ui.volumeGroup->setVisible(!surface_only && poly_item->polyhedron()->is_closed()); - else if (sm_item != NULL) + if (sm_item != NULL) ui.volumeGroup->setVisible(!surface_only && is_closed(*sm_item->polyhedron())); else ui.volumeGroup->setVisible(!surface_only); - if ((poly_item == NULL && sm_item == NULL)|| polylines_item != NULL) { + if ((sm_item == NULL)|| polylines_item != NULL) { ui.sharpEdgesAngleLabel->setVisible(false); ui.sharpEdgesAngle->setVisible(false); @@ -446,7 +393,7 @@ void Mesh_3_plugin::mesh_3(const bool surface_only, const bool use_defaults) if (features_protection_available) { - if (NULL != poly_item || NULL != sm_item) + if (NULL != sm_item) { if (surface_only) { @@ -501,36 +448,6 @@ void Mesh_3_plugin::mesh_3(const bool surface_only, const bool use_defaults) Meshing_thread* thread = NULL; - // Polyhedron - if ( NULL != poly_item ) - { - Polyhedron* pMesh = poly_item->polyhedron(); - if (NULL == pMesh) - { - QMessageBox::critical(mw, tr(""), tr("ERROR: no data in selected item")); - return; - } - - Scene_polylines_item::Polylines_container plc; - - thread = cgal_code_mesh_3(pMesh, - (polylines_item == NULL)?plc:polylines_item->polylines, - (bounding_poly_item == NULL)?NULL:bounding_poly_item->polyhedron(), - item->name(), - angle, - facet_sizing, - approx, - tet_sizing, - edge_size, - radius_edge, - protect_features, - protect_borders,//available only for poly_item and sm_item - sharp_edges_angle, - manifold, - surface_only, - scene); - } - // Surface_mesh if ( NULL != sm_item ) { SMesh* pMesh = sm_item->polyhedron(); diff --git a/Polyhedron/demo/Polyhedron/Plugins/Mesh_3/Optimization_plugin_cgal_code.cpp b/Polyhedron/demo/Polyhedron/Plugins/Mesh_3/Optimization_plugin_cgal_code.cpp index eb618fe9410..fc636e1dffa 100644 --- a/Polyhedron/demo/Polyhedron/Plugins/Mesh_3/Optimization_plugin_cgal_code.cpp +++ b/Polyhedron/demo/Polyhedron/Plugins/Mesh_3/Optimization_plugin_cgal_code.cpp @@ -3,7 +3,6 @@ #include "C3t3_type.h" #include "Scene_c3t3_item.h" #include "Scene_surface_mesh_item.h" -#include "Scene_polyhedron_item.h" #ifdef CGAL_MESH_3_DEMO_ACTIVATE_SEGMENTED_IMAGES #include "Scene_image_item.h" @@ -126,34 +125,14 @@ Optimizer_thread* cgal_code_optimization(Scene_c3t3_item& c3t3_item, return new Optimizer_thread(p_opt_function, p_result_item); } #endif - - // Polyhedron - const Scene_polyhedron_item* poly_item = - qobject_cast(c3t3_item.data_item()); - - if ( NULL != poly_item ) - { - // Build domain - const Polyhedron* p_poly = poly_item->polyhedron(); - if ( NULL == p_poly ) - { - return NULL; - } - - Polyhedral_mesh_domain* p_domain = new Polyhedral_mesh_domain(*p_poly); - - // Create thread - typedef Optimization_function Opt_function; - Opt_function* p_opt_function = new Opt_function(p_result_item->c3t3(), p_domain, param); - return new Optimizer_thread(p_opt_function, p_result_item); - } - + // Surface mesh const Scene_surface_mesh_item* sm_item = qobject_cast(c3t3_item.data_item()); if ( NULL != sm_item ) { + const_cast(sm_item)->setItemIsMulticolor(true); // Build domain const SMesh* smesh = sm_item->face_graph(); if ( NULL == smesh ) diff --git a/Polyhedron/demo/Polyhedron/Plugins/Operations_on_polyhedra/CMakeLists.txt b/Polyhedron/demo/Polyhedron/Plugins/Operations_on_polyhedra/CMakeLists.txt index 25e86475537..d17154f831a 100644 --- a/Polyhedron/demo/Polyhedron/Plugins/Operations_on_polyhedra/CMakeLists.txt +++ b/Polyhedron/demo/Polyhedron/Plugins/Operations_on_polyhedra/CMakeLists.txt @@ -1,21 +1,15 @@ include( polyhedron_demo_macros ) qt5_wrap_ui( clip_polyhedronUI_FILES Clip_polyhedron_plugin.ui ) polyhedron_demo_plugin(clip_polyhedron_plugin Clip_polyhedron_plugin ${clip_polyhedronUI_FILES}) - target_link_libraries(clip_polyhedron_plugin PUBLIC scene_surface_mesh_item scene_polyhedron_item scene_basic_objects) + target_link_libraries(clip_polyhedron_plugin PUBLIC scene_surface_mesh_item scene_basic_objects) polyhedron_demo_plugin(point_set_from_vertices_plugin Point_set_from_vertices_plugin) - target_link_libraries(point_set_from_vertices_plugin PUBLIC scene_polyhedron_item scene_surface_mesh_item scene_polygon_soup_item scene_points_with_normal_item) - - polyhedron_demo_plugin(surface_mesh_to_polyhedron_plugin Surface_mesh_to_polyhedron_plugin) - target_link_libraries(surface_mesh_to_polyhedron_plugin PUBLIC scene_polyhedron_item scene_surface_mesh_item) + target_link_libraries(point_set_from_vertices_plugin PUBLIC scene_surface_mesh_item scene_polygon_soup_item scene_points_with_normal_item) if( METIS_FOUND ) qt5_wrap_ui( partitionUI_FILES PartitionDialog.ui ) - polyhedron_demo_plugin(partition_poly_plugin Partition_graph_plugin ${partitionUI_FILES}) - target_link_libraries(partition_poly_plugin PUBLIC scene_polyhedron_item ${METIS_LIBRARIES} ) - polyhedron_demo_plugin(partition_sm_plugin Partition_graph_plugin ${partitionUI_FILES}) - target_link_libraries(partition_sm_plugin PUBLIC scene_surface_mesh_item ${METIS_LIBRARIES} ) - target_compile_definitions(partition_sm_plugin PUBLIC "-DCGAL_USE_SURFACE_MESH" ) + polyhedron_demo_plugin(partition_plugin Partition_graph_plugin ${partitionUI_FILES}) + target_link_libraries(partition_plugin PUBLIC scene_surface_mesh_item ${METIS_LIBRARIES} ) else() message("NOTICE : the Partition plugin needs METIS libraries and will not be compiled.") endif() diff --git a/Polyhedron/demo/Polyhedron/Plugins/Operations_on_polyhedra/Clip_polyhedron_plugin.cpp b/Polyhedron/demo/Polyhedron/Plugins/Operations_on_polyhedra/Clip_polyhedron_plugin.cpp index 3cfa72e2748..d5700819e26 100644 --- a/Polyhedron/demo/Polyhedron/Plugins/Operations_on_polyhedra/Clip_polyhedron_plugin.cpp +++ b/Polyhedron/demo/Polyhedron/Plugins/Operations_on_polyhedra/Clip_polyhedron_plugin.cpp @@ -4,7 +4,6 @@ #include #include #include "Scene_surface_mesh_item.h" -#include "Scene_polyhedron_item.h" #include "Scene_plane_item.h" #include #include @@ -122,8 +121,7 @@ public : { Q_FOREACH(int id, scene->selectionIndices()) { - if(qobject_cast(scene->item(id)) - || qobject_cast(scene->item(id))) + if(qobject_cast(scene->item(id))) return true; } return false; @@ -224,20 +222,11 @@ public Q_SLOTS: { polyhedra << sm_item; } - else - { - Scene_polyhedron_item *poly_item = qobject_cast(scene->item(id)); - if(poly_item && CGAL::is_triangle_mesh(*poly_item->polyhedron())) - { - polyhedra << poly_item; - } - } } //apply the clipping function Q_FOREACH(Scene_item* item, polyhedra) { Scene_surface_mesh_item *sm_item = qobject_cast(item); - Scene_polyhedron_item* poly_item = qobject_cast(item); if (ui_widget.clip_radioButton->isChecked()) { @@ -250,15 +239,6 @@ public Q_SLOTS: ui_widget.close_checkBox->isChecked()). throw_on_self_intersection(true)); } - else - { - CGAL::Polygon_mesh_processing::clip(*(poly_item->face_graph()), - plane->plane(), - CGAL::Polygon_mesh_processing::parameters::clip_volume( - ui_widget.close_checkBox->isChecked()). - throw_on_self_intersection(true)); - - } } catch(CGAL::Polygon_mesh_processing::Corefinement::Self_intersection_exception) { @@ -274,10 +254,6 @@ public Q_SLOTS: { apply(sm_item); } - else - { - apply(poly_item); - } } } viewer->update(); diff --git a/Polyhedron/demo/Polyhedron/Plugins/Operations_on_polyhedra/Partition_graph_plugin.cpp b/Polyhedron/demo/Polyhedron/Plugins/Operations_on_polyhedra/Partition_graph_plugin.cpp index 2049f9b75bd..00f2663574c 100644 --- a/Polyhedron/demo/Polyhedron/Plugins/Operations_on_polyhedra/Partition_graph_plugin.cpp +++ b/Polyhedron/demo/Polyhedron/Plugins/Operations_on_polyhedra/Partition_graph_plugin.cpp @@ -4,12 +4,7 @@ #include "ui_PartitionDialog.h" #include "Color_map.h" -#ifdef CGAL_USE_SURFACE_MESH #include "Scene_surface_mesh_item.h" -#else -#include "Polyhedron_type.h" -#include "Scene_polyhedron_item.h" -#endif #include #include @@ -23,11 +18,7 @@ #include #include -#ifdef CGAL_USE_SURFACE_MESH typedef Scene_surface_mesh_item Scene_facegraph_item; -#else -typedef Scene_polyhedron_item Scene_facegraph_item; -#endif typedef Scene_facegraph_item::Face_graph FaceGraph; class PartitionDialog : @@ -68,22 +59,14 @@ public: actionNodalPartition = new QAction( - #ifdef CGAL_USE_SURFACE_MESH - tr("Create a Nodal Graph Based Partition for a Surface Mesh") - #else - tr("Create a Nodal Graph Based Partition for a Polyhedron") - #endif + tr("Create a Nodal Graph Based Partition") , mw); if(actionNodalPartition) { connect(actionNodalPartition, SIGNAL(triggered()),this, SLOT(create_nodal_partition())); } actionDualPartition = new QAction( - #ifdef CGAL_USE_SURFACE_MESH - tr("Create a Dual Graph Based Partition for a Surface Mesh") - #else - tr("Create a Dual Graph Based Partition for a Polyhedron") - #endif + tr("Create a Dual Graph Based Partition") , mw); if(actionDualPartition) { connect(actionDualPartition, SIGNAL(triggered()),this, SLOT(create_dual_partition())); @@ -113,10 +96,8 @@ private: return; int nparts = dialog->nparts_spinBox->value(); QApplication::setOverrideCursor(Qt::WaitCursor); -#ifdef CGAL_USE_SURFACE_MESH item->face_graph()->collect_garbage(); item->color_vector().clear(); -#endif if(!item->isItemMulticolor()) item->setItemIsMulticolor(true); typedef boost::property_map >::type PatchIDMap; diff --git a/Polyhedron/demo/Polyhedron/Plugins/Operations_on_polyhedra/Point_set_from_vertices_plugin.cpp b/Polyhedron/demo/Polyhedron/Plugins/Operations_on_polyhedra/Point_set_from_vertices_plugin.cpp index 04873429129..5da488fe4e8 100644 --- a/Polyhedron/demo/Polyhedron/Plugins/Operations_on_polyhedra/Point_set_from_vertices_plugin.cpp +++ b/Polyhedron/demo/Polyhedron/Plugins/Operations_on_polyhedra/Point_set_from_vertices_plugin.cpp @@ -7,7 +7,6 @@ #include "Scene_points_with_normal_item.h" #include "Scene_surface_mesh_item.h" -#include "Scene_polyhedron_item.h" #include "Scene_polygon_soup_item.h" #include @@ -30,8 +29,7 @@ public: const CGAL::Three::Scene_interface::Item_id index = scene->mainSelectionIndex(); return qobject_cast(scene->item(index)) - || qobject_cast(scene->item(index)) - || qobject_cast(scene->item(index)); + || qobject_cast(scene->item(index)); } QList actions() const; @@ -88,14 +86,7 @@ void Polyhedron_demo_point_set_from_vertices_plugin::createPointSet() { apply(sm_item); } - Scene_polyhedron_item* poly_item = - qobject_cast(scene->item(index)); - - if (poly_item) - { - apply(poly_item); - } - + Scene_polygon_soup_item* soup_item = qobject_cast(scene->item(index)); diff --git a/Polyhedron/demo/Polyhedron/Plugins/Operations_on_polyhedra/Surface_mesh_to_polyhedron_plugin.cpp b/Polyhedron/demo/Polyhedron/Plugins/Operations_on_polyhedra/Surface_mesh_to_polyhedron_plugin.cpp deleted file mode 100644 index 68dbcdfaff6..00000000000 --- a/Polyhedron/demo/Polyhedron/Plugins/Operations_on_polyhedra/Surface_mesh_to_polyhedron_plugin.cpp +++ /dev/null @@ -1,90 +0,0 @@ -#include "Scene_polyhedron_item.h" -#include "Scene_surface_mesh_item.h" - -#include -#include -#include -#include -#include -#include -#include -#include -#include -using namespace CGAL::Three; -class Surface_mesh_to_polyhedron_plugin : - public QObject, - public Polyhedron_demo_plugin_interface -{ - Q_OBJECT - Q_INTERFACES(CGAL::Three::Polyhedron_demo_plugin_interface) - Q_PLUGIN_METADATA(IID "com.geometryfactory.PolyhedronDemo.PluginInterface/1.0") - -public: - - void init(QMainWindow* mw, - Scene_interface* scene_interface, - Messages_interface* ) - { - scene = scene_interface; - this->mw = mw; - QAction *actionToPoly = new QAction("Convert to Polyhedron", mw); - QAction *actionToSM = new QAction("Convert to Surface_mesh", mw); - actionToPoly->setProperty("subMenuName", - "BGL"); - actionToSM->setProperty("subMenuName", - "BGL"); - - connect(actionToPoly, SIGNAL(triggered()), this, SLOT(on_actionToPoly_triggered())); - connect(actionToSM, SIGNAL(triggered()), this, SLOT(on_actionToSM_triggered())); - _actions<< actionToPoly - << actionToSM; - - } - - bool applicable(QAction* action) const { - if(action == _actions.first()) - return qobject_cast(scene->item(scene->mainSelectionIndex())); - else - return qobject_cast(scene->item(scene->mainSelectionIndex())); - } - - QList actions() const { - return _actions; - } - -private: - Scene_interface* scene; - QList _actions; - QMainWindow* mw; - -public Q_SLOTS: - void on_actionToPoly_triggered() - { - Scene_surface_mesh_item* sm_item = qobject_cast(scene->item(scene->mainSelectionIndex())); - if(!sm_item) - return; - Polyhedron* polyhedron = new Polyhedron(); - CGAL::copy_face_graph(*sm_item->polyhedron(), *polyhedron); - Scene_polyhedron_item* poly_item = new Scene_polyhedron_item(polyhedron); - poly_item->setColor(sm_item->color()); - poly_item->setName(sm_item->name()); - sm_item->setVisible(false); - scene->addItem(poly_item); - } - - void on_actionToSM_triggered() - { - Scene_polyhedron_item* poly_item = qobject_cast(scene->item(scene->mainSelectionIndex())); - if(!poly_item) - return; - SMesh* sm = new SMesh(); - CGAL::copy_face_graph(*poly_item->polyhedron(), *sm); - Scene_surface_mesh_item* sm_item = new Scene_surface_mesh_item(sm); - sm_item->setColor(poly_item->color()); - sm_item->setName(poly_item->name()); - poly_item->setVisible(false); - scene->addItem(sm_item); - } -}; // end class Surface_mesh_to_polyhedron_plugin - -#include "Surface_mesh_to_polyhedron_plugin.moc" diff --git a/Polyhedron/demo/Polyhedron/Plugins/PCA/Affine_transform_plugin.cpp b/Polyhedron/demo/Polyhedron/Plugins/PCA/Affine_transform_plugin.cpp index b6e0a942670..1cb8839fb99 100644 --- a/Polyhedron/demo/Polyhedron/Plugins/PCA/Affine_transform_plugin.cpp +++ b/Polyhedron/demo/Polyhedron/Plugins/PCA/Affine_transform_plugin.cpp @@ -3,12 +3,7 @@ #include #include #include -#ifdef CGAL_USE_SURFACE_MESH #include "Scene_surface_mesh_item.h" -#else -#include "Polyhedron_type.h" -#include "Scene_polyhedron_item.h" -#endif #include "Scene_facegraph_transform_item.h" #include "Scene_points_with_normal_item.h" @@ -24,11 +19,7 @@ #include #include "ui_Transformation_widget.h" -#ifdef CGAL_USE_SURFACE_MESH typedef Scene_surface_mesh_item Facegraph_item; -#else -typedef Scene_polyhedron_item Facegraph_item; -#endif class Scene_transform_point_set_item : public Scene_item @@ -179,10 +170,8 @@ public: bool applicable(QAction*) const { return qobject_cast(scene->item(scene->mainSelectionIndex())) || qobject_cast(scene->item(scene->mainSelectionIndex())) - #ifdef CGAL_USE_SURFACE_MESH || qobject_cast(scene->item(scene->mainSelectionIndex())) || qobject_cast(scene->item(scene->mainSelectionIndex())) - #endif ; } @@ -198,11 +187,7 @@ public: actionTransformPolyhedron = new QAction( - #ifdef CGAL_USE_SURFACE_MESH - tr("Affine Transformation for Surface Mesh") - #else - tr("Affine Transformation for Polyhedron") - #endif + tr("Affine Transformation") , mw); if(actionTransformPolyhedron) { connect(actionTransformPolyhedron, SIGNAL(triggered()),this, SLOT(go())); @@ -211,19 +196,11 @@ public: transform_points_item = NULL; dock_widget = new QDockWidget( - #ifdef CGAL_USE_SURFACE_MESH - tr("Affine Transformation for Surface Mesh") - #else - tr("Affine Transformation for Polyhedron") - #endif + tr("Affine Transformation") , mw); ui.setupUi(dock_widget); dock_widget->setWindowTitle(tr( - #ifdef CGAL_USE_SURFACE_MESH - "Affine Transformation for Surface Mesh" - #else - "Affine Transformation for Polyhedron" - #endif + "Affine Transformation" )); addDockWidget(dock_widget); dock_widget->hide(); @@ -249,9 +226,7 @@ public: } void start(FaceGraph *facegraph, const QString name, const Scene_item::Bbox&); -#ifdef CGAL_USE_SURFACE_MESH void start(Scene_points_with_normal_item*); -#endif void end(); void closure() { @@ -391,16 +366,12 @@ public Q_SLOTS: void Polyhedron_demo_affine_transform_plugin::go(){ if (!started){ Scene_item* item = scene->item(scene->mainSelectionIndex()); -#ifdef CGAL_USE_SURFACE_MESH Scene_points_with_normal_item* points_item = NULL; -#endif Facegraph_item* poly_item = qobject_cast(item); if(!poly_item) { -#ifdef CGAL_USE_SURFACE_MESH points_item = qobject_cast(item); if(!points_item) -#endif return; } dock_widget->show(); @@ -410,10 +381,8 @@ void Polyhedron_demo_affine_transform_plugin::go(){ { start(poly_item->polyhedron(), poly_item->name(), poly_item->bbox()); } -#ifdef CGAL_USE_SURFACE_MESH else if(points_item) start(points_item); -#endif } else end(); @@ -454,7 +423,7 @@ void Polyhedron_demo_affine_transform_plugin::start(FaceGraph *facegraph, const scene->setSelectedItem(tr_item_index); resetTransformMatrix(); } -#ifdef CGAL_USE_SURFACE_MESH + void Polyhedron_demo_affine_transform_plugin::start(Scene_points_with_normal_item* points_item){ QApplication::setOverrideCursor(Qt::PointingHandCursor); @@ -482,7 +451,7 @@ void Polyhedron_demo_affine_transform_plugin::start(Scene_points_with_normal_ite scene->setSelectedItem(tr_item_index); resetTransformMatrix(); } -#endif + void Polyhedron_demo_affine_transform_plugin::end(){ QApplication::restoreOverrideCursor(); @@ -519,7 +488,6 @@ void Polyhedron_demo_affine_transform_plugin::end(){ delete transform_item; transform_item = NULL; } -#ifdef CGAL_USE_SURFACE_MESH else if(transform_points_item) { const Point_set *base_ps = transform_points_item->getBase()->point_set(); @@ -544,7 +512,6 @@ void Polyhedron_demo_affine_transform_plugin::end(){ delete transform_points_item; transform_points_item = NULL; } -#endif dock_widget->hide(); } diff --git a/Polyhedron/demo/Polyhedron/Plugins/PCA/Basic_generator_plugin.cpp b/Polyhedron/demo/Polyhedron/Plugins/PCA/Basic_generator_plugin.cpp index 02d598373bd..1d6a54fdad2 100644 --- a/Polyhedron/demo/Polyhedron/Plugins/PCA/Basic_generator_plugin.cpp +++ b/Polyhedron/demo/Polyhedron/Plugins/PCA/Basic_generator_plugin.cpp @@ -10,7 +10,6 @@ #include #include #include -#include "Scene_polyhedron_item.h" #include "Scene_surface_mesh_item.h" #include "Scene_points_with_normal_item.h" #include "Scene_polylines_item.h" diff --git a/Polyhedron/demo/Polyhedron/Plugins/PCA/CMakeLists.txt b/Polyhedron/demo/Polyhedron/Plugins/PCA/CMakeLists.txt index 978cbfa2c0b..75df6a2df8f 100644 --- a/Polyhedron/demo/Polyhedron/Plugins/PCA/CMakeLists.txt +++ b/Polyhedron/demo/Polyhedron/Plugins/PCA/CMakeLists.txt @@ -1,25 +1,22 @@ include( polyhedron_demo_macros ) polyhedron_demo_plugin(pca_plugin Pca_plugin) -target_link_libraries(pca_plugin PUBLIC scene_polyhedron_item scene_surface_mesh_item scene_points_with_normal_item scene_basic_objects) +target_link_libraries(pca_plugin PUBLIC scene_surface_mesh_item scene_points_with_normal_item scene_basic_objects) qt5_wrap_ui( transformUI_FILES Transformation_widget.ui ) polyhedron_demo_plugin(affine_transform_plugin Affine_transform_plugin ${transformUI_FILES}) -target_link_libraries(affine_transform_plugin PUBLIC scene_polyhedron_item scene_polyhedron_transform_item scene_points_with_normal_item) -polyhedron_demo_plugin(affine_transform_sm_plugin Affine_transform_plugin ${transformUI_FILES}) -target_link_libraries(affine_transform_sm_plugin PUBLIC scene_surface_mesh_item scene_sm_transform_item scene_points_with_normal_item) -target_compile_definitions(affine_transform_sm_plugin PUBLIC "-DCGAL_USE_SURFACE_MESH" ) +target_link_libraries(affine_transform_plugin PUBLIC scene_surface_mesh_item scene_transform_item scene_points_with_normal_item) polyhedron_demo_plugin(edit_box_plugin Edit_box_plugin) -target_link_libraries(edit_box_plugin PUBLIC scene_edit_box_item scene_surface_mesh_item scene_polyhedron_item) +target_link_libraries(edit_box_plugin PUBLIC scene_edit_box_item scene_surface_mesh_item ) qt5_wrap_ui( clipUI_FILES Clipping_box_widget.ui ) polyhedron_demo_plugin(clipping_box_plugin Clipping_box_plugin ${clipUI_FILES}) target_link_libraries(clipping_box_plugin PUBLIC scene_edit_box_item ) polyhedron_demo_plugin(create_bbox_mesh_plugin Create_bbox_mesh_plugin) -target_link_libraries(create_bbox_mesh_plugin PUBLIC scene_surface_mesh_item scene_polyhedron_item) +target_link_libraries(create_bbox_mesh_plugin PUBLIC scene_surface_mesh_item) qt5_wrap_ui( volumesUI_FILES Basic_generator_widget.ui) polyhedron_demo_plugin(basic_generator_plugin Basic_generator_plugin ${volumesUI_FILES}) -target_link_libraries(basic_generator_plugin PUBLIC scene_surface_mesh_item scene_polyhedron_item scene_points_with_normal_item scene_polylines_item) +target_link_libraries(basic_generator_plugin PUBLIC scene_surface_mesh_item scene_points_with_normal_item scene_polylines_item) diff --git a/Polyhedron/demo/Polyhedron/Plugins/PCA/Create_bbox_mesh_plugin.cpp b/Polyhedron/demo/Polyhedron/Plugins/PCA/Create_bbox_mesh_plugin.cpp index 3aba3fbb967..3cb4e166c9c 100644 --- a/Polyhedron/demo/Polyhedron/Plugins/PCA/Create_bbox_mesh_plugin.cpp +++ b/Polyhedron/demo/Polyhedron/Plugins/PCA/Create_bbox_mesh_plugin.cpp @@ -7,7 +7,6 @@ #include #include -#include "Scene_polyhedron_item.h" #include "Scene_surface_mesh_item.h" #include "Polyhedron_type.h" #include @@ -77,7 +76,7 @@ void Create_bbox_mesh_plugin::bbox(bool extended) { Scene_interface::Bbox bbox; bool initialized = false; - + Q_FOREACH(int index, scene->selectionIndices()) { Scene_item* item = scene->item(index); if(item->isFinite() && ! item->isEmpty()) { @@ -93,33 +92,26 @@ void Create_bbox_mesh_plugin::bbox(bool extended) << "\n " << bbox.ymax() - bbox.ymin() << "\n " << bbox.zmax() - bbox.zmin() << std::endl; - + if(extended) { const double delta_x = ( bbox.xmax() - bbox.xmin() ) / 20.; const double delta_y = ( bbox.ymax() - bbox.ymin() ) / 20.; const double delta_z = ( bbox.zmax() - bbox.zmin() ) / 20.; -bbox = Scene_interface::Bbox( - bbox.xmin() - delta_x, - bbox.ymin() - delta_y, - bbox.zmin() - delta_z, - bbox.xmax() + delta_x, - bbox.ymax() + delta_y, - bbox.zmax() + delta_z); + bbox = Scene_interface::Bbox( + bbox.xmin() - delta_x, + bbox.ymin() - delta_y, + bbox.zmin() - delta_z, + bbox.xmax() + delta_x, + bbox.ymax() + delta_y, + bbox.zmax() + delta_z); } Scene_item* item; Kernel::Iso_cuboid_3 ic(bbox); - if(mw->property("is_polyhedorn_mode").toBool()){ - Polyhedron* p = new Polyhedron; - CGAL::make_hexahedron(ic[0], ic[1], ic[2], ic[3], ic[4], ic[5], ic[6], ic[7],*p); - item = new Scene_polyhedron_item(p); - } else { - SMesh* p = new SMesh; - CGAL::make_hexahedron(ic[0], ic[1], ic[2], ic[3], ic[4], ic[5], ic[6], ic[7],*p); - - item = new Scene_surface_mesh_item(p); - } - + SMesh* p = new SMesh; + CGAL::make_hexahedron(ic[0], ic[1], ic[2], ic[3], ic[4], ic[5], ic[6], ic[7],*p); + + item = new Scene_surface_mesh_item(p); item->setName("Scene bbox mesh"); item->setRenderingMode(Wireframe); scene->addItem(item); diff --git a/Polyhedron/demo/Polyhedron/Plugins/PCA/Edit_box_plugin.cpp b/Polyhedron/demo/Polyhedron/Plugins/PCA/Edit_box_plugin.cpp index 4638a738276..74e526a1d7e 100644 --- a/Polyhedron/demo/Polyhedron/Plugins/PCA/Edit_box_plugin.cpp +++ b/Polyhedron/demo/Polyhedron/Plugins/PCA/Edit_box_plugin.cpp @@ -3,7 +3,6 @@ #include #include #include "Scene_edit_box_item.h" -#include "Scene_polyhedron_item.h" #include "Scene_surface_mesh_item.h" #include #include @@ -115,10 +114,10 @@ void Edit_box_plugin::exportToPoly() } } - Polyhedron::Point_3 points[8]; + EPICK::Point_3 points[8]; for(int i=0; i<8; ++i) { - points[i] = Polyhedron::Point_3(item->point(i,0),item->point(i,1), item->point(i,2))-offset; + points[i] = EPICK::Point_3(item->point(i,0),item->point(i,1), item->point(i,2))-offset; } Scene_surface_mesh_item* poly_item = new Scene_surface_mesh_item(); diff --git a/Polyhedron/demo/Polyhedron/Plugins/PCA/Pca_plugin.cpp b/Polyhedron/demo/Polyhedron/Plugins/PCA/Pca_plugin.cpp index 38e42cd3df2..e56af0979ad 100644 --- a/Polyhedron/demo/Polyhedron/Plugins/PCA/Pca_plugin.cpp +++ b/Polyhedron/demo/Polyhedron/Plugins/PCA/Pca_plugin.cpp @@ -1,11 +1,9 @@ #include #include #include -#include "Scene_polyhedron_item.h" #include "Scene_surface_mesh_item.h" #include "Scene_points_with_normal_item.h" #include "Scene_plane_item.h" -#include "Polyhedron_type.h" #include @@ -80,8 +78,7 @@ public: bool applicable(QAction*) const { - return qobject_cast(scene->item(scene->mainSelectionIndex())) || - qobject_cast(scene->item(scene->mainSelectionIndex())) || + return qobject_cast(scene->item(scene->mainSelectionIndex())) || qobject_cast(scene->item(scene->mainSelectionIndex())); } @@ -99,24 +96,18 @@ void Polyhedron_demo_pca_plugin::on_actionFitPlane_triggered() { const CGAL::Three::Scene_interface::Item_id index = scene->mainSelectionIndex(); - Scene_polyhedron_item* item = - qobject_cast(scene->item(index)); - - Scene_surface_mesh_item* sm_item = + Scene_surface_mesh_item* sm_item = qobject_cast(scene->item(index)); QApplication::setOverrideCursor(Qt::WaitCursor); - std::list triangles; - if(item){ - Polyhedron* pMesh = item->polyhedron(); - ::triangles(*pMesh,std::back_inserter(triangles)); - } else if(sm_item){ - SMesh* pMesh = sm_item->polyhedron(); - ::triangles(*pMesh,std::back_inserter(triangles)); - } + std::list triangles; + + SMesh* pMesh = sm_item->polyhedron(); + ::triangles(*pMesh,std::back_inserter(triangles)); + if(! triangles.empty()){ - QString item_name = (item)?item->name():sm_item->name(); + QString item_name = sm_item->name(); // fit plane to triangles Plane plane; std::cout << "Fit plane..."; @@ -133,7 +124,7 @@ void Polyhedron_demo_pca_plugin::on_actionFitPlane_triggered() new_item->setNormal(normal.x(), normal.y(), normal.z()); new_item->setName(tr("%1 (plane fit)").arg(item_name)); new_item->setColor(Qt::magenta); - new_item->setRenderingMode((item)?item->renderingMode():sm_item->renderingMode()); + new_item->setRenderingMode(sm_item->renderingMode()); scene->addItem(new_item); } @@ -176,27 +167,19 @@ void Polyhedron_demo_pca_plugin::on_actionFitLine_triggered() { const CGAL::Three::Scene_interface::Item_id index = scene->mainSelectionIndex(); - Scene_polyhedron_item* item = - qobject_cast(scene->item(index)); - Scene_surface_mesh_item* sm_item = qobject_cast(scene->item(index)); QApplication::setOverrideCursor(Qt::WaitCursor); CGAL::Bbox_3 bb; - - std::list triangles; - if(item){ - Polyhedron* pMesh = item->polyhedron(); - bb = ::triangles(*pMesh,std::back_inserter(triangles)); - } else if(sm_item){ - SMesh* pMesh = sm_item->polyhedron(); - bb = ::triangles(*pMesh,std::back_inserter(triangles)); - } + + std::list triangles; + SMesh* pMesh = sm_item->polyhedron(); + bb = ::triangles(*pMesh,std::back_inserter(triangles)); if(! triangles.empty()){ - QString item_name = (item)?item->name():sm_item->name(); + QString item_name = sm_item->name(); // fit line to triangles Line line; std::cout << "Fit line..."; @@ -256,7 +239,7 @@ void Polyhedron_demo_pca_plugin::on_actionFitLine_triggered() Scene_surface_mesh_item* new_item = new Scene_surface_mesh_item(pFit); new_item->setName(tr("%1 (line fit)").arg(item_name)); new_item->setColor(Qt::magenta); - new_item->setRenderingMode((item)?item->renderingMode(): sm_item->renderingMode()); + new_item->setRenderingMode( sm_item->renderingMode()); scene->addItem(new_item); } else diff --git a/Polyhedron/demo/Polyhedron/Plugins/PCA/Scene_facegraph_transform_item.h b/Polyhedron/demo/Polyhedron/Plugins/PCA/Scene_facegraph_transform_item.h index 5bf5f8de84e..f2fa1fba7bf 100644 --- a/Polyhedron/demo/Polyhedron/Plugins/PCA/Scene_facegraph_transform_item.h +++ b/Polyhedron/demo/Polyhedron/Plugins/PCA/Scene_facegraph_transform_item.h @@ -4,14 +4,10 @@ #include "Scene_facegraph_transform_item_config.h" #include "Kernel_type.h" -#ifdef CGAL_USE_SURFACE_MESH #include #include #include #include -#else -#include "Scene_polyhedron_item.h" -#endif #include #include @@ -22,11 +18,7 @@ using namespace CGAL::Three; struct Scene_facegraph_transform_item_priv; -#ifdef CGAL_USE_SURFACE_MESH typedef CGAL::Surface_mesh FaceGraph; -#else -typedef Polyhedron FaceGraph; -#endif // This class represents a polyhedron in the OpenGL scene class SCENE_FACEGRAPH_TRANSFORM_ITEM_EXPORT Scene_facegraph_transform_item : public Scene_item { diff --git a/Polyhedron/demo/Polyhedron/Plugins/PMP/CMakeLists.txt b/Polyhedron/demo/Polyhedron/Plugins/PMP/CMakeLists.txt index 22b42ac8442..9be832c313a 100644 --- a/Polyhedron/demo/Polyhedron/Plugins/PMP/CMakeLists.txt +++ b/Polyhedron/demo/Polyhedron/Plugins/PMP/CMakeLists.txt @@ -2,7 +2,7 @@ include( polyhedron_demo_macros ) if(EIGEN3_FOUND) polyhedron_demo_plugin(jet_fitting_plugin Jet_fitting_plugin) - target_link_libraries(jet_fitting_plugin PUBLIC scene_polyhedron_item scene_surface_mesh_item scene_polylines_item) + target_link_libraries(jet_fitting_plugin PUBLIC scene_surface_mesh_item scene_polylines_item) else(EIGEN3_FOUND) message(STATUS "NOTICE: Eigen 3.1 (or greater) was not found. Jet fitting plugin will not be available.") @@ -13,43 +13,24 @@ if(EIGEN3_FOUND) qt5_wrap_ui( hole_fillingUI_FILES Hole_filling_widget.ui) polyhedron_demo_plugin(hole_filling_plugin Hole_filling_plugin ${hole_fillingUI_FILES}) - target_link_libraries(hole_filling_plugin PUBLIC scene_polyhedron_item scene_polylines_item scene_polyhedron_selection_item) - - qt5_wrap_ui( hole_fillingUI_FILES Hole_filling_widget.ui) - polyhedron_demo_plugin(hole_filling_sm_plugin Hole_filling_plugin ${hole_fillingUI_FILES}) - target_link_libraries(hole_filling_sm_plugin PUBLIC scene_surface_mesh_item scene_polylines_item scene_surface_mesh_selection_item) - target_compile_definitions(hole_filling_sm_plugin PUBLIC "-DUSE_SURFACE_MESH" ) + target_link_libraries(hole_filling_plugin PUBLIC scene_surface_mesh_item scene_polylines_item scene_selection_item) qt5_wrap_ui( fairingUI_FILES Fairing_widget.ui) polyhedron_demo_plugin(fairing_plugin Fairing_plugin ${fairingUI_FILES}) - target_link_libraries(fairing_plugin PUBLIC scene_polyhedron_selection_item) - - polyhedron_demo_plugin(fairing_sm_plugin Fairing_plugin ${fairingUI_FILES}) - target_link_libraries(fairing_sm_plugin PUBLIC scene_surface_mesh_selection_item) - target_compile_definitions(fairing_sm_plugin PUBLIC "-DUSE_SURFACE_MESH" ) + target_link_libraries(fairing_plugin PUBLIC scene_selection_item) polyhedron_demo_plugin(hole_filling_polyline_plugin Hole_filling_polyline_plugin) - target_link_libraries(hole_filling_polyline_plugin PUBLIC scene_surface_mesh_item scene_polyhedron_item scene_polylines_item) + target_link_libraries(hole_filling_polyline_plugin PUBLIC scene_surface_mesh_item scene_polylines_item) qt5_wrap_ui( Mean_curvature_flow_skeleton_pluginUI_FILES Mean_curvature_flow_skeleton_plugin.ui) polyhedron_demo_plugin(mean_curvature_flow_skeleton_plugin Mean_curvature_flow_skeleton_plugin ${Mean_curvature_flow_skeleton_pluginUI_FILES}) - target_link_libraries(mean_curvature_flow_skeleton_plugin PUBLIC - scene_polyhedron_item - scene_points_with_normal_item - scene_polylines_item - scene_mcf_poly_item - demo_framework) - - qt5_wrap_ui( Mean_curvature_flow_skeleton_pluginUI_FILES Mean_curvature_flow_skeleton_plugin.ui) - polyhedron_demo_plugin(mean_curvature_flow_skeleton_sm_plugin Mean_curvature_flow_skeleton_plugin ${Mean_curvature_flow_skeleton_pluginUI_FILES}) - target_link_libraries(mean_curvature_flow_skeleton_sm_plugin + target_link_libraries(mean_curvature_flow_skeleton_plugin PUBLIC scene_surface_mesh_item scene_points_with_normal_item scene_polylines_item - scene_mcf_sm_item + scene_mcf_item demo_framework) - target_compile_definitions(mean_curvature_flow_skeleton_sm_plugin PUBLIC "-DUSE_SURFACE_MESH" ) else() message(STATUS "NOTICE: The hole filling and fairing plugins require Eigen 3.2 (or higher) and will not be available.") endif() @@ -59,114 +40,75 @@ endif() polyhedron_demo_plugin(orient_soup_plugin Orient_soup_plugin) -target_link_libraries(orient_soup_plugin PUBLIC scene_polygon_soup_item scene_polyhedron_item scene_surface_mesh_item scene_polylines_item scene_points_with_normal_item) +target_link_libraries(orient_soup_plugin PUBLIC scene_polygon_soup_item scene_surface_mesh_item scene_polylines_item scene_points_with_normal_item) polyhedron_demo_plugin(inside_out_plugin Inside_out_plugin) -target_link_libraries(inside_out_plugin PUBLIC scene_polyhedron_item scene_surface_mesh_item scene_polygon_soup_item) +target_link_libraries(inside_out_plugin PUBLIC scene_surface_mesh_item scene_polygon_soup_item) -polyhedron_demo_plugin(join_and_split_polyhedra_plugin Join_and_split_polyhedra_plugin) -target_link_libraries(join_and_split_polyhedra_plugin PUBLIC scene_polyhedron_item scene_polyhedron_selection_item) - -polyhedron_demo_plugin(join_and_split_sm_plugin Join_and_split_polyhedra_plugin) -target_link_libraries(join_and_split_sm_plugin PUBLIC scene_surface_mesh_item scene_surface_mesh_selection_item) -target_compile_definitions(join_and_split_sm_plugin PUBLIC "-DUSE_SURFACE_MESH") +polyhedron_demo_plugin(join_and_split_plugin Join_and_split_polyhedra_plugin) +target_link_libraries(join_and_split_plugin PUBLIC scene_surface_mesh_item scene_selection_item) qt5_wrap_ui( point_inside_polyhedronUI_FILES Point_inside_polyhedron_widget.ui) polyhedron_demo_plugin(point_inside_polyhedron_plugin Point_inside_polyhedron_plugin ${point_inside_polyhedronUI_FILES}) -target_link_libraries(point_inside_polyhedron_plugin PUBLIC scene_polyhedron_item scene_surface_mesh_item scene_points_with_normal_item) +target_link_libraries(point_inside_polyhedron_plugin PUBLIC scene_surface_mesh_item scene_points_with_normal_item) qt5_wrap_ui( polyhedron_slicerUI_FILES Polyhedron_slicer_widget.ui) polyhedron_demo_plugin(polyhedron_slicer_plugin Polyhedron_slicer_plugin ${polyhedron_slicerUI_FILES}) -target_link_libraries(polyhedron_slicer_plugin PUBLIC scene_polyhedron_item scene_surface_mesh_item scene_basic_objects scene_polylines_item) +target_link_libraries(polyhedron_slicer_plugin PUBLIC scene_surface_mesh_item scene_basic_objects scene_polylines_item) polyhedron_demo_plugin(polyhedron_stitching_plugin Polyhedron_stitching_plugin) -target_link_libraries(polyhedron_stitching_plugin PUBLIC scene_polyhedron_item scene_surface_mesh_item scene_polylines_item) +target_link_libraries(polyhedron_stitching_plugin PUBLIC scene_surface_mesh_item scene_polylines_item) qt5_wrap_ui( selectionUI_FILES Selection_widget.ui) add_library(selection_plugin SHARED Selection_plugin.cpp ${selectionUI_FILES}) -#polyhedron_demo_plugin(selection_plugin Selection_plugin ${selectionUI_FILES}) -target_link_libraries(selection_plugin PUBLIC scene_polyhedron_selection_item scene_points_with_normal_item scene_polylines_item) - -qt5_wrap_ui( selectionUI_FILES Selection_widget.ui) -add_library(selection_sm_plugin SHARED Selection_plugin.cpp ${selectionUI_FILES}) -#polyhedron_demo_plugin(selection_sm_plugin Selection_plugin ${selectionUI_FILES}) -target_link_libraries(selection_sm_plugin PUBLIC scene_surface_mesh_selection_item scene_points_with_normal_item scene_polylines_item) -target_compile_definitions(selection_sm_plugin PUBLIC "-DUSE_SURFACE_MESH" ) +target_link_libraries(selection_plugin PUBLIC scene_selection_item scene_points_with_normal_item scene_polylines_item) polyhedron_demo_plugin(self_intersection_plugin Self_intersection_plugin) -target_link_libraries(self_intersection_plugin PUBLIC scene_polyhedron_item scene_polyhedron_selection_item ) - -polyhedron_demo_plugin(self_intersection_sm_plugin Self_intersection_plugin) -target_link_libraries(self_intersection_sm_plugin PUBLIC scene_surface_mesh_selection_item scene_surface_mesh_item) -target_compile_definitions(self_intersection_sm_plugin PUBLIC "-DUSE_SURFACE_MESH" ) +target_link_libraries(self_intersection_plugin PUBLIC scene_selection_item scene_surface_mesh_item) polyhedron_demo_plugin(triangulate_facets_plugin Triangulate_facets_plugin) -target_link_libraries(triangulate_facets_plugin PUBLIC scene_polyhedron_item scene_surface_mesh_item) +target_link_libraries(triangulate_facets_plugin PUBLIC scene_surface_mesh_item) polyhedron_demo_plugin(corefinement_plugin Corefinement_plugin) -target_link_libraries(corefinement_plugin PUBLIC scene_surface_mesh_item scene_polyhedron_item) +target_link_libraries(corefinement_plugin PUBLIC scene_surface_mesh_item) polyhedron_demo_plugin(surface_intersection_plugin Surface_intersection_plugin) -target_link_libraries(surface_intersection_plugin PUBLIC scene_polyhedron_item scene_polylines_item scene_points_with_normal_item) - -polyhedron_demo_plugin(surface_intersection_sm_plugin Surface_intersection_plugin) -target_link_libraries(surface_intersection_sm_plugin PUBLIC scene_surface_mesh_item scene_polylines_item scene_points_with_normal_item) -target_compile_definitions(surface_intersection_sm_plugin PUBLIC "-DUSE_SURFACE_MESH" ) +target_link_libraries(surface_intersection_plugin PUBLIC scene_surface_mesh_item scene_polylines_item scene_points_with_normal_item) polyhedron_demo_plugin(repair_polyhedron_plugin Repair_polyhedron_plugin) -target_link_libraries(repair_polyhedron_plugin PUBLIC scene_surface_mesh_item scene_polyhedron_item) +target_link_libraries(repair_polyhedron_plugin PUBLIC scene_surface_mesh_item) qt5_wrap_ui( isotropicRemeshingUI_FILES Isotropic_remeshing_dialog.ui) polyhedron_demo_plugin(isotropic_remeshing_plugin Isotropic_remeshing_plugin ${isotropicRemeshingUI_FILES}) -target_link_libraries(isotropic_remeshing_plugin PUBLIC scene_polyhedron_item scene_polyhedron_selection_item) - -polyhedron_demo_plugin(isotropic_remeshing_sm_plugin Isotropic_remeshing_plugin ${isotropicRemeshingUI_FILES}) -target_link_libraries(isotropic_remeshing_sm_plugin PUBLIC scene_surface_mesh_item scene_surface_mesh_selection_item) -target_compile_definitions(isotropic_remeshing_sm_plugin PUBLIC "-DUSE_SURFACE_MESH" ) +target_link_libraries(isotropic_remeshing_plugin PUBLIC scene_surface_mesh_item scene_selection_item) if(TBB_FOUND) - CGAL_target_use_TBB(isotropic_remeshing_sm_plugin) CGAL_target_use_TBB(isotropic_remeshing_plugin) endif() polyhedron_demo_plugin(distance_plugin Distance_plugin) -target_link_libraries(distance_plugin PUBLIC scene_polyhedron_item scene_color_ramp) - +target_link_libraries(distance_plugin PUBLIC scene_surface_mesh_item scene_color_ramp) if(TBB_FOUND) CGAL_target_use_TBB(distance_plugin) endif() polyhedron_demo_plugin(detect_sharp_edges_plugin Detect_sharp_edges_plugin) -target_link_libraries(detect_sharp_edges_plugin PUBLIC scene_polyhedron_item) +target_link_libraries(detect_sharp_edges_plugin PUBLIC scene_surface_mesh_item) -polyhedron_demo_plugin(detect_sharp_edges_sm_plugin Detect_sharp_edges_plugin) -target_link_libraries(detect_sharp_edges_sm_plugin PUBLIC scene_surface_mesh_item) -target_compile_definitions(detect_sharp_edges_sm_plugin PUBLIC "-DUSE_SURFACE_MESH" ) -polyhedron_demo_plugin(distance_sm_plugin Distance_plugin) -target_link_libraries(distance_sm_plugin PUBLIC scene_surface_mesh_item scene_color_ramp) -target_compile_definitions(distance_sm_plugin PUBLIC "-DUSE_SURFACE_MESH" ) qt5_wrap_ui( randomPerturbationUI_FILES Random_perturbation_dialog.ui) polyhedron_demo_plugin(random_perturbation_plugin Random_perturbation_plugin ${randomPerturbationUI_FILES}) -target_link_libraries(random_perturbation_plugin PUBLIC scene_surface_mesh_item scene_surface_mesh_selection_item) +target_link_libraries(random_perturbation_plugin PUBLIC scene_surface_mesh_item scene_selection_item) -polyhedron_demo_plugin(degenerated_faces_poly_plugin Degenerated_faces_plugin) -target_link_libraries(degenerated_faces_poly_plugin PUBLIC scene_polyhedron_item scene_polyhedron_selection_item) - -polyhedron_demo_plugin(degenerated_faces_sm_plugin Degenerated_faces_plugin) -target_link_libraries(degenerated_faces_sm_plugin PUBLIC scene_surface_mesh_item scene_surface_mesh_selection_item) -target_compile_definitions(degenerated_faces_sm_plugin PUBLIC "-DUSE_SURFACE_MESH" ) +polyhedron_demo_plugin(degenerated_faces_plugin Degenerated_faces_plugin) +target_link_libraries(degenerated_faces_plugin PUBLIC scene_surface_mesh_item scene_selection_item) -polyhedron_demo_plugin(extrude_poly_plugin Extrude_plugin) -target_link_libraries(extrude_poly_plugin PUBLIC scene_polyhedron_item scene_polyhedron_selection_item) - -polyhedron_demo_plugin(extrude_sm_plugin Extrude_plugin) -target_link_libraries(extrude_sm_plugin PUBLIC scene_surface_mesh_item scene_surface_mesh_selection_item) -target_compile_definitions(extrude_sm_plugin PUBLIC "-DUSE_SURFACE_MESH" ) +polyhedron_demo_plugin(extrude_plugin Extrude_plugin) +target_link_libraries(extrude_plugin PUBLIC scene_surface_mesh_item scene_selection_item) diff --git a/Polyhedron/demo/Polyhedron/Plugins/PMP/Corefinement_plugin.cpp b/Polyhedron/demo/Polyhedron/Plugins/PMP/Corefinement_plugin.cpp index 813adb803e6..ce83faa6f5b 100644 --- a/Polyhedron/demo/Polyhedron/Plugins/PMP/Corefinement_plugin.cpp +++ b/Polyhedron/demo/Polyhedron/Plugins/PMP/Corefinement_plugin.cpp @@ -4,8 +4,6 @@ #include "Messages_interface.h" #include #include "Scene_surface_mesh_item.h" -#include "Scene_polyhedron_item.h" -#include "Polyhedron_type.h" #include @@ -77,11 +75,6 @@ public: if(!qobject_cast(item2)) return false; } - else if( qobject_cast(item1)) - { - if(!qobject_cast(item2)) - return false; - } else return false; return true; @@ -99,11 +92,6 @@ public Q_SLOTS: apply_corefine(qobject_cast(item1), qobject_cast(item2)); } - else - { - apply_corefine(qobject_cast(item1), - qobject_cast(item2)); - } } void corefine_and_bool_op(bool_op op) @@ -119,12 +107,6 @@ public Q_SLOTS: qobject_cast(item2), op); } - else - { - apply_corefine_and_bool_op(qobject_cast(item1), - qobject_cast(item2), - op); - } } void corefine_and_union() diff --git a/Polyhedron/demo/Polyhedron/Plugins/PMP/Degenerated_faces_plugin.cpp b/Polyhedron/demo/Polyhedron/Plugins/PMP/Degenerated_faces_plugin.cpp index 8fd94b78149..d299764fca7 100644 --- a/Polyhedron/demo/Polyhedron/Plugins/PMP/Degenerated_faces_plugin.cpp +++ b/Polyhedron/demo/Polyhedron/Plugins/PMP/Degenerated_faces_plugin.cpp @@ -5,11 +5,7 @@ #include "opengl_tools.h" #include "Kernel_type.h" #include "Polyhedron_type.h" -#ifdef USE_SURFACE_MESH #include "Scene_surface_mesh_item.h" -#else -#include "Scene_polyhedron_item.h" -#endif #include "Scene_polyhedron_selection_item.h" #include @@ -19,11 +15,7 @@ #include #include #include -#ifdef USE_SURFACE_MESH typedef Scene_surface_mesh_item Scene_facegraph_item; -#else -typedef Scene_polyhedron_item Scene_facegraph_item; -#endif typedef Scene_facegraph_item::Face_graph Face_graph; using namespace CGAL::Three; class Degenerated_faces_plugin : diff --git a/Polyhedron/demo/Polyhedron/Plugins/PMP/Detect_sharp_edges_plugin.cpp b/Polyhedron/demo/Polyhedron/Plugins/PMP/Detect_sharp_edges_plugin.cpp index 2ad95b8ca69..f7f559c373c 100644 --- a/Polyhedron/demo/Polyhedron/Plugins/PMP/Detect_sharp_edges_plugin.cpp +++ b/Polyhedron/demo/Polyhedron/Plugins/PMP/Detect_sharp_edges_plugin.cpp @@ -7,22 +7,12 @@ #include -#ifdef USE_SURFACE_MESH #include "Scene_surface_mesh_item.h" -#else -#include "Scene_polyhedron_item.h" -#include "Polyhedron_type.h" -#endif - #include "Polyhedron_demo_detect_sharp_edges.h" -#ifdef USE_SURFACE_MESH typedef Scene_surface_mesh_item Scene_facegraph_item; typedef CGAL::Kernel_traits::Kernel Kernel; -#else -typedef Scene_polyhedron_item Scene_facegraph_item; -#endif typedef Scene_facegraph_item::Face_graph FaceGraph; typedef boost::graph_traits::halfedge_descriptor halfedge_descriptor; @@ -143,9 +133,6 @@ void Polyhedron_demo_detect_sharp_edges_plugin::detectSharpEdges(bool input_dial .vertex_incident_patches_map(vip)); //update item item->setItemIsMulticolor(true); -#ifndef USE_SURFACE_MESH - item->set_color_vector_read_only(false); -#endif item->invalidateOpenGLBuffers(); // update scene diff --git a/Polyhedron/demo/Polyhedron/Plugins/PMP/Distance_plugin.cpp b/Polyhedron/demo/Polyhedron/Plugins/PMP/Distance_plugin.cpp index 39d5e23a162..8e76521660e 100644 --- a/Polyhedron/demo/Polyhedron/Plugins/PMP/Distance_plugin.cpp +++ b/Polyhedron/demo/Polyhedron/Plugins/PMP/Distance_plugin.cpp @@ -8,13 +8,8 @@ #include #include #include "Messages_interface.h" -#ifdef USE_SURFACE_MESH #include "Kernel_type.h" #include "Scene_surface_mesh_item.h" -#else -#include "Scene_polyhedron_item.h" -#include "Polyhedron_type.h" -#endif #include "Color_ramp.h" #include "triangulate_primitive.h" #include @@ -29,12 +24,7 @@ using namespace CGAL::Three; namespace PMP = CGAL::Polygon_mesh_processing; -#ifdef USE_SURFACE_MESH typedef Scene_surface_mesh_item Scene_face_graph_item; -#else -typedef Scene_polyhedron_item Scene_face_graph_item; -#endif - typedef Scene_face_graph_item::Face_graph Face_graph; #if defined(CGAL_LINKED_WITH_TBB) diff --git a/Polyhedron/demo/Polyhedron/Plugins/PMP/Extrude_plugin.cpp b/Polyhedron/demo/Polyhedron/Plugins/PMP/Extrude_plugin.cpp index 6f7bedf349f..b945459e8d5 100644 --- a/Polyhedron/demo/Polyhedron/Plugins/PMP/Extrude_plugin.cpp +++ b/Polyhedron/demo/Polyhedron/Plugins/PMP/Extrude_plugin.cpp @@ -19,21 +19,11 @@ #include #include "Messages_interface.h" -#ifdef USE_SURFACE_MESH #include "Kernel_type.h" #include "Scene_surface_mesh_item.h" -#else -#include "Scene_polyhedron_item.h" -#include "Polyhedron_type.h" -#endif #include "Scene_polyhedron_selection_item.h" #include "Scene.h" -#ifdef USE_SURFACE_MESH typedef Scene_surface_mesh_item Scene_face_graph_item; -#else -typedef Scene_polyhedron_item Scene_face_graph_item; -#endif - typedef Scene_face_graph_item::Face_graph Face_graph; typedef CGAL::qglviewer::Vec Vec; using namespace CGAL::Three; diff --git a/Polyhedron/demo/Polyhedron/Plugins/PMP/Fairing_plugin.cpp b/Polyhedron/demo/Polyhedron/Plugins/PMP/Fairing_plugin.cpp index 1f4b212c807..98cf548d126 100644 --- a/Polyhedron/demo/Polyhedron/Plugins/PMP/Fairing_plugin.cpp +++ b/Polyhedron/demo/Polyhedron/Plugins/PMP/Fairing_plugin.cpp @@ -6,16 +6,9 @@ #include "Scene_polyhedron_selection_item.h" #include "ui_Fairing_widget.h" -#ifdef USE_SURFACE_MESH #include "SMesh_type.h" typedef Scene_surface_mesh_item Scene_facegraph_item; -#else -#include "Polyhedron_type.h" -typedef Scene_polyhedron_item Scene_facegraph_item; -#endif - - #include #include #include @@ -58,35 +51,23 @@ public: scene = scene_interface; messages = m; actionFairing = new QAction(tr( - #ifdef USE_SURFACE_MESH - "Refinement and Fairing for Surface Mesh" - #else - "Refinement and Fairing for Polyhedron" - #endif + "Refinement and Fairing" ), mw); actionFairing->setProperty("subMenuName", "Polygon Mesh Processing"); connect(actionFairing, SIGNAL(triggered()), this, SLOT(fairing_action())); dock_widget = new QDockWidget( - #ifdef USE_SURFACE_MESH - "Refinement and Fairing for Surface Mesh" - #else - "Refinement and Fairing for Polyhedron" - #endif + "Refinement and Fairing" , mw); dock_widget->setVisible(false); ui_widget.setupUi(dock_widget); addDockWidget(dock_widget); dock_widget->setWindowTitle(tr( - #ifdef USE_SURFACE_MESH - "Fairing for Surface Mesh" - #else - "Fairing for Polyhedron" - #endif + "Fairing " )); - + connect(ui_widget.Fair_button, SIGNAL(clicked()), this, SLOT(on_Fair_button_clicked())); connect(ui_widget.Refine_button, SIGNAL(clicked()), this, SLOT(on_Refine_button_clicked())); } diff --git a/Polyhedron/demo/Polyhedron/Plugins/PMP/Hole_filling_plugin.cpp b/Polyhedron/demo/Polyhedron/Plugins/PMP/Hole_filling_plugin.cpp index 36551e5ad84..873b453f08b 100644 --- a/Polyhedron/demo/Polyhedron/Plugins/PMP/Hole_filling_plugin.cpp +++ b/Polyhedron/demo/Polyhedron/Plugins/PMP/Hole_filling_plugin.cpp @@ -3,7 +3,6 @@ #include #include "Messages_interface.h" -#include "Scene_polyhedron_item.h" #include "Scene_surface_mesh_item.h" #include "Scene_polylines_item.h" #include "Scene_polyhedron_selection_item.h" @@ -11,7 +10,6 @@ #include #include "ui_Hole_filling_widget.h" -#include "Polyhedron_type.h" #include #include @@ -42,22 +40,11 @@ #include #include -#ifdef USE_SURFACE_MESH typedef Scene_surface_mesh_item Scene_face_graph_item; void normalize_border(Scene_face_graph_item::Face_graph&) {} -#else -typedef Scene_polyhedron_item Scene_face_graph_item; - -void normalize_border(Scene_face_graph_item::Face_graph& polyhedron) -{ - polyhedron.normalize_border(); -} - -#endif - typedef Scene_face_graph_item::Face_graph Face_graph; typedef boost::graph_traits::vertex_descriptor fg_vertex_descriptor; @@ -436,21 +423,13 @@ void Polyhedron_demo_hole_filling_plugin::init(QMainWindow* mainWindow, messages = m; actionHoleFilling = new QAction(tr( - #ifdef USE_SURFACE_MESH - "Hole Filling for Surface Mesh" - #else - "Hole Filling for Polyhedron" - #endif + "Hole Filling" ), mw); actionHoleFilling->setProperty("subMenuName", "Polygon Mesh Processing"); connect(actionHoleFilling, SIGNAL(triggered()), this, SLOT(hole_filling_action())); dock_widget = new QDockWidget( - #ifdef USE_SURFACE_MESH - "Hole Filling for Surface Mesh" - #else - "Hole Filling for Polyhedron" - #endif + "Hole Filling" , mw); dock_widget->setVisible(false); dock_widget->installEventFilter(this); @@ -461,11 +440,7 @@ void Polyhedron_demo_hole_filling_plugin::init(QMainWindow* mainWindow, addDockWidget(dock_widget); dock_widget->setWindowTitle(tr( - #ifdef USE_SURFACE_MESH - "Hole Filling for Surface Mesh" - #else - "Hole Filling for Polyhedron" - #endif + "Hole Filling" )); connect(ui_widget.Fill_from_selection_button, SIGNAL(clicked()), this, SLOT(on_Fill_from_selection_button())); diff --git a/Polyhedron/demo/Polyhedron/Plugins/PMP/Hole_filling_polyline_plugin.cpp b/Polyhedron/demo/Polyhedron/Plugins/PMP/Hole_filling_polyline_plugin.cpp index eda615096bc..605703178bc 100644 --- a/Polyhedron/demo/Polyhedron/Plugins/PMP/Hole_filling_polyline_plugin.cpp +++ b/Polyhedron/demo/Polyhedron/Plugins/PMP/Hole_filling_polyline_plugin.cpp @@ -1,13 +1,11 @@ #include #include "Messages_interface.h" -#include "Scene_polyhedron_item.h" #include "Scene_surface_mesh_item.h" #include "Scene_polylines_item.h" #include #include -#include "Polyhedron_type.h" #include #include @@ -68,12 +66,6 @@ private: }; typedef boost::function_output_iterator Nop_out; - struct Get_handle { - typedef Polyhedron::Facet_handle result_type; - result_type operator()(Polyhedron::Facet& f) const - { return f.halfedge()->facet(); } - }; - public Q_SLOTS: void hole_filling_polyline_action() { Scene_polylines_item* polylines_item = qobject_cast(scene->item(scene->mainSelectionIndex())); diff --git a/Polyhedron/demo/Polyhedron/Plugins/PMP/Inside_out_plugin.cpp b/Polyhedron/demo/Polyhedron/Plugins/PMP/Inside_out_plugin.cpp index aac56db2864..b1941923dff 100644 --- a/Polyhedron/demo/Polyhedron/Plugins/PMP/Inside_out_plugin.cpp +++ b/Polyhedron/demo/Polyhedron/Plugins/PMP/Inside_out_plugin.cpp @@ -3,10 +3,8 @@ #include #include #include -#include "Scene_polyhedron_item.h" #include "Scene_polygon_soup_item.h" #include "Scene_surface_mesh_item.h" -#include "Polyhedron_type.h" #include #include @@ -48,12 +46,10 @@ public: bool applicable(QAction* action) const { const CGAL::Three::Scene_interface::Item_id index = scene->mainSelectionIndex(); if(action == actionInsideOut) - return qobject_cast(scene->item(index)) - || qobject_cast(scene->item(index)) + return qobject_cast(scene->item(index)) || qobject_cast(scene->item(index)); else if(action == actionOrientCC) - return qobject_cast(scene->item(index)) - || qobject_cast(scene->item(index)); + return qobject_cast(scene->item(index)); return false; } @@ -73,27 +69,17 @@ void Polyhedron_demo_inside_out_plugin::on_actionInsideOut_triggered() { const CGAL::Three::Scene_interface::Item_id index = scene->mainSelectionIndex(); - Scene_polyhedron_item* poly_item = - qobject_cast(scene->item(index)); - Scene_polygon_soup_item* soup_item = qobject_cast(scene->item(index)); Scene_surface_mesh_item* sm_item = qobject_cast(scene->item(index)); - if(poly_item || soup_item || sm_item) + if(soup_item || sm_item) { QApplication::setOverrideCursor(Qt::WaitCursor); - if(poly_item) { - Polyhedron* pMesh = poly_item->polyhedron(); - if(pMesh){ - CGAL::Polygon_mesh_processing::reverse_face_orientations(*pMesh); - poly_item->invalidateOpenGLBuffers(); - } - } - else if(sm_item) { + if(sm_item) { SMesh* pMesh = sm_item->polyhedron(); if(pMesh){ CGAL::Polygon_mesh_processing::reverse_face_orientations(*pMesh); @@ -116,13 +102,10 @@ void Polyhedron_demo_inside_out_plugin::on_actionOrientCC_triggered() { const CGAL::Three::Scene_interface::Item_id index = scene->mainSelectionIndex(); - Scene_polyhedron_item* poly_item = - qobject_cast(scene->item(index)); - Scene_surface_mesh_item* sm_item = qobject_cast(scene->item(index)); - if(poly_item || sm_item) + if(sm_item) { QStringList items; items << tr("Outward") << tr("Inward"); @@ -133,17 +116,7 @@ void Polyhedron_demo_inside_out_plugin::on_actionOrientCC_triggered() if (!ok ) return; QApplication::setOverrideCursor(Qt::WaitCursor); - if(poly_item) { - Polyhedron* pMesh = poly_item->polyhedron(); - if(pMesh){ - if(is_closed(*pMesh)) - CGAL::Polygon_mesh_processing::orient_to_bound_a_volume(*pMesh, item==items.first()); - else - CGAL::Polygon_mesh_processing::orient(*pMesh, item==items.first()); - poly_item->invalidateOpenGLBuffers(); - } - } - else if(sm_item) { + if(sm_item) { SMesh* pMesh = sm_item->polyhedron(); if(pMesh){ if(is_closed(*pMesh)) diff --git a/Polyhedron/demo/Polyhedron/Plugins/PMP/Isotropic_remeshing_plugin.cpp b/Polyhedron/demo/Polyhedron/Plugins/PMP/Isotropic_remeshing_plugin.cpp index 45ce18f78fc..993fe8d26f0 100644 --- a/Polyhedron/demo/Polyhedron/Plugins/PMP/Isotropic_remeshing_plugin.cpp +++ b/Polyhedron/demo/Polyhedron/Plugins/PMP/Isotropic_remeshing_plugin.cpp @@ -7,12 +7,8 @@ #include -#ifdef USE_SURFACE_MESH + #include "Scene_surface_mesh_item.h" -#else -#include "Scene_polyhedron_item.h" -#include "Polyhedron_type.h" -#endif #include "Scene_polyhedron_selection_item.h" @@ -50,31 +46,11 @@ #include "ui_Isotropic_remeshing_dialog.h" -#ifdef USE_SURFACE_MESH + typedef Scene_surface_mesh_item Scene_facegraph_item; -#else -typedef Scene_facegraph_item Scene_facegraph_item; -#endif typedef Scene_facegraph_item::Face_graph FaceGraph; typedef boost::graph_traits::face_descriptor face_descriptor; -template -#ifdef USE_SURFACE_MESH -void reset_face_ids(Mesh&) -{} -#else -void reset_face_ids(Mesh& mesh) -{ -typename boost::property_map::type fim - = get(CGAL::face_index, mesh); - -unsigned int id = 0; -BOOST_FOREACH(face_descriptor f, faces(mesh)) -{ - put(fim, f, id++); -} -} -#endif // give a halfedge and a target edge length, put in `out` points // which the edge equally spaced such that splitting the edge // using the sequence of points make the edges shorter than @@ -346,7 +322,6 @@ public Q_SLOTS: ? *poly_item->polyhedron() : *selection_item->polyhedron(); - reset_face_ids(pmesh); Patch_id_pmap fpmap = get(CGAL::face_patch_id_t(), pmesh); bool fpmap_valid = false; @@ -461,7 +436,7 @@ public Q_SLOTS: .vertex_is_constrained_map(selection_item->constrained_vertices_pmap())); } } -#ifdef USE_SURFACE_MESH + SMesh mesh_ = *selection_item->polyhedron(); std::vector are_edges_removed; are_edges_removed.resize(mesh_.number_of_edges()+mesh_.number_of_removed_edges()); @@ -473,11 +448,11 @@ public Q_SLOTS: if(!are_edges_removed[i]) are_edges_constrained[i] = get(selection_item->constrained_edges_pmap(), SMesh::Edge_index(static_cast(i))); } - - + + int i0, i1, nE(mesh_.number_of_edges()+mesh_.number_of_removed_edges()); - + //get constrained values in order. if (nE > 0) { @@ -488,7 +463,7 @@ public Q_SLOTS: while (!are_edges_removed[i0] && i0 < i1) ++i0; while ( are_edges_removed[i1] && i0 < i1) --i1; if (i0 >= i1) break; - + // swap std::swap(are_edges_constrained[i0], are_edges_constrained[i1]); std::swap(are_edges_removed[i0], are_edges_removed[i1]); @@ -507,7 +482,7 @@ public Q_SLOTS: pmap = selection_item->constrained_edges_pmap(); put(pmap, SMesh::Edge_index(i), are_edges_constrained[i]); } -#endif + selection_item->poly_item_changed(); selection_item->clear(); selection_item->changed_with_poly_item(); @@ -544,7 +519,7 @@ public Q_SLOTS: if (preserve_duplicates) { detect_and_split_duplicates(poly_items, edges_to_protect_map, target_length); - reset_face_ids(pmesh); + } Scene_polyhedron_selection_item::Is_constrained_map ecm(&edges_to_protect); @@ -572,10 +547,8 @@ public Q_SLOTS: } //destroys the patch_id_map for the Surface_mesh_item to avoid assertions. -#ifdef USE_SURFACE_MESH poly_item->resetColors(); -#endif poly_item->invalidateOpenGLBuffers(); Q_EMIT poly_item->itemChanged(); @@ -687,10 +660,8 @@ public Q_SLOTS: BOOST_FOREACH(Scene_facegraph_item* poly_item, selection) { -#ifdef USE_SURFACE_MESH //destroys the patch_id_map for the Surface_mesh_item to avoid assertions. poly_item->resetColors(); -#endif poly_item->invalidateOpenGLBuffers(); Q_EMIT poly_item->itemChanged(); } @@ -719,7 +690,6 @@ private: Edge_set& edges_to_protect) const { //fill face_index property map - reset_face_ids(*poly_item->polyhedron()); if (edges_only_) { diff --git a/Polyhedron/demo/Polyhedron/Plugins/PMP/Jet_fitting_plugin.cpp b/Polyhedron/demo/Polyhedron/Plugins/PMP/Jet_fitting_plugin.cpp index 26d8b4031e8..d5a39b213ea 100644 --- a/Polyhedron/demo/Polyhedron/Plugins/PMP/Jet_fitting_plugin.cpp +++ b/Polyhedron/demo/Polyhedron/Plugins/PMP/Jet_fitting_plugin.cpp @@ -1,6 +1,4 @@ #include -#include "Polyhedron_type.h" -#include "Scene_polyhedron_item.h" #include "Scene_surface_mesh_item.h" #include "Scene_polylines_item.h" @@ -40,8 +38,7 @@ public: } bool applicable(QAction*) const { - return qobject_cast(scene->item(scene->mainSelectionIndex())) || - qobject_cast(scene->item(scene->mainSelectionIndex())); + return qobject_cast(scene->item(scene->mainSelectionIndex())); } public Q_SLOTS: @@ -125,11 +122,9 @@ void Polyhedron_demo_jet_fitting_plugin::on_actionEstimateCurvature_triggered() // get active polyhedron const CGAL::Three::Scene_interface::Item_id index = scene->mainSelectionIndex(); QString name = scene->item(index)->name(); - Scene_polyhedron_item* poly_item = - qobject_cast(scene->item(index)); Scene_surface_mesh_item* sm_item = qobject_cast(scene->item(index)); - if((!poly_item) && (! sm_item)){ + if(! sm_item){ return; } // wait cursor @@ -143,14 +138,9 @@ void Polyhedron_demo_jet_fitting_plugin::on_actionEstimateCurvature_triggered() min_curv->setColor(Qt::green); min_curv->setName(tr("%1 (min curvatures)").arg(name)); - if(poly_item){ - Polyhedron* pMesh = poly_item->polyhedron(); - compute(pMesh, min_curv, max_curv); - } else { - - SMesh* pMesh = sm_item->polyhedron(); - compute(pMesh, min_curv, max_curv); - } + SMesh* pMesh = sm_item->polyhedron(); + compute(pMesh, min_curv, max_curv); + scene->addItem(max_curv); scene->addItem(min_curv); max_curv->invalidateOpenGLBuffers(); diff --git a/Polyhedron/demo/Polyhedron/Plugins/PMP/Join_and_split_polyhedra_plugin.cpp b/Polyhedron/demo/Polyhedron/Plugins/PMP/Join_and_split_polyhedra_plugin.cpp index 771cf17ef67..47f4e65e173 100644 --- a/Polyhedron/demo/Polyhedron/Plugins/PMP/Join_and_split_polyhedra_plugin.cpp +++ b/Polyhedron/demo/Polyhedron/Plugins/PMP/Join_and_split_polyhedra_plugin.cpp @@ -2,12 +2,8 @@ #include #include #include "Kernel_type.h" -#ifdef USE_SURFACE_MESH + #include "Scene_surface_mesh_item.h" -#else -#include "Polyhedron_type.h" -#include "Scene_polyhedron_item.h" -#endif #include "Scene_polyhedron_selection_item.h" #include "Scene_polylines_item.h" #include "Messages_interface.h" @@ -29,11 +25,7 @@ #include #include "Color_map.h" -#ifdef USE_SURFACE_MESH typedef Scene_surface_mesh_item Scene_facegraph_item; -#else -typedef Scene_polyhedron_item Scene_facegraph_item; -#endif typedef Scene_facegraph_item::Face_graph FaceGraph; using namespace CGAL::Three; class Polyhedron_demo_join_and_split_polyhedra_plugin: @@ -253,9 +245,6 @@ void Polyhedron_demo_join_and_split_polyhedra_plugin::on_actionColorConnectedCom typedef boost::graph_traits::face_descriptor face_descriptor; selection_item->polyhedron_item()->setItemIsMulticolor(true); -#ifndef USE_SURFACE_MESH - selection_item->polyhedron_item()->set_color_vector_read_only(false); -#endif FaceGraph& pmesh = *(selection_item->polyhedron()); boost::property_map::type fim diff --git a/Polyhedron/demo/Polyhedron/Plugins/PMP/Mean_curvature_flow_skeleton_plugin.cpp b/Polyhedron/demo/Polyhedron/Plugins/PMP/Mean_curvature_flow_skeleton_plugin.cpp index f2a789506db..fb4ccf514bf 100644 --- a/Polyhedron/demo/Polyhedron/Plugins/PMP/Mean_curvature_flow_skeleton_plugin.cpp +++ b/Polyhedron/demo/Polyhedron/Plugins/PMP/Mean_curvature_flow_skeleton_plugin.cpp @@ -2,14 +2,10 @@ #include #include #include "ui_Mean_curvature_flow_skeleton_plugin.h" -#ifdef USE_SURFACE_MESH + #include "Kernel_type.h" #include "Scene_surface_mesh_item.h" #include -#else -#include "Scene_polyhedron_item.h" -#include -#endif #include "Scene_mcf_item.h" #include "Scene_points_with_normal_item.h" @@ -41,7 +37,6 @@ namespace PMP = CGAL::Polygon_mesh_processing; -#ifdef USE_SURFACE_MESH typedef Scene_surface_mesh_item Scene_face_graph_item; namespace CGAL { @@ -51,10 +46,6 @@ void set_halfedgeds_items_id (Scene_face_graph_item::Face_graph&) } // namespace CGAL -#else -typedef Scene_polyhedron_item Scene_face_graph_item; -#endif - typedef Scene_face_graph_item::Face_graph Face_graph; typedef boost::graph_traits::vertex_descriptor vertex_descriptor; @@ -116,11 +107,7 @@ public: ui = NULL; actionMCFSkeleton = new QAction(tr( - #ifdef USE_SURFACE_MESH - "Mean Curvature Skeleton (Advanced) for Surface Mesh" - #else - "Mean Curvature Skeleton (Advanced) for Polyhedron" - #endif + "Mean Curvature Skeleton (Advanced)" ), mainWindow); actionMCFSkeleton->setProperty("subMenuName", "Triangulated Surface Mesh Skeletonization"); actionMCFSkeleton->setObjectName("actionMCFSkeleton"); @@ -130,11 +117,7 @@ public: actionConvert_to_medial_skeleton->setObjectName("actionConvert_to_medial_skeleton"); dockWidget = new QDockWidget(tr( - #ifdef USE_SURFACE_MESH - "Mean Curvature Skeleton for Surface Mesh" - #else - "Mean Curvature Skeleton for Polyhedron" - #endif + "Mean Curvature Skeleton" ),mw); dockWidget->setVisible(false); ui = new Ui::Mean_curvature_flow_skeleton_plugin(); @@ -143,11 +126,7 @@ public: | QDockWidget::DockWidgetFloatable | QDockWidget::DockWidgetClosable); dockWidget->setWindowTitle(tr( - #ifdef USE_SURFACE_MESH - "Mean Curvature Skeleton for Surface Mesh" - #else - "Mean Curvature Skeleton for Polyhedron" - #endif + "Mean Curvature Skeleton" )); addDockWidget(dockWidget); diff --git a/Polyhedron/demo/Polyhedron/Plugins/PMP/Orient_soup_plugin.cpp b/Polyhedron/demo/Polyhedron/Plugins/PMP/Orient_soup_plugin.cpp index 1d3a0a8bf5a..2be1e652180 100644 --- a/Polyhedron/demo/Polyhedron/Plugins/PMP/Orient_soup_plugin.cpp +++ b/Polyhedron/demo/Polyhedron/Plugins/PMP/Orient_soup_plugin.cpp @@ -7,7 +7,6 @@ #include #include "Scene_polygon_soup_item.h" -#include "Scene_polyhedron_item.h" #include "Scene_polylines_item.h" #include "Scene_surface_mesh_item.h" #include "Scene_points_with_normal_item.h" @@ -34,9 +33,8 @@ public: if(qobject_cast(scene->item(index))) return true; else - if (action==actionShuffle && - (qobject_cast(scene->item(index)) - ||qobject_cast(scene->item(index))) + if (action==actionShuffle && + qobject_cast(scene->item(index)) ) return true; } @@ -77,11 +75,6 @@ void Polyhedron_demo_orient_soup_plugin::init(QMainWindow* mainWindow, scene = scene_interface; mw = mainWindow; messages = m; - actionOrientPoly = new QAction(tr("&Orient Polygon Soup (as a polyhedron)"), mainWindow); - actionOrientPoly->setObjectName("actionOrientPoly"); - actionOrientPoly->setProperty("subMenuName", "Polygon Mesh Processing"); - connect(actionOrientPoly, SIGNAL(triggered()), - this, SLOT(orientPoly())); actionOrientSM = new QAction(tr("&Orient Polygon Soup (as a surface_mesh)"), mainWindow); actionOrientSM->setObjectName("actionOrientSM"); actionOrientSM->setProperty("subMenuName", "Polygon Mesh Processing"); @@ -106,7 +99,6 @@ void Polyhedron_demo_orient_soup_plugin::init(QMainWindow* mainWindow, QList Polyhedron_demo_orient_soup_plugin::actions() const { return QList() - << actionOrientPoly << actionOrientSM << actionShuffle << actionNMToPolyline @@ -141,51 +133,6 @@ void set_fcolors(SMesh* smesh, std::vector colors) fcolors[fd] = colors[color_id++]; } -void Polyhedron_demo_orient_soup_plugin::orientPoly() -{ - Q_FOREACH(CGAL::Three::Scene_interface::Item_id index, scene->selectionIndices()) - { - Scene_polygon_soup_item* item = - qobject_cast(scene->item(index)); - - if(item) - { - int create_items = QMessageBox::question(mw, "Orient Mesh", "Do you wish to extract the eventual non manifold simplicies ?"); - if(create_items == QMessageBox::Yes) - { - createPointsAndPolyline(); - } - if(!item->orient()) { - QMessageBox::information(mw, tr("Not orientable without self-intersections"), - tr("The polygon soup \"%1\" is not directly orientable." - " Some vertices have been duplicated and some self-intersections" - " have been created.") - .arg(item->name())); - } - - - Scene_polyhedron_item* poly_item = new Scene_polyhedron_item(); - if(item->exportAsPolyhedron(poly_item->polyhedron())) { - poly_item->setName(item->name()); - poly_item->setColor(item->color()); - poly_item->setRenderingMode(item->renderingMode()); - poly_item->setVisible(item->visible()); - poly_item->invalidateOpenGLBuffers(); - poly_item->setProperty("source filename", item->property("source filename")); - poly_item->setProperty("loader_name", item->property("loader_name")); - scene->replaceItem(index, poly_item); - item->deleteLater(); - } else { - item->invalidateOpenGLBuffers(); - scene->itemChanged(item); - } - } - else{ - messages->warning(tr("This function is only applicable on polygon soups.")); - } - } -} - void Polyhedron_demo_orient_soup_plugin::orientSM() { Q_FOREACH(CGAL::Three::Scene_interface::Item_id index, scene->selectionIndices()) @@ -247,13 +194,6 @@ void Polyhedron_demo_orient_soup_plugin::shuffle() QApplication::restoreOverrideCursor(); continue; } - - Scene_polyhedron_item* poly_item = - qobject_cast(scene->item(index)); - if(poly_item) { - apply_shuffle(poly_item, index); - continue; - } Scene_surface_mesh_item* sm_item = qobject_cast(scene->item(index)); if(sm_item) { diff --git a/Polyhedron/demo/Polyhedron/Plugins/PMP/Point_inside_polyhedron_plugin.cpp b/Polyhedron/demo/Polyhedron/Plugins/PMP/Point_inside_polyhedron_plugin.cpp index 057db99a16b..806fa1ef9a4 100644 --- a/Polyhedron/demo/Polyhedron/Plugins/PMP/Point_inside_polyhedron_plugin.cpp +++ b/Polyhedron/demo/Polyhedron/Plugins/PMP/Point_inside_polyhedron_plugin.cpp @@ -2,13 +2,11 @@ #include "opengl_tools.h" #include "Messages_interface.h" -#include "Scene_polyhedron_item.h" #include "Scene_surface_mesh_item.h" #include "Scene_points_with_normal_item.h" #include #include -#include "Polyhedron_type.h" #include #include @@ -47,8 +45,7 @@ public: for(CGAL::Three::Scene_interface::Item_id i = 0, end = scene->numberOfEntries(); i < end; ++i) { - if(qobject_cast(scene->item(i)) != NULL - || qobject_cast(scene->item(i)) != NULL) + if( qobject_cast(scene->item(i)) != NULL) return true; } @@ -84,13 +81,6 @@ public: { dock_widget->hide(); } -private: - // for transform iterator - struct Get_ref { - typedef const Polyhedron& result_type; - result_type operator()(const Polyhedron* poly_ptr) const - { return *poly_ptr; } - }; public Q_SLOTS: @@ -111,22 +101,14 @@ public Q_SLOTS: } QApplication::setOverrideCursor(Qt::WaitCursor); // place all selected polyhedron and point items to vectors below - std::vector polys; std::vector smeshs; - typedef CGAL::Side_of_triangle_mesh Point_inside; typedef CGAL::Side_of_triangle_mesh Point_inside_smesh; - std::vector inside_testers;// to put all polyhedra to query object // it does not support copy-construction so let's use pointers std::vectorinside_smesh_testers; std::vector point_sets; Q_FOREACH(CGAL::Three::Scene_interface::Item_id id, scene->selectionIndices()) { - Scene_polyhedron_item* poly_item = qobject_cast(scene->item(id)); - if (poly_item){ - inside_testers.push_back(new Point_inside(*(poly_item->polyhedron()))); - polys.push_back(poly_item->polyhedron()); - } Scene_surface_mesh_item* sm_item = qobject_cast(scene->item(id)); if (sm_item){ inside_smesh_testers.push_back(new Point_inside_smesh(*(sm_item->polyhedron()))); @@ -139,14 +121,14 @@ public Q_SLOTS: // there should be at least one selected polyhedron and point item - if(inside_testers.empty() && inside_smesh_testers.empty()) { print_message("Error: there is no selected polyhedron item(s)."); } + if(inside_smesh_testers.empty()) { print_message("Error: there is no selected polyhedron item(s)."); } if(point_sets.empty()) { if(!generated_points.empty()) point_sets.push_back(generated_points.last()->point_set()); else print_message("Error: there is no selected point set item(s)."); } - if((inside_testers.empty()&& inside_smesh_testers.empty()) || point_sets.empty()) { QApplication::restoreOverrideCursor(); return; } + if((inside_smesh_testers.empty()) || point_sets.empty()) { QApplication::restoreOverrideCursor(); return; } // deselect all points for(std::vector::iterator point_set_it = point_sets.begin(); @@ -157,7 +139,7 @@ public Q_SLOTS: CGAL::Timer timer; timer.start(); print_message( - QString("Constructing with %1 items is done in %2 sec.").arg(inside_testers.size()).arg(timer.time())); + QString("Constructing with %1 items is done in %2 sec.").arg(inside_smesh_testers.size()).arg(timer.time())); timer.reset(); std::size_t nb_query = 0, nb_selected = 0;// for print message @@ -171,20 +153,6 @@ public Q_SLOTS: { bool selected = false; Point_set::iterator point_it = point_set->begin() + pt; - for (std::size_t i = 0; i < inside_testers.size(); ++i) - { - CGAL::Bounded_side res = (*inside_testers[i])(point_set->point(*point_it)); - - if( (inside && res == CGAL::ON_BOUNDED_SIDE) || - (on_boundary && res == CGAL::ON_BOUNDARY) || - (outside && res == CGAL::ON_UNBOUNDED_SIDE) ) - { - point_set->select(point_it); ++nb_selected; - -- pt; // Selection replaces current point with unselected one - selected = true; - break;//loop on i - } - } if(! selected){ // now the same for the smeshs point_it = point_set->begin() + pt; @@ -210,9 +178,6 @@ public Q_SLOTS: print_message(QString("%1 points are selected. All Done!").arg(nb_selected)); // delete testers - for (std::size_t i = 0; i < inside_testers.size(); ++i) - delete inside_testers[i]; - for (std::size_t i = 0; i < inside_smesh_testers.size(); ++i) delete inside_smesh_testers[i]; @@ -245,15 +210,6 @@ public Q_SLOTS: // -- Laurent Rineau, 2014/10/30 Q_FOREACH(CGAL::Three::Scene_interface::Item_id id, scene->selectionIndices()) { - Scene_polyhedron_item* poly_item = qobject_cast(scene->item(id)); - if(poly_item) { - if(!bbox) { - bbox = poly_item->bbox(); - } - else { - *bbox = *bbox + poly_item->bbox(); - } - } Scene_surface_mesh_item* sm_item = qobject_cast(scene->item(id)); if(sm_item) { if(!bbox) { diff --git a/Polyhedron/demo/Polyhedron/Plugins/PMP/Polyhedron_slicer_plugin.cpp b/Polyhedron/demo/Polyhedron/Plugins/PMP/Polyhedron_slicer_plugin.cpp index ec17a5cd5b9..8209f04fe71 100644 --- a/Polyhedron/demo/Polyhedron/Plugins/PMP/Polyhedron_slicer_plugin.cpp +++ b/Polyhedron/demo/Polyhedron/Plugins/PMP/Polyhedron_slicer_plugin.cpp @@ -3,7 +3,7 @@ #include "Messages_interface.h" #include "Scene_plane_item.h" -#include "Scene_polyhedron_item.h" + #include "Scene_surface_mesh_item.h" #include "Scene_polylines_item.h" #include "Scene.h" @@ -15,8 +15,6 @@ #include #include -#include "Polyhedron_type.h" - #include #include #include @@ -39,8 +37,7 @@ class Polyhedron_demo_polyhedron_slicer_plugin : public: bool applicable(QAction*) const { - return qobject_cast(scene->item(scene->mainSelectionIndex())) || - qobject_cast(scene->item(scene->mainSelectionIndex())); + return qobject_cast(scene->item(scene->mainSelectionIndex())); } void print_message(QString message) { messages->information(message);} @@ -219,13 +216,12 @@ bool Polyhedron_demo_polyhedron_slicer_plugin::on_Update_plane_button_clicked() // generate multiple cuts, until any cut does not intersect with bbox void Polyhedron_demo_polyhedron_slicer_plugin::on_Generate_button_clicked() { - Scene_polyhedron_item* item = getSelectedItem(); Scene_surface_mesh_item* sm_item = getSelectedItem(); - if(!item && ! sm_item) { - print_message("Error: There is no selected Scene_polyhedron_item!"); + if(! sm_item) { + print_message("Error: There is no selected Scene_surface_mesh_item!"); return; } - QString item_name = (item)?item->name() : sm_item->name(); + QString item_name = sm_item->name(); if(!on_Update_plane_button_clicked()) { return; } const CGAL::qglviewer::Vec offset = static_cast(CGAL::QGLViewer::QGLViewerPool().first())->offset(); @@ -255,11 +251,10 @@ void Polyhedron_demo_polyhedron_slicer_plugin::on_Generate_button_clicked() } // construct a bbox for selected polyhedron - const CGAL::Three::Scene_interface::Bbox& bbox = (item)?item->bbox(): sm_item->bbox(); + const CGAL::Three::Scene_interface::Bbox& bbox = sm_item->bbox(); CGAL::Bbox_3 cgal_bbox(bbox.xmin(), bbox.ymin(), bbox.zmin(), bbox.xmax(), bbox.ymax(), bbox.zmax()); - Polyhedron* poly = (item)?item->polyhedron():NULL; - SMesh* smesh = (sm_item)?sm_item->polyhedron():NULL; + SMesh* smesh = sm_item->polyhedron(); // continue generating planes while inside bbox std::vector planes; @@ -293,11 +288,7 @@ void Polyhedron_demo_polyhedron_slicer_plugin::on_Generate_button_clicked() Scene_polylines_item* new_polylines_item = new Scene_polylines_item(); QTime time; time.start(); // call algorithm and fill polylines in polylines_item - if(item){ - intersection_of_plane_Polyhedra_3_using_AABB_wrapper(*poly, planes, plane_positions, new_polylines_item->polylines); - }else{ - intersection_of_plane_Polyhedra_3_using_AABB_wrapper(*smesh, planes, plane_positions, new_polylines_item->polylines); - } + intersection_of_plane_Polyhedra_3_using_AABB_wrapper(*smesh, planes, plane_positions, new_polylines_item->polylines); // set names etc and print timing print_message( QString("Done: processed %1 cuts - generated %2 polylines in %3 ms!"). arg(planes.size()).arg(new_polylines_item->polylines.size()).arg(time.elapsed()) ); @@ -312,7 +303,7 @@ void Polyhedron_demo_polyhedron_slicer_plugin::on_Generate_button_clicked() QTime time; time.start(); std::list > polylines; // call algorithm and fill polylines in polylines_item - intersection_of_plane_Polyhedra_3_using_AABB_wrapper(*poly, planes, plane_positions, polylines); + intersection_of_plane_Polyhedra_3_using_AABB_wrapper(*smesh, planes, plane_positions, polylines); // set names etc and print timing print_message( QString("Done: processed %1 cuts - generated %2 polylines in %3 ms!"). arg(planes.size()).arg(polylines.size()).arg(time.elapsed()) ); diff --git a/Polyhedron/demo/Polyhedron/Plugins/PMP/Polyhedron_stitching_plugin.cpp b/Polyhedron/demo/Polyhedron/Plugins/PMP/Polyhedron_stitching_plugin.cpp index 6ee8cf73da5..6be59b73e9e 100644 --- a/Polyhedron/demo/Polyhedron/Plugins/PMP/Polyhedron_stitching_plugin.cpp +++ b/Polyhedron/demo/Polyhedron/Plugins/PMP/Polyhedron_stitching_plugin.cpp @@ -2,8 +2,6 @@ #include #include #include "Kernel_type.h" -#include "Polyhedron_type.h" -#include "Scene_polyhedron_item.h" #include "Scene_surface_mesh_item.h" #include "Scene_polylines_item.h" @@ -69,8 +67,7 @@ public: bool applicable(QAction*) const { Q_FOREACH(int index, scene->selectionIndices()) { - if ( qobject_cast(scene->item(index)) || - qobject_cast(scene->item(index)) ) + if ( qobject_cast(scene->item(index)) ) return true; } return false; @@ -159,7 +156,6 @@ void Polyhedron_demo_polyhedron_stitching_plugin::on_actionDetectBorders_trigger void Polyhedron_demo_polyhedron_stitching_plugin::on_actionDetectBorders_triggered() { Q_FOREACH(int index, scene->selectionIndices()){ - on_actionDetectBorders_triggered(index); on_actionDetectBorders_triggered(index); } } @@ -182,7 +178,6 @@ void Polyhedron_demo_polyhedron_stitching_plugin::on_actionStitchBorders_trigger void Polyhedron_demo_polyhedron_stitching_plugin::on_actionStitchBorders_triggered() { Q_FOREACH(int index, scene->selectionIndices()){ - on_actionStitchBorders_triggered(index); on_actionStitchBorders_triggered(index); } } @@ -205,7 +200,6 @@ void Polyhedron_demo_polyhedron_stitching_plugin::on_actionStitchByCC_triggered( void Polyhedron_demo_polyhedron_stitching_plugin::on_actionStitchByCC_triggered() { Q_FOREACH(int index, scene->selectionIndices()){ - on_actionStitchByCC_triggered(index); on_actionStitchByCC_triggered(index); } } diff --git a/Polyhedron/demo/Polyhedron/Plugins/PMP/Scene_facegraph_item_k_ring_selection.h b/Polyhedron/demo/Polyhedron/Plugins/PMP/Scene_facegraph_item_k_ring_selection.h index 72b65c0f3bb..142c68b4005 100644 --- a/Polyhedron/demo/Polyhedron/Plugins/PMP/Scene_facegraph_item_k_ring_selection.h +++ b/Polyhedron/demo/Polyhedron/Plugins/PMP/Scene_facegraph_item_k_ring_selection.h @@ -1,13 +1,8 @@ #ifndef SCENE_FACEGRAPH_ITEM_K_RING_SELECTION_H #define SCENE_FACEGRAPH_ITEM_K_RING_SELECTION_H #include "Scene_facegraph_item_k_ring_selection_config.h" -#ifdef USE_SURFACE_MESH #include "Scene_surface_mesh_item.h" #include -#else -#include "Scene_polyhedron_item.h" -#include "Polyhedron_type.h" -#endif #include #include #include @@ -26,13 +21,8 @@ #include -#ifdef USE_SURFACE_MESH typedef Scene_surface_mesh_item Scene_facegraph_item; typedef EPICK FG_Traits; -#else -typedef Scene_polyhedron_item Scene_facegraph_item; -typedef Kernel FG_Traits; -#endif typedef Scene_facegraph_item::Face_graph FaceGraph; typedef boost::graph_traits::vertex_descriptor fg_vertex_descriptor; @@ -126,10 +116,6 @@ public: is_ready_to_paint_select = true; is_lasso_active = false; -#ifndef USE_SURFACE_MESH - poly_item->enable_facets_picking(true); - poly_item->set_color_vector_read_only(true); -#endif CGAL::QGLViewer* viewer = *CGAL::QGLViewer::QGLViewerPool().begin(); viewer->installEventFilter(this); mw->installEventFilter(this); @@ -151,13 +137,9 @@ public Q_SLOTS: is_active=true; if(active_handle_type == Active_handle::VERTEX || active_handle_type == Active_handle::PATH) { -#ifdef USE_SURFACE_MESH typedef boost::graph_traits::vertices_size_type size_type; size_type h = static_cast(reinterpret_cast(void_ptr)); process_selection( static_cast(h) ); -#else - process_selection( static_cast(void_ptr)->halfedge()->vertex() ); -#endif } updateIsTreated(); } @@ -167,13 +149,9 @@ public Q_SLOTS: if (active_handle_type == Active_handle::FACET || active_handle_type == Active_handle::CONNECTED_COMPONENT) { -#ifdef USE_SURFACE_MESH typedef boost::graph_traits::faces_size_type size_type; size_type h = static_cast(reinterpret_cast(void_ptr)); process_selection( static_cast(h) ); -#else - process_selection( static_cast(void_ptr)->halfedge()->facet() ); -#endif } updateIsTreated(); } @@ -182,17 +160,13 @@ public Q_SLOTS: is_active=true; if(active_handle_type == Active_handle::EDGE) { -#ifdef USE_SURFACE_MESH typedef boost::graph_traits::edges_size_type size_type; size_type h = static_cast(reinterpret_cast(void_ptr)); process_selection( static_cast(h) ); -#else - process_selection( edge(static_cast(void_ptr)->opposite()->opposite(), *poly_item->polyhedron()) ); -#endif } updateIsTreated(); } - + void paint_selection() { if(is_ready_to_paint_select) diff --git a/Polyhedron/demo/Polyhedron/Plugins/Point_set/CMakeLists.txt b/Polyhedron/demo/Polyhedron/Plugins/Point_set/CMakeLists.txt index 3725e4b61f8..2c3571b54c1 100644 --- a/Polyhedron/demo/Polyhedron/Plugins/Point_set/CMakeLists.txt +++ b/Polyhedron/demo/Polyhedron/Plugins/Point_set/CMakeLists.txt @@ -2,7 +2,7 @@ include( polyhedron_demo_macros ) if(EIGEN3_FOUND) qt5_wrap_ui( surface_reconstructionUI_FILES Surface_reconstruction_plugin.ui) polyhedron_demo_plugin(surface_reconstruction_plugin Surface_reconstruction_plugin Surface_reconstruction_plugin_impl ${surface_reconstructionUI_FILES}) - target_link_libraries(surface_reconstruction_plugin PUBLIC scene_polygon_soup_item scene_polyhedron_item scene_surface_mesh_item scene_points_with_normal_item) + target_link_libraries(surface_reconstruction_plugin PUBLIC scene_polygon_soup_item scene_surface_mesh_item scene_points_with_normal_item) qt5_wrap_ui( point_set_normal_estimationUI_FILES Point_set_normal_estimation_plugin.ui) polyhedron_demo_plugin(point_set_normal_estimation_plugin Point_set_normal_estimation_plugin ${point_set_normal_estimationUI_FILES}) @@ -41,7 +41,7 @@ endif() qt5_wrap_ui(point_set_shape_detectionUI_FILES Point_set_shape_detection_plugin.ui) polyhedron_demo_plugin(point_set_shape_detection_plugin Point_set_shape_detection_plugin ${point_set_shape_detectionUI_FILES}) - target_link_libraries(point_set_shape_detection_plugin PUBLIC scene_surface_mesh_item scene_polyhedron_item scene_points_with_normal_item scene_polygon_soup_item scene_callback_signaler) + target_link_libraries(point_set_shape_detection_plugin PUBLIC scene_surface_mesh_item scene_points_with_normal_item scene_polygon_soup_item scene_callback_signaler) qt5_wrap_ui(point_set_simplificationUI_FILES Point_set_simplification_plugin.ui) polyhedron_demo_plugin(point_set_simplification_plugin Point_set_simplification_plugin ${point_set_simplificationUI_FILES}) @@ -67,7 +67,7 @@ endif() qt5_wrap_ui( distanceUI_FILES Point_set_to_mesh_distance_widget.ui ) polyhedron_demo_plugin(point_set_to_mesh_distance_plugin Point_set_to_mesh_distance_plugin ${distanceUI_FILES}) - target_link_libraries(point_set_to_mesh_distance_plugin PUBLIC scene_points_with_normal_item scene_surface_mesh_item scene_polyhedron_item scene_color_ramp) + target_link_libraries(point_set_to_mesh_distance_plugin PUBLIC scene_points_with_normal_item scene_surface_mesh_item scene_color_ramp) if(TBB_FOUND) foreach(plugin diff --git a/Polyhedron/demo/Polyhedron/Plugins/Subdivision_methods/CMakeLists.txt b/Polyhedron/demo/Polyhedron/Plugins/Subdivision_methods/CMakeLists.txt index bc42a9f5411..2c780cd68b3 100644 --- a/Polyhedron/demo/Polyhedron/Plugins/Subdivision_methods/CMakeLists.txt +++ b/Polyhedron/demo/Polyhedron/Plugins/Subdivision_methods/CMakeLists.txt @@ -2,4 +2,4 @@ include( polyhedron_demo_macros ) polyhedron_demo_plugin(subdivision_methods_plugin Subdivision_methods_plugin) -target_link_libraries(subdivision_methods_plugin PUBLIC scene_polyhedron_item scene_surface_mesh_item) +target_link_libraries(subdivision_methods_plugin PUBLIC scene_surface_mesh_item) diff --git a/Polyhedron/demo/Polyhedron/Plugins/Surface_mesh/CMakeLists.txt b/Polyhedron/demo/Polyhedron/Plugins/Surface_mesh/CMakeLists.txt index d312df34f05..c4acbb2f89f 100644 --- a/Polyhedron/demo/Polyhedron/Plugins/Surface_mesh/CMakeLists.txt +++ b/Polyhedron/demo/Polyhedron/Plugins/Surface_mesh/CMakeLists.txt @@ -7,18 +7,14 @@ if(EIGEN3_FOUND) qt5_wrap_ui(parameterizationUI_FILES Parameterization_widget.ui ARAP_dialog.ui OTE_dialog.ui) polyhedron_demo_plugin(parameterization_plugin Parameterization_plugin ${parameterizationUI_FILES}) - target_link_libraries(parameterization_plugin PUBLIC scene_polyhedron_item scene_textured_polyhedron_item scene_polyhedron_selection_item) - - polyhedron_demo_plugin(parameterization_sm_plugin Parameterization_plugin ${parameterizationUI_FILES}) - target_link_libraries(parameterization_sm_plugin PUBLIC scene_surface_mesh_item scene_textured_surface_mesh_item scene_surface_mesh_selection_item) - target_compile_definitions(parameterization_sm_plugin PUBLIC "-DUSE_SURFACE_MESH" ) + target_link_libraries(parameterization_plugin PUBLIC scene_surface_mesh_item scene_textured_item scene_selection_item) else(EIGEN3_FOUND) message(STATUS "NOTICE: Eigen 3.1 (or greater) was not found. The Parameterization plugin will not be available.") endif(EIGEN3_FOUND) qt5_wrap_ui( segmentationUI_FILES Mesh_segmentation_widget.ui) polyhedron_demo_plugin(mesh_segmentation_plugin Mesh_segmentation_plugin ${segmentationUI_FILES}) -target_link_libraries(mesh_segmentation_plugin PUBLIC scene_polyhedron_item scene_surface_mesh_item) +target_link_libraries(mesh_segmentation_plugin PUBLIC scene_surface_mesh_item) qt5_wrap_ui( mesh_plane_detectionUI_FILES Mesh_plane_detection_dialog.ui) polyhedron_demo_plugin(mesh_plane_detection_plugin Mesh_plane_detection_plugin ${mesh_plane_detectionUI_FILES}) @@ -26,20 +22,12 @@ target_link_libraries(mesh_plane_detection_plugin PUBLIC scene_surface_mesh_item qt5_wrap_ui( mesh_simplificationUI_FILES Mesh_simplification_dialog.ui) polyhedron_demo_plugin(mesh_simplification_plugin Mesh_simplification_plugin ${mesh_simplificationUI_FILES}) -target_link_libraries(mesh_simplification_plugin PUBLIC scene_polyhedron_item scene_polyhedron_selection_item) +target_link_libraries(mesh_simplification_plugin PUBLIC scene_surface_mesh_item scene_selection_item) -polyhedron_demo_plugin(mesh_simplification_sm_plugin Mesh_simplification_plugin ${mesh_simplificationUI_FILES}) -target_link_libraries(mesh_simplification_sm_plugin PUBLIC scene_surface_mesh_item scene_surface_mesh_selection_item) -target_compile_definitions(mesh_simplification_sm_plugin PUBLIC "-DUSE_SURFACE_MESH" ) - -qt5_wrap_ui( remeshingUI_FILES Remeshing_dialog.ui) -polyhedron_demo_plugin(offset_meshing_plugin Offset_meshing_plugin ${remeshingUI_FILES}) -target_link_libraries(offset_meshing_plugin PUBLIC scene_polyhedron_item scene_polygon_soup_item ) +#qt5_wrap_ui( remeshingUI_FILES Remeshing_dialog.ui) +#polyhedron_demo_plugin(offset_meshing_plugin Offset_meshing_plugin ${remeshingUI_FILES}) +#target_link_libraries(offset_meshing_plugin PUBLIC scene_polyhedron_item scene_polygon_soup_item ) qt5_wrap_ui( shortestPathUI_FILES Shortest_path_widget.ui ) polyhedron_demo_plugin(shortest_path_plugin Shortest_path_plugin ${shortestPathUI_FILES}) -target_link_libraries(shortest_path_plugin PUBLIC scene_polyhedron_item scene_polyhedron_shortest_path_item scene_basic_objects) - -polyhedron_demo_plugin(shortest_path_sm_plugin Shortest_path_plugin ${shortestPathUI_FILES}) -target_link_libraries(shortest_path_sm_plugin PUBLIC scene_surface_mesh_item scene_sm_shortest_path_item scene_basic_objects) -target_compile_definitions(shortest_path_sm_plugin PUBLIC "-DUSE_SURFACE_MESH" ) +target_link_libraries(shortest_path_plugin PUBLIC scene_surface_mesh_item scene_shortest_path_item scene_basic_objects) diff --git a/Polyhedron/demo/Polyhedron/Plugins/Surface_mesh_deformation/CMakeLists.txt b/Polyhedron/demo/Polyhedron/Plugins/Surface_mesh_deformation/CMakeLists.txt index cb951c59918..c248bf69d7f 100644 --- a/Polyhedron/demo/Polyhedron/Plugins/Surface_mesh_deformation/CMakeLists.txt +++ b/Polyhedron/demo/Polyhedron/Plugins/Surface_mesh_deformation/CMakeLists.txt @@ -1,10 +1,8 @@ include( polyhedron_demo_macros ) if ( EIGEN3_FOUND AND "${EIGEN3_VERSION}" VERSION_GREATER "3.1.90" ) - polyhedron_demo_plugin(edit_polyhedron_plugin Edit_polyhedron_plugin Deform_mesh.ui) - target_link_libraries(edit_polyhedron_plugin PUBLIC scene_polyhedron_item scene_edit_polyhedron_item scene_polyhedron_selection_item) - polyhedron_demo_plugin(edit_sm_plugin Edit_polyhedron_plugin Deform_mesh.ui) - target_link_libraries(edit_sm_plugin PUBLIC scene_surface_mesh_item scene_edit_polyhedron_item scene_surface_mesh_selection_item) - target_compile_definitions(edit_sm_plugin PUBLIC "-DUSE_SURFACE_MESH" ) + + polyhedron_demo_plugin(edit_plugin Edit_polyhedron_plugin Deform_mesh.ui) + target_link_libraries(edit_plugin PUBLIC scene_surface_mesh_item scene_edit_item scene_selection_item) else() message(STATUS "NOTICE: The polyhedron edit plugin require Eigen 3.2 (or higher) and will not be available.") endif() diff --git a/Polyhedron/demo/Polyhedron/Scene_nef_polyhedron_item.cpp b/Polyhedron/demo/Polyhedron/Scene_nef_polyhedron_item.cpp index d903e021a2d..938ef2991c9 100644 --- a/Polyhedron/demo/Polyhedron/Scene_nef_polyhedron_item.cpp +++ b/Polyhedron/demo/Polyhedron/Scene_nef_polyhedron_item.cpp @@ -602,68 +602,9 @@ Scene_nef_polyhedron_item::compute_bbox() const { bbox.xmax(),bbox.ymax(),bbox.zmax()); } -// quick hacks to convert polyhedra from exact to inexact and vice-versa -template -struct Copy_polyhedron_to - : public CGAL::Modifier_base -{ - Copy_polyhedron_to(const Polyhedron_input& in_poly) - : in_poly(in_poly) {} - - void operator()(typename Polyhedron_output::HalfedgeDS& out_hds) - { - typedef typename Polyhedron_output::HalfedgeDS Output_HDS; - - CGAL::Polyhedron_incremental_builder_3 builder(out_hds); - - typedef typename Polyhedron_input::Vertex_const_iterator Vertex_const_iterator; - typedef typename Polyhedron_input::Facet_const_iterator Facet_const_iterator; - typedef typename Polyhedron_input::Halfedge_around_facet_const_circulator HFCC; - - builder.begin_surface(in_poly.size_of_vertices(), - in_poly.size_of_facets(), - in_poly.size_of_halfedges()); - - for(Vertex_const_iterator - vi = in_poly.vertices_begin(), end = in_poly.vertices_end(); - vi != end ; ++vi) - { - typename Polyhedron_output::Point_3 p(::CGAL::to_double( vi->point().x()), - ::CGAL::to_double( vi->point().y()), - ::CGAL::to_double( vi->point().z())); - builder.add_vertex(p); - } - - typedef CGAL::Inverse_index Index; - Index index( in_poly.vertices_begin(), in_poly.vertices_end()); - - for(Facet_const_iterator - fi = in_poly.facets_begin(), end = in_poly.facets_end(); - fi != end; ++fi) - { - HFCC hc = fi->facet_begin(); - HFCC hc_end = hc; - // std::size_t n = circulator_size( hc); - // CGAL_assertion( n >= 3); - builder.begin_facet (); - do { - builder.add_vertex_to_facet(index[hc->vertex()]); - ++hc; - } while( hc != hc_end); - builder.end_facet(); - } - builder.end_surface(); - } // end operator()(..) -private: - const Polyhedron_input& in_poly; -}; // end Copy_polyhedron_to<> - template void copy_to(const Poly_A& poly_a, Poly_B& poly_b) { - //Copy_polyhedron_to modifier(poly_a); - //poly_b.delegate(modifier); CGAL::copy_face_graph(poly_a, poly_b); } diff --git a/Polyhedron/demo/Polyhedron/Scene_polyhedron_item_decorator.h b/Polyhedron/demo/Polyhedron/Scene_polyhedron_item_decorator.h index d198fb00b6f..3e87bbb1b22 100644 --- a/Polyhedron/demo/Polyhedron/Scene_polyhedron_item_decorator.h +++ b/Polyhedron/demo/Polyhedron/Scene_polyhedron_item_decorator.h @@ -2,13 +2,8 @@ #define SCENE_POLYHEDRON_ITEM_DECORATOR_H #include "Scene_polyhedron_item_decorator_config.h" -#ifdef USE_SURFACE_MESH #include "Scene_surface_mesh_item.h" typedef Scene_surface_mesh_item Scene_face_graph_item; -#else -#include "Scene_polyhedron_item.h" -typedef Scene_polyhedron_item Scene_face_graph_item; -#endif typedef Scene_face_graph_item::Face_graph Face_graph; diff --git a/Polyhedron/demo/Polyhedron/Scene_polyhedron_selection_item.cpp b/Polyhedron/demo/Polyhedron/Scene_polyhedron_selection_item.cpp index 6df22ab25e7..5c2667b8895 100644 --- a/Polyhedron/demo/Polyhedron/Scene_polyhedron_selection_item.cpp +++ b/Polyhedron/demo/Polyhedron/Scene_polyhedron_selection_item.cpp @@ -21,11 +21,7 @@ #include "triangulate_primitive.h" -#ifdef USE_SURFACE_MESH typedef Scene_surface_mesh_item Scene_face_graph_item; -#else -typedef Scene_polyhedron_item Scene_face_graph_item; -#endif typedef Scene_face_graph_item::Face_graph Face_graph; typedef boost::property_map::type VPmap; diff --git a/Polyhedron/demo/Polyhedron/Scene_polyhedron_selection_item.h b/Polyhedron/demo/Polyhedron/Scene_polyhedron_selection_item.h index 0499955c4e8..929e9a2ed13 100644 --- a/Polyhedron/demo/Polyhedron/Scene_polyhedron_selection_item.h +++ b/Polyhedron/demo/Polyhedron/Scene_polyhedron_selection_item.h @@ -5,11 +5,7 @@ #include "Plugins/PMP/Scene_facegraph_item_k_ring_selection.h" #include "Travel_isolated_components.h" -#ifdef USE_SURFACE_MESH #include "Scene_surface_mesh_item.h" -#else -#include "Polyhedron_type.h" -#endif #include "Scene_polyhedron_item_decorator.h" #include #include @@ -37,11 +33,7 @@ namespace PMP = CGAL::Polygon_mesh_processing; -#ifdef USE_SURFACE_MESH typedef Scene_surface_mesh_item Scene_face_graph_item; -#else -typedef Scene_polyhedron_item Scene_face_graph_item; -#endif typedef Scene_face_graph_item::Face_graph Face_graph; typedef boost::property_map::type VPmap; diff --git a/Polyhedron/demo/Polyhedron/Scene_surface_mesh_item.cpp b/Polyhedron/demo/Polyhedron/Scene_surface_mesh_item.cpp index 402fa86771b..ecb2f5f8f20 100644 --- a/Polyhedron/demo/Polyhedron/Scene_surface_mesh_item.cpp +++ b/Polyhedron/demo/Polyhedron/Scene_surface_mesh_item.cpp @@ -252,6 +252,7 @@ Scene_surface_mesh_item::Scene_surface_mesh_item() d->textFItems = new TextListItem(this); are_buffers_filled = false; + invalidate(ALL); } Scene_surface_mesh_item::Scene_surface_mesh_item(const Scene_surface_mesh_item& other) @@ -279,6 +280,7 @@ void Scene_surface_mesh_item::standard_constructor(SMesh* sm) d->textFItems = new TextListItem(this); are_buffers_filled = false; + invalidate(ALL); } Scene_surface_mesh_item::Scene_surface_mesh_item(SMesh* sm) { diff --git a/Polyhedron/demo/Polyhedron/include/CGAL/Dualizer.h b/Polyhedron/demo/Polyhedron/include/CGAL/Dualizer.h index 5b1eb889b01..d9814cc84eb 100644 --- a/Polyhedron/demo/Polyhedron/include/CGAL/Dualizer.h +++ b/Polyhedron/demo/Polyhedron/include/CGAL/Dualizer.h @@ -2,7 +2,7 @@ #define _DUALIZER_ #include - +#include template struct Facet_cmp { From 12187c1c1b62a77974d11d7914b2acfb619de0b9 Mon Sep 17 00:00:00 2001 From: Maxime Gimeno Date: Wed, 11 Jul 2018 16:06:29 +0200 Subject: [PATCH 008/268] Fix display of butterfly faces in sm_item --- .../Polyhedron/Scene_surface_mesh_item.cpp | 26 ++++++++++++++++++- .../demo/Polyhedron/triangulate_primitive.h | 3 ++- 2 files changed, 27 insertions(+), 2 deletions(-) diff --git a/Polyhedron/demo/Polyhedron/Scene_surface_mesh_item.cpp b/Polyhedron/demo/Polyhedron/Scene_surface_mesh_item.cpp index ecb2f5f8f20..603a8d9538b 100644 --- a/Polyhedron/demo/Polyhedron/Scene_surface_mesh_item.cpp +++ b/Polyhedron/demo/Polyhedron/Scene_surface_mesh_item.cpp @@ -880,9 +880,33 @@ Scene_surface_mesh_item_priv::triangulate_facet(face_descriptor fd, Scene_item_rendering_helper::Gl_data_names name, bool index) const { + //Computes the normal of the facet EPICK::Vector_3 normal = get(*fnormals, fd); - + if(normal == CGAL::NULL_VECTOR) + { + boost::graph_traits::halfedge_descriptor start = prev(halfedge(fd, *smesh_), *smesh_); + boost::graph_traits::halfedge_descriptor next_; + do + { + boost::graph_traits::halfedge_descriptor hd = halfedge(fd, *smesh_); + next_ =next(hd, *smesh_); + const Point_3& pa = smesh_->point(target(hd, *smesh_)); + const Point_3& pb = smesh_->point(target(next_, *smesh_)); + const Point_3& pc = smesh_->point(target(prev(hd, *smesh_), *smesh_)); + if (!CGAL::collinear (pa, pb, pc)) + { + normal = CGAL::cross_product(pb-pa, pc -pa); + break; + } + }while(next_ != start); + + if (normal == CGAL::NULL_VECTOR) // No normal could be computed, return + { + qDebug()<<"Warning : normal is not valid. Facet not displayed"; + return; + } + } //check if normal contains NaN values if (normal.x() != normal.x() || normal.y() != normal.y() || normal.z() != normal.z()) { diff --git a/Polyhedron/demo/Polyhedron/triangulate_primitive.h b/Polyhedron/demo/Polyhedron/triangulate_primitive.h index 0d5e2c915eb..3aef6f90499 100644 --- a/Polyhedron/demo/Polyhedron/triangulate_primitive.h +++ b/Polyhedron/demo/Polyhedron/triangulate_primitive.h @@ -127,7 +127,8 @@ private: BOOST_FOREACH(PointAndId idPoint, idPoints) { - x += idPoint.point.x(); + + x += idPoint.point.x(); y += idPoint.point.y(); z += idPoint.point.z(); typename CDT::Vertex_handle vh; From 5f7293f85989b6268718cdc4df127af0d2a4a64c Mon Sep 17 00:00:00 2001 From: Maxime Gimeno Date: Thu, 12 Jul 2018 10:07:49 +0200 Subject: [PATCH 009/268] Finish removing polyhedorn --- Polyhedron/demo/Polyhedron/C2t3_type.h | 1 - Polyhedron/demo/Polyhedron/C3t3_type.h | 11 +- Polyhedron/demo/Polyhedron/MainWindow.h | 2 - .../demo/Polyhedron/One_ring_iterators.h | 2 +- .../Classification/Cluster_classification.h | 1 - .../Point_set_item_classification.h | 1 - .../Convex_hull/Convex_hull_plugin.cpp | 6 - .../Polyhedron/Plugins/IO/Surf_io_plugin.cpp | 1 - .../Plugins/Mesh_3/C3t3_io_plugin.cpp | 6 +- .../Mesh_3/C3t3_rib_exporter_plugin.cpp | 6 +- .../Mesh_3/Mesh_3_plugin_cgal_code.cpp | 41 - .../Plugins/Mesh_3/Mesh_3_plugin_cgal_code.h | 18 - .../Polyhedron/Plugins/Mesh_3/Mesh_function.h | 4 +- .../Mesh_3/Optimization_plugin_cgal_code.cpp | 4 +- .../Plugins/PCA/Create_bbox_mesh_plugin.cpp | 3 +- .../Plugins/PCA/Edit_box_plugin.cpp | 2 +- .../PCA/Scene_facegraph_transform_item.cpp | 1 - .../Plugins/PMP/Degenerated_faces_plugin.cpp | 1 - .../PMP/Isotropic_remeshing_plugin.cpp | 6 +- .../Plugins/PMP/Jet_fitting_plugin.cpp | 8 +- .../PMP/Random_perturbation_plugin.cpp | 1 - .../Plugins/PMP/Repair_polyhedron_plugin.cpp | 12 +- .../Scene_facegraph_item_k_ring_selection.cpp | 2 +- .../Polyhedron/Plugins/PMP/Scene_mcf_item.h | 6 - .../Plugins/PMP/Selection_plugin.cpp | 27 +- .../Plugins/PMP/Self_intersection_plugin.cpp | 5 - .../PMP/Surface_intersection_plugin.cpp | 11 - .../Plugins/PMP/Triangulate_facets_plugin.cpp | 38 +- .../Point_set_shape_detection_plugin.cpp | 24 +- .../Point_set_to_mesh_distance_plugin.cpp | 16 +- .../Surface_reconstruction_plugin.cpp | 41 +- .../Surface_reconstruction_plugin_impl.cpp | 21 - .../Subdivision_methods_plugin.cpp | 150 +- .../Plugins/Surface_mesh/CMakeLists.txt | 6 +- .../Mesh_plane_detection_plugin.cpp | 15 +- .../Surface_mesh/Mesh_segmentation_plugin.cpp | 50 +- .../Mesh_simplification_plugin.cpp | 20 +- .../Surface_mesh/Offset_meshing_plugin.cpp | 49 +- .../Surface_mesh/Parameterization_plugin.cpp | 165 +- .../Scene_polyhedron_shortest_path_item.h | 1 - .../Surface_mesh/Shortest_path_plugin.cpp | 55 +- .../Edit_polyhedron_plugin.cpp | 42 +- .../Scene_edit_polyhedron_item.cpp | 777 +----- .../Scene_edit_polyhedron_item.h | 70 +- Polyhedron/demo/Polyhedron/Polyhedron_type.h | 243 -- .../demo/Polyhedron/Polyhedron_type_fwd.h | 64 - .../demo/Polyhedron/Scene_c3t3_item.cpp | 8 +- .../Scene_points_with_normal_item.cpp | 31 - .../Scene_points_with_normal_item.h | 2 - .../Polyhedron/Scene_polygon_soup_item.cpp | 89 +- .../demo/Polyhedron/Scene_polygon_soup_item.h | 8 +- .../demo/Polyhedron/Scene_polyhedron_item.cpp | 2288 ----------------- .../demo/Polyhedron/Scene_polyhedron_item.h | 198 -- .../Polyhedron/Scene_polyhedron_item_config.h | 10 - .../Scene_polyhedron_item_decorator.h | 2 +- ...Scene_polyhedron_item_k_ring_selection.cpp | 1 - .../Scene_polyhedron_item_k_ring_selection.h | 753 ------ ..._polyhedron_item_k_ring_selection_config.h | 10 - .../Scene_polyhedron_selection_item.cpp | 24 +- .../Scene_polyhedron_selection_item.h | 21 +- .../demo/Polyhedron/Scene_surface_mesh_item.h | 4 - .../Scene_textured_polyhedron_item.cpp | 469 ---- .../Scene_textured_polyhedron_item.h | 60 - .../Scene_textured_polyhedron_item_config.h | 10 - .../Polyhedron/Textured_polyhedron_type.h | 11 - .../Polyhedron/Textured_polyhedron_type_fwd.h | 12 - Polyhedron/demo/Polyhedron/Viewer.cpp | 2 +- Property_map/include/CGAL/property_map.h | 1 + 68 files changed, 291 insertions(+), 5759 deletions(-) delete mode 100644 Polyhedron/demo/Polyhedron/Polyhedron_type.h delete mode 100644 Polyhedron/demo/Polyhedron/Polyhedron_type_fwd.h delete mode 100644 Polyhedron/demo/Polyhedron/Scene_polyhedron_item.cpp delete mode 100644 Polyhedron/demo/Polyhedron/Scene_polyhedron_item.h delete mode 100644 Polyhedron/demo/Polyhedron/Scene_polyhedron_item_config.h delete mode 100644 Polyhedron/demo/Polyhedron/Scene_polyhedron_item_k_ring_selection.cpp delete mode 100644 Polyhedron/demo/Polyhedron/Scene_polyhedron_item_k_ring_selection.h delete mode 100644 Polyhedron/demo/Polyhedron/Scene_polyhedron_item_k_ring_selection_config.h delete mode 100644 Polyhedron/demo/Polyhedron/Scene_textured_polyhedron_item.cpp delete mode 100644 Polyhedron/demo/Polyhedron/Scene_textured_polyhedron_item.h delete mode 100644 Polyhedron/demo/Polyhedron/Scene_textured_polyhedron_item_config.h delete mode 100644 Polyhedron/demo/Polyhedron/Textured_polyhedron_type.h delete mode 100644 Polyhedron/demo/Polyhedron/Textured_polyhedron_type_fwd.h diff --git a/Polyhedron/demo/Polyhedron/C2t3_type.h b/Polyhedron/demo/Polyhedron/C2t3_type.h index d0fc441d49c..40025b29274 100644 --- a/Polyhedron/demo/Polyhedron/C2t3_type.h +++ b/Polyhedron/demo/Polyhedron/C2t3_type.h @@ -1,7 +1,6 @@ #ifndef C2T3_TYPE_H #define C2T3_TYPE_H -#include "Polyhedron_type.h" #include #include diff --git a/Polyhedron/demo/Polyhedron/C3t3_type.h b/Polyhedron/demo/Polyhedron/C3t3_type.h index d059f437a35..db47e612a0f 100644 --- a/Polyhedron/demo/Polyhedron/C3t3_type.h +++ b/Polyhedron/demo/Polyhedron/C3t3_type.h @@ -6,7 +6,6 @@ #include #include -#include "Polyhedron_type.h" #include "SMesh_type.h" #ifdef CGAL_MESH_3_DEMO_ACTIVATE_SEGMENTED_IMAGES #include "Image_type.h" @@ -47,18 +46,16 @@ private: #endif typedef CGAL::Polyhedral_mesh_domain_with_features_3< - Kernel, Polyhedron, CGAL::Default, CGAL::Tag_true> Polyhedral_mesh_domain; -typedef CGAL::Polyhedral_mesh_domain_with_features_3< - Kernel, SMesh, CGAL::Default, int> Polyhedral_mesh_domain_sm; + EPICK, SMesh, CGAL::Default, int> Polyhedral_mesh_domain; // The last `Tag_true` says the Patch_id type will be int, and not pair #ifdef CGAL_MESH_3_DEMO_ACTIVATE_SEGMENTED_IMAGES -typedef CGAL::Labeled_mesh_domain_3 Image_domain; +typedef CGAL::Labeled_mesh_domain_3 Image_domain; typedef CGAL::Mesh_domain_with_polyline_features_3 Image_mesh_domain; #endif #ifdef CGAL_MESH_3_DEMO_ACTIVATE_IMPLICIT_FUNCTIONS -typedef Wrapper Function_wrapper; -typedef CGAL::Labeled_mesh_domain_3 Function_mesh_domain; +typedef Wrapper Function_wrapper; +typedef CGAL::Labeled_mesh_domain_3 Function_mesh_domain; #endif //Robust_cc_geom_traits diff --git a/Polyhedron/demo/Polyhedron/MainWindow.h b/Polyhedron/demo/Polyhedron/MainWindow.h index fd7784d0699..9560896aa83 100644 --- a/Polyhedron/demo/Polyhedron/MainWindow.h +++ b/Polyhedron/demo/Polyhedron/MainWindow.h @@ -36,8 +36,6 @@ namespace Ui { class Statistics_on_item_dialog; } -#include "Polyhedron_type_fwd.h" - #include "Messages_interface.h" /*! diff --git a/Polyhedron/demo/Polyhedron/One_ring_iterators.h b/Polyhedron/demo/Polyhedron/One_ring_iterators.h index 680c2fdf9e3..fbbfe7a23d5 100644 --- a/Polyhedron/demo/Polyhedron/One_ring_iterators.h +++ b/Polyhedron/demo/Polyhedron/One_ring_iterators.h @@ -1,6 +1,6 @@ #ifndef ONE_RING_ITERATORS_H #define ONE_RING_ITERATORS_H -#include "Polyhedron_type.h" + /***************************************************************/ /* For iterating on one ring neighbor, sample usage: Halfedge_handle h; //or Vertex_handle or Facet_handle diff --git a/Polyhedron/demo/Polyhedron/Plugins/Classification/Cluster_classification.h b/Polyhedron/demo/Polyhedron/Plugins/Classification/Cluster_classification.h index 62710b88f18..b13ebef8054 100644 --- a/Polyhedron/demo/Polyhedron/Plugins/Classification/Cluster_classification.h +++ b/Polyhedron/demo/Polyhedron/Plugins/Classification/Cluster_classification.h @@ -8,7 +8,6 @@ #include "Scene_points_with_normal_item.h" #include "Item_classification_base.h" -#include "Polyhedron_type_fwd.h" #include "Kernel_type.h" #include "Point_set_3.h" diff --git a/Polyhedron/demo/Polyhedron/Plugins/Classification/Point_set_item_classification.h b/Polyhedron/demo/Polyhedron/Plugins/Classification/Point_set_item_classification.h index d9b18212282..7390bd3a8e3 100644 --- a/Polyhedron/demo/Polyhedron/Plugins/Classification/Point_set_item_classification.h +++ b/Polyhedron/demo/Polyhedron/Plugins/Classification/Point_set_item_classification.h @@ -8,7 +8,6 @@ #include "Scene_points_with_normal_item.h" #include "Item_classification_base.h" -#include "Polyhedron_type_fwd.h" #include "Kernel_type.h" #include "Point_set_3.h" diff --git a/Polyhedron/demo/Polyhedron/Plugins/Convex_hull/Convex_hull_plugin.cpp b/Polyhedron/demo/Polyhedron/Plugins/Convex_hull/Convex_hull_plugin.cpp index f14931d93e7..ec8a5d41b98 100644 --- a/Polyhedron/demo/Polyhedron/Plugins/Convex_hull/Convex_hull_plugin.cpp +++ b/Polyhedron/demo/Polyhedron/Plugins/Convex_hull/Convex_hull_plugin.cpp @@ -55,12 +55,6 @@ private: QMainWindow* mw; }; // end Polyhedron_demo_convex_hull_plugin -// for transform iterator -struct Get_point { - typedef const Polyhedron::Point_3& result_type; - result_type operator()(const Polyhedron::Vertex_handle v) const - { return v->point(); } -}; void Polyhedron_demo_convex_hull_plugin::on_actionConvexHull_triggered() { diff --git a/Polyhedron/demo/Polyhedron/Plugins/IO/Surf_io_plugin.cpp b/Polyhedron/demo/Polyhedron/Plugins/IO/Surf_io_plugin.cpp index 1968a950685..becb78272b1 100644 --- a/Polyhedron/demo/Polyhedron/Plugins/IO/Surf_io_plugin.cpp +++ b/Polyhedron/demo/Polyhedron/Plugins/IO/Surf_io_plugin.cpp @@ -1,4 +1,3 @@ -#include "Polyhedron_type.h" #include "Scene_surface_mesh_item.h" #include diff --git a/Polyhedron/demo/Polyhedron/Plugins/Mesh_3/C3t3_io_plugin.cpp b/Polyhedron/demo/Polyhedron/Plugins/Mesh_3/C3t3_io_plugin.cpp index 9a788dc87b4..3da45c6ef24 100644 --- a/Polyhedron/demo/Polyhedron/Plugins/Mesh_3/C3t3_io_plugin.cpp +++ b/Polyhedron/demo/Polyhedron/Plugins/Mesh_3/C3t3_io_plugin.cpp @@ -233,7 +233,7 @@ typedef CGAL::Mesh_complex_3_in_triangulation_3< Fake_mesh_domain::Corner_index, Fake_mesh_domain::Curve_index> Fake_c3t3; -template > +template > struct Fake_CDT_3_vertex_base : public Vb { typedef Vb Base; @@ -285,7 +285,7 @@ operator>>( std::istream& is, Fake_CDT_3_vertex_base& v) return is; } -template > +template > struct Fake_CDT_3_cell_base : public Cb { typedef Cb Base; @@ -346,7 +346,7 @@ operator>>( std::istream& is, Fake_CDT_3_cell_base& c) { } typedef CGAL::Triangulation_data_structure_3, Fake_CDT_3_cell_base<> > Fake_CDT_3_TDS; -typedef CGAL::Triangulation_3 Fake_CDT_3; +typedef CGAL::Triangulation_3 Fake_CDT_3; typedef Fake_mesh_domain::Surface_patch_index Fake_patch_id; diff --git a/Polyhedron/demo/Polyhedron/Plugins/Mesh_3/C3t3_rib_exporter_plugin.cpp b/Polyhedron/demo/Polyhedron/Plugins/Mesh_3/C3t3_rib_exporter_plugin.cpp index 0b188d3cd98..35c1bfd2529 100644 --- a/Polyhedron/demo/Polyhedron/Plugins/Mesh_3/C3t3_rib_exporter_plugin.cpp +++ b/Polyhedron/demo/Polyhedron/Plugins/Mesh_3/C3t3_rib_exporter_plugin.cpp @@ -704,7 +704,7 @@ void C3t3_rib_exporter_plugin:: write_facets(const C3t3& c3t3, const Plane& plane, std::ofstream& out) { - typedef Kernel::Oriented_side Side; + typedef EPICK::Oriented_side Side; Geom_traits::Construct_point_3 wp2p = c3t3.triangulation().geom_traits().construct_point_3_object(); @@ -869,7 +869,7 @@ void C3t3_rib_exporter_plugin:: write_cells_intersecting_a_plane(const C3t3& c3t3, const Plane& plane, std::ofstream& out) { - typedef Kernel::Oriented_side Side; + typedef EPICK::Oriented_side Side; Geom_traits::Construct_point_3 wp2p = c3t3.triangulation().geom_traits().construct_point_3_object(); @@ -917,7 +917,7 @@ void C3t3_rib_exporter_plugin:: write_cells_on_the_positive_side_of_a_plane(const C3t3& c3t3, const Plane& plane, std::ofstream& out) { - typedef Kernel::Oriented_side Side; + typedef EPICK::Oriented_side Side; Geom_traits::Construct_point_3 wp2p = c3t3.triangulation().geom_traits().construct_point_3_object(); diff --git a/Polyhedron/demo/Polyhedron/Plugins/Mesh_3/Mesh_3_plugin_cgal_code.cpp b/Polyhedron/demo/Polyhedron/Plugins/Mesh_3/Mesh_3_plugin_cgal_code.cpp index 2e67a7c18fc..d8c9fa26bbf 100644 --- a/Polyhedron/demo/Polyhedron/Plugins/Mesh_3/Mesh_3_plugin_cgal_code.cpp +++ b/Polyhedron/demo/Polyhedron/Plugins/Mesh_3/Mesh_3_plugin_cgal_code.cpp @@ -5,7 +5,6 @@ #include #include #include -#include #include @@ -37,12 +36,6 @@ struct Polyhedral_mesh_domain_selector { typedef Polyhedral_mesh_domain type; }; - -template<> -struct Polyhedral_mesh_domain_selector -{ - typedef Polyhedral_mesh_domain_sm type; -}; template Meshing_thread* cgal_code_mesh_3_templated(const Mesh* pMesh, const Polylines_container& polylines, @@ -143,40 +136,6 @@ Meshing_thread* cgal_code_mesh_3_templated(const Mesh* pMesh, } -Meshing_thread* cgal_code_mesh_3(const Polyhedron* pMesh, - const Polylines_container& polylines, - const Polyhedron* pBoundingMesh, - QString filename, - const double facet_angle, - const double facet_sizing, - const double facet_approx, - const double tet_sizing, - const double edge_size, - const double tet_shape, - bool protect_features, - bool protect_borders, - const double sharp_edges_angle, - const int manifold, - const bool surface_only, - CGAL::Three::Scene_interface* scene) -{ - return cgal_code_mesh_3_templated(pMesh, - polylines, - pBoundingMesh, - filename, - facet_angle, - facet_sizing, - facet_approx, - tet_sizing, - edge_size, - tet_shape, - protect_features, - protect_borders, - sharp_edges_angle, - manifold, - surface_only, - scene); -} Meshing_thread* cgal_code_mesh_3(const SMesh* pMesh, const Polylines_container& polylines, diff --git a/Polyhedron/demo/Polyhedron/Plugins/Mesh_3/Mesh_3_plugin_cgal_code.h b/Polyhedron/demo/Polyhedron/Plugins/Mesh_3/Mesh_3_plugin_cgal_code.h index 8e6f6fe619c..ca90415d036 100644 --- a/Polyhedron/demo/Polyhedron/Plugins/Mesh_3/Mesh_3_plugin_cgal_code.h +++ b/Polyhedron/demo/Polyhedron/Plugins/Mesh_3/Mesh_3_plugin_cgal_code.h @@ -1,4 +1,3 @@ -#include "Polyhedron_type_fwd.h" #ifdef CGAL_MESH_3_DEMO_ACTIVATE_SEGMENTED_IMAGES # include "Image_type_fwd.h" #endif @@ -20,23 +19,6 @@ namespace CGAL { namespace Three { typedef std::list > Polylines_container; -Meshing_thread* cgal_code_mesh_3(const Polyhedron* pMesh, - const Polylines_container& polylines, - const Polyhedron* pBoundingMesh, - QString filename, - const double facet_angle, - const double facet_sizing, - const double facet_approx, - const double tet_sizing, - const double edge_size, - const double tet_shape, - bool protect_features, - bool protect_borders, - const double sharp_edges_angle, - const int manifold, - const bool surface_only, - CGAL::Three::Scene_interface* scene); - Meshing_thread* cgal_code_mesh_3(const SMesh* pMesh, const Polylines_container& polylines, const SMesh* pBoundingMesh, diff --git a/Polyhedron/demo/Polyhedron/Plugins/Mesh_3/Mesh_function.h b/Polyhedron/demo/Polyhedron/Plugins/Mesh_3/Mesh_function.h index 9db5fdb62de..3d87a3625b9 100644 --- a/Polyhedron/demo/Polyhedron/Plugins/Mesh_3/Mesh_function.h +++ b/Polyhedron/demo/Polyhedron/Plugins/Mesh_3/Mesh_function.h @@ -57,8 +57,8 @@ struct Get_facet_patch_id_selector { }; //specialization for surface_mesh template<> -struct Get_facet_patch_id_selector { - typedef CGAL::Mesh_3::Get_facet_patch_id_sm type; +struct Get_facet_patch_id_selector { + typedef CGAL::Mesh_3::Get_facet_patch_id_sm type; }; }//end internal struct Mesh_parameters diff --git a/Polyhedron/demo/Polyhedron/Plugins/Mesh_3/Optimization_plugin_cgal_code.cpp b/Polyhedron/demo/Polyhedron/Plugins/Mesh_3/Optimization_plugin_cgal_code.cpp index fc636e1dffa..ea98ff61bfd 100644 --- a/Polyhedron/demo/Polyhedron/Plugins/Mesh_3/Optimization_plugin_cgal_code.cpp +++ b/Polyhedron/demo/Polyhedron/Plugins/Mesh_3/Optimization_plugin_cgal_code.cpp @@ -139,10 +139,10 @@ Optimizer_thread* cgal_code_optimization(Scene_c3t3_item& c3t3_item, { return NULL; } - Polyhedral_mesh_domain_sm* sm_domain = new Polyhedral_mesh_domain_sm(*smesh); + Polyhedral_mesh_domain* sm_domain = new Polyhedral_mesh_domain(*smesh); // Create thread - typedef Optimization_function Opt_function; + typedef Optimization_function Opt_function; Opt_function* p_opt_function = new Opt_function(p_result_item->c3t3(), sm_domain, param); return new Optimizer_thread(p_opt_function, p_result_item); } diff --git a/Polyhedron/demo/Polyhedron/Plugins/PCA/Create_bbox_mesh_plugin.cpp b/Polyhedron/demo/Polyhedron/Plugins/PCA/Create_bbox_mesh_plugin.cpp index 3cb4e166c9c..5aca9eede6c 100644 --- a/Polyhedron/demo/Polyhedron/Plugins/PCA/Create_bbox_mesh_plugin.cpp +++ b/Polyhedron/demo/Polyhedron/Plugins/PCA/Create_bbox_mesh_plugin.cpp @@ -8,7 +8,6 @@ #include #include "Scene_surface_mesh_item.h" -#include "Polyhedron_type.h" #include @@ -107,7 +106,7 @@ void Create_bbox_mesh_plugin::bbox(bool extended) } Scene_item* item; - Kernel::Iso_cuboid_3 ic(bbox); + EPICK::Iso_cuboid_3 ic(bbox); SMesh* p = new SMesh; CGAL::make_hexahedron(ic[0], ic[1], ic[2], ic[3], ic[4], ic[5], ic[6], ic[7],*p); diff --git a/Polyhedron/demo/Polyhedron/Plugins/PCA/Edit_box_plugin.cpp b/Polyhedron/demo/Polyhedron/Plugins/PCA/Edit_box_plugin.cpp index 74e526a1d7e..86aab788cc9 100644 --- a/Polyhedron/demo/Polyhedron/Plugins/PCA/Edit_box_plugin.cpp +++ b/Polyhedron/demo/Polyhedron/Plugins/PCA/Edit_box_plugin.cpp @@ -101,7 +101,7 @@ void Edit_box_plugin::exportToPoly() { int id =0; const CGAL::qglviewer::Vec v_offset = static_cast(CGAL::QGLViewer::QGLViewerPool().first())->offset(); - Kernel::Vector_3 offset(v_offset.x, v_offset.y, v_offset.z); + EPICK::Vector_3 offset(v_offset.x, v_offset.y, v_offset.z); Scene_edit_box_item* item = NULL; for(int i = 0, end = scene->numberOfEntries(); i < end; ++i) diff --git a/Polyhedron/demo/Polyhedron/Plugins/PCA/Scene_facegraph_transform_item.cpp b/Polyhedron/demo/Polyhedron/Plugins/PCA/Scene_facegraph_transform_item.cpp index cc0759ff61c..63030b390ee 100644 --- a/Polyhedron/demo/Polyhedron/Plugins/PCA/Scene_facegraph_transform_item.cpp +++ b/Polyhedron/demo/Polyhedron/Plugins/PCA/Scene_facegraph_transform_item.cpp @@ -1,6 +1,5 @@ #include #include "Scene_facegraph_transform_item.h" -#include "Polyhedron_type.h" #include struct Scene_facegraph_transform_item_priv diff --git a/Polyhedron/demo/Polyhedron/Plugins/PMP/Degenerated_faces_plugin.cpp b/Polyhedron/demo/Polyhedron/Plugins/PMP/Degenerated_faces_plugin.cpp index d299764fca7..5e3188bff76 100644 --- a/Polyhedron/demo/Polyhedron/Plugins/PMP/Degenerated_faces_plugin.cpp +++ b/Polyhedron/demo/Polyhedron/Plugins/PMP/Degenerated_faces_plugin.cpp @@ -4,7 +4,6 @@ #include #include "opengl_tools.h" #include "Kernel_type.h" -#include "Polyhedron_type.h" #include "Scene_surface_mesh_item.h" #include "Scene_polyhedron_selection_item.h" diff --git a/Polyhedron/demo/Polyhedron/Plugins/PMP/Isotropic_remeshing_plugin.cpp b/Polyhedron/demo/Polyhedron/Plugins/PMP/Isotropic_remeshing_plugin.cpp index 993fe8d26f0..3fa8fcca4fe 100644 --- a/Polyhedron/demo/Polyhedron/Plugins/PMP/Isotropic_remeshing_plugin.cpp +++ b/Polyhedron/demo/Polyhedron/Plugins/PMP/Isotropic_remeshing_plugin.cpp @@ -220,7 +220,7 @@ public: std::map& edges_to_protect, double target_length) { - typedef Polyhedron::Point_3 Point_3; + typedef EPICK::Point_3 Point_3; typedef std::pair Segment_3; typedef std::map< Segment_3, @@ -363,7 +363,7 @@ public Q_SLOTS: edges , target_length , *selection_item->polyhedron() - , PMP::parameters::geom_traits(Kernel()) + , PMP::parameters::geom_traits(EPICK()) .edge_is_constrained_map(selection_item->constrained_edges_pmap())); else std::cout << "No selected or boundary edges to be split" << std::endl; @@ -505,7 +505,7 @@ public Q_SLOTS: border_edges , target_length , *poly_item->polyhedron() - , PMP::parameters::geom_traits(Kernel())); + , PMP::parameters::geom_traits(EPICK())); else std::cout << "No border to be split" << std::endl; } diff --git a/Polyhedron/demo/Polyhedron/Plugins/PMP/Jet_fitting_plugin.cpp b/Polyhedron/demo/Polyhedron/Plugins/PMP/Jet_fitting_plugin.cpp index d5a39b213ea..edd95b3cfca 100644 --- a/Polyhedron/demo/Polyhedron/Plugins/PMP/Jet_fitting_plugin.cpp +++ b/Polyhedron/demo/Polyhedron/Plugins/PMP/Jet_fitting_plugin.cpp @@ -55,10 +55,10 @@ void compute(Poly* pMesh, Scene_polylines_item* max_curv) { - typedef CGAL::Monge_via_jet_fitting Fitting; + typedef CGAL::Monge_via_jet_fitting Fitting; typedef Fitting::Monge_form Monge_form; - typedef Kernel::Point_3 Point; + typedef EPICK::Point_3 Point; typename boost::property_map::type vpmap = get(CGAL::vertex_point, *pMesh); @@ -73,7 +73,7 @@ void compute(Poly* pMesh, // compute min edge len around central vertex // to scale the ribbons used to display the directions - typedef Kernel::FT FT; + typedef EPICK::FT FT; FT min_edge_len = std::numeric_limits::infinity(); BOOST_FOREACH(typename boost::graph_traits::halfedge_descriptor he, halfedges_around_target(v, *pMesh)) @@ -94,7 +94,7 @@ void compute(Poly* pMesh, // make monge form comply with vertex normal (to get correct // orientation) - typedef Kernel::Vector_3 Vector; + typedef EPICK::Vector_3 Vector; Vector n = CGAL::Polygon_mesh_processing::compute_vertex_normal(v, *pMesh); monge_form.comply_wrt_given_normal(n); diff --git a/Polyhedron/demo/Polyhedron/Plugins/PMP/Random_perturbation_plugin.cpp b/Polyhedron/demo/Polyhedron/Plugins/PMP/Random_perturbation_plugin.cpp index 56d996f60cb..7a12447e978 100644 --- a/Polyhedron/demo/Polyhedron/Plugins/PMP/Random_perturbation_plugin.cpp +++ b/Polyhedron/demo/Polyhedron/Plugins/PMP/Random_perturbation_plugin.cpp @@ -5,7 +5,6 @@ #include "Scene_surface_mesh_item.h" #include "Scene_polyhedron_selection_item.h" -#include "Polyhedron_type.h" #include #include diff --git a/Polyhedron/demo/Polyhedron/Plugins/PMP/Repair_polyhedron_plugin.cpp b/Polyhedron/demo/Polyhedron/Plugins/PMP/Repair_polyhedron_plugin.cpp index f2f7ddf66b7..56eae5f6f53 100644 --- a/Polyhedron/demo/Polyhedron/Plugins/PMP/Repair_polyhedron_plugin.cpp +++ b/Polyhedron/demo/Polyhedron/Plugins/PMP/Repair_polyhedron_plugin.cpp @@ -1,9 +1,7 @@ #include -#include "Scene_polyhedron_item.h" #include "Scene_surface_mesh_item.h" #include -#include "Polyhedron_type.h" #include #include #include "Messages_interface.h" @@ -79,8 +77,7 @@ public: bool applicable(QAction*) const { int item_id = scene->mainSelectionIndex(); - return qobject_cast(scene->item(item_id)) || - qobject_cast(scene->item(item_id)); + return qobject_cast(scene->item(item_id)); } template void on_actionRemoveIsolatedVertices_triggered(Scene_interface::Item_id index); @@ -139,7 +136,6 @@ void Polyhedron_demo_repair_polyhedron_plugin::on_actionRemoveIsolatedVertices_t { QApplication::setOverrideCursor(Qt::WaitCursor); const Scene_interface::Item_id index = scene->mainSelectionIndex(); - on_actionRemoveIsolatedVertices_triggered(index); on_actionRemoveIsolatedVertices_triggered(index); QApplication::restoreOverrideCursor(); } @@ -165,7 +161,6 @@ void Polyhedron_demo_repair_polyhedron_plugin::on_actionRemoveDegenerateFaces_tr { QApplication::setOverrideCursor(Qt::WaitCursor); const Scene_interface::Item_id index = scene->mainSelectionIndex(); - on_actionRemoveDegenerateFaces_triggered(index); on_actionRemoveDegenerateFaces_triggered(index); QApplication::restoreOverrideCursor(); } @@ -191,7 +186,6 @@ void Polyhedron_demo_repair_polyhedron_plugin::on_actionRemoveSelfIntersections_ { QApplication::setOverrideCursor(Qt::WaitCursor); const Scene_interface::Item_id index = scene->mainSelectionIndex(); - on_actionRemoveSelfIntersections_triggered(index); on_actionRemoveSelfIntersections_triggered(index); QApplication::restoreOverrideCursor(); } @@ -219,7 +213,6 @@ void Polyhedron_demo_repair_polyhedron_plugin::on_actionAutorefine_triggered() { QApplication::setOverrideCursor(Qt::WaitCursor); const Scene_interface::Item_id index = scene->mainSelectionIndex(); - on_actionAutorefine_triggered(index); on_actionAutorefine_triggered(index); QApplication::restoreOverrideCursor(); } @@ -251,7 +244,6 @@ void Polyhedron_demo_repair_polyhedron_plugin::on_actionAutorefineAndRMSelfInter { QApplication::setOverrideCursor(Qt::WaitCursor); const Scene_interface::Item_id index = scene->mainSelectionIndex(); - on_actionAutorefineAndRMSelfIntersections_triggered(index); on_actionAutorefineAndRMSelfIntersections_triggered(index); QApplication::restoreOverrideCursor(); } @@ -286,7 +278,6 @@ void Polyhedron_demo_repair_polyhedron_plugin::on_actionStitchCloseBorderHalfedg { QApplication::setOverrideCursor(Qt::WaitCursor); const Scene_interface::Item_id index = scene->mainSelectionIndex(); - on_actionStitchCloseBorderHalfedges_triggered(index); on_actionStitchCloseBorderHalfedges_triggered(index); QApplication::restoreOverrideCursor(); } @@ -312,7 +303,6 @@ void Polyhedron_demo_repair_polyhedron_plugin::on_actionDuplicateNMVertices_trig { QApplication::setOverrideCursor(Qt::WaitCursor); const Scene_interface::Item_id index = scene->mainSelectionIndex(); - on_actionDuplicateNMVertices_triggered(index); on_actionDuplicateNMVertices_triggered(index); QApplication::restoreOverrideCursor(); } diff --git a/Polyhedron/demo/Polyhedron/Plugins/PMP/Scene_facegraph_item_k_ring_selection.cpp b/Polyhedron/demo/Polyhedron/Plugins/PMP/Scene_facegraph_item_k_ring_selection.cpp index ce1f9c9b01c..85a89974a55 100644 --- a/Polyhedron/demo/Polyhedron/Plugins/PMP/Scene_facegraph_item_k_ring_selection.cpp +++ b/Polyhedron/demo/Polyhedron/Plugins/PMP/Scene_facegraph_item_k_ring_selection.cpp @@ -1 +1 @@ -#include "Scene_polyhedron_item_k_ring_selection.h" +#include "Scene_facegraph_item_k_ring_selection.h" diff --git a/Polyhedron/demo/Polyhedron/Plugins/PMP/Scene_mcf_item.h b/Polyhedron/demo/Polyhedron/Plugins/PMP/Scene_mcf_item.h index 732ad350a28..daf14cf6d2b 100644 --- a/Polyhedron/demo/Polyhedron/Plugins/PMP/Scene_mcf_item.h +++ b/Polyhedron/demo/Polyhedron/Plugins/PMP/Scene_mcf_item.h @@ -12,14 +12,8 @@ #include #include -#ifdef USE_SURFACE_MESH #include "SMesh_type.h" typedef SMesh Face_graph; -#else -#include "Polyhedron_type.h" -typedef Polyhedron Face_graph; -#endif - typedef CGAL::Mean_curvature_flow_skeletonization Mean_curvature_skeleton; typedef Mean_curvature_skeleton::Skeleton Skeleton; diff --git a/Polyhedron/demo/Polyhedron/Plugins/PMP/Selection_plugin.cpp b/Polyhedron/demo/Polyhedron/Plugins/PMP/Selection_plugin.cpp index a6cf3a63299..5440df3091b 100644 --- a/Polyhedron/demo/Polyhedron/Plugins/PMP/Selection_plugin.cpp +++ b/Polyhedron/demo/Polyhedron/Plugins/PMP/Selection_plugin.cpp @@ -3,12 +3,8 @@ #include "opengl_tools.h" #include "Messages_interface.h" -#ifdef USE_SURFACE_MESH #include "Kernel_type.h" #include "Scene_surface_mesh_item.h" -#else -#include "Scene_polyhedron_item.h" -#endif #include "Scene_polyhedron_selection_item.h" #include "Scene_points_with_normal_item.h" #include "Scene_polylines_item.h" @@ -28,12 +24,7 @@ #include #include #include - -#ifdef USE_SURFACE_MESH typedef Scene_surface_mesh_item Scene_face_graph_item; -#else -typedef Scene_polyhedron_item Scene_face_graph_item; -#endif typedef Scene_face_graph_item::Face_graph Face_graph; typedef boost::property_map::type VPmap; @@ -92,29 +83,17 @@ public: scene = scene_interface; messages = m; actionSelection = new QAction( -#ifdef USE_SURFACE_MESH QString("Surface Mesh Selection") -#else - tr("Polyhedron Selection") -#endif , mw); connect(actionSelection, SIGNAL(triggered()), this, SLOT(selection_action())); last_mode = 0; dock_widget = new QDockWidget( - #ifdef USE_SURFACE_MESH "Surface Mesh Selection" - #else - "Polyhedron Selection" - #endif , mw); dock_widget->setVisible(false); ui_widget.setupUi(dock_widget); dock_widget->setWindowTitle(tr( -#ifdef USE_SURFACE_MESH "Surface Mesh Selection" -#else - "Polyhedron Selection" -#endif )); addDockWidget(dock_widget); @@ -367,11 +346,7 @@ public Q_SLOTS: Scene_face_graph_item* poly_item = qobject_cast(scene->item(scene->mainSelectionIndex())); if(!poly_item) { print_message("Error: there is no selected " - #ifdef USE_SURFACE_MESH - "Surface_mesh " - #else - "Polyhedron " - #endif + "Surface_mesh " "item!"); return; } diff --git a/Polyhedron/demo/Polyhedron/Plugins/PMP/Self_intersection_plugin.cpp b/Polyhedron/demo/Polyhedron/Plugins/PMP/Self_intersection_plugin.cpp index d7827a4b548..d97c9f0282f 100644 --- a/Polyhedron/demo/Polyhedron/Plugins/PMP/Self_intersection_plugin.cpp +++ b/Polyhedron/demo/Polyhedron/Plugins/PMP/Self_intersection_plugin.cpp @@ -14,13 +14,8 @@ #include "Kernel_type.h" #include "Scene_polyhedron_selection_item.h" -#ifdef USE_SURFACE_MESH #include "Scene_surface_mesh_item.h" typedef Scene_surface_mesh_item Scene_face_graph_item; -#else -#include "Scene_polyhedron_item.h" -typedef Scene_polyhedron_item Scene_face_graph_item; -#endif typedef Scene_face_graph_item::Face_graph Face_graph; typedef Kernel::Triangle_3 Triangle; diff --git a/Polyhedron/demo/Polyhedron/Plugins/PMP/Surface_intersection_plugin.cpp b/Polyhedron/demo/Polyhedron/Plugins/PMP/Surface_intersection_plugin.cpp index febe481e5ee..0bc18398d00 100644 --- a/Polyhedron/demo/Polyhedron/Plugins/PMP/Surface_intersection_plugin.cpp +++ b/Polyhedron/demo/Polyhedron/Plugins/PMP/Surface_intersection_plugin.cpp @@ -1,13 +1,8 @@ #include #include -#ifdef USE_SURFACE_MESH #include "Kernel_type.h" #include "Scene_surface_mesh_item.h" -#else -#include "Scene_polyhedron_item.h" -#include "Polyhedron_type.h" -#endif #include #include "Scene_polylines_item.h" @@ -23,11 +18,7 @@ #include #include -#ifdef USE_SURFACE_MESH typedef Scene_surface_mesh_item Scene_face_graph_item; -#else -typedef Scene_polyhedron_item Scene_face_graph_item; -#endif typedef Scene_polylines_item::Polyline Polyline_3; typedef boost::graph_traits::face_descriptor face_descriptor; @@ -78,9 +69,7 @@ public: QList actions() const { return QList() << actionPolyhedronIntersection_3 << actionSurfacePolylineIntersection -#ifdef USE_SURFACE_MESH << actionPolylinesIntersection -#endif ; } diff --git a/Polyhedron/demo/Polyhedron/Plugins/PMP/Triangulate_facets_plugin.cpp b/Polyhedron/demo/Polyhedron/Plugins/PMP/Triangulate_facets_plugin.cpp index e63cf3bbb48..acf5bf53abe 100644 --- a/Polyhedron/demo/Polyhedron/Plugins/PMP/Triangulate_facets_plugin.cpp +++ b/Polyhedron/demo/Polyhedron/Plugins/PMP/Triangulate_facets_plugin.cpp @@ -3,9 +3,7 @@ #include #include "Messages_interface.h" #include -#include "Scene_polyhedron_item.h" #include "Scene_surface_mesh_item.h" -#include "Polyhedron_type.h" #include using namespace CGAL::Three; @@ -39,8 +37,7 @@ public: bool applicable(QAction*) const { Q_FOREACH(CGAL::Three::Scene_interface::Item_id index, scene->selectionIndices()){ - if ( qobject_cast(scene->item(index)) || - qobject_cast(scene->item(index)) ) + if ( qobject_cast(scene->item(index)) ) return true; } return false; @@ -50,46 +47,21 @@ public Q_SLOTS: void triangulate() { QApplication::setOverrideCursor(Qt::WaitCursor); Q_FOREACH(CGAL::Three::Scene_interface::Item_id index, scene->selectionIndices()) { - - Scene_polyhedron_item* item = - qobject_cast(scene->item(index)); - - if(item) - { - Polyhedron* pMesh = item->polyhedron(); - if(!pMesh) continue; - if(pMesh->is_pure_triangle()) { - messages->warning(tr("The polyhedron \"%1\" is already triangulated.") - .arg(item->name())); - continue; - } - - - if(!CGAL::Polygon_mesh_processing::triangulate_faces(*pMesh)) - messages->warning(tr("Some facets could not be triangulated.")); - - CGAL_assertion_code(pMesh->normalize_border()); - CGAL_assertion(pMesh->is_valid(false, 3)); - - item->invalidateOpenGLBuffers(); - scene->itemChanged(item); - - } else { + Scene_surface_mesh_item* sm_item = - qobject_cast(scene->item(index)); + qobject_cast(scene->item(index)); SMesh* pMesh = sm_item->polyhedron(); if(!pMesh) continue; if(is_triangle_mesh(*pMesh)) { - messages->warning(tr("The polyhedron \"%1\" is already triangulated.") + messages->warning(tr("The polyhedron \"%1\" is already triangulated.") .arg(sm_item->name()) ); continue; } if(!CGAL::Polygon_mesh_processing::triangulate_faces(*pMesh)) messages->warning(tr("Some facets could not be triangulated.")); - + sm_item->invalidateOpenGLBuffers(); scene->itemChanged(sm_item); - } // end of if(item) } // end of the loop on the selected items // default cursor diff --git a/Polyhedron/demo/Polyhedron/Plugins/Point_set/Point_set_shape_detection_plugin.cpp b/Polyhedron/demo/Polyhedron/Plugins/Point_set/Point_set_shape_detection_plugin.cpp index 5c3c5399e75..32a40d64702 100644 --- a/Polyhedron/demo/Polyhedron/Plugins/Point_set/Point_set_shape_detection_plugin.cpp +++ b/Polyhedron/demo/Polyhedron/Plugins/Point_set/Point_set_shape_detection_plugin.cpp @@ -1,7 +1,6 @@ #include "config.h" #include "Scene_points_with_normal_item.h" #include "Scene_polygon_soup_item.h" -#include "Scene_polyhedron_item.h" #include "Scene_surface_mesh_item.h" #include @@ -402,25 +401,12 @@ private: if (dialog.generate_alpha ()) { // If plane, build alpha shape - Scene_polyhedron_item* poly_item = NULL; Scene_surface_mesh_item* sm_item = NULL; sm_item = new Scene_surface_mesh_item; build_alpha_shape (*(point_item->point_set()), pshape, - poly_item, sm_item, dialog.cluster_epsilon()); - - if(poly_item){ - poly_item->setColor(point_item->color ()); - poly_item->setName(QString("%1%2_alpha_shape").arg(QString::fromStdString(ss.str())) - .arg (QString::number (shape->indices_of_assigned_points().size()))); - poly_item->setRenderingMode (Flat); - - scene->addItem(poly_item); - if(scene->item_id(groups[0]) == -1) - scene->addItem(groups[0]); - scene->changeGroup(poly_item, groups[0]); - } + sm_item, dialog.cluster_epsilon()); if(sm_item){ sm_item->setColor(point_item->color ()); sm_item->setName(QString("%1%2_alpha_shape").arg(QString::fromStdString(ss.str())) @@ -551,7 +537,7 @@ private: } void build_alpha_shape (Point_set& points, boost::shared_ptr > plane, - Scene_polyhedron_item* item, Scene_surface_mesh_item* sm_item, double epsilon); + Scene_surface_mesh_item* sm_item, double epsilon); }; // end Polyhedron_demo_point_set_shape_detection_plugin @@ -616,8 +602,7 @@ void Polyhedron_demo_point_set_shape_detection_plugin::on_actionDetect_triggered } void Polyhedron_demo_point_set_shape_detection_plugin::build_alpha_shape -(Point_set& points, boost::shared_ptr > plane, - Scene_polyhedron_item* item, Scene_surface_mesh_item* sm_item, double epsilon) +(Point_set& points, boost::shared_ptr > plane, Scene_surface_mesh_item* sm_item, double epsilon) { typedef Kernel::Point_2 Point_2; typedef CGAL::Alpha_shape_vertex_base_2 Vb; @@ -663,9 +648,6 @@ void Polyhedron_demo_point_set_shape_detection_plugin::build_alpha_shape } soup_item->orient(); - if(item){ - soup_item->exportAsPolyhedron (item->polyhedron()); - } if(sm_item){ soup_item->exportAsSurfaceMesh (sm_item->polyhedron()); } diff --git a/Polyhedron/demo/Polyhedron/Plugins/Point_set/Point_set_to_mesh_distance_plugin.cpp b/Polyhedron/demo/Polyhedron/Plugins/Point_set/Point_set_to_mesh_distance_plugin.cpp index 4c444c43ab1..e9a0e2b32fc 100644 --- a/Polyhedron/demo/Polyhedron/Plugins/Point_set/Point_set_to_mesh_distance_plugin.cpp +++ b/Polyhedron/demo/Polyhedron/Plugins/Point_set/Point_set_to_mesh_distance_plugin.cpp @@ -5,7 +5,6 @@ #include #include #include -#include #include #include #include "Messages_interface.h" @@ -132,19 +131,16 @@ public: { if(scene->selectionIndices().size() != 2) return false; - Scene_polyhedron_item* poly = NULL; Scene_surface_mesh_item* sm = NULL; Scene_points_with_normal_item* pn = NULL; Q_FOREACH(Scene_interface::Item_id i,scene->selectionIndices()) { - if(!poly) - poly = qobject_cast(scene->item(i)); if(!sm) sm = qobject_cast(scene->item(i)); if(!pn) pn = qobject_cast(scene->item(i)); } - if((!poly && ! sm)|| !pn) + if(! sm|| !pn) return false; else return true; @@ -205,19 +201,16 @@ private Q_SLOTS: } void perform() { - Scene_polyhedron_item* poly = NULL; Scene_surface_mesh_item* sm = NULL; Scene_points_with_normal_item* pn = NULL; Q_FOREACH(Scene_interface::Item_id i,scene->selectionIndices()) { - if(!poly) - poly = qobject_cast(scene->item(i)); if(!sm) sm = qobject_cast(scene->item(i)); if(!pn) pn = qobject_cast(scene->item(i)); } - if((!poly && ! sm)|| !pn) + if(! sm|| !pn) return ; QApplication::setOverrideCursor(Qt::WaitCursor); Scene_points_with_normal_item* new_item = new Scene_points_with_normal_item(*pn); @@ -241,10 +234,7 @@ private Q_SLOTS: points->collect_garbage(); std::vector distances(points->size()); double hdist; - if(poly) - hdist = compute_distances(*poly->face_graph(), *points, distances); - else - hdist = compute_distances(*sm->face_graph(), *points, distances); + hdist = compute_distances(*sm->face_graph(), *points, distances); if(hdist == 0) hdist++; int id = 0; diff --git a/Polyhedron/demo/Polyhedron/Plugins/Point_set/Surface_reconstruction_plugin.cpp b/Polyhedron/demo/Polyhedron/Plugins/Point_set/Surface_reconstruction_plugin.cpp index 02f203f5905..f1ee63304a7 100644 --- a/Polyhedron/demo/Polyhedron/Plugins/Point_set/Surface_reconstruction_plugin.cpp +++ b/Polyhedron/demo/Polyhedron/Plugins/Point_set/Surface_reconstruction_plugin.cpp @@ -8,10 +8,8 @@ #include #include "Scene_polygon_soup_item.h" -#include "Scene_polyhedron_item.h" #include "Scene_surface_mesh_item.h" #include "Scene_points_with_normal_item.h" -#include "Polyhedron_type.h" #include "SMesh_type.h" #include #include @@ -104,14 +102,6 @@ struct Construct{ // Poisson reconstruction method: -// Reconstructs a surface mesh from a point set and returns it as a polyhedron. -Polyhedron* poisson_reconstruct_polyhedron(Point_set& points, - Kernel::FT sm_angle, // Min triangle angle (degrees). - Kernel::FT sm_radius, // Max triangle size w.r.t. point set average spacing. - Kernel::FT sm_distance, // Approximation error w.r.t. point set average spacing. - const QString& solver_name, // solver name - bool use_two_passes, - bool do_not_fill_holes); // Reconstructs a surface mesh from a point set and returns it. SMesh* poisson_reconstruct_sm(Point_set& points, Kernel::FT sm_angle, // Min triangle angle (degrees). @@ -1107,7 +1097,6 @@ void Polyhedron_demo_surface_reconstruction_plugin::automatic_reconstruction std::cerr << "Poisson reconstruction... "; time.restart(); - Polyhedron* pRemesh = NULL; SMesh* smRemesh = NULL; smRemesh = poisson_reconstruct_sm(*points, @@ -1115,15 +1104,7 @@ void Polyhedron_demo_surface_reconstruction_plugin::automatic_reconstruction 100 * (std::max)(noise_size, aniso_size), (std::max)(noise_size, aniso_size), QString ("Eigen - built-in CG"), false, false); - if(pRemesh) - { - // Add polyhedron to scene - Scene_polyhedron_item* reco_item = new Scene_polyhedron_item(pRemesh); - reco_item->setName(tr("%1 (poisson)").arg(pts_item->name())); - reco_item->setColor(Qt::lightGray); - scene->addItem(reco_item); - } - else if(smRemesh) + if(smRemesh) { // Add polyhedron to scene Scene_surface_mesh_item* reco_item = new Scene_surface_mesh_item(smRemesh); @@ -1295,28 +1276,10 @@ void Polyhedron_demo_surface_reconstruction_plugin::poisson_reconstruction // Reconstruct point set as a polyhedron - Polyhedron* pRemesh = NULL; SMesh* smRemesh= NULL; smRemesh = poisson_reconstruct_sm(*points, sm_angle, sm_radius, sm_distance, sm_solver, use_two_passes, do_not_fill_holes); - if(pRemesh) - { - // Add polyhedron to scene - Scene_polyhedron_item* new_item = new Scene_polyhedron_item(pRemesh); - new_item->setName(tr("%1 Poisson (%2 %3 %4)") - .arg(point_set_item->name()) - .arg(sm_angle) - .arg(sm_radius) - .arg(sm_distance)); - new_item->setColor(Qt::lightGray); - scene->addItem(new_item); - - - // Hide point set - point_set_item->setVisible(false); - scene->itemChanged(index); - } - else if(smRemesh) + if(smRemesh) { // Add polyhedron to scene Scene_surface_mesh_item* new_item = new Scene_surface_mesh_item(smRemesh); diff --git a/Polyhedron/demo/Polyhedron/Plugins/Point_set/Surface_reconstruction_plugin_impl.cpp b/Polyhedron/demo/Polyhedron/Plugins/Point_set/Surface_reconstruction_plugin_impl.cpp index 37ff02a5cc1..16e090f5b00 100644 --- a/Polyhedron/demo/Polyhedron/Plugins/Point_set/Surface_reconstruction_plugin_impl.cpp +++ b/Polyhedron/demo/Polyhedron/Plugins/Point_set/Surface_reconstruction_plugin_impl.cpp @@ -23,7 +23,6 @@ #include #include "Kernel_type.h" -#include "Polyhedron_type.h" #include "SMesh_type.h" #include "Scene_points_with_normal_item.h" @@ -243,26 +242,6 @@ bool poisson_reconstruct(FaceGraph* graph, return true; } -Polyhedron* poisson_reconstruct_polyhedron(Point_set& points, - Kernel::FT sm_angle, // Min triangle angle (degrees). - Kernel::FT sm_radius, // Max triangle size w.r.t. point set average spacing. - Kernel::FT sm_distance, // Approximation error w.r.t. point set average spacing. - const QString& solver_name, // solver name - bool use_two_passes, - bool do_not_fill_holes) -{ - Polyhedron* res = new Polyhedron; - - if(poisson_reconstruct(res, points, sm_angle, sm_radius, sm_distance, - solver_name, use_two_passes, do_not_fill_holes)) - return res; - else - { - delete res; - return NULL; - } -} - SMesh* poisson_reconstruct_sm(Point_set& points, Kernel::FT sm_angle, // Min triangle angle (degrees). Kernel::FT sm_radius, // Max triangle size w.r.t. point set average spacing. diff --git a/Polyhedron/demo/Polyhedron/Plugins/Subdivision_methods/Subdivision_methods_plugin.cpp b/Polyhedron/demo/Polyhedron/Plugins/Subdivision_methods/Subdivision_methods_plugin.cpp index 999c6801dfe..c5c3067099e 100644 --- a/Polyhedron/demo/Polyhedron/Plugins/Subdivision_methods/Subdivision_methods_plugin.cpp +++ b/Polyhedron/demo/Polyhedron/Plugins/Subdivision_methods/Subdivision_methods_plugin.cpp @@ -8,9 +8,7 @@ #include #include "Messages_interface.h" -#include "Scene_polyhedron_item.h" #include "Scene_surface_mesh_item.h" -#include "Polyhedron_type.h" #include "SMesh_type.h" #include using namespace CGAL::Three; @@ -53,8 +51,7 @@ public: } bool applicable(QAction*) const { - return qobject_cast(scene->item(scene->mainSelectionIndex())) - || qobject_cast(scene->item(scene->mainSelectionIndex())); + return qobject_cast(scene->item(scene->mainSelectionIndex())); } public Q_SLOTS: @@ -94,32 +91,17 @@ void Polyhedron_demo_subdivision_methods_plugin::apply_loop(FaceGraphItem* item, void Polyhedron_demo_subdivision_methods_plugin::on_actionLoop_triggered() { CGAL::Three::Scene_interface::Item_id index = scene->mainSelectionIndex(); - - Scene_polyhedron_item* item = - qobject_cast(scene->item(index)); - - if(!item) - { - Scene_surface_mesh_item* sm_item = - qobject_cast(scene->item(index)); - if(!sm_item) - return; - int nb_steps = QInputDialog::getInt(mw, - QString("Number of Iterations"), - QString("Choose number of iterations"), - 1, - 1); - apply_loop(sm_item, nb_steps); - } - else - { - int nb_steps = QInputDialog::getInt(mw, - QString("Number of Iterations"), - QString("Choose number of iterations"), - 1, - 1); - apply_loop(item, nb_steps); - } + + Scene_surface_mesh_item* sm_item = + qobject_cast(scene->item(index)); + if(!sm_item) + return; + int nb_steps = QInputDialog::getInt(mw, + QString("Number of Iterations"), + QString("Choose number of iterations"), + 1, + 1); + apply_loop(sm_item, nb_steps); } template @@ -140,32 +122,16 @@ void Polyhedron_demo_subdivision_methods_plugin::apply_catmullclark(FaceGraphIte void Polyhedron_demo_subdivision_methods_plugin::on_actionCatmullClark_triggered() { CGAL::Three::Scene_interface::Item_id index = scene->mainSelectionIndex(); - - Scene_polyhedron_item* item = - qobject_cast(scene->item(index)); - - if(!item) - { - Scene_surface_mesh_item* sm_item = - qobject_cast(scene->item(index)); - if(!sm_item) - return; - int nb_steps = QInputDialog::getInt(mw, - QString("Number of Iterations"), - QString("Choose number of iterations"), - 1, - 1); - apply_catmullclark(sm_item, nb_steps); - } - else{ - int nb_steps = QInputDialog::getInt(mw, - QString("Number of Iterations"), - QString("Choose number of iterations"), - 1, - 1); - apply_catmullclark(item, nb_steps); - } - + Scene_surface_mesh_item* sm_item = + qobject_cast(scene->item(index)); + if(!sm_item) + return; + int nb_steps = QInputDialog::getInt(mw, + QString("Number of Iterations"), + QString("Choose number of iterations"), + 1, + 1); + apply_catmullclark(sm_item, nb_steps); } template @@ -187,32 +153,17 @@ void Polyhedron_demo_subdivision_methods_plugin::apply_sqrt3(FaceGraphItem* item void Polyhedron_demo_subdivision_methods_plugin::on_actionSqrt3_triggered() { CGAL::Three::Scene_interface::Item_id index = scene->mainSelectionIndex(); - - Scene_polyhedron_item* item = - qobject_cast(scene->item(index)); - - if(!item) - { - Scene_surface_mesh_item* sm_item = - qobject_cast(scene->item(index)); - if(!sm_item) - return; - int nb_steps = QInputDialog::getInt(mw, - QString("Number of Iterations"), - QString("Choose number of iterations"), - 1, - 1); - apply_sqrt3(sm_item, nb_steps); - } - else{ - int nb_steps = QInputDialog::getInt(mw, - QString("Number of Iterations"), - QString("Choose number of iterations"), - 1, - 1); - apply_sqrt3(item, nb_steps); - } - + Scene_surface_mesh_item* sm_item = + qobject_cast(scene->item(index)); + if(!sm_item) + return; + int nb_steps = QInputDialog::getInt(mw, + QString("Number of Iterations"), + QString("Choose number of iterations"), + 1, + 1); + apply_sqrt3(sm_item, nb_steps); + } template @@ -235,30 +186,17 @@ void Polyhedron_demo_subdivision_methods_plugin::on_actionDooSabin_triggered() { CGAL::Three::Scene_interface::Item_id index = scene->mainSelectionIndex(); - Scene_polyhedron_item* item = - qobject_cast(scene->item(index)); - - if(!item) - { - Scene_surface_mesh_item* sm_item = - qobject_cast(scene->item(index)); - if(!sm_item) - return; - int nb_steps = QInputDialog::getInt(mw, - QString("Number of Iterations"), - QString("Choose number of iterations"), - 1, - 1); - apply_doosabin(sm_item, nb_steps); - } - else{ - int nb_steps = QInputDialog::getInt(mw, - QString("Number of Iterations"), - QString("Choose number of iterations"), - 1, - 1); - apply_doosabin(item, nb_steps); - } + Scene_surface_mesh_item* sm_item = + qobject_cast(scene->item(index)); + if(!sm_item) + return; + int nb_steps = QInputDialog::getInt(mw, + QString("Number of Iterations"), + QString("Choose number of iterations"), + 1, + 1); + apply_doosabin(sm_item, nb_steps); + } #include "Subdivision_methods_plugin.moc" diff --git a/Polyhedron/demo/Polyhedron/Plugins/Surface_mesh/CMakeLists.txt b/Polyhedron/demo/Polyhedron/Plugins/Surface_mesh/CMakeLists.txt index c4acbb2f89f..f96ccf4425f 100644 --- a/Polyhedron/demo/Polyhedron/Plugins/Surface_mesh/CMakeLists.txt +++ b/Polyhedron/demo/Polyhedron/Plugins/Surface_mesh/CMakeLists.txt @@ -24,9 +24,9 @@ qt5_wrap_ui( mesh_simplificationUI_FILES Mesh_simplification_dialog.ui) polyhedron_demo_plugin(mesh_simplification_plugin Mesh_simplification_plugin ${mesh_simplificationUI_FILES}) target_link_libraries(mesh_simplification_plugin PUBLIC scene_surface_mesh_item scene_selection_item) -#qt5_wrap_ui( remeshingUI_FILES Remeshing_dialog.ui) -#polyhedron_demo_plugin(offset_meshing_plugin Offset_meshing_plugin ${remeshingUI_FILES}) -#target_link_libraries(offset_meshing_plugin PUBLIC scene_polyhedron_item scene_polygon_soup_item ) +qt5_wrap_ui( remeshingUI_FILES Remeshing_dialog.ui) +polyhedron_demo_plugin(offset_meshing_plugin Offset_meshing_plugin ${remeshingUI_FILES}) +target_link_libraries(offset_meshing_plugin PUBLIC scene_surface_mesh_item scene_polygon_soup_item ) qt5_wrap_ui( shortestPathUI_FILES Shortest_path_widget.ui ) polyhedron_demo_plugin(shortest_path_plugin Shortest_path_plugin ${shortestPathUI_FILES}) diff --git a/Polyhedron/demo/Polyhedron/Plugins/Surface_mesh/Mesh_plane_detection_plugin.cpp b/Polyhedron/demo/Polyhedron/Plugins/Surface_mesh/Mesh_plane_detection_plugin.cpp index 64ba417428f..b6c933dc7d8 100644 --- a/Polyhedron/demo/Polyhedron/Plugins/Surface_mesh/Mesh_plane_detection_plugin.cpp +++ b/Polyhedron/demo/Polyhedron/Plugins/Surface_mesh/Mesh_plane_detection_plugin.cpp @@ -2,7 +2,6 @@ #include #include "Scene_surface_mesh_item.h" -#include "Polyhedron_type.h" #include "Scene.h" #include "Color_map.h" @@ -95,12 +94,12 @@ private: continue; class_index++; label_region[static_cast(*f)] = class_index; - double area = PMP::face_area (*f, mesh, PMP::parameters::geom_traits(Kernel())); + double area = PMP::face_area (*f, mesh, PMP::parameters::geom_traits(EPICK())); //characteristics of the seed - Kernel::Vector_3 normal_seed = PMP::compute_face_normal (*f, mesh, PMP::parameters::geom_traits(Kernel())); - Kernel::Point_3 pt_seed = mesh.point(target(halfedge(*f, mesh), mesh)); - Kernel::Plane_3 optimal_plane(pt_seed, normal_seed); + EPICK::Vector_3 normal_seed = PMP::compute_face_normal (*f, mesh, PMP::parameters::geom_traits(EPICK())); + EPICK::Point_3 pt_seed = mesh.point(target(halfedge(*f, mesh), mesh)); + EPICK::Plane_3 optimal_plane(pt_seed, normal_seed); // Kernel::Plane_3 optimal_plane = f->plane(); //initialization containers @@ -130,15 +129,15 @@ private: std::size_t neighbor_index = static_cast(neighbor); if (label_region[neighbor_index] == 0) { - Kernel::Vector_3 normal - = PMP::compute_face_normal (neighbor, mesh, PMP::parameters::geom_traits(Kernel())); + EPICK::Vector_3 normal + = PMP::compute_face_normal (neighbor, mesh, PMP::parameters::geom_traits(EPICK())); if (std::fabs(normal * optimal_plane.orthogonal_vector()) > angle_max) { label_region[neighbor_index] = class_index; propagation = true; index_container_current_ring.push_back(neighbor_index); - area += PMP::face_area (neighbor, mesh, PMP::parameters::geom_traits(Kernel())); + area += PMP::face_area (neighbor, mesh, PMP::parameters::geom_traits(EPICK())); } } } diff --git a/Polyhedron/demo/Polyhedron/Plugins/Surface_mesh/Mesh_segmentation_plugin.cpp b/Polyhedron/demo/Polyhedron/Plugins/Surface_mesh/Mesh_segmentation_plugin.cpp index b6b5b983269..ee789419d8a 100644 --- a/Polyhedron/demo/Polyhedron/Plugins/Surface_mesh/Mesh_segmentation_plugin.cpp +++ b/Polyhedron/demo/Polyhedron/Plugins/Surface_mesh/Mesh_segmentation_plugin.cpp @@ -3,8 +3,6 @@ #include "ui_Mesh_segmentation_widget.h" #include "Scene_surface_mesh_item.h" -#include "Scene_polyhedron_item.h" -#include "Polyhedron_type.h" #include "Scene.h" #include "Color_map.h" @@ -23,11 +21,6 @@ #include #include -void set_color_read_only(Scene_polyhedron_item* poly) -{ poly->set_color_vector_read_only(true); } - -void set_color_read_only(Scene_surface_mesh_item* ) -{} template struct FaceGraph_with_id_to_vector_property_map @@ -68,7 +61,6 @@ class Polyhedron_demo_mesh_segmentation_plugin : Q_PLUGIN_METADATA(IID "com.geometryfactory.PolyhedronDemo.PluginInterface/1.0") private: - typedef std::map > Item_sdf_map; typedef std::map > SM_item_sdf_map; public: @@ -77,9 +69,7 @@ public: } bool applicable(QAction*) const { - return - qobject_cast(scene->item(scene->mainSelectionIndex())) - || qobject_cast(scene->item(scene->mainSelectionIndex())); + return qobject_cast(scene->item(scene->mainSelectionIndex())); } void init(QMainWindow* mainWindow, CGAL::Three::Scene_interface* scene_interface, Messages_interface*) { @@ -110,19 +100,6 @@ public: { dock_widget->hide(); } - - void check_and_set_ids(Polyhedron *face_graph) - { - Polyhedron::Facet_iterator a_facet = face_graph->facets_begin(); - Polyhedron::Facet_iterator another_facet = ++face_graph->facets_begin(); - if(a_facet->id() != another_facet->id()) { return; } // ids are OK - std::size_t facet_id = 0; - for(Polyhedron::Facet_iterator facet_it = face_graph->facets_begin(); - facet_it != face_graph->facets_end(); ++facet_it, ++facet_id) - { - facet_it->id() = facet_id; - } - } void check_and_set_ids(SMesh* face_graph) { face_graph->collect_garbage(); @@ -152,15 +129,8 @@ private: std::vector color_map_sdf; std::vector color_map_segmentation; - Item_sdf_map item_sdf_map; SM_item_sdf_map sm_item_sdf_map; - - Item_sdf_map& get_sdf_map(Scene_polyhedron_item*) - { - return item_sdf_map; - } - SM_item_sdf_map& get_sdf_map(Scene_surface_mesh_item*) { return sm_item_sdf_map; @@ -203,9 +173,6 @@ void Polyhedron_demo_mesh_segmentation_plugin::init_color_map_segmentation() void Polyhedron_demo_mesh_segmentation_plugin::itemAboutToBeDestroyed(CGAL::Three::Scene_item* scene_item) { - if(Scene_polyhedron_item* item = qobject_cast(scene_item)) { - item_sdf_map.erase(item); - } if(Scene_surface_mesh_item* sm_item = qobject_cast(scene_item)) { sm_item_sdf_map.erase(sm_item); } @@ -248,8 +215,6 @@ void Polyhedron_demo_mesh_segmentation_plugin::apply_SDF_button_clicked(Facegrap std::cout << "ok (" << time.elapsed() << " ms)" << std::endl; std::cout << "SDF computation is completed. Min-SDF : " << min_max_sdf.first << " " "Max-SDF : " << min_max_sdf.second << std::endl; - - set_color_read_only(pair->first); colorize_sdf(pair->first, sdf_pmap, pair->first->color_vector()); pair->first->setName(tr("(SDF-%1-%2)").arg(number_of_rays).arg(ui_widget.Cone_angle_spin_box->value())); @@ -271,13 +236,6 @@ void Polyhedron_demo_mesh_segmentation_plugin::apply_SDF_button_clicked(Facegrap void Polyhedron_demo_mesh_segmentation_plugin::on_SDF_button_clicked() { CGAL::Three::Scene_interface::Item_id index = scene->mainSelectionIndex(); - Scene_polyhedron_item* item = qobject_cast(scene->item(index)); - if(item) - { - apply_SDF_button_clicked(item); - return; - } - Scene_surface_mesh_item* sm_item = qobject_cast(scene->item(index)); if(sm_item) apply_SDF_button_clicked(sm_item); @@ -335,7 +293,6 @@ void Polyhedron_demo_mesh_segmentation_plugin::apply_Partition_button_clicked(Fa ,sdf_pmap, segment_pmap, number_of_clusters, smoothness, extract_segments); std::cout << "ok (" << time.elapsed() << " ms)" << std::endl; std::cout << "Segmentation is completed. Number of segments : " << nb_segments << std::endl; - set_color_read_only(pair->first); colorize_segmentation(pair->first, segment_pmap, pair->first->color_vector()); pair->first->setName(tr("(Segmentation-%1-%2)").arg(number_of_clusters).arg(smoothness)); @@ -358,11 +315,6 @@ void Polyhedron_demo_mesh_segmentation_plugin::apply_Partition_button_clicked(Fa void Polyhedron_demo_mesh_segmentation_plugin::on_Partition_button_clicked() { CGAL::Three::Scene_interface::Item_id index = scene->mainSelectionIndex(); - Scene_polyhedron_item* item = qobject_cast(scene->item(index)); - if(item) { - apply_Partition_button_clicked(item); - return; - } Scene_surface_mesh_item* sm_item = qobject_cast(scene->item(index)); if(sm_item) apply_Partition_button_clicked(sm_item); diff --git a/Polyhedron/demo/Polyhedron/Plugins/Surface_mesh/Mesh_simplification_plugin.cpp b/Polyhedron/demo/Polyhedron/Plugins/Surface_mesh/Mesh_simplification_plugin.cpp index e320a2198e0..1bff2f5dfc2 100644 --- a/Polyhedron/demo/Polyhedron/Plugins/Surface_mesh/Mesh_simplification_plugin.cpp +++ b/Polyhedron/demo/Polyhedron/Plugins/Surface_mesh/Mesh_simplification_plugin.cpp @@ -1,12 +1,6 @@ #include -#ifdef USE_SURFACE_MESH #include "Scene_surface_mesh_item.h" -#else -#include "Scene_polyhedron_item.h" -#include "Polyhedron_type.h" -#endif - #include "Scene_polyhedron_selection_item.h" #include @@ -25,11 +19,7 @@ #include "ui_Mesh_simplification_dialog.h" -#ifdef USE_SURFACE_MESH typedef Scene_surface_mesh_item Scene_facegraph_item; -#else -typedef Scene_facegraph_item Scene_facegraph_item; -#endif typedef Scene_facegraph_item::Face_graph FaceGraph; class Custom_stop_predicate @@ -195,18 +185,14 @@ void Polyhedron_demo_mesh_simplification_plugin::on_actionSimplify_triggered() if (poly_item != NULL) { poly_item->invalidateOpenGLBuffers(); -#ifdef USE_SURFACE_MESH poly_item->polyhedron()->collect_garbage(); -#endif } else { -#ifdef USE_SURFACE_MESH selection_item->polyhedron_item()->polyhedron()->collect_garbage(); -#endif - selection_item->poly_item_changed(); - selection_item->changed_with_poly_item(); - selection_item->invalidateOpenGLBuffers(); + selection_item->poly_item_changed(); + selection_item->changed_with_poly_item(); + selection_item->invalidateOpenGLBuffers(); } scene->itemChanged(index); diff --git a/Polyhedron/demo/Polyhedron/Plugins/Surface_mesh/Offset_meshing_plugin.cpp b/Polyhedron/demo/Polyhedron/Plugins/Surface_mesh/Offset_meshing_plugin.cpp index 97319141ded..ce70f74ddb2 100644 --- a/Polyhedron/demo/Polyhedron/Plugins/Surface_mesh/Offset_meshing_plugin.cpp +++ b/Polyhedron/demo/Polyhedron/Plugins/Surface_mesh/Offset_meshing_plugin.cpp @@ -9,7 +9,6 @@ #include #include #include -#include "Scene_polyhedron_item.h" #include "Scene_surface_mesh_item.h" #include "Scene_polygon_soup_item.h" #include @@ -78,11 +77,6 @@ private: } //end of CGAL namespace -Scene_polyhedron_item* make_item(Polyhedron* poly) -{ - return new Scene_polyhedron_item(poly); -} - Scene_surface_mesh_item* make_item(SMesh* sm) { return new Scene_surface_mesh_item(sm); @@ -197,8 +191,7 @@ public: bool applicable(QAction*) const { Scene_item* item = scene->item(scene->mainSelectionIndex()); - return qobject_cast(item) || - qobject_cast(item); + return qobject_cast(item); } QList actions() const { @@ -217,22 +210,11 @@ void Polyhedron_demo_offset_meshing_plugin::offset_meshing() { const CGAL::Three::Scene_interface::Item_id index = scene->mainSelectionIndex(); Scene_item* item = scene->item(index); - - Scene_polyhedron_item* poly_item = - qobject_cast(item); Scene_surface_mesh_item* sm_item = qobject_cast(item); - Polyhedron* pMesh = NULL; SMesh* sMesh = NULL; - if(poly_item) - { - pMesh = poly_item->polyhedron(); - - if(!pMesh) - return; - } - else if(sm_item) +if(sm_item) { sMesh = sm_item->face_graph(); if(!sMesh) @@ -289,23 +271,14 @@ void Polyhedron_demo_offset_meshing_plugin::offset_meshing() << std::boolalpha << std::endl; CGAL::Three::Scene_item* new_item; - if(pMesh) - new_item = cgal_off_meshing(mw, - pMesh, - offset_value, - angle, - sizing, - approx, - tag_index); - else - new_item = cgal_off_meshing(mw, - sMesh, - offset_value, - angle, - sizing, - approx, - tag_index); - + new_item = cgal_off_meshing(mw, + sMesh, + offset_value, + angle, + sizing, + approx, + tag_index); + if(new_item) { new_item->setName(tr("%1 offset %5 (%2 %3 %4)") @@ -320,7 +293,7 @@ void Polyhedron_demo_offset_meshing_plugin::offset_meshing() item->setVisible(false); scene->itemChanged(index); } - + QApplication::restoreOverrideCursor(); } diff --git a/Polyhedron/demo/Polyhedron/Plugins/Surface_mesh/Parameterization_plugin.cpp b/Polyhedron/demo/Polyhedron/Plugins/Surface_mesh/Parameterization_plugin.cpp index 6796f06dcec..bb823d6da02 100644 --- a/Polyhedron/demo/Polyhedron/Plugins/Surface_mesh/Parameterization_plugin.cpp +++ b/Polyhedron/demo/Polyhedron/Plugins/Surface_mesh/Parameterization_plugin.cpp @@ -2,24 +2,11 @@ #include #include #include -#ifdef USE_SURFACE_MESH + #include "Scene_surface_mesh_item.h" #include "Scene_textured_surface_mesh_item.h" #include "Scene_polyhedron_selection_item.h" #include "SMesh_type.h" -#else -#include "Scene_polyhedron_item.h" -#include "Scene_textured_polyhedron_item.h" -#include "Scene_polyhedron_selection_item.h" -#include "Textured_polyhedron_type.h" -#include "Polyhedron_type.h" -#include -#include -#include -#include -#include -#include -#endif #include #include #include "Scene.h" @@ -67,7 +54,6 @@ #include "ui_ARAP_dialog.h" #include "ui_OTE_dialog.h" -#ifdef USE_SURFACE_MESH typedef Scene_surface_mesh_item Scene_facegraph_item; typedef Scene_textured_surface_mesh_item Scene_textured_facegraph_item; typedef SMesh Textured_face_graph; @@ -75,16 +61,6 @@ typedef SMesh Base_face_graph; typedef SMesh Face_graph; typedef EPICK Traits; -#else -typedef Scene_polyhedron_item Scene_facegraph_item; -typedef Scene_textured_polyhedron_item Scene_textured_facegraph_item; -typedef Textured_polyhedron Textured_face_graph; -typedef Textured_face_graph::Base Base_face_graph; -typedef Polyhedron Face_graph; -typedef Kernel Traits; - -#endif - namespace SMP = CGAL::Surface_mesh_parameterization; typedef boost::unordered_set::face_descriptor> Component; @@ -290,17 +266,15 @@ public : pen.setWidth(0); painter->setPen(pen); painter->setBrush(brush); -#ifdef USE_SURFACE_MESH SMesh::Property_map > uv; uv = graph->add_property_map >("h:uv",std::make_pair(0.0f,0.0f)).first; -#endif for( Component::iterator fi = components->at(m_current_component).begin(); fi != components->at(m_current_component).end(); ++fi) { boost::graph_traits::face_descriptor f(*fi); -#ifdef USE_SURFACE_MESH + QPointF points[3]; boost::graph_traits::halfedge_descriptor h = halfedge(f, *graph);; points[0] = QPointF(get(uv, h).first, get(uv, h).second); @@ -308,13 +282,6 @@ uv = graph->add_property_map >("h:uv points[1] = QPointF(get(uv, h).first, get(uv, h).second); h = next(next(halfedge(f, *graph), *graph), *graph); points[2] = QPointF(get(uv, h).first, get(uv, h).second); -#else - QPointF points[3]; - points[0] = QPointF(halfedge(f, *graph)->u(), f->halfedge()->v()); - points[1] = QPointF(halfedge(f, *graph)->next()->u(), f->halfedge()->next()->v()); - points[2] = QPointF(halfedge(f, *graph)->next()->next()->u(), f->halfedge()->next()->next()->v()); -#endif - painter->drawPolygon(points,3); } } @@ -385,26 +352,14 @@ public: autoConnectActions(); Q_FOREACH(QAction *action, _actions) action->setProperty("subMenuName", - #ifdef USE_SURFACE_MESH "Triangulated Surface Mesh Parameterization" - #else - "Triangulated Surface Mesh Parameterization for Polyhedron" - #endif ); dock_widget = new QDockWidget( - #ifdef USE_SURFACE_MESH - "UVMapping for Surface Mesh" - #else - "UVMapping for Polyhedron" - #endif + "UVMapping " , mw); ui_widget.setupUi(dock_widget); dock_widget->setWindowTitle(tr( - #ifdef USE_SURFACE_MESH - "UVMapping for Surface Mesh" - #else - "UVMapping for Polyhedron" - #endif + "UVMapping " )); graphics_scene = new QGraphicsScene(dock_widget); ui_widget.graphicsView->setScene(graphics_scene); @@ -592,9 +547,6 @@ void Polyhedron_demo_parameterization_plugin::parameterize(const Parameterizatio messages->error("Selected item has no valid polyhedron."); return; } -#ifndef USE_SURFACE_MESH - pMesh->normalize_border(); -#endif Scene_polyhedron_selection_item* sel_item = NULL; bool is_seamed = false; Q_FOREACH(CGAL::Three::Scene_interface::Item_id id, scene->selectionIndices()) @@ -637,72 +589,7 @@ void Polyhedron_demo_parameterization_plugin::parameterize(const Parameterizatio QTime time; time.start(); // add textured polyhedon to the scene - #ifndef USE_SURFACE_MESH - Textured_polyhedron *tpMesh = new Textured_polyhedron(); - Textured_polyhedron_builder builder; - builder.run(*pMesh,*tpMesh); - tpMesh->compute_normals(); - tpMesh->normalize_border(); - Base_face_graph tMesh = static_cast(*tpMesh); - - CGAL::set_halfedgeds_items_id(tMesh); - std::vector mark(tpMesh->size_of_halfedges()/2,false); - std::vector seam_edges; - if(is_seamed) - { - //create a textured_polyhedron edges selection from the ids of the corresponding vertices - BOOST_FOREACH(P_edge_descriptor ed, sel_item->selected_edges) - { - Polyhedron::Vertex_handle a(source(ed, *pMesh)), b(target(ed, *pMesh)); - - for(Textured_polyhedron::Edge_iterator it = - tMesh.edges_begin(); it != tMesh.edges_end(); - ++it) - { - Textured_polyhedron::Vertex_handle ta(source(it, tMesh)), tb(target(it, tMesh)); - if((ta->id() == a->id() && tb->id() == b->id()) - || - (ta->id() == b->id() && tb->id() == a->id())) - { - T_edge_descriptor ted(it); - seam_edges.push_back(ted); - break; - } - } - - } - qDebug() << sel_item->selected_edges.size() << ", " << seam_edges.size(); - //fill seam mesh pmaps - BOOST_FOREACH(T_edge_descriptor ed, seam_edges) - { - T_halfedge_descriptor hd = halfedge(ed, tMesh); - T_vertex_descriptor svd(source(hd, tMesh)), tvd(target(hd, tMesh)); - if(!is_border(ed, tMesh)) - { - put(seam_edge_pm, ed, true); - put(seam_vertex_pm, svd, true); - put(seam_vertex_pm, tvd, true); - mark[hd->id()/2] = true; - } - } - } - - // map the cones from the selection plugin to the textured polyhedron - boost::unordered_set unordered_cones; - if(method == PARAM_OTE) { - BOOST_FOREACH(P_vertex_descriptor vd, sel_item->selected_vertices) { - Polyhedron::Vertex_handle pvd(vd); - Textured_polyhedron::Vertex_iterator it = tMesh.vertices_begin(), - end = tMesh.vertices_end(); - for(; it!=end; ++it) { - Textured_polyhedron::Vertex_handle tvd(it); - if(it->id() == pvd->id()) { - unordered_cones.insert(tvd); - } - } - } - } -#else + // \todo for surface_mesh Base_face_graph tMesh = *pMesh; std::vector mark(num_halfedges(tMesh)/2,false); @@ -766,7 +653,6 @@ void Polyhedron_demo_parameterization_plugin::parameterize(const Parameterizatio } } } -#endif Seam_mesh sMesh(tMesh, seam_edge_pm, seam_vertex_pm); sMesh.set_seam_edges_number(static_cast(seam_edges.size())); @@ -1011,30 +897,7 @@ void Polyhedron_demo_parameterization_plugin::parameterize(const Parameterizatio QApplication::restoreOverrideCursor(); QPointF min(FLT_MAX, FLT_MAX), max(-FLT_MAX, -FLT_MAX); -#ifndef USE_SURFACE_MESH - Base_face_graph::Halfedge_iterator it1; - Textured_polyhedron::Halfedge_iterator it2; - for(it1 = tMesh.halfedges_begin(), - it2 = tpMesh->halfedges_begin(); - it1 != tMesh.halfedges_end()&& - it2 != tpMesh->halfedges_end(); - ++it1, ++it2) - { - Seam_mesh::halfedge_descriptor hd(it1); - FT u = uv_pm[target(hd, sMesh)].x(); - FT v = uv_pm[target(hd, sMesh)].y(); - it2->u() = u; - it2->v() = v; - if(umax.x()) - max.setX(u); - if(vmax.y()) - max.setY(v); - } -#else + SMesh::Property_map > uv; uv = tMesh.add_property_map >("h:uv",std::make_pair(0.0f,0.0f)).first; Base_face_graph::Halfedge_iterator it; @@ -1056,12 +919,10 @@ void Polyhedron_demo_parameterization_plugin::parameterize(const Parameterizatio max.setY(v); } -#endif - Components* components = new Components(0); components->resize(number_of_components); boost::graph_traits::face_iterator bfit; -#ifdef USE_SURFACE_MESH + for(bfit = faces(tMesh).begin(); bfit != faces(tMesh).end(); ++bfit) @@ -1072,19 +933,7 @@ void Polyhedron_demo_parameterization_plugin::parameterize(const Parameterizatio Scene_textured_facegraph_item* new_item = new Scene_textured_facegraph_item(tMesh); UVItem *projection = new UVItem(components,new_item->textured_face_graph(), uv_borders, QRectF(min, max)); projection->set_item_name(new_item_name); -#else - boost::graph_traits::face_iterator tfit; - for(bfit = faces(tMesh).begin(), tfit = faces(*tpMesh).begin(); - bfit != faces(tMesh).end() && tfit != faces(*tpMesh).end(); - ++bfit, ++tfit) - { - components->at(fccmap[*bfit]).insert(*tfit); - } - UVItem *projection = new UVItem(components,tpMesh, uv_borders, QRectF(min, max)); - projection->set_item_name(new_item_name); - Scene_textured_facegraph_item* new_item = new Scene_textured_facegraph_item(tpMesh); -#endif new_item->setName(new_item_name); new_item->setColor(Qt::white); new_item->setRenderingMode(poly_item->renderingMode()); diff --git a/Polyhedron/demo/Polyhedron/Plugins/Surface_mesh/Scene_polyhedron_shortest_path_item.h b/Polyhedron/demo/Polyhedron/Plugins/Surface_mesh/Scene_polyhedron_shortest_path_item.h index 5996c22136b..3856584bd99 100644 --- a/Polyhedron/demo/Polyhedron/Plugins/Surface_mesh/Scene_polyhedron_shortest_path_item.h +++ b/Polyhedron/demo/Polyhedron/Plugins/Surface_mesh/Scene_polyhedron_shortest_path_item.h @@ -6,7 +6,6 @@ #include #include "Messages_interface.h" -//#include "Polyhedron_type.h" #include "Kernel_type.h" #include "opengl_tools.h" diff --git a/Polyhedron/demo/Polyhedron/Plugins/Surface_mesh/Shortest_path_plugin.cpp b/Polyhedron/demo/Polyhedron/Plugins/Surface_mesh/Shortest_path_plugin.cpp index 8ecc9053a6b..b9995cba4f1 100644 --- a/Polyhedron/demo/Polyhedron/Plugins/Surface_mesh/Shortest_path_plugin.cpp +++ b/Polyhedron/demo/Polyhedron/Plugins/Surface_mesh/Shortest_path_plugin.cpp @@ -2,15 +2,9 @@ #include #include -#ifdef USE_SURFACE_MESH #include "Scene_surface_mesh_item.h" -#else -#include "Scene_polyhedron_item.h" -#endif - #include "Scene_polyhedron_shortest_path_item.h" #include "Messages_interface.h" -#include "Polyhedron_type.h" #include "Scene.h" #include "ui_Shortest_path_widget.h" @@ -27,11 +21,7 @@ #include #include -#ifdef USE_SURFACE_MESH typedef Scene_surface_mesh_item Scene_facegraph_item; -#else -typedef Scene_polyhedron_item Scene_facegraph_item; -#endif typedef Scene_facegraph_item::Face_graph FaceGraph; using namespace CGAL::Three; @@ -90,22 +80,14 @@ public: this->m_messages = messages; dock_widget = new QDockWidget( - #ifdef USE_SURFACE_MESH - "Shortest Path for Surface Mesh" - #else - "Shortest Path for Polyhedron" - #endif + "Shortest Path" , mw); dock_widget->setVisible(false); ui_widget.setupUi(dock_widget); dock_widget->setWindowTitle(tr( - #ifdef USE_SURFACE_MESH - "Shortest Path for Surface Mesh" - #else - "Shortest Path for Polyhedron" - #endif + "Shortest Path " )); addDockWidget(dock_widget); @@ -113,11 +95,7 @@ public: connect(ui_widget.Primitives_type_combo_box, SIGNAL(currentIndexChanged(int)), this, SLOT(on_Primitives_type_combo_box_changed(int))); actionMakeShortestPaths = new QAction( - #ifdef USE_SURFACE_MESH - "Make Shortest Path for Surface Mesh" - #else - "Make Shortest Path for Polyhedron" - #endif + "Make Shortest Path" , this->mw); actionMakeShortestPaths->setProperty("subMenuName", "Triangulated Surface Mesh Shortest Paths"); actionMakeShortestPaths->setObjectName("actionMakeShortestPaths"); @@ -312,16 +290,7 @@ void Polyhedron_demo_shortest_path_plugin::check_and_set_ids(FaceGraph* polyhedr vertex_iterator testVertex2 = ++vertices(*polyhedron).begin(); if(get(vimap, *testVertex1) == get(vimap, *testVertex2)) { -#ifdef USE_SURFACE_MESH polyhedron->collect_garbage(); -#else - std::size_t vertexId = 0; - for(Polyhedron::Vertex_iterator currentVertex = polyhedron->vertices_begin(); - currentVertex != polyhedron->vertices_end(); ++currentVertex, ++vertexId) - { - currentVertex->id() = vertexId; - } -#endif } boost::property_map::type himap = get(boost::halfedge_index, *polyhedron); @@ -331,16 +300,7 @@ void Polyhedron_demo_shortest_path_plugin::check_and_set_ids(FaceGraph* polyhedr if (get(himap, *testHalfedge1) == get(himap, *testHalfedge2)) { -#ifdef USE_SURFACE_MESH polyhedron->collect_garbage(); -#else - std::size_t halfedgeId = 0; - for(Polyhedron::Halfedge_iterator currentHalfedge = polyhedron->halfedges_begin(); - currentHalfedge != polyhedron->halfedges_end(); ++currentHalfedge, ++halfedgeId) - { - currentHalfedge->id() = halfedgeId; - } -#endif } face_iterator testFacet1 = faces(*polyhedron).begin(); @@ -350,16 +310,7 @@ void Polyhedron_demo_shortest_path_plugin::check_and_set_ids(FaceGraph* polyhedr if (get(fimap, *testFacet1) == get(fimap, *testFacet2)) { -#ifdef USE_SURFACE_MESH polyhedron->collect_garbage(); -#else - std::size_t facetId = 0; - for(Polyhedron::Facet_iterator currentFacet = polyhedron->facets_begin(); - currentFacet != polyhedron->facets_end(); ++currentFacet, ++facetId) - { - currentFacet->id() = facetId; - } -#endif } } diff --git a/Polyhedron/demo/Polyhedron/Plugins/Surface_mesh_deformation/Edit_polyhedron_plugin.cpp b/Polyhedron/demo/Polyhedron/Plugins/Surface_mesh_deformation/Edit_polyhedron_plugin.cpp index 730d6447313..5e09f79580f 100644 --- a/Polyhedron/demo/Polyhedron/Plugins/Surface_mesh_deformation/Edit_polyhedron_plugin.cpp +++ b/Polyhedron/demo/Polyhedron/Plugins/Surface_mesh_deformation/Edit_polyhedron_plugin.cpp @@ -1,10 +1,6 @@ #include #include -#ifdef USE_SURFACE_MESH #include "Scene_surface_mesh_item.h" -#else -#include "Scene_polyhedron_item.h" -#endif #include "Scene_edit_polyhedron_item.h" #include "Scene_polyhedron_selection_item.h" @@ -17,11 +13,7 @@ #include "ui_Deform_mesh.h" -#ifdef USE_SURFACE_MESH typedef Scene_surface_mesh_item Scene_facegraph_item; -#else -typedef Scene_polyhedron_item Scene_facegraph_item; -#endif using namespace CGAL::Three; class Polyhedron_demo_edit_polyhedron_plugin : @@ -104,19 +96,9 @@ bool Polyhedron_demo_edit_polyhedron_plugin::applicable(QAction*) const { Scene_edit_polyhedron_item* edit_item = qobject_cast(scene->item(i)); if(!edit_item) return false; - if(edit_item->poly_item()) + if (qobject_cast(edit_item->sm_item())) { - if (qobject_cast(edit_item->poly_item())) - { - return true; - } - } - else - { - if (qobject_cast(edit_item->sm_item())) - { - return true; - } + return true; } } return false; @@ -127,11 +109,7 @@ void Polyhedron_demo_edit_polyhedron_plugin::init(QMainWindow* mainWindow, CGAL: mw = mainWindow; scene = scene_interface; actionDeformation = new QAction( - #ifdef USE_SURFACE_MESH "Surface Mesh Deformation" - #else - " Polyhedron Deformation" - #endif , mw); actionDeformation->setProperty("subMenuName", "Triangulated Surface Mesh Deformation"); actionDeformation->setObjectName("actionDeformation"); @@ -147,21 +125,13 @@ void Polyhedron_demo_edit_polyhedron_plugin::init(QMainWindow* mainWindow, CGAL: ////////////////// Construct widget ///////////////////////////// // First time, construct docking window dock_widget = new QDockWidget( - #ifdef USE_SURFACE_MESH "Surface Mesh Deformation" - #else - " Polyhedron Deformation" - #endif , mw); dock_widget->setVisible(false); // do not show at the beginning ui_widget.setupUi(dock_widget); dock_widget->setWindowTitle(tr( - #ifdef USE_SURFACE_MESH "Surface Mesh Deformation" - #else - " Polyhedron Deformation" - #endif )); mw->addDockWidget(Qt::LeftDockWidgetArea, dock_widget); @@ -227,6 +197,7 @@ void Polyhedron_demo_edit_polyhedron_plugin::on_NextCtrlVertPushButton_clicked() if(!edit_item) return; // the selected item is not of the right type edit_item->next_ctrl_vertices_group(); + edit_item->invalidateOpenGLBuffers(); scene->itemChanged(edit_item); // for repaint } void Polyhedron_demo_edit_polyhedron_plugin::on_SelectAllVerticesPushButton_clicked() @@ -424,7 +395,7 @@ void Polyhedron_demo_edit_polyhedron_plugin::dock_widget_visibility_changed(bool if (CGAL::is_degenerate_triangle_face(fd, *poly_item->face_graph(), get(boost::vertex_point, - *poly_item->face_graph()), Kernel())) + *poly_item->face_graph()), EPICK())) { is_valid = false; break; @@ -438,7 +409,6 @@ void Polyhedron_demo_edit_polyhedron_plugin::dock_widget_visibility_changed(bool break; } last_RM = poly_item->renderingMode(); - poly_item->update_halfedge_indices(); if(!selection_item) convert_to_edit_facegraph(i, poly_item); else @@ -515,11 +485,7 @@ Scene_facegraph_item* Polyhedron_demo_edit_polyhedron_plugin::convert_to_plain_facegraph(Item_id i, Scene_edit_polyhedron_item* edit_item) { -#ifdef USE_SURFACE_MESH Scene_facegraph_item* poly_item = edit_item->to_sm_item(); -#else - Scene_facegraph_item* poly_item = edit_item->to_polyhedron_item(); -#endif scene->replaceItem(i, poly_item); delete edit_item; return poly_item; diff --git a/Polyhedron/demo/Polyhedron/Plugins/Surface_mesh_deformation/Scene_edit_polyhedron_item.cpp b/Polyhedron/demo/Polyhedron/Plugins/Surface_mesh_deformation/Scene_edit_polyhedron_item.cpp index 2b5863bf279..ba20249254f 100644 --- a/Polyhedron/demo/Polyhedron/Plugins/Surface_mesh_deformation/Scene_edit_polyhedron_item.cpp +++ b/Polyhedron/demo/Polyhedron/Plugins/Surface_mesh_deformation/Scene_edit_polyhedron_item.cpp @@ -16,30 +16,12 @@ struct Scene_edit_polyhedron_item_priv { - Scene_edit_polyhedron_item_priv(Scene_polyhedron_item* poly_item, Ui::DeformMesh* ui_widget, QMainWindow* mw, Scene_edit_polyhedron_item* parent) - : ui_widget(ui_widget), - poly_item(poly_item), - sm_item(NULL), - is_rot_free(true), - own_poly_item(true), - k_ring_selector(poly_item, mw, Scene_polyhedron_item_k_ring_selection::Active_handle::VERTEX, true) - { - item = parent; - nb_ROI = 0; - nb_control = 0; - nb_axis = 0; - nb_bbox = 0; - spheres = NULL; - spheres_ctrl = NULL; - need_change = false; - } Scene_edit_polyhedron_item_priv(Scene_surface_mesh_item* sm_item, Ui::DeformMesh* ui_widget, QMainWindow* mw, Scene_edit_polyhedron_item* parent) : ui_widget(ui_widget), - poly_item(NULL), sm_item(sm_item), is_rot_free(true), own_poly_item(true), - k_ring_selector(sm_item, mw, Scene_polyhedron_item_k_ring_selection::Active_handle::VERTEX, true) + k_ring_selector(sm_item, mw, Scene_facegraph_item_k_ring_selection::Active_handle::VERTEX, true) { item = parent; nb_ROI = 0; @@ -52,14 +34,10 @@ struct Scene_edit_polyhedron_item_priv } ~Scene_edit_polyhedron_item_priv() { - if(poly_item) - delete deform_mesh; if(sm_item) delete deform_sm_mesh; if (own_poly_item) { - if(poly_item) - delete poly_item; if(sm_item) delete sm_item; } @@ -115,7 +93,6 @@ struct Scene_edit_polyhedron_item_priv }; Ui::DeformMesh* ui_widget; - Scene_polyhedron_item* poly_item; Scene_surface_mesh_item* sm_item; bool need_change; // For drawing @@ -144,12 +121,8 @@ struct Scene_edit_polyhedron_item_priv mutable Scene_spheres_item* spheres_ctrl; mutable QOpenGLBuffer *in_bu; - Deform_mesh* deform_mesh; Deform_sm_mesh* deform_sm_mesh; - typedef std::list > Ctrl_vertices_poly_group_data_list; typedef std::list > Ctrl_vertices_sm_group_data_list; - Ctrl_vertices_poly_group_data_list::iterator poly_active_group; - Ctrl_vertices_poly_group_data_list poly_ctrl_vertex_frame_map; // keep list of group of control vertices with assoc data Ctrl_vertices_sm_group_data_list::iterator sm_active_group; Ctrl_vertices_sm_group_data_list sm_ctrl_vertex_frame_map; @@ -163,7 +136,7 @@ struct Scene_edit_polyhedron_item_priv bool is_rot_free; bool own_poly_item; //indicates if the poly_item should be deleted by the destructor - Scene_polyhedron_item_k_ring_selection k_ring_selector; + Scene_facegraph_item_k_ring_selection k_ring_selector; Scene_edit_polyhedron_item *item; }; //end Scene_edit_polyhedron_item_priv @@ -179,44 +152,22 @@ struct Facegraph_selector :d(d){} ////Deform_mesh///// - - Deform_mesh* get_deform_mesh(Polyhedron*) - { - return d->deform_mesh; - } - Deform_sm_mesh* get_deform_mesh(SMesh*) { return d->deform_sm_mesh; } - void set_deform_mesh(Polyhedron*, Deform_mesh *dm) - { - d->deform_mesh = dm; - } - void set_deform_mesh(SMesh*, Deform_sm_mesh *dm) { d->deform_sm_mesh = dm; } ////Items management///// - void invalidate_aabb_tree(Polyhedron*) - { - d->poly_item->invalidate_aabb_tree(); - } void invalidate_aabb_tree(SMesh*) { d->sm_item->invalidate_aabb_tree(); } - void update_ids(Polyhedron*, bool do_faces) - { - d->poly_item->update_vertex_indices(); - if(do_faces) - d->poly_item->update_facet_indices(); - d->poly_item->update_halfedge_indices(); - } void update_ids(SMesh*, bool ) { @@ -224,11 +175,7 @@ struct Facegraph_selector } ////ctrl_groups///// - Ctrl_vertices_poly_group_data_list::iterator& get_active_group(Polyhedron*) - { - return d->poly_active_group; - } - + Ctrl_vertices_sm_group_data_list::iterator& get_active_group(SMesh*) { return d->sm_active_group; @@ -236,11 +183,6 @@ struct Facegraph_selector - Ctrl_vertices_poly_group_data_list& get_ctrl_vertex_frame_map(Polyhedron*) - { - return d->poly_ctrl_vertex_frame_map; - } - Ctrl_vertices_sm_group_data_list& get_ctrl_vertex_frame_map(SMesh*) { return d->sm_ctrl_vertex_frame_map; @@ -250,36 +192,18 @@ struct Facegraph_selector //const functions - Ctrl_vertices_poly_group_data_list& get_ctrl_vertex_frame_map(Polyhedron*, Scene_edit_polyhedron_item_priv* d)const - { - return d->poly_ctrl_vertex_frame_map; - } Ctrl_vertices_sm_group_data_list& get_ctrl_vertex_frame_map(SMesh*, Scene_edit_polyhedron_item_priv* d)const { return d->sm_ctrl_vertex_frame_map; } - Ctrl_vertices_poly_group_data_list::iterator& get_active_group(Polyhedron*, Scene_edit_polyhedron_item_priv* d)const - { - return d->poly_active_group; - } - + Ctrl_vertices_sm_group_data_list::iterator& get_active_group(SMesh*, Scene_edit_polyhedron_item_priv* d)const { return d->sm_active_group; } - Deform_mesh* get_deform_mesh(Polyhedron*, Scene_edit_polyhedron_item_priv* d)const - { - return d->deform_mesh; - } - - Deform_mesh* get_deform_mesh(SMesh*, Scene_edit_polyhedron_item_priv* d)const - { - return d->deform_mesh; - } - }; void Scene_edit_polyhedron_item_priv::init_values() @@ -408,34 +332,6 @@ void Scene_edit_polyhedron_item_priv::init_values() ui_widget->remeshingEdgeLengthInput_checkBox->setChecked(false); } - -Scene_edit_polyhedron_item::Scene_edit_polyhedron_item -(Scene_polyhedron_item* poly_item, - Ui::DeformMesh* ui_widget, - QMainWindow* mw) - : Scene_group_item("unnamed",Scene_edit_polyhedron_item_priv::NumberOfBuffers,Scene_edit_polyhedron_item_priv::NumberOfVaos) - -{ - mw->installEventFilter(this); - d = new Scene_edit_polyhedron_item_priv(poly_item, ui_widget, mw, this); - // bind vertex picking - connect(&d->k_ring_selector, SIGNAL(selected(const std::set::vertex_descriptor>&)), this, - SLOT(selected(const std::set::vertex_descriptor>&))); - - d->poly_item->set_color_vector_read_only(true); // to prevent recomputation of color vector in invalidateOpenGLBuffers() - d->poly_item->update_vertex_indices(); - id_setter = new Id_setter(d->poly_item->polyhedron()); - d->deform_mesh = new Deform_mesh(*(poly_item->polyhedron()), - Deform_mesh::Vertex_index_map(), - Deform_mesh::Hedge_index_map(), - Array_based_vertex_point_map(&d->positions, polyhedron(), id_setter)); - d->init_values(); - connect(ui_widget->remeshingEdgeLengthInput_checkBox, SIGNAL(toggled(bool)), - ui_widget->remeshing_edge_length_spinbox, SLOT(setEnabled(bool))); - invalidateOpenGLBuffers(); -} - - Scene_edit_polyhedron_item::Scene_edit_polyhedron_item (Scene_surface_mesh_item* sm_item, Ui::DeformMesh* ui_widget, @@ -446,8 +342,8 @@ Scene_edit_polyhedron_item::Scene_edit_polyhedron_item mw->installEventFilter(this); d = new Scene_edit_polyhedron_item_priv(sm_item, ui_widget, mw, this); // bind vertex picking - connect(&d->k_ring_selector, SIGNAL(selected(const std::set::vertex_descriptor>&)), this, - SLOT(selected(const std::set::vertex_descriptor>&))); + connect(&d->k_ring_selector, SIGNAL(selected(const std::set&)), this, + SLOT(selected(const std::set&))); id_setter = new Id_setter(d->sm_item->polyhedron()); d->deform_sm_mesh = new Deform_sm_mesh(*(sm_item->polyhedron()), Deform_sm_mesh::Vertex_index_map(), @@ -465,10 +361,7 @@ Scene_edit_polyhedron_item::~Scene_edit_polyhedron_item() { while(is_there_any_ctrl_vertices_group()) { - if(d->poly_item) - d->delete_ctrl_vertices_group(polyhedron(), false); - else - d->delete_ctrl_vertices_group(surface_mesh(), false); + d->delete_ctrl_vertices_group(surface_mesh(), false); } delete d; @@ -653,7 +546,7 @@ void Scene_edit_polyhedron_item_priv::apply_reset_drawing_data(Mesh* mesh, M_Def positions[counter * 3] = p.x(); positions[counter * 3 + 1] = p.y(); positions[counter * 3 + 2] = p.z(); - const Polyhedron::Traits::Vector_3& n = + const EPICK::Vector_3& n = CGAL::Polygon_mesh_processing::compute_vertex_normal(vb, m_deform_mesh->halfedge_graph()); normals[counter * 3] = n.x(); normals[counter * 3 + 1] = n.y(); @@ -689,8 +582,6 @@ void Scene_edit_polyhedron_item_priv::reset_drawing_data() _edges.clear(); if(sm_item) apply_reset_drawing_data(sm_item->polyhedron(), deform_sm_mesh); - else - apply_reset_drawing_data(poly_item->polyhedron(), deform_mesh); } template @@ -712,7 +603,7 @@ void Scene_edit_polyhedron_item_priv::compute_normals_and_vertices(Mesh* mesh) { if(!fs.get_deform_mesh(mesh)->is_control_vertex(vd)) { - Kernel::Point_3 p = get(pmap, vd); + EPICK::Point_3 p = get(pmap, vd); ROI_points.push_back(p.x()+offset.x); ROI_points.push_back(p.y()+offset.y); ROI_points.push_back(p.z()+offset.z); @@ -720,8 +611,8 @@ void Scene_edit_polyhedron_item_priv::compute_normals_and_vertices(Mesh* mesh) if(spheres) { CGAL::Color c(0,255,0); - Kernel::Point_3 point(p.x()+offset.x, p.y()+offset.y, p.z()+offset.z); - spheres->add_sphere(Kernel::Sphere_3(point, length_of_axis/15.0*length_of_axis/15.0), c); + EPICK::Point_3 point(p.x()+offset.x, p.y()+offset.y, p.z()+offset.z); + spheres->add_sphere(EPICK::Sphere_3(point, length_of_axis/15.0*length_of_axis/15.0), c); } } @@ -748,7 +639,7 @@ void Scene_edit_polyhedron_item_priv::compute_normals_and_vertices(Mesh* mesh) for(typename std::vector::const_iterator hb = hgb_data->ctrl_vertices_group.begin(); hb != hgb_data->ctrl_vertices_group.end(); ++hb) { - Kernel::Point_3 p = get(pmap, (*hb)); + EPICK::Point_3 p = get(pmap, (*hb)); control_points.push_back(p.x()+offset.x); control_points.push_back(p.y()+offset.y); control_points.push_back(p.z()+offset.z); @@ -760,10 +651,10 @@ void Scene_edit_polyhedron_item_priv::compute_normals_and_vertices(Mesh* mesh) { CGAL::Color c(255*r,0,255*b); - Kernel::Point_3 center(p.x()+offset.x, + EPICK::Point_3 center(p.x()+offset.x, p.y()+offset.y, p.z()+offset.z); - spheres_ctrl->add_sphere(Kernel::Sphere_3(center, length_of_axis/15.0*length_of_axis/15.0), c); + spheres_ctrl->add_sphere(EPICK::Sphere_3(center, length_of_axis/15.0*length_of_axis/15.0), c); } } } @@ -792,10 +683,7 @@ void Scene_edit_polyhedron_item_priv::compute_normals_and_vertices(Mesh* mesh) if(ui_widget->ActivateFixedPlaneCheckBox->isChecked()) { - if(poly_item) - item->draw_frame_plane(viewer, poly_item->polyhedron()); - else - item->draw_frame_plane(viewer, sm_item->polyhedron()); + item->draw_frame_plane(viewer, sm_item->polyhedron()); } QApplication::restoreOverrideCursor(); } @@ -806,47 +694,15 @@ void Scene_edit_polyhedron_item::deform() { if(!is_there_any_ctrl_vertices()) { return; } - - if(d->poly_item) - { - d->deform(d->poly_item->polyhedron()); - d->poly_item->invalidate_aabb_tree(); - } - else - { - d->deform(d->sm_item->polyhedron()); - d->sm_item->invalidate_aabb_tree(); - } + + d->deform(d->sm_item->polyhedron()); + d->sm_item->invalidate_aabb_tree(); Q_EMIT itemChanged(); } template struct ROI_faces_pmap; -template<> -struct ROI_faces_pmap -{ - typedef boost::graph_traits::face_descriptor key_type; - typedef std::size_t value_type; - typedef std::size_t& reference; - typedef boost::read_write_property_map_tag category; - std::map* patch_map; - ROI_faces_pmap(std::map* patch_map, Polyhedron*) - :patch_map(patch_map){} - - friend value_type get(const ROI_faces_pmap&pmap, const key_type& f) - { - /*magic number 12345*/ - if((*pmap.patch_map)[f] == 12345) return 1; - else return 0; - } - friend void put(ROI_faces_pmap&pmap, const key_type& f, const value_type b) - { - if(b != 0) (*pmap.patch_map)[f] = 12345; - else (*pmap.patch_map)[f] = 0; - } -}; - template<> struct ROI_faces_pmap { @@ -925,50 +781,12 @@ struct halfedge2edge void Scene_edit_polyhedron_item::remesh() { - if(d->poly_item) - d->remesh(d->poly_item->polyhedron()); - else - { - d->remesh(d->sm_item->polyhedron()); - } + d->remesh(d->sm_item->polyhedron()); } template struct Is_constrained_map; -template<> -struct Is_constrained_map -{ - typedef boost::graph_traits::vertex_descriptor mesh_vd; - typedef mesh_vd key_type; - typedef bool value_type; - typedef bool reference; - typedef boost::read_write_property_map_tag category; - std::map *icmap; //not light but the might won't be copied so it is ok - - Is_constrained_map() - {} - Is_constrained_map( std::vector* vec, Polyhedron* mesh) - { - icmap = new std::map(); - BOOST_FOREACH(mesh_vd v, vertices(*mesh)) - { - (*icmap)[v] = (*vec)[v->id()]; - } - } - void clean(){ delete icmap;} - - friend bool get(const Is_constrained_map& map, const key_type& k) - { - std::map::const_iterator it = map.icmap->find(k); - if(it != map.icmap->end()) - return it->second != -1; - return false; - } - friend void put(Is_constrained_map&, const key_type&, const value_type)//no need - {} -}; - template<> struct Is_constrained_map { @@ -1001,14 +819,6 @@ struct Is_constrained_map {} }; -int get_control_number(poly_vertex_descriptor v, const Is_constrained_map& map) -{ - std::map::const_iterator it = map.icmap->find(v); - if(it != map.icmap->end()) - return it->second; - return -1; -} - int get_control_number(sm_vertex_descriptor v, const Is_constrained_map& map) { return get(map.icmap, v); @@ -1135,10 +945,7 @@ void Scene_edit_polyhedron_item_priv::remesh(Mesh* mesh) //reset ROI from its outside border roi_border item->clear_roi(); do{ - if(poly_item) - delete_ctrl_vertices_group(poly_item->polyhedron(), false); - else - delete_ctrl_vertices_group(sm_item->polyhedron(), false); + delete_ctrl_vertices_group(sm_item->polyhedron(), false); } while(!fs.get_ctrl_vertex_frame_map(mesh).empty()); @@ -1318,10 +1125,7 @@ void Scene_edit_polyhedron_item_priv::expand_or_reduce(int steps, Mesh* mesh) } if(fs.get_active_group(mesh)->ctrl_vertices_group.empty() && fs.get_ctrl_vertex_frame_map(mesh).size()>1) { - if(poly_item) - delete_ctrl_vertices_group(poly_item->polyhedron(), false); - else - delete_ctrl_vertices_group(sm_item->polyhedron(), false); + delete_ctrl_vertices_group(sm_item->polyhedron(), false); } if( (!ctrl_active && fs.get_deform_mesh(mesh)->roi_vertices().size() != original_size) @@ -1350,10 +1154,7 @@ bool Scene_edit_polyhedron_item::eventFilter(QObject* /*target*/, QEvent *event) { QWheelEvent *w_event = static_cast(event); int steps = w_event->delta() / 120; - if(d->poly_item) - d->expand_or_reduce(steps, d->poly_item->polyhedron()); - else - d->expand_or_reduce(steps, d->sm_item->polyhedron()); + d->expand_or_reduce(steps, d->sm_item->polyhedron()); } if(event->type() == QEvent::MouseButtonPress || event->type() == QEvent::MouseButtonRelease) { @@ -1367,8 +1168,7 @@ bool Scene_edit_polyhedron_item::eventFilter(QObject* /*target*/, QEvent *event) } ////////////////// //////////////// ///////////////////// - if((d->poly_item && !d->poly_item->visible()) - || (d->sm_item && !d->sm_item->visible())){ return false; } // if not visible just update event state but don't do any action + if((d->sm_item && !d->sm_item->visible())){ return false; } // if not visible just update event state but don't do any action // check state changes between old and current state bool ctrl_pressed_now = d->state.ctrl_pressing && !old_state.ctrl_pressing; @@ -1379,10 +1179,7 @@ bool Scene_edit_polyhedron_item::eventFilter(QObject* /*target*/, QEvent *event) const QPoint& p = viewer->mapFromGlobal(QCursor::pos()); bool need_repaint; - if(d->poly_item) - need_repaint = activate_closest_manipulated_frame(p.x(), p.y(), polyhedron()); - else - need_repaint = activate_closest_manipulated_frame(p.x(), p.y(), surface_mesh()); + need_repaint = activate_closest_manipulated_frame(p.x(), p.y(), surface_mesh()); if (!d->ui_widget->ActivatePivotingCheckBox->isChecked() && ctrl_released_now && d->ui_widget->RemeshingCheckBox->isChecked()) @@ -1403,10 +1200,7 @@ bool Scene_edit_polyhedron_item::eventFilter(QObject* /*target*/, QEvent *event) void Scene_edit_polyhedron_item::drawEdges(CGAL::Three::Viewer_interface* viewer) const { if(!are_buffers_filled) { - if(d->poly_item) - d->compute_normals_and_vertices(d->poly_item->polyhedron()); - else - d->compute_normals_and_vertices(d->sm_item->polyhedron()); + d->compute_normals_and_vertices(d->sm_item->polyhedron()); d->initializeBuffers(viewer); } vaos[Scene_edit_polyhedron_item_priv::Edges]->bind(); @@ -1426,10 +1220,7 @@ void Scene_edit_polyhedron_item::drawEdges(CGAL::Three::Viewer_interface* viewer void Scene_edit_polyhedron_item::draw(CGAL::Three::Viewer_interface* viewer) const { if(!are_buffers_filled) { - if(d->poly_item) - d->compute_normals_and_vertices(d->poly_item->polyhedron()); - else - d->compute_normals_and_vertices(d->sm_item->polyhedron()); + d->compute_normals_and_vertices(d->sm_item->polyhedron()); d->initializeBuffers(viewer); } vaos[Scene_edit_polyhedron_item_priv::Facets]->bind(); @@ -1613,22 +1404,10 @@ void Scene_edit_polyhedron_item::draw_ROI_and_control_vertices(CGAL::Three::View d->program->release(); vaos[Scene_edit_polyhedron_item_priv::Control_points]->release(); } - - if(d->poly_item) + for(Ctrl_vertices_sm_group_data_list::const_iterator hgb_data = d->sm_ctrl_vertex_frame_map.begin(); + hgb_data != d->sm_ctrl_vertex_frame_map.end(); ++hgb_data) { - for(Ctrl_vertices_poly_group_data_list::const_iterator hgb_data = d->poly_ctrl_vertex_frame_map.begin(); - hgb_data != d->poly_ctrl_vertex_frame_map.end(); ++hgb_data) - { - d->draw_ROI_and_control_vertices(viewer, hgb_data->frame, hgb_data->frame_initial_center); - } - } - else - { - for(Ctrl_vertices_sm_group_data_list::const_iterator hgb_data = d->sm_ctrl_vertex_frame_map.begin(); - hgb_data != d->sm_ctrl_vertex_frame_map.end(); ++hgb_data) - { - d->draw_ROI_and_control_vertices(viewer, hgb_data->frame, hgb_data->frame_initial_center); - } + d->draw_ROI_and_control_vertices(viewer, hgb_data->frame, hgb_data->frame_initial_center); } @@ -1685,14 +1464,6 @@ void Scene_edit_polyhedron_item::invalidateOpenGLBuffers() d->spheres_ctrl->invalidateOpenGLBuffers(); } -Scene_polyhedron_item* Scene_edit_polyhedron_item::to_polyhedron_item() { - Scene_polyhedron_item* poly_item_tmp = d->poly_item; - d->poly_item->set_color_vector_read_only(false); - d->own_poly_item=false; - poly_item_tmp->invalidateOpenGLBuffers(); - return poly_item_tmp; -} - Scene_surface_mesh_item* Scene_edit_polyhedron_item::to_sm_item() { Scene_surface_mesh_item* sm_item_tmp = d->sm_item; d->own_poly_item=false; @@ -1700,11 +1471,6 @@ Scene_surface_mesh_item* Scene_edit_polyhedron_item::to_sm_item() { return sm_item_tmp; } -Polyhedron* Scene_edit_polyhedron_item::polyhedron() -{ return d->poly_item->polyhedron(); } -const Polyhedron* Scene_edit_polyhedron_item::polyhedron() const -{ return d->poly_item->polyhedron(); } - SMesh* Scene_edit_polyhedron_item::surface_mesh() { return d->sm_item->polyhedron(); } const SMesh* Scene_edit_polyhedron_item::surface_mesh() const @@ -1713,82 +1479,46 @@ const SMesh* Scene_edit_polyhedron_item::surface_mesh() const QString Scene_edit_polyhedron_item::toolTip() const { - if(d->poly_item) - { - if(!d->poly_item->polyhedron()) - return QString(); - - return QObject::tr("

Polyhedron %1 (mode: %5, color: %6)

" - "

Number of vertices: %2
" - "Number of edges: %3
" - "Number of facets: %4

") - .arg(this->name()) - .arg(d->poly_item->polyhedron()->size_of_vertices()) - .arg(d->poly_item->polyhedron()->size_of_halfedges()/2) - .arg(d->poly_item->polyhedron()->size_of_facets()) - .arg(this->renderingModeName()) - .arg(this->color().name()); - } - else - { - if(!d->sm_item->polyhedron()) - return QString(); - - return QObject::tr("

Surface Mesh %1 (mode: %5, color: %6)

" - "

Number of vertices: %2
" - "Number of edges: %3
" - "Number of facets: %4

") - .arg(this->name()) - .arg(num_vertices(*d->sm_item->polyhedron())) - .arg(num_halfedges(*d->sm_item->polyhedron())/2) - .arg(num_faces(*d->sm_item->polyhedron())) - .arg(this->renderingModeName()) - .arg(this->color().name()); - } + if(!d->sm_item->polyhedron()) + return QString(); + + return QObject::tr("

Surface Mesh %1 (mode: %5, color: %6)

" + "

Number of vertices: %2
" + "Number of edges: %3
" + "Number of facets: %4

") + .arg(this->name()) + .arg(num_vertices(*d->sm_item->polyhedron())) + .arg(num_halfedges(*d->sm_item->polyhedron())/2) + .arg(num_faces(*d->sm_item->polyhedron())) + .arg(this->renderingModeName()) + .arg(this->color().name()); } + bool Scene_edit_polyhedron_item::isEmpty() const { - if(d->poly_item) - return d->poly_item->isEmpty(); - else - return d->sm_item->isEmpty(); + return d->sm_item->isEmpty(); } void Scene_edit_polyhedron_item::compute_bbox() const { - if(d->poly_item) - _bbox = d->poly_item->bbox(); - else - _bbox = d->sm_item->bbox(); + _bbox = d->sm_item->bbox(); } void Scene_edit_polyhedron_item::setVisible(bool b) { - if(d->poly_item) - d->poly_item->setVisible(b); - else - d->sm_item->setVisible(b); + d->sm_item->setVisible(b); Scene_item::setVisible(b); if(!b) { (*CGAL::QGLViewer::QGLViewerPool().begin())->setManipulatedFrame(NULL); } } void Scene_edit_polyhedron_item::setColor(QColor c) { - if(d->poly_item) - d->poly_item->setColor(c); - else - d->sm_item->setColor(c); + d->sm_item->setColor(c); Scene_item::setColor(c); } void Scene_edit_polyhedron_item::setName(QString n) { Scene_item::setName(n); n.replace(" (edit)", ""); - if(d->poly_item) - d->poly_item->setName(n); - else - d->sm_item->setName(n); + d->sm_item->setName(n); } void Scene_edit_polyhedron_item::setRenderingMode(RenderingMode m) { - if(d->poly_item) - d->poly_item->setRenderingMode(m); - else - d->sm_item->setRenderingMode(m); + d->sm_item->setRenderingMode(m); Scene_item::setRenderingMode(m); } Scene_edit_polyhedron_item* Scene_edit_polyhedron_item::clone() const { @@ -1808,20 +1538,12 @@ void Scene_edit_polyhedron_item::select( dir_x, dir_y, dir_z); - if(d->poly_item) - d->poly_item->select(orig_x, - orig_y, - orig_z, - dir_x, - dir_y, - dir_z); - else - d->sm_item->select(orig_x, - orig_y, - orig_z, - dir_x, - dir_y, - dir_z); + d->sm_item->select(orig_x, + orig_y, + orig_z, + dir_x, + dir_y, + dir_z); } @@ -1843,18 +1565,12 @@ bool Scene_edit_polyhedron_item::keyPressEvent(QKeyEvent* e) void Scene_edit_polyhedron_item::update_frame_plane() { - if(d->poly_item) - for(Ctrl_vertices_poly_group_data_list::iterator hgb_data = d->poly_ctrl_vertex_frame_map.begin(); - hgb_data != d->poly_ctrl_vertex_frame_map.end(); ++hgb_data) - { - hgb_data->refresh(polyhedron()); - } - else - for(Ctrl_vertices_sm_group_data_list::iterator hgb_data = d->sm_ctrl_vertex_frame_map.begin(); - hgb_data != d->sm_ctrl_vertex_frame_map.end(); ++hgb_data) - { - hgb_data->refresh(surface_mesh()); - } + + for(Ctrl_vertices_sm_group_data_list::iterator hgb_data = d->sm_ctrl_vertex_frame_map.begin(); + hgb_data != d->sm_ctrl_vertex_frame_map.end(); ++hgb_data) + { + hgb_data->refresh(surface_mesh()); + } } @@ -1911,12 +1627,6 @@ void Scene_edit_polyhedron_item::ShowAsSphere(bool b) } } -bool Scene_edit_polyhedron_item::is_there_any_ctrl_vertices_group(Ctrl_vertices_poly_group_data_list::iterator& hgb, - Ctrl_vertices_poly_group_data_list::iterator& hge) -{ - hgb = d->poly_ctrl_vertex_frame_map.begin(); hge = d->poly_ctrl_vertex_frame_map.end(); - return hgb != hge; -} bool Scene_edit_polyhedron_item::is_there_any_ctrl_vertices_group(Ctrl_vertices_sm_group_data_list::iterator& hgb, Ctrl_vertices_sm_group_data_list::iterator& hge) { @@ -1931,29 +1641,11 @@ void Scene_edit_polyhedron_item::reset_spheres() d->spheres = NULL; } -void Scene_edit_polyhedron_item::selected(const std::set& m) + +void Scene_edit_polyhedron_item::selected(const std::set& m) { bool any_changes = false; - for(std::set::const_iterator it = m.begin(); it != m.end(); ++it) - { - poly_vertex_descriptor vh = *it; - bool changed = false; - if(d->ui_widget->ROIRadioButton->isChecked()) { - if(d->ui_widget->InsertRadioButton->isChecked()) { changed = insert_roi_vertex(vh, polyhedron());} - else { changed = erase_roi_vertex(vh, polyhedron()); } - } - else { - if(d->ui_widget->InsertRadioButton->isChecked()) { changed = insert_control_vertex(vh, polyhedron()); } - else { changed = erase_control_vertex(vh, polyhedron()); } - } - any_changes |= changed; - } - if(any_changes) { invalidateOpenGLBuffers(); Q_EMIT itemChanged(); } -} -void Scene_edit_polyhedron_item::selected(const std::set& m) -{ - bool any_changes = false; - for(std::set::const_iterator it = m.begin(); it != m.end(); ++it) + for(std::set::const_iterator it = m.begin(); it != m.end(); ++it) { sm_vertex_descriptor vh = *it; bool changed = false; @@ -2016,46 +1708,22 @@ bool Scene_edit_polyhedron_item::erase_roi_vertex(typename boost::graph_traitspoly_item) + for(Ctrl_vertices_sm_group_data_list::iterator it = d->sm_ctrl_vertex_frame_map.begin(); it != d->sm_ctrl_vertex_frame_map.end(); ++it) { - for(Ctrl_vertices_poly_group_data_list::iterator it = d->poly_ctrl_vertex_frame_map.begin(); it != d->poly_ctrl_vertex_frame_map.end(); ++it) - { - delete it->frame; - } - d->poly_ctrl_vertex_frame_map.clear(); - d->deform_mesh->clear_roi_vertices(); - } - else - { - for(Ctrl_vertices_sm_group_data_list::iterator it = d->sm_ctrl_vertex_frame_map.begin(); it != d->sm_ctrl_vertex_frame_map.end(); ++it) - { - delete it->frame; - } - d->sm_ctrl_vertex_frame_map.clear(); - d->deform_sm_mesh->clear_roi_vertices(); + delete it->frame; } + d->sm_ctrl_vertex_frame_map.clear(); + d->deform_sm_mesh->clear_roi_vertices(); create_ctrl_vertices_group(); // create one new group of control vertices } void Scene_edit_polyhedron_item::create_ctrl_vertices_group() { - if(d->poly_item) - { - for(Ctrl_vertices_poly_group_data_list::iterator it = d->poly_ctrl_vertex_frame_map.begin(); it != d->poly_ctrl_vertex_frame_map.end(); ++it) { - if(it->ctrl_vertices_group.empty()) { - d->poly_active_group = it; - return; - } - } - } - else - { - for(Ctrl_vertices_sm_group_data_list::iterator it = d->sm_ctrl_vertex_frame_map.begin(); it != d->sm_ctrl_vertex_frame_map.end(); ++it) { - if(it->ctrl_vertices_group.empty()) { - d->sm_active_group = it; - return; - } + for(Ctrl_vertices_sm_group_data_list::iterator it = d->sm_ctrl_vertex_frame_map.begin(); it != d->sm_ctrl_vertex_frame_map.end(); ++it) { + if(it->ctrl_vertices_group.empty()) { + d->sm_active_group = it; + return; } } // No empty group of control vertices @@ -2064,23 +1732,11 @@ void Scene_edit_polyhedron_item::create_ctrl_vertices_group() new_frame->setPosition(offset); new_frame->setRotationSensitivity(2.0f); connect(new_frame, SIGNAL(manipulated()), this, SLOT(change())); - - if(d->poly_item) - { - Control_vertices_data hgd(d->deform_mesh, new_frame); - d->poly_ctrl_vertex_frame_map.push_back(hgd); - hgd.refresh(polyhedron()); - - d->poly_active_group = --d->poly_ctrl_vertex_frame_map.end(); - } - else - { - Control_vertices_data hgd(d->deform_sm_mesh, new_frame); - d->sm_ctrl_vertex_frame_map.push_back(hgd); - hgd.refresh(surface_mesh()); - - d->sm_active_group = --d->sm_ctrl_vertex_frame_map.end(); - } + Control_vertices_data hgd(d->deform_sm_mesh, new_frame); + d->sm_ctrl_vertex_frame_map.push_back(hgd); + hgd.refresh(surface_mesh()); + + d->sm_active_group = --d->sm_ctrl_vertex_frame_map.end(); invalidateOpenGLBuffers(); Q_EMIT itemChanged(); @@ -2125,70 +1781,36 @@ void Scene_edit_polyhedron_item_priv::delete_ctrl_vertices_group(Mesh* mesh, boo void Scene_edit_polyhedron_item::prev_ctrl_vertices_group() { - if(d->poly_item) - { - Ctrl_vertices_poly_group_data_list::iterator hgb, hge; - if( !is_there_any_ctrl_vertices_group(hgb, hge) ) { - print_message("There is no group of control vertices to iterate on!"); - return; - } - // shift - if(hgb == d->poly_active_group) { d->poly_active_group = --hge; } - else {--d->poly_active_group; } - } - else - { - Ctrl_vertices_sm_group_data_list::iterator hgb, hge; - if( !is_there_any_ctrl_vertices_group(hgb, hge) ) { - print_message("There is no group of control vertices to iterate on!"); - return; - } - // shift - if(hgb == d->sm_active_group) { d->sm_active_group = --hge; } - else {--d->sm_active_group; } + Ctrl_vertices_sm_group_data_list::iterator hgb, hge; + if( !is_there_any_ctrl_vertices_group(hgb, hge) ) { + print_message("There is no group of control vertices to iterate on!"); + return; } + // shift + if(hgb == d->sm_active_group) { d->sm_active_group = --hge; } + else {--d->sm_active_group; } } void Scene_edit_polyhedron_item::next_ctrl_vertices_group() { - if(d->poly_item) - { - Ctrl_vertices_poly_group_data_list::iterator hgb, hge; - if( !is_there_any_ctrl_vertices_group(hgb, hge) ) { - print_message("There is no group of control vertices to iterate on!"); - return; - } - // shift - if(--hge == d->poly_active_group) { d->poly_active_group = hgb; } - else {++d->poly_active_group; } - } - else - { - Ctrl_vertices_sm_group_data_list::iterator hgb, hge; - if( !is_there_any_ctrl_vertices_group(hgb, hge) ) { - print_message("There is no group of control vertices to iterate on!"); - return; - } - // shift - if(--hge == d->sm_active_group) { d->sm_active_group = hgb; } - else {++d->sm_active_group; } + Ctrl_vertices_sm_group_data_list::iterator hgb, hge; + if( !is_there_any_ctrl_vertices_group(hgb, hge) ) { + print_message("There is no group of control vertices to iterate on!"); + return; } + // shift + if(--hge == d->sm_active_group) { d->sm_active_group = hgb; } + else {++d->sm_active_group; } } void Scene_edit_polyhedron_item::pivoting_begin() { - if(d->poly_item) - d->pivoting_begin(polyhedron()); - else - d->pivoting_begin(surface_mesh()); + d->pivoting_begin(surface_mesh()); } void Scene_edit_polyhedron_item::pivoting_end() { - if(d->poly_item) - d->pivoting_end(polyhedron()); - else - d->pivoting_end(surface_mesh()); + d->pivoting_end(surface_mesh()); } template @@ -2230,51 +1852,23 @@ void Scene_edit_polyhedron_item::save_roi(const char* file_name) const { std::ofstream out(file_name); // save roi - if(d->poly_item) + Id_setter id_getter(d->sm_item->polyhedron()); + out << d->deform_sm_mesh->roi_vertices().size() << std::endl; + BOOST_FOREACH(sm_vertex_descriptor vd, d->deform_sm_mesh->roi_vertices()) { - out << d->deform_mesh->roi_vertices().size() << std::endl; - BOOST_FOREACH(poly_vertex_descriptor vd, d->deform_mesh->roi_vertices()) - { - out << vd->id() << " "; - } - } - else - { - Id_setter id_getter(d->sm_item->polyhedron()); - out << d->deform_sm_mesh->roi_vertices().size() << std::endl; - BOOST_FOREACH(sm_vertex_descriptor vd, d->deform_sm_mesh->roi_vertices()) - { - out << id_getter.get_id(vd) << " "; - } + out << id_getter.get_id(vd) << " "; } out << std::endl; // save control vertices - if(d->poly_item) - { - out << d->poly_ctrl_vertex_frame_map.size() << std::endl; // control vertices count - for(Ctrl_vertices_poly_group_data_list::const_iterator hgb = d->poly_ctrl_vertex_frame_map.begin(); hgb != d->poly_ctrl_vertex_frame_map.end(); ++hgb) { - - out << hgb->ctrl_vertices_group.size() << std::endl; - for(std::vector::const_iterator hb = hgb->ctrl_vertices_group.begin(); hb != hgb->ctrl_vertices_group.end(); ++hb) - { - out << (*hb)->id() << " "; - } - out << std::endl; - } - } - else - { - Id_setter id_getter(d->sm_item->polyhedron()); - out << d->sm_ctrl_vertex_frame_map.size() << std::endl; // control vertices count - for(Ctrl_vertices_sm_group_data_list::const_iterator hgb = d->sm_ctrl_vertex_frame_map.begin(); hgb != d->sm_ctrl_vertex_frame_map.end(); ++hgb) { - - out << hgb->ctrl_vertices_group.size() << std::endl; - for(std::vector::const_iterator hb = hgb->ctrl_vertices_group.begin(); hb != hgb->ctrl_vertices_group.end(); ++hb) - { - out << id_getter.get_id(*hb) << " "; - } - out << std::endl; + out << d->sm_ctrl_vertex_frame_map.size() << std::endl; // control vertices count + for(Ctrl_vertices_sm_group_data_list::const_iterator hgb = d->sm_ctrl_vertex_frame_map.begin(); hgb != d->sm_ctrl_vertex_frame_map.end(); ++hgb) { + + out << hgb->ctrl_vertices_group.size() << std::endl; + for(std::vector::const_iterator hb = hgb->ctrl_vertices_group.begin(); hb != hgb->ctrl_vertices_group.end(); ++hb) + { + out << id_getter.get_id(*hb) << " "; } + out << std::endl; } } @@ -2323,67 +1917,32 @@ void Scene_edit_polyhedron_item_priv::read_roi(const char* file_name, Mesh* mesh void Scene_edit_polyhedron_item::read_roi(const char* file_name) { - if(d->poly_item) - d->read_roi(file_name, polyhedron()); - else - d->read_roi(file_name, surface_mesh()); + d->read_roi(file_name, surface_mesh()); } void Scene_edit_polyhedron_item::overwrite_deform_object() { - if(d->poly_item) - d->deform_mesh->overwrite_initial_geometry(); - else - d->deform_sm_mesh->overwrite_initial_geometry(); + d->deform_sm_mesh->overwrite_initial_geometry(); refresh_all_group_centers(); } void Scene_edit_polyhedron_item::reset_deform_object() { - if(d->poly_item) - d->deform_mesh->reset(); - else - d->deform_sm_mesh->reset(); + d->deform_sm_mesh->reset(); refresh_all_group_centers(); } boost::optional Scene_edit_polyhedron_item::get_minimum_isolated_component() { - if(d->poly_item) - { - Travel_isolated_components::Minimum_visitor visitor; - Travel_isolated_components(*polyhedron()).travel - (vertices(*polyhedron()).first, vertices(*polyhedron()).second, - polyhedron()->size_of_vertices(), Is_selected(d->deform_mesh), visitor); - return visitor.minimum; - } - else - { - Travel_isolated_components::Minimum_visitor visitor; - Travel_isolated_components(*surface_mesh()).travel - (vertices(*surface_mesh()).first, vertices(*surface_mesh()).second, - num_vertices(*surface_mesh()), Is_selected(d->deform_sm_mesh), visitor); - return visitor.minimum; - } + Travel_isolated_components::Minimum_visitor visitor; + Travel_isolated_components(*surface_mesh()).travel + (vertices(*surface_mesh()).first, vertices(*surface_mesh()).second, + num_vertices(*surface_mesh()), Is_selected(d->deform_sm_mesh), visitor); + return visitor.minimum; } boost::optional Scene_edit_polyhedron_item::select_isolated_components(std::size_t threshold) { - if(d->poly_item) - { - typedef boost::function_output_iterator > Output_iterator; - Output_iterator out(d->deform_mesh); - - Travel_isolated_components::Selection_visitor visitor(threshold, out); - Travel_isolated_components(*polyhedron()).travel - (vertices(*polyhedron()).first, vertices(*polyhedron()).second, - polyhedron()->size_of_vertices(), Is_selected(d->deform_mesh), visitor); - - if(visitor.any_inserted) { invalidateOpenGLBuffers(); Q_EMIT itemChanged(); } - return visitor.minimum_visitor.minimum; - } - else - { typedef boost::function_output_iterator > Output_iterator; Output_iterator out(d->deform_sm_mesh); @@ -2394,16 +1953,10 @@ boost::optional Scene_edit_polyhedron_item::select_isolated_compone if(visitor.any_inserted) { invalidateOpenGLBuffers(); Q_EMIT itemChanged(); } return visitor.minimum_visitor.minimum; - } } bool Scene_edit_polyhedron_item::is_there_any_ctrl_vertices_group() { - if(d->poly_item) - { - Ctrl_vertices_poly_group_data_list::iterator hgb, hge; - return is_there_any_ctrl_vertices_group(hgb, hge); - } if(d->sm_item) { Ctrl_vertices_sm_group_data_list::iterator hgb, hge; @@ -2414,37 +1967,20 @@ bool Scene_edit_polyhedron_item::is_there_any_ctrl_vertices_group() bool Scene_edit_polyhedron_item::is_there_any_ctrl_vertices() { - if(d->poly_item) + Ctrl_vertices_sm_group_data_list::iterator hgb, hge; + if(!is_there_any_ctrl_vertices_group(hgb, hge)) { return false; } // there isn't any group of control vertices + + for(; hgb != hge; ++hgb) // check inside groups of control vertices { - Ctrl_vertices_poly_group_data_list::iterator hgb, hge; - if(!is_there_any_ctrl_vertices_group(hgb, hge)) { return false; } // there isn't any group of control vertices - - for(; hgb != hge; ++hgb) // check inside groups of control vertices - { - if(!hgb->ctrl_vertices_group.empty()) { return true; } - } - } - else - { - Ctrl_vertices_sm_group_data_list::iterator hgb, hge; - if(!is_there_any_ctrl_vertices_group(hgb, hge)) { return false; } // there isn't any group of control vertices - - for(; hgb != hge; ++hgb) // check inside groups of control vertices - { - if(!hgb->ctrl_vertices_group.empty()) { return true; } - } + if(!hgb->ctrl_vertices_group.empty()) { return true; } } return false; } void Scene_edit_polyhedron_item::refresh_all_group_centers() { - if(d->poly_item) - for(Ctrl_vertices_poly_group_data_list::iterator it = d->poly_ctrl_vertex_frame_map.begin(); it != d->poly_ctrl_vertex_frame_map.end(); ++it) - { it->refresh(polyhedron()); } - else - for(Ctrl_vertices_sm_group_data_list::iterator it = d->sm_ctrl_vertex_frame_map.begin(); it != d->sm_ctrl_vertex_frame_map.end(); ++it) - { it->refresh(surface_mesh()); } + for(Ctrl_vertices_sm_group_data_list::iterator it = d->sm_ctrl_vertex_frame_map.begin(); it != d->sm_ctrl_vertex_frame_map.end(); ++it) + { it->refresh(surface_mesh()); } } template @@ -2513,89 +2049,40 @@ bool Scene_edit_polyhedron_item::activate_closest_manipulated_frame(int x, int y } void Scene_edit_polyhedron_item::update_normals() { - if(d->poly_item) + BOOST_FOREACH(sm_vertex_descriptor vd, d->deform_sm_mesh->roi_vertices()) { - BOOST_FOREACH(poly_vertex_descriptor vd, d->deform_mesh->roi_vertices()) - { - std::size_t id = vd->id(); - const Polyhedron::Traits::Vector_3& n = - CGAL::Polygon_mesh_processing::compute_vertex_normal(vd, d->deform_mesh->halfedge_graph()); - d->normals[id*3] = n.x(); - d->normals[id*3+1] = n.y(); - d->normals[id*3+2] = n.z(); - - } + std::size_t id = id_setter->get_id(vd); + const EPICK::Vector_3& n = + CGAL::Polygon_mesh_processing::compute_vertex_normal(vd, d->deform_sm_mesh->halfedge_graph()); + d->normals[id*3] = n.x(); + d->normals[id*3+1] = n.y(); + d->normals[id*3+2] = n.z(); + } - else - { - BOOST_FOREACH(sm_vertex_descriptor vd, d->deform_sm_mesh->roi_vertices()) - { - std::size_t id = id_setter->get_id(vd); - const Polyhedron::Traits::Vector_3& n = - CGAL::Polygon_mesh_processing::compute_vertex_normal(vd, d->deform_sm_mesh->halfedge_graph()); - d->normals[id*3] = n.x(); - d->normals[id*3+1] = n.y(); - d->normals[id*3+2] = n.z(); - - } - } -} - -bool Scene_edit_polyhedron_item::hasPolyhedronItem()const -{ - if(d->poly_item) - return true; - return false; - } void Scene_edit_polyhedron_item::set_all_vertices_as_roi() { - if(d->poly_item) + boost::graph_traits::vertex_iterator vb, ve; + for(boost::tie(vb, ve) = vertices(*surface_mesh()); vb != ve; ++vb) { - poly_vertex_iterator vb, ve; - for(boost::tie(vb, ve) = vertices(*polyhedron()); vb != ve; ++vb) - { - insert_roi_vertex(*vb, polyhedron()); - } - } - else - { - boost::graph_traits::vertex_iterator vb, ve; - for(boost::tie(vb, ve) = vertices(*surface_mesh()); vb != ve; ++vb) - { - insert_roi_vertex(*vb, surface_mesh()); - } + insert_roi_vertex(*vb, surface_mesh()); } } void Scene_edit_polyhedron_item::delete_ctrl_vertices_group(bool create_new) { - if(d->poly_item) - d->delete_ctrl_vertices_group(polyhedron(), create_new); - else - d->delete_ctrl_vertices_group(surface_mesh(), create_new); + d->delete_ctrl_vertices_group(surface_mesh(), create_new); } -bool Scene_edit_polyhedron_item::insert_roi_vertex(poly_vertex_descriptor vh) -{ - - return insert_roi_vertex(vh, polyhedron()); -} - bool Scene_edit_polyhedron_item::insert_roi_vertex(sm_vertex_descriptor vh) { return insert_roi_vertex(vh, surface_mesh()); } -Scene_polyhedron_item* Scene_edit_polyhedron_item::poly_item()const -{ - return d->poly_item; -} - Scene_surface_mesh_item* Scene_edit_polyhedron_item::sm_item()const { return d->sm_item; diff --git a/Polyhedron/demo/Polyhedron/Plugins/Surface_mesh_deformation/Scene_edit_polyhedron_item.h b/Polyhedron/demo/Polyhedron/Plugins/Surface_mesh_deformation/Scene_edit_polyhedron_item.h index a5eaf6a28d5..1ab9c53a729 100644 --- a/Polyhedron/demo/Polyhedron/Plugins/Surface_mesh_deformation/Scene_edit_polyhedron_item.h +++ b/Polyhedron/demo/Polyhedron/Plugins/Surface_mesh_deformation/Scene_edit_polyhedron_item.h @@ -2,14 +2,13 @@ #define SCENE_EDIT_POLYHEDRON_ITEM_H //#define CGAL_PROFILE #include "Scene_edit_polyhedron_item_config.h" -#include "Scene_polyhedron_item.h" #include "Scene_surface_mesh_item.h" #include #include -#include "Scene_polyhedron_item_k_ring_selection.h" +#include "Plugins/PMP/Scene_facegraph_item_k_ring_selection.h" #include "Travel_isolated_components.h" #include @@ -41,48 +40,24 @@ typedef boost::graph_traits::halfedge_descriptor sm_halfedge_descriptor; //sets/gets the ID of a Mesh vertex descriptor in a different manner if Mesh is a Polyhedron or a SMesh struct Id_setter{ typedef boost::graph_traits::vertex_descriptor sm_vd; - typedef boost::graph_traits::vertex_descriptor p_vd; typedef boost::graph_traits::face_descriptor sm_fd; - typedef boost::graph_traits::face_descriptor p_fd; - - Polyhedron* poly; SMesh* sm; boost::property_map< SMesh, boost::vertex_index_t >::type im; - - Id_setter(Polyhedron* poly) - :poly(poly), sm(NULL){} - Id_setter(SMesh* sm) - :poly(NULL), sm(sm) + :sm(sm) { im = get(boost::vertex_index, *sm); } - std::size_t get_id(p_vd vd) - { - return vd->id(); - } std::size_t get_id(sm_vd vd) { return static_cast(im[vd]); } - - void set_id(p_vd vd, std::size_t id) - { - vd->id() = id; - } //update the visu map void set_id(sm_vd, std::size_t) { } - - void set_id(p_fd fd, std::size_t id) - { - boost::property_map::type fim - = get(CGAL::face_index, *poly); - put(fim, fd, id); - } //cannot set a surface_mesh id, but it is only use din case the id = -1 which cannot happen so it's ok void set_id(sm_fd, std::size_t) { @@ -91,11 +66,6 @@ struct Id_setter{ }; - - -typedef boost::graph_traits::vertex_descriptor poly_vertex_descriptor; -typedef boost::graph_traits::vertex_iterator poly_vertex_iterator; - class Scene_spheres_item; namespace PMP = CGAL::Polygon_mesh_processing; template @@ -103,7 +73,7 @@ struct Array_based_vertex_point_map { public: typedef typename boost::graph_traits::vertex_descriptor key_type; - typedef Kernel::Point_3 value_type; + typedef EPICK::Point_3 value_type; typedef const value_type& reference; typedef boost::read_write_property_map_tag category; std::vector* positions; @@ -153,11 +123,6 @@ put(Array_based_vertex_point_map map, } } } - -typedef CGAL::Surface_mesh_deformation > Deform_mesh; - typedef CGAL::Surface_mesh_deformation > Deform_sm_mesh; @@ -275,8 +240,6 @@ struct Mouse_keyboard_state_deformation : ctrl_pressing(false), shift_pressing(false), left_button_pressing(false), right_button_pressing(false) { } }; - -typedef std::list > Ctrl_vertices_poly_group_data_list; typedef std::list > Ctrl_vertices_sm_group_data_list; struct Scene_edit_polyhedron_item_priv; // This class represents a polyhedron in the OpenGL scene @@ -289,10 +252,9 @@ class SCENE_EDIT_POLYHEDRON_ITEM_EXPORT Scene_edit_polyhedron_item Q_OBJECT public: Scene_edit_polyhedron_item(){} //needed by the transparent interface - /// Create an Scene_edit_polyhedron_item from a Scene_polyhedron_item. + /// Create an Scene_edit_polyhedron_item from a Scene_surface-mesh_item. /// The ownership of the polyhedron is moved to the new edit_polyhedron /// item. - Scene_edit_polyhedron_item(Scene_polyhedron_item* poly_item, Ui::DeformMesh* ui_widget, QMainWindow* mw); Scene_edit_polyhedron_item(Scene_surface_mesh_item* sm_item, Ui::DeformMesh* ui_widget, QMainWindow* mw); ~Scene_edit_polyhedron_item(); @@ -321,20 +283,11 @@ public: void draw_ROI_and_control_vertices(CGAL::Three::Viewer_interface *viewer) const; template void draw_frame_plane(CGAL::QGLViewer *, Mesh *mesh) const; - - // Get wrapped polyhedron - Polyhedron* polyhedron(); - const Polyhedron* polyhedron() const; - Scene_polyhedron_item* poly_item() const; // Get wrapped Surface_mesh SMesh* surface_mesh(); const SMesh* surface_mesh() const; Scene_surface_mesh_item* sm_item() const; - /// Returns a Scene_polyhedron_item from the edit polyhedron item, and - /// transfer the ownership of the polyhedron to it. - /// The item 'this' must be destroy just after a call to this function. - Scene_polyhedron_item* to_polyhedron_item(); Scene_surface_mesh_item* to_sm_item(); // Get dimensions @@ -351,7 +304,6 @@ public: bool eventFilter(QObject *target, QEvent *event); void update_frame_plane(); void ShowAsSphere(bool b); - bool hasPolyhedronItem()const; public Q_SLOTS: void reset_spheres(); @@ -359,8 +311,7 @@ public Q_SLOTS: void change(); void invalidateOpenGLBuffers(); - void selected(const std::set::vertex_descriptor>&); - void selected(const std::set::vertex_descriptor>& ); + void selected(const std::set&); void select(double orig_x, double orig_y, @@ -386,7 +337,6 @@ public: bool insert_roi_vertex(typename boost::graph_traits::vertex_descriptor v, Mesh* mesh); //for calls from the plugin - bool insert_roi_vertex(poly_vertex_descriptor vh); bool insert_roi_vertex(sm_vertex_descriptor vh); template @@ -422,10 +372,6 @@ public: M_Deform_mesh* dm; Is_selected(M_Deform_mesh* dm) : dm(dm) {} - bool count(poly_vertex_descriptor vh) const { - return dm->is_roi_vertex(vh); - } - bool count(sm_vertex_descriptor vh) const { return dm->is_roi_vertex(vh); } @@ -439,9 +385,6 @@ public: Array_based_vertex_point_map > M_Deform_mesh; Select_roi_output(M_Deform_mesh* dm) : dm(dm) { } - void operator()(poly_vertex_descriptor vh) { - dm->insert_roi_vertex(vh); - } void operator()(sm_vertex_descriptor vd) { dm->insert_roi_vertex(vd); } @@ -457,9 +400,6 @@ protected: // std::cout << message.toStdString() << std::endl; } - bool is_there_any_ctrl_vertices_group(Ctrl_vertices_poly_group_data_list::iterator& hgb, - Ctrl_vertices_poly_group_data_list::iterator& hge); - bool is_there_any_ctrl_vertices_group(Ctrl_vertices_sm_group_data_list::iterator& hgb, Ctrl_vertices_sm_group_data_list::iterator& hge); diff --git a/Polyhedron/demo/Polyhedron/Polyhedron_type.h b/Polyhedron/demo/Polyhedron/Polyhedron_type.h deleted file mode 100644 index 8b67a0100bb..00000000000 --- a/Polyhedron/demo/Polyhedron/Polyhedron_type.h +++ /dev/null @@ -1,243 +0,0 @@ -#ifndef POLYHEDRON_TYPE_H -#define POLYHEDRON_TYPE_H - -// CGAL -// kernel -#include "Kernel_type.h" -#include "properties.h" - -// surface mesh -#include -#include -#include -#include - -#include -#include - -#include - -#include - -template -class Polyhedron_demo_vertex : - public CGAL::HalfedgeDS_vertex_base -{ -public: - typedef std::set Set_of_indices; - -private: - typedef CGAL::HalfedgeDS_vertex_base Pdv_base; - - Set_of_indices indices; - std::size_t mID; - std::size_t time_stamp_; - -public: - int nb_of_feature_edges; - - bool is_corner() const { - return nb_of_feature_edges > 2; - } - - bool is_feature_vertex() const { - return nb_of_feature_edges != 0; - } - - void clear_incident_patches() - { - indices.clear(); - } - - void add_incident_patch(const Patch_id& i) { - indices.insert(i); - } - - /// For the determinism of Compact_container iterators - ///@{ - typedef CGAL::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; - } - ///}@ - - const Set_of_indices& - incident_patches_ids_set() const { - return indices; - } - - Set_of_indices& - incident_patches_ids_set() { - return indices; - } - - std::size_t& id() { return mID; } - std::size_t id() const { return mID; } - - Polyhedron_demo_vertex() : Pdv_base(), mID(-1), time_stamp_(-1), nb_of_feature_edges(0) {} - Polyhedron_demo_vertex(const Point& p) : Pdv_base(p), mID(-1), time_stamp_(-1), nb_of_feature_edges(0) {} -}; - -template -class Polyhedron_demo_halfedge : - public CGAL::HalfedgeDS_halfedge_base -{ -private: - bool feature_edge; - std::size_t mID; - std::size_t time_stamp_; - -public: - - Polyhedron_demo_halfedge() - : feature_edge(false), mID(-1) {}; - - bool is_feature_edge() const { - return feature_edge; - } - - void set_feature_edge(const bool b) { - feature_edge = b; - this->opposite()->feature_edge = b; - } - - std::size_t& id() { return mID; } - std::size_t id() const { return mID; } - - /// For the determinism of Compact_container iterators - ///@{ - typedef CGAL::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; - } - ///@} -}; - -template -inline std::pair -patch_id_default_value(std::pair) -{ - return std::pair(1, 0); -} - -template -inline Integral patch_id_default_value(Integral) -{ - return Integral(1); -} - -template -class Polyhedron_demo_face : - public CGAL::HalfedgeDS_face_base -{ -private: - Patch_id_ patch_id_; - std::size_t mID; - std::size_t time_stamp_; - -public: - typedef Patch_id_ Patch_id; - - Polyhedron_demo_face() - : patch_id_(patch_id_default_value(Patch_id())), mID(-1) {} - - const Patch_id& patch_id() const { - return patch_id_; - } - - void set_patch_id(const Patch_id& i) { - patch_id_ = i; - } - - std::size_t& id() { return mID; } - std::size_t id() const { return mID; } - - /// For the determinism of Compact_container iterators - ///@{ - typedef CGAL::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; - } - ///@} -}; - -template -class Polyhedron_demo_items : public CGAL::Polyhedron_items_3 { -public: - // wrap vertex - template struct Vertex_wrapper - { - typedef typename Traits::Point_3 Point; - typedef Polyhedron_demo_vertex Vertex; - }; - - // wrap face - template struct Face_wrapper - { - typedef Polyhedron_demo_face Face; - }; - - // wrap halfedge - template struct Halfedge_wrapper - { - typedef Polyhedron_demo_halfedge Halfedge; - }; -}; - -#include "Polyhedron_type_fwd.h" - -inline -boost::property_map::type -get(CGAL::vertex_selection_t, const Polyhedron& p) -{ - return get(boost::vertex_index,p); -} -inline -boost::property_map::type -get(CGAL::face_selection_t, const Polyhedron& p) -{ - return get(boost::face_index,p); -} - -namespace boost -{ -template <> -struct property_map -{ - typedef boost::property_map::type type; - typedef boost::property_map::const_type const_type; -}; -template <> -struct property_map -{ - typedef boost::property_map::type type; - typedef boost::property_map::const_type const_type; -}; -}//boost - -// surface mesh -typedef Polyhedron_demo_items Polyhedron_items; -typedef CGAL::Polyhedron_3 Polyhedron; - -#endif // POLYHEDRON_TYPE_H diff --git a/Polyhedron/demo/Polyhedron/Polyhedron_type_fwd.h b/Polyhedron/demo/Polyhedron/Polyhedron_type_fwd.h deleted file mode 100644 index 016ec3b6247..00000000000 --- a/Polyhedron/demo/Polyhedron/Polyhedron_type_fwd.h +++ /dev/null @@ -1,64 +0,0 @@ -#ifndef POLYHEDRON_TYPE_FWD_H -#define POLYHEDRON_TYPE_FWD_H - -#include -#include - -#ifdef USE_FORWARD_DECL - -#include - -template -class Polyhedron_demo_items; - -namespace CGAL { - - namespace Mesh_3 { - template - struct Robust_intersection_traits_3; - } - - template < typename FT_ > - struct Simple_cartesian; - - class Epick; - - class Polyhedron_items_3; - - template < class T, class I, class A> - class HalfedgeDS_default; - - template < class PolyhedronTraits_3, - class PolyhedronItems_3, - template < class T, class I, class A> - class T_HDS, - class Alloc - > - class Polyhedron_3; - - class Epick; -} // end namespace CGAL - -// kernel -namespace polyhedron_type_fwd_h { -// changed since CGAL-3.8-Ic-8 - typedef CGAL::Epick K1; - typedef CGAL::Mesh_3::Robust_intersection_traits_3 Kernel; -} - -#else // USE_FORWARD_DECL - -#include "Polyhedron_type.h" - -#endif // USE_FORWARD_DECL - -// surface mesh -typedef int Patch_id; - -typedef CGAL::Polyhedron_3, - // CGAL::Polyhedron_items_3, - CGAL::HalfedgeDS_default, - std::allocator > Polyhedron; - -#endif // POLYHEDRON_TYPE_FWD_H diff --git a/Polyhedron/demo/Polyhedron/Scene_c3t3_item.cpp b/Polyhedron/demo/Polyhedron/Scene_c3t3_item.cpp index 484a1ac2dc4..d7fedf42f8d 100644 --- a/Polyhedron/demo/Polyhedron/Scene_c3t3_item.cpp +++ b/Polyhedron/demo/Polyhedron/Scene_c3t3_item.cpp @@ -33,8 +33,8 @@ #include -typedef CGAL::AABB_triangulation_3_triangle_primitive Primitive; -typedef CGAL::AABB_traits Traits; +typedef CGAL::AABB_triangulation_3_triangle_primitive Primitive; +typedef CGAL::AABB_traits Traits; typedef CGAL::AABB_tree Tree; typedef Tree::Point_and_primitive_id Point_and_primitive_id; @@ -150,7 +150,7 @@ public : alphaSlider->setValue(255); } QOpenGLFramebufferObject* fbo = viewer->depthPeelingFbo(); - const Kernel::Plane_3& plane = qobject_cast(this->parent())->plane(); + const EPICK::Plane_3& plane = qobject_cast(this->parent())->plane(); vaos[Facets]->bind(); program = getShaderProgram(PROGRAM_C3T3); attribBuffers(viewer, PROGRAM_C3T3); @@ -183,7 +183,7 @@ public : program = getShaderProgram(PROGRAM_C3T3_EDGES); attribBuffers(viewer, PROGRAM_C3T3_EDGES); program->bind(); - const Kernel::Plane_3& plane = qobject_cast(this->parent())->plane(); + const EPICK::Plane_3& plane = qobject_cast(this->parent())->plane(); QVector4D cp(-plane.a(), -plane.b(), -plane.c(), -plane.d()); program->setUniformValue("cutplane", cp); program->setAttributeValue("colors", QColor(Qt::black)); diff --git a/Polyhedron/demo/Polyhedron/Scene_points_with_normal_item.cpp b/Polyhedron/demo/Polyhedron/Scene_points_with_normal_item.cpp index ec8292e670f..21593165ec0 100644 --- a/Polyhedron/demo/Polyhedron/Scene_points_with_normal_item.cpp +++ b/Polyhedron/demo/Polyhedron/Scene_points_with_normal_item.cpp @@ -27,7 +27,6 @@ #include #include -#include "Polyhedron_type.h" #ifdef CGAL_LINKED_WITH_TBB #include @@ -81,22 +80,6 @@ struct Scene_points_with_normal_item_priv } } - Scene_points_with_normal_item_priv(const Polyhedron& input_mesh, Scene_points_with_normal_item* parent) - : m_points(new Point_set) - { - init_values(parent); - Polyhedron::Vertex_iterator v; - m_points->add_normal_map(); - for (v = const_cast(input_mesh).vertices_begin(); - v != const_cast(input_mesh).vertices_end(); v++) - { - const Kernel::Point_3& p = v->point(); - Kernel::Vector_3 n = - CGAL::Polygon_mesh_processing::compute_vertex_normal(v, input_mesh); - m_points->insert(p,n); - } - } - ~Scene_points_with_normal_item_priv() { if(m_points) @@ -263,20 +246,6 @@ Scene_points_with_normal_item::Scene_points_with_normal_item(const SMesh& input_ invalidateOpenGLBuffers(); } -Scene_points_with_normal_item::Scene_points_with_normal_item(const Polyhedron& input_mesh) - : Scene_item(Scene_points_with_normal_item_priv::NbOfVbos,Scene_points_with_normal_item_priv::NbOfVaos) -{ - // Converts Polyhedron vertices to point set. - // Computes vertices normal from connectivity. - d = new Scene_points_with_normal_item_priv(input_mesh, this); - setRenderingMode(PointsPlusNormals); - is_selected = true; - if(d->m_points->number_of_points() < 30 ) - d->point_Slider->setValue(5); - else - d->point_Slider->setValue(2); - invalidateOpenGLBuffers(); -} Scene_points_with_normal_item::~Scene_points_with_normal_item() { diff --git a/Polyhedron/demo/Polyhedron/Scene_points_with_normal_item.h b/Polyhedron/demo/Polyhedron/Scene_points_with_normal_item.h index 7d4afa3aa48..cb19829832b 100644 --- a/Polyhedron/demo/Polyhedron/Scene_points_with_normal_item.h +++ b/Polyhedron/demo/Polyhedron/Scene_points_with_normal_item.h @@ -5,7 +5,6 @@ #include #include "Scene_points_with_normal_item_config.h" #include -#include "Polyhedron_type_fwd.h" #include "Kernel_type.h" #include "Point_set_3.h" #include @@ -34,7 +33,6 @@ public: Scene_points_with_normal_item(const Scene_points_with_normal_item& toCopy); Scene_points_with_normal_item(const SMesh& input_mesh); - Scene_points_with_normal_item(const Polyhedron& input_mesh); ~Scene_points_with_normal_item(); Scene_points_with_normal_item* clone() const Q_DECL_OVERRIDE; diff --git a/Polyhedron/demo/Polyhedron/Scene_polygon_soup_item.cpp b/Polyhedron/demo/Polyhedron/Scene_polygon_soup_item.cpp index e4a6b4eb931..b8657785d55 100644 --- a/Polyhedron/demo/Polyhedron/Scene_polygon_soup_item.cpp +++ b/Polyhedron/demo/Polyhedron/Scene_polygon_soup_item.cpp @@ -2,11 +2,8 @@ #include #include "Scene_polygon_soup_item.h" -#include "Scene_polyhedron_item.h" #include "Scene_surface_mesh_item.h" #include -#include -#include #include #include @@ -34,7 +31,7 @@ struct Scene_polygon_soup_item_priv{ typedef Polygon_soup::Polygons::const_iterator Polygons_iterator; - typedef Kernel::Point_3 Point_3; + typedef EPICK::Point_3 Point_3; Scene_polygon_soup_item_priv(Scene_polygon_soup_item* parent) : soup(0), @@ -91,49 +88,6 @@ struct Scene_polygon_soup_item_priv{ }; -struct Polyhedron_to_polygon_soup_writer { - typedef Kernel::Point_3 Point_3; - - Polygon_soup* soup; - Polygon_soup::Polygon_3 polygon; - - Polyhedron_to_polygon_soup_writer(Polygon_soup* soup) : soup(soup), polygon() { - } - - void write_header( std::ostream&, - std::size_t /* vertices */, - std::size_t /* halfedges */, - std::size_t /* facets */, - bool /* normals */ = false ) { - soup->clear(); - } - - void write_footer() { - } - - void write_vertex( const double& x, const double& y, const double& z) { - soup->points.push_back(Point_3(x, y, z)); - } - - void write_normal( const double& /* x */, const double& /* y */, const double& /* z */) { - } - - void write_facet_header() { - } - - void write_facet_begin( std::size_t no) { - polygon.clear(); - polygon.reserve(no); - } - void write_facet_vertex_index( std::size_t index) { - polygon.push_back(index); - } - void write_facet_end() { - soup->polygons.push_back(polygon); - polygon.clear(); - } -}; // end struct Polyhedron_to_soup_writer - void Scene_polygon_soup_item_priv::initializeBuffers(CGAL::Three::Viewer_interface* viewer) const { @@ -242,7 +196,7 @@ Scene_polygon_soup_item_priv::initializeBuffers(CGAL::Three::Viewer_interface* v item->are_buffers_filled = true; } -typedef Polyhedron::Traits Traits; +typedef EPICK Traits; typedef Polygon_soup::Polygon_3 Facet; void @@ -257,7 +211,7 @@ Scene_polygon_soup_item_priv::triangulate_polygon(Polygons_iterator pit, int pol const Point_3& pc = soup->points[pit->at(2)]; Traits::Vector_3 normal = CGAL::cross_product(pb-pa, pc -pa); normal = normal / std::sqrt(normal * normal); - typedef FacetTriangulator FT; + typedef FacetTriangulator FT; double diagonal; if(item->diagonalBbox() != std::numeric_limits::infinity()) @@ -320,7 +274,7 @@ Scene_polygon_soup_item_priv::triangulate_polygon(Polygons_iterator pit, int pol const Point_3& pb = soup->points[pit->at(1)]; const Point_3& pc = soup->points[pit->at(2)]; - Kernel::Vector_3 n = CGAL::cross_product(pb-pa, pc -pa); + EPICK::Vector_3 n = CGAL::cross_product(pb-pa, pc -pa); n = n / std::sqrt(n * n); CGAL::Color color; if(!soup->fcolors.empty()) @@ -374,7 +328,7 @@ Scene_polygon_soup_item_priv::compute_normals_and_vertices() const{ const Point_3& pb = soup->points[it->at(1)]; const Point_3& pc = soup->points[it->at(2)]; - Kernel::Vector_3 n = CGAL::cross_product(pb-pa, pc -pa); + EPICK::Vector_3 n = CGAL::cross_product(pb-pa, pc -pa); n = n / std::sqrt(n * n); normals.push_back(n.x()); @@ -500,8 +454,6 @@ void Scene_polygon_soup_item::init_polygon_soup(std::size_t nb_pts, std::size_t } - -//#include #include template void polygon_mesh_to_soup(PolygonMesh& mesh, Polygon_soup& soup) @@ -534,15 +486,6 @@ void polygon_mesh_to_soup(PolygonMesh& mesh, Polygon_soup& soup) } -void Scene_polygon_soup_item::load(Scene_polyhedron_item* poly_item) { - if(!poly_item) return; - if(!poly_item->polyhedron()) return; - - if(!d->soup) - d->soup = new Polygon_soup; - polygon_mesh_to_soup(*poly_item->polyhedron(), *d->soup); - invalidateOpenGLBuffers(); -} void Scene_polygon_soup_item::load(Scene_surface_mesh_item* sm_item) { if(!sm_item) return; @@ -657,28 +600,6 @@ Scene_polygon_soup_item::save(std::ostream& out) const return (bool) out; } -bool -Scene_polygon_soup_item::exportAsPolyhedron(Polyhedron* out_polyhedron) -{ - if (!orient()) - return false; - - CGAL::Polygon_mesh_processing::polygon_soup_to_polygon_mesh( - d->soup->points, d->soup->polygons, *out_polyhedron); - std::size_t rv = CGAL::Polygon_mesh_processing::remove_isolated_vertices(*out_polyhedron); - if(rv > 0) - std::cerr << "Ignore isolated vertices: " << rv << std::endl; - if(out_polyhedron->size_of_vertices() > 0) { - // Also check whether the consistent orientation is fine - if(out_polyhedron->is_closed() && - !CGAL::Polygon_mesh_processing::is_outward_oriented(*out_polyhedron)) { - out_polyhedron->inside_out(); - } - return true; - } - return false; -} - bool Scene_polygon_soup_item::exportAsSurfaceMesh(SMesh *out_surface_mesh) { diff --git a/Polyhedron/demo/Polyhedron/Scene_polygon_soup_item.h b/Polyhedron/demo/Polyhedron/Scene_polygon_soup_item.h index 656d50cab01..f2deb9fadf7 100644 --- a/Polyhedron/demo/Polyhedron/Scene_polygon_soup_item.h +++ b/Polyhedron/demo/Polyhedron/Scene_polygon_soup_item.h @@ -2,7 +2,6 @@ #define SCENE_POLYGON_SOUP_ITEM_H #include "Scene_polygon_soup_item_config.h" #include -#include "Polyhedron_type.h" #include "SMesh_type.h" #include @@ -13,7 +12,7 @@ struct Scene_polygon_soup_item_priv; struct Polygon_soup { - typedef Kernel::Point_3 Point_3; + typedef EPICK::Point_3 Point_3; typedef std::vector Points; //vector containing 3 indices of points in Points typedef std::vector Polygon_3; @@ -97,7 +96,6 @@ struct Polygon_soup }; -class Scene_polyhedron_item; class Scene_surface_mesh_item; class SCENE_POLYGON_SOUP_ITEM_EXPORT Scene_polygon_soup_item @@ -105,7 +103,7 @@ class SCENE_POLYGON_SOUP_ITEM_EXPORT Scene_polygon_soup_item { Q_OBJECT public: - typedef Kernel::Point_3 Point_3; + typedef EPICK::Point_3 Point_3; typedef Polygon_soup::Points Points; typedef Polygon_soup::Polygons Polygons; typedef Polygon_soup::Edges Edges; @@ -125,7 +123,6 @@ public: const std::vector& vcolors); bool load(std::istream& in); - void load(Scene_polyhedron_item*); void load(Scene_surface_mesh_item*); bool isDataColored(); @@ -158,7 +155,6 @@ public: public Q_SLOTS: void shuffle_orientations(); bool orient(); - bool exportAsPolyhedron(Polyhedron*); bool exportAsSurfaceMesh(SMesh*); void inside_out(); diff --git a/Polyhedron/demo/Polyhedron/Scene_polyhedron_item.cpp b/Polyhedron/demo/Polyhedron/Scene_polyhedron_item.cpp deleted file mode 100644 index 58a466c7ad1..00000000000 --- a/Polyhedron/demo/Polyhedron/Scene_polyhedron_item.cpp +++ /dev/null @@ -1,2288 +0,0 @@ -#include "Scene_polyhedron_item.h" -#include -#include -#include "Kernel_type.h" -#include -#include -#include -#include - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include -#include -#include -#include - -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include -#include "triangulate_primitive.h" -#include "Color_map.h" -#include "id_printing.h" - -namespace PMP = CGAL::Polygon_mesh_processing; -typedef Polyhedron::Traits Traits; -typedef Polyhedron::Facet Facet; -typedef Polyhedron::Traits Kernel; -typedef Kernel::Point_3 Point; -typedef Kernel::Vector_3 Vector; -typedef Polyhedron::Halfedge_around_facet_circulator HF_circulator; -typedef boost::graph_traits::face_descriptor face_descriptor; -//Used to triangulate the AABB_Tree -class Primitive -{ -public: - // types - typedef Polyhedron::Facet_iterator Id; // Id type - typedef Kernel::Point_3 Point; // point type - typedef Kernel::Triangle_3 Datum; // datum type - -private: - // member data - Id m_it; // iterator - Datum m_datum; // 3D triangle - - // constructor -public: - Primitive() {} - Primitive(Datum triangle, Id it) - : m_it(it), m_datum(triangle) - { - } -public: - Id& id() { return m_it; } - const Id& id() const { return m_it; } - Datum& datum() { return m_datum; } - const Datum& datum() const { return m_datum; } - - /// Returns a point on the primitive - Point reference_point() const { return m_datum.vertex(0); } -}; - -typedef CGAL::AABB_traits AABB_traits; -typedef CGAL::AABB_tree Input_facets_AABB_tree; - -struct Scene_polyhedron_item_priv{ - typedef Polyhedron::Facet_iterator Facet_iterator; - typedef std::vector Color_vector; - Scene_polyhedron_item_priv(Scene_polyhedron_item* item) - : item(item), poly(new Polyhedron) - { - init_default_values(); - } - Scene_polyhedron_item_priv(const Polyhedron& poly_, Scene_polyhedron_item* item) - : item(item), poly(new Polyhedron(poly_)) - { - init_default_values(); - } - - Scene_polyhedron_item_priv(Polyhedron* const poly_, Scene_polyhedron_item* item) - : item(item), poly(poly_) - { - init_default_values(); - } - ~Scene_polyhedron_item_priv() - { - delete poly; - BOOST_FOREACH(TextItem* it, targeted_id) - delete it; - } - - void init_default_values() { - program = NULL; - show_only_feature_edges_m = false; - show_feature_edges_m = false; - facet_picking_m = false; - erase_next_picked_facet_m = false; - plugin_has_set_color_vector_m = false; - nb_facets = 0; - nb_lines = 0; - nb_f_lines = 0; - is_multicolor = false; - no_flat = false; - vertices_displayed = false; - edges_displayed = false; - faces_displayed = false; - invalidate_stats(); - CGAL::set_halfedgeds_items_id(*poly); - } - - - void compute_normals_and_vertices(const bool is_recent, - const bool colors_only = false, - const bool draw_two_sides = false) const; - - bool isFacetConvex(Facet_iterator, const Polyhedron::Traits::Vector_3&)const; - - void triangulate_convex_facet(Facet_iterator, - const bool, const bool, const bool is_recent)const; - - void triangulate_facet(Scene_polyhedron_item::Facet_iterator, - const Traits::Vector_3& normal, - const bool colors_only, - const bool draw_two_sides, - const bool is_recent) const; - void init(); - void invalidate_stats(); - void* get_aabb_tree(); - QList triangulate_primitive(Polyhedron::Facet_iterator fit, - Traits::Vector_3 normal); - Color_vector colors_; - bool show_only_feature_edges_m; - bool show_feature_edges_m; - bool facet_picking_m; - bool erase_next_picked_facet_m; - bool no_flat; - //the following variable is used to indicate if the color vector must not be automatically updated. - // If this boolean is true, the item's color will be independant of the color's wheel, if it is false - // changing the color in the wheel will change the color of the item, even if it is multicolor. - bool plugin_has_set_color_vector_m; - bool is_multicolor; - void killIds(); - void fillTargetedIds(const Polyhedron::Facet_handle& selected_fh, - const Kernel::Point_3 &point_under, - CGAL::Three::Viewer_interface *viewer, - const CGAL::qglviewer::Vec &offset); - Scene_polyhedron_item* item; - Polyhedron *poly; - double volume, area; - QVector colors; - mutable std::vector positions_lines; - mutable std::vector idx_lines; - mutable std::vector idx_feature_lines; - mutable std::vector idx_faces; - mutable std::vector positions_facets; - mutable std::vector normals_gouraud; - mutable std::vector normals_flat; - mutable std::vector color_facets; - mutable std::size_t nb_facets; - mutable std::size_t nb_lines; - mutable std::size_t nb_f_lines; - mutable QOpenGLShaderProgram *program; - unsigned int number_of_null_length_edges; - unsigned int number_of_degenerated_faces; - int genus; - bool self_intersect; - int m_min_patch_id; // the min value of the patch ids initialized in init() - mutable bool vertices_displayed; - mutable bool edges_displayed; - mutable bool faces_displayed; - mutable QList text_ids; - mutable std::vector targeted_id; - void initialize_buffers(CGAL::Three::Viewer_interface *viewer = 0) const; - enum VAOs { - Facets=0, - Edges, - Feature_edges, - Gouraud_Facets, - NbOfVaos - }; - enum VBOs { - Facets_vertices = 0, - Facets_color, - Edges_vertices, - Feature_edges_vertices, - Edges_color, - Facets_normals_gouraud, - Facets_normals_flat, - NbOfVbos - }; - TextListItem* textVItems; - TextListItem* textEItems; - TextListItem* textFItems; - // Initialization -}; - - - -const char* aabb_property_name = "Scene_polyhedron_item aabb tree"; - - -QList Scene_polyhedron_item_priv::triangulate_primitive(Polyhedron::Facet_iterator fit, - Traits::Vector_3 normal) -{ - typedef FacetTriangulator::vertex_descriptor> FT; - //The output list - QList res; - //check if normal contains NaN values - if (normal.x() != normal.x() || normal.y() != normal.y() || normal.z() != normal.z()) - { - qDebug()<<"Warning in triangulation of the selection item: normal contains NaN values and is not valid."; - return QList(); - } - double diagonal; - if(item->diagonalBbox() != std::numeric_limits::infinity()) - diagonal = item->diagonalBbox(); - else - diagonal = 0.0; - FT triangulation(fit,normal,poly,diagonal); - //iterates on the internal faces to add the vertices to the positions - //and the normals to the appropriate vectors - for( FT::CDT::Finite_faces_iterator - ffit = triangulation.cdt->finite_faces_begin(), - end = triangulation.cdt->finite_faces_end(); - ffit != end; ++ffit) - { - if(ffit->info().is_external) - continue; - - - res << Kernel::Triangle_3(ffit->vertex(0)->point(), - ffit->vertex(1)->point(), - ffit->vertex(2)->point()); - - } - return res; -} - - - -void* Scene_polyhedron_item_priv::get_aabb_tree() -{ - QVariant aabb_tree_property = item->property(aabb_property_name); - if(aabb_tree_property.isValid()) { - void* ptr = aabb_tree_property.value(); - return static_cast(ptr); - } - else { - QApplication::setOverrideCursor(Qt::WaitCursor); - Polyhedron* poly = item->polyhedron(); - if(poly) { - - Input_facets_AABB_tree* tree = - new Input_facets_AABB_tree(); - typedef Polyhedron::Traits Kernel; - int index =0; - BOOST_FOREACH( Polyhedron::Facet_iterator f, faces(*poly)) - { - if (CGAL::is_degenerate_triangle_face(f, *poly, get(CGAL::vertex_point, *poly), Kernel())) - continue; - if(!f->is_triangle()) - { - Traits::Vector_3 normal = f->plane().orthogonal_vector(); //initialized in compute_normals_and_vertices - index +=3; - Q_FOREACH(Kernel::Triangle_3 triangle, triangulate_primitive(f,normal)) - { - Primitive primitive(triangle, f); - tree->insert(primitive); - } - } - else - { - Kernel::Triangle_3 triangle( - f->halfedge()->vertex()->point(), - f->halfedge()->next()->vertex()->point(), - f->halfedge()->next()->next()->vertex()->point() - ); - Primitive primitive(triangle, f); - tree->insert(primitive); - } - } - item->setProperty(aabb_property_name, - QVariant::fromValue(tree)); - QApplication::restoreOverrideCursor(); - return tree; - } - else return 0; - } -} - -void delete_aabb_tree(Scene_polyhedron_item* item) -{ - QVariant aabb_tree_property = item->property(aabb_property_name); - if(aabb_tree_property.isValid()) { - void* ptr = aabb_tree_property.value(); - Input_facets_AABB_tree* tree = static_cast(ptr); - if(tree) { - delete tree; - tree = 0; - } - item->setProperty(aabb_property_name, QVariant()); - } -} - -template -void push_back_xyz(const TypeWithXYZ& t, - ContainerWithPushBack& vector) -{ - vector.push_back(t.x()); - vector.push_back(t.y()); - vector.push_back(t.z()); -} - - -template -void push_back_rgb(const TypeWithRGB& t, - ContainerWithPushBack& vector) -{ - vector.push_back(t.redF()); - vector.push_back(t.greenF()); - vector.push_back(t.blueF()); -} - -bool Scene_polyhedron_item_priv::isFacetConvex(Facet_iterator f, const Polyhedron::Traits::Vector_3& N) const -{ - typedef Polyhedron::Traits::Vector_3 Vector; - typedef Polyhedron::Traits::Orientation Orientation; - Orientation orientation; - Vector normal = N; - Facet::Halfedge_around_facet_circulator - he = f->facet_begin(), - he_end(he); - bool normal_is_ok; - do{ - normal_is_ok = true; - - //Initializes the facet orientation - - Polyhedron::Traits::Point_3 S,T; - S = source(he, *poly)->point(); - T = target(he, *poly)->point(); - Vector V1 = Vector((T-S).x(), (T-S).y(), (T-S).z()); - S = source(he->next(), *poly)->point(); - T = target(he->next(), *poly)->point(); - Vector V2 = Vector((T-S).x(), (T-S).y(), (T-S).z()); - - if(normal == Vector(0,0,0)) - normal_is_ok = false; - if(normal_is_ok) - { - orientation = Polyhedron::Traits::Orientation_3()(V1, V2, normal); - if( orientation == CGAL::COPLANAR ) - normal_is_ok = false; - } - //Checks if the normal is good : if the normal is null - // or if it is coplanar to the facet, we need another one. - if(!normal_is_ok) - { - normal = CGAL::cross_product(V1,V2); - } - - }while( ++he != he_end && !normal_is_ok); - //if no good normal can be found, stop here. - if (!normal_is_ok) - return false; - - //computes convexness - - //re-initializes he_end; - he = f->facet_begin(), - he_end = he; - do - { - Polyhedron::Traits::Point_3 S,T; - S = source(he, *poly)->point(); - T = target(he, *poly)->point(); - Vector V1 = Vector((T-S).x(), (T-S).y(), (T-S).z()); - S = source(he->next(), *poly)->point(); - T = target(he->next(), *poly)->point(); - Vector V2 = Vector((T-S).x(), (T-S).y(), (T-S).z()); - Orientation res = Polyhedron::Traits::Orientation_3()(V1, V2, normal) ; - - if(res!= orientation && res != CGAL::ZERO) - return false; - }while( ++he != he_end); - return true; -} - -void Scene_polyhedron_item_priv::triangulate_convex_facet(Facet_iterator f, - const bool colors_only, - const bool draw_two_sides, - const bool is_recent)const -{ - const CGAL::qglviewer::Vec v_offset = static_cast(CGAL::QGLViewer::QGLViewerPool().first())->offset(); - Vector offset = Vector(v_offset.x, v_offset.y, v_offset.z); - Polyhedron::Traits::Point_3 p0,p1,p2; - Facet::Halfedge_around_facet_circulator - he = f->facet_begin(), - he_end(he); - const int this_patch_id = f->patch_id(); - while( next(he, *poly) != prev(he_end, *poly)) - { - ++he; - if (is_multicolor) - { - for (int i = 0; i<3; ++i) - { - color_facets.push_back(colors_[this_patch_id-m_min_patch_id].redF()); - color_facets.push_back(colors_[this_patch_id-m_min_patch_id].greenF()); - color_facets.push_back(colors_[this_patch_id-m_min_patch_id].blueF()); - - color_facets.push_back(colors_[this_patch_id-m_min_patch_id].redF()); - color_facets.push_back(colors_[this_patch_id-m_min_patch_id].greenF()); - color_facets.push_back(colors_[this_patch_id-m_min_patch_id].blueF()); - } - } - if (colors_only) - continue; - - - p0 = he_end->vertex()->point(); - p1 = he->vertex()->point(); - p2 = next(he, *poly)->vertex()->point(); - - idx_faces.push_back(static_cast(he_end->vertex()->id())); - idx_faces.push_back(static_cast(he->vertex()->id())); - idx_faces.push_back(static_cast(next(he, *poly)->vertex()->id())); - - if(is_multicolor || !no_flat || !is_recent ) - { - push_back_xyz(p0+offset, positions_facets); - push_back_xyz(p1+offset, positions_facets); - push_back_xyz(p2+offset, positions_facets); - } - if(!draw_two_sides) - { - push_back_xyz(f->plane().orthogonal_vector(), normals_flat); - push_back_xyz(f->plane().orthogonal_vector(), normals_flat); - push_back_xyz(f->plane().orthogonal_vector(), normals_flat); - } - } - - -} -//Make sure all the facets are triangles -void -Scene_polyhedron_item_priv::triangulate_facet(Scene_polyhedron_item::Facet_iterator fit, - const Traits::Vector_3& normal, - const bool colors_only, - const bool draw_two_sides, - const bool is_recent) const - - -{ - typedef FacetTriangulator::vertex_descriptor> FT; - const CGAL::qglviewer::Vec v_offset = static_cast(CGAL::QGLViewer::QGLViewerPool().first())->offset(); - Vector offset = Vector(v_offset.x, v_offset.y, v_offset.z); - double diagonal; - if(item->diagonalBbox() != std::numeric_limits::infinity()) - diagonal = item->diagonalBbox(); - else - diagonal = 0.0; - FT triangulation(fit,normal,poly,diagonal,offset); - - if(triangulation.cdt->dimension() != 2 ) - { - qDebug()<<"Warning : cdt not right. Facet not displayed"; - return; - } - - //iterates on the internal faces to add the vertices to the positions - //and the normals to the appropriate vectors - const int this_patch_id = fit->patch_id(); - for(FT::CDT::Finite_faces_iterator - ffit = triangulation.cdt->finite_faces_begin(), - end = triangulation.cdt->finite_faces_end(); - ffit != end; ++ffit) - { - if(ffit->info().is_external) - continue; - - if (is_multicolor) - { - for (int i = 0; i<3; ++i) - { - push_back_rgb(colors_[this_patch_id-m_min_patch_id], color_facets); - } - } - if (colors_only) - continue; - - idx_faces.push_back(static_cast(triangulation.v2v[ffit->vertex(0)]->id())); - idx_faces.push_back(static_cast(triangulation.v2v[ffit->vertex(1)]->id())); - idx_faces.push_back(static_cast(triangulation.v2v[ffit->vertex(2)]->id())); - - if(is_multicolor || !no_flat || !is_recent) - { - push_back_xyz(ffit->vertex(0)->point(), positions_facets); - push_back_xyz(ffit->vertex(1)->point(), positions_facets); - push_back_xyz(ffit->vertex(2)->point(), positions_facets); - if(!draw_two_sides) - { - push_back_xyz(normal, normals_flat); - push_back_xyz(normal, normals_flat); - push_back_xyz(normal, normals_flat); - } - } - } -} - - - -void -Scene_polyhedron_item_priv::initialize_buffers(CGAL::Three::Viewer_interface* viewer) const -{ - //vao containing the data for the facets - if((!viewer->isOpenGL_4_3() && !no_flat )|| is_multicolor) - { - //flat - if(viewer->property("draw_two_sides").toBool()) - { - program = item->getShaderProgram(Scene_polyhedron_item::PROGRAM_OLD_FLAT, viewer); - } - else - { - program = item->getShaderProgram(Scene_polyhedron_item::PROGRAM_WITH_LIGHT, viewer); - } - item->vaos[Facets]->bind(); - item->buffers[Facets_vertices].bind(); - item->buffers[Facets_vertices].allocate(positions_facets.data(), - static_cast(positions_facets.size()*sizeof(float))); - program->enableAttributeArray("vertex"); - program->setAttributeBuffer("vertex",GL_FLOAT,0,3); - item->buffers[Facets_vertices].release(); - if(viewer->property("draw_two_sides").toBool()) - { - //computed in the fragment shader - program->disableAttributeArray("normals"); - } - else - { - //use computed flat normals - item->buffers[Facets_normals_flat].bind(); - item->buffers[Facets_normals_flat].allocate(normals_flat.data(), - static_cast(normals_flat.size()*sizeof(float))); - program->enableAttributeArray("normals"); - program->setAttributeBuffer("normals",GL_FLOAT,0,3); - item->buffers[Facets_normals_flat].release(); - } - if(is_multicolor) - { - item->buffers[Facets_color].bind(); - item->buffers[Facets_color].allocate(color_facets.data(), - static_cast(color_facets.size()*sizeof(float))); - program->enableAttributeArray("colors"); - program->setAttributeBuffer("colors",GL_FLOAT,0,3); - item->buffers[Facets_color].release(); - } - else - { - program->disableAttributeArray("colors"); - } - item->vaos[Facets]->release(); - } - program = item->getShaderProgram(Scene_polyhedron_item::PROGRAM_WITH_LIGHT, viewer); - program->bind(); - //gouraud - item->vaos[Gouraud_Facets]->bind(); - item->buffers[Edges_vertices].bind(); - item->buffers[Edges_vertices].allocate(positions_lines.data(), - static_cast(positions_lines.size()*sizeof(float))); - program->enableAttributeArray("vertex"); - program->setAttributeBuffer("vertex",GL_FLOAT,0,3); - item->buffers[Edges_vertices].release(); - - item->buffers[Facets_normals_gouraud].bind(); - item->buffers[Facets_normals_gouraud].allocate(normals_gouraud.data(), - static_cast(normals_gouraud.size()*sizeof(float))); - program->enableAttributeArray("normals"); - program->setAttributeBuffer("normals",GL_FLOAT,0,3); - item->buffers[Facets_normals_gouraud].release(); - if(is_multicolor) - { - item->buffers[Facets_color].bind(); - item->buffers[Facets_color].allocate(color_facets.data(), - static_cast(color_facets.size()*sizeof(float))); - program->enableAttributeArray("colors"); - program->setAttributeBuffer("colors",GL_FLOAT,0,3); - item->buffers[Facets_color].release(); - } - else - { - program->disableAttributeArray("colors"); - } - item->vaos[Gouraud_Facets]->release(); - program->release(); - if(viewer->isOpenGL_4_3() && !is_multicolor) - { - //modern flat - program = item->getShaderProgram(Scene_polyhedron_item::PROGRAM_FLAT, viewer); - program->bind(); - item->vaos[Gouraud_Facets]->bind(); - item->buffers[Edges_vertices].bind(); - program->enableAttributeArray("vertex"); - program->setAttributeBuffer("vertex",GL_FLOAT,0,3); - item->buffers[Edges_vertices].release(); - - if(is_multicolor) - { - item->buffers[Facets_color].bind(); - program->enableAttributeArray("colors"); - program->setAttributeBuffer("colors",GL_FLOAT,0,3); - item->buffers[Facets_color].release(); - } - else - { - program->disableAttributeArray("colors"); - } - item->vaos[Gouraud_Facets]->release(); - program->release(); - } - //vao containing the data for the lines - { - program = item->getShaderProgram(Scene_polyhedron_item::PROGRAM_WITHOUT_LIGHT, viewer); - program->bind(); - item->vaos[Edges]->bind(); - - item->buffers[Edges_vertices].bind(); - program->enableAttributeArray("vertex"); - program->setAttributeBuffer("vertex",GL_FLOAT,0,3); - item->buffers[Edges_vertices].release(); - - program->disableAttributeArray("colors"); - program->release(); - - item->vaos[Edges]->release(); - - } - //vao containing the data for the feature_edges - { - program = item->getShaderProgram(Scene_polyhedron_item::PROGRAM_NO_SELECTION, viewer); - program->bind(); - item->vaos[Feature_edges]->bind(); - - item->buffers[Edges_vertices].bind(); - program->enableAttributeArray("vertex"); - program->setAttributeBuffer("vertex",GL_FLOAT,0,3); - item->buffers[Edges_vertices].release(); - program->disableAttributeArray("colors"); - program->release(); - - item->vaos[Feature_edges]->release(); - - } - nb_lines = positions_lines.size(); - positions_lines.resize(0); - positions_lines.shrink_to_fit(); - nb_facets = positions_facets.size(); - positions_facets.resize(0); - positions_facets.shrink_to_fit(); - - color_facets.resize(0); - color_facets.shrink_to_fit(); - normals_gouraud.resize(0); - normals_gouraud.shrink_to_fit(); - normals_flat.resize(0); - normals_flat.shrink_to_fit(); - - if (viewer->hasText()) - viewer->updateIds(item); - item->are_buffers_filled = true; -} - -void -Scene_polyhedron_item_priv::compute_normals_and_vertices(const bool is_recent, - const bool colors_only, - const bool draw_two_sides) const -{ - bool add_flat_data = is_multicolor || (!is_recent || !no_flat); - const CGAL::qglviewer::Vec v_offset = static_cast(CGAL::QGLViewer::QGLViewerPool().first())->offset(); - - QApplication::setOverrideCursor(Qt::WaitCursor); - positions_facets.resize(0); - positions_lines.resize(0); - normals_gouraud.resize(0); - normals_flat.resize(0); - color_facets.resize(0); - idx_faces.resize(0); - idx_lines.resize(0); - idx_feature_lines.resize(0); - - //Facets - typedef Polyhedron::Traits Kernel; - typedef Kernel::Point_3 Point; - typedef Kernel::Vector_3 Vector; - typedef Polyhedron::Facet_iterator Facet_iterator; - typedef Polyhedron::Halfedge_around_facet_circulator HF_circulator; - typedef boost::graph_traits::face_descriptor face_descriptor; - typedef boost::graph_traits::vertex_descriptor vertex_descriptor; - Vector offset = Vector(v_offset.x, v_offset.y, v_offset.z); - - CGAL::Unique_hash_map face_normals_map; - boost::associative_property_map > - nf_pmap(face_normals_map); - CGAL::Unique_hash_map vertex_normals_map; - boost::associative_property_map< CGAL::Unique_hash_map > - nv_pmap(vertex_normals_map); - - PMP::compute_normals(*poly, nv_pmap, nf_pmap); - - Facet_iterator f = poly->facets_begin(); - for(f = poly->facets_begin(); - f != poly->facets_end(); - f++) - { - if (f == boost::graph_traits::null_face()) - continue; - Vector nf = get(nf_pmap, f); - f->plane() = Kernel::Plane_3(f->halfedge()->vertex()->point(), nf); - if(is_triangle(f->halfedge(),*poly)) - { - const int this_patch_id = f->patch_id(); - HF_circulator he = f->facet_begin(); - HF_circulator end = he; - CGAL_For_all(he,end) - { - if (add_flat_data && item->isItemMulticolor()) - { - color_facets.push_back(colors_[this_patch_id-m_min_patch_id].redF()); - color_facets.push_back(colors_[this_patch_id-m_min_patch_id].greenF()); - color_facets.push_back(colors_[this_patch_id-m_min_patch_id].blueF()); - } - if (colors_only) - continue; - - const Point& p = he->vertex()->point(); - - // If Flat shading:1 normal per polygon added once per vertex - if(add_flat_data) - { - push_back_xyz(p+offset, positions_facets); - if(!draw_two_sides) - push_back_xyz(nf, normals_flat); - } - - idx_faces.push_back(static_cast(he->vertex()->id())); - } - } - else if (is_quad(f->halfedge(), *poly)) - { - if (item->isItemMulticolor()) - { - const int this_patch_id = f->patch_id(); - for (unsigned int i = 0; i < 6; ++i) - { //6 "halfedges" for the quad, because it is 2 triangles - color_facets.push_back(colors_[this_patch_id-m_min_patch_id].redF()); - color_facets.push_back(colors_[this_patch_id-m_min_patch_id].greenF()); - color_facets.push_back(colors_[this_patch_id-m_min_patch_id].blueF()); - } - } - if (colors_only) - continue; - - //1st half-quad - - idx_faces.push_back(static_cast(f->halfedge()->vertex()->id())); - idx_faces.push_back(static_cast(f->halfedge()->next()->vertex()->id())); - idx_faces.push_back(static_cast(f->halfedge()->next()->next()->vertex()->id())); - if(add_flat_data) - { - Point p0 = f->halfedge()->vertex()->point(); - Point p1 = f->halfedge()->next()->vertex()->point(); - Point p2 = f->halfedge()->next()->next()->vertex()->point(); - push_back_xyz(p0+offset, positions_facets); - push_back_xyz(p1+offset, positions_facets); - push_back_xyz(p2+offset, positions_facets); - if(!draw_two_sides) - { - push_back_xyz(nf, normals_flat); - push_back_xyz(nf, normals_flat); - push_back_xyz(nf, normals_flat); - } - } - //2nd half-quad - idx_faces.push_back(static_cast(f->halfedge()->next()->next()->vertex()->id())); - idx_faces.push_back(static_cast(f->halfedge()->prev()->vertex()->id())); - idx_faces.push_back(static_cast(f->halfedge()->vertex()->id())); - - if(add_flat_data) - { - Point p0 = f->halfedge()->next()->next()->vertex()->point(); - Point p1 = f->halfedge()->prev()->vertex()->point(); - Point p2 = f->halfedge()->vertex()->point(); - - push_back_xyz(p0+offset, positions_facets); - push_back_xyz(p1+offset, positions_facets); - push_back_xyz(p2+offset, positions_facets); - if(!draw_two_sides) - { - push_back_xyz(nf, normals_flat); - push_back_xyz(nf, normals_flat); - push_back_xyz(nf, normals_flat); - } - } - } - else - { - if(isFacetConvex(f, nf)) - { - triangulate_convex_facet(f, colors_only, draw_two_sides, is_recent); - } - else - { - this->triangulate_facet(f, nf, colors_only, draw_two_sides, is_recent); - } - } - - } - //Lines - typedef Kernel::Point_3 Point; - typedef Polyhedron::Vertex_iterator Vertex_iterator; - for(Vertex_iterator vit = poly->vertices_begin(); - vit != poly->vertices_end(); - vit++) - { - Point p = vit->point(); - push_back_xyz(p+offset, positions_lines); - //// If Gouraud shading: 1 normal per vertex - Vector nv = get(nv_pmap, vit); - push_back_xyz(nv, normals_gouraud); - } - - typedef Polyhedron::Edge_iterator Edge_iterator; - Edge_iterator he; - - for(he = poly->edges_begin(); - he != poly->edges_end(); - he++) - { - if ( he->is_feature_edge()) - { - if (colors_only) - continue; - - idx_feature_lines.push_back(static_cast(he->vertex()->id())); - idx_feature_lines.push_back(static_cast(he->opposite()->vertex()->id())); - } - else - { - if (colors_only) - continue; - - idx_lines.push_back(static_cast(he->vertex()->id())); - idx_lines.push_back(static_cast(he->opposite()->vertex()->id())); - } - } - QApplication::restoreOverrideCursor(); -} - -Scene_polyhedron_item::Scene_polyhedron_item() - : Scene_item(Scene_polyhedron_item_priv::NbOfVbos,Scene_polyhedron_item_priv::NbOfVaos), - d(new Scene_polyhedron_item_priv(this)) -{ - cur_shading=FlatPlusEdges; - is_selected = true; - d->textVItems = new TextListItem(this); - d->textEItems = new TextListItem(this); - d->textFItems = new TextListItem(this); - -} - -Scene_polyhedron_item::Scene_polyhedron_item(Polyhedron* const p) - : Scene_item(Scene_polyhedron_item_priv::NbOfVbos,Scene_polyhedron_item_priv::NbOfVaos), - d(new Scene_polyhedron_item_priv(p,this)) -{ - cur_shading=FlatPlusEdges; - is_selected = true; - d->textVItems = new TextListItem(this); - d->textEItems = new TextListItem(this); - d->textFItems = new TextListItem(this); -} - -Scene_polyhedron_item::Scene_polyhedron_item(const Polyhedron& p) - : Scene_item(Scene_polyhedron_item_priv::NbOfVbos,Scene_polyhedron_item_priv::NbOfVaos), - d(new Scene_polyhedron_item_priv(p,this)) -{ - cur_shading=FlatPlusEdges; - is_selected=true; - d->textVItems = new TextListItem(this); - d->textEItems = new TextListItem(this); - d->textFItems = new TextListItem(this); -} - -Scene_polyhedron_item::~Scene_polyhedron_item() -{ - delete_aabb_tree(this); - CGAL::QGLViewer* viewer = *CGAL::QGLViewer::QGLViewerPool().begin(); - if(viewer) - { - CGAL::Three::Viewer_interface* v = qobject_cast(viewer); - - //Clears the targeted Id - if(d) - { - BOOST_FOREACH(TextItem* item, d->targeted_id) - v->textRenderer()->removeText(item); - } - //Remove vertices textitems - if(d->textVItems) - { - v->textRenderer()->removeTextList(d->textVItems); - delete d->textVItems; - d->textVItems=NULL; - } - //Remove edges textitems - if(d->textEItems) - { - v->textRenderer()->removeTextList(d->textEItems); - delete d->textEItems; - d->textEItems=NULL; - } - //Remove faces textitems - if(d->textFItems) - { - v->textRenderer()->removeTextList(d->textFItems); - delete d->textFItems; - d->textFItems=NULL; - } - } - if(d) - { - delete d; - d=NULL; - } -} - - -void -Scene_polyhedron_item_priv:: -init() -{ - typedef Polyhedron::Facet_iterator Facet_iterator; - - if ( !plugin_has_set_color_vector_m ) - { - // Fill indices map and get max subdomain value - int max = 0; - int min = (std::numeric_limits::max)(); - for(Facet_iterator fit = poly->facets_begin(), end = poly->facets_end() ; - fit != end; ++fit) - { - max = (std::max)(max, fit->patch_id()); - min = (std::min)(min, fit->patch_id()); - } - - colors_.clear(); - compute_color_map(item->color(), (std::max)(0, max + 1 - min), - std::back_inserter(colors_)); - m_min_patch_id=min; - } - else - m_min_patch_id=0; - invalidate_stats(); -} - -void -Scene_polyhedron_item_priv:: -invalidate_stats() -{ - number_of_degenerated_faces = (unsigned int)(-1); - number_of_null_length_edges = (unsigned int)(-1); - volume = -std::numeric_limits::infinity(); - area = -std::numeric_limits::infinity(); - self_intersect = false; - genus = -1; -} - -//vertex_index is the storage for selection -Scene_polyhedron_item::Vertex_selection_map -Scene_polyhedron_item::vertex_selection_map() -{ - return get(boost::vertex_index,*d->poly); -} -//face_index is the storage for selection -Scene_polyhedron_item::Face_selection_map -Scene_polyhedron_item::face_selection_map() -{ - return get(boost::face_index,*d->poly); -} - -Scene_polyhedron_item* -Scene_polyhedron_item::clone() const { - return new Scene_polyhedron_item(*(d->poly));} - -// Load polyhedron from .OFF file -bool -Scene_polyhedron_item::load(std::istream& in) -{ - - - in >> *(d->poly); - - if ( in && !isEmpty() ) - { - invalidateOpenGLBuffers(); - return true; - } - return false; -} -// Load polyhedron from .obj file -bool -Scene_polyhedron_item::load_obj(std::istream& in) -{ - typedef Polyhedron::Vertex::Point Point; - std::vector points; - std::vector > faces; - bool failed = !CGAL::read_OBJ(in,points,faces); - - CGAL::Polygon_mesh_processing::orient_polygon_soup(points,faces); - CGAL::Polygon_mesh_processing::polygon_soup_to_polygon_mesh( points,faces,*(d->poly)); - if ( (! failed) && !isEmpty() ) - { - invalidateOpenGLBuffers(); - return true; - } - return false; -} - -// Write polyhedron to .OFF file -bool -Scene_polyhedron_item::save(std::ostream& out) const -{ - QApplication::setOverrideCursor(Qt::WaitCursor); - out.precision(17); - out << *(d->poly); - QApplication::restoreOverrideCursor(); - return (bool) out; -} - -bool -Scene_polyhedron_item::save_obj(std::ostream& out) const -{ - CGAL::File_writer_wavefront writer; - CGAL::generic_print_polyhedron(out, *(d->poly), writer); - return out.good(); -} - - -QString -Scene_polyhedron_item::toolTip() const -{ - if(!d->poly) - return QString(); - - QString str = - QObject::tr("

Polyhedron_3 %1 (mode: %5, color: %6)

" - "

Number of vertices: %2
" - "Number of edges: %3
" - "Number of faces: %4") - .arg(this->name()) - .arg(d->poly->size_of_vertices()) - .arg(d->poly->size_of_halfedges()/2) - .arg(d->poly->size_of_facets()) - .arg(this->renderingModeName()) - .arg(this->color().name()); - str += QString("
Number of isolated vertices: %1
").arg(getNbIsolatedvertices()); - return str; -} - -QMenu* Scene_polyhedron_item::contextMenu() -{ - const char* prop_name = "Menu modified by Scene_polyhedron_item."; - - QMenu* menu = Scene_item::contextMenu(); - - QAction* actionResetColor= - menu->findChild(tr("actionResetColor")); - - if(isItemMulticolor()) - { - if(!actionResetColor) - { - actionResetColor = menu->addAction(tr("Reset Colors")); - actionResetColor->setObjectName("actionResetColor"); - } - connect(actionResetColor, SIGNAL(triggered()), - this, SLOT(resetColors())); - } - else if(actionResetColor) - { - menu->removeAction(actionResetColor); - actionResetColor->deleteLater(); - } - - - // Use dynamic properties: - // http://doc.qt.io/qt-5/qobject.html#property - bool menuChanged = menu->property(prop_name).toBool(); - - if(!menuChanged) { - menu->addSeparator(); - QAction* actionPrintVertices= - menu->addAction(tr("Display Vertices Ids")); - actionPrintVertices->setCheckable(true); - actionPrintVertices->setObjectName("actionPrintVertices"); - connect(actionPrintVertices, SIGNAL(triggered(bool)), - this, SLOT(showVertices(bool))); - - QAction* actionPrintEdges= - menu->addAction(tr("Display Edges Ids")); - actionPrintEdges->setCheckable(true); - actionPrintEdges->setObjectName("actionPrintEdges"); - connect(actionPrintEdges, SIGNAL(triggered(bool)), - this, SLOT(showEdges(bool))); - - QAction* actionPrintFaces= - menu->addAction(tr("Display Faces Ids")); - actionPrintFaces->setCheckable(true); - actionPrintFaces->setObjectName("actionPrintFaces"); - connect(actionPrintFaces, SIGNAL(triggered(bool)), - this, SLOT(showFaces(bool))); - - QAction* actionZoomToId= - menu->addAction(tr("Zoom to Index")); - actionZoomToId->setObjectName("actionZoomToId"); - connect(actionZoomToId, &QAction::triggered, - this, &Scene_polyhedron_item::zoomToId); - - menu->addSeparator(); - - QAction* actionShowOnlyFeatureEdges = - menu->addAction(tr("Show Only &Feature Edges")); - actionShowOnlyFeatureEdges->setCheckable(true); - actionShowOnlyFeatureEdges->setChecked(d->show_only_feature_edges_m); - actionShowOnlyFeatureEdges->setObjectName("actionShowOnlyFeatureEdges"); - connect(actionShowOnlyFeatureEdges, SIGNAL(toggled(bool)), - this, SLOT(show_only_feature_edges(bool))); - - QAction* actionShowFeatureEdges = - menu->addAction(tr("Show Feature Edges")); - actionShowFeatureEdges->setCheckable(true); - actionShowFeatureEdges->setChecked(d->show_feature_edges_m); - actionShowFeatureEdges->setObjectName("actionShowFeatureEdges"); - connect(actionShowFeatureEdges, SIGNAL(toggled(bool)), - this, SLOT(show_feature_edges(bool))); - - QAction* actionPickFacets = - menu->addAction(tr("Facets Picking")); - actionPickFacets->setCheckable(true); - actionPickFacets->setObjectName("actionPickFacets"); - connect(actionPickFacets, SIGNAL(toggled(bool)), - this, SLOT(enable_facets_picking(bool))); - - QAction* actionEraseNextFacet = - menu->addAction(tr("Erase Next Picked Facet")); - actionEraseNextFacet->setCheckable(true); - actionEraseNextFacet->setObjectName("actionEraseNextFacet"); - connect(actionEraseNextFacet, SIGNAL(toggled(bool)), - this, SLOT(set_erase_next_picked_facet(bool))); - if(! static_cast(CGAL::QGLViewer::QGLViewerPool().first())->isOpenGL_4_3()) - { - QAction* actionDisableFlatShading= - menu->addAction(tr("Disable Flat Shading")); - actionDisableFlatShading->setCheckable(true); - actionDisableFlatShading->setObjectName("actionDisableFlatShading"); - connect(actionDisableFlatShading, SIGNAL(toggled(bool)), - this, SLOT(set_flat_disabled(bool))); - } - menu->setProperty(prop_name, true); - } - - QAction* action = menu->findChild("actionShowOnlyFeatureEdges"); - if(action) action->setChecked(d->show_only_feature_edges_m); - action = menu->findChild("actionShowFeatureEdges"); - if(action) action->setChecked(d->show_feature_edges_m); - action = menu->findChild("actionPickFacets"); - if(action) action->setChecked(d->facet_picking_m); - action = menu->findChild("actionEraseNextFacet"); - if(action) action->setChecked(d->erase_next_picked_facet_m); - action = menu->findChild("actionPrintVertices"); - if(action) action->setChecked(d->vertices_displayed); - action = menu->findChild("actionPrintEdges"); - if(action) action->setChecked(d->edges_displayed); - action = menu->findChild("actionPrintFaces"); - if(action) action->setChecked(d->faces_displayed); - - return menu; -} -void Scene_polyhedron_item::show_only_feature_edges(bool b) -{ - d->show_only_feature_edges_m = b; - invalidateOpenGLBuffers(); - Q_EMIT itemChanged(); -} - -void Scene_polyhedron_item::show_feature_edges(bool b) -{ - d->show_feature_edges_m = b; - invalidateOpenGLBuffers(); - Q_EMIT itemChanged(); -} - -void Scene_polyhedron_item::enable_facets_picking(bool b) -{ - d->facet_picking_m = b; -} - -void Scene_polyhedron_item::set_erase_next_picked_facet(bool b) -{ - if(b) { d->facet_picking_m = true; } // automatically activate facet_picking - d->erase_next_picked_facet_m = b; -} - -void Scene_polyhedron_item::draw(CGAL::Three::Viewer_interface* viewer) const { - if(!are_buffers_filled) - { - d->compute_normals_and_vertices(viewer->isOpenGL_4_3(), - false, - viewer->property("draw_two_sides").toBool()); - d->initialize_buffers(viewer); - compute_bbox(); - } - - if(!d->is_multicolor && viewer->isOpenGL_4_3() && - (renderingMode() == Flat || renderingMode() == FlatPlusEdges)) - { - vaos[Scene_polyhedron_item_priv::Gouraud_Facets]->bind(); - attribBuffers(viewer, PROGRAM_FLAT); - d->program = getShaderProgram(PROGRAM_FLAT); - d->program->bind(); - if(!d->is_multicolor) - { - d->program->setAttributeValue("colors", this->color()); - } - if(is_selected) - d->program->setUniformValue("is_selected", true); - else - d->program->setUniformValue("is_selected", false); - viewer->glDrawElements(GL_TRIANGLES, static_cast(d->idx_faces.size()), - GL_UNSIGNED_INT, d->idx_faces.data()); - d->program->release(); - vaos[Scene_polyhedron_item_priv::Gouraud_Facets]->release(); - } - else if((d->is_multicolor || !viewer->isOpenGL_4_3()) && - (renderingMode() == Flat || renderingMode() == FlatPlusEdges)) - { - vaos[Scene_polyhedron_item_priv::Facets]->bind(); - if(viewer->property("draw_two_sides").toBool()) - { - attribBuffers(viewer, PROGRAM_OLD_FLAT); - d->program = getShaderProgram(PROGRAM_OLD_FLAT); - } - else - { - attribBuffers(viewer, PROGRAM_WITH_LIGHT); - d->program = getShaderProgram(PROGRAM_WITH_LIGHT); - } - d->program->bind(); - if(!d->is_multicolor) - { - d->program->setAttributeValue("colors", this->color()); - } - if(is_selected) - d->program->setUniformValue("is_selected", true); - else - d->program->setUniformValue("is_selected", false); - viewer->glDrawArrays(GL_TRIANGLES, 0, static_cast(d->nb_facets/3)); - d->program->release(); - vaos[Scene_polyhedron_item_priv::Facets]->release(); - } - else - { - vaos[Scene_polyhedron_item_priv::Gouraud_Facets]->bind(); - attribBuffers(viewer, PROGRAM_WITH_LIGHT); - d->program = getShaderProgram(PROGRAM_WITH_LIGHT); - d->program->bind(); - if(!d->is_multicolor) - { - d->program->setAttributeValue("colors", this->color()); - } - if(is_selected) - d->program->setUniformValue("is_selected", true); - else - d->program->setUniformValue("is_selected", false); - - viewer->glDrawElements(GL_TRIANGLES, static_cast(d->idx_faces.size()), - GL_UNSIGNED_INT, d->idx_faces.data()); - d->program->release(); - vaos[Scene_polyhedron_item_priv::Gouraud_Facets]->release(); - } -} - -// Points/Wireframe/Flat/Gouraud OpenGL drawing in a display list -void Scene_polyhedron_item::drawEdges(CGAL::Three::Viewer_interface* viewer) const -{ - if (!are_buffers_filled) - { - d->compute_normals_and_vertices(viewer->isOpenGL_4_3(), false, - viewer->property("draw_two_sides").toBool()); - d->initialize_buffers(viewer); - compute_bbox(); - } - - if(!d->show_only_feature_edges_m) - { - vaos[Scene_polyhedron_item_priv::Edges]->bind(); - - attribBuffers(viewer, PROGRAM_WITHOUT_LIGHT); - d->program = getShaderProgram(PROGRAM_WITHOUT_LIGHT); - d->program->bind(); - //draw the edges - d->program->setAttributeValue("colors", this->color().lighter(50)); - if(is_selected) - d->program->setUniformValue("is_selected", true); - else - d->program->setUniformValue("is_selected", false); - viewer->glDrawElements(GL_LINES, static_cast(d->idx_lines.size()), - GL_UNSIGNED_INT, d->idx_lines.data()); - d->program->release(); - vaos[Scene_polyhedron_item_priv::Edges]->release(); - } - - //draw the feature edges - vaos[Scene_polyhedron_item_priv::Feature_edges]->bind(); - attribBuffers(viewer, PROGRAM_NO_SELECTION); - d->program = getShaderProgram(PROGRAM_NO_SELECTION); - d->program->bind(); - if(d->show_feature_edges_m || d->show_only_feature_edges_m) - d->program->setAttributeValue("colors", Qt::red); - else - { - if(!is_selected) - d->program->setAttributeValue("colors", this->color().lighter(50)); - else - d->program->setAttributeValue("colors",QColor(0,0,0)); - } - viewer->glDrawElements(GL_LINES, static_cast(d->idx_feature_lines.size()), - GL_UNSIGNED_INT, d->idx_feature_lines.data()); - d->program->release(); - vaos[Scene_polyhedron_item_priv::Feature_edges]->release(); - } - -void -Scene_polyhedron_item::drawPoints(CGAL::Three::Viewer_interface* viewer) const { - if(!are_buffers_filled) - { - d->compute_normals_and_vertices(viewer->isOpenGL_4_3(), false, viewer->property("draw_two_sides").toBool()); - d->initialize_buffers(viewer); - compute_bbox(); - } - - vaos[Scene_polyhedron_item_priv::Edges]->bind(); - attribBuffers(viewer, PROGRAM_WITHOUT_LIGHT); - d->program = getShaderProgram(PROGRAM_WITHOUT_LIGHT); - d->program->bind(); - //draw the points - d->program->setAttributeValue("colors", this->color()); - viewer->glDrawArrays(GL_POINTS, 0, static_cast(d->nb_lines/3)); - // Clean-up - d->program->release(); - vaos[Scene_polyhedron_item_priv::Edges]->release(); -} - -Polyhedron* -Scene_polyhedron_item::polyhedron() { return d->poly; } -const Polyhedron* -Scene_polyhedron_item::polyhedron() const { return d->poly; } - -bool -Scene_polyhedron_item::isEmpty() const { - return (d->poly == 0) || d->poly->empty(); -} - -void Scene_polyhedron_item::compute_bbox() const { - const Kernel::Point_3& p = *(d->poly->points_begin()); - CGAL::Bbox_3 bbox(p.x(), p.y(), p.z(), p.x(), p.y(), p.z()); - for(Polyhedron::Point_iterator it = d->poly->points_begin(); - it != d->poly->points_end(); - ++it) { - bbox = bbox + it->bbox(); - } - _bbox = Bbox(bbox.xmin(),bbox.ymin(),bbox.zmin(), - bbox.xmax(),bbox.ymax(),bbox.zmax()); -} - - -void -Scene_polyhedron_item:: -invalidateOpenGLBuffers() -{ - CGAL::set_halfedgeds_items_id(*(d->poly)); - Q_EMIT item_is_about_to_be_changed(); - delete_aabb_tree(this); - d->init(); - Base::invalidateOpenGLBuffers(); - are_buffers_filled = false; - is_bbox_computed = false; - d->invalidate_stats(); - d->killIds(); -} - -void -Scene_polyhedron_item::selection_changed(bool p_is_selected) -{ - if(p_is_selected != is_selected) - { - is_selected = p_is_selected; - } -} - -void -Scene_polyhedron_item::setColor(QColor c) -{ - // reset patch ids - if (d->colors_.size()>2 || d->plugin_has_set_color_vector_m) - { - d->colors_.clear(); - d->is_multicolor = false; - } - Scene_item::setColor(c); - if(d->is_multicolor) - invalidateOpenGLBuffers(); -} - -void -Scene_polyhedron_item::select(double orig_x, - double orig_y, - double orig_z, - double dir_x, - double dir_y, - double dir_z) -{ - - void* vertex_to_emit = 0; - if(d->facet_picking_m) - { - typedef Input_facets_AABB_tree Tree; - typedef Tree::Object_and_primitive_id Object_and_primitive_id; - - Tree* aabb_tree = static_cast(d->get_aabb_tree()); - if(aabb_tree) - { - const Kernel::Point_3 ray_origin(orig_x, orig_y, orig_z); - const Kernel::Vector_3 ray_dir(dir_x, dir_y, dir_z); - const Kernel::Ray_3 ray(ray_origin, ray_dir); - typedef std::list Intersections; - Intersections intersections; - aabb_tree->all_intersections(ray, std::back_inserter(intersections)); - Intersections::iterator closest = intersections.begin(); - if(closest != intersections.end()) - { - const Kernel::Point_3* closest_point = - CGAL::object_cast(&closest->first); - for(Intersections::iterator - it = boost::next(intersections.begin()), - end = intersections.end(); - it != end; ++it) - { - if(! closest_point) { - closest = it; - } - else { - const Kernel::Point_3* it_point = - CGAL::object_cast(&it->first); - if(it_point && - (ray_dir * (*it_point - *closest_point)) < 0) - { - closest = it; - closest_point = it_point; - } - } - } - if(closest_point) { - Polyhedron::Facet_handle selected_fh = closest->second; - - // The computation of the nearest vertex may be costly. Only - // do it if some objects are connected to the signal - // 'selected_vertex'. - if(QObject::receivers(SIGNAL(selected_vertex(void*))) > 0) - { - Polyhedron::Halfedge_around_facet_circulator - he_it = selected_fh->facet_begin(), - around_end = he_it; - - Polyhedron::Vertex_handle v = he_it->vertex(), nearest_v = v; - - Kernel::FT sq_dist = CGAL::squared_distance(*closest_point, - v->point()); - while(++he_it != around_end) { - v = he_it->vertex(); - Kernel::FT new_sq_dist = CGAL::squared_distance(*closest_point, - v->point()); - if(new_sq_dist < sq_dist) { - sq_dist = new_sq_dist; - nearest_v = v; - } - } - //bottleneck - vertex_to_emit = (void*)(&*nearest_v); - } - - if(QObject::receivers(SIGNAL(selected_edge(void*))) > 0 - || QObject::receivers(SIGNAL(selected_halfedge(void*))) > 0) - { - Polyhedron::Halfedge_around_facet_circulator - he_it = selected_fh->facet_begin(), - around_end = he_it; - - Polyhedron::Halfedge_handle nearest_h = he_it; - Kernel::FT sq_dist = - CGAL::squared_distance(*closest_point, - Kernel::Segment_3(he_it->vertex()->point(), - he_it->opposite()-> - vertex()-> - point())); - - while(++he_it != around_end) - { - Kernel::FT new_sq_dist = - CGAL::squared_distance(*closest_point, - Kernel::Segment_3(he_it->vertex()->point(), - he_it->opposite()-> - vertex()-> - point())); - if(new_sq_dist < sq_dist) { - sq_dist = new_sq_dist; - nearest_h = he_it; - } - } - - Q_EMIT selected_halfedge((void*)(&*nearest_h)); - Q_EMIT selected_edge((void*)(std::min)(&*nearest_h, &*nearest_h->opposite())); - } - Q_EMIT selected_vertex(vertex_to_emit); - Q_EMIT selected_facet((void*)(&*selected_fh)); - if(d->erase_next_picked_facet_m) { - polyhedron()->erase_facet(selected_fh->halfedge()); - polyhedron()->normalize_border(); - //set_erase_next_picked_facet(false); - invalidateOpenGLBuffers(); - - Q_EMIT itemChanged(); - } - } - } - } - } - Base::select(orig_x, orig_y, orig_z, dir_x, dir_y, dir_z); - Q_EMIT selection_done(); -} - -void Scene_polyhedron_item::update_vertex_indices() -{ - std::size_t id=0; - for (Polyhedron::Vertex_iterator vit = polyhedron()->vertices_begin(), - vit_end = polyhedron()->vertices_end(); vit != vit_end; ++vit) - { - vit->id()=id++; - } -} -void Scene_polyhedron_item::update_facet_indices() -{ - std::size_t id=0; - for (Polyhedron::Facet_iterator fit = polyhedron()->facets_begin(), - fit_end = polyhedron()->facets_end(); fit != fit_end; ++fit) - { - fit->id()=id++; - } -} -void Scene_polyhedron_item::update_halfedge_indices() -{ - std::size_t id=0; - for (Polyhedron::Halfedge_iterator hit = polyhedron()->halfedges_begin(), - hit_end = polyhedron()->halfedges_end(); hit != hit_end; ++hit) - { - hit->id()=id++; - } -} -void Scene_polyhedron_item::invalidate_aabb_tree() -{ - delete_aabb_tree(this); -} -QString Scene_polyhedron_item::computeStats(int type) -{ - double minl, maxl, meanl, midl; - switch (type) - { - case MIN_LENGTH: - case MAX_LENGTH: - case MID_LENGTH: - case MEAN_LENGTH: - case NB_NULL_LENGTH: - d->poly->normalize_border(); - edges_length(d->poly, minl, maxl, meanl, midl, d->number_of_null_length_edges); - } - - double mini, maxi, ave; - switch (type) - { - case MIN_ANGLE: - case MAX_ANGLE: - case MEAN_ANGLE: - angles(d->poly, mini, maxi, ave); - } - double min_area, max_area, med_area, mean_area; - switch (type) - { - case MIN_AREA: - case MAX_AREA: - case MEAN_AREA: - case MED_AREA: - if(!d->poly->is_pure_triangle()) - { - return QString("n/a"); - } - faces_area(d->poly, min_area, max_area, mean_area, med_area); - } - double min_altitude, min_ar, max_ar, mean_ar; - switch (type) - { - case MIN_ALTITUDE: - case MIN_ASPECT_RATIO: - case MAX_ASPECT_RATIO: - case MEAN_ASPECT_RATIO: - if(!d->poly->is_pure_triangle()) - { - return QString("n/a"); - } - faces_aspect_ratio(d->poly, min_altitude, min_ar, max_ar, mean_ar); - } - - switch(type) - { - case NB_VERTICES: - return QString::number(d->poly->size_of_vertices()); - - case NB_FACETS: - return QString::number(d->poly->size_of_facets()); - - case NB_CONNECTED_COMPOS: - { - typedef boost::graph_traits::face_descriptor face_descriptor; - int i = 0; - BOOST_FOREACH(face_descriptor f, faces(*(d->poly))){ - f->id() = i++; - } - boost::vector_property_map::type> - fccmap(get(boost::face_index, *(d->poly))); - return QString::number(PMP::connected_components(*(d->poly), fccmap)); - } - case NB_BORDER_EDGES: - d->poly->normalize_border(); - return QString::number(d->poly->size_of_border_halfedges()); - - case NB_EDGES: - return QString::number(d->poly->size_of_halfedges() / 2); - - case NB_DEGENERATED_FACES: - { - if (d->poly->is_pure_triangle()) - { - if (d->number_of_degenerated_faces == (unsigned int)(-1)) - d->number_of_degenerated_faces = nb_degenerate_faces(d->poly, get(CGAL::vertex_point, *(d->poly))); - return QString::number(d->number_of_degenerated_faces); - } - else - return QString("n/a"); - } - case AREA: - { - if (d->poly->is_pure_triangle()) - { - if(d->area == -std::numeric_limits::infinity()) - d->area = CGAL::Polygon_mesh_processing::area(*(d->poly)); - return QString::number(d->area); - } - else - return QString("n/a"); - } - case VOLUME: - { - if (d->poly->is_pure_triangle() && d->poly->is_closed()) - { - if (d->volume == -std::numeric_limits::infinity()) - d->volume = CGAL::Polygon_mesh_processing::volume(*(d->poly)); - return QString::number(d->volume); - } - else - return QString("n/a"); - } - case SELFINTER: - { - //todo : add a test about cache validity - if (d->poly->is_pure_triangle()) - d->self_intersect = CGAL::Polygon_mesh_processing::does_self_intersect(*(d->poly)); - if (d->self_intersect) - return QString("Yes"); - else if (d->poly->is_pure_triangle()) - return QString("No"); - else - return QString("n/a"); - } - case GENUS: - { - if(!d->poly->is_closed()) - { - return QString("n/a"); - } - else if(d->genus == -1) - { - std::ptrdiff_t s(d->poly->size_of_vertices()), - a(d->poly->size_of_halfedges()/2), - f(d->poly->size_of_facets()); - d->genus = 1.0 - double(s-a+f)/2.0; - } - if(d->genus < 0) - { - return QString("n/a"); - } - else - { - return QString::number(d->genus); - } - - } - case MIN_LENGTH: - return QString::number(minl); - case MAX_LENGTH: - return QString::number(maxl); - case MID_LENGTH: - return QString::number(midl); - case MEAN_LENGTH: - return QString::number(meanl); - case NB_NULL_LENGTH: - return QString::number(d->number_of_null_length_edges); - - case MIN_ANGLE: - return QString::number(mini); - case MAX_ANGLE: - return QString::number(maxi); - case MEAN_ANGLE: - return QString::number(ave); - case HOLES: - return QString::number(nb_holes(d->poly)); - - case MIN_AREA: - return QString::number(min_area); - case MAX_AREA: - return QString::number(max_area); - case MED_AREA: - return QString::number(med_area); - case MEAN_AREA: - return QString::number(mean_area); - case MIN_ALTITUDE: - return QString::number(min_altitude); - case MIN_ASPECT_RATIO: - return QString::number(min_ar); - case MAX_ASPECT_RATIO: - return QString::number(max_ar); - case MEAN_ASPECT_RATIO: - return QString::number(mean_ar); - case IS_PURE_TRIANGLE: - if(d->poly->is_pure_triangle()) - return QString("yes"); - else - return QString("no"); - case IS_PURE_QUAD: - if (d->poly->is_pure_quad()) - return QString("yes"); - else - return QString("no"); - } - return QString(); -} - -CGAL::Three::Scene_item::Header_data Scene_polyhedron_item::header() const -{ - CGAL::Three::Scene_item::Header_data data; - //categories - - data.categories.append(std::pair(QString("Properties"),9)); - data.categories.append(std::pair(QString("Faces"),10)); - data.categories.append(std::pair(QString("Edges"),6)); - data.categories.append(std::pair(QString("Angles"),3)); - - - //titles - data.titles.append(QString("#Vertices")); - data.titles.append(QString("#Connected Components")); - data.titles.append(QString("#Border Edges")); - data.titles.append(QString("Pure Triangle")); - data.titles.append(QString("Pure Quad")); - data.titles.append(QString("#Degenerated Faces")); - data.titles.append(QString("Connected Components of the Boundary")); - data.titles.append(QString("Area")); - data.titles.append(QString("Volume")); - data.titles.append(QString("Self-Intersecting")); - data.titles.append(QString("#Faces")); - data.titles.append(QString("Min Area")); - data.titles.append(QString("Max Area")); - data.titles.append(QString("Median Area")); - data.titles.append(QString("Mean Area")); - data.titles.append(QString("Min Altitude")); - data.titles.append(QString("Min Aspect-Ratio")); - data.titles.append(QString("Max Aspect-Ratio")); - data.titles.append(QString("Mean Aspect-Ratio")); - data.titles.append(QString("Genus")); - data.titles.append(QString("#Edges")); - data.titles.append(QString("Minimum Length")); - data.titles.append(QString("Maximum Length")); - data.titles.append(QString("Median Length")); - data.titles.append(QString("Mean Length")); - data.titles.append(QString("#Null Length")); - data.titles.append(QString("Minimum")); - data.titles.append(QString("Maximum")); - data.titles.append(QString("Average")); - return data; -} - -void Scene_polyhedron_item::printPrimitiveId(QPoint point, CGAL::Three::Viewer_interface *viewer) -{ - typedef Input_facets_AABB_tree Tree; - Tree* aabb_tree = static_cast(d->get_aabb_tree()); - if(!aabb_tree) - return; - Polyhedron::Facet_handle selected_fh; - Kernel::Point_3 pt_under; - const CGAL::qglviewer::Vec offset = static_cast(CGAL::QGLViewer::QGLViewerPool().first())->offset(); - if(find_primitive_id(point, aabb_tree, viewer, selected_fh, pt_under)) - d->fillTargetedIds(selected_fh, pt_under, viewer, offset); - -} -void Scene_polyhedron_item_priv::fillTargetedIds(const Polyhedron::Facet_handle& selected_fh, - const Kernel::Point_3& pt_under, - CGAL::Three::Viewer_interface *viewer, - const CGAL::qglviewer::Vec& offset) -{ - compute_displayed_ids(*poly, - viewer, - selected_fh, - pt_under, - offset, - textVItems, - textEItems, - textFItems, - &targeted_id); - - - if(vertices_displayed - && !textVItems->isEmpty()) - item->showVertices(true); - if(edges_displayed - && !textEItems->isEmpty()) - item->showEdges(true); - if(faces_displayed - && !textFItems->isEmpty()) - item->showFaces(true); - -} - -bool Scene_polyhedron_item::printVertexIds(CGAL::Three::Viewer_interface *viewer) const -{ - if(d->vertices_displayed) - { - return ::printVertexIds(*d->poly, - d->textVItems, - viewer); - } - return true; -} - -bool Scene_polyhedron_item::printEdgeIds(CGAL::Three::Viewer_interface *viewer) const -{ - if(d->edges_displayed) - { - return ::printEdgeIds(*d->poly, - d->textEItems, - viewer); - } - return true; -} - -bool Scene_polyhedron_item::printFaceIds(CGAL::Three::Viewer_interface *viewer) const -{ - if(d->faces_displayed) - { - return ::printFaceIds(*d->poly, - d->textFItems, - viewer); - } - return true; -} - -void Scene_polyhedron_item_priv::killIds() -{ - CGAL::Three::Viewer_interface* viewer = - qobject_cast(CGAL::QGLViewer::QGLViewerPool().first()); - deleteIds(viewer, - textVItems, - textEItems, - textFItems, - &targeted_id); -} - -void Scene_polyhedron_item::printAllIds(CGAL::Three::Viewer_interface *viewer) -{ - static bool all_ids_displayed = false; - - all_ids_displayed = !all_ids_displayed; - if(all_ids_displayed ) - { - bool s1(printVertexIds(viewer)), - s2(printEdgeIds(viewer)), - s3(printFaceIds(viewer)); - if((s1 && s2 && s3)) - { - viewer->update(); - } - return; - } - d->killIds(); -} - -bool Scene_polyhedron_item::testDisplayId(double x, double y, double z, CGAL::Three::Viewer_interface* viewer)const -{ - const CGAL::qglviewer::Vec offset = static_cast(CGAL::QGLViewer::QGLViewerPool().first())->offset(); - Kernel::Point_3 src(x - offset.x, - y - offset.y, - z - offset.z); - Kernel::Point_3 dest(viewer->camera()->position().x - offset.x, - viewer->camera()->position().y - offset.y, - viewer->camera()->position().z - offset.z); - Kernel::Vector_3 v(src,dest); - v = 0.01*v; - Kernel::Point_3 point = src; - point = point + v; - Kernel::Segment_3 query(point, dest); - return !static_cast(d->get_aabb_tree())->do_intersect(query); -} - - -std::vector& Scene_polyhedron_item::color_vector() {return d->colors_;} -void Scene_polyhedron_item::set_color_vector_read_only(bool on_off) {d->plugin_has_set_color_vector_m=on_off;} -bool Scene_polyhedron_item::is_color_vector_read_only() { return d->plugin_has_set_color_vector_m;} -int Scene_polyhedron_item::getNumberOfNullLengthEdges(){return d->number_of_null_length_edges;} -int Scene_polyhedron_item::getNumberOfDegeneratedFaces(){return d->number_of_degenerated_faces;} -bool Scene_polyhedron_item::triangulated(){return d->poly->is_pure_triangle();} -bool Scene_polyhedron_item::self_intersected(){return !(d->self_intersect);} -void Scene_polyhedron_item::setItemIsMulticolor(bool b){ - d->is_multicolor = b; - this->setProperty("NbPatchIds", 0);//for the joinandsplit_plugin -} -bool Scene_polyhedron_item::isItemMulticolor(){ return d->is_multicolor;} -bool Scene_polyhedron_item::intersect_face(double orig_x, - double orig_y, - double orig_z, - double dir_x, - double dir_y, - double dir_z, - Polyhedron::Facet_handle f) -{ - typedef Input_facets_AABB_tree Tree; - typedef Tree::Object_and_primitive_id Object_and_primitive_id; - - Tree* aabb_tree = static_cast(d->get_aabb_tree()); - if(aabb_tree) - { - const Kernel::Point_3 ray_origin(orig_x, orig_y, orig_z); - const Kernel::Vector_3 ray_dir(dir_x, dir_y, dir_z); - const Kernel::Ray_3 ray(ray_origin, ray_dir); - typedef std::list Intersections; - Intersections intersections; - aabb_tree->all_intersections(ray, std::back_inserter(intersections)); - Intersections::iterator closest = intersections.begin(); - if(closest != intersections.end()) - { - const Kernel::Point_3* closest_point = - CGAL::object_cast(&closest->first); - for(Intersections::iterator - it = boost::next(intersections.begin()), - end = intersections.end(); - it != end; ++it) - { - if(! closest_point) { - closest = it; - } - else { - const Kernel::Point_3* it_point = - CGAL::object_cast(&it->first); - if(it_point && - (ray_dir * (*it_point - *closest_point)) < 0) - { - closest = it; - closest_point = it_point; - } - } - } - if(closest_point) - { - Polyhedron::Facet_handle intersected_face = closest->second; - return intersected_face == f; - } - } - } - return false; - -} - -bool Scene_polyhedron_item::supportsRenderingMode(RenderingMode m) const -{ - return ( - m!=PointsPlusNormals && - m!=ShadedPoints && - !(m==Flat && d->no_flat) - ); -} - -void Scene_polyhedron_item::set_flat_disabled(bool b) -{ - d->no_flat = b; - invalidateOpenGLBuffers(); - itemChanged(); -} - -void Scene_polyhedron_item::itemAboutToBeDestroyed(Scene_item *item) -{ - Scene_item::itemAboutToBeDestroyed(item); - if(d && item == this) - { - delete d; - d=NULL; - } -} - -void Scene_polyhedron_item::zoomToPosition(const QPoint &point, CGAL::Three::Viewer_interface *viewer) const -{ - typedef Input_facets_AABB_tree Tree; - typedef Tree::Intersection_and_primitive_id::Type Intersection_and_primitive_id; - - Tree* aabb_tree = static_cast(d->get_aabb_tree()); - if(aabb_tree) { - - const CGAL::qglviewer::Vec offset = - static_cast(CGAL::QGLViewer::QGLViewerPool().first())->offset(); - //find clicked facet - bool found = false; - const Kernel::Point_3 ray_origin(viewer->camera()->position().x - offset.x, - viewer->camera()->position().y - offset.y, - viewer->camera()->position().z - offset.z); - CGAL::qglviewer::Vec point_under = viewer->camera()->pointUnderPixel(point,found); - CGAL::qglviewer::Vec dir = point_under - viewer->camera()->position(); - const Kernel::Vector_3 ray_dir(dir.x, dir.y, dir.z); - const Kernel::Ray_3 ray(ray_origin, ray_dir); - typedef std::list Intersections; - Intersections intersections; - aabb_tree->all_intersections(ray, std::back_inserter(intersections)); - - if(!intersections.empty()) { - Intersections::iterator closest = intersections.begin(); - const Kernel::Point_3* closest_point = - boost::get(&closest->first); - for(Intersections::iterator - it = boost::next(intersections.begin()), - end = intersections.end(); - it != end; ++it) - { - if(! closest_point) { - closest = it; - } - else { - const Kernel::Point_3* it_point = - boost::get(&it->first); - if(it_point && - (ray_dir * (*it_point - *closest_point)) < 0) - { - closest = it; - closest_point = it_point; - } - } - } - if(closest_point) { - Polyhedron::Facet_handle selected_fh = closest->second; - //compute new position and orientation - Kernel::Vector_3 face_normal = CGAL::Polygon_mesh_processing:: - compute_face_normal(selected_fh, - *d->poly, - CGAL::Polygon_mesh_processing::parameters::all_default()); - - - double x(0), y(0), z(0), - xmin(std::numeric_limits::infinity()), ymin(std::numeric_limits::infinity()), zmin(std::numeric_limits::infinity()), - xmax(-std::numeric_limits::infinity()), ymax(-std::numeric_limits::infinity()), zmax(-std::numeric_limits::infinity()); - int total(0); - BOOST_FOREACH(Polyhedron::Vertex_handle vh, vertices_around_face(selected_fh->halfedge(), *d->poly)) - { - x+=vh->point().x(); - y+=vh->point().y(); - z+=vh->point().z(); - - if(vh->point().x() < xmin) - xmin = vh->point().x(); - if(vh->point().y() < ymin) - ymin = vh->point().y(); - if(vh->point().z() < zmin) - zmin = vh->point().z(); - - if(vh->point().x() > xmax) - xmax = vh->point().x(); - if(vh->point().y() > ymax) - ymax = vh->point().y(); - if(vh->point().z() > zmax) - zmax = vh->point().z(); - - ++total; - } - Kernel::Point_3 centroid(x/total + offset.x, - y/total + offset.y, - z/total + offset.z); - - CGAL::qglviewer::Quaternion new_orientation(CGAL::qglviewer::Vec(0,0,-1), - CGAL::qglviewer::Vec(-face_normal.x(), -face_normal.y(), -face_normal.z())); - double max_side = (std::max)((std::max)(xmax-xmin, ymax-ymin), - zmax-zmin); - //put the camera in way we are sure the longest side is entirely visible on the screen - //See openGL's frustum definition - double factor = CGAL::abs(max_side/(tan(viewer->camera()->aspectRatio()/ - (viewer->camera()->fieldOfView()/2)))); - - Kernel::Point_3 new_pos = centroid + factor*face_normal ; - viewer->camera()->setSceneCenter(CGAL::qglviewer::Vec(centroid.x(), - centroid.y(), - centroid.z())); - viewer->moveCameraToCoordinates(QString("%1 %2 %3 %4 %5 %6 %7").arg(new_pos.x()) - .arg(new_pos.y()) - .arg(new_pos.z()) - .arg(new_orientation[0]) - .arg(new_orientation[1]) - .arg(new_orientation[2]) - .arg(new_orientation[3])); - } - } - } - -} - -void Scene_polyhedron_item::resetColors() -{ - setItemIsMulticolor(false); - invalidateOpenGLBuffers(); - itemChanged(); -} - -void Scene_polyhedron_item::showVertices(bool b) -{ - CGAL::Three::Viewer_interface* viewer = - qobject_cast(CGAL::QGLViewer::QGLViewerPool().first()); - TextRenderer *renderer = viewer->textRenderer(); - if(b) - if(d->textVItems->isEmpty()) - { - d->vertices_displayed = b; - printVertexIds(viewer); - } - else - renderer->addTextList(d->textVItems); - else - renderer->removeTextList(d->textVItems); - viewer->update(); - d->vertices_displayed = b; -} - -void Scene_polyhedron_item::showEdges(bool b) -{ - CGAL::Three::Viewer_interface* viewer = - qobject_cast(CGAL::QGLViewer::QGLViewerPool().first()); - TextRenderer *renderer = viewer->textRenderer(); - if(b) - if(d->textEItems->isEmpty()) - { - d->edges_displayed = b; - printEdgeIds(viewer); - } - else - renderer->addTextList(d->textEItems); - else - renderer->removeTextList(d->textEItems); - viewer->update(); - d->edges_displayed = b; -} - -void Scene_polyhedron_item::showFaces(bool b) -{ - CGAL::Three::Viewer_interface* viewer = - qobject_cast(CGAL::QGLViewer::QGLViewerPool().first()); - TextRenderer *renderer = viewer->textRenderer(); - if(b) - { - if(d->textFItems->isEmpty()) - { - d->faces_displayed = b; - printFaceIds(viewer); - } - else - renderer->addTextList(d->textFItems); - } - else - renderer->removeTextList(d->textFItems); - viewer->update(); - d->faces_displayed = b; -} - -void Scene_polyhedron_item::showPrimitives(bool) -{ - CGAL::Three::Viewer_interface* viewer = - qobject_cast(CGAL::QGLViewer::QGLViewerPool().first()); - printAllIds(viewer); -} -void Scene_polyhedron_item::zoomToId() -{ - Polyhedron::Facet_handle selected_fh; - bool ok; - QString text = QInputDialog::getText(QApplication::activeWindow(), tr("Zoom to Index"), - tr("Simplex"), QLineEdit::Normal, - tr("v0"), &ok); - if(!ok) - return; - - CGAL::Three::Viewer_interface* viewer = - qobject_cast(CGAL::QGLViewer::QGLViewerPool().first()); - Point p; - QString id = text.right(text.length()-1); - int return_value = ::zoomToId(*d->poly, text, viewer, selected_fh, p); - switch(return_value) - { - case 1: - QMessageBox::warning(QApplication::activeWindow(), - "ERROR", - tr("Input must be of the form [v/e/f][int]") - ); - return; - case 2: - QMessageBox::warning(QApplication::activeWindow(), - "ERROR", - tr("No vertex with id %1").arg(id) - ); - return; - case 3: - QMessageBox::warning(QApplication::activeWindow(), - "ERROR", - tr("No edge with id %1").arg(id) - ); - return; - case 4: - QMessageBox::warning(QApplication::activeWindow(), - "ERROR", - tr("No face with id %1").arg(id) - ); - return; - default: //case 0 - d->fillTargetedIds(selected_fh, p, viewer, viewer->offset()); - break; - } -} -bool Scene_polyhedron_item::shouldDisplayIds(CGAL::Three::Scene_item *current_item) const -{ - return this == current_item; -} diff --git a/Polyhedron/demo/Polyhedron/Scene_polyhedron_item.h b/Polyhedron/demo/Polyhedron/Scene_polyhedron_item.h deleted file mode 100644 index 49995ce373f..00000000000 --- a/Polyhedron/demo/Polyhedron/Scene_polyhedron_item.h +++ /dev/null @@ -1,198 +0,0 @@ -#ifndef SCENE_POLYHEDRON_ITEM_H -#define SCENE_POLYHEDRON_ITEM_H - -#include "Scene_polyhedron_item_config.h" -#include -#include -#include -#include "Polyhedron_type_fwd.h" -#include "Polyhedron_type.h" -#include -#include -#include -#include -#include -#include -#include - -#include -#include - -class QMenu; -struct Scene_polyhedron_item_priv; - -// This class represents a polyhedron in the OpenGL scene -class SCENE_POLYHEDRON_ITEM_EXPORT Scene_polyhedron_item - : public CGAL::Three::Scene_item, - public CGAL::Three::Scene_zoomable_item_interface, - public CGAL::Three::Scene_print_item_interface{ - Q_INTERFACES(CGAL::Three::Scene_print_item_interface) - Q_PLUGIN_METADATA(IID "com.geometryfactory.PolyhedronDemo.PrintInterface/1.0") - Q_OBJECT - Q_INTERFACES(CGAL::Three::Scene_zoomable_item_interface) - Q_PLUGIN_METADATA(IID "com.geometryfactory.PolyhedronDemo.ZoomInterface/1.0") -public: - typedef Polyhedron Face_graph; - typedef boost::property_map::type Vertex_selection_map; - typedef boost::property_map::type Face_selection_map; - - enum STATS { - NB_VERTICES = 0, - NB_CONNECTED_COMPOS, - NB_BORDER_EDGES, - IS_PURE_TRIANGLE, - IS_PURE_QUAD, - NB_DEGENERATED_FACES, - HOLES, - AREA, - VOLUME, - SELFINTER, - NB_FACETS, - MIN_AREA, - MAX_AREA, - MED_AREA, - MEAN_AREA, - MIN_ALTITUDE, - MIN_ASPECT_RATIO, - MAX_ASPECT_RATIO, - MEAN_ASPECT_RATIO, - GENUS, - NB_EDGES, - MIN_LENGTH, - MAX_LENGTH, - MID_LENGTH, - MEAN_LENGTH, - NB_NULL_LENGTH, - MIN_ANGLE, - MAX_ANGLE, - MEAN_ANGLE - }; - - bool has_stats()const Q_DECL_OVERRIDE{return true;} - QString computeStats(int type)Q_DECL_OVERRIDE; - CGAL::Three::Scene_item::Header_data header() const Q_DECL_OVERRIDE; - Scene_polyhedron_item(); - // Scene_polyhedron_item(const Scene_polyhedron_item&); - Scene_polyhedron_item(const Polyhedron& p); - Scene_polyhedron_item(Polyhedron* const p); - ~Scene_polyhedron_item(); - - Scene_polyhedron_item* clone() const Q_DECL_OVERRIDE; - - // IO - bool load(std::istream& in); - bool load_obj(std::istream& in); - bool save(std::ostream& out) const; - bool save_obj(std::ostream& out) const; - - // Function for displaying meta-data of the item - virtual QString toolTip() const Q_DECL_OVERRIDE; - - // Function to override the context menu - QMenu* contextMenu() Q_DECL_OVERRIDE; - - // Indicate if rendering mode is supported - virtual bool supportsRenderingMode(RenderingMode m) const Q_DECL_OVERRIDE; - // Points/Wireframe/Flat/Gouraud OpenGL drawing in a display list - void draw() const Q_DECL_OVERRIDE{} - virtual void draw(CGAL::Three::Viewer_interface*) const Q_DECL_OVERRIDE; - virtual void drawEdges() const Q_DECL_OVERRIDE{} - virtual void drawEdges(CGAL::Three::Viewer_interface* viewer) const Q_DECL_OVERRIDE; - virtual void drawPoints(CGAL::Three::Viewer_interface*) const Q_DECL_OVERRIDE; - - // Get wrapped polyhedron - Polyhedron* polyhedron(); - const Polyhedron* polyhedron() const; - - Face_graph* face_graph() { return polyhedron(); } - const Face_graph* face_graph() const { return polyhedron(); } - - // Get dimensions - bool isFinite() const Q_DECL_OVERRIDE { return true; } - bool isEmpty() const Q_DECL_OVERRIDE; - void compute_bbox() const Q_DECL_OVERRIDE; - - Vertex_selection_map vertex_selection_map(); - Face_selection_map face_selection_map(); - - std::vector& color_vector(); - void set_color_vector_read_only(bool on_off); - bool is_color_vector_read_only(); - - int getNumberOfNullLengthEdges(); - int getNumberOfDegeneratedFaces(); - bool triangulated(); - bool self_intersected(); - //! If b is true, the item will use buffers to render the color. - //! If b is false, it will use a uniform value. For example, when - //! using the mesh segmentation plugin, the item must be multicolor. - void setItemIsMulticolor(bool b); - //! @returns `true` if the item has multiple colors at the same time. - bool isItemMulticolor(); - - void printPrimitiveId(QPoint point, CGAL::Three::Viewer_interface*viewer)Q_DECL_OVERRIDE; - bool printVertexIds(CGAL::Three::Viewer_interface*)const Q_DECL_OVERRIDE; - bool printEdgeIds(CGAL::Three::Viewer_interface*)const Q_DECL_OVERRIDE; - bool printFaceIds(CGAL::Three::Viewer_interface*)const Q_DECL_OVERRIDE; - void printAllIds(CGAL::Three::Viewer_interface*) Q_DECL_OVERRIDE; - bool shouldDisplayIds(CGAL::Three::Scene_item *current_item) const Q_DECL_OVERRIDE; - bool testDisplayId(double x, double y, double z, CGAL::Three::Viewer_interface*)const Q_DECL_OVERRIDE; - - - //! @returns `true` if `f` is the first facet intersected by a raytracing - bool intersect_face(double orig_x, - double orig_y, - double orig_z, - double dir_x, - double dir_y, - double dir_z, - Polyhedron::Facet_handle f); - -public Q_SLOTS: - virtual void invalidateOpenGLBuffers() Q_DECL_OVERRIDE; - virtual void selection_changed(bool) Q_DECL_OVERRIDE; - virtual void setColor(QColor c) Q_DECL_OVERRIDE; - virtual void show_feature_edges(bool); - void show_only_feature_edges(bool); - void enable_facets_picking(bool); - void set_erase_next_picked_facet(bool); - void set_flat_disabled(bool b); - - void select(double orig_x, - double orig_y, - double orig_z, - double dir_x, - double dir_y, - double dir_z) Q_DECL_OVERRIDE; - void update_vertex_indices(); - void update_facet_indices(); - void update_halfedge_indices(); - void invalidate_aabb_tree(); - void itemAboutToBeDestroyed(Scene_item *) Q_DECL_OVERRIDE; - void resetColors(); - void showVertices(bool); - void showEdges(bool); - void showFaces(bool); - void showPrimitives(bool); - void zoomToId(); - -Q_SIGNALS: - void selection_done(); - void selected_vertex(void*); - void selected_facet(void*); - void selected_edge(void*); - void selected_halfedge(void*); - void item_is_about_to_be_changed(); // emitted in invalidateOpenGLBuffers() -public: - typedef Scene_item Base; - typedef Polyhedron::Facet_iterator Facet_iterator; -protected: - friend struct Scene_polyhedron_item_priv; - Scene_polyhedron_item_priv* d; - - public: - void zoomToPosition(const QPoint &point, CGAL::Three::Viewer_interface *)const Q_DECL_OVERRIDE; - -}; // end class Scene_polyhedron_item - -#endif // SCENE_POLYHEDRON_ITEM_H diff --git a/Polyhedron/demo/Polyhedron/Scene_polyhedron_item_config.h b/Polyhedron/demo/Polyhedron/Scene_polyhedron_item_config.h deleted file mode 100644 index 72f8a208f77..00000000000 --- a/Polyhedron/demo/Polyhedron/Scene_polyhedron_item_config.h +++ /dev/null @@ -1,10 +0,0 @@ -#ifndef SCENE_POLYHEDRON_ITEM_CONFIG_H -#define SCENE_POLYHEDRON_ITEM_CONFIG_H - -#ifdef scene_polyhedron_item_EXPORTS -# define SCENE_POLYHEDRON_ITEM_EXPORT Q_DECL_EXPORT -#else -# define SCENE_POLYHEDRON_ITEM_EXPORT Q_DECL_IMPORT -#endif - -#endif // SCENE_POLYHEDRON_ITEM_CONFIG_H diff --git a/Polyhedron/demo/Polyhedron/Scene_polyhedron_item_decorator.h b/Polyhedron/demo/Polyhedron/Scene_polyhedron_item_decorator.h index 3e87bbb1b22..4ab1c375a3d 100644 --- a/Polyhedron/demo/Polyhedron/Scene_polyhedron_item_decorator.h +++ b/Polyhedron/demo/Polyhedron/Scene_polyhedron_item_decorator.h @@ -7,7 +7,7 @@ typedef Scene_surface_mesh_item Scene_face_graph_item; typedef Scene_face_graph_item::Face_graph Face_graph; -// This class is a decorator for Scene_polyhedron_item yet it does not inherit it but Scene_item +// This class is a decorator for Scene_surface_mesh_item yet it does not inherit it but Scene_item class SCENE_POLYHEDRON_ITEM_DECORATOR_EXPORT Scene_polyhedron_item_decorator : public CGAL::Three::Scene_item { Q_OBJECT diff --git a/Polyhedron/demo/Polyhedron/Scene_polyhedron_item_k_ring_selection.cpp b/Polyhedron/demo/Polyhedron/Scene_polyhedron_item_k_ring_selection.cpp deleted file mode 100644 index ce1f9c9b01c..00000000000 --- a/Polyhedron/demo/Polyhedron/Scene_polyhedron_item_k_ring_selection.cpp +++ /dev/null @@ -1 +0,0 @@ -#include "Scene_polyhedron_item_k_ring_selection.h" diff --git a/Polyhedron/demo/Polyhedron/Scene_polyhedron_item_k_ring_selection.h b/Polyhedron/demo/Polyhedron/Scene_polyhedron_item_k_ring_selection.h deleted file mode 100644 index 9db47fbe5a8..00000000000 --- a/Polyhedron/demo/Polyhedron/Scene_polyhedron_item_k_ring_selection.h +++ /dev/null @@ -1,753 +0,0 @@ -#ifndef SCENE_POLYHEDRON_ITEM_K_RING_SELECTION_H -#define SCENE_POLYHEDRON_ITEM_K_RING_SELECTION_H -#include "Scene_polyhedron_item_k_ring_selection_config.h" -#include "Polyhedron_type.h" -#include "Scene_polyhedron_item.h" -#include "Scene_surface_mesh_item.h" - -#include -#include -#include -#include -#include - -#include -#include - -#include -#include -#include - -#include - -struct Is_selected_edge_property_map{ - typedef boost::graph_traits::edge_descriptor poly_edge_descriptor; - std::vector* is_selected_ptr; - Is_selected_edge_property_map() - : is_selected_ptr(NULL) {} - Is_selected_edge_property_map(std::vector& is_selected) - : is_selected_ptr( &is_selected) {} - - std::size_t id(poly_edge_descriptor ed) { return ed.halfedge()->id()/2; } - - friend bool get(Is_selected_edge_property_map map, poly_edge_descriptor ed) - { - CGAL_assertion(map.is_selected_ptr!=NULL); - return (*map.is_selected_ptr)[map.id(ed)]; - } - - friend void put(Is_selected_edge_property_map map, poly_edge_descriptor ed, bool b) - { - CGAL_assertion(map.is_selected_ptr!=NULL); - (*map.is_selected_ptr)[map.id(ed)]=b; - } -}; - -class SCENE_POLYHEDRON_ITEM_K_RING_SELECTION_EXPORT Scene_polyhedron_item_k_ring_selection - : public QObject -{ - Q_OBJECT -public: - - typedef boost::graph_traits::halfedge_descriptor poly_halfedge_descriptor; - typedef boost::graph_traits::edge_descriptor poly_edge_descriptor; - typedef boost::graph_traits::face_descriptor poly_face_descriptor; - typedef boost::graph_traits::vertex_descriptor poly_vertex_descriptor; - typedef boost::graph_traits::vertex_descriptor sm_vertex_descriptor; - typedef boost::graph_traits::face_descriptor sm_face_descriptor; - typedef boost::graph_traits::edge_descriptor sm_edge_descriptor; - - struct Active_handle { - enum Type{ VERTEX = 0, FACET = 1, EDGE = 2 , CONNECTED_COMPONENT = 3, PATH = 4}; - }; - - typedef CGAL::Polygon_2 Polygon_2; - typedef std::vector Polyline_2; - typedef std::vector Polylines; - - // Hold mouse keyboard state together - struct Mouse_keyboard_state - { - Mouse_keyboard_state() : shift_pressing(false), left_button_pressing(false) { } - bool shift_pressing, left_button_pressing; - }; - - Mouse_keyboard_state state; - QMainWindow* mainwindow; - Active_handle::Type active_handle_type; - int k_ring; - Scene_polyhedron_item* poly_item; - Scene_surface_mesh_item* sm_item; - bool is_active; - bool is_current_selection; - bool is_highlighting; - - Scene_polyhedron_item_k_ring_selection() {} - - Scene_polyhedron_item_k_ring_selection - (Scene_polyhedron_item* poly_item, QMainWindow* mw, Active_handle::Type aht, int k_ring) - :is_active(false),is_current_selection(true), is_edit_mode(false) - { - init(poly_item, NULL, mw, aht, k_ring); - } - - Scene_polyhedron_item_k_ring_selection - (Scene_surface_mesh_item* sm_item, QMainWindow* mw, Active_handle::Type aht, int k_ring) - :is_active(false),is_current_selection(true), is_edit_mode(false) - { - init(NULL, sm_item, mw, aht, k_ring); - } - - void setEditMode(bool b) - { - is_edit_mode = b; - CGAL::QGLViewer* viewer = *CGAL::QGLViewer::QGLViewerPool().begin(); - //for highlighting - viewer->setMouseTracking(b); - } - - void init(Scene_polyhedron_item* poly_item, Scene_surface_mesh_item* sm_item, QMainWindow* mw, Active_handle::Type aht, int k_ring) { - this->poly_item = poly_item; - this->sm_item = sm_item; - this->active_handle_type = aht; - this->k_ring = k_ring; - polyline = new Polylines(0); - polyline->push_back(Polyline_2()); - mainwindow = mw; - is_highlighting = false; - is_ready_to_highlight = true; - is_ready_to_paint_select = true; - is_lasso_active = false; - if(poly_item) - { - poly_item->enable_facets_picking(true); - poly_item->set_color_vector_read_only(true); - } - CGAL::QGLViewer* viewer = *CGAL::QGLViewer::QGLViewerPool().begin(); - viewer->installEventFilter(this); - mw->installEventFilter(this); - viewer->setMouseBindingDescription(Qt::Key_D, Qt::ShiftModifier, Qt::LeftButton, "(When in selection plugin) Removes the clicked primitive from the selection. "); - if(poly_item) - { - connect(poly_item, SIGNAL(selected_vertex(void*)), this, SLOT(vertex_has_been_selected(void*))); - connect(poly_item, SIGNAL(selected_facet(void*)), this, SLOT(facet_has_been_selected(void*))); - connect(poly_item, SIGNAL(selected_edge(void*)), this, SLOT(edge_has_been_selected(void*))); - } - if(sm_item) - { - connect(sm_item, SIGNAL(selected_vertex(void*)), this, SLOT(sm_vertex_has_been_selected(void*))); - connect(sm_item, SIGNAL(selected_facet(void*)), this, SLOT(sm_facet_has_been_selected(void*))); - connect(sm_item, SIGNAL(selected_edge(void*)), this, SLOT(sm_edge_has_been_selected(void*))); - } - } - - - void init(Scene_polyhedron_item* poly_item, QMainWindow* mw, Active_handle::Type aht, int k_ring) - { - init(poly_item, NULL, mw, aht, k_ring); - } - - void init(Scene_surface_mesh_item* poly_item, QMainWindow* mw, Active_handle::Type aht, int k_ring) - { - init(NULL, poly_item, mw, aht, k_ring); - } - - - void setCurrentlySelected(bool b) - { - is_current_selection = b; - } - void set_lasso_mode(bool b) { is_lasso_active = b; } - -public Q_SLOTS: - // slots are called by signals of polyhedron_item - void vertex_has_been_selected(void* void_ptr) - { - is_active=true; - if(active_handle_type == Active_handle::VERTEX || active_handle_type == Active_handle::PATH) - process_selection( static_cast(void_ptr)->halfedge()->vertex() ); - updateIsTreated(); - } - void facet_has_been_selected(void* void_ptr) - { - is_active=true; - if (active_handle_type == Active_handle::FACET - || active_handle_type == Active_handle::CONNECTED_COMPONENT) - process_selection(static_cast(void_ptr)->halfedge()->facet()); - updateIsTreated(); - } - void edge_has_been_selected(void* void_ptr) - { - is_active=true; - if(active_handle_type == Active_handle::EDGE) - process_selection( edge(static_cast(void_ptr)->opposite()->opposite(), *poly_item->polyhedron()) ); - updateIsTreated(); - } - - // slots are called by signals of surface_mesh_item - void sm_vertex_has_been_selected(void* v) - { - typedef boost::graph_traits::vertices_size_type size_type; - size_type h = static_cast(reinterpret_cast(v)); - is_active=true; - if(active_handle_type == Active_handle::VERTEX || active_handle_type == Active_handle::PATH) - process_selection( sm_vertex_descriptor(h) ); - updateIsTreated(); - } - void sm_facet_has_been_selected(void* v) - { - typedef boost::graph_traits::vertices_size_type size_type; - size_type h = static_cast(reinterpret_cast(v)); - is_active=true; - if (active_handle_type == Active_handle::FACET - || active_handle_type == Active_handle::CONNECTED_COMPONENT) - process_selection(sm_face_descriptor(h) ); - updateIsTreated(); - } - void sm_edge_has_been_selected(void* v) - { - typedef boost::graph_traits::edges_size_type size_type; - size_type h = static_cast(reinterpret_cast(v)); - is_active=true; - if(active_handle_type == Active_handle::EDGE) - process_selection(sm_edge_descriptor(h) ); - updateIsTreated(); - } - - void paint_selection() - { - if(is_ready_to_paint_select) - { - const CGAL::qglviewer::Vec offset = static_cast(CGAL::QGLViewer::QGLViewerPool().first())->offset(); - // paint with mouse move event - CGAL::QGLViewer* viewer = *CGAL::QGLViewer::QGLViewerPool().begin(); - CGAL::qglviewer::Camera* camera = viewer->camera(); - viewer->makeCurrent(); - - bool found = false; - const CGAL::qglviewer::Vec& point = camera->pointUnderPixel(paint_pos, found) - offset; - if(found) - { - const CGAL::qglviewer::Vec& orig = camera->position() - offset; - const CGAL::qglviewer::Vec& dir = point - orig; - if(poly_item) - poly_item->select(orig.x, orig.y, orig.z, dir.x, dir.y, dir.z); - else - sm_item->select(orig.x, orig.y, orig.z, dir.x, dir.y, dir.z); - } - is_ready_to_paint_select = false; - } - } - - void lasso_selection() - { - if(!poly_item) - return; - CGAL::QGLViewer* viewer = *CGAL::QGLViewer::QGLViewerPool().begin(); - const CGAL::qglviewer::Vec offset = static_cast(viewer)->offset(); - - CGAL::qglviewer::Camera* camera = viewer->camera(); - const Polyhedron& poly = *poly_item->polyhedron(); - - std::set face_sel; - //select all faces if their screen projection is inside the lasso - BOOST_FOREACH(poly_face_descriptor f, faces(poly)) - { - BOOST_FOREACH(poly_vertex_descriptor v, CGAL::vertices_around_face(f->halfedge(), poly)) - { - CGAL::qglviewer::Vec vp(v->point().x(), v->point().y(), v->point().z()); - CGAL::qglviewer::Vec vsp = camera->projectedCoordinatesOf(vp+offset); - if(is_vertex_selected(vsp)) - { - face_sel.insert(f); - break; - } - } - } - if(face_sel.empty()) - { - contour_2d.clear(); - return; - } - //get border edges of the selected patches - std::vector boundary_edges; - CGAL::Polygon_mesh_processing::border_halfedges(face_sel, poly, std::back_inserter(boundary_edges)); - std::vector mark(edges(poly).size(), false); - Is_selected_edge_property_map spmap(mark); - BOOST_FOREACH(poly_halfedge_descriptor h, boundary_edges) - put(spmap, edge(h, poly), true); - - boost::property_map::type fim - = get(boost::face_external_index, poly); - boost::vector_property_map::type> - fccmap(fim); - - //get connected componant from the picked face - std::set final_sel; - //std::vector cc; - std::size_t nb_cc = CGAL::Polygon_mesh_processing::connected_components(poly - , fccmap - , CGAL::Polygon_mesh_processing::parameters::edge_is_constrained_map(spmap) - .face_index_map(fim)); - std::vector is_cc_done(nb_cc, false); - - BOOST_FOREACH(poly_face_descriptor f, face_sel) - { - - int cc_id = get(fccmap, f); - if(is_cc_done[cc_id]) - { - continue; - } - double x(0), y(0), z(0); - int total(0); - BOOST_FOREACH(poly_halfedge_descriptor hafc, halfedges_around_face(halfedge(f,poly), poly)) - { - poly_vertex_descriptor vd = target(hafc,poly); - x+=vd->point().x(); y+=vd->point().y(); z+=vd->point().z(); - total++; - } - if(total == 0) - continue; - CGAL::qglviewer::Vec center(x/(double)total, y/(double)total, z/(double)total); - const CGAL::qglviewer::Vec& orig = camera->position() - offset; - CGAL::qglviewer::Vec direction = center - orig; - if(poly_item->intersect_face(orig.x, - orig.y, - orig.z, - direction.x, - direction.y, - direction.z, - f)) - { - is_cc_done[cc_id] = true; - } - } - BOOST_FOREACH(poly_face_descriptor f, faces(poly)) - { - if(is_cc_done[get(fccmap, f)]) - final_sel.insert(f); - } - switch(active_handle_type) - { - case Active_handle::FACET: - selected(final_sel); - break; - case Active_handle::EDGE: - { - std::set e_sel; - BOOST_FOREACH(poly_face_descriptor f, final_sel) - { - BOOST_FOREACH(poly_halfedge_descriptor h, CGAL::halfedges_around_face(halfedge(f,poly), poly)) - { - poly_vertex_descriptor vd = target(h,poly); - CGAL::qglviewer::Vec vp1(vd->point().x(), vd->point().y(), vd->point().z()); - CGAL::qglviewer::Vec vsp1 = camera->projectedCoordinatesOf(vp1+offset); - vd = source(h,poly); - CGAL::qglviewer::Vec vp2(vd->point().x(), vd->point().y(), vd->point().z()); - CGAL::qglviewer::Vec vsp2 = camera->projectedCoordinatesOf(vp2+offset); - if(is_vertex_selected(vsp1) || is_vertex_selected(vsp2)) - e_sel.insert(edge(h, poly)); - } - } - selected(e_sel); - break; - } - case Active_handle::VERTEX: - { - std::set v_sel; - BOOST_FOREACH(poly_face_descriptor f, final_sel) - { - BOOST_FOREACH(poly_vertex_descriptor v, CGAL::vertices_around_face(f->halfedge(), poly)) - { - CGAL::qglviewer::Vec vp(v->point().x(), v->point().y(), v->point().z()); - CGAL::qglviewer::Vec vsp = camera->projectedCoordinatesOf(vp+offset); - if(is_vertex_selected(vsp)) - v_sel.insert(v); - } - } - selected(v_sel); - break; - } - default: - break; - } - contour_2d.clear(); - } - - void highlight() - { - if(!poly_item && !sm_item) - return; - const CGAL::qglviewer::Vec offset = static_cast(CGAL::QGLViewer::QGLViewerPool().first())->offset(); - if(is_ready_to_highlight) - { - // highlight with mouse move event - CGAL::QGLViewer* viewer = *CGAL::QGLViewer::QGLViewerPool().begin(); - CGAL::qglviewer::Camera* camera = viewer->camera(); - bool found = false; - const CGAL::qglviewer::Vec& point = camera->pointUnderPixel(hl_pos, found) - offset; - if(found) - { - const CGAL::qglviewer::Vec& orig = camera->position() - offset; - const CGAL::qglviewer::Vec& dir = point - orig; - is_highlighting = true; - if(poly_item) - poly_item->select(orig.x, orig.y, orig.z, dir.x, dir.y, dir.z); - else - sm_item->select(orig.x, orig.y, orig.z, dir.x, dir.y, dir.z); - is_highlighting = false; - } - else - { - Q_EMIT clearHL(); - } - is_ready_to_highlight = false; - } - } - -Q_SIGNALS: - void selected(const std::set::vertex_descriptor>&); - void selected(const std::set::face_descriptor>&); - void selected(const std::set::edge_descriptor>&); - void selected_HL(const std::set::vertex_descriptor>&); - void selected_HL(const std::set::face_descriptor>&); - void selected_HL(const std::set::edge_descriptor>&); - - void selected(const std::set::vertex_descriptor>&); - void selected(const std::set::face_descriptor>&); - void selected(const std::set::edge_descriptor>&); - void selected_HL(const std::set::vertex_descriptor>&); - void selected_HL(const std::set::face_descriptor>&); - void selected_HL(const std::set::edge_descriptor>&); - - void toogle_insert(const bool); - void endSelection(); - void resetIsTreated(); - void isCurrentlySelected(Scene_polyhedron_item_k_ring_selection*); - void clearHL(); - -protected: - - void updateIsTreated() - { - static ushort i = 0; - i++; - if(i==3) - { - i = 0; - Q_EMIT resetIsTreated(); - } - } - template - void process_selection(HandleType clicked) { - //keeps the highlighting on track if the brush_size is not 0 - int current_ring = 0; - if(active_handle_type != Active_handle::PATH && !is_edit_mode) - current_ring = k_ring; - const std::set& selection = extract_k_ring(clicked, current_ring); - if(is_highlighting) - { - Q_EMIT selected_HL(selection); - } - else - Q_EMIT selected(selection); - } - - template - struct Is_selected_from_set{ - std::set& selection; - Is_selected_from_set(std::set& selection) - :selection(selection) {} - friend bool get(Is_selected_from_set map, Handle k) - { - return map.selection.count(k); - } - friend void put(Is_selected_from_set map, Handle k, bool b) - { - if (b) - map.selection.insert(k); - else - map.selection.erase(k); - } - }; - - //Polyhedron sets - - std::set - extract_k_ring(poly_vertex_descriptor clicked, unsigned int k) - { - std::set selection; - selection.insert(clicked); - if (k>0) - CGAL::expand_vertex_selection(CGAL::make_array(clicked), - *poly_item->polyhedron(), - k, - Is_selected_from_set(selection), - CGAL::Emptyset_iterator()); - - return selection; - } - - std::set - extract_k_ring(poly_face_descriptor clicked, unsigned int k) - { - std::set selection; - selection.insert(clicked); - if (k>0) - CGAL::expand_face_selection(CGAL::make_array(clicked), - *poly_item->polyhedron(), - k, - Is_selected_from_set(selection), - CGAL::Emptyset_iterator()); - - return selection; - } - - std::set - extract_k_ring(poly_edge_descriptor clicked, unsigned int k) - { - std::set selection; - selection.insert(clicked); - - if (k>0) - CGAL::expand_edge_selection(CGAL::make_array(clicked), - *poly_item->polyhedron(), - k, - Is_selected_from_set(selection), - CGAL::Emptyset_iterator()); - return selection; - } - - //Surface_mesh sets - std::set - extract_k_ring(sm_vertex_descriptor clicked, unsigned int k) - { - std::set selection; - selection.insert(clicked); - if (k>0) - CGAL::expand_vertex_selection(CGAL::make_array(clicked), - *(sm_item->polyhedron()), - k, - Is_selected_from_set(selection), - CGAL::Emptyset_iterator()); - - return selection; - } - - std::set - extract_k_ring(sm_face_descriptor clicked, unsigned int k) - { - std::set selection; - selection.insert(clicked); - if (k>0) - CGAL::expand_face_selection(CGAL::make_array(clicked), - *sm_item->polyhedron(), - k, - Is_selected_from_set(selection), - CGAL::Emptyset_iterator()); - - return selection; - } - - std::set - extract_k_ring(sm_edge_descriptor clicked, unsigned int k) - { - std::set selection; - selection.insert(clicked); - - if (k>0) - CGAL::expand_edge_selection(CGAL::make_array(clicked), - *sm_item->polyhedron(), - k, - Is_selected_from_set(selection), - CGAL::Emptyset_iterator()); - return selection; - } - - bool eventFilter(QObject* target, QEvent *event) - { - // This filter is both filtering events from 'viewer' and 'main window' - - // key events - if(event->type() == QEvent::KeyPress || event->type() == QEvent::KeyRelease) { - QKeyEvent *keyEvent = static_cast(event); - Qt::KeyboardModifiers modifiers = keyEvent->modifiers(); - - state.shift_pressing = modifiers.testFlag(Qt::ShiftModifier); - } - - if(event->type() == QEvent::KeyPress - && state.shift_pressing - && static_cast(event)->key()==Qt::Key_D) - { - Q_EMIT toogle_insert(false); - } - else if(event->type() == QEvent::KeyRelease - && static_cast(event)->key()==Qt::Key_D) - { - Q_EMIT toogle_insert(true); - } - // mouse events - if(event->type() == QEvent::MouseButtonPress || event->type() == QEvent::MouseButtonRelease) { - QMouseEvent* mouse_event = static_cast(event); - if(mouse_event->button() == Qt::LeftButton) { - state.left_button_pressing = event->type() == QEvent::MouseButtonPress; - if(is_edit_mode) - Q_EMIT clearHL(); - if (!state.left_button_pressing) - { - if (is_active) - { - Q_EMIT endSelection(); - is_active=false; - } - apply_path(); - lasso_selection(); - } - } - //to avoid the contextual menu to mess up the states. - else if(mouse_event->button() == Qt::RightButton) { - state.left_button_pressing = false; - state.shift_pressing = false; - } - } - // use mouse move event for paint-like selection - if( (event->type() == QEvent::MouseMove - || (event->type() == QEvent::MouseButtonPress - && static_cast(event)->button() == Qt::LeftButton)) - && (state.shift_pressing && state.left_button_pressing) ) - { - Q_EMIT isCurrentlySelected(this); - if(!is_current_selection) - return false; - if(target == mainwindow) - { - CGAL::QGLViewer* viewer = *CGAL::QGLViewer::QGLViewerPool().begin(); - viewer->setFocus(); - return false; - } - if(!is_lasso_active) - { - is_ready_to_paint_select = true; - QMouseEvent* mouse_event = static_cast(event); - paint_pos = mouse_event->pos(); - if(!is_edit_mode || event->type() == QEvent::MouseButtonPress) - QTimer::singleShot(0,this,SLOT(paint_selection())); - } - else - { - sample_mouse_path(); - } - } - //if in edit_mode and the mouse is moving without left button pressed : - // highlight the primitive under cursor - else if(is_edit_mode && event->type() == QEvent::MouseMove && !state.left_button_pressing) - { - if(target == mainwindow) - { - CGAL::QGLViewer* viewer = *CGAL::QGLViewer::QGLViewerPool().begin(); - viewer->setFocus(); - return false; - } - - is_ready_to_highlight = true; - QMouseEvent* mouse_event = static_cast(event); - hl_pos = mouse_event->pos(); - QTimer::singleShot(0, this, SLOT(highlight())); - }//end MouseMove - return false; - } - bool is_edit_mode; - bool is_ready_to_highlight; - bool is_ready_to_paint_select; - bool is_lasso_active; - QPoint hl_pos; - QPoint paint_pos; - Polyline_2 contour_2d; - Polylines* polyline; - Polyline_2& poly() const { return polyline->front(); } - Polygon_2 lasso; - CGAL::Bbox_2 domain_rectangle; - bool update_polyline () const - { - if (contour_2d.size() < 2 || - (!(poly().empty()) && contour_2d.back () == poly().back())) - return false; - - - if (!(poly().empty()) && contour_2d.back () == poly().back()) - return false; - - poly().clear(); - - for (unsigned int i = 0; i < contour_2d.size (); ++ i) - poly().push_back (contour_2d[i]); - - return true; - } - - void sample_mouse_path() - { - - CGAL::Three::Viewer_interface* viewer = static_cast(*CGAL::QGLViewer::QGLViewerPool().begin()); - viewer->makeCurrent(); - const QPoint& p = viewer->mapFromGlobal(QCursor::pos()); - contour_2d.push_back (Kernel::Point_2 (p.x(), p.y())); - - if (update_polyline ()) - { - //update draw - QPainter *painter = viewer->getPainter(); - QPen pen; - pen.setColor(QColor(Qt::green)); - pen.setWidth(3); - //Create a QImage of the screen and paint the lasso on top of it - QImage image = viewer->grabFramebuffer(); - painter->begin(viewer); - painter->drawImage(QPoint(0,0), image); - painter->setPen(pen); - for(std::size_t i=0; isize(); ++i) - { - Polyline_2 poly = (*polyline)[i]; - if(!poly.empty()) - for(std::size_t j=0; jdrawLine(poly[j].x(), poly[j].y(), poly[j+1].x(), poly[j+1].y()); - } - } - painter->end(); - } - } - void apply_path() - { - update_polyline (); - domain_rectangle = CGAL::bbox_2 (contour_2d.begin (), contour_2d.end ()); - lasso = Polygon_2 (contour_2d.begin (), contour_2d.end ()); - } - - bool is_vertex_selected (CGAL::qglviewer::Vec& p) - { - if (domain_rectangle.xmin () < p.x && - p.x < domain_rectangle.xmax () && - domain_rectangle.ymin () < p.y && - p.y < domain_rectangle.ymax ()) - { -/* - * domain_freeform.has_on_bounded_side() requires the polygon to be simple, which is never the case. - * However, it works very well even if the polygon is not simple, so we use this instead to avoid - * the cgal_assertion on is_simple().*/ - - - if (CGAL::bounded_side_2(lasso.container().begin(), - lasso.container().end(), - Kernel::Point_2(p.x, p.y), - lasso.traits_member()) == CGAL::ON_BOUNDED_SIDE) - return true; - } - return false; - } -}; - -#endif diff --git a/Polyhedron/demo/Polyhedron/Scene_polyhedron_item_k_ring_selection_config.h b/Polyhedron/demo/Polyhedron/Scene_polyhedron_item_k_ring_selection_config.h deleted file mode 100644 index 6e6b107eb8b..00000000000 --- a/Polyhedron/demo/Polyhedron/Scene_polyhedron_item_k_ring_selection_config.h +++ /dev/null @@ -1,10 +0,0 @@ -#ifndef SCENE_POLYHEDRON_ITEM_K_RING_SELECTION_CONFIG_H -#define SCENE_POLYHEDRON_ITEM_K_RING_SELECTION_CONFIG_H - -#ifdef scene_polyhedron_and_sm_item_k_ring_selection_EXPORTS -# define SCENE_POLYHEDRON_ITEM_K_RING_SELECTION_EXPORT Q_DECL_EXPORT -#else -# define SCENE_POLYHEDRON_ITEM_K_RING_SELECTION_EXPORT Q_DECL_IMPORT -#endif - -#endif // SCENE_POLYHEDRON_ITEM_K_RING_SELECTION_CONFIG_H diff --git a/Polyhedron/demo/Polyhedron/Scene_polyhedron_selection_item.cpp b/Polyhedron/demo/Polyhedron/Scene_polyhedron_selection_item.cpp index 5c2667b8895..3f1edc31613 100644 --- a/Polyhedron/demo/Polyhedron/Scene_polyhedron_selection_item.cpp +++ b/Polyhedron/demo/Polyhedron/Scene_polyhedron_selection_item.cpp @@ -59,7 +59,7 @@ struct Scene_polyhedron_selection_item_priv{ const Selection_set_vertex& p_sel_vertex, const Selection_set_facet &p_sel_facet, const Selection_set_edge &p_sel_edges) const; void compute_temp_elements() const; void compute_HL_elements() const; - void triangulate_facet(fg_face_descriptor, Kernel::Vector_3 normal, + void triangulate_facet(fg_face_descriptor, EPICK::Vector_3 normal, std::vector &p_facets,std::vector &p_normals) const; void tempInstructions(QString s1, QString s2); @@ -113,11 +113,11 @@ struct Scene_polyhedron_selection_item_priv{ Active_handle::Type original_sel_mode; //Only needed for the triangulation Face_graph* poly; - CGAL::Unique_hash_map face_normals_map; - CGAL::Unique_hash_map vertex_normals_map; - boost::associative_property_map< CGAL::Unique_hash_map > + CGAL::Unique_hash_map face_normals_map; + CGAL::Unique_hash_map vertex_normals_map; + boost::associative_property_map< CGAL::Unique_hash_map > nf_pmap; - boost::associative_property_map< CGAL::Unique_hash_map > + boost::associative_property_map< CGAL::Unique_hash_map > nv_pmap; Scene_face_graph_item::ManipulatedFrame *manipulated_frame; bool ready_to_move; @@ -406,7 +406,7 @@ void push_back_xyz(const TypeWithXYZ& t, vector.push_back(t.z()); } -typedef Kernel Traits; +typedef EPICK Traits; //Make sure all the facets are triangles typedef Traits::Point_3 Point_3; @@ -418,9 +418,9 @@ Scene_polyhedron_selection_item_priv::triangulate_facet(fg_face_descriptor fit,c std::vector &p_facets,std::vector &p_normals ) const { const CGAL::qglviewer::Vec off = static_cast(CGAL::QGLViewer::QGLViewerPool().first())->offset(); - Kernel::Vector_3 offset(off.x,off.y,off.z); + EPICK::Vector_3 offset(off.x,off.y,off.z); - typedef FacetTriangulator FT; + typedef FacetTriangulator FT; double diagonal; if(item->poly_item->diagonalBbox() != std::numeric_limits::infinity()) diagonal = item->poly_item->diagonalBbox(); @@ -496,7 +496,7 @@ void Scene_polyhedron_selection_item_priv::compute_any_elements(std::vectorface_normals_map.clear(); d->vertex_normals_map.clear(); - d->nf_pmap = boost::associative_property_map< CGAL::Unique_hash_map >(d->face_normals_map); - d->nv_pmap = boost::associative_property_map< CGAL::Unique_hash_map >(d->vertex_normals_map); + d->nf_pmap = boost::associative_property_map< CGAL::Unique_hash_map >(d->face_normals_map); + d->nv_pmap = boost::associative_property_map< CGAL::Unique_hash_map >(d->vertex_normals_map); PMP::compute_normals(*d->poly, d->nv_pmap, d->nf_pmap); } @@ -2028,7 +2028,7 @@ bool Scene_polyhedron_selection_item_priv::canAddFace(fg_halfedge_descriptor hc, fg_halfedge_descriptor res = CGAL::Euler::add_face_to_border(t,hc, *item->polyhedron()); - if(CGAL::is_degenerate_triangle_face(res, *item->polyhedron(), get(CGAL::vertex_point, *item->polyhedron()), Kernel())) + if(CGAL::is_degenerate_triangle_face(res, *item->polyhedron(), get(CGAL::vertex_point, *item->polyhedron()), EPICK())) { CGAL::Euler::remove_face(res, *item->polyhedron()); tempInstructions("Edge not selected : resulting facet is degenerated.", diff --git a/Polyhedron/demo/Polyhedron/Scene_polyhedron_selection_item.h b/Polyhedron/demo/Polyhedron/Scene_polyhedron_selection_item.h index 929e9a2ed13..6e88bdc02d9 100644 --- a/Polyhedron/demo/Polyhedron/Scene_polyhedron_selection_item.h +++ b/Polyhedron/demo/Polyhedron/Scene_polyhedron_selection_item.h @@ -66,7 +66,6 @@ struct Selection_traitspolyhedron()).first; } Iterator iterator_end() { return vertices(*item->polyhedron()).second; } std::size_t size() { return num_vertices(*item->polyhedron()); } - void update_indices() { item->polyhedron_item()->update_vertex_indices(); } std::size_t id(typename SelectionItem::fg_vertex_descriptor vh) { return get(get(boost::vertex_index, *item->polyhedron()), vh); @@ -111,7 +110,6 @@ struct Selection_traitspolyhedron()).first; } Iterator iterator_end() { return faces(*item->polyhedron()).second; } std::size_t size() { return num_faces(*item->polyhedron()); } - void update_indices() { item->polyhedron_item()->update_facet_indices(); } std::size_t id(typename SelectionItem::fg_face_descriptor fh) { return get(get(boost::face_index, *item->polyhedron()), fh); @@ -156,7 +154,6 @@ struct Selection_traitspolyhedron()).first; } Iterator iterator_end() { return edges(*item->polyhedron()).second; } std::size_t size() { return num_edges(*item->polyhedron()); } - void update_indices() { item->polyhedron_item()->update_halfedge_indices(); } std::size_t id(boost::graph_traits::edge_descriptor ed) { return get(boost::halfedge_index, *item->polyhedron(), halfedge(ed,*item->polyhedron()))/2; @@ -321,10 +318,10 @@ public: bool save(const std::string& file_name) const { // update id fields before using - if(selected_vertices.size() > 0) { poly_item->update_vertex_indices(); } - if(selected_facets.size() > 0) { poly_item->update_facet_indices(); } - if( (selected_edges.size() > 0) && - selected_vertices.empty() ) { poly_item->update_vertex_indices(); } + if(selected_vertices.size() > 0 + ||selected_facets.size() > 0 + || (selected_edges.size() > 0 && + selected_vertices.empty() )) { poly_item->face_graph()->collect_garbage(); } std::ofstream out(file_name.c_str()); if(!out) { return false; } @@ -487,7 +484,6 @@ public: template // use fg_vertex_descriptor, fg_face_descriptor, fg_edge_descriptor boost::optional get_minimum_isolated_component() { Selection_traits tr(this); - tr.update_indices(); Travel_isolated_components::Minimum_visitor visitor; Travel_isolated_components(*polyhedron()).travel (tr.iterator_begin(), tr.iterator_end(), tr.size(), tr.container(), visitor); @@ -508,7 +504,6 @@ public: boost::optional select_isolated_components(std::size_t threshold) { typedef Selection_traits Tr; Tr tr(this); - tr.update_indices(); typedef std::insert_iterator Output_iterator; Output_iterator out(tr.container(), tr.container().begin()); @@ -635,7 +630,6 @@ public: typedef Selection_traits Tr; Tr tr(this); - tr.update_indices(); std::vector mark(tr.size(),false); BOOST_FOREACH(Handle h,tr.container()) @@ -668,7 +662,6 @@ public: typedef Selection_traits Tr; Tr tr(this); - tr.update_indices(); std::vector mark(tr.size(),false); BOOST_FOREACH(Handle h,tr.container()) @@ -729,9 +722,7 @@ public: if (selected_facets.empty()) { return; } Selection_traits trf(this); - trf.update_indices(); Selection_traits trv(this); - trv.update_indices(); PMP::keep_connected_components(*polyhedron(), trf.container()); changed_with_poly_item(); @@ -746,7 +737,7 @@ public: } } // construct point vector - std::vector points; + std::vector points; points.reserve(selected_facets.size()); VPmap vpm = get(CGAL::vertex_point, *polyhedron()); unsigned int counter = 1; @@ -926,7 +917,6 @@ template { Selection_traits tr(this); - tr.update_indices(); std::vector mark(tr.size(), false); BOOST_FOREACH(fg_edge_descriptor e, selected_edges) mark[tr.id(e)] = true; @@ -954,7 +944,6 @@ public: { Selection_traits tr(this); - tr.update_indices(); for (unsigned int i = 0; i < mark.size(); ++i) mark[i] = false; diff --git a/Polyhedron/demo/Polyhedron/Scene_surface_mesh_item.h b/Polyhedron/demo/Polyhedron/Scene_surface_mesh_item.h index 47719bb262f..72834945dc4 100644 --- a/Polyhedron/demo/Polyhedron/Scene_surface_mesh_item.h +++ b/Polyhedron/demo/Polyhedron/Scene_surface_mesh_item.h @@ -57,11 +57,7 @@ public: QMenu* contextMenu() Q_DECL_OVERRIDE; - // Only needed for Scene_polyhedron_item void setItemIsMulticolor(bool); - void update_vertex_indices(){} - void update_halfedge_indices(){} - void update_facet_indices(){} bool isItemMulticolor(); Vertex_selection_map vertex_selection_map(); Face_selection_map face_selection_map(); diff --git a/Polyhedron/demo/Polyhedron/Scene_textured_polyhedron_item.cpp b/Polyhedron/demo/Polyhedron/Scene_textured_polyhedron_item.cpp deleted file mode 100644 index 044837d7348..00000000000 --- a/Polyhedron/demo/Polyhedron/Scene_textured_polyhedron_item.cpp +++ /dev/null @@ -1,469 +0,0 @@ -#include "Scene_textured_polyhedron_item.h" -#include -#include -#include -#include -#include "Textured_polyhedron_type.h" -#include - -typedef EPIC_kernel::Point_3 Point; - -struct Scene_textured_polyhedron_item_priv -{ - Scene_textured_polyhedron_item_priv(Scene_textured_polyhedron_item* parent) - :poly(new Textured_polyhedron), textureId(-1) - { - item = parent; - texture.GenerateCheckerBoard(2048,2048,128,0,0,0,250,250,255); - nb_facets = 0; - nb_lines = 0; - nb_border = 0; - positions_border.resize(0); - } - Scene_textured_polyhedron_item_priv(const Textured_polyhedron& p, Scene_textured_polyhedron_item* parent) - : poly(new Textured_polyhedron(p)),textureId(-1),smooth_shading(true) - - { - item = parent; - texture.GenerateCheckerBoard(2048,2048,128,0,0,0,250,250,255); - nb_facets = 0; - nb_lines = 0; - } - Scene_textured_polyhedron_item_priv(Textured_polyhedron* const p,Scene_textured_polyhedron_item* parent) - :poly(p),textureId(-1),smooth_shading(true) - { - item = parent; - texture.GenerateCheckerBoard(2048,2048,128,0,0,0,250,250,255); - nb_facets = 0; - nb_lines = 0; - - } - ~Scene_textured_polyhedron_item_priv() - { - delete poly; - } - void initializeBuffers(CGAL::Three::Viewer_interface *viewer) const; - void compute_normals_and_vertices(void) const; - - enum VAOs { - Facets=0, - Edges, - Border_edges, - NbOfVaos - }; - enum VBOs { - Facets_Vertices=0, - Facets_Normals, - Facets_Texmap, - Edges_Vertices, - Edges_Texmap, - Edges_border, - NbOfVbos - }; - - Textured_polyhedron* poly; - Texture texture; - mutable std::vector positions_lines; - mutable std::vector positions_facets; - mutable std::vector positions_border; - mutable std::vector normals; - mutable std::vector textures_map_facets; - mutable std::vector textures_map_lines; - mutable std::size_t nb_facets; - mutable std::size_t nb_lines; - mutable std::size_t nb_border; - - mutable GLuint textureId; - mutable QOpenGLShaderProgram* program; - bool smooth_shading; - - Scene_textured_polyhedron_item* item; -}; -void Scene_textured_polyhedron_item_priv::initializeBuffers(CGAL::Three::Viewer_interface *viewer = 0) const -{ - if(GLuint(-1) == textureId) { - viewer->glGenTextures(1, &textureId); - } - //vao for the facets - { - program = item->getShaderProgram(Scene_textured_polyhedron_item::PROGRAM_WITH_TEXTURE, viewer); - program->bind(); - item->vaos[Facets]->bind(); - item->buffers[Facets_Vertices].bind(); - item->buffers[Facets_Vertices].allocate(positions_facets.data(), - static_cast(positions_facets.size()*sizeof(float))); - program->enableAttributeArray("vertex"); - program->setAttributeBuffer("vertex",GL_FLOAT,0,4); - item->buffers[Facets_Vertices].release(); - - item->buffers[Facets_Normals].bind(); - item->buffers[Facets_Normals].allocate(normals.data(), - static_cast(normals.size()*sizeof(float))); - program->enableAttributeArray("normal"); - program->setAttributeBuffer("normal",GL_FLOAT,0,3); - item->buffers[Facets_Normals].release(); - - - item->buffers[Facets_Texmap].bind(); - item->buffers[Facets_Texmap].allocate(textures_map_facets.data(), - static_cast(textures_map_facets.size()*sizeof(float))); - program->enableAttributeArray("v_texCoord"); - program->setAttributeBuffer("v_texCoord",GL_FLOAT,0,2); - item->buffers[Facets_Texmap].release(); - item->vaos[Facets]->release(); - program->release(); - } - - //vao for the lines - { - program = item->getShaderProgram(Scene_textured_polyhedron_item::PROGRAM_WITH_TEXTURED_EDGES, viewer); - program->bind(); - item->vaos[Edges]->bind(); - item->buffers[Edges_Vertices].bind(); - item->buffers[Edges_Vertices].allocate(positions_lines.data(), - static_cast(positions_lines.size()*sizeof(float))); - program->enableAttributeArray("vertex"); - program->setAttributeBuffer("vertex",GL_FLOAT,0,4); - item->buffers[Edges_Vertices].release(); - - - item->buffers[Edges_Texmap].bind(); - item->buffers[Edges_Texmap].allocate(textures_map_lines.data(), - static_cast(textures_map_lines.size()*sizeof(float))); - program->enableAttributeArray("v_texCoord"); - program->setAttributeBuffer("v_texCoord",GL_FLOAT,0,2); - item->buffers[Edges_Texmap].release(); - item->vaos[Edges]->release(); - program->release(); - } - - - viewer->glPixelStorei(GL_UNPACK_ALIGNMENT, 1); - - viewer->glActiveTexture(GL_TEXTURE0); - viewer->glBindTexture(GL_TEXTURE_2D, textureId); - viewer->glTexImage2D(GL_TEXTURE_2D, - 0, - GL_RGB, - texture.GetWidth(), - texture.GetHeight(), - 0, - GL_RGB, - GL_UNSIGNED_BYTE, - texture.GetData()); - viewer->glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT); - viewer->glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT); - viewer->glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); - viewer->glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); - viewer->glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE); - - nb_facets = positions_facets.size(); - positions_facets.resize(0); - std::vector(positions_facets).swap(positions_facets); - normals.resize(0); - std::vector(normals).swap(normals); - textures_map_facets.resize(0); - std::vector(textures_map_facets).swap(textures_map_facets); - nb_lines = positions_lines.size(); - positions_lines.resize(0); - std::vector(positions_lines).swap(positions_lines); - textures_map_lines.resize(0); - std::vector(textures_map_lines).swap(textures_map_lines); - - item->are_buffers_filled = true; -} - -void -Scene_textured_polyhedron_item_priv::compute_normals_and_vertices(void) const -{ - QApplication::setOverrideCursor(Qt::WaitCursor); - positions_facets.resize(0); - positions_lines.resize(0); - textures_map_facets.resize(0); - textures_map_lines.resize(0); - normals.resize(0); - - typedef ::EPIC_kernel Kernel; - typedef CGAL::Textured_items Items; - typedef Kernel::Point_3 Point; - typedef Kernel::Vector_3 Vector; - typedef CGAL::Polyhedron_3 Base; - - typedef Base::Halfedge_around_facet_circulator Halfedge_around_facet_circulator; - typedef Base::Edge_iterator Edge_iterator; - typedef Base::Facet Facet; - typedef Base::Facet_iterator Facet_iterator; - - const CGAL::qglviewer::Vec offset = static_cast(CGAL::QGLViewer::QGLViewerPool().first())->offset(); - - //Facets - Facet_iterator f = poly->facets_begin(); - - for(f = poly->facets_begin(); - f != poly->facets_end(); - f++) - { - - Halfedge_around_facet_circulator he = f->facet_begin(); - Halfedge_around_facet_circulator end = he; - CGAL_For_all(he,end) - { - - // If Flat shading:1 normal per polygon added once per vertex - if (item->cur_shading == Flat || item->cur_shading == FlatPlusEdges) - { - - Vector n = CGAL::Polygon_mesh_processing:: - compute_face_normal(f, static_cast(*poly)); - normals.push_back(n[0]); - normals.push_back(n[1]); - normals.push_back(n[2]); - } - - // If Gouraud shading: 1 normal per vertex - else if(item->cur_shading == Gouraud) - { - - const Facet::Normal_3& n = he->vertex()->normal(); - normals.push_back(n[0]); - normals.push_back(n[1]); - normals.push_back(n[2]); - } - - //position - const Point& p = he->vertex()->point(); - positions_facets.push_back(p.x() + offset.x); - positions_facets.push_back(p.y() + offset.y); - positions_facets.push_back(p.z() + offset.z); - positions_facets.push_back(1.0); - - const double u = he->u(); - const double v = he->v(); - textures_map_facets.push_back(u); - textures_map_facets.push_back(v); - } - - - } - //Lines - typedef Kernel::Point_3 Point; - typedef Base::Edge_iterator Edge_iterator; - - Edge_iterator he; - - for(he = poly->edges_begin(); - he != poly->edges_end(); - he++) - { - - const Point& a = he->vertex()->point(); - const Point& b = he->opposite()->vertex()->point(); - positions_lines.push_back(a.x() + offset.x); - positions_lines.push_back(a.y() + offset.y); - positions_lines.push_back(a.z() + offset.z); - positions_lines.push_back(1.0); - - const double u = he->u(); - const double v = he->v(); - textures_map_lines.push_back(u); - textures_map_lines.push_back(v); - - positions_lines.push_back(b.x()+ offset.x); - positions_lines.push_back(b.y()+ offset.y); - positions_lines.push_back(b.z()+ offset.z); - positions_lines.push_back(1.0); - - const double ou = he->opposite()->u(); - const double ov = he->opposite()->v(); - textures_map_lines.push_back(ou); - textures_map_lines.push_back(ov); - - } - QApplication::restoreOverrideCursor(); -} - -Scene_textured_polyhedron_item::Scene_textured_polyhedron_item() - : Scene_item(Scene_textured_polyhedron_item_priv::NbOfVbos,Scene_textured_polyhedron_item_priv::NbOfVaos) -{ - cur_shading=FlatPlusEdges; - is_selected=false; - d = new Scene_textured_polyhedron_item_priv(this); - invalidateOpenGLBuffers(); -} - -Scene_textured_polyhedron_item::Scene_textured_polyhedron_item(Textured_polyhedron* const p) - : Scene_item(Scene_textured_polyhedron_item_priv::NbOfVbos,Scene_textured_polyhedron_item_priv::NbOfVaos) -{ - cur_shading=FlatPlusEdges; - is_selected=false; - d = new Scene_textured_polyhedron_item_priv(p,this); - invalidateOpenGLBuffers(); -} - -Scene_textured_polyhedron_item::Scene_textured_polyhedron_item(const Textured_polyhedron& p) - : Scene_item(Scene_textured_polyhedron_item_priv::NbOfVbos,Scene_textured_polyhedron_item_priv::NbOfVaos) -{ - cur_shading=FlatPlusEdges; - is_selected=false; - d = new Scene_textured_polyhedron_item_priv(p,this); - invalidateOpenGLBuffers(); -} - -Scene_textured_polyhedron_item::~Scene_textured_polyhedron_item() -{ - delete d; -} - -Scene_textured_polyhedron_item* -Scene_textured_polyhedron_item::clone() const { - return new Scene_textured_polyhedron_item(*d->poly); -} - -// Load textured_polyhedron from .OFF file -bool -Scene_textured_polyhedron_item::load(std::istream& in) -{ - std::cout<<"LOAD"<> *d->poly; - invalidateOpenGLBuffers(); - return in && !isEmpty(); -} - -// Write textured_polyhedron to .OFF file -bool -Scene_textured_polyhedron_item::save(std::ostream& out) const -{ - out << *d->poly; - return (bool) out; -} - -QString -Scene_textured_polyhedron_item::toolTip() const -{ - if(!d->poly) - return QString(); - - return QObject::tr("

Textured Polyhedron_3 %1 (mode: %5, color: %6)

" - "

Number of vertices: %2
" - "Number of edges: %3
" - "Number of facets: %4

") - .arg(this->name()) - .arg(d->poly->size_of_vertices()) - .arg(d->poly->size_of_halfedges()/2) - .arg(d->poly->size_of_facets()) - .arg(this->renderingModeName()) - .arg(this->color().name()); -} - -// Points/Wireframe/Flat/Gouraud OpenGL drawing in a display list -void Scene_textured_polyhedron_item::draw(CGAL::Three::Viewer_interface* viewer) const { - - if(!are_buffers_filled) - { - d->compute_normals_and_vertices(); - d->initializeBuffers(viewer); - } - - vaos[Scene_textured_polyhedron_item_priv::Facets]->bind(); - viewer->glActiveTexture(GL_TEXTURE0); - viewer->glBindTexture(GL_TEXTURE_2D, d->textureId); - attribBuffers(viewer, PROGRAM_WITH_TEXTURE); - d->program=getShaderProgram(PROGRAM_WITH_TEXTURE); - d->program->bind(); - viewer->glDrawArrays(GL_TRIANGLES, 0, static_cast(d->nb_facets/4)); - //Clean-up - d->program->release(); - vaos[Scene_textured_polyhedron_item_priv::Facets]->release(); -} -void Scene_textured_polyhedron_item::drawEdges(CGAL::Three::Viewer_interface* viewer) const { - if(!are_buffers_filled) - d->initializeBuffers(viewer); - - vaos[Scene_textured_polyhedron_item_priv::Edges]->bind(); - viewer->glActiveTexture(GL_TEXTURE0); - viewer->glBindTexture(GL_TEXTURE_2D, d->textureId); - attribBuffers(viewer, PROGRAM_WITH_TEXTURED_EDGES); - - d->program=getShaderProgram(PROGRAM_WITH_TEXTURED_EDGES); - d->program->bind(); - viewer->glDrawArrays(GL_LINES, 0, static_cast(d->nb_lines/4)); - - vaos[Scene_textured_polyhedron_item_priv::Edges]->release(); - d->program->release(); - - vaos[Scene_textured_polyhedron_item_priv::Border_edges]->bind(); - attribBuffers(viewer, PROGRAM_NO_SELECTION); - d->program=getShaderProgram(PROGRAM_NO_SELECTION); - d->program->bind(); - viewer->glLineWidth(4.0); - d->program->setAttributeValue("colors", QColor(Qt::blue)); - viewer->glDrawArrays(GL_LINES, 0, static_cast(d->nb_border/3)); - viewer->glLineWidth(1.0); - //Clean-up - d->program->release(); - vaos[Scene_textured_polyhedron_item_priv::Border_edges]->release(); -} - -Textured_polyhedron* -Scene_textured_polyhedron_item::textured_polyhedron() { return d->poly; } -const Textured_polyhedron* -Scene_textured_polyhedron_item::textured_polyhedron() const { return d->poly; } - -bool -Scene_textured_polyhedron_item::isEmpty() const { - return (d->poly == 0) || d->poly->empty(); -} - -void -Scene_textured_polyhedron_item::compute_bbox() const { - const Point& p = *(d->poly->points_begin()); - CGAL::Bbox_3 bbox(p.x(), p.y(), p.z(), p.x(), p.y(), p.z()); - for(Textured_polyhedron::Point_iterator it = d->poly->points_begin(); - it != d->poly->points_end(); - ++it) { - bbox = bbox + it->bbox(); - } - _bbox = Bbox(bbox.xmin(),bbox.ymin(),bbox.zmin(), - bbox.xmax(),bbox.ymax(),bbox.zmax()); -} -void -Scene_textured_polyhedron_item::invalidateOpenGLBuffers() -{ - are_buffers_filled = false; - compute_bbox(); -} -void -Scene_textured_polyhedron_item::selection_changed(bool p_is_selected) -{ - if(p_is_selected != is_selected) - { - is_selected = p_is_selected; - initializeBuffers(); - //to be replaced by a functor in the d-pointer when the merging is done - if(p_is_selected) - Q_EMIT selectionChanged(); - } - else - is_selected = p_is_selected; -} -void Scene_textured_polyhedron_item::add_border_edges(std::vector border_edges) -{ - d->positions_border = border_edges; - d->nb_border = border_edges.size(); - d->program=getShaderProgram(PROGRAM_NO_SELECTION); - d->program->bind(); - vaos[Scene_textured_polyhedron_item_priv::Border_edges]->bind(); - buffers[Scene_textured_polyhedron_item_priv::Edges_border].bind(); - buffers[Scene_textured_polyhedron_item_priv::Edges_Vertices].allocate(d->positions_border.data(), - static_cast(d->positions_border.size()*sizeof(float))); - d->program->enableAttributeArray("vertex"); - d->program->setAttributeBuffer("vertex",GL_FLOAT,0,3); - buffers[Scene_textured_polyhedron_item_priv::Edges_Vertices].release(); - vaos[Scene_textured_polyhedron_item_priv::Border_edges]->release(); - - d->program->release(); - d->positions_border.resize(0); - std::vector(d->positions_border).swap(d->positions_border); - itemChanged(); - -} diff --git a/Polyhedron/demo/Polyhedron/Scene_textured_polyhedron_item.h b/Polyhedron/demo/Polyhedron/Scene_textured_polyhedron_item.h deleted file mode 100644 index 115f31da24a..00000000000 --- a/Polyhedron/demo/Polyhedron/Scene_textured_polyhedron_item.h +++ /dev/null @@ -1,60 +0,0 @@ -#ifndef SCENE_TEXTURED_POLYHEDRON_ITEM_H -#define SCENE_TEXTURED_POLYHEDRON_ITEM_H -#include "Scene_textured_polyhedron_item_config.h" -#include -#include -#include "Textured_polyhedron_type_fwd.h" -#include -#include "texture.h" - -struct Scene_textured_polyhedron_item_priv; -// This class represents a textured polyhedron in the OpenGL scene -class SCENE_TEXTURED_POLYHEDRON_ITEM_EXPORT Scene_textured_polyhedron_item - : public CGAL::Three::Scene_item { - Q_OBJECT -public: - Scene_textured_polyhedron_item(); -// Scene_textured_polyhedron_item(const Scene_textured_polyhedron_item&); - Scene_textured_polyhedron_item(const Textured_polyhedron& p); - Scene_textured_polyhedron_item(Textured_polyhedron* const p); - ~Scene_textured_polyhedron_item(); - - Scene_textured_polyhedron_item* clone() const; - - // IO - bool load(std::istream& in); - bool save(std::ostream& out) const; - - // Function for displaying meta-data of the item - virtual QString toolTip() const; - - // Indicate if rendering mode is supported - virtual bool supportsRenderingMode(RenderingMode m) const { return (m != PointsPlusNormals && m != Points && m != Gouraud && m != ShadedPoints); } - // Points/Wireframe/Flat/Gouraud OpenGL drawing in a display list - void draw() const {} - virtual void draw(CGAL::Three::Viewer_interface*) const; - virtual void drawEdges() const {} - virtual void drawEdges(CGAL::Three::Viewer_interface* viewer) const; - - // Get wrapped textured_polyhedron - Textured_polyhedron* textured_polyhedron(); - const Textured_polyhedron* textured_polyhedron() const; - - // Get dimensions - bool isFinite() const { return true; } - bool isEmpty() const; - void compute_bbox() const; - virtual void invalidateOpenGLBuffers(); - virtual void selection_changed(bool); - void add_border_edges(std::vector border_edges); - -Q_SIGNALS: - void selectionChanged(); - -protected: - friend struct Scene_textured_polyhedron_item_priv; - Scene_textured_polyhedron_item_priv* d; - -}; // end class Scene_textured_polyhedron_item - -#endif // SCENE_TEXTURED_POLYHEDRON_ITEM_H diff --git a/Polyhedron/demo/Polyhedron/Scene_textured_polyhedron_item_config.h b/Polyhedron/demo/Polyhedron/Scene_textured_polyhedron_item_config.h deleted file mode 100644 index d3480a929c3..00000000000 --- a/Polyhedron/demo/Polyhedron/Scene_textured_polyhedron_item_config.h +++ /dev/null @@ -1,10 +0,0 @@ -#ifndef SCENE_TEXTURED_POLYHEDRON_ITEM_CONFIG_H -#define SCENE_TEXTURED_POLYHEDRON_ITEM_CONFIG_H - -#ifdef scene_textured_polyhedron_item_EXPORTS -# define SCENE_TEXTURED_POLYHEDRON_ITEM_EXPORT Q_DECL_EXPORT -#else -# define SCENE_TEXTURED_POLYHEDRON_ITEM_EXPORT Q_DECL_IMPORT -#endif - -#endif // SCENE_TEXTURED_POLYHEDRON_ITEM_CONFIG_H diff --git a/Polyhedron/demo/Polyhedron/Textured_polyhedron_type.h b/Polyhedron/demo/Polyhedron/Textured_polyhedron_type.h deleted file mode 100644 index 9950ceb4a74..00000000000 --- a/Polyhedron/demo/Polyhedron/Textured_polyhedron_type.h +++ /dev/null @@ -1,11 +0,0 @@ -#ifndef TEXTURED_POLYHEDRON_TYPE_H -#define TEXTURED_POLYHEDRON_TYPE_H - -#include -#include - -#include "Textured_polyhedron_type_fwd.h" - -struct EPIC_kernel : public CGAL::Exact_predicates_inexact_constructions_kernel {}; - -#endif // TEXTURED_POLYHEDRON_TYPE_H diff --git a/Polyhedron/demo/Polyhedron/Textured_polyhedron_type_fwd.h b/Polyhedron/demo/Polyhedron/Textured_polyhedron_type_fwd.h deleted file mode 100644 index ae75d4dcee7..00000000000 --- a/Polyhedron/demo/Polyhedron/Textured_polyhedron_type_fwd.h +++ /dev/null @@ -1,12 +0,0 @@ -#ifndef TEXTURED_POLYHEDRON_TYPE_FWD_H -#define TEXTURED_POLYHEDRON_TYPE_FWD_H - -struct EPIC_kernel; -namespace CGAL { - struct Textured_items; - template class Textured_polyhedron; -} - -typedef CGAL::Textured_polyhedron< ::EPIC_kernel,CGAL::Textured_items> Textured_polyhedron; - -#endif // TEXTURED_POLYHEDRON_TYPE_FWD_H diff --git a/Polyhedron/demo/Polyhedron/Viewer.cpp b/Polyhedron/demo/Polyhedron/Viewer.cpp index f0172b836fa..9cf40217937 100644 --- a/Polyhedron/demo/Polyhedron/Viewer.cpp +++ b/Polyhedron/demo/Polyhedron/Viewer.cpp @@ -139,7 +139,7 @@ Viewer::Viewer(QWidget* parent, bool antialiasing) tr("Selects a point. When the second point is selected, " "displays the two points and the distance between them.")); setMouseBindingDescription(Qt::Key_O, Qt::NoModifier, Qt::LeftButton, - tr("Move the camera orthogonally to the picked facet of a Scene_polyhedron_item or " + tr("Move the camera orthogonally to the picked facet of a Scene_surface_mesh_item or " "to the current selection of a Scene_points_with_normal_item.")); prev_radius = sceneRadius(); diff --git a/Property_map/include/CGAL/property_map.h b/Property_map/include/CGAL/property_map.h index f589496dcba..d8610c0f4dd 100644 --- a/Property_map/include/CGAL/property_map.h +++ b/Property_map/include/CGAL/property_map.h @@ -38,6 +38,7 @@ #include #include +#include namespace CGAL { From 254b00d77841f563bc76c1a64057d45f72115e8c Mon Sep 17 00:00:00 2001 From: Maxime Gimeno Date: Thu, 12 Jul 2018 17:04:17 +0200 Subject: [PATCH 010/268] Update dependencies --- Property_map/package_info/Property_map/dependencies | 3 +++ 1 file changed, 3 insertions(+) diff --git a/Property_map/package_info/Property_map/dependencies b/Property_map/package_info/Property_map/dependencies index 76331fefe0d..daac83f2511 100644 --- a/Property_map/package_info/Property_map/dependencies +++ b/Property_map/package_info/Property_map/dependencies @@ -1,2 +1,5 @@ Installation STL_Extension +Kernel_23 +Profiling_tools + From 16a9bc4d7c795dc584c391a803f472b6ccdea022 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mael=20Rouxel-Labb=C3=A9?= Date: Thu, 26 Jul 2018 16:27:58 +0200 Subject: [PATCH 011/268] Fixed some links / concepts related to sgi.com and cppreference --- BGL/include/CGAL/boost/graph/Seam_mesh.h | 4 +- .../Barycentric_coordinates_2.txt | 2 +- Documentation/doc/Documentation/General.txt | 54 +++++++++++++------ .../CGAL/Polyhedral_complex_mesh_domain_3.h | 2 +- .../include/CGAL/Surface_mesh/Surface_mesh.h | 2 +- .../Orbifold_Tutte_parameterizer_3.h | 4 +- .../orbifold_shortest_path.h | 4 +- 7 files changed, 47 insertions(+), 25 deletions(-) diff --git a/BGL/include/CGAL/boost/graph/Seam_mesh.h b/BGL/include/CGAL/boost/graph/Seam_mesh.h index 8df36e3ff4c..429e38c98ee 100644 --- a/BGL/include/CGAL/boost/graph/Seam_mesh.h +++ b/BGL/include/CGAL/boost/graph/Seam_mesh.h @@ -1017,7 +1017,7 @@ public: /// of a vertex of the underlying mesh is given by its position /// in the container `tm_vds`. /// - /// \tparam VdContainer must be a model of SequenceContainer (that is, provide + /// \tparam VdContainer must be a model of `SequenceContainer` (that is, provide /// the functions: `operator[]` and `at()`). /// /// \returns one of the halfedges of the seam mesh that is on a seam. @@ -1062,7 +1062,7 @@ public: /// /// \returns one of the halfedges of the seam mesh that is on a seam. /// - /// \tparam VdContainer must be a model of SequenceContainer (that is, provide + /// \tparam VdContainer must be a model of `SequenceContainer` (that is, provide /// the functions: `operator[]` and `at()`). /// /// \pre filename should be the name of a CGAL selection file: edges are diff --git a/Barycentric_coordinates_2/doc/Barycentric_coordinates_2/Barycentric_coordinates_2.txt b/Barycentric_coordinates_2/doc/Barycentric_coordinates_2/Barycentric_coordinates_2.txt index da226aedf29..855db161ee9 100644 --- a/Barycentric_coordinates_2/doc/Barycentric_coordinates_2/Barycentric_coordinates_2.txt +++ b/Barycentric_coordinates_2/doc/Barycentric_coordinates_2/Barycentric_coordinates_2.txt @@ -223,7 +223,7 @@ From the figure above it is easy to see that the \f$O(n^2)\f$ algorithm is as fa The generic design of the package was developed in 2013 by Dmitry Anisimov and David Bommes with many useful comments by Kai Hormann and Pierre Alliez. The package consists of 6 classes, 2 enumerations, and one namespace. Appropriate iterators are used to provide an efficient access to data and to pass them to one of the generic algorithms for computing coordinates. Once instantiated for a polygon (triangle, segment), the coordinates can be computed multiple times for different query points with respect to all the vertices of the provided polygon (triangle, segment). All the classes are fully templated and have a simple and similar design. In particular, we follow the same naming convention for all functions. Yet, the number of functions can differ from one class to another. -The implemented algorithms for computing coordinates do not depend on a particular kernel, and all the coordinates can be computed exactly, if an exact kernel is used, apart from mean value coordinates. The latter coordinates involve a square root operation, which results in a slightly worse precision with exact data types due to temporal conversion into a floating point type. The computed coordinates can be stored in an arbitrary container if an appropriate output iterator is provided. +The implemented algorithms for computing coordinates do not depend on a particular kernel, and all the coordinates can be computed exactly, if an exact kernel is used, apart from mean value coordinates. The latter coordinates involve a square root operation, which results in a slightly worse precision with exact data types due to temporal conversion into a floating point type. The computed coordinates can be stored in an arbitrary container if an appropriate output iterator is provided. It is worth noting that the class `CGAL::Barycentric_coordinates::Segment_coordinates_2` is used to compute generalized barycentric coordinates along the polygon's boundary. Hence, one can use the trick for segment coordinates from Section \ref gbc_degeneracies if one is convinced that a point must lie exactly on the polygon's boundary but due to some numerical instabilities it does not. diff --git a/Documentation/doc/Documentation/General.txt b/Documentation/doc/Documentation/General.txt index 0941991e41c..cf46e5e08a8 100644 --- a/Documentation/doc/Documentation/General.txt +++ b/Documentation/doc/Documentation/General.txt @@ -1,33 +1,33 @@ ///This concept refers to the one described at http://www.sgi.com/tech/stl/Assignable.html. /// ///Using the latest concepts of the \cpp standard, a type that is a model of this concept -///is both CopyAssignable -///and CopyConstructible. +///is both CopyAssignable +///and CopyConstructible. class Assignable {}; /// \cgalConcept /// Concept from the \cpp standard. -/// See http://en.cppreference.com/w/cpp/concept/DefaultConstructible +/// See https://en.cppreference.com/w/cpp/named_req/DefaultConstructible class DefaultConstructible {}; /// \cgalConcept /// Concept from the \cpp standard. -/// See http://en.cppreference.com/w/cpp/concept/CopyConstructible +/// See https://en.cppreference.com/w/cpp/named_req/CopyConstructible class CopyConstructible {}; /// \cgalConcept /// Concept from the \cpp standard. -/// See http://en.cppreference.com/w/cpp/concept/Callable +/// See https://en.cppreference.com/w/cpp/named_req/Callable class Callable {}; /// \cgalConcept /// Concept from the \cpp standard. -/// See http://en.cppreference.com/w/cpp/concept/EqualityComparable +/// See https://en.cppreference.com/w/cpp/named_req/EqualityComparable class EqualityComparable {}; /// \cgalConcept /// Concept from the \cpp standard. -/// See http://en.cppreference.com/w/cpp/concept/LessThanComparable +/// See https://en.cppreference.com/w/cpp/named_req/LessThanComparable class LessThanComparable {}; /// \cgalConcept @@ -38,52 +38,74 @@ class AdaptableFunctor {}; /// \cgalConcept ///This concept refers to the one described at http://www.sgi.com/tech/stl/AdaptableUnaryFunction.html. class AdaptableUnaryFunction {}; + /// \cgalConcept ///This concept refers to the one described at http://www.sgi.com/tech/stl/AdaptableBinaryFunction.html. class AdaptableBinaryFunction {}; /// \cgalConcept /// Concept from the \cpp standard. -/// See http://en.cppreference.com/w/cpp/concept/Iterator +/// See https://en.cppreference.com/w/cpp/named_req/Iterator class Iterator {}; /// \cgalConcept /// Concept from the \cpp standard. -/// See http://en.cppreference.com/w/cpp/concept/OutputIterator +/// See https://en.cppreference.com/w/cpp/named_req/OutputIterator class OutputIterator {}; /// \cgalConcept /// Concept from the \cpp standard. -/// See http://en.cppreference.com/w/cpp/concept/InputIterator +/// See https://en.cppreference.com/w/cpp/named_req/InputIterator class InputIterator {}; /// \cgalConcept /// Concept from the \cpp standard. -/// See http://en.cppreference.com/w/cpp/concept/ForwardIterator +/// See https://en.cppreference.com/w/cpp/named_req/ForwardIterator class ForwardIterator {}; /// \cgalConcept /// Concept from the \cpp standard. -/// See http://en.cppreference.com/w/cpp/concept/RandomAccessIterator +/// See https://en.cppreference.com/w/cpp/named_req/RandomAccessIterator class RandomAccessIterator {}; /// \cgalConcept /// Concept from the \cpp standard. -/// See http://en.cppreference.com/w/cpp/concept/BidirectionalIterator +/// See https://en.cppreference.com/w/cpp/named_req/BidirectionalIterator class BidirectionalIterator {}; +/// \cgalConcept +/// Concept from the \cpp standard. +/// See https://en.cppreference.com/w/cpp/named_req/Container +class Container {}; + +/// \cgalConcept +/// Concept from the \cpp standard. +/// See https://en.cppreference.com/w/cpp/named_req/ReversibleContainer +class ReversibleContainer {}; + +/// \cgalConcept +/// Concept from the \cpp standard. +/// See https://en.cppreference.com/w/cpp/named_req/AssociativeContainer +class AssociativeContainer {}; + +/// \cgalConcept +/// Concept from the \cpp standard. +/// See https://en.cppreference.com/w/cpp/named_req/SequenceContainer +class SequenceContainer {}; + /// \cgalConcept /// This concept refers to the one described at http://www.sgi.com/tech/stl/RandomAccessContainer.html. /// /// It is a container that is a model of -/// ReversibleContainer and whose iterator type is a model of -/// RandomAccessIterator. +/// ReversibleContainer and whose iterator type is a model of +/// RandomAccessIterator. class RandomAccessContainer {}; + /// \cgalConcept /// This concepts refers to the one described at http://www.sgi.com/tech/stl/BackInsertionSequence.html. /// /// It is a container that is a model of -/// SequenceContainer +/// Container /// that has the ability to append elements at the end of the sequence and to access the last element, both in amortized constant time. class BackInsertionSequence {}; diff --git a/Mesh_3/include/CGAL/Polyhedral_complex_mesh_domain_3.h b/Mesh_3/include/CGAL/Polyhedral_complex_mesh_domain_3.h index 600de3aeb0c..726068f1f76 100644 --- a/Mesh_3/include/CGAL/Polyhedral_complex_mesh_domain_3.h +++ b/Mesh_3/include/CGAL/Polyhedral_complex_mesh_domain_3.h @@ -404,9 +404,9 @@ public: needed_vertices_on_patch[i] = (std::min)(nb_of_extra_vertices_per_patch, needed_vertices_on_patch[i]); } + // Then a second path to fill `several_vertices_on_patch`... // The algorithm is adapted from SGI `random_sample_n`: - // https://www.sgi.com/tech/stl/random_sample_n.html BOOST_FOREACH(const Polyhedron& p, this->stored_polyhedra) { for (typename Polyhedron::Vertex_const_iterator diff --git a/Surface_mesh/include/CGAL/Surface_mesh/Surface_mesh.h b/Surface_mesh/include/CGAL/Surface_mesh/Surface_mesh.h index b28d643f531..6adea720fb7 100644 --- a/Surface_mesh/include/CGAL/Surface_mesh/Surface_mesh.h +++ b/Surface_mesh/include/CGAL/Surface_mesh/Surface_mesh.h @@ -73,7 +73,7 @@ namespace CGAL { public: typedef boost::uint32_t size_type; /// Constructor. %Default construction creates an invalid index. - /// We write -1, which is + /// We write -1, which is /// std::numeric_limits::max() /// as `size_type` is an unsigned type. explicit SM_Index(size_type _idx=(std::numeric_limits::max)()) : idx_(_idx) {} diff --git a/Surface_mesh_parameterization/include/CGAL/Surface_mesh_parameterization/Orbifold_Tutte_parameterizer_3.h b/Surface_mesh_parameterization/include/CGAL/Surface_mesh_parameterization/Orbifold_Tutte_parameterizer_3.h index fdb68bc3d09..5d52a2a2f49 100644 --- a/Surface_mesh_parameterization/include/CGAL/Surface_mesh_parameterization/Orbifold_Tutte_parameterizer_3.h +++ b/Surface_mesh_parameterization/include/CGAL/Surface_mesh_parameterization/Orbifold_Tutte_parameterizer_3.h @@ -210,7 +210,7 @@ Error_code read_cones(const TriangleMesh& tm, const char* filename, ConeOutputIt /// having to pass the multiple template parameters of the class `CGAL::Seam_mesh`. /// \tparam ConeInputBidirectionalIterator must be a model of `BidirectionalIterator` /// with value type `boost::graph_traits::%vertex_descriptor`. -/// \tparam ConeMap must be a model of AssociativeContainer +/// \tparam ConeMap must be a model of `AssociativeContainer` /// with `boost::graph_traits::%vertex_descriptor` as key type and /// \link PkgSurfaceParameterizationEnums Cone_type \endlink as value type. /// @@ -896,7 +896,7 @@ public: /// The mapping is piecewise linear (linear in each triangle). /// The result is the (u,v) pair image of each vertex of the 3D surface. /// - /// \tparam ConeMap must be a model of AssociativeContainer + /// \tparam ConeMap must be a model of `AssociativeContainer` /// with key type `boost::graph_traits::%vertex_descriptor` and /// \link PkgSurfaceParameterizationEnums Cone_type \endlink as value type. /// \tparam VertexUVmap must be a model of `ReadWritePropertyMap` with diff --git a/Surface_mesh_parameterization/include/CGAL/Surface_mesh_parameterization/orbifold_shortest_path.h b/Surface_mesh_parameterization/include/CGAL/Surface_mesh_parameterization/orbifold_shortest_path.h index 3a21e30b78d..bfa4d723e52 100644 --- a/Surface_mesh_parameterization/include/CGAL/Surface_mesh_parameterization/orbifold_shortest_path.h +++ b/Surface_mesh_parameterization/include/CGAL/Surface_mesh_parameterization/orbifold_shortest_path.h @@ -175,8 +175,8 @@ void compute_shortest_paths_between_two_cones(const TriangleMesh& mesh, /// \tparam TriangleMesh A triangle mesh, model of `FaceListGraph` and `HalfedgeListGraph`. /// \tparam InputConesForwardIterator A model of `ForwardIterator` with value type /// `boost::graph_traits::%vertex_descriptor`. -/// \tparam SeamContainer A model of SequenceContainer -/// with value type `boost::graph_traits::%edge_descriptor`. +/// \tparam SeamContainer A model of `SequenceContainer` with value type +/// `boost::graph_traits::%edge_descriptor`. /// /// \param mesh the triangular mesh on which paths are computed /// \param first, beyond a range of cones From ed6ebae2deac247bb038763754738d5b96fbeaaa Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mael=20Rouxel-Labb=C3=A9?= Date: Thu, 26 Jul 2018 16:30:28 +0200 Subject: [PATCH 012/268] Added repair_polygon_soup.h --- .../repair_polygon_soup.h | 439 ++++++++++++++++++ .../include/CGAL/polygon_mesh_processing.h | 1 + 2 files changed, 440 insertions(+) create mode 100644 Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/repair_polygon_soup.h diff --git a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/repair_polygon_soup.h b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/repair_polygon_soup.h new file mode 100644 index 00000000000..c389c16dcaf --- /dev/null +++ b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/repair_polygon_soup.h @@ -0,0 +1,439 @@ +// Copyright (c) 2018 GeometryFactory (France). +// All rights reserved. +// +// This file is part of CGAL (www.cgal.org). +// You can redistribute it and/or modify it under the terms of the GNU +// General Public License as published by the Free Software Foundation, +// either version 3 of the License, or (at your option) any later version. +// +// Licensees holding a valid commercial license may use this file in +// accordance with the commercial license agreement provided with the software. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. +// +// $URL$ +// $Id$ +// SPDX-License-Identifier: GPL-3.0+ +// +// +// Author(s) : Mael Rouxel-Labbé + +#ifndef CGAL_POLYGON_MESH_PROCESSING_REPAIR_POLYGON_SOUP +#define CGAL_POLYGON_MESH_PROCESSING_REPAIR_POLYGON_SOUP + +#include + +#include +#include + +#include + +#include +#include +#include +#include +#include + +namespace CGAL { + +namespace Polygon_mesh_processing { + +namespace internal { + +template +struct Polygon_types +{ + typedef typename PointRange::value_type Point_3; + typedef typename PolygonRange::value_type Polygon_3; + + typedef typename std::iterator_traits::value_type V_ID; + typedef typename std::vector::size_type P_ID; +}; + +template +void print_polygon(Stream& out, const Polygon& polygon) +{ + const std::size_t polygon_size = polygon.size(); + out << "(" << polygon_size << ")"; + for(std::size_t i=0; i +bool simplify_polygon(PointRange& points, + Polygon& polygon, + const Traits& traits = Traits()) +{ + const std::size_t ini_polygon_size = polygon.size(); + + // Start at the last since if two points are identical, the second one gets removed. + // By starting at 'last', we ensure that 'to_remove' is ordered from closest to .begin() + // to closest to .end() + std::size_t last = ini_polygon_size - 1, i = last; + bool stop = false; + std::vector to_remove; + + do + { + std::size_t next_i = (i == last) ? 0 : i+1; + stop = (next_i == last); + + while(polygon[i] == polygon[next_i] || // combinatorial equality + traits.equal_3_object()(points[polygon[i]], points[polygon[next_i]])) // geometric equality + { + to_remove.push_back(next_i); +#ifdef CGAL_PMP_REPAIR_POLYGON_SOUP_DEBUG + std::cout << "removing point: polygon[" << next_i << "] = " << polygon[next_i] << std::endl; +#endif + next_i = (next_i == last) ? 0 : next_i+1; + + // Every duplicate in front of 'last' (circularly-speaking) has already been cleared + if(next_i == last) + { + stop = true; + break; + } + } + + i = next_i; + } + while(!stop); + + while(!to_remove.empty()) + { + polygon.erase(polygon.begin() + to_remove.back()); + to_remove.pop_back(); + } + + const std::size_t removed_points_n = ini_polygon_size - polygon.size(); + return (removed_points_n != 0); +} + +// \ingroup PMP_repairing_grp +// +// For each polygon of the soup, removes consecutive identical (in a geometric sense) points. +// +// \tparam PointRange a model of the concept `RandomAccessContainer` +// \tparam PolygonRange a model of the concept `SequenceContainer` +// whose value_type is itself a model of the concept `SequenceContainer` +// whose value_type is `std::size_t`. +// \tparam NamedParameters a sequence of \ref pmp_namedparameters "Named Parameters" +// +// \param points points of the soup of polygons. +// \param polygons a vector of polygons. Each element in the vector describes a polygon +// using the indices of the points in `points`. +// \param np optional \ref pmp_namedparameters "Named Parameters" described below +// +// \cgalNamedParamsBegin +// \cgalParamBegin{geom_traits} a geometric traits class instance. +// The traits class must provide the nested functor `Equal_3` +// to compare lexicographically two points a function `Equal_3 equal_3_object()`. +// \cgalParamEnd +// \cgalNamedParamsEnd +// +template +std::size_t simplify_polygons_in_polygon_soup(PointRange& points, + PolygonRange& polygons, + const Traits& traits = Traits()) +{ + typedef typename Polygon_types::P_ID P_ID; + typedef typename Polygon_types::Polygon_3 Polygon_3; + + std::size_t simplified_polygons_n = 0; + + for(P_ID polygon_index=0, end=polygons.size(); polygon_index!=end; ++polygon_index) + { + Polygon_3& polygon = polygons[polygon_index]; + if(polygon.size() <= 1) + continue; + + if(simplify_polygon(points, polygon, traits)) + ++simplified_polygons_n; + } + + return simplified_polygons_n; +} + +// \ingroup PMP_repairing_grp +// +// Splits "pinched" poygons, that is polygons for which a point appears more than once, +// into multiple non-pinched polygons. +// +// \tparam PointRange a model of the concept `RandomAccessContainer` +// \tparam PolygonRange a model of the concept `SequenceContainer` +// whose value_type is itself a model of the concept `SequenceContainer` +// whose value_type is `std::size_t`. +// \tparam NamedParameters a sequence of \ref pmp_namedparameters "Named Parameters" +// +// \param points points of the soup of polygons. +// \param polygons a vector of polygons. Each element in the vector describes a polygon +// using the indices of the points in `points`. +// \param np optional \ref pmp_namedparameters "Named Parameters" described below +// +// \cgalNamedParamsBegin +// \cgalParamBegin{geom_traits} a geometric traits class instance. +// The traits class must provide the nested functor `Less_xyz_3` +// to compare lexicographically two points a function `Less_xyz_3 less_xyz_3_object()`. +// \cgalParamEnd +// \cgalNamedParamsEnd +// +template +std::size_t split_pinched_polygons_in_polygon_soup(PointRange& points, + PolygonRange& polygons, + const Traits& traits = Traits()) +{ + typedef typename Polygon_types::P_ID P_ID; + typedef typename Polygon_types::Point_3 Point_3; + typedef typename Polygon_types::Polygon_3 Polygon_3; + + typedef typename Traits::Less_xyz_3 Less_xyz_3; + + std::size_t new_polygons_n = 0; + + // It is important that polygons.size() is re-evaluated at each loop iteration + // because new polygons are intentionally added at the back of 'polygons' to also be examined + for(P_ID polygon_index=0; polygon_index < polygons.size(); ++polygon_index) + { + Polygon_3& polygon = polygons[polygon_index]; + const std::size_t ini_polygon_size = polygon.size(); + +#ifdef CGAL_PMP_REPAIR_POLYGON_SOUP_DEBUG + std::cout << "Input polygon: "; + print_polygon(std::cout, polygon); +#endif + + if(ini_polygon_size <= 3) + continue; + + CGAL_assertion(!simplify_polygon(points, polygon, traits)); // 'polygon' must not have duplicates + + typedef std::map Unique_point_container; + Unique_point_container unique_points(traits.less_xyz_3_object()); + + for(std::size_t i=0, polygon_size = polygon.size(); i is_insert_succesful = + unique_points.insert(std::make_pair(p, i)); + + if(!is_insert_succesful.second) + { + // We have already met that point, split the polygon into two smaller polygons + std::size_t prev_id = is_insert_succesful.first->second; + + CGAL_assertion(prev_id < i-1); + + Polygon_3 split_polygon_1(polygon.begin() + prev_id, polygon.begin() + i); + Polygon_3 split_polygon_2; // might be pinched too, but it'll be checked later + + split_polygon_2.insert(split_polygon_2.end(), polygon.begin(), polygon.begin() + prev_id); + split_polygon_2.insert(split_polygon_2.end(), polygon.begin() + i, polygon.end()); + +#ifdef CGAL_PMP_REPAIR_POLYGON_SOUP_DEBUG + std::cout << "New polygons:" << std::endl; + std::cout << "P1:"; + print_polygon(std::cout, split_polygon_1); + + std::cout << "P2:"; + print_polygon(std::cout, split_polygon_2); +#endif + + std::swap(polygon, split_polygon_1); + polygons.push_back(split_polygon_2); + + ++new_polygons_n; + break; + } + } + } + + return new_polygons_n; +} + +// \ingroup PMP_repairing_grp +// +// Removes polygons with fewer than 2 points from the soup. +// +// \tparam PointRange a model of the concept `Container` +// \tparam PolygonRange a model of the concept `SequenceContainer` +// whose value_type is itself a model of the concept `Container` +// whose value_type is `std::size_t`. +// \tparam NamedParameters a sequence of \ref pmp_namedparameters "Named Parameters" +// +// \param points points of the soup of polygons. +// \param polygons a vector of polygons. Each element in the vector describes a polygon +// using the indices of the points in `points`. +// +template +std::size_t remove_invalid_polygons_in_polygon_soup(PointRange& /*points*/, + PolygonRange& polygons) +{ + std::vector to_remove; + const std::size_t ini_polygons_size = polygons.size(); + for(std::size_t polygon_index=0; polygon_index!=ini_polygons_size; ++polygon_index) + { + if(polygons[polygon_index].size() <= 2) + to_remove.push_back(polygon_index); + } + + while(!to_remove.empty()) + { + polygons.erase(polygons.begin() + to_remove.back()); + to_remove.pop_back(); + } + + return ini_polygons_size - polygons.size(); +} + +} // end namespace internal + +template +std::size_t remove_degenerate_polygons_in_polygon_soup(PointRange& points, + PolygonRange& polygons) +{ + return remove_degenerate_polygons_in_polygon_soup(points, polygons, CGAL::parameters::all_default()); +} + +/// \ingroup PMP_repairing_grp +/// +/// Removes the isolated points from a polygon soup. +/// A point is considered isolated if it does not appear in any polygon of the soup. +/// +/// \tparam PointRange a model of the concept `SequenceContainer` +/// \tparam PolygonRange a model of the concept `RandomAccessContainer` +/// whose value_type is itself a model of the concept `RandomAccessContainer` +/// whose value_type is `std::size_t`. +/// +/// \param points points of the soup of polygons. +/// \param polygons a vector of polygons. Each element in the vector describes a polygon +/// using the indices of the points in `points`. +/// +/// \returns the number of removed isolated points. +/// +template +std::size_t remove_isolated_points_in_polygon_soup(PointRange& points, + PolygonRange& polygons) +{ + typedef typename internal::Polygon_types::P_ID P_ID; + typedef typename internal::Polygon_types::Polygon_3 Polygon_3; + + if(points.empty()) + return 0; + + // Go through all the polygons to find points that are never used. + const std::size_t ini_points_size = points.size(); + std::vector visited(ini_points_size, false); + std::vector id_remapping(ini_points_size); + for(std::size_t i=0; i +void repair_polygon_soup(PointRange& points, + PolygonRange& polygons, + const NamedParameters& np) +{ + using boost::get_param; + using boost::choose_param; + + typedef typename boost::lookup_named_param_def < + internal_np::geom_traits_t, + NamedParameters, + typename CGAL::Kernel_traits::Point_3 >::type + > ::type Traits; + + Traits traits = choose_param(get_param(np, internal_np::geom_traits), Traits()); + + internal::simplify_polygons_in_polygon_soup(points, polygons, traits); + internal::split_pinched_polygons_in_polygon_soup(points, polygons, traits); + internal::remove_invalid_polygons_in_polygon_soup(points, polygons); + + remove_isolated_points_in_polygon_soup(points, polygons); +} + +template +void repair_polygon_soup(PointRange& points, + PolygonRange& polygons) +{ + return repair_polygon_soup(points, polygons, CGAL::parameters::all_default()); +} + +} // end namespace Polygon_mesh_processing + +} // end namespace CGAL + +#endif // CGAL_POLYGON_MESH_PROCESSING_REPAIR_POLYGON_SOUP diff --git a/Polygon_mesh_processing/include/CGAL/polygon_mesh_processing.h b/Polygon_mesh_processing/include/CGAL/polygon_mesh_processing.h index 7d587ad4b84..ebf1c64da50 100644 --- a/Polygon_mesh_processing/include/CGAL/polygon_mesh_processing.h +++ b/Polygon_mesh_processing/include/CGAL/polygon_mesh_processing.h @@ -49,6 +49,7 @@ #include #include #include +#include // the named parameter header being not documented the doc is put here for now #ifdef DOXYGEN_RUNNING From 4a33cde776110dd8fc1b9dc7a110a7b4dc794173 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mael=20Rouxel-Labb=C3=A9?= Date: Thu, 26 Jul 2018 16:30:56 +0200 Subject: [PATCH 013/268] Added example and test for repair_polygon_soup --- .../Polygon_mesh_processing/CMakeLists.txt | 1 + .../repair_polygon_soup_example.cpp | 76 +++++ .../Polygon_mesh_processing/CMakeLists.txt | 1 + .../test_repair_polygon_soup.cpp | 289 ++++++++++++++++++ 4 files changed, 367 insertions(+) create mode 100644 Polygon_mesh_processing/examples/Polygon_mesh_processing/repair_polygon_soup_example.cpp create mode 100644 Polygon_mesh_processing/test/Polygon_mesh_processing/test_repair_polygon_soup.cpp diff --git a/Polygon_mesh_processing/examples/Polygon_mesh_processing/CMakeLists.txt b/Polygon_mesh_processing/examples/Polygon_mesh_processing/CMakeLists.txt index ed6a9a6e8f9..f53a92a678d 100644 --- a/Polygon_mesh_processing/examples/Polygon_mesh_processing/CMakeLists.txt +++ b/Polygon_mesh_processing/examples/Polygon_mesh_processing/CMakeLists.txt @@ -104,6 +104,7 @@ create_single_source_cgal_program( "random_perturbation_SM_example.cpp" ) create_single_source_cgal_program( "corefinement_LCC.cpp") create_single_source_cgal_program( "hole_filling_example_LCC.cpp" ) create_single_source_cgal_program( "detect_features_example.cpp" ) +create_single_source_cgal_program( "repair_polygon_soup_example.cpp" ) if(OpenMesh_FOUND) create_single_source_cgal_program( "compute_normals_example_OM.cpp" ) diff --git a/Polygon_mesh_processing/examples/Polygon_mesh_processing/repair_polygon_soup_example.cpp b/Polygon_mesh_processing/examples/Polygon_mesh_processing/repair_polygon_soup_example.cpp new file mode 100644 index 00000000000..93776cfc7d5 --- /dev/null +++ b/Polygon_mesh_processing/examples/Polygon_mesh_processing/repair_polygon_soup_example.cpp @@ -0,0 +1,76 @@ +#include +#include + +#include +#include +#include + +#include +#include + +typedef CGAL::Exact_predicates_inexact_constructions_kernel K; +typedef K::Point_3 Point_3; + +typedef std::vector Polygon; +typedef CGAL::Surface_mesh Mesh; + +namespace PMP = CGAL::Polygon_mesh_processing; + +int main(int, char**) +{ + // First, construct a polygon soup with some problems + std::vector points; + std::vector polygons; + + points.push_back(Point_3(0,0,0)); + points.push_back(Point_3(1,0,0)); + points.push_back(Point_3(0,1,0)); + points.push_back(Point_3(-1,0,0)); + points.push_back(Point_3(0,-1,0)); + points.push_back(Point_3(0,-2,0)); // unused vertex + + Polygon p; + p.push_back(0); p.push_back(1); p.push_back(2); + polygons.push_back(p); + + // degenerate face + p.clear(); + p.push_back(0); p.push_back(0); p.push_back(0); + polygons.push_back(p); + + p.clear(); + p.push_back(0); p.push_back(1); p.push_back(4); + polygons.push_back(p); + + p.clear(); + p.push_back(0); p.push_back(3); p.push_back(2); + polygons.push_back(p); + + // degenerate face + p.clear(); + p.push_back(0); p.push_back(3); p.push_back(0); + polygons.push_back(p); + + p.clear(); + p.push_back(0); p.push_back(3); p.push_back(4); + polygons.push_back(p); + + // pinched face yielding only degenerate faces + p.clear(); + p.push_back(0); p.push_back(1); p.push_back(2); p.push_back(3); + p.push_back(4); p.push_back(3); p.push_back(2); p.push_back(1); + polygons.push_back(p); + + PMP::repair_polygon_soup(points, polygons); + PMP::orient_polygon_soup(points, polygons); + + Mesh mesh; + PMP::polygon_soup_to_polygon_mesh(points, polygons, mesh); + + std::cout << "Mesh has " << num_vertices(mesh) << " vertices and " << num_faces(mesh) << " faces" << std::endl; + + assert(num_vertices(mesh) == 5); + assert(num_faces(mesh) == 4); + + return 0; +} diff --git a/Polygon_mesh_processing/test/Polygon_mesh_processing/CMakeLists.txt b/Polygon_mesh_processing/test/Polygon_mesh_processing/CMakeLists.txt index 6ffde721a7d..dd51f6e8a48 100644 --- a/Polygon_mesh_processing/test/Polygon_mesh_processing/CMakeLists.txt +++ b/Polygon_mesh_processing/test/Polygon_mesh_processing/CMakeLists.txt @@ -101,6 +101,7 @@ endif() create_single_source_cgal_program("test_orient_cc.cpp") create_single_source_cgal_program("test_pmp_transform.cpp") create_single_source_cgal_program("extrude_test.cpp") + create_single_source_cgal_program("test_repair_polygon_soup.cpp") if( TBB_FOUND ) CGAL_target_use_TBB(test_pmp_distance) diff --git a/Polygon_mesh_processing/test/Polygon_mesh_processing/test_repair_polygon_soup.cpp b/Polygon_mesh_processing/test/Polygon_mesh_processing/test_repair_polygon_soup.cpp new file mode 100644 index 00000000000..c91b911174a --- /dev/null +++ b/Polygon_mesh_processing/test/Polygon_mesh_processing/test_repair_polygon_soup.cpp @@ -0,0 +1,289 @@ +#include + +#include + +#include + +#include +#include +#include + +namespace PMP = CGAL::Polygon_mesh_processing; +namespace params = PMP::parameters; + +typedef CGAL::Exact_predicates_inexact_constructions_kernel K; +typedef K::Point_3 Point_3; + +typedef CGAL::Surface_mesh Mesh; +typedef std::vector Polygon; + +void test_simplify_polygons(const bool /*verbose*/ = false) +{ + std::cout << "test simplify_polygons... " << std::endl; + + std::vector points; + std::vector polygons; + + points.push_back(Point_3(0,0,0)); // #0 + points.push_back(Point_3(1,2,0)); // #1 + points.push_back(Point_3(1,0,0)); // #2 + points.push_back(Point_3(1,3,0)); // #3 + points.push_back(Point_3(0,1,0)); // #4 + points.push_back(Point_3(1,1,0)); // #5 + points.push_back(Point_3(0,0,0)); // #6 + + // ------ + Polygon polygon; + polygon.push_back(0); polygon.push_back(2); polygon.push_back(4); + polygons.push_back(polygon); + + std::size_t res = PMP::internal::simplify_polygons_in_polygon_soup(points, polygons); + assert(res == 0 && polygons.back().size() == 3); + + // ------ + polygon.clear(); + polygon.push_back(0); polygon.push_back(0); + polygons.push_back(polygon); + + res = PMP::internal::simplify_polygons_in_polygon_soup(points, polygons, K()); + assert(res == 1 && polygons.back().size() == 1); + + // ------ + polygon.clear(); + polygon.push_back(0); polygon.push_back(0); polygon.push_back(0); polygon.push_back(0); + polygons.push_back(polygon); + + res = PMP::internal::simplify_polygons_in_polygon_soup(points, polygons, K()); + assert(res == 1 && polygons.back().size() == 1); + + // ------ + polygon.clear(); + polygon.push_back(0); polygon.push_back(3); polygon.push_back(3); polygon.push_back(3); polygon.push_back(0); + polygons.push_back(polygon); + + res = PMP::internal::simplify_polygons_in_polygon_soup(points, polygons, K()); + assert(res == 1 && polygons.back().size() == 2); + + // ------ + // Now with the same geometric positions, but different combinatorial information + polygon.clear(); + polygon.push_back(0); polygon.push_back(2); polygon.push_back(1); polygon.push_back(6); + polygons.push_back(polygon); + + res = PMP::internal::simplify_polygons_in_polygon_soup(points, polygons, K()); + assert(res == 1 && polygons.back().size() == 3); + + // ------ + polygon.clear(); + polygon.push_back(0); polygon.push_back(6); polygon.push_back(0); polygon.push_back(5); + polygons.push_back(polygon); + + res = PMP::internal::simplify_polygons_in_polygon_soup(points, polygons, K()); + assert(res == 1 && polygons.back().size() == 2); + + // ------ + polygon.clear(); + polygon.push_back(0); polygon.push_back(6); polygon.push_back(5); polygon.push_back(3); polygon.push_back(3); + polygons.push_back(polygon); + + res = PMP::internal::simplify_polygons_in_polygon_soup(points, polygons, K()); + assert(res == 1 && polygons.back().size() == 3); +} + +void test_remove_invalid_polygons(const bool /*verbose*/ = false) +{ + std::cout << "test remove_invalid_polygons... " << std::endl; + + // points are not actually needed since only the size of the polygons is considered + std::vector points; + std::vector polygons; + + std::size_t res = PMP::internal::remove_invalid_polygons_in_polygon_soup(points, polygons); + assert(res == 0 && polygons.size() == 0); + + // non-trivial polygon + Polygon polygon; + polygon.push_back(0); polygon.push_back(2); polygon.push_back(4); + polygons.push_back(polygon); + + res = PMP::internal::remove_invalid_polygons_in_polygon_soup(points, polygons); + assert(res == 0 && polygons.size() == 1); + + // another non-trivial polygon + polygon.clear(); + polygon.push_back(1); polygon.push_back(3); polygon.push_back(3); polygon.push_back(7); + polygons.push_back(polygon); + + // empty polygon + polygon.clear(); + polygons.push_back(polygon); + + // 1-vertex polygon + polygon.push_back(0); + polygons.push_back(polygon); + + // 2-vertex polygon + polygon.push_back(1); + polygons.push_back(polygon); + + // another non-trivial polygon + polygon.clear(); + polygon.push_back(8); polygon.push_back(9); polygon.push_back(7); polygon.push_back(6); + polygons.push_back(polygon); + + res = PMP::internal::remove_invalid_polygons_in_polygon_soup(points, polygons); + assert(res == 3 && polygons.size() == 3); +} + +template +std::size_t test_remove_isolated_points_data_set(PointRange& points, + PolygonRange& polygons, + const bool verbose = false) +{ + if(verbose) + { + std::cout << "Input:" << std::endl; + std::cout << points.size() << " points" << std::endl; + std::cout << polygons.size() << " polygons" << std::endl; + } + + std::size_t rm_nv = PMP::remove_isolated_points_in_polygon_soup(points, polygons); + + if(verbose) + { + std::cout << "Removed " << rm_nv << " points" << std::endl; + std::cout << points.size() << " points" << std::endl; + std::cout << polygons.size() << " polygons" << std::endl; + + std::cout << "Polygons:" << std::endl; + for(std::size_t i=0; i points; + std::vector polygons; + + // everything empty + std::size_t res = test_remove_isolated_points_data_set(points, polygons, verbose); + assert(res == 0 && points.empty() && polygons.empty()); + + points.push_back(Point_3(0,0,0)); + points.push_back(Point_3(1,2,0)); + points.push_back(Point_3(1,0,0)); + points.push_back(Point_3(1,3,0)); + points.push_back(Point_3(0,1,0)); + points.push_back(Point_3(1,1,0)); + + // no polygons (all points are unused) + std::deque points_copy(points.begin(), points.end()); + res = test_remove_isolated_points_data_set(points_copy, polygons, verbose); + assert(res == 6 && points_copy.empty() && polygons.empty()); + + Polygon polygon; + polygon.push_back(0); polygon.push_back(2); polygon.push_back(4); + polygons.push_back(polygon); + + polygon.clear(); + polygon.push_back(4); polygon.push_back(0); polygon.push_back(2); polygon.push_back(5); + polygons.push_back(polygon); + + // generic test + res = test_remove_isolated_points_data_set(points, polygons, verbose); + assert(res == 2 && points.size() == 4 && polygons.size() == 2); +} + +void test_slit_pinched_polygons(const bool /*verbose*/ = false) +{ + std::cout << "test slit_pinched_polygons... " << std::endl; + + std::vector points; + std::vector polygons; + + // everything empty + std::size_t res = PMP::internal::split_pinched_polygons_in_polygon_soup(points, polygons); + assert(res == 0 && points.empty() && polygons.empty()); + + points.push_back(Point_3(0,0,0)); // #0 + points.push_back(Point_3(1,0,0)); // #1 + points.push_back(Point_3(0,1,0)); // #2 + points.push_back(Point_3(1,1,0)); // #3 + points.push_back(Point_3(1,3,0)); // #4 + points.push_back(Point_3(1,1,0)); // #5 + + // no pinch + Polygon polygon; + polygon.push_back(0); polygon.push_back(2); polygon.push_back(4); + polygons.push_back(polygon); + + res = PMP::internal::split_pinched_polygons_in_polygon_soup(points, polygons, K()); + assert(res == 0 && polygons.size() == 1); + + // pinch via same ID (2) + polygon.clear(); + polygons.clear(); + polygon.push_back(0); polygon.push_back(2); polygon.push_back(4); polygon.push_back(3); polygon.push_back(2); + polygons.push_back(polygon); + + res = PMP::internal::split_pinched_polygons_in_polygon_soup(points, polygons, K()); + assert(res == 1 && polygons.size() == 2); + assert(polygons[0].size() == 3 && polygons[1].size() == 2); + + // pinch via same point (5 & 3) + polygon.clear(); + polygons.clear(); + polygon.push_back(5); polygon.push_back(1); polygon.push_back(0); + polygon.push_back(3); polygon.push_back(4); polygon.push_back(2); + polygons.push_back(polygon); + + res = PMP::internal::split_pinched_polygons_in_polygon_soup(points, polygons, K()); + assert(res == 1 && polygons.size() == 2); + assert(polygons[0].size() == 3 && polygons[1].size() == 3); + + // pinch on last point + polygon.clear(); + polygons.clear(); + polygon.push_back(1); polygon.push_back(5); polygon.push_back(0); + polygon.push_back(2); polygon.push_back(4); polygon.push_back(3); + polygons.push_back(polygon); + + res = PMP::internal::split_pinched_polygons_in_polygon_soup(points, polygons, K()); + assert(res == 1 && polygons.size() == 2); + assert(polygons[0].size() == 4 && polygons[1].size() == 2); + + // multiple pinches + polygon.clear(); + polygons.clear(); + polygon.push_back(5); polygon.push_back(1); polygon.push_back(3); // pinch 5&3, pinch 3... + polygon.push_back(2); polygon.push_back(4); polygon.push_back(0); + polygon.push_back(1); polygon.push_back(3); polygon.push_back(1); // ... and 3, pinch 1... + polygon.push_back(2); polygon.push_back(4); polygon.push_back(1); // ... and 1 + polygons.push_back(polygon); + + res = PMP::internal::split_pinched_polygons_in_polygon_soup(points, polygons, K()); + assert(res == 3 && polygons.size() == 4); + assert(polygons[0].size() == 2); // 5 1 + assert(polygons[1].size() == 5); // 3 2 4 5 1 + assert(polygons[2].size() == 3); // 1 2 4 + assert(polygons[3].size() == 2); // 1 3 +} + +int main() +{ + test_simplify_polygons(false); + test_remove_invalid_polygons(false); + test_remove_isolated_points(false); + test_slit_pinched_polygons(false); + + return EXIT_SUCCESS; +} From 6d88f053b5df37012c394ba5c904d1b4126a9e7d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mael=20Rouxel-Labb=C3=A9?= Date: Thu, 26 Jul 2018 16:31:11 +0200 Subject: [PATCH 014/268] Added 'additional' --- .../CGAL/Polygon_mesh_processing/orient_polygon_soup.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/orient_polygon_soup.h b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/orient_polygon_soup.h index 7f1b776a150..cb6ef837f1f 100644 --- a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/orient_polygon_soup.h +++ b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/orient_polygon_soup.h @@ -468,8 +468,8 @@ struct Polygon_soup_orienter * whose value_type is a model of the concept `RandomAccessContainer` * whose value_type is `std::size_t`. * - * @param points points of the soup of polygons. Some points might be pushed back to resolve - * non-manifold or non-orientability issues. + * @param points points of the soup of polygons. Some additional points might be pushed back to resolve + * non-manifoldness or non-orientability issues. * @param polygons each element in the vector describes a polygon using the index of the points in `points`. * If needed the order of the indices of a polygon might be reversed. * @return `true` if the orientation operation succeded. From 29cbd18597e8cacb07ca31829de9d3266def7ff4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mael=20Rouxel-Labb=C3=A9?= Date: Thu, 26 Jul 2018 16:44:49 +0200 Subject: [PATCH 015/268] Added a few words in the doc --- .../doc/Polygon_mesh_processing/PackageDescription.txt | 4 +++- .../Polygon_mesh_processing/Polygon_mesh_processing.txt | 8 ++++++++ 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/Polygon_mesh_processing/doc/Polygon_mesh_processing/PackageDescription.txt b/Polygon_mesh_processing/doc/Polygon_mesh_processing/PackageDescription.txt index 3baa705dad3..814d2e447eb 100644 --- a/Polygon_mesh_processing/doc/Polygon_mesh_processing/PackageDescription.txt +++ b/Polygon_mesh_processing/doc/Polygon_mesh_processing/PackageDescription.txt @@ -36,7 +36,7 @@ /// \ingroup PkgPolygonMeshProcessing /// \defgroup PMP_repairing_grp Combinatorial Repairing -/// Functions to orient polygon soups and to stitch geometrically identical boundaries. +/// Functions to repair polygon soups and polygon meshes. /// \ingroup PkgPolygonMeshProcessing /// \defgroup PMP_distance_grp Distance Functions @@ -122,6 +122,8 @@ and provides a list of the parameters that are used in this package. - `CGAL::Polygon_mesh_processing::orient_to_bound_a_volume()` ## Combinatorial Repairing Functions ## +- `CGAL::Polygon_mesh_processing::repair_polygon_soup()` +- `CGAL::Polygon_mesh_processing::remove_isolated_points_in_polygon_soup()` - \link PMP_repairing_grp `CGAL::Polygon_mesh_processing::stitch_borders()` \endlink - `CGAL::Polygon_mesh_processing::is_polygon_soup_a_polygon_mesh()` - `CGAL::Polygon_mesh_processing::polygon_soup_to_polygon_mesh()` diff --git a/Polygon_mesh_processing/doc/Polygon_mesh_processing/Polygon_mesh_processing.txt b/Polygon_mesh_processing/doc/Polygon_mesh_processing/Polygon_mesh_processing.txt index e6f3c49f3b9..cbb1876a74c 100644 --- a/Polygon_mesh_processing/doc/Polygon_mesh_processing/Polygon_mesh_processing.txt +++ b/Polygon_mesh_processing/doc/Polygon_mesh_processing/Polygon_mesh_processing.txt @@ -469,6 +469,12 @@ the connected components of a closed polygon mesh so that it bounds a volume **************************************** \section PMPRepairing Combinatorial Repairing ******************* +\subsection Polygon Soup Repairing +To ensure that a polygon soup can be oriented (see Section \ref PolygonSoups) and transformed +into a workable polygon mesh, it might be necessary to preprocess the data to remove combinatorial +and geometrical errors. This package offers the functions `CGAL::Polygon_mesh_processing::repair_polygon_soup()`, +which bundles a handful of repairing techniques to obtain an as-clean-as-possible soup. + \subsection Stitching It happens that a polygon mesh has several edges and vertices that are duplicated. @@ -524,6 +530,8 @@ polygon soup, one should ensure that the polygons are consistently oriented. To do so, this package provides the function `CGAL::Polygon_mesh_processing::orient_polygon_soup()`, described in \cgalCite{gueziec2001cutting}. +This package offers repairing methods to clean ill-formed polygon soups, +see Section \ref PMPRepairing. To deal with polygon soups that cannot be converted to a combinatorial manifold surface, some points are duplicated. From 4ce664a5afc58201beff66829d3fb5ad9ed15f51 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mael=20Rouxel-Labb=C3=A9?= Date: Thu, 26 Jul 2018 16:52:06 +0200 Subject: [PATCH 016/268] Minor doc change --- .../doc/Polygon_mesh_processing/Polygon_mesh_processing.txt | 2 +- .../CGAL/Polygon_mesh_processing/repair_polygon_soup.h | 5 +++-- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/Polygon_mesh_processing/doc/Polygon_mesh_processing/Polygon_mesh_processing.txt b/Polygon_mesh_processing/doc/Polygon_mesh_processing/Polygon_mesh_processing.txt index cbb1876a74c..83de47cab0e 100644 --- a/Polygon_mesh_processing/doc/Polygon_mesh_processing/Polygon_mesh_processing.txt +++ b/Polygon_mesh_processing/doc/Polygon_mesh_processing/Polygon_mesh_processing.txt @@ -469,7 +469,7 @@ the connected components of a closed polygon mesh so that it bounds a volume **************************************** \section PMPRepairing Combinatorial Repairing ******************* -\subsection Polygon Soup Repairing +\subsection PSRepairing Polygon Soup Repairing To ensure that a polygon soup can be oriented (see Section \ref PolygonSoups) and transformed into a workable polygon mesh, it might be necessary to preprocess the data to remove combinatorial and geometrical errors. This package offers the functions `CGAL::Polygon_mesh_processing::repair_polygon_soup()`, diff --git a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/repair_polygon_soup.h b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/repair_polygon_soup.h index c389c16dcaf..26fda994e82 100644 --- a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/repair_polygon_soup.h +++ b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/repair_polygon_soup.h @@ -311,7 +311,7 @@ std::size_t remove_degenerate_polygons_in_polygon_soup(PointRange& points, /// \param polygons a vector of polygons. Each element in the vector describes a polygon /// using the indices of the points in `points`. /// -/// \returns the number of removed isolated points. +/// \returns the number of removed isolated points /// template std::size_t remove_isolated_points_in_polygon_soup(PointRange& points, @@ -380,7 +380,8 @@ std::size_t remove_isolated_points_in_polygon_soup(PointRange& points, /// - splitting of "pinched" polygons, that is polygons where a position appears more than once, /// in multiple non-pinched polygons. /// - removal of invalid polygons, that is polygons with fewer than 2 points; -/// - removal of isolated points, that is points that do not appear in any polygon of the soup. +/// - removal of isolated points, that is points that do not appear in any polygon of the soup, +/// using `CGAL::Polygon_mesh_processing::remove_isolated_points_in_polygon_soup()`. /// /// \tparam PointRange a model of the concept `SequenceContainer` /// \tparam PolygonRange a model of the concept `SequenceContainer` From e6a04b1fa269f5984876d05189377e5349650dee Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mael=20Rouxel-Labb=C3=A9?= Date: Thu, 26 Jul 2018 18:26:11 +0200 Subject: [PATCH 017/268] Misc minor changes --- Documentation/doc/Documentation/General.txt | 5 +++ .../orient_polygon_soup.h | 2 +- .../repair_polygon_soup.h | 38 +++++++++---------- .../test_repair_polygon_soup.cpp | 2 +- 4 files changed, 26 insertions(+), 21 deletions(-) diff --git a/Documentation/doc/Documentation/General.txt b/Documentation/doc/Documentation/General.txt index cf46e5e08a8..72bdabf7cf3 100644 --- a/Documentation/doc/Documentation/General.txt +++ b/Documentation/doc/Documentation/General.txt @@ -73,6 +73,11 @@ class RandomAccessIterator {}; /// See https://en.cppreference.com/w/cpp/named_req/BidirectionalIterator class BidirectionalIterator {}; +/// \cgalConcept +/// Concept from the \cpp standard. +/// See https://en.cppreference.com/w/cpp/named_req/Swappable +class Swappable {}; + /// \cgalConcept /// Concept from the \cpp standard. /// See https://en.cppreference.com/w/cpp/named_req/Container diff --git a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/orient_polygon_soup.h b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/orient_polygon_soup.h index cb6ef837f1f..663ddaa0776 100644 --- a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/orient_polygon_soup.h +++ b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/orient_polygon_soup.h @@ -463,7 +463,7 @@ struct Polygon_soup_orienter * The algorithm is described in \cgalCite{gueziec2001cutting}. * * @tparam PointRange a model of the concepts `RandomAccessContainer` - * and `BackInsertionSequence` whose value type is the point type + * and `BackInsertionSequence` whose value type is the point type. * @tparam PolygonRange a model of the concept `RandomAccessContainer` * whose value_type is a model of the concept `RandomAccessContainer` * whose value_type is `std::size_t`. diff --git a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/repair_polygon_soup.h b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/repair_polygon_soup.h index 26fda994e82..23b60ff5db1 100644 --- a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/repair_polygon_soup.h +++ b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/repair_polygon_soup.h @@ -84,7 +84,7 @@ bool simplify_polygon(PointRange& points, traits.equal_3_object()(points[polygon[i]], points[polygon[next_i]])) // geometric equality { to_remove.push_back(next_i); -#ifdef CGAL_PMP_REPAIR_POLYGON_SOUP_DEBUG +#ifdef CGAL_PMP_REPAIR_POLYGON_SOUP_VERBOSE std::cout << "removing point: polygon[" << next_i << "] = " << polygon[next_i] << std::endl; #endif next_i = (next_i == last) ? 0 : next_i+1; @@ -115,7 +115,7 @@ bool simplify_polygon(PointRange& points, // // For each polygon of the soup, removes consecutive identical (in a geometric sense) points. // -// \tparam PointRange a model of the concept `RandomAccessContainer` +// \tparam PointRange a model of the concept `RandomAccessContainer` whose value type is the point type. // \tparam PolygonRange a model of the concept `SequenceContainer` // whose value_type is itself a model of the concept `SequenceContainer` // whose value_type is `std::size_t`. @@ -158,13 +158,13 @@ std::size_t simplify_polygons_in_polygon_soup(PointRange& points, // \ingroup PMP_repairing_grp // -// Splits "pinched" poygons, that is polygons for which a point appears more than once, +// Splits "pinched" polygons, that is polygons for which a point appears more than once, // into multiple non-pinched polygons. // -// \tparam PointRange a model of the concept `RandomAccessContainer` +// \tparam PointRange a model of the concept `RandomAccessContainer` whose value type is the point type. // \tparam PolygonRange a model of the concept `SequenceContainer` // whose value_type is itself a model of the concept `SequenceContainer` -// whose value_type is `std::size_t`. +// and `Swappable` whose value_type is `std::size_t`. // \tparam NamedParameters a sequence of \ref pmp_namedparameters "Named Parameters" // // \param points points of the soup of polygons. @@ -199,9 +199,9 @@ std::size_t split_pinched_polygons_in_polygon_soup(PointRange& points, Polygon_3& polygon = polygons[polygon_index]; const std::size_t ini_polygon_size = polygon.size(); -#ifdef CGAL_PMP_REPAIR_POLYGON_SOUP_DEBUG +#ifdef CGAL_PMP_REPAIR_POLYGON_SOUP_VERBOSE std::cout << "Input polygon: "; - print_polygon(std::cout, polygon); + internal::print_polygon(std::cout, polygon); #endif if(ini_polygon_size <= 3) @@ -216,13 +216,13 @@ std::size_t split_pinched_polygons_in_polygon_soup(PointRange& points, { const Point_3& p = points[polygon[i]]; - std::pair is_insert_succesful = + std::pair is_insert_successful = unique_points.insert(std::make_pair(p, i)); - if(!is_insert_succesful.second) + if(!is_insert_successful.second) { // We have already met that point, split the polygon into two smaller polygons - std::size_t prev_id = is_insert_succesful.first->second; + std::size_t prev_id = is_insert_successful.first->second; CGAL_assertion(prev_id < i-1); @@ -232,13 +232,13 @@ std::size_t split_pinched_polygons_in_polygon_soup(PointRange& points, split_polygon_2.insert(split_polygon_2.end(), polygon.begin(), polygon.begin() + prev_id); split_polygon_2.insert(split_polygon_2.end(), polygon.begin() + i, polygon.end()); -#ifdef CGAL_PMP_REPAIR_POLYGON_SOUP_DEBUG +#ifdef CGAL_PMP_REPAIR_POLYGON_SOUP_VERBOSE std::cout << "New polygons:" << std::endl; std::cout << "P1:"; - print_polygon(std::cout, split_polygon_1); + internal::print_polygon(std::cout, split_polygon_1); std::cout << "P2:"; - print_polygon(std::cout, split_polygon_2); + internal::print_polygon(std::cout, split_polygon_2); #endif std::swap(polygon, split_polygon_1); @@ -257,7 +257,7 @@ std::size_t split_pinched_polygons_in_polygon_soup(PointRange& points, // // Removes polygons with fewer than 2 points from the soup. // -// \tparam PointRange a model of the concept `Container` +// \tparam PointRange a model of the concept `Container` whose value type is the point type. // \tparam PolygonRange a model of the concept `SequenceContainer` // whose value_type is itself a model of the concept `Container` // whose value_type is `std::size_t`. @@ -302,7 +302,7 @@ std::size_t remove_degenerate_polygons_in_polygon_soup(PointRange& points, /// Removes the isolated points from a polygon soup. /// A point is considered isolated if it does not appear in any polygon of the soup. /// -/// \tparam PointRange a model of the concept `SequenceContainer` +/// \tparam PointRange a model of the concept `SequenceContainer` whose value type is the point type. /// \tparam PolygonRange a model of the concept `RandomAccessContainer` /// whose value_type is itself a model of the concept `RandomAccessContainer` /// whose value_type is `std::size_t`. @@ -344,7 +344,7 @@ std::size_t remove_isolated_points_in_polygon_soup(PointRange& points, { if(!visited[i]) { -#ifdef CGAL_PMP_REPAIR_POLYGON_SOUP_DEBUG +#ifdef CGAL_PMP_REPAIR_POLYGON_SOUP_VERBOSE std::cout << "points[" << i << "] = " << points[i] << " is isolated" << std::endl; #endif std::swap(points[swap_position], points[i]); @@ -383,10 +383,10 @@ std::size_t remove_isolated_points_in_polygon_soup(PointRange& points, /// - removal of isolated points, that is points that do not appear in any polygon of the soup, /// using `CGAL::Polygon_mesh_processing::remove_isolated_points_in_polygon_soup()`. /// -/// \tparam PointRange a model of the concept `SequenceContainer` -/// \tparam PolygonRange a model of the concept `SequenceContainer` +/// \tparam PointRange a model of the concept `SequenceContainer` whose value type is the point type +/// \tparam PolygonRange a model of the concept `SequenceContainer`. /// whose value_type is itself a model of the concept `SequenceContainer` -/// whose value_type is `std::size_t`. +/// and `Swappable` whose value_type is `std::size_t`. /// \tparam NamedParameters a sequence of \ref pmp_namedparameters "Named Parameters" /// /// \param points points of the soup of polygons. diff --git a/Polygon_mesh_processing/test/Polygon_mesh_processing/test_repair_polygon_soup.cpp b/Polygon_mesh_processing/test/Polygon_mesh_processing/test_repair_polygon_soup.cpp index c91b911174a..88b603b0c36 100644 --- a/Polygon_mesh_processing/test/Polygon_mesh_processing/test_repair_polygon_soup.cpp +++ b/Polygon_mesh_processing/test/Polygon_mesh_processing/test_repair_polygon_soup.cpp @@ -205,7 +205,7 @@ void test_remove_isolated_points(const bool verbose = false) void test_slit_pinched_polygons(const bool /*verbose*/ = false) { - std::cout << "test slit_pinched_polygons... " << std::endl; + std::cout << "test split_pinched_polygons... " << std::endl; std::vector points; std::vector polygons; From 007a466b8e94e04dac2e7058692ee790ec852b45 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mael=20Rouxel-Labb=C3=A9?= Date: Thu, 26 Jul 2018 18:26:49 +0200 Subject: [PATCH 018/268] Added a function to merge duplicate vertices --- .../PackageDescription.txt | 3 +- .../repair_polygon_soup_example.cpp | 5 +- .../repair_polygon_soup.h | 127 +++++++++++++++++- .../test_repair_polygon_soup.cpp | 49 +++++++ 4 files changed, 174 insertions(+), 10 deletions(-) diff --git a/Polygon_mesh_processing/doc/Polygon_mesh_processing/PackageDescription.txt b/Polygon_mesh_processing/doc/Polygon_mesh_processing/PackageDescription.txt index 814d2e447eb..62d03d8ea9c 100644 --- a/Polygon_mesh_processing/doc/Polygon_mesh_processing/PackageDescription.txt +++ b/Polygon_mesh_processing/doc/Polygon_mesh_processing/PackageDescription.txt @@ -122,8 +122,9 @@ and provides a list of the parameters that are used in this package. - `CGAL::Polygon_mesh_processing::orient_to_bound_a_volume()` ## Combinatorial Repairing Functions ## -- `CGAL::Polygon_mesh_processing::repair_polygon_soup()` +- `CGAL::Polygon_mesh_processing::merge_duplicate_points_in_polygon_soup()` - `CGAL::Polygon_mesh_processing::remove_isolated_points_in_polygon_soup()` +- `CGAL::Polygon_mesh_processing::repair_polygon_soup()` - \link PMP_repairing_grp `CGAL::Polygon_mesh_processing::stitch_borders()` \endlink - `CGAL::Polygon_mesh_processing::is_polygon_soup_a_polygon_mesh()` - `CGAL::Polygon_mesh_processing::polygon_soup_to_polygon_mesh()` diff --git a/Polygon_mesh_processing/examples/Polygon_mesh_processing/repair_polygon_soup_example.cpp b/Polygon_mesh_processing/examples/Polygon_mesh_processing/repair_polygon_soup_example.cpp index 93776cfc7d5..feff2acae43 100644 --- a/Polygon_mesh_processing/examples/Polygon_mesh_processing/repair_polygon_soup_example.cpp +++ b/Polygon_mesh_processing/examples/Polygon_mesh_processing/repair_polygon_soup_example.cpp @@ -27,7 +27,8 @@ int main(int, char**) points.push_back(Point_3(0,1,0)); points.push_back(Point_3(-1,0,0)); points.push_back(Point_3(0,-1,0)); - points.push_back(Point_3(0,-2,0)); // unused vertex + points.push_back(Point_3(0,1,0)); // duplicate point + points.push_back(Point_3(0,-2,0)); // unused point Polygon p; p.push_back(0); p.push_back(1); p.push_back(2); @@ -43,7 +44,7 @@ int main(int, char**) polygons.push_back(p); p.clear(); - p.push_back(0); p.push_back(3); p.push_back(2); + p.push_back(0); p.push_back(3); p.push_back(5); polygons.push_back(p); // degenerate face diff --git a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/repair_polygon_soup.h b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/repair_polygon_soup.h index 23b60ff5db1..881836f76df 100644 --- a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/repair_polygon_soup.h +++ b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/repair_polygon_soup.h @@ -51,6 +51,18 @@ struct Polygon_types typedef typename std::vector::size_type P_ID; }; +template +struct GetPolygonGeomTraits +{ + typedef typename boost::lookup_named_param_def < + internal_np::geom_traits_t, + NamedParameters, + typename CGAL::Kernel_traits< + typename internal::Polygon_types< + PointRange, PolygonRange>::Point_3 >::type + > ::type type; +}; + template void print_polygon(Stream& out, const Polygon& polygon) { @@ -372,16 +384,121 @@ std::size_t remove_isolated_points_in_polygon_soup(PointRange& points, return removed_points_n; } +/// \ingroup PMP_repairing_grp +/// +/// Merges the duplicate points in a polygon soup. +/// The index of a point that is merged with another point will change in all the polygons +/// the point appears in. +/// +/// \tparam PointRange a model of the concept `SequenceContainer` and `Swappable` +/// whose value type is the point type. +/// \tparam PolygonRange a model of the concept `RandomAccessContainer` +/// whose value_type is itself a model of the concept `RandomAccessContainer` +/// whose value_type is `std::size_t`. +/// \tparam NamedParameters a sequence of \ref pmp_namedparameters "Named Parameters" +/// +/// \param points points of the soup of polygons. +/// \param polygons a vector of polygons. Each element in the vector describes a polygon +/// using the indices of the points in `points`. +/// \param np optional \ref pmp_namedparameters "Named Parameters" described below +/// +/// \cgalNamedParamsBegin +/// \cgalParamBegin{geom_traits} a geometric traits class instance. +/// The traits class must provide the nested functor `Less_xyz_3` +/// to compare lexicographically two points a function `Less_xyz_3 less_xyz_3_object()`. +/// \cgalParamEnd +/// \cgalNamedParamsEnd +/// +/// \returns the number of removed points +/// +template +std::size_t merge_duplicate_points_in_polygon_soup(PointRange& points, + PolygonRange& polygons, + const NamedParameters& np) +{ + typedef typename internal::Polygon_types::P_ID P_ID; + typedef typename internal::Polygon_types::Point_3 Point_3; + typedef typename internal::Polygon_types::Polygon_3 Polygon_3; + + using boost::get_param; + using boost::choose_param; + + typedef typename internal::GetPolygonGeomTraits::type Traits; + Traits traits = choose_param(get_param(np, internal_np::geom_traits), Traits()); + + typedef typename Traits::Less_xyz_3 Less_xyz_3; + + const std::size_t ini_points_n = points.size(); + std::vector point_index(ini_points_n, 0); + + typedef std::map Unique_point_container; + Unique_point_container point_to_id(traits.less_xyz_3_object()); + + std::vector unique_points; + unique_points.reserve(ini_points_n); + + for(std::size_t i=0; i is_insert_successful = + point_to_id.insert(std::make_pair(points[i], unique_points.size())); + +#ifdef CGAL_PMP_REPAIR_POLYGON_SOUP_VERBOSE + if(!is_insert_successful.second) + std::cout << "points[" <second; + + if(id == unique_points.size()) + unique_points.push_back(points[i]); + point_index[i] = id; + } + + if(unique_points.size() != ini_points_n) + { + for(P_ID polygon_index=0, end=polygons.size(); polygon_index!=end; ++polygon_index) + { + Polygon_3& polygon = polygons[polygon_index]; +#ifdef CGAL_PMP_REPAIR_POLYGON_SOUP_VERBOSE + std::cout << "Input polygon: "; + internal::print_polygon(std::cout, polygon); +#endif + + for(std::size_t i=0, polygon_size = polygon.size(); i +std::size_t merge_duplicate_points_in_polygon_soup(PointRange& points, + PolygonRange& polygons) +{ + return merge_duplicate_points_in_polygon_soup(points, polygons, CGAL::parameters::all_default()); +} + /// \ingroup PMP_repairing_grp /// /// Cleans a given polygon soup by removing invalid elements. More precisely, this function /// carries out the following tasks, in the same order as they are listed: +/// - merging of duplicating points, using the function +/// `CGAL::Polygon_mesh_processing::merge_duplicate_points_in_polygon_soup()`. /// - simplification of the polygons to remove identical consecutive points; /// - splitting of "pinched" polygons, that is polygons where a position appears more than once, /// in multiple non-pinched polygons. /// - removal of invalid polygons, that is polygons with fewer than 2 points; /// - removal of isolated points, that is points that do not appear in any polygon of the soup, -/// using `CGAL::Polygon_mesh_processing::remove_isolated_points_in_polygon_soup()`. +/// using the function `CGAL::Polygon_mesh_processing::remove_isolated_points_in_polygon_soup()`. /// /// \tparam PointRange a model of the concept `SequenceContainer` whose value type is the point type /// \tparam PolygonRange a model of the concept `SequenceContainer`. @@ -411,14 +528,10 @@ void repair_polygon_soup(PointRange& points, using boost::get_param; using boost::choose_param; - typedef typename boost::lookup_named_param_def < - internal_np::geom_traits_t, - NamedParameters, - typename CGAL::Kernel_traits::Point_3 >::type - > ::type Traits; - + typedef typename internal::GetPolygonGeomTraits::type Traits; Traits traits = choose_param(get_param(np, internal_np::geom_traits), Traits()); + merge_duplicate_points_in_polygon_soup(points, polygons, np); internal::simplify_polygons_in_polygon_soup(points, polygons, traits); internal::split_pinched_polygons_in_polygon_soup(points, polygons, traits); internal::remove_invalid_polygons_in_polygon_soup(points, polygons); diff --git a/Polygon_mesh_processing/test/Polygon_mesh_processing/test_repair_polygon_soup.cpp b/Polygon_mesh_processing/test/Polygon_mesh_processing/test_repair_polygon_soup.cpp index 88b603b0c36..941bef2e085 100644 --- a/Polygon_mesh_processing/test/Polygon_mesh_processing/test_repair_polygon_soup.cpp +++ b/Polygon_mesh_processing/test/Polygon_mesh_processing/test_repair_polygon_soup.cpp @@ -17,6 +17,54 @@ typedef K::Point_3 Point_3; typedef CGAL::Surface_mesh Mesh; typedef std::vector Polygon; +void test_merge_duplicate_points(const bool /*verbose*/ = false) +{ + std::cout << "test merge duplicate points... " << std::endl; + + std::vector points; + std::vector polygons; + + // empty + std::size_t res = PMP::merge_duplicate_points_in_polygon_soup(points, polygons); + assert(res == 0 && points.empty() && polygons.empty()); + + points.push_back(Point_3(0,0,0)); // #0 + points.push_back(Point_3(1,2,0)); // #1 + points.push_back(Point_3(1,1,0)); // #2 + points.push_back(Point_3(1,1,0)); // #3 // identical to #2 + points.push_back(Point_3(0,1,0)); // #4 + points.push_back(Point_3(1,1,0)); // #5 // identical to #2 + points.push_back(Point_3(0,0,0)); // #6 // idental to #0 + + // ------ + Polygon polygon; + polygon.push_back(0); polygon.push_back(1); polygon.push_back(2); + polygons.push_back(polygon); + + polygon.clear(); + polygon.push_back(6); polygon.push_back(3); polygon.push_back(1); polygon.push_back(0); + polygons.push_back(polygon); + + polygon.clear(); + polygon.push_back(5); + polygons.push_back(polygon); + + res = PMP::merge_duplicate_points_in_polygon_soup(points, polygons, params::geom_traits(K())); + assert(res == 3 && points.size() == 4 && polygons.size() == 3); + + assert(polygons[0][0] == 0 && polygons[0][1] == 1 && polygons[0][2] == 2); + assert(polygons[1][0] == 0 && polygons[1][1] == 2 && polygons[1][2] == 1 && polygons[1][3] == 0); + + for(std::size_t i=0, psn=polygons.size(); i= 0 && polygon[j] < points.size()); + } + } +} + void test_simplify_polygons(const bool /*verbose*/ = false) { std::cout << "test simplify_polygons... " << std::endl; @@ -280,6 +328,7 @@ void test_slit_pinched_polygons(const bool /*verbose*/ = false) int main() { + test_merge_duplicate_points(false); test_simplify_polygons(false); test_remove_invalid_polygons(false); test_remove_isolated_points(false); From 4e31832136e835aa226d3884f1456814d3425468 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mael=20Rouxel-Labb=C3=A9?= Date: Mon, 30 Jul 2018 13:08:16 +0200 Subject: [PATCH 019/268] Added a function to detect and merge duplicate faces --- .../CGAL/boost/graph/parameters_interface.h | 2 + BGL/test/BGL/test_cgal_bgl_named_params.cpp | 6 + .../NamedParameters.txt | 16 + .../PackageDescription.txt | 1 + .../Polygon_mesh_processing.txt | 10 +- .../repair_polygon_soup_example.cpp | 7 +- .../repair_polygon_soup.h | 491 +++++++++++++++++- .../test_repair_polygon_soup.cpp | 214 +++++++- 8 files changed, 716 insertions(+), 31 deletions(-) diff --git a/BGL/include/CGAL/boost/graph/parameters_interface.h b/BGL/include/CGAL/boost/graph/parameters_interface.h index 1ec0f1504de..97126bdf358 100644 --- a/BGL/include/CGAL/boost/graph/parameters_interface.h +++ b/BGL/include/CGAL/boost/graph/parameters_interface.h @@ -78,6 +78,8 @@ CGAL_add_named_parameter(projection_functor_t, projection_functor, projection_fu CGAL_add_named_parameter(throw_on_self_intersection_t, throw_on_self_intersection, throw_on_self_intersection) CGAL_add_named_parameter(clip_volume_t, clip_volume, clip_volume) CGAL_add_named_parameter(use_compact_clipper_t, use_compact_clipper, use_compact_clipper) +CGAL_add_named_parameter(do_erase_all_duplicates_t, do_erase_all_duplicates, do_erase_all_duplicates) +CGAL_add_named_parameter(do_require_same_orientation_t, do_require_same_orientation, do_require_same_orientation) // List of named parameters that we use in the package 'Surface Mesh Simplification' CGAL_add_named_parameter(get_cost_policy_t, get_cost_policy, get_cost) diff --git a/BGL/test/BGL/test_cgal_bgl_named_params.cpp b/BGL/test/BGL/test_cgal_bgl_named_params.cpp index 019ad98dedf..1278ff54531 100644 --- a/BGL/test/BGL/test_cgal_bgl_named_params.cpp +++ b/BGL/test/BGL/test_cgal_bgl_named_params.cpp @@ -85,6 +85,8 @@ void test(const NamedParameters& np) assert(get_param(np, CGAL::internal_np::throw_on_self_intersection).v == 43); assert(get_param(np, CGAL::internal_np::clip_volume).v == 44); assert(get_param(np, CGAL::internal_np::use_compact_clipper).v == 45); + assert(get_param(np, CGAL::internal_np::do_erase_all_duplicates).v == 47); + assert(get_param(np, CGAL::internal_np::do_require_same_orientation).v == 48); // Named parameters that we use in the package 'Surface Mesh Simplification' assert(get_param(np, CGAL::internal_np::get_cost_policy).v == 34); @@ -161,6 +163,8 @@ void test(const NamedParameters& np) check_same_type<43>(get_param(np, CGAL::internal_np::throw_on_self_intersection)); check_same_type<44>(get_param(np, CGAL::internal_np::clip_volume)); check_same_type<45>(get_param(np, CGAL::internal_np::use_compact_clipper)); + check_same_type<47>(get_param(np, CGAL::internal_np::do_erase_all_duplicates)); + check_same_type<48>(get_param(np, CGAL::internal_np::do_require_same_orientation)); // Named parameters that we use in the package 'Surface Mesh Simplification' check_same_type<34>(get_param(np, CGAL::internal_np::get_cost_policy)); @@ -238,6 +242,8 @@ int main() .clip_volume(A<44>(44)) .use_compact_clipper(A<45>(45)) .apply_per_connected_component(A<46>(46)) + .do_erase_all_duplicates(A<47>(47)) + .do_require_same_orientation(A<48>(48)) ); return EXIT_SUCCESS; diff --git a/Polygon_mesh_processing/doc/Polygon_mesh_processing/NamedParameters.txt b/Polygon_mesh_processing/doc/Polygon_mesh_processing/NamedParameters.txt index 839bd7b52ff..da0f06912d3 100644 --- a/Polygon_mesh_processing/doc/Polygon_mesh_processing/NamedParameters.txt +++ b/Polygon_mesh_processing/doc/Polygon_mesh_processing/NamedParameters.txt @@ -364,6 +364,22 @@ should be considered as part of the clipping volume or not. \b Default value is `true` \cgalNPEnd +\cgalNPBegin{do_erase_all_duplicates} \anchor PMP_do_erase_all_duplicates +Parameter used in the function `merge_duplicate_polygons_in_polygon_soup()` to indicate, +when multiple faces are duplicates, whether all the duplicate faces should be removed +or if one (arbitrarily chosen) face should be kept. +\n +Type: `bool` \n +Default: `false` +\cgalNPEnd + +\cgalNPBegin{do_require_same_orientation} \anchor PMP_do_require_same_orientation +Parameter used in the function `merge_duplicate_polygons_in_polygon_soup()` to indicate +if orientation should matter when determining whether two faces are duplicates. +\n +Type: `bool` \n +Default: `false` +\cgalNPEnd \cgalNPTableEnd diff --git a/Polygon_mesh_processing/doc/Polygon_mesh_processing/PackageDescription.txt b/Polygon_mesh_processing/doc/Polygon_mesh_processing/PackageDescription.txt index 62d03d8ea9c..d3c0ad13f1f 100644 --- a/Polygon_mesh_processing/doc/Polygon_mesh_processing/PackageDescription.txt +++ b/Polygon_mesh_processing/doc/Polygon_mesh_processing/PackageDescription.txt @@ -123,6 +123,7 @@ and provides a list of the parameters that are used in this package. ## Combinatorial Repairing Functions ## - `CGAL::Polygon_mesh_processing::merge_duplicate_points_in_polygon_soup()` +- `CGAL::Polygon_mesh_processing::merge_duplicate_polygons_in_polygon_soup()` - `CGAL::Polygon_mesh_processing::remove_isolated_points_in_polygon_soup()` - `CGAL::Polygon_mesh_processing::repair_polygon_soup()` - \link PMP_repairing_grp `CGAL::Polygon_mesh_processing::stitch_borders()` \endlink diff --git a/Polygon_mesh_processing/doc/Polygon_mesh_processing/Polygon_mesh_processing.txt b/Polygon_mesh_processing/doc/Polygon_mesh_processing/Polygon_mesh_processing.txt index 83de47cab0e..e60969e92eb 100644 --- a/Polygon_mesh_processing/doc/Polygon_mesh_processing/Polygon_mesh_processing.txt +++ b/Polygon_mesh_processing/doc/Polygon_mesh_processing/Polygon_mesh_processing.txt @@ -472,8 +472,14 @@ the connected components of a closed polygon mesh so that it bounds a volume \subsection PSRepairing Polygon Soup Repairing To ensure that a polygon soup can be oriented (see Section \ref PolygonSoups) and transformed into a workable polygon mesh, it might be necessary to preprocess the data to remove combinatorial -and geometrical errors. This package offers the functions `CGAL::Polygon_mesh_processing::repair_polygon_soup()`, -which bundles a handful of repairing techniques to obtain an as-clean-as-possible soup. +and geometrical errors. This package offers the following functions: +- `CGAL::Polygon_mesh_processing::merge_duplicate_points_in_polygon_soup()`, +- `CGAL::Polygon_mesh_processing::merge_duplicate_polygons_in_polygon_soup()`, +- `CGAL::Polygon_mesh_processing::remove_isolated_points_in_polygon_soup()`, + +as well as the function `CGAL::Polygon_mesh_processing::repair_polygon_soup()`, +which bundles the previous functions and an additional handful of repairing techniques +to obtain an as-clean-as-possible pol soup. \subsection Stitching diff --git a/Polygon_mesh_processing/examples/Polygon_mesh_processing/repair_polygon_soup_example.cpp b/Polygon_mesh_processing/examples/Polygon_mesh_processing/repair_polygon_soup_example.cpp index feff2acae43..e44be56106e 100644 --- a/Polygon_mesh_processing/examples/Polygon_mesh_processing/repair_polygon_soup_example.cpp +++ b/Polygon_mesh_processing/examples/Polygon_mesh_processing/repair_polygon_soup_example.cpp @@ -43,6 +43,11 @@ int main(int, char**) p.push_back(0); p.push_back(1); p.push_back(4); polygons.push_back(p); + // duplicate face with different orientation + p.clear(); + p.push_back(0); p.push_back(4); p.push_back(1); + polygons.push_back(p); + p.clear(); p.push_back(0); p.push_back(3); p.push_back(5); polygons.push_back(p); @@ -56,7 +61,7 @@ int main(int, char**) p.push_back(0); p.push_back(3); p.push_back(4); polygons.push_back(p); - // pinched face yielding only degenerate faces + // pinched and degenerate face p.clear(); p.push_back(0); p.push_back(1); p.push_back(2); p.push_back(3); p.push_back(4); p.push_back(3); p.push_back(2); p.push_back(1); diff --git a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/repair_polygon_soup.h b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/repair_polygon_soup.h index 881836f76df..8ed416ddb0a 100644 --- a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/repair_polygon_soup.h +++ b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/repair_polygon_soup.h @@ -27,10 +27,17 @@ #include #include +#include #include +#include + +#include +#include +#include #include #include +#include #include #include #include @@ -44,10 +51,11 @@ namespace internal { template struct Polygon_types { - typedef typename PointRange::value_type Point_3; - typedef typename PolygonRange::value_type Polygon_3; + typedef typename boost::range_value::type Point_3; + typedef typename boost::range_value::type Polygon_3; - typedef typename std::iterator_traits::value_type V_ID; + typedef typename boost::range_iterator::type V_ID_iterator; + typedef typename std::iterator_traits::value_type V_ID; typedef typename std::vector::size_type P_ID; }; @@ -73,6 +81,37 @@ void print_polygon(Stream& out, const Polygon& polygon) out << std::endl; } +template +struct Vertex_ID_comparer +{ + Vertex_ID_comparer(const PointRange& points, const Traits& traits = Traits()) + : points(points), traits(traits) + { } + + template + bool operator()(const VID id_1, const VID id_2) const { + return traits.less_xyz_3_object()(points[id_1], points[id_2]); + } + +private: + const PointRange& points; + const Traits& traits; +}; + +template +bool polygon_has_unique_vertices(const PointRange& points, + const Polygon& polygon, + const Traits& traits = Traits()) +{ + typedef Vertex_ID_comparer Comparer; + + Comparer comp(points, traits); + std::set unique_vertices(comp); + unique_vertices.insert(polygon.begin(), polygon.end()); + + return (unique_vertices.size() == polygon.size()); +} + template bool simplify_polygon(PointRange& points, Polygon& polygon, @@ -97,7 +136,7 @@ bool simplify_polygon(PointRange& points, { to_remove.push_back(next_i); #ifdef CGAL_PMP_REPAIR_POLYGON_SOUP_VERBOSE - std::cout << "removing point: polygon[" << next_i << "] = " << polygon[next_i] << std::endl; + std::cout << "Removing point: polygon[" << next_i << "] = " << polygon[next_i] << std::endl; #endif next_i = (next_i == last) ? 0 : next_i+1; @@ -175,7 +214,7 @@ std::size_t simplify_polygons_in_polygon_soup(PointRange& points, // // \tparam PointRange a model of the concept `RandomAccessContainer` whose value type is the point type. // \tparam PolygonRange a model of the concept `SequenceContainer` -// whose value_type is itself a model of the concept `SequenceContainer` +// whose value_type is itself a model of the concepts `SequenceContainer` // and `Swappable` whose value_type is `std::size_t`. // \tparam NamedParameters a sequence of \ref pmp_namedparameters "Named Parameters" // @@ -219,7 +258,8 @@ std::size_t split_pinched_polygons_in_polygon_soup(PointRange& points, if(ini_polygon_size <= 3) continue; - CGAL_assertion(!simplify_polygon(points, polygon, traits)); // 'polygon' must not have duplicates + // 'polygon' must not have consecutive duplicates + CGAL_assertion(!simplify_polygon(points, polygon, traits)); typedef std::map Unique_point_container; Unique_point_container unique_points(traits.less_xyz_3_object()); @@ -235,12 +275,12 @@ std::size_t split_pinched_polygons_in_polygon_soup(PointRange& points, { // We have already met that point, split the polygon into two smaller polygons std::size_t prev_id = is_insert_successful.first->second; - CGAL_assertion(prev_id < i-1); Polygon_3 split_polygon_1(polygon.begin() + prev_id, polygon.begin() + i); - Polygon_3 split_polygon_2; // might be pinched too, but it'll be checked later + CGAL_postcondition(internal::polygon_has_unique_vertices(points, split_polygon_1, traits)); + Polygon_3 split_polygon_2; // might be pinched too, but it'll be checked later split_polygon_2.insert(split_polygon_2.end(), polygon.begin(), polygon.begin() + prev_id); split_polygon_2.insert(split_polygon_2.end(), polygon.begin() + i, polygon.end()); @@ -387,10 +427,10 @@ std::size_t remove_isolated_points_in_polygon_soup(PointRange& points, /// \ingroup PMP_repairing_grp /// /// Merges the duplicate points in a polygon soup. -/// The index of a point that is merged with another point will change in all the polygons -/// the point appears in. +/// Note that the index of a point that is merged with another point will thus change +/// in all the polygons that the point appears in. /// -/// \tparam PointRange a model of the concept `SequenceContainer` and `Swappable` +/// \tparam PointRange a model of the concepts `SequenceContainer` and `Swappable` /// whose value type is the point type. /// \tparam PolygonRange a model of the concept `RandomAccessContainer` /// whose value_type is itself a model of the concept `RandomAccessContainer` @@ -470,7 +510,6 @@ std::size_t merge_duplicate_points_in_polygon_soup(PointRange& points, std::cout << "Output polygon: "; internal::print_polygon(std::cout, polygon); #endif - } std::swap(points, unique_points); @@ -487,37 +526,434 @@ std::size_t merge_duplicate_points_in_polygon_soup(PointRange& points, return merge_duplicate_points_in_polygon_soup(points, polygons, CGAL::parameters::all_default()); } +namespace internal { + +// Find the position of the (arbitrarily chose) first point of the canonical point +// and whether we should order from left to right or the opposite +template +void canonical_polygon_markers(const PointRange& points, + const Polygon& polygon, + std::size_t& first, + bool& reversed, + const Traits& traits = Traits()) +{ + CGAL_precondition(polygon.size() > 0); + CGAL_precondition(polygon_has_unique_vertices(points, polygon, traits)); + + typedef typename boost::range_iterator::type V_ID_iterator; + typedef Vertex_ID_comparer Vertex_comparer; + + // Find the bottom-left-front-most point that will be the first point of the polygon + Vertex_comparer comp(points, traits); + V_ID_iterator min_id = std::min_element(polygon.begin(), polygon.end(), comp); + first = min_id - polygon.begin(); + +#ifdef CGAL_PMP_REPAIR_POLYGON_SOUP_VERBOSE + std::cout << "first: " << first + << " points[" << *min_id << "] = " << points[*min_id] << std::endl; +#endif + + // Decide arbitrarily whether we are reading from left to right or the opposite + const std::size_t last = polygon.size() - 1; + std::size_t pos_prev = (first == 0) ? last : first - 1; + std::size_t pos_next = (first == last) ? 0 : first + 1; + + reversed = traits.less_xyz_3_object()(points[polygon[pos_prev]], points[polygon[pos_next]]); + +#ifdef CGAL_PMP_REPAIR_POLYGON_SOUP_VERBOSE + std::cout << "pos_prev: " << pos_prev + << " points[" << polygon[pos_prev] << "] = " << points[polygon[pos_prev]] << std::endl; + std::cout << "pos_next: " << pos_next + << " points[" << polygon[pos_next] << "] = " << points[polygon[pos_next]] << std::endl; + std::cout << "reversed: " << std::boolalpha << reversed << std::endl; +#endif +} + +template +Polygon construct_canonical_polygon_with_markers(const Polygon& polygon, + const std::size_t first, + const bool reversed) +{ + const std::size_t polygon_size = polygon.size(); + Polygon canonical_polygon; + + if(reversed) + { + std::size_t rfirst = polygon_size - 1 - first; + canonical_polygon.insert(canonical_polygon.end(), polygon.rbegin() + rfirst, polygon.rend()); + canonical_polygon.insert(canonical_polygon.end(), polygon.rbegin(), polygon.rbegin() + rfirst); + } + else + { + canonical_polygon.insert(canonical_polygon.end(), polygon.begin() + first, polygon.end()); + canonical_polygon.insert(canonical_polygon.end(), polygon.begin(), polygon.begin() + first); + } + + CGAL_postcondition(canonical_polygon[0] == polygon[first]); + CGAL_postcondition(canonical_polygon.size() == polygon_size); + return canonical_polygon; +} + +// 'reversed' indicates whether the canonical polygon has the same order as input polygon. +template +Polygon construct_canonical_polygon(const PointRange& points, + const Polygon& polygon, + bool& reversed, + const Traits& traits = Traits()) +{ + if(polygon.size() < 2) + return polygon; + +#ifdef CGAL_PMP_REPAIR_POLYGON_SOUP_VERBOSE + std::cout << "Input polygon:"; + internal::print_polygon(std::cout, polygon); +#endif + + std::size_t first; + canonical_polygon_markers(points, polygon, first, reversed, traits); + Polygon canonical_polygon = construct_canonical_polygon_with_markers(polygon, first, reversed); + +#ifdef CGAL_PMP_REPAIR_POLYGON_SOUP_VERBOSE + std::cout << "Canonical polygon:"; + internal::print_polygon(std::cout, canonical_polygon); +#endif + + return canonical_polygon; +} + +template +Polygon construct_canonical_polygon(const PointRange& points, + const Polygon& polygon, + const Traits& traits = Traits()) +{ + bool useless = false; + return construct_canonical_polygon(points, polygon, useless, traits); +} + +template +struct Polygon_hash +{ + typedef std::size_t result_type; + typedef typename internal::Polygon_types::Polygon_3 Polygon_3; + + Polygon_hash(const PointRange& points, const PolygonRange& canonical_polygons, const Traits& traits) + : points(points), canonical_polygons(canonical_polygons), traits(traits) + { } + + template + result_type operator() (const Polygon_ID& polygon_index) const + { + const Polygon_3& canonical_polygon = canonical_polygons[polygon_index]; + + std::size_t seed = 0; + for(std::size_t i=0, end=canonical_polygon.size(); i +struct Polygon_equality_tester +{ + typedef bool result_type; + typedef typename internal::Polygon_types::Polygon_3 Polygon_3; + + Polygon_equality_tester(const PointRange& points, + const PolygonRange& canonical_polygons, + const Reversed_markers& reversed_markers, + const Traits& traits, + const bool same_orientation = false) + : points(points), + canonical_polygons(canonical_polygons), + reversed_markers(reversed_markers), + traits(traits), + same_orientation(same_orientation) + { } + + template + bool operator()(const Polygon_ID& polygon_index_1, const Polygon_ID& polygon_index_2) const + { + const Polygon_3& canonical_polygon_1 = canonical_polygons[polygon_index_1]; + const Polygon_3& canonical_polygon_2 = canonical_polygons[polygon_index_2]; + + if(same_orientation && + reversed_markers[polygon_index_1] != reversed_markers[polygon_index_2]) + return false; + + return (canonical_polygon_1 == canonical_polygon_2); + } + +private: + const PointRange& points; + const PolygonRange& canonical_polygons; + const Reversed_markers& reversed_markers; + const Traits& traits; + const bool same_orientation; +}; + +// @todo merge this class with 'Vertex_collector' from the other branch +template +struct Duplicate_collector +{ + void collect_duplicates(const ValueType& v1, const ValueType& v2) + { + std::vector& verts = collections[v1]; + if(verts.empty()) + verts.push_back(v1); + verts.push_back(v2); + } + + void dump(OutputIterator out) + { + typedef std::pair > Pair_type; + BOOST_FOREACH(const Pair_type& p, collections) + *out++ = p.second; + } + + CGAL::cpp11::unordered_map > collections; +}; + +template +struct Duplicate_collector +{ + void collect_duplicates(const ValueType&, const ValueType&) { } + void dump(CGAL::Emptyset_iterator) { } +}; + +// \ingroup PMP_repairing_grp +// +// Collects duplicate polygons in a polygon soup, that is polygons that share the same vertices in the same +// order. +// +// \tparam PointRange a model of the concept `RandomAccessContainer` whose value type is the point type. +// \tparam PolygonRange a model of the concept `RandomAccessContainer` +// whose value_type is itself a model of the concepts `RandomAccessContainer` +// and `ReversibleContainer` whose value_type is `std::size_t`. +// \tparam DuplicateOutputIterator a model of `OutputIterator` with value type +// `std::vector >`. +// +// \param points points of the soup of polygons. +// \param polygons a vector of polygons. Each element in the vector describes a polygon +// using the indices of the points in `points`. +// \param out the output iterator in which duplicate polygons are put. Each entry is a vector of +// polygon ids `i0`, `i1`, etc. such that `polygons[i0] = polygons[i1] = ...` +// \param same_orientation whether two polygons should have the same orientation to be duplicates. +// +template +DuplicateOutputIterator collect_duplicate_polygons(const PointRange& points, + const PolygonRange& polygons, + DuplicateOutputIterator out, + const Traits& traits = Traits(), + const bool same_orientation = false) +{ + typedef typename internal::Polygon_types::P_ID P_ID; + + typedef internal::Polygon_hash Hasher; + typedef boost::dynamic_bitset<> Reversed_markers; + typedef internal::Polygon_equality_tester Equality; + typedef CGAL::cpp11::unordered_set Unique_polygons; + + const std::size_t polygons_n = polygons.size(); + + // We want the hash function to return the same value if the polygons are the same, + // regardless of circular permutations and different orientations. + PolygonRange canonical_polygons(polygons_n); + Reversed_markers is_reversed(polygons_n, 0); + for(P_ID polygon_index=0, end=polygons.size(); polygon_index!=end; ++polygon_index) + { + bool reversed; + canonical_polygons[polygon_index] = + internal::construct_canonical_polygon(points, polygons[polygon_index], reversed, traits); + + if(reversed) + is_reversed.set(polygon_index); + } + + Hasher hash(points, canonical_polygons, traits); + Equality equal(points, canonical_polygons, is_reversed, traits, same_orientation); + + Unique_polygons unique_polygons(polygons_n /*bucket size*/, hash, equal); + Duplicate_collector duplicates; + + for(P_ID polygon_index=0, end=polygons.size(); polygon_index!=end; ++polygon_index) + { + std::pair is_insert_successful = + unique_polygons.insert(polygon_index); + + if(!is_insert_successful.second) + { + const P_ID other_polygon_id = *(is_insert_successful.first); +#ifdef CGAL_PMP_REPAIR_POLYGON_SOUP_VERBOSE + std::cout << "polygon: " << polygon_index << " is a duplicate of polygon: " << other_polygon_id << std::endl; +#endif + duplicates.collect_duplicates(other_polygon_id, polygon_index); + } + } + + duplicates.dump(out); + return out; +} + +} // end namespace internal + /// \ingroup PMP_repairing_grp /// -/// Cleans a given polygon soup by removing invalid elements. More precisely, this function -/// carries out the following tasks, in the same order as they are listed: -/// - merging of duplicating points, using the function -/// `CGAL::Polygon_mesh_processing::merge_duplicate_points_in_polygon_soup()`. -/// - simplification of the polygons to remove identical consecutive points; -/// - splitting of "pinched" polygons, that is polygons where a position appears more than once, -/// in multiple non-pinched polygons. -/// - removal of invalid polygons, that is polygons with fewer than 2 points; -/// - removal of isolated points, that is points that do not appear in any polygon of the soup, -/// using the function `CGAL::Polygon_mesh_processing::remove_isolated_points_in_polygon_soup()`. +/// Merges the duplicate polygons in a polygon soup. Two polygons are duplicate if they share the same +/// vertices in the same order. Note that the first vertex of the polygon does not matter, that is +/// the triangle `0,1,2` is a duplicate of the triangle `2,0,1`. /// -/// \tparam PointRange a model of the concept `SequenceContainer` whose value type is the point type -/// \tparam PolygonRange a model of the concept `SequenceContainer`. -/// whose value_type is itself a model of the concept `SequenceContainer` -/// and `Swappable` whose value_type is `std::size_t`. +/// \tparam PointRange a model of the concept `RandomAccessContainer` whose value type is the point type. +/// \tparam PolygonRange a model of the concept `SequenceContainer` +/// whose value_type is itself a model of the concepts `RandomAccessContainer` +/// and `ReversibleContainer` whose value_type is `std::size_t`. /// \tparam NamedParameters a sequence of \ref pmp_namedparameters "Named Parameters" /// /// \param points points of the soup of polygons. /// \param polygons a vector of polygons. Each element in the vector describes a polygon /// using the indices of the points in `points`. -/// \param np optional \ref pmp_namedparameters "Named Parameters" described below +/// \param np optional \ref pmp_namedparameters "Named Parameters", amongst those described below +/// +/// \cgalNamedParamsBegin +/// \cgalParamBegin{geom_traits} a geometric traits class instance. +/// The traits class must provide the nested functor `Less_xyz_3` +/// to compare lexicographically two points a function `Less_xyz_3 less_xyz_3_object()`. +/// \cgalParamEnd +/// \cgalParamBegin{do_erase_all_duplicates} +/// Parameter to indicate, when multiple polygons are duplicates, whether all the duplicate polygons +/// should be removed or if one (arbitrarily chosen) face should be kept. %Default is `false`. +/// \cgalParamEnd +/// \cgalParamBegin{do_require_same_orientation} +/// Parameter to indicate if polygon orientation should be taken into account when determining +/// whether two polygons are duplicates, that is, whether e.g. the triangles `0,1,2` and `0,2,1` +/// are duplicates. %Default is `false`. +/// \cgalParamEnd +/// \cgalNamedParamsEnd +/// +/// \returns the number of removed polygons +/// +template +std::size_t merge_duplicate_polygons_in_polygon_soup(const PointRange& points, + PolygonRange& polygons, + const NamedParameters& np) +{ + using boost::get_param; + using boost::choose_param; + + typedef typename internal::Polygon_types::P_ID P_ID; + + const bool erase_all_duplicates = choose_param(get_param(np, internal_np::do_erase_all_duplicates), false); + const bool same_orientation = choose_param(get_param(np, internal_np::do_require_same_orientation), false); + +#ifdef CGAL_PMP_REPAIR_POLYGON_SOUP_VERBOSE + std::cout << "Only polygons with the same orientation are duplicates: " << std::boolalpha << same_orientation << std::endl; + std::cout << "Erase all duplicate polygons: " << std::boolalpha << erase_all_duplicates << std::endl; +#endif + + typedef typename internal::GetPolygonGeomTraits::type Traits; + Traits traits = choose_param(get_param(np, internal_np::geom_traits), Traits()); + + std::vector > all_duplicate_polygons; + internal::collect_duplicate_polygons(points, polygons, std::back_inserter(all_duplicate_polygons), traits, same_orientation); +#ifdef CGAL_PMP_REPAIR_POLYGON_SOUP_VERBOSE + std::cout << all_duplicate_polygons.size() << " duplicate(s)" << std::endl; +#endif + + // Move all polygons that will be removed to the end of container + const std::size_t init_polygons_n = polygons.size(); + std::size_t swap_position = init_polygons_n - 1; + + while(!all_duplicate_polygons.empty()) + { + const std::vector& duplicate_polygons = all_duplicate_polygons.back(); + CGAL_assertion(duplicate_polygons.size() >= 2); + + std::size_t i = erase_all_duplicates ? 0 : 1; + for(; i +std::size_t merge_duplicate_polygons_in_polygon_soup(PointRange& points, + PolygonRange& polygons) +{ + return merge_duplicate_polygons_in_polygon_soup(points, polygons, CGAL::parameters::all_default()); +} + +/// \ingroup PMP_repairing_grp +/// +/// Cleans a given polygon soup through various repairing operations. More precisely, this function +/// carries out the following tasks, in the same order as they are listed: +/// - merging of duplicate points, using the function +/// `CGAL::Polygon_mesh_processing::merge_duplicate_points_in_polygon_soup()`; +/// - simplification of polygons to remove geometrically identical consecutive vertices; +/// - splitting of "pinched" polygons, that is polygons in which a geometric position appears more than once. +/// The splitting process results in multiple non-pinched polygons; +/// - removal of invalid polygons, that is polygons with fewer than 2 vertices; +/// - removal of duplicate polygons, using the function +/// `CGAL::Polygon_mesh_processing::merge_duplicate_polygons_in_polygon_soup()`; +/// - removal of isolated points, +/// using the function `CGAL::Polygon_mesh_processing::remove_isolated_points_in_polygon_soup()`. +/// +/// Note that the point and polygon containers will be modified by the repairing operations, +/// and thus the indexation of the polygons will also be changed. +/// +/// \tparam PointRange a model of the concepts `SequenceContainer` and `Swappable` +/// and whose value type is the point type. +/// \tparam PolygonRange a model of the concept `SequenceContainer`. +/// whose value_type is itself a model of the concepts `SequenceContainer`, +/// `Swappable`, and `ReversibleContainer` whose value_type is `std::size_t`. +/// \tparam NamedParameters a sequence of \ref pmp_namedparameters "Named Parameters" +/// +/// \param points points of the soup of polygons. +/// \param polygons a vector of polygons. Each element in the vector describes a polygon +/// using the indices of the points in `points`. +/// \param np optional \ref pmp_namedparameters "Named Parameters", amongst those described below /// /// \cgalNamedParamsBegin /// \cgalParamBegin{geom_traits} a geometric traits class instance. /// The traits class must provide the nested functors : /// - `Less_xyz_3` to compare lexicographically two points /// - `Equal_3` to check whether 2 points are identical +/// /// and, for each functor `Foo`, a function `Foo foo_object()`. /// \cgalParamEnd +/// \cgalParamBegin{do_erase_all_duplicates} +/// Parameter forwarded to the function `merge_duplicate_polygons_in_polygon_soup()` to indicate, +/// when multiple polygons are duplicates, whether all the duplicate polygons +/// should be removed or if one (arbitrarily chosen) face should be kept. %Default is `false`. +/// \cgalParamEnd +/// \cgalParamBegin{do_require_same_orientation} +/// Parameter forwarded to the function `merge_duplicate_polygons_in_polygon_soup()` +/// to indicate if polygon orientation should be taken into account when determining whether +/// two polygons are duplicates, that is, whether e.g. the triangles `0,1,2` and `0,2,1` are duplicates. +/// %Default is `false`. +/// \cgalParamEnd /// \cgalNamedParamsEnd /// template @@ -535,6 +971,7 @@ void repair_polygon_soup(PointRange& points, internal::simplify_polygons_in_polygon_soup(points, polygons, traits); internal::split_pinched_polygons_in_polygon_soup(points, polygons, traits); internal::remove_invalid_polygons_in_polygon_soup(points, polygons); + merge_duplicate_polygons_in_polygon_soup(points, polygons, np); remove_isolated_points_in_polygon_soup(points, polygons); } diff --git a/Polygon_mesh_processing/test/Polygon_mesh_processing/test_repair_polygon_soup.cpp b/Polygon_mesh_processing/test/Polygon_mesh_processing/test_repair_polygon_soup.cpp index 941bef2e085..2d34c7451a7 100644 --- a/Polygon_mesh_processing/test/Polygon_mesh_processing/test_repair_polygon_soup.cpp +++ b/Polygon_mesh_processing/test/Polygon_mesh_processing/test_repair_polygon_soup.cpp @@ -1,9 +1,12 @@ +#define CGAL_PMP_REPAIR_POLYGON_SOUP_VERBOSE + #include #include #include +#include #include #include #include @@ -17,6 +20,92 @@ typedef K::Point_3 Point_3; typedef CGAL::Surface_mesh Mesh; typedef std::vector Polygon; +void test_polygon_canonicalization(const bool verbose = false) +{ + std::cout << "test polygon canonicalization... " << std::endl; + + std::vector points; + points.push_back(Point_3(0,0,0)); // #0 + points.push_back(Point_3(1,0,0)); // #1 + points.push_back(Point_3(0,1,0)); // #2 + points.push_back(Point_3(1,1,0)); // #3 + points.push_back(Point_3(1,1,2)); // #4 + points.push_back(Point_3(1,1,-2)); // #5 + + // empty + Polygon polygon; + Polygon canonical_polygon = PMP::internal::construct_canonical_polygon(points, polygon, K()); + assert(canonical_polygon.empty()); + + // 1 point + polygon.push_back(5); + + canonical_polygon = PMP::internal::construct_canonical_polygon(points, polygon, K()); + assert(canonical_polygon == polygon); + + // 2 points + polygon.clear(); + polygon.push_back(4); polygon.push_back(3); + + canonical_polygon = PMP::internal::construct_canonical_polygon(points, polygon, K()); + assert(canonical_polygon[0] == 3 && canonical_polygon[1] == 4); + std::swap(polygon[0], polygon[1]); + canonical_polygon = PMP::internal::construct_canonical_polygon(points, polygon, K()); + assert(canonical_polygon[0] == 3 && canonical_polygon[1] == 4); + + // 3 points + polygon.clear(); + polygon.push_back(4); polygon.push_back(1); polygon.push_back(3); + + canonical_polygon = PMP::internal::construct_canonical_polygon(points, polygon, K()); + assert(canonical_polygon[0] == 1 && canonical_polygon[1] == 3 && canonical_polygon[2] == 4); + std::swap(polygon[0], polygon[2]); + canonical_polygon = PMP::internal::construct_canonical_polygon(points, polygon, K()); + assert(canonical_polygon[0] == 1 && canonical_polygon[1] == 3 && canonical_polygon[2] == 4); + + // Generic case + polygon.clear(); + polygon.push_back(0); polygon.push_back(2); polygon.push_back(5); polygon.push_back(4); polygon.push_back(1); + + // Whether reversed or with cyclic permutations, it should always yield the same canonical polygon + canonical_polygon = PMP::internal::construct_canonical_polygon(points, polygon, K()); + assert(canonical_polygon.size() == 5); + assert(canonical_polygon[0] == 0); + + // all cyclic permutations + for(std::size_t i=0, end=polygon.size(); i points; + std::vector polygons; + + points.push_back(Point_3(0,0,0)); // #0 + points.push_back(Point_3(1,0,0)); // #1 + points.push_back(Point_3(0,1,0)); // #2 + points.push_back(Point_3(1,1,0)); // #3 + points.push_back(Point_3(1,1,2)); // #4 + + // ------------------------------------------------------- + // empty + std::vector > all_duplicate_polygons; + PMP::internal::collect_duplicate_polygons(points, polygons, + std::back_inserter(all_duplicate_polygons), + K(), true /*only equal if same orientation*/); + assert(polygons.empty() && all_duplicate_polygons.empty()); + + std::size_t res = PMP::merge_duplicate_polygons_in_polygon_soup(points, polygons, params::geom_traits(K())); + assert(res == 0 && polygons.empty()); + + // ------------------------------------------------------- + // 1 polygon + Polygon polygon; + polygon.push_back(0); polygon.push_back(1); polygon.push_back(2); + polygons.push_back(polygon); + + PMP::internal::collect_duplicate_polygons(points, polygons, + std::back_inserter(all_duplicate_polygons), + K(), false /*equal regardless of orientation*/); + assert(all_duplicate_polygons.empty()); + + PMP::internal::collect_duplicate_polygons(points, polygons, + std::back_inserter(all_duplicate_polygons), + K(), true /*only equal if same orientation*/); + assert(all_duplicate_polygons.empty()); + + res = PMP::merge_duplicate_polygons_in_polygon_soup(points, polygons, params::geom_traits(K())); + assert(res == 0 && polygons.size() == 1); + + // ------------------------------------------------------- + // 2 different polygons + polygon.clear(); + polygon.push_back(0); polygon.push_back(1); polygon.push_back(3); polygon.push_back(4); + polygons.push_back(polygon); + + PMP::internal::collect_duplicate_polygons(points, polygons, + std::back_inserter(all_duplicate_polygons), + K(), false /*equal regardless of orientation*/); + assert(all_duplicate_polygons.empty()); + + PMP::internal::collect_duplicate_polygons(points, polygons, + std::back_inserter(all_duplicate_polygons), + K(), true /*only equal if same orientation*/); + assert(all_duplicate_polygons.empty()); + + res = PMP::merge_duplicate_polygons_in_polygon_soup(points, polygons); + assert(res == 0 && polygons.size() == 2); + + // ------------------------------------------------------- + // Multiple duplicates + // duplicate, same orientations + polygon.clear(); + polygon.push_back(2); polygon.push_back(0); polygon.push_back(1); + polygons.push_back(polygon); + + // duplicate, different orientations + polygon.clear(); + polygon.push_back(2); polygon.push_back(1); polygon.push_back(0); + polygons.push_back(polygon); + + // duplicate, different orientations + polygon.clear(); + polygon.push_back(4); polygon.push_back(3); polygon.push_back(1); polygon.push_back(0); + polygons.push_back(polygon); + + // same vertices, not a duplicate + polygon.clear(); + polygon.push_back(3); polygon.push_back(4); polygon.push_back(1); polygon.push_back(0); + polygons.push_back(polygon); + + PMP::internal::collect_duplicate_polygons(points, polygons, + std::back_inserter(all_duplicate_polygons), + K(), true /*only equal if same orientation*/); + assert(all_duplicate_polygons.size() == 1); // one duplication + assert(all_duplicate_polygons[0].size() == 2); // two polygons are equal + all_duplicate_polygons.clear(); + + PMP::internal::collect_duplicate_polygons(points, polygons, + std::back_inserter(all_duplicate_polygons), + K(), false /*equal regardless of orientation*/); + assert(all_duplicate_polygons.size() == 2); + + // not sure which duplicate is output first + if(all_duplicate_polygons[0][0] == 0) + assert(all_duplicate_polygons[0].size() == 3 && all_duplicate_polygons[1].size() == 2); + else + assert(all_duplicate_polygons[0].size() == 2 && all_duplicate_polygons[1].size() == 3); + + // Keep one for each duplicate + std::vector polygons_copy(polygons); + res = PMP::merge_duplicate_polygons_in_polygon_soup(points, polygons_copy, + params::all_default()); + assert(res == 3 && polygons_copy.size() == 3); + + // Remove all duplicates + polygons_copy = polygons; + res = PMP::merge_duplicate_polygons_in_polygon_soup(points, polygons_copy, + params::do_erase_all_duplicates(true) + .do_require_same_orientation(false)); + assert(res == 5 && polygons_copy.size() == 1); + + // Remove all duplicates but different orientations are different polygons + res = PMP::merge_duplicate_polygons_in_polygon_soup(points, polygons, + params::do_erase_all_duplicates(true) + .do_require_same_orientation(true)); + assert(res == 2 && polygons.size() == 4); +} + void test_simplify_polygons(const bool /*verbose*/ = false) { std::cout << "test simplify_polygons... " << std::endl; @@ -328,7 +538,9 @@ void test_slit_pinched_polygons(const bool /*verbose*/ = false) int main() { + test_polygon_canonicalization(true); test_merge_duplicate_points(false); + test_merge_duplicate_polygons(false); test_simplify_polygons(false); test_remove_invalid_polygons(false); test_remove_isolated_points(false); From b9325608b363098c86b3e4e4b952da325aa7542f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mael=20Rouxel-Labb=C3=A9?= Date: Mon, 30 Jul 2018 13:08:50 +0200 Subject: [PATCH 020/268] Misc minor doc fixes --- .../NamedParameters.txt | 20 +++++++++---------- .../connected_components.h | 8 ++++---- .../Polygon_mesh_processing/detect_features.h | 4 ++-- .../polygon_soup_to_polygon_mesh.h | 3 ++- .../CGAL/Polygon_mesh_processing/remesh.h | 2 +- .../CGAL/Polygon_mesh_processing/repair.h | 6 +++--- 6 files changed, 22 insertions(+), 21 deletions(-) diff --git a/Polygon_mesh_processing/doc/Polygon_mesh_processing/NamedParameters.txt b/Polygon_mesh_processing/doc/Polygon_mesh_processing/NamedParameters.txt index da0f06912d3..2a7faa3bc19 100644 --- a/Polygon_mesh_processing/doc/Polygon_mesh_processing/NamedParameters.txt +++ b/Polygon_mesh_processing/doc/Polygon_mesh_processing/NamedParameters.txt @@ -329,15 +329,15 @@ Parameter used in `isotropic_remeshing()` to specify an alternative vertex proje \cgalNPBegin{apply_per_connected_component} \anchor PMP_apply_per_connected_component Parameter used to indicate whether an algorithm should consider each connected component of a mesh independently.\n -\b Type : `bool` \n -\b Default value is `false` +Type: `bool` \n +Default: `false` \cgalNPEnd \cgalNPBegin{visitor} \anchor PMP_visitor Parameter used to pass a visitor class to a function. Its type and behavior depend on the visited function. \n -\b Type : `A class` \n -\b Default Specific to the function visited +Type: `A class` \n +Default: Specific to the function visited \cgalNPEnd \cgalNPBegin{throw_on_self_intersection} \anchor PMP_throw_on_self_intersection @@ -345,23 +345,23 @@ Parameter used in corefinement-related functions to make the functions throw an case some faces involved in the intersection of the input are self-intersecting and make the operation impossible with the current version of the code. \n -\b Type : `bool` \n -\b Default value is `false` +Type: `bool` \n +Default: `false` \cgalNPEnd \cgalNPBegin{clip_volume} \anchor PMP_clip_volume Parameter used in `clip()` functions to clip a volume rather than a surface. \n -\b Type : `bool` \n -\b Default value is `false` +Type: `bool` \n +Default: `false` \cgalNPEnd \cgalNPBegin{use_compact_clipper} \anchor PMP_use_compact_clipper Parameter used in `clip()` functions to indicate whether the boundary of the clipper should be considered as part of the clipping volume or not. \n -\b Type : `bool` \n -\b Default value is `true` +Type: `bool` \n +Default: `true` \cgalNPEnd \cgalNPBegin{do_erase_all_duplicates} \anchor PMP_do_erase_all_duplicates diff --git a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/connected_components.h b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/connected_components.h index c72b3d54d98..df4a7fd80ab 100644 --- a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/connected_components.h +++ b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/connected_components.h @@ -277,7 +277,7 @@ void keep_connected_components(PolygonMesh& pmesh * * \param pmesh the polygon mesh * \param nb_components_to_keep the number of components to be kept - * \param np optional \ref pmp_namedparameters "Named Parameters" described below + * \param np optional \ref pmp_namedparameters "Named Parameters", amongst those described below * * \cgalNamedParamsBegin * \cgalParamBegin{edge_is_constrained_map} a property map containing the constrained-or-not status of each edge of `pmesh` \cgalParamEnd @@ -360,7 +360,7 @@ std::size_t keep_largest_connected_components(PolygonMesh& pmesh, * * \param pmesh the polygon mesh * \param threshold_components_to_keep the number of faces a component must have so that it is kept - * \param np optional \ref pmp_namedparameters "Named Parameters" described below + * \param np optional \ref pmp_namedparameters "Named Parameters", amongst those described below * * \cgalNamedParamsBegin * \cgalParamBegin{edge_is_constrained_map} a property map containing the constrained-or-not status of each edge of `pmesh` \cgalParamEnd @@ -664,7 +664,7 @@ void remove_connected_components(PolygonMesh& pmesh * * \param components_to_remove a face range, including one face or more on each component to be removed * \param pmesh the polygon mesh -* \param np optional \ref pmp_namedparameters "Named Parameters" described below +* \param np optional \ref pmp_namedparameters "Named Parameters", amongst those described below * * \cgalNamedParamsBegin * \cgalParamBegin{edge_is_constrained_map} a property map containing the constrained-or-not status of each edge of `pmesh` \cgalParamEnd @@ -722,7 +722,7 @@ void remove_connected_components(PolygonMesh& pmesh * * \param pmesh the polygon mesh * \param components_to_keep a face range, including one face or more on each component to be kept -* \param np optional \ref pmp_namedparameters "Named Parameters" described below +* \param np optional \ref pmp_namedparameters "Named Parameters", amongst those described below * * \cgalNamedParamsBegin * \cgalParamBegin{edge_is_constrained_map} a property map containing the constrained-or-not status of each edge of `pmesh` \cgalParamEnd diff --git a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/detect_features.h b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/detect_features.h index 330e348277b..787c812650c 100644 --- a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/detect_features.h +++ b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/detect_features.h @@ -258,7 +258,7 @@ template Date: Mon, 30 Jul 2018 18:07:54 +0200 Subject: [PATCH 021/268] Added a function to try and stitch stitchable halfedges within the same border --- .../Polygon_mesh_processing/stitch_borders.h | 142 +++++++++++++++++- 1 file changed, 137 insertions(+), 5 deletions(-) diff --git a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/stitch_borders.h b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/stitch_borders.h index 830cca479a0..a48f389891f 100644 --- a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/stitch_borders.h +++ b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/stitch_borders.h @@ -33,17 +33,23 @@ #include #include #include + #include +#include #include #include -#include -#include -#include #include #include #include +#include + +#include +#include +#include +#include + #ifdef DOXYGEN_RUNNING #define CGAL_PMP_NP_TEMPLATE_PARAMETERS NamedParameters #define CGAL_PMP_NP_CLASS NamedParameters @@ -562,10 +568,136 @@ void stitch_boundary_cycle_2(PM& pmesh) } } +// @todo @tmp This is added by #3201 and should thus be removed +template +OutputIterator extract_boundary_cycles(PolygonMesh& pm, + OutputIterator out) +{ + typedef typename boost::graph_traits::halfedge_descriptor halfedge_descriptor; + + boost::unordered_set hedge_handled; + BOOST_FOREACH(halfedge_descriptor h, halfedges(pm)) + { + if(is_border(h, pm) && hedge_handled.insert(h).second) + { + *out++ = h; + BOOST_FOREACH(halfedge_descriptor h2, halfedges_around_face(h, pm)) + hedge_handled.insert(h2); + } + } + return out; +} + +// \ingroup PMP_repairing_grp +// +// Stitches together, whenever possible, two halfedges of the same border. +// +// \tparam PolygonMesh a model of `FaceListGraph` and `MutableFaceGraph` +// \tparam NamedParameters a sequence of \ref pmp_namedparameters "Named Parameters" +// +// \param pm the polygon mesh to be modified by stitching +// \param np optional sequence of \ref pmp_namedparameters "Named Parameters" among the ones listed below +// +// \cgalNamedParamsBegin +// \cgalParamBegin{vertex_point_map} the property map with the points associated to the vertices of `pmesh`. +// If this parameter is omitted, an internal property map for `CGAL::vertex_point_t` must be available in `PolygonMesh`. +// \cgalParamEnd +// \cgalNamedParamsEnd +// +template +std::size_t stitch_boundary_cycles(PolygonMesh& pm, + const NamedParameters& np) +{ + using boost::choose_param; + using boost::get_param; + + typedef typename boost::graph_traits::halfedge_descriptor halfedge_descriptor; + + typedef typename GetVertexPointMap::const_type VPMap; + VPMap vpm = choose_param(get_param(np, internal_np::vertex_point), + get_const_property_map(vertex_point, pm)); + + std::vector boundary_cycles; + extract_boundary_cycles(pm, std::back_inserter(boundary_cycles)); + + std::size_t stitched_boundary_cycles_n = 0; + + // A boundary cycle might need to be stitched starting from different extremities + // + // v11 ----v10 + // / \ + // v0 === v1(v13) === v2(v12) v5(v9) === v6(v8) === v7 + // \ / + // v3------v4 + // so we mark which edges have been stitched + typedef CGAL::internal::Dynamic_property_map Halfedge_status_pmap; + Halfedge_status_pmap stitched_hedges(false); + + std::cout << boundary_cycles.size() << " boundary cycles" << std::endl; + + BOOST_FOREACH(halfedge_descriptor h, boundary_cycles) + { + std::vector stitching_starting_points; + halfedge_descriptor hn = next(h, pm); + while(hn != h) + { + if(get(vpm, source(hn, pm)) == get(vpm, target(next(hn, pm), pm))) + stitching_starting_points.push_back(hn); + + hn = next(hn, pm); + } + + std::cout << stitching_starting_points.size() << " stitching starting points" << std::endl; + + for(std::size_t i=0, end=stitching_starting_points.size(); i > hedges_to_stitch; + + halfedge_descriptor hn = next(h, pm); + bool do_stitching = true; + do + { + hedges_to_stitch.push_back(std::make_pair(h, hn)); + put(stitched_hedges, h, true); + put(stitched_hedges, hn, true); + + if(next(hn, pm) == h) + break; + + h = prev(h, pm); + hn = next(hn, pm); + + if(get(vpm, source(h, pm)) != get(vpm, target(hn, pm))) + do_stitching = false; + } + while(do_stitching); + + // remove iostream & fstream + std::cout << "stitching a cycle\n"; + + internal::stitch_borders_impl(pm, hedges_to_stitch); + ++stitched_boundary_cycles_n; + } + + std::ofstream("stitched_closed_boundary_cycles.off") << std::setprecision(17) << pm; + } + + return stitched_boundary_cycles_n; +} + +template +std::size_t stitch_boundary_cycles(PolygonMesh& pm) +{ + return stitch_boundary_cycles(pm, CGAL::parameters::all_default()); +} + } //end of namespace internal - - /*! * \ingroup PMP_repairing_grp * Stitches together border halfedges in a polygon mesh. From 768c5212c2ffe59f0a5037b4c66e4892100b7e1e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mael=20Rouxel-Labb=C3=A9?= Date: Mon, 30 Jul 2018 18:08:22 +0200 Subject: [PATCH 022/268] Try to stitch halfedges within each border before more complex approaches --- .../include/CGAL/Polygon_mesh_processing/stitch_borders.h | 2 ++ 1 file changed, 2 insertions(+) diff --git a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/stitch_borders.h b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/stitch_borders.h index a48f389891f..daedc05ad44 100644 --- a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/stitch_borders.h +++ b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/stitch_borders.h @@ -767,6 +767,8 @@ void stitch_borders(PolygonMesh& pmesh, const CGAL_PMP_NP_CLASS& np) VPMap vpm = choose_param(get_param(np, internal_np::vertex_point), get_const_property_map(vertex_point, pmesh)); + internal::stitch_boundary_cycles(pmesh, np); + internal::collect_duplicated_stitchable_boundary_edges(pmesh, std::back_inserter(hedge_pairs_to_stitch), internal::Less_for_halfedge(pmesh, vpm), From e5b70423a975a9d0917a952e2fb121ed5a89eac7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mael=20Rouxel-Labb=C3=A9?= Date: Mon, 30 Jul 2018 18:08:50 +0200 Subject: [PATCH 023/268] Added a test for stitch_boundary_cycles() --- .../data_stitching/boundary_cycle.off | 42 +++++++ .../test_stitching.cpp | 116 ++++++++++-------- 2 files changed, 108 insertions(+), 50 deletions(-) create mode 100644 Polygon_mesh_processing/test/Polygon_mesh_processing/data_stitching/boundary_cycle.off diff --git a/Polygon_mesh_processing/test/Polygon_mesh_processing/data_stitching/boundary_cycle.off b/Polygon_mesh_processing/test/Polygon_mesh_processing/data_stitching/boundary_cycle.off new file mode 100644 index 00000000000..ef756556af0 --- /dev/null +++ b/Polygon_mesh_processing/test/Polygon_mesh_processing/data_stitching/boundary_cycle.off @@ -0,0 +1,42 @@ +OFF +20 20 0 +5 -20 0 +5 20 0 +0 0 0 +1 0 0 +2 0 0 +3 0 0 +4 -3 0 +6 -3 0 +7 0 0 +8 0 0 +9 0 0 +10 0 0 +8 0 0 +7 0 0 +6 3 0 +5 5 0 +5 7 0 +5 5 0 +3 0 0 +2 0 0 +3 0 3 2 +3 0 4 3 +3 0 5 4 +3 6 5 0 +3 7 6 0 +3 8 7 0 +3 9 8 0 +3 10 9 0 +3 11 10 0 +3 1 10 11 +3 1 12 10 +3 1 13 12 +3 1 14 13 +3 1 15 14 +3 1 16 15 +3 1 17 16 +3 18 17 1 +3 19 18 1 +3 3 19 1 +3 1 2 3 diff --git a/Polygon_mesh_processing/test/Polygon_mesh_processing/test_stitching.cpp b/Polygon_mesh_processing/test/Polygon_mesh_processing/test_stitching.cpp index 078a44338d2..9f83b4a5a39 100644 --- a/Polygon_mesh_processing/test/Polygon_mesh_processing/test_stitching.cpp +++ b/Polygon_mesh_processing/test/Polygon_mesh_processing/test_stitching.cpp @@ -1,23 +1,47 @@ #include #include + #include #include + +#include #include +#include #include #include -#include -typedef CGAL::Exact_predicates_inexact_constructions_kernel Epic; -typedef CGAL::Exact_predicates_exact_constructions_kernel Epec; +namespace PMP = CGAL::Polygon_mesh_processing; +namespace params = CGAL::parameters; + +typedef CGAL::Exact_predicates_inexact_constructions_kernel EPICK; +typedef CGAL::Exact_predicates_exact_constructions_kernel EPECK; + +void test_stitch_boundary_cycles(const char* fname) +{ + typedef CGAL::Surface_mesh Mesh; + + std::ifstream input(fname); + Mesh mesh; + if (!input || !(input >> mesh)){ + std::cerr << "Error: can not read file."; + return; + } + + std::size_t res = PMP::internal::stitch_boundary_cycles(mesh); + std::cout << "res: " << res << std::endl; + assert(res == 3); + assert(is_valid(mesh)); +} template void test_polyhedron(const char* fname) { - typedef CGAL::Polyhedron_3 Polyhedron; - std::cout << "Testing Polyhedron_3 " << fname << "..." << std::flush; + + typedef CGAL::Polyhedron_3 Polyhedron; + std::ifstream input(fname); Polyhedron poly; if (!input || !(input >> poly)){ @@ -26,8 +50,8 @@ void test_polyhedron(const char* fname) } assert(poly.size_of_vertices() > 0); - - CGAL::Polygon_mesh_processing::stitch_borders(poly); + + PMP::stitch_borders(poly); poly.normalize_border(); assert(poly.is_valid(false, 5)); @@ -37,9 +61,10 @@ void test_polyhedron(const char* fname) template void test_polyhedron_cc(const char* fname) { - typedef CGAL::Polyhedron_3 Polyhedron; - std::cout << "Testing Polyhedron_3 " << fname << "..." << std::flush; + + typedef CGAL::Polyhedron_3 Polyhedron; + std::ifstream input(fname); Polyhedron poly; if (!input || !(input >> poly)){ @@ -48,10 +73,8 @@ void test_polyhedron_cc(const char* fname) } assert(poly.size_of_vertices() > 0); - - CGAL::Polygon_mesh_processing:: - stitch_borders(poly, - CGAL::Polygon_mesh_processing::parameters::apply_per_connected_component(true)); + + PMP::stitch_borders(poly, params::apply_per_connected_component(true)); poly.normalize_border(); assert(poly.is_valid(false, 5)); @@ -60,66 +83,60 @@ void test_polyhedron_cc(const char* fname) void test_surface_mesh(const char* fname) { - typedef Epic K; - typedef K::Point_3 Point; - typedef CGAL::Surface_mesh Mesh; - std::cout << "Testing Surface_mesh " << fname << "..." << std::flush; + + typedef CGAL::Surface_mesh Mesh; + std::ifstream input(fname); - Mesh m; - if (!input || !(input >> m)){ + Mesh mesh; + if (!input || !(input >> mesh)){ std::cerr << "Error: can not read file."; return; } - - CGAL::Polygon_mesh_processing::stitch_borders(m); - //todo : add a validity test - assert(is_valid_polygon_mesh(m)); + PMP::stitch_borders(mesh); + assert(is_valid_polygon_mesh(mesh)); std::cout << "OK\n"; } void test_surface_mesh_cc(const char* fname) { - typedef Epic K; - typedef K::Point_3 Point; - typedef CGAL::Surface_mesh Mesh; - std::cout << "Testing Surface_mesh " << fname << "..." << std::flush; + + typedef CGAL::Surface_mesh Mesh; + std::ifstream input(fname); - Mesh m; - if (!input || !(input >> m)){ + Mesh mesh; + if (!input || !(input >> mesh)){ std::cerr << "Error: can not read file."; return; } - CGAL::Polygon_mesh_processing::stitch_borders(m, - CGAL::Polygon_mesh_processing::parameters::apply_per_connected_component(true)); - //todo : add a validity test - - assert(is_valid(m)); + PMP::stitch_borders(mesh, params::apply_per_connected_component(true)); + assert(is_valid(mesh)); std::cout << "OK\n"; } int main() { - test_polyhedron("data_stitching/full_border.off"); + test_stitch_boundary_cycles("data_stitching/boundary_cycle.off"); - test_polyhedron("data_stitching/full_border.off"); - test_polyhedron("data_stitching/full_border_quads.off"); - test_polyhedron("data_stitching/half_border.off"); - test_polyhedron("data_stitching/mid_border.off"); - test_polyhedron("data_stitching/multiple_incidence.off"); - test_polyhedron("data_stitching/incidence_3.off"); - test_polyhedron("data_stitching/incoherent_patch_orientation.off"); - test_polyhedron("data_stitching/non_stitchable.off"); - test_polyhedron("data_stitching/deg_border.off"); - test_polyhedron("data_stitching/two_patches.off"); - test_polyhedron("data_stitching/non_manifold.off"); - test_polyhedron("data_stitching/non_manifold2.off"); - test_polyhedron_cc("data_stitching/nm_cubes.off"); + test_polyhedron("data_stitching/full_border.off"); + test_polyhedron("data_stitching/full_border.off"); + test_polyhedron("data_stitching/full_border_quads.off"); + test_polyhedron("data_stitching/half_border.off"); + test_polyhedron("data_stitching/mid_border.off"); + test_polyhedron("data_stitching/multiple_incidence.off"); + test_polyhedron("data_stitching/incidence_3.off"); + test_polyhedron("data_stitching/incoherent_patch_orientation.off"); + test_polyhedron("data_stitching/non_stitchable.off"); + test_polyhedron("data_stitching/deg_border.off"); + test_polyhedron("data_stitching/two_patches.off"); + test_polyhedron("data_stitching/non_manifold.off"); + test_polyhedron("data_stitching/non_manifold2.off"); + test_polyhedron_cc("data_stitching/nm_cubes.off"); test_surface_mesh("data_stitching/full_border.off"); test_surface_mesh("data_stitching/full_border_quads.off"); @@ -133,6 +150,5 @@ int main() test_surface_mesh("data_stitching/non_manifold.off"); test_surface_mesh_cc("data_stitching/nm_cubes.off"); - return 0; + return EXIT_SUCCESS; } - From 7e17f5f8d6f1677afd2ef12ec25f0c9a92e60e4c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mael=20Rouxel-Labb=C3=A9?= Date: Tue, 31 Jul 2018 08:28:38 +0200 Subject: [PATCH 024/268] Cleaned extra verbose --- .../CGAL/Polygon_mesh_processing/stitch_borders.h | 11 ----------- .../test/Polygon_mesh_processing/test_stitching.cpp | 1 - 2 files changed, 12 deletions(-) diff --git a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/stitch_borders.h b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/stitch_borders.h index daedc05ad44..5fc67f2e16a 100644 --- a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/stitch_borders.h +++ b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/stitch_borders.h @@ -43,8 +43,6 @@ #include #include -#include - #include #include #include @@ -633,8 +631,6 @@ std::size_t stitch_boundary_cycles(PolygonMesh& pm, typedef CGAL::internal::Dynamic_property_map Halfedge_status_pmap; Halfedge_status_pmap stitched_hedges(false); - std::cout << boundary_cycles.size() << " boundary cycles" << std::endl; - BOOST_FOREACH(halfedge_descriptor h, boundary_cycles) { std::vector stitching_starting_points; @@ -647,8 +643,6 @@ std::size_t stitch_boundary_cycles(PolygonMesh& pm, hn = next(hn, pm); } - std::cout << stitching_starting_points.size() << " stitching starting points" << std::endl; - for(std::size_t i=0, end=stitching_starting_points.size(); i Date: Tue, 31 Jul 2018 08:53:14 +0200 Subject: [PATCH 025/268] Added another test --- .../data_stitching/boundary_cycle_2.off | 18 ++++++++++++++++++ .../Polygon_mesh_processing/test_stitching.cpp | 3 ++- 2 files changed, 20 insertions(+), 1 deletion(-) create mode 100644 Polygon_mesh_processing/test/Polygon_mesh_processing/data_stitching/boundary_cycle_2.off diff --git a/Polygon_mesh_processing/test/Polygon_mesh_processing/data_stitching/boundary_cycle_2.off b/Polygon_mesh_processing/test/Polygon_mesh_processing/data_stitching/boundary_cycle_2.off new file mode 100644 index 00000000000..d8a8bfc0d2d --- /dev/null +++ b/Polygon_mesh_processing/test/Polygon_mesh_processing/data_stitching/boundary_cycle_2.off @@ -0,0 +1,18 @@ +OFF +8 8 0 +2 -1 0 +2 1 0 +0 0 0 +1 0 0 +2 0 0 +3 0 0 +4 0 0 +2 0 0 +3 0 2 3 +3 0 3 4 +3 0 4 5 +3 0 5 6 +3 3 2 1 +3 7 3 1 +3 5 7 1 +3 6 5 1 diff --git a/Polygon_mesh_processing/test/Polygon_mesh_processing/test_stitching.cpp b/Polygon_mesh_processing/test/Polygon_mesh_processing/test_stitching.cpp index 17fc69fbb6c..975c1dbee5b 100644 --- a/Polygon_mesh_processing/test/Polygon_mesh_processing/test_stitching.cpp +++ b/Polygon_mesh_processing/test/Polygon_mesh_processing/test_stitching.cpp @@ -30,7 +30,7 @@ void test_stitch_boundary_cycles(const char* fname) } std::size_t res = PMP::internal::stitch_boundary_cycles(mesh); - assert(res == 3); + assert(res > 0); assert(is_valid(mesh)); } @@ -121,6 +121,7 @@ void test_surface_mesh_cc(const char* fname) int main() { test_stitch_boundary_cycles("data_stitching/boundary_cycle.off"); + test_stitch_boundary_cycles("data_stitching/boundary_cycle_2.off"); test_polyhedron("data_stitching/full_border.off"); test_polyhedron("data_stitching/full_border.off"); From 2ecb8c50d257bec49bb77ff3c8ba715097816fa3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mael=20Rouxel-Labb=C3=A9?= Date: Wed, 1 Aug 2018 15:10:39 +0200 Subject: [PATCH 026/268] Improved repair polygon soup verbosity granularity --- .../repair_polygon_soup.h | 85 ++++++++++++++----- .../test_repair_polygon_soup.cpp | 2 +- 2 files changed, 67 insertions(+), 20 deletions(-) diff --git a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/repair_polygon_soup.h b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/repair_polygon_soup.h index 8ed416ddb0a..08bee5946f7 100644 --- a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/repair_polygon_soup.h +++ b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/repair_polygon_soup.h @@ -42,6 +42,12 @@ #include #include +#ifdef CGAL_PMP_REPAIR_POLYGON_SOUP_VERBOSE_PP + #ifndef CGAL_PMP_REPAIR_POLYGON_SOUP_VERBOSE + #define CGAL_PMP_REPAIR_POLYGON_SOUP_VERBOSE + #endif +#endif + namespace CGAL { namespace Polygon_mesh_processing { @@ -135,8 +141,8 @@ bool simplify_polygon(PointRange& points, traits.equal_3_object()(points[polygon[i]], points[polygon[next_i]])) // geometric equality { to_remove.push_back(next_i); -#ifdef CGAL_PMP_REPAIR_POLYGON_SOUP_VERBOSE - std::cout << "Removing point: polygon[" << next_i << "] = " << polygon[next_i] << std::endl; +#ifdef CGAL_PMP_REPAIR_POLYGON_SOUP_VERBOSE_PP + std::cout << "Duplicate point: polygon[" << next_i << "] = " << polygon[next_i] << std::endl; #endif next_i = (next_i == last) ? 0 : next_i+1; @@ -204,6 +210,11 @@ std::size_t simplify_polygons_in_polygon_soup(PointRange& points, ++simplified_polygons_n; } +#ifdef CGAL_PMP_REPAIR_POLYGON_SOUP_VERBOSE + if(simplified_polygons_n > 0) + std::cout << "Cleaned consecutive duplicate vertices in " << simplified_polygons_n << " polygon(s)" << std::endl; +#endif + return simplified_polygons_n; } @@ -250,7 +261,7 @@ std::size_t split_pinched_polygons_in_polygon_soup(PointRange& points, Polygon_3& polygon = polygons[polygon_index]; const std::size_t ini_polygon_size = polygon.size(); -#ifdef CGAL_PMP_REPAIR_POLYGON_SOUP_VERBOSE +#ifdef CGAL_PMP_REPAIR_POLYGON_SOUP_VERBOSE_PP std::cout << "Input polygon: "; internal::print_polygon(std::cout, polygon); #endif @@ -273,6 +284,11 @@ std::size_t split_pinched_polygons_in_polygon_soup(PointRange& points, if(!is_insert_successful.second) { +#ifdef CGAL_PMP_REPAIR_POLYGON_SOUP_VERBOSE + std::cout << "Pinched polygon: "; + internal::print_polygon(std::cout, polygon); +#endif + // We have already met that point, split the polygon into two smaller polygons std::size_t prev_id = is_insert_successful.first->second; CGAL_assertion(prev_id < i-1); @@ -284,7 +300,7 @@ std::size_t split_pinched_polygons_in_polygon_soup(PointRange& points, split_polygon_2.insert(split_polygon_2.end(), polygon.begin(), polygon.begin() + prev_id); split_polygon_2.insert(split_polygon_2.end(), polygon.begin() + i, polygon.end()); -#ifdef CGAL_PMP_REPAIR_POLYGON_SOUP_VERBOSE +#ifdef CGAL_PMP_REPAIR_POLYGON_SOUP_VERBOSE_PP std::cout << "New polygons:" << std::endl; std::cout << "P1:"; internal::print_polygon(std::cout, split_polygon_1); @@ -328,7 +344,13 @@ std::size_t remove_invalid_polygons_in_polygon_soup(PointRange& /*points*/, for(std::size_t polygon_index=0; polygon_index!=ini_polygons_size; ++polygon_index) { if(polygons[polygon_index].size() <= 2) + { +#ifdef CGAL_PMP_REPAIR_POLYGON_SOUP_VERBOSE_PP + std::cout << "Invalid polygon:"; + print_polygon(std::cout, polygons[polygon_index]); +#endif to_remove.push_back(polygon_index); + } } while(!to_remove.empty()) @@ -337,7 +359,14 @@ std::size_t remove_invalid_polygons_in_polygon_soup(PointRange& /*points*/, to_remove.pop_back(); } - return ini_polygons_size - polygons.size(); + const std::size_t removed_polygons_n = ini_polygons_size - polygons.size(); + +#ifdef CGAL_PMP_REPAIR_POLYGON_SOUP_VERBOSE + if(removed_polygons_n > 0) + std::cout << "Removed " << removed_polygons_n << " invalid polygon(s)" << std::endl; +#endif + + return removed_polygons_n; } } // end namespace internal @@ -396,7 +425,7 @@ std::size_t remove_isolated_points_in_polygon_soup(PointRange& points, { if(!visited[i]) { -#ifdef CGAL_PMP_REPAIR_POLYGON_SOUP_VERBOSE +#ifdef CGAL_PMP_REPAIR_POLYGON_SOUP_VERBOSE_PP std::cout << "points[" << i << "] = " << points[i] << " is isolated" << std::endl; #endif std::swap(points[swap_position], points[i]); @@ -421,6 +450,11 @@ std::size_t remove_isolated_points_in_polygon_soup(PointRange& points, } } +#ifdef CGAL_PMP_REPAIR_POLYGON_SOUP_VERBOSE + if(removed_points_n > 0) + std::cout << "Removed " << removed_points_n << " isolated point(s)" << std::endl; +#endif + return removed_points_n; } @@ -482,7 +516,7 @@ std::size_t merge_duplicate_points_in_polygon_soup(PointRange& points, std::pair is_insert_successful = point_to_id.insert(std::make_pair(points[i], unique_points.size())); -#ifdef CGAL_PMP_REPAIR_POLYGON_SOUP_VERBOSE +#ifdef CGAL_PMP_REPAIR_POLYGON_SOUP_VERBOSE_PP if(!is_insert_successful.second) std::cout << "points[" < @@ -548,7 +587,7 @@ void canonical_polygon_markers(const PointRange& points, V_ID_iterator min_id = std::min_element(polygon.begin(), polygon.end(), comp); first = min_id - polygon.begin(); -#ifdef CGAL_PMP_REPAIR_POLYGON_SOUP_VERBOSE +#ifdef CGAL_PMP_REPAIR_POLYGON_SOUP_VERBOSE_PP std::cout << "first: " << first << " points[" << *min_id << "] = " << points[*min_id] << std::endl; #endif @@ -560,7 +599,7 @@ void canonical_polygon_markers(const PointRange& points, reversed = traits.less_xyz_3_object()(points[polygon[pos_prev]], points[polygon[pos_next]]); -#ifdef CGAL_PMP_REPAIR_POLYGON_SOUP_VERBOSE +#ifdef CGAL_PMP_REPAIR_POLYGON_SOUP_VERBOSE_PP std::cout << "pos_prev: " << pos_prev << " points[" << polygon[pos_prev] << "] = " << points[polygon[pos_prev]] << std::endl; std::cout << "pos_next: " << pos_next @@ -604,7 +643,7 @@ Polygon construct_canonical_polygon(const PointRange& points, if(polygon.size() < 2) return polygon; -#ifdef CGAL_PMP_REPAIR_POLYGON_SOUP_VERBOSE +#ifdef CGAL_PMP_REPAIR_POLYGON_SOUP_VERBOSE_PP std::cout << "Input polygon:"; internal::print_polygon(std::cout, polygon); #endif @@ -613,7 +652,7 @@ Polygon construct_canonical_polygon(const PointRange& points, canonical_polygon_markers(points, polygon, first, reversed, traits); Polygon canonical_polygon = construct_canonical_polygon_with_markers(polygon, first, reversed); -#ifdef CGAL_PMP_REPAIR_POLYGON_SOUP_VERBOSE +#ifdef CGAL_PMP_REPAIR_POLYGON_SOUP_VERBOSE_PP std::cout << "Canonical polygon:"; internal::print_polygon(std::cout, canonical_polygon); #endif @@ -790,7 +829,7 @@ DuplicateOutputIterator collect_duplicate_polygons(const PointRange& points, if(!is_insert_successful.second) { const P_ID other_polygon_id = *(is_insert_successful.first); -#ifdef CGAL_PMP_REPAIR_POLYGON_SOUP_VERBOSE +#ifdef CGAL_PMP_REPAIR_POLYGON_SOUP_VERBOSE_PP std::cout << "polygon: " << polygon_index << " is a duplicate of polygon: " << other_polygon_id << std::endl; #endif duplicates.collect_duplicates(other_polygon_id, polygon_index); @@ -851,7 +890,7 @@ std::size_t merge_duplicate_polygons_in_polygon_soup(const PointRange& points, const bool erase_all_duplicates = choose_param(get_param(np, internal_np::do_erase_all_duplicates), false); const bool same_orientation = choose_param(get_param(np, internal_np::do_require_same_orientation), false); -#ifdef CGAL_PMP_REPAIR_POLYGON_SOUP_VERBOSE +#ifdef CGAL_PMP_REPAIR_POLYGON_SOUP_VERBOSE_PP std::cout << "Only polygons with the same orientation are duplicates: " << std::boolalpha << same_orientation << std::endl; std::cout << "Erase all duplicate polygons: " << std::boolalpha << erase_all_duplicates << std::endl; #endif @@ -861,7 +900,11 @@ std::size_t merge_duplicate_polygons_in_polygon_soup(const PointRange& points, std::vector > all_duplicate_polygons; internal::collect_duplicate_polygons(points, polygons, std::back_inserter(all_duplicate_polygons), traits, same_orientation); -#ifdef CGAL_PMP_REPAIR_POLYGON_SOUP_VERBOSE + + if(all_duplicate_polygons.empty()) + return 0; + +#ifdef CGAL_PMP_REPAIR_POLYGON_SOUP_VERBOSE_PP std::cout << all_duplicate_polygons.size() << " duplicate(s)" << std::endl; #endif @@ -891,7 +934,7 @@ std::size_t merge_duplicate_polygons_in_polygon_soup(const PointRange& points, polygons.erase(polygons.begin() + swap_position, polygons.end()); #ifdef CGAL_PMP_REPAIR_POLYGON_SOUP_VERBOSE - std::cout << "Removed " << removed_polygons_n << " polygon(s)" << std::endl; + std::cout << "Removed " << removed_polygons_n << " duplicate polygon(s)" << std::endl; std::cout << polygons.size() << " polygon(s) left" << std::endl; #endif @@ -967,6 +1010,10 @@ void repair_polygon_soup(PointRange& points, typedef typename internal::GetPolygonGeomTraits::type Traits; Traits traits = choose_param(get_param(np, internal_np::geom_traits), Traits()); +#ifdef CGAL_PMP_REPAIR_POLYGON_SOUP_VERBOSE + std::cout << "Repairing soup with " << points.size() << " points and " << polygons.size() << " polygons" << std::endl; +#endif + merge_duplicate_points_in_polygon_soup(points, polygons, np); internal::simplify_polygons_in_polygon_soup(points, polygons, traits); internal::split_pinched_polygons_in_polygon_soup(points, polygons, traits); diff --git a/Polygon_mesh_processing/test/Polygon_mesh_processing/test_repair_polygon_soup.cpp b/Polygon_mesh_processing/test/Polygon_mesh_processing/test_repair_polygon_soup.cpp index 2d34c7451a7..63a3473095f 100644 --- a/Polygon_mesh_processing/test/Polygon_mesh_processing/test_repair_polygon_soup.cpp +++ b/Polygon_mesh_processing/test/Polygon_mesh_processing/test_repair_polygon_soup.cpp @@ -1,4 +1,4 @@ -#define CGAL_PMP_REPAIR_POLYGON_SOUP_VERBOSE +#define CGAL_PMP_REPAIR_POLYGON_SOUP_VERBOSE_PP #include From 94108a44fee91b7e22e2510b54956128c4e26199 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mael=20Rouxel-Labb=C3=A9?= Date: Wed, 1 Aug 2018 15:13:25 +0200 Subject: [PATCH 027/268] Fixed lonely function call --- .../include/CGAL/Polygon_mesh_processing/repair_polygon_soup.h | 1 - 1 file changed, 1 deletion(-) diff --git a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/repair_polygon_soup.h b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/repair_polygon_soup.h index 08bee5946f7..6b421315b4a 100644 --- a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/repair_polygon_soup.h +++ b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/repair_polygon_soup.h @@ -1019,7 +1019,6 @@ void repair_polygon_soup(PointRange& points, internal::split_pinched_polygons_in_polygon_soup(points, polygons, traits); internal::remove_invalid_polygons_in_polygon_soup(points, polygons); merge_duplicate_polygons_in_polygon_soup(points, polygons, np); - remove_isolated_points_in_polygon_soup(points, polygons); } From 459ff9a9b4364b6f3893cde1a99a07e8719b41f4 Mon Sep 17 00:00:00 2001 From: Clement Jamin Date: Wed, 3 May 2017 16:47:06 +0200 Subject: [PATCH 028/268] Introduce CGAL_GENERATE_MEMBER_DETECTOR macro --- STL_Extension/include/CGAL/Has_member.h | 43 +++++++++++++++++++++++++ 1 file changed, 43 insertions(+) create mode 100644 STL_Extension/include/CGAL/Has_member.h diff --git a/STL_Extension/include/CGAL/Has_member.h b/STL_Extension/include/CGAL/Has_member.h new file mode 100644 index 00000000000..f4d243fa8ad --- /dev/null +++ b/STL_Extension/include/CGAL/Has_member.h @@ -0,0 +1,43 @@ +// Copyright (c) 2017 Inria (France) +// All rights reserved. +// +// This file is part of CGAL (www.cgal.org); you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public License as +// published by the Free Software Foundation; either version 3 of the License, +// or (at your option) any later version. +// +// Licensees holding a valid commercial license may use this file in +// accordance with the commercial license agreement provided with the software. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. +// +// +// +// Author(s) : Clement Jamin + +#ifndef CGAL_HAS_MEMBER_H +#define CGAL_HAS_MEMBER_H + +// Macro used to check if a type T has a member named `X` +// It generates a class has_X where has_X::value is a boolean +// See example in Concurrent_compact_container.h +#define CGAL_GENERATE_MEMBER_DETECTOR(X) \ +template class has_##X { \ + struct Fallback { int X; }; \ + struct Derived : T, Fallback { }; \ + \ + template struct Check; \ + \ + typedef char ArrayOfOne[1]; \ + typedef char ArrayOfTwo[2]; \ + \ + template static ArrayOfOne & func( \ + Check *); \ + template static ArrayOfTwo & func(...); \ + public: \ + typedef has_##X type; \ + enum { value = sizeof(func(0)) == 2 }; \ +} // semicolon is after the macro call + +#endif // CGAL_HAS_MEMBER_H From ef6a6af122fb754a618a4aeb5261dee4a59cb6db Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mael=20Rouxel-Labb=C3=A9?= Date: Fri, 3 Aug 2018 14:21:17 +0200 Subject: [PATCH 029/268] Made STL reader compatible with SequenceContainers It's useful to not be constrained to cpp11::arrays when the polygon soup is to be processed through reparation functions (for example) --- .../IO/facets_in_complex_3_to_triangle_mesh.h | 2 +- Polyhedron_IO/include/CGAL/IO/OFF_reader.h | 37 ++------ Polyhedron_IO/include/CGAL/IO/STL_reader.h | 73 +++++++++------ .../include/CGAL/IO/reader_helpers.h | 90 +++++++++++++++++++ 4 files changed, 145 insertions(+), 57 deletions(-) create mode 100644 Polyhedron_IO/include/CGAL/IO/reader_helpers.h diff --git a/Mesh_3/include/CGAL/IO/facets_in_complex_3_to_triangle_mesh.h b/Mesh_3/include/CGAL/IO/facets_in_complex_3_to_triangle_mesh.h index dd4f88ab26d..7fd025f7a73 100644 --- a/Mesh_3/include/CGAL/IO/facets_in_complex_3_to_triangle_mesh.h +++ b/Mesh_3/include/CGAL/IO/facets_in_complex_3_to_triangle_mesh.h @@ -54,7 +54,7 @@ void resize(Polygon& p, std::size_t size) template void resize(CGAL::cpp11::array&, std::size_t CGAL_assertion_code(size)) { - CGAL_assertion(size >= N); + CGAL_assertion(size == N); } template diff --git a/Polyhedron_IO/include/CGAL/IO/OFF_reader.h b/Polyhedron_IO/include/CGAL/IO/OFF_reader.h index 17741fe1933..d1d5ddf502c 100644 --- a/Polyhedron_IO/include/CGAL/IO/OFF_reader.h +++ b/Polyhedron_IO/include/CGAL/IO/OFF_reader.h @@ -21,6 +21,7 @@ #define CGAL_IO_OFF_READER_H #include +#include #include #include @@ -28,33 +29,7 @@ #include #include -namespace CGAL{ - - namespace read_OFF_internal{ - template - void fill_point(double x, double y, double z, Point_3& pt) - { - pt = Point_3(x, y, z); - } - - void fill_point(double x, double y, double z, CGAL::cpp11::array& p) - { - p = CGAL::make_array(x,y,z); - } - - template - void resize(Polygon_3& p, std::size_t size) - { - p.resize(size); - } - - template - void resize(CGAL::cpp11::array&, std::size_t size) - { - CGAL_USE(size); - CGAL_assertion( size>=N ); - } - } +namespace CGAL { template bool @@ -71,7 +46,7 @@ namespace CGAL{ double x, y, z, w; scanner.scan_vertex( x, y, z, w); CGAL_assertion(w!=0); - read_OFF_internal::fill_point( x/w, y/w, z/w, points[i] ); + IO::internal::fill_point( x/w, y/w, z/w, points[i] ); scanner.skip_to_next_vertex( i); } if(!in) @@ -81,7 +56,7 @@ namespace CGAL{ std::size_t no; scanner.scan_facet( no, i); - read_OFF_internal::resize(polygons[i], no); + IO::internal::resize(polygons[i], no); for(std::size_t j = 0; j < no; ++j) { std::size_t id; scanner.scan_facet_vertex_index(id, i); @@ -114,7 +89,7 @@ namespace CGAL{ double x, y, z, w; scanner.scan_vertex( x, y, z, w); CGAL_assertion(w!=0); - read_OFF_internal::fill_point( x/w, y/w, z/w, points[i] ); + IO::internal::fill_point( x/w, y/w, z/w, points[i] ); if(scanner.has_colors()) { unsigned char r=0, g=0, b=0; @@ -131,7 +106,7 @@ namespace CGAL{ std::size_t no; scanner.scan_facet( no, i); - read_OFF_internal::resize(polygons[i], no); + IO::internal::resize(polygons[i], no); for(std::size_t j = 0; j < no; ++j) { std::size_t id; scanner.scan_facet_vertex_index(id, i); diff --git a/Polyhedron_IO/include/CGAL/IO/STL_reader.h b/Polyhedron_IO/include/CGAL/IO/STL_reader.h index 5bf8cde0059..34f0938af36 100644 --- a/Polyhedron_IO/include/CGAL/IO/STL_reader.h +++ b/Polyhedron_IO/include/CGAL/IO/STL_reader.h @@ -21,8 +21,8 @@ #ifndef CGAL_IO_STL_READER_H #define CGAL_IO_STL_READER_H -#include #include +#include #include @@ -34,11 +34,12 @@ namespace CGAL { +template bool read_ASCII_facet(std::istream& input, - std::vector >& points, - std::vector >& facets, + std::vector& points, + std::vector& facets, int& index, - std::map, int >& index_map, + std::map& index_map, bool verbose = false) { // Here, we have already read the word 'facet' and are looking to read till 'endfacet' @@ -48,8 +49,10 @@ bool read_ASCII_facet(std::istream& input, endfacet("endfacet"); int count = 0; - cpp11::array p; - cpp11::array ijk; + double x,y,z; + Point p; + Triangle ijk; + IO::internal::resize(ijk, 3); while(input >> s) { @@ -76,7 +79,7 @@ bool read_ASCII_facet(std::istream& input, return false; } - if(!(input >> iformat(p[0]) >> iformat(p[1]) >> iformat(p[2]))) + if(!(input >> iformat(x) >> iformat(y) >> iformat(z))) { if(verbose) std::cerr << "Error while reading point coordinates (premature end of file)" << std::endl; @@ -85,8 +88,8 @@ bool read_ASCII_facet(std::istream& input, } else { - std::map, int>::iterator iti= - index_map.insert(std::make_pair(p, -1)).first; + IO::internal::fill_point(x, y, z, p); + typename std::map::iterator iti = index_map.insert(std::make_pair(p, -1)).first; if(iti->second == -1) { @@ -110,9 +113,10 @@ bool read_ASCII_facet(std::istream& input, return false; } +template bool parse_ASCII_STL(std::istream& input, - std::vector >& points, - std::vector >& facets, + std::vector& points, + std::vector& facets, bool verbose = false) { if(verbose) @@ -124,11 +128,9 @@ bool parse_ASCII_STL(std::istream& input, // Here, we have already read the word 'solid' int index = 0; - std::map, int> index_map; + std::map index_map; - std::string s; - std::string facet("facet"), - endsolid("endsolid"); + std::string s, facet("facet"), endsolid("endsolid"); while(input >> s) { @@ -149,9 +151,10 @@ bool parse_ASCII_STL(std::istream& input, return false; } +template bool parse_binary_STL(std::istream& input, - std::vector >& points, - std::vector >& facets, + std::vector& points, + std::vector& facets, bool verbose = false) { if(verbose) @@ -190,7 +193,7 @@ bool parse_binary_STL(std::istream& input, return true; // empty file int index = 0; - std::map, int> index_map; + std::map index_map; boost::uint32_t N32; if(!(input.read(reinterpret_cast(&N32), sizeof(N32)))) @@ -218,7 +221,8 @@ bool parse_binary_STL(std::istream& input, return false; } - cpp11::array ijk; + Triangle ijk; + IO::internal::resize(ijk, 3); for(int j=0; j<3; ++j) { @@ -233,11 +237,10 @@ bool parse_binary_STL(std::istream& input, return false; } - cpp11::array p; - p[0] = x; p[1] = y; p[2] = z; + Point p; + IO::internal::fill_point(x, y, z, p); - std::map, int>::iterator iti = - index_map.insert(std::make_pair(p, -1)).first; + typename std::map::iterator iti = index_map.insert(std::make_pair(p, -1)).first; if(iti->second == -1) { @@ -268,9 +271,29 @@ bool parse_binary_STL(std::istream& input, return true; } +// +// Read a file with `.stl` format. +// +// \tparam Point must be a model of the concept `RandomAccessContainer` or a %CGAL point type +// \tparam Triangle must be a model of the concept `RandomAccessContainer` +// +// \param input the input stream +// \param points a container that will contain the points used in the .stl file +// \param polygons a container that will contain the triangles used in the .stl file +// \param verbose whether to enable or not a sanity log +// +// \returns `true` if the reading process went well, `false` otherwise +// +// \warning `points` and `facets` are not cleared: new points and triangles are added to the back +// of the containers. +// +// Although the STL file format uses triangles, it is convenient to be able to use vectors +// and other models of the `SequenceContainer` (instead of arrays) for the face type, +// to avoid having to convert the to apply polygon soup reparation algorithms. +template bool read_STL(std::istream& input, - std::vector >& points, - std::vector >& facets, + std::vector& points, + std::vector& facets, bool verbose = false) { int pos = 0; diff --git a/Polyhedron_IO/include/CGAL/IO/reader_helpers.h b/Polyhedron_IO/include/CGAL/IO/reader_helpers.h new file mode 100644 index 00000000000..7e6ebeb89ad --- /dev/null +++ b/Polyhedron_IO/include/CGAL/IO/reader_helpers.h @@ -0,0 +1,90 @@ +// Copyright (c) 2015 GeometryFactory +// +// This file is part of CGAL (www.cgal.org); you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public License as +// published by the Free Software Foundation; either version 3 of the License, +// or (at your option) any later version. +// +// Licensees holding a valid commercial license may use this file in +// accordance with the commercial license agreement provided with the software. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. +// +// $URL$ +// $Id$ +// SPDX-License-Identifier: LGPL-3.0+ +// +// Author(s) : Mael Rouxel-Labbé + +#ifndef CGAL_IO_READER_HELPERS_H +#define CGAL_IO_READER_HELPERS_H + +#include +#include +#include + +#include +#include + +namespace CGAL{ + +namespace IO { + +namespace internal { + +CGAL_GENERATE_MEMBER_DETECTOR(size); +CGAL_GENERATE_MEMBER_DETECTOR(resize); + +// Typical container +template +void resize(Container& c, std::size_t size, + typename boost::enable_if_c::value>::type* = NULL) +{ + c.resize(size); +} + +// Container without a resize() function, but with a size() function (e.g. an array) +template +void resize(Container& CGAL_assertion_code(array), std::size_t CGAL_assertion_code(size), + typename boost::enable_if< + boost::mpl::and_< + boost::mpl::not_ >, + has_size > >::type* = NULL) +{ + CGAL_assertion(array.size() == size); +} + +// A class with neither resize() nor size(), can't enforce size (it better be correct!) +template +void resize(Container&, std::size_t, + typename boost::disable_if< + boost::mpl::or_, + has_size > >::type* = NULL) +{ +} + +// Ideally this should be a std::is_constructible(double, double, double) but boost::is_constructible +// is not safe to use without CXX11 +template +void fill_point(const double x, const double y, const double z, CGAL::Point_3& pt) +{ + pt = CGAL::Point_3(x, y, z); +} + +template +void fill_point(const double x, const double y, const double z, Point_3& pt) +{ + // just in case something weirder than arrays or CGAL points are used as points... + resize(pt, 3); + + pt[0] = x; pt[1] = y; pt[2] = z; +} + +} // end namespace internal + +} // end namespace IO + +} // namespace CGAL + +#endif // CGAL_IO_READER_HELPERS_H From 31246ab517288bc52ae0d9865a2cce7a6449fda6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mael=20Rouxel-Labb=C3=A9?= Date: Fri, 3 Aug 2018 14:24:34 +0200 Subject: [PATCH 030/268] Test the STL reader a bit more thoroughly --- Polyhedron_IO/test/Polyhedron_IO/stl2off.cpp | 68 ++++++++++++-------- 1 file changed, 40 insertions(+), 28 deletions(-) diff --git a/Polyhedron_IO/test/Polyhedron_IO/stl2off.cpp b/Polyhedron_IO/test/Polyhedron_IO/stl2off.cpp index f12ad5fd6d6..79f1f55226e 100644 --- a/Polyhedron_IO/test/Polyhedron_IO/stl2off.cpp +++ b/Polyhedron_IO/test/Polyhedron_IO/stl2off.cpp @@ -1,53 +1,65 @@ -#include -#include -#include +#include +#include +#include + +#include #include #include #include +template void read(const char* fname, std::size_t v, std::size_t f) { std::cout << "Reading "<< fname << std::endl; std::ifstream input(fname, std::ios::in | std::ios::binary); - std::vector< CGAL::cpp11::array > points; - std::vector< CGAL::cpp11::array > faces; + std::cout << "Types: " << std::endl; + std::cout << typeid(Point_type).name() << std::endl; + std::cout << typeid(Polygon_type).name() << std::endl; - CGAL::read_STL( input, - points, - faces, - true); + std::cout << "Expecting " << v << " vertices and " << f << " triangles" << std::endl; - assert(points.size() == v); - assert(faces.size() == f); + std::vector points; + std::vector faces; + assert(CGAL::read_STL(input, points, faces, true)); std::cout << "OFF version of file " << fname << std::endl; - std::cout.precision(17); std::cout << "OFF\n" << points.size() << " " << faces.size() << " 0" << std::endl; - for(std::size_t i=0; i < points.size(); i++){ + for(std::size_t i=0; i < points.size(); i++) std::cout << points[i][0] << " " << points[i][1] << " " << points[i][2]<< std::endl; - } - for(std::size_t i=0; i < faces.size(); i++){ + for(std::size_t i=0; i < faces.size(); i++) std::cout << "3 " << faces[i][0] << " " << faces[i][1] << " " << faces[i][2] << std::endl; - } + + assert(points.size() == v); + assert(faces.size() == f); } - -int main() +int main(int, char**) { - read("data/cube.stl", 8, 12); - read("data/triangle.stl", 3, 1); + std::cout.precision(17); - read("data/ascii-tetrahedron.stl", 4, 4); - read("data/binary-tetrahedron-nice-header.stl", 4, 4); - read("data/binary-tetrahedron-non-standard-header-1.stl", 4, 4); - read("data/binary-tetrahedron-non-standard-header-2.stl", 4, 4); - read("data/binary-tetrahedron-non-standard-header-3.stl", 4, 4); - read("data/binary-tetrahedron-non-standard-header-4.stl", 4, 4); - read("data/binary-tetrahedron-non-standard-header-5.stl", 4, 4); + // bunch of types to test + typedef CGAL::cpp11::array Point_type_1; + typedef CGAL::Exact_predicates_exact_constructions_kernel::Point_3 Point_type_2; + typedef std::basic_string Point_type_3; - return 0; + typedef CGAL::cpp11::array Polygon_type_1; + typedef std::vector Polygon_type_2; + typedef std::basic_string Polygon_type_3; + + read("data/cube.stl", 8, 12); + read("data/triangle.stl", 3, 1); + + read("data/ascii-tetrahedron.stl", 4, 4); + read("data/binary-tetrahedron-nice-header.stl", 4, 4); + read("data/binary-tetrahedron-non-standard-header-1.stl", 4, 4); + read("data/binary-tetrahedron-non-standard-header-2.stl", 4, 4); + read("data/binary-tetrahedron-non-standard-header-3.stl", 4, 4); + read("data/binary-tetrahedron-non-standard-header-4.stl", 4, 4); + read("data/binary-tetrahedron-non-standard-header-5.stl", 4, 4); + + return EXIT_SUCCESS; } From 56642a96ffdb309bc8e398e8de43371aef205550 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mael=20Rouxel-Labb=C3=A9?= Date: Fri, 3 Aug 2018 15:10:01 +0200 Subject: [PATCH 031/268] Replaced dynamic property map with an unordered set --- .../CGAL/Polygon_mesh_processing/stitch_borders.h | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/stitch_borders.h b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/stitch_borders.h index 5fc67f2e16a..49d0977d544 100644 --- a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/stitch_borders.h +++ b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/stitch_borders.h @@ -37,6 +37,7 @@ #include #include #include +#include #include #include @@ -628,8 +629,7 @@ std::size_t stitch_boundary_cycles(PolygonMesh& pm, // \ / // v3------v4 // so we mark which edges have been stitched - typedef CGAL::internal::Dynamic_property_map Halfedge_status_pmap; - Halfedge_status_pmap stitched_hedges(false); + cpp11::unordered_set stitched_hedges; BOOST_FOREACH(halfedge_descriptor h, boundary_cycles) { @@ -647,7 +647,7 @@ std::size_t stitch_boundary_cycles(PolygonMesh& pm, { halfedge_descriptor h = stitching_starting_points[i]; - if(get(stitched_hedges, h)) // already treated + if(stitched_hedges.count(h) > 0) // already treated continue; std::vector > hedges_to_stitch; @@ -657,8 +657,8 @@ std::size_t stitch_boundary_cycles(PolygonMesh& pm, do { hedges_to_stitch.push_back(std::make_pair(h, hn)); - put(stitched_hedges, h, true); - put(stitched_hedges, hn, true); + stitched_hedges.insert(h); + stitched_hedges.insert(hn); if(next(hn, pm) == h) break; From e994e2b6685042508ef9650820de331d99827cb5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mael=20Rouxel-Labb=C3=A9?= Date: Fri, 3 Aug 2018 16:28:38 +0200 Subject: [PATCH 032/268] Added SPDX license identifier --- STL_Extension/include/CGAL/Has_member.h | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/STL_Extension/include/CGAL/Has_member.h b/STL_Extension/include/CGAL/Has_member.h index f4d243fa8ad..d35faad9448 100644 --- a/STL_Extension/include/CGAL/Has_member.h +++ b/STL_Extension/include/CGAL/Has_member.h @@ -12,7 +12,9 @@ // This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE // WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. // -// +// $URL$ +// $Id$ +// SPDX-License-Identifier: LGPL-3.0+ // // Author(s) : Clement Jamin From 20984e10424a963bae7709730455311542ec6f3e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mael=20Rouxel-Labb=C3=A9?= Date: Tue, 7 Aug 2018 08:56:23 +0200 Subject: [PATCH 033/268] Modified comment to avoid using '\' --- .../CGAL/Polygon_mesh_processing/stitch_borders.h | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/stitch_borders.h b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/stitch_borders.h index 49d0977d544..e5505245b73 100644 --- a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/stitch_borders.h +++ b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/stitch_borders.h @@ -623,11 +623,11 @@ std::size_t stitch_boundary_cycles(PolygonMesh& pm, // A boundary cycle might need to be stitched starting from different extremities // - // v11 ----v10 - // / \ - // v0 === v1(v13) === v2(v12) v5(v9) === v6(v8) === v7 - // \ / - // v3------v4 + // v11 ------ v10 + // | | + // v0 --- v1(v13) === v2(v12) v5(v9) === v6(v8) --- v7 + // | | + // v3 ------- v4 // so we mark which edges have been stitched cpp11::unordered_set stitched_hedges; From f30c89c40f86635ab19a5f97f142496272779a05 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mael=20Rouxel-Labb=C3=A9?= Date: Tue, 7 Aug 2018 09:12:49 +0200 Subject: [PATCH 034/268] Added some missing includes --- .../include/CGAL/Polygon_mesh_processing/repair_polygon_soup.h | 1 + .../test/Polygon_mesh_processing/test_repair_polygon_soup.cpp | 3 ++- 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/repair_polygon_soup.h b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/repair_polygon_soup.h index 6b421315b4a..9f78f219666 100644 --- a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/repair_polygon_soup.h +++ b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/repair_polygon_soup.h @@ -39,6 +39,7 @@ #include #include #include +#include #include #include diff --git a/Polygon_mesh_processing/test/Polygon_mesh_processing/test_repair_polygon_soup.cpp b/Polygon_mesh_processing/test/Polygon_mesh_processing/test_repair_polygon_soup.cpp index 63a3473095f..4de93325030 100644 --- a/Polygon_mesh_processing/test/Polygon_mesh_processing/test_repair_polygon_soup.cpp +++ b/Polygon_mesh_processing/test/Polygon_mesh_processing/test_repair_polygon_soup.cpp @@ -1,4 +1,4 @@ -#define CGAL_PMP_REPAIR_POLYGON_SOUP_VERBOSE_PP +#define CGAL_PMP_REPAIR_POLYGON_SOUP_VERBOSE_PP #include @@ -7,6 +7,7 @@ #include #include +#include #include #include #include From ab9b0479b36f4f956eabcb4b1b6b7a3bd0f2720c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mael=20Rouxel-Labb=C3=A9?= Date: Fri, 17 Aug 2018 15:32:26 +0200 Subject: [PATCH 035/268] Removed unnecessary 'do_' in named parameters --- BGL/include/CGAL/boost/graph/parameters_interface.h | 4 ++-- BGL/test/BGL/test_cgal_bgl_named_params.cpp | 12 ++++++------ .../doc/Polygon_mesh_processing/NamedParameters.txt | 4 ++-- .../Polygon_mesh_processing/repair_polygon_soup.h | 12 ++++++------ .../test_repair_polygon_soup.cpp | 8 ++++---- 5 files changed, 20 insertions(+), 20 deletions(-) diff --git a/BGL/include/CGAL/boost/graph/parameters_interface.h b/BGL/include/CGAL/boost/graph/parameters_interface.h index 97126bdf358..6559e3c0511 100644 --- a/BGL/include/CGAL/boost/graph/parameters_interface.h +++ b/BGL/include/CGAL/boost/graph/parameters_interface.h @@ -78,8 +78,8 @@ CGAL_add_named_parameter(projection_functor_t, projection_functor, projection_fu CGAL_add_named_parameter(throw_on_self_intersection_t, throw_on_self_intersection, throw_on_self_intersection) CGAL_add_named_parameter(clip_volume_t, clip_volume, clip_volume) CGAL_add_named_parameter(use_compact_clipper_t, use_compact_clipper, use_compact_clipper) -CGAL_add_named_parameter(do_erase_all_duplicates_t, do_erase_all_duplicates, do_erase_all_duplicates) -CGAL_add_named_parameter(do_require_same_orientation_t, do_require_same_orientation, do_require_same_orientation) +CGAL_add_named_parameter(erase_all_duplicates_t, erase_all_duplicates, erase_all_duplicates) +CGAL_add_named_parameter(require_same_orientation_t, require_same_orientation, require_same_orientation) // List of named parameters that we use in the package 'Surface Mesh Simplification' CGAL_add_named_parameter(get_cost_policy_t, get_cost_policy, get_cost) diff --git a/BGL/test/BGL/test_cgal_bgl_named_params.cpp b/BGL/test/BGL/test_cgal_bgl_named_params.cpp index 1278ff54531..4525dd69657 100644 --- a/BGL/test/BGL/test_cgal_bgl_named_params.cpp +++ b/BGL/test/BGL/test_cgal_bgl_named_params.cpp @@ -85,8 +85,8 @@ void test(const NamedParameters& np) assert(get_param(np, CGAL::internal_np::throw_on_self_intersection).v == 43); assert(get_param(np, CGAL::internal_np::clip_volume).v == 44); assert(get_param(np, CGAL::internal_np::use_compact_clipper).v == 45); - assert(get_param(np, CGAL::internal_np::do_erase_all_duplicates).v == 47); - assert(get_param(np, CGAL::internal_np::do_require_same_orientation).v == 48); + assert(get_param(np, CGAL::internal_np::erase_all_duplicates).v == 47); + assert(get_param(np, CGAL::internal_np::require_same_orientation).v == 48); // Named parameters that we use in the package 'Surface Mesh Simplification' assert(get_param(np, CGAL::internal_np::get_cost_policy).v == 34); @@ -163,8 +163,8 @@ void test(const NamedParameters& np) check_same_type<43>(get_param(np, CGAL::internal_np::throw_on_self_intersection)); check_same_type<44>(get_param(np, CGAL::internal_np::clip_volume)); check_same_type<45>(get_param(np, CGAL::internal_np::use_compact_clipper)); - check_same_type<47>(get_param(np, CGAL::internal_np::do_erase_all_duplicates)); - check_same_type<48>(get_param(np, CGAL::internal_np::do_require_same_orientation)); + check_same_type<47>(get_param(np, CGAL::internal_np::erase_all_duplicates)); + check_same_type<48>(get_param(np, CGAL::internal_np::require_same_orientation)); // Named parameters that we use in the package 'Surface Mesh Simplification' check_same_type<34>(get_param(np, CGAL::internal_np::get_cost_policy)); @@ -242,8 +242,8 @@ int main() .clip_volume(A<44>(44)) .use_compact_clipper(A<45>(45)) .apply_per_connected_component(A<46>(46)) - .do_erase_all_duplicates(A<47>(47)) - .do_require_same_orientation(A<48>(48)) + .erase_all_duplicates(A<47>(47)) + .require_same_orientation(A<48>(48)) ); return EXIT_SUCCESS; diff --git a/Polygon_mesh_processing/doc/Polygon_mesh_processing/NamedParameters.txt b/Polygon_mesh_processing/doc/Polygon_mesh_processing/NamedParameters.txt index 2a7faa3bc19..eaf310e91af 100644 --- a/Polygon_mesh_processing/doc/Polygon_mesh_processing/NamedParameters.txt +++ b/Polygon_mesh_processing/doc/Polygon_mesh_processing/NamedParameters.txt @@ -364,7 +364,7 @@ should be considered as part of the clipping volume or not. Default: `true` \cgalNPEnd -\cgalNPBegin{do_erase_all_duplicates} \anchor PMP_do_erase_all_duplicates +\cgalNPBegin{erase_all_duplicates} \anchor PMP_erase_all_duplicates Parameter used in the function `merge_duplicate_polygons_in_polygon_soup()` to indicate, when multiple faces are duplicates, whether all the duplicate faces should be removed or if one (arbitrarily chosen) face should be kept. @@ -373,7 +373,7 @@ or if one (arbitrarily chosen) face should be kept. Default: `false` \cgalNPEnd -\cgalNPBegin{do_require_same_orientation} \anchor PMP_do_require_same_orientation +\cgalNPBegin{require_same_orientation} \anchor PMP_require_same_orientation Parameter used in the function `merge_duplicate_polygons_in_polygon_soup()` to indicate if orientation should matter when determining whether two faces are duplicates. \n diff --git a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/repair_polygon_soup.h b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/repair_polygon_soup.h index 9f78f219666..1796517c74e 100644 --- a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/repair_polygon_soup.h +++ b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/repair_polygon_soup.h @@ -865,11 +865,11 @@ DuplicateOutputIterator collect_duplicate_polygons(const PointRange& points, /// The traits class must provide the nested functor `Less_xyz_3` /// to compare lexicographically two points a function `Less_xyz_3 less_xyz_3_object()`. /// \cgalParamEnd -/// \cgalParamBegin{do_erase_all_duplicates} +/// \cgalParamBegin{erase_all_duplicates} /// Parameter to indicate, when multiple polygons are duplicates, whether all the duplicate polygons /// should be removed or if one (arbitrarily chosen) face should be kept. %Default is `false`. /// \cgalParamEnd -/// \cgalParamBegin{do_require_same_orientation} +/// \cgalParamBegin{require_same_orientation} /// Parameter to indicate if polygon orientation should be taken into account when determining /// whether two polygons are duplicates, that is, whether e.g. the triangles `0,1,2` and `0,2,1` /// are duplicates. %Default is `false`. @@ -888,8 +888,8 @@ std::size_t merge_duplicate_polygons_in_polygon_soup(const PointRange& points, typedef typename internal::Polygon_types::P_ID P_ID; - const bool erase_all_duplicates = choose_param(get_param(np, internal_np::do_erase_all_duplicates), false); - const bool same_orientation = choose_param(get_param(np, internal_np::do_require_same_orientation), false); + const bool erase_all_duplicates = choose_param(get_param(np, internal_np::erase_all_duplicates), false); + const bool same_orientation = choose_param(get_param(np, internal_np::require_same_orientation), false); #ifdef CGAL_PMP_REPAIR_POLYGON_SOUP_VERBOSE_PP std::cout << "Only polygons with the same orientation are duplicates: " << std::boolalpha << same_orientation << std::endl; @@ -987,12 +987,12 @@ std::size_t merge_duplicate_polygons_in_polygon_soup(PointRange& points, /// /// and, for each functor `Foo`, a function `Foo foo_object()`. /// \cgalParamEnd -/// \cgalParamBegin{do_erase_all_duplicates} +/// \cgalParamBegin{erase_all_duplicates} /// Parameter forwarded to the function `merge_duplicate_polygons_in_polygon_soup()` to indicate, /// when multiple polygons are duplicates, whether all the duplicate polygons /// should be removed or if one (arbitrarily chosen) face should be kept. %Default is `false`. /// \cgalParamEnd -/// \cgalParamBegin{do_require_same_orientation} +/// \cgalParamBegin{require_same_orientatio /// Parameter forwarded to the function `merge_duplicate_polygons_in_polygon_soup()` /// to indicate if polygon orientation should be taken into account when determining whether /// two polygons are duplicates, that is, whether e.g. the triangles `0,1,2` and `0,2,1` are duplicates. diff --git a/Polygon_mesh_processing/test/Polygon_mesh_processing/test_repair_polygon_soup.cpp b/Polygon_mesh_processing/test/Polygon_mesh_processing/test_repair_polygon_soup.cpp index 4de93325030..006f4dc3f0e 100644 --- a/Polygon_mesh_processing/test/Polygon_mesh_processing/test_repair_polygon_soup.cpp +++ b/Polygon_mesh_processing/test/Polygon_mesh_processing/test_repair_polygon_soup.cpp @@ -265,14 +265,14 @@ void test_merge_duplicate_polygons(const bool /*verbose*/ = false) // Remove all duplicates polygons_copy = polygons; res = PMP::merge_duplicate_polygons_in_polygon_soup(points, polygons_copy, - params::do_erase_all_duplicates(true) - .do_require_same_orientation(false)); + params::erase_all_duplicates(true) + .require_same_orientation(false)); assert(res == 5 && polygons_copy.size() == 1); // Remove all duplicates but different orientations are different polygons res = PMP::merge_duplicate_polygons_in_polygon_soup(points, polygons, - params::do_erase_all_duplicates(true) - .do_require_same_orientation(true)); + params::erase_all_duplicates(true) + .require_same_orientation(true)); assert(res == 2 && polygons.size() == 4); } From 834f90b4c14ddab29f01e27e0015dbdea9a4e886 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mael=20Rouxel-Labb=C3=A9?= Date: Fri, 17 Aug 2018 15:33:42 +0200 Subject: [PATCH 036/268] Fixed typo --- .../doc/Polygon_mesh_processing/Polygon_mesh_processing.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Polygon_mesh_processing/doc/Polygon_mesh_processing/Polygon_mesh_processing.txt b/Polygon_mesh_processing/doc/Polygon_mesh_processing/Polygon_mesh_processing.txt index 5795a4a4a3b..8dbb6d4d80c 100644 --- a/Polygon_mesh_processing/doc/Polygon_mesh_processing/Polygon_mesh_processing.txt +++ b/Polygon_mesh_processing/doc/Polygon_mesh_processing/Polygon_mesh_processing.txt @@ -479,7 +479,7 @@ and geometrical errors. This package offers the following functions: as well as the function `CGAL::Polygon_mesh_processing::repair_polygon_soup()`, which bundles the previous functions and an additional handful of repairing techniques -to obtain an as-clean-as-possible pol soup. +to obtain an as-clean-as-possible polygon soup. \subsection Stitching From 781708e942b9d801d1a1bc78a86a83890f757203 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mael=20Rouxel-Labb=C3=A9?= Date: Fri, 17 Aug 2018 16:30:03 +0200 Subject: [PATCH 037/268] Replaced call to stitch_boundary_cycle_2 by the stronger version --- .../Polygon_mesh_processing/stitch_borders.h | 41 +------------------ 1 file changed, 1 insertion(+), 40 deletions(-) diff --git a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/stitch_borders.h b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/stitch_borders.h index e5505245b73..b462e6b44ef 100644 --- a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/stitch_borders.h +++ b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/stitch_borders.h @@ -528,45 +528,6 @@ void stitch_borders_impl(PM& pmesh, run_stitch_borders(pmesh, to_stitch, uf_vertices, uf_handles); } -template -void stitch_boundary_cycle_2(PM& pmesh) -{ - typedef typename boost::graph_traits::halfedge_descriptor halfedge_descriptor; - - std::vector cycles; - BOOST_FOREACH(halfedge_descriptor hd, halfedges(pmesh)) - { - if ( is_border(hd, pmesh) ) - { - if ( hd < next(hd, pmesh) && next(next(hd, pmesh), pmesh) == hd ) - { - cycles.push_back(hd); - } - } - } - - BOOST_FOREACH(halfedge_descriptor hd, cycles) - { - halfedge_descriptor nhd = next(hd, pmesh); - - //nhd and its opposite will be removed - //update face pointer - set_face(hd, face(opposite(nhd, pmesh), pmesh), pmesh); - set_halfedge(face(hd, pmesh), hd, pmesh); - //update next/prev pointers - halfedge_descriptor tmp = prev(opposite(nhd, pmesh), pmesh); - set_next(tmp, hd, pmesh); - tmp = next(opposite(nhd, pmesh), pmesh); - set_next(hd, tmp, pmesh); - //update vertex pointers - set_halfedge(source(hd, pmesh), opposite(hd, pmesh), pmesh); - set_halfedge(target(hd, pmesh), hd, pmesh); - - // remove the extra halfedges - remove_edge(edge(nhd, pmesh), pmesh); - } -} - // @todo @tmp This is added by #3201 and should thus be removed template OutputIterator extract_boundary_cycles(PolygonMesh& pm, @@ -764,7 +725,7 @@ void stitch_borders(PolygonMesh& pmesh, const CGAL_PMP_NP_CLASS& np) vpm, np); stitch_borders(pmesh, hedge_pairs_to_stitch); - internal::stitch_boundary_cycle_2(pmesh); + internal::stitch_boundary_cycles(pmesh, np); } From 900ad1116671d2fdc35666fb8de64efc9582027d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mael=20Rouxel-Labb=C3=A9?= Date: Fri, 17 Aug 2018 16:45:33 +0200 Subject: [PATCH 038/268] Added new example to examples.txt --- Polygon_mesh_processing/doc/Polygon_mesh_processing/examples.txt | 1 + 1 file changed, 1 insertion(+) diff --git a/Polygon_mesh_processing/doc/Polygon_mesh_processing/examples.txt b/Polygon_mesh_processing/doc/Polygon_mesh_processing/examples.txt index 2811a37ecef..4e458b9aaef 100644 --- a/Polygon_mesh_processing/doc/Polygon_mesh_processing/examples.txt +++ b/Polygon_mesh_processing/doc/Polygon_mesh_processing/examples.txt @@ -21,4 +21,5 @@ \example Polygon_mesh_processing/corefinement_mesh_union_and_intersection.cpp \example Polygon_mesh_processing/corefinement_consecutive_bool_op.cpp \example Polygon_mesh_processing/detect_features_example.cpp +\example Polygon_mesh_processing/repair_polygon_soup_example.cpp */ From 31393d087966eaf1822d4eb437529390991c1299 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mael=20Rouxel-Labb=C3=A9?= Date: Fri, 17 Aug 2018 16:46:55 +0200 Subject: [PATCH 039/268] Removed useless explicit link --- .../doc/Polygon_mesh_processing/PackageDescription.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Polygon_mesh_processing/doc/Polygon_mesh_processing/PackageDescription.txt b/Polygon_mesh_processing/doc/Polygon_mesh_processing/PackageDescription.txt index d3c0ad13f1f..171b06ce8c2 100644 --- a/Polygon_mesh_processing/doc/Polygon_mesh_processing/PackageDescription.txt +++ b/Polygon_mesh_processing/doc/Polygon_mesh_processing/PackageDescription.txt @@ -126,7 +126,7 @@ and provides a list of the parameters that are used in this package. - `CGAL::Polygon_mesh_processing::merge_duplicate_polygons_in_polygon_soup()` - `CGAL::Polygon_mesh_processing::remove_isolated_points_in_polygon_soup()` - `CGAL::Polygon_mesh_processing::repair_polygon_soup()` -- \link PMP_repairing_grp `CGAL::Polygon_mesh_processing::stitch_borders()` \endlink +- `CGAL::Polygon_mesh_processing::stitch_borders()` - `CGAL::Polygon_mesh_processing::is_polygon_soup_a_polygon_mesh()` - `CGAL::Polygon_mesh_processing::polygon_soup_to_polygon_mesh()` - `CGAL::Polygon_mesh_processing::remove_isolated_vertices()` From 19c99923b2ed7c11f78c4f96b963d97133a7b981 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Loriot?= Date: Fri, 17 Aug 2018 17:09:20 +0200 Subject: [PATCH 040/268] fix typo that was preventing from building the doc --- .../include/CGAL/Polygon_mesh_processing/repair_polygon_soup.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/repair_polygon_soup.h b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/repair_polygon_soup.h index 1796517c74e..3c39086b89f 100644 --- a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/repair_polygon_soup.h +++ b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/repair_polygon_soup.h @@ -992,7 +992,7 @@ std::size_t merge_duplicate_polygons_in_polygon_soup(PointRange& points, /// when multiple polygons are duplicates, whether all the duplicate polygons /// should be removed or if one (arbitrarily chosen) face should be kept. %Default is `false`. /// \cgalParamEnd -/// \cgalParamBegin{require_same_orientatio +/// \cgalParamBegin{require_same_orientation} /// Parameter forwarded to the function `merge_duplicate_polygons_in_polygon_soup()` /// to indicate if polygon orientation should be taken into account when determining whether /// two polygons are duplicates, that is, whether e.g. the triangles `0,1,2` and `0,2,1` are duplicates. From 4385c7cf872107fd70e1de65a2fc54a3f27614a0 Mon Sep 17 00:00:00 2001 From: Maxime Gimeno Date: Mon, 20 Aug 2018 10:42:44 +0200 Subject: [PATCH 041/268] Fix after merge and fix patch_id colors. --- .../Plugins/Classification/CMakeLists.txt | 2 +- .../demo/Polyhedron/Plugins/IO/CMakeLists.txt | 4 +- .../Plugins/IO/Surface_mesh_io_plugin.cpp | 149 ------------------ .../Surface_mesh/Offset_meshing_plugin.cpp | 19 +-- .../demo/Polyhedron/Scene_c3t3_item.cpp | 31 +--- .../Polyhedron/Scene_polygon_soup_item.cpp | 11 +- .../Polyhedron/Scene_surface_mesh_item.cpp | 16 +- 7 files changed, 21 insertions(+), 211 deletions(-) delete mode 100644 Polyhedron/demo/Polyhedron/Plugins/IO/Surface_mesh_io_plugin.cpp diff --git a/Polyhedron/demo/Polyhedron/Plugins/Classification/CMakeLists.txt b/Polyhedron/demo/Polyhedron/Plugins/Classification/CMakeLists.txt index 864e77be256..48ce9e655d1 100644 --- a/Polyhedron/demo/Polyhedron/Plugins/Classification/CMakeLists.txt +++ b/Polyhedron/demo/Polyhedron/Plugins/Classification/CMakeLists.txt @@ -39,7 +39,7 @@ if(EIGEN3_FOUND) endif() target_link_libraries(classification_plugin PUBLIC scene_points_with_normal_item - scene_polylines_item scene_polygon_soup_item scene_surface_mesh_item scene_surface_mesh_selection_item scene_color_ramp ${classification_linked_libraries}) + scene_polylines_item scene_polygon_soup_item scene_surface_mesh_item scene_selection_item scene_color_ramp ${classification_linked_libraries}) target_compile_definitions(classification_plugin PUBLIC ${classification_compile_definitions}) else() message(STATUS "NOTICE: Boost Serialization or IO Streams or ZLIB not found. Classification plugin won't be available.") diff --git a/Polyhedron/demo/Polyhedron/Plugins/IO/CMakeLists.txt b/Polyhedron/demo/Polyhedron/Plugins/IO/CMakeLists.txt index b9ed2a51bdc..45ecd036a1c 100644 --- a/Polyhedron/demo/Polyhedron/Plugins/IO/CMakeLists.txt +++ b/Polyhedron/demo/Polyhedron/Plugins/IO/CMakeLists.txt @@ -11,7 +11,7 @@ polyhedron_demo_plugin(nef_io_plugin Nef_io_plugin) target_link_libraries(nef_io_plugin PUBLIC scene_nef_polyhedron_item) polyhedron_demo_plugin(off_plugin OFF_io_plugin) -target_link_libraries(off_plugin PUBLIC scene_polygon_soup_item scene_points_with_normal_item) +target_link_libraries(off_plugin PUBLIC scene_polygon_soup_item scene_points_with_normal_item scene_surface_mesh_item) polyhedron_demo_plugin(off_to_nef_plugin OFF_to_nef_io_plugin) target_link_libraries(off_to_nef_plugin PUBLIC scene_nef_polyhedron_item) @@ -25,8 +25,6 @@ target_link_libraries(selection_io_plugin PUBLIC scene_selection_item selection_ polyhedron_demo_plugin(stl_plugin STL_io_plugin) target_link_libraries(stl_plugin PUBLIC scene_surface_mesh_item scene_polygon_soup_item) -polyhedron_demo_plugin(surface_mesh_io_plugin Surface_mesh_io_plugin) -target_link_libraries(surface_mesh_io_plugin PUBLIC scene_surface_mesh_item scene_polygon_soup_item) polyhedron_demo_plugin(surf_io_plugin Surf_io_plugin) target_link_libraries(surf_io_plugin PUBLIC scene_surface_mesh_item) diff --git a/Polyhedron/demo/Polyhedron/Plugins/IO/Surface_mesh_io_plugin.cpp b/Polyhedron/demo/Polyhedron/Plugins/IO/Surface_mesh_io_plugin.cpp deleted file mode 100644 index 27b688b21de..00000000000 --- a/Polyhedron/demo/Polyhedron/Plugins/IO/Surface_mesh_io_plugin.cpp +++ /dev/null @@ -1,149 +0,0 @@ -#include -#include -#include - -#include -#include -#include -#include -#include -#include -#include "Scene_surface_mesh_item.h" -#include "Scene_polygon_soup_item.h" -#include "Messages_interface.h" - - -class SurfaceMeshIoPlugin : - public QObject, - public CGAL::Three::Polyhedron_demo_plugin_interface, - public CGAL::Three::Polyhedron_demo_io_plugin_interface -{ - Q_OBJECT - Q_INTERFACES( - CGAL::Three::Polyhedron_demo_plugin_interface - CGAL::Three::Polyhedron_demo_io_plugin_interface -) - Q_PLUGIN_METADATA(IID "com.geometryfactory.PolyhedronDemo.PluginInterface/1.0") - Q_PLUGIN_METADATA(IID "com.geometryfactory.PolyhedronDemo.IOPluginInterface/1.0") -public: - bool isDefaultLoader(const CGAL::Three::Scene_item *item) const - { - if(qobject_cast(item)) - return true; - return false; - } - - void init(QMainWindow*, CGAL::Three::Scene_interface*, Messages_interface* m) - { - this->message = m; - } - bool applicable(QAction*) const - { - return false; - } - QList actions() const - { - return QList(); - } - QString name() const { return "surface_mesh_io_plugin"; } - QString loadNameFilters() const { return "OFF files to Surface_mesh (*.off);;Wavefront Surface_mesh OBJ (*.obj)"; } - QString saveNameFilters() const { return "OFF files (*.off);;Wavefront OBJ (*.obj)"; } - QString nameFilters() const { return QString(); } - bool canLoad() const { return true; } - CGAL::Three::Scene_item* load(QFileInfo fileinfo) { - if(fileinfo.suffix().toLower() == "off") - { - // Open file - std::ifstream in(fileinfo.filePath().toUtf8()); - if(!in) { - message->error(QString("Cannot open file %1").arg((const char*)fileinfo.filePath().toUtf8())); - return NULL; - } - - SMesh *surface_mesh = new SMesh(); - in >> *surface_mesh; - if(!in || surface_mesh->is_empty()) - { - delete surface_mesh; - in.close(); - // Try to read .off in a polygon soup - Scene_polygon_soup_item* soup_item = new Scene_polygon_soup_item(); - soup_item->setName(fileinfo.completeBaseName()); - std::ifstream in2(fileinfo.filePath().toUtf8()); - if(!soup_item->load(in2)) { - message->error(QString("Cannot open file %1").arg((const char*)fileinfo.filePath().toUtf8())); - delete soup_item; - return 0; - } - message->information("The facets don't seem to be oriented. Loading a Soup of polygons instead." - "To convert it to a Surface_mesh or a Polyhedron, use Polygon Mesh Processing -> Orient polygon soup"); - return soup_item; - } - Scene_surface_mesh_item* item = new Scene_surface_mesh_item(surface_mesh); - item->setName(fileinfo.completeBaseName()); - std::size_t isolated_v = 0; - BOOST_FOREACH(vertex_descriptor v, vertices(*surface_mesh)) - { - if(surface_mesh->is_isolated(v)) - { - ++isolated_v; - } - } - if(isolated_v >0) - { - item->setNbIsolatedvertices(isolated_v); - //needs two restore, it's not a typo - QApplication::restoreOverrideCursor(); - QMessageBox::warning((QWidget*)NULL, - tr("Isolated vertices"), - tr("%1 isolated vertices found") - .arg(item->getNbIsolatedvertices())); - } - return item; - } - else if(fileinfo.suffix().toLower() == "obj") - { - // Open file - std::ifstream in(fileinfo.filePath().toUtf8()); - if(!in) { - std::cerr << "Error! Cannot open file " << (const char*)fileinfo.filePath().toUtf8() << std::endl; - return NULL; - } - Scene_surface_mesh_item* item = new Scene_surface_mesh_item(); - if(item->load_obj(in)) - return item; - } - - return 0; - - } - bool canSave(const CGAL::Three::Scene_item* item) { - return qobject_cast(item) != 0; - } - - bool save(const CGAL::Three::Scene_item* item, QFileInfo fileinfo) { - - const Scene_surface_mesh_item* sm_item = - qobject_cast(item); - - if(!sm_item) - return false; - - std::ofstream out(fileinfo.filePath().toUtf8()); - out.precision (std::numeric_limits::digits10 + 2); - - if(fileinfo.suffix().toLower() == "off"){ - return (sm_item && sm_item->save(out)); - } - if(fileinfo.suffix().toLower() == "obj"){ - return (sm_item && sm_item->save_obj(out)); - } - return false; - } - -private: - QList _actions; - //The reference to the main window - Messages_interface* message; -}; -#include "Surface_mesh_io_plugin.moc" diff --git a/Polyhedron/demo/Polyhedron/Plugins/Surface_mesh/Offset_meshing_plugin.cpp b/Polyhedron/demo/Polyhedron/Plugins/Surface_mesh/Offset_meshing_plugin.cpp index 5175dc5a0ef..e24dc713440 100644 --- a/Polyhedron/demo/Polyhedron/Plugins/Surface_mesh/Offset_meshing_plugin.cpp +++ b/Polyhedron/demo/Polyhedron/Plugins/Surface_mesh/Offset_meshing_plugin.cpp @@ -88,7 +88,7 @@ class Polygon_soup_offset_function { const Points* points_vector_ptr; public: typedef Polygon_iterator key_type; - typedef Kernel::Point_3 value_type; + typedef EPICK::Point_3 value_type; typedef value_type reference; typedef boost::readable_property_map_tag category; @@ -109,7 +109,7 @@ class Polygon_soup_offset_function { const Points* points_vector_ptr; public: typedef Polygon_iterator key_type; - typedef Kernel::Triangle_3 value_type; + typedef EPICK::Triangle_3 value_type; typedef value_type reference; typedef boost::readable_property_map_tag category; @@ -163,7 +163,7 @@ class Polygon_soup_offset_function { }; // end struct template AABB_primitive - typedef CGAL::AABB_traits AABB_traits; + typedef CGAL::AABB_traits AABB_traits; typedef CGAL::AABB_tree AABB_tree; std::shared_ptr m_tree_ptr; @@ -186,11 +186,11 @@ public: m_tree_ptr->accelerate_distance_queries(); } - double operator()(const Kernel::Point_3& p) const + double operator()(const EPICK::Point_3& p) const { using CGAL::sqrt; - Kernel::Point_3 closest_point = m_tree_ptr->closest_point(p); + EPICK::Point_3 closest_point = m_tree_ptr->closest_point(p); double distance = sqrt(squared_distance(p, closest_point)); return m_offset_distance - distance; @@ -206,16 +206,11 @@ Scene_surface_mesh_item* make_item(SMesh* sm) return new Scene_surface_mesh_item(sm); } -CGAL::Offset_function +CGAL::Offset_function offset_function(SMesh* surface_mesh_ptr, double offset_value) { return { *surface_mesh_ptr, offset_value }; } -CGAL::Offset_function -offset_function(Polyhedron* polyhedron_ptr, double offset_value) { - return { *polyhedron_ptr, offset_value }; -} - CGAL::Polygon_soup_offset_function offset_function(Scene_polygon_soup_item* item, double offset_value) { return { item, offset_value }; @@ -250,7 +245,7 @@ CGAL::Three::Scene_item* cgal_off_meshing(QWidget*, const double approx, int tag) { - typedef Kernel GT; + typedef EPICK GT; typedef CGAL::Labeled_mesh_domain_3 Mesh_domain; typedef C3t3::Triangulation Tr; typedef CGAL::Mesh_criteria_3 Mesh_criteria; diff --git a/Polyhedron/demo/Polyhedron/Scene_c3t3_item.cpp b/Polyhedron/demo/Polyhedron/Scene_c3t3_item.cpp index 93c1935ba8e..b3237ac696d 100644 --- a/Polyhedron/demo/Polyhedron/Scene_c3t3_item.cpp +++ b/Polyhedron/demo/Polyhedron/Scene_c3t3_item.cpp @@ -32,7 +32,6 @@ #include #include "Scene_polygon_soup_item.h" -#include "Scene_polyhedron_item.h" typedef CGAL::AABB_triangulation_3_triangle_primitive Primitive; @@ -1274,37 +1273,11 @@ double Scene_c3t3_item_priv::complex_diag() const { void Scene_c3t3_item::export_facets_in_complex() { - Polyhedron outmesh; + SMesh outmesh; CGAL::facets_in_complex_3_to_triangle_mesh(c3t3(), outmesh); - Scene_polyhedron_item* item = new Scene_polyhedron_item(std::move(outmesh)); + Scene_surface_mesh_item* item = new Scene_surface_mesh_item(std::move(outmesh)); item->setName(QString("%1_%2").arg(this->name()).arg("facets")); scene->addItem(item); - -<<<<<<< HEAD - namespace PMP = CGAL::Polygon_mesh_processing; - - if (PMP::is_polygon_soup_a_polygon_mesh(polygons)) - { - CGAL_assertion_code(bool orientable = ) - PMP::orient_polygon_soup(points, polygons); - CGAL_assertion(orientable); - - SMesh outmesh; - PMP::polygon_soup_to_polygon_mesh(points, polygons, outmesh); - - Scene_surface_mesh_item* item = new Scene_surface_mesh_item(std::move(outmesh)); - item->setName(QString("%1_%2").arg(this->name()).arg("facets")); - scene->addItem(item); - } - else - { - Scene_polygon_soup_item* soup_item = new Scene_polygon_soup_item; - soup_item->load(points, polygons); - soup_item->setName(QString("%1_%2").arg(this->name()).arg("facets")); - scene->addItem(soup_item); - } -======= ->>>>>>> cgal/master this->setVisible(false); } diff --git a/Polyhedron/demo/Polyhedron/Scene_polygon_soup_item.cpp b/Polyhedron/demo/Polyhedron/Scene_polygon_soup_item.cpp index 4206457120b..8fef5b45607 100644 --- a/Polyhedron/demo/Polyhedron/Scene_polygon_soup_item.cpp +++ b/Polyhedron/demo/Polyhedron/Scene_polygon_soup_item.cpp @@ -206,14 +206,6 @@ Scene_polygon_soup_item_priv::triangulate_polygon(Polygons_iterator pit, int pol EPICK::Vector_3 offset(off.x,off.y,off.z); //Computes the normal of the facet -<<<<<<< HEAD - const Point_3& pa = soup->points[pit->at(0)]; - const Point_3& pb = soup->points[pit->at(1)]; - const Point_3& pc = soup->points[pit->at(2)]; - Traits::Vector_3 normal = CGAL::cross_product(pb-pa, pc -pa); - normal = normal / std::sqrt(normal * normal); - typedef FacetTriangulator FT; -======= Traits::Vector_3 normal = CGAL::NULL_VECTOR; // The three first vertices may be aligned, we need to test other @@ -233,8 +225,7 @@ Scene_polygon_soup_item_priv::triangulate_polygon(Polygons_iterator pit, int pol if (normal == CGAL::NULL_VECTOR) // No normal could be computed, return return; - typedef FacetTriangulator FT; ->>>>>>> cgal/master + typedef FacetTriangulator FT; double diagonal; if(item->diagonalBbox() != std::numeric_limits::infinity()) diff --git a/Polyhedron/demo/Polyhedron/Scene_surface_mesh_item.cpp b/Polyhedron/demo/Polyhedron/Scene_surface_mesh_item.cpp index 7a1d232a3dc..ad5f9c9817a 100644 --- a/Polyhedron/demo/Polyhedron/Scene_surface_mesh_item.cpp +++ b/Polyhedron/demo/Polyhedron/Scene_surface_mesh_item.cpp @@ -233,6 +233,7 @@ struct Scene_surface_mesh_item_priv{ Scene_surface_mesh_item *item; mutable SMesh::Property_map fpatch_id_map; + mutable int min_patch_id; mutable SMesh::Property_map v_selection_map; mutable SMesh::Property_map f_selection_map; mutable SMesh::Property_map::edge_descriptor, bool> e_is_feature_map; @@ -474,8 +475,7 @@ void Scene_surface_mesh_item_priv::compute_elements(Scene_item_rendering_helper: } if(name.testFlag(Scene_item_rendering_helper::COLORS) && - has_fpatch_id && - colors_.empty()){ + has_fpatch_id){ initialize_colors(); } @@ -506,8 +506,10 @@ void Scene_surface_mesh_item_priv::compute_elements(Scene_item_rendering_helper: { if(has_fpatch_id) { - QColor c = item->color_vector()[fpatch_id_map[fd]]; - CGAL::Color color(c.red(), c.green(), c.blue()); + //The sharp features detection produces patch ids >=1, this + //is meant to insure the wanted id is in the range [min,max] + QColor c = item->color_vector()[fpatch_id_map[fd] - min_patch_id]; + CGAL::Color color(c.red(),c.green(),c.blue()); CPF::add_color_in_buffer(color, f_colors); } else if(has_fcolors) @@ -665,14 +667,14 @@ void Scene_surface_mesh_item_priv::initialize_colors() const { // Fill indices map and get max subdomain value int max = 0; - int min = (std::numeric_limits::max)(); + min_patch_id = (std::numeric_limits::max)(); BOOST_FOREACH(face_descriptor fd, faces(*smesh_)){ max = (std::max)(max, fpatch_id_map[fd]); - min = (std::min)(min, fpatch_id_map[fd]); + min_patch_id = (std::min)(min_patch_id, fpatch_id_map[fd]); } colors_.clear(); - compute_color_map(item->color(), (std::max)(0, max + 1 - min), + compute_color_map(item->color(), (std::max)(1, max + 1 - min_patch_id), std::back_inserter(colors_)); } From 154e39fa7538200f045e7f82347b942f003abfeb Mon Sep 17 00:00:00 2001 From: Maxime Gimeno Date: Mon, 20 Aug 2018 10:55:58 +0200 Subject: [PATCH 042/268] Fix Transparency with selection --- Polyhedron/demo/Polyhedron/Scene_polyhedron_selection_item.cpp | 3 --- 1 file changed, 3 deletions(-) diff --git a/Polyhedron/demo/Polyhedron/Scene_polyhedron_selection_item.cpp b/Polyhedron/demo/Polyhedron/Scene_polyhedron_selection_item.cpp index 3adce132ef7..970ad5a77be 100644 --- a/Polyhedron/demo/Polyhedron/Scene_polyhedron_selection_item.cpp +++ b/Polyhedron/demo/Polyhedron/Scene_polyhedron_selection_item.cpp @@ -673,7 +673,6 @@ void Scene_polyhedron_selection_item::draw(CGAL::Three::Viewer_interface* viewer d->computeElements(); d->initializeBuffers(viewer); } - viewer->makeCurrent(); vaos[Scene_polyhedron_selection_item_priv::Facets]->bind(); attribBuffers(viewer,PROGRAM_WITH_LIGHT); @@ -759,7 +758,6 @@ void Scene_polyhedron_selection_item::drawEdges(CGAL::Three::Viewer_interface* v d->computeElements(); d->initializeBuffers(viewer); } - viewer->makeCurrent(); vaos[Scene_polyhedron_selection_item_priv::Edges]->bind(); if(!viewer->isOpenGL_4_3()) { @@ -829,7 +827,6 @@ void Scene_polyhedron_selection_item::drawPoints(CGAL::Three::Viewer_interface* d->computeElements(); d->initializeBuffers(viewer); } - viewer->makeCurrent(); vaos[Scene_polyhedron_selection_item_priv::Points]->bind(); d->program = getShaderProgram(PROGRAM_NO_SELECTION); attribBuffers(viewer,PROGRAM_NO_SELECTION); From ed5b53759b566771b356cae284ae6b182bc6195c Mon Sep 17 00:00:00 2001 From: Maxime Gimeno Date: Mon, 20 Aug 2018 11:50:04 +0200 Subject: [PATCH 043/268] Fix ctrl+A with groups. --- Polyhedron/demo/Polyhedron/Scene.cpp | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/Polyhedron/demo/Polyhedron/Scene.cpp b/Polyhedron/demo/Polyhedron/Scene.cpp index 5aa6c13dda9..54bc682530e 100644 --- a/Polyhedron/demo/Polyhedron/Scene.cpp +++ b/Polyhedron/demo/Polyhedron/Scene.cpp @@ -1151,15 +1151,19 @@ int Scene::selectionBindex() const { QItemSelection Scene::createSelection(int i) { - return QItemSelection(index_map.keys(i).at(0), index_map.keys(i).at(4)); } QItemSelection Scene::createSelectionAll() { - return QItemSelection(index(0, 0,index_map.key(0).parent()), - index(m_entries.size()-1, 4, index_map.key(0).parent())); + //it is not possible to directly create a selection with items that have different parents, so + //we do it iteratively. + QItemSelection sel; + for(int i=0; i< m_entries.size(); ++i) + sel.select(index_map.keys(i).at(0), + index_map.keys(i).at(4)); + return sel; } void Scene::itemChanged() From 85faa56c0824fcf3ebac60a14e459d8e4f83b61b Mon Sep 17 00:00:00 2001 From: Maxime Gimeno Date: Mon, 20 Aug 2018 12:02:29 +0200 Subject: [PATCH 044/268] fix Bbox Mesh for empty mesh --- .../Plugins/PCA/Create_bbox_mesh_plugin.cpp | 30 +++++++++++++++---- 1 file changed, 24 insertions(+), 6 deletions(-) diff --git a/Polyhedron/demo/Polyhedron/Plugins/PCA/Create_bbox_mesh_plugin.cpp b/Polyhedron/demo/Polyhedron/Plugins/PCA/Create_bbox_mesh_plugin.cpp index 5aca9eede6c..0abe7a5a031 100644 --- a/Polyhedron/demo/Polyhedron/Plugins/PCA/Create_bbox_mesh_plugin.cpp +++ b/Polyhedron/demo/Polyhedron/Plugins/PCA/Create_bbox_mesh_plugin.cpp @@ -5,6 +5,7 @@ #include #include +#include #include #include "Scene_surface_mesh_item.h" @@ -31,18 +32,28 @@ public: return false;} protected: - void bbox(bool extended = false); + bool bbox(bool extended = false); public Q_SLOTS: void createBbox() { QApplication::setOverrideCursor(Qt::WaitCursor); - bbox(); - QApplication::restoreOverrideCursor(); + if(!bbox()) + { + QApplication::restoreOverrideCursor(); + QMessageBox::warning(mw, "Error", "Bbox couldn't be computed, so there is no mesh created."); + } + else + QApplication::restoreOverrideCursor(); } void createExtendedBbox() { QApplication::setOverrideCursor(Qt::WaitCursor); - bbox(true); - QApplication::restoreOverrideCursor(); + if(!bbox(true)) + { + QApplication::restoreOverrideCursor(); + QMessageBox::warning(mw, "Error", "Bbox couldn't be computed, so there is no mesh created."); + } + else + QApplication::restoreOverrideCursor(); } private: @@ -71,7 +82,7 @@ QList Create_bbox_mesh_plugin::actions() const { return QList() << actionBbox << actionExtendedBbox; } -void Create_bbox_mesh_plugin::bbox(bool extended) +bool Create_bbox_mesh_plugin::bbox(bool extended) { Scene_interface::Bbox bbox; bool initialized = false; @@ -105,6 +116,12 @@ void Create_bbox_mesh_plugin::bbox(bool extended) bbox.zmax() + delta_z); } + if(bbox.min(0) > bbox.max(0) || + bbox.min(1) > bbox.max(1) || + bbox.min(2) > bbox.max(2)) + { + return false; + } Scene_item* item; EPICK::Iso_cuboid_3 ic(bbox); SMesh* p = new SMesh; @@ -114,6 +131,7 @@ void Create_bbox_mesh_plugin::bbox(bool extended) item->setName("Scene bbox mesh"); item->setRenderingMode(Wireframe); scene->addItem(item); + return true; } #include "Create_bbox_mesh_plugin.moc" From 891e89f812b218bc5f9dcbe2db423d9e6186db30 Mon Sep 17 00:00:00 2001 From: Maxime Gimeno Date: Mon, 20 Aug 2018 12:08:46 +0200 Subject: [PATCH 045/268] Fix canceling a change of ramp color in display_property_plugin --- .../Polyhedron/Plugins/Display/Display_property_plugin.cpp | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/Polyhedron/demo/Polyhedron/Plugins/Display/Display_property_plugin.cpp b/Polyhedron/demo/Polyhedron/Plugins/Display/Display_property_plugin.cpp index 1760befbfea..7fbe076db92 100644 --- a/Polyhedron/demo/Polyhedron/Plugins/Display/Display_property_plugin.cpp +++ b/Polyhedron/demo/Polyhedron/Plugins/Display/Display_property_plugin.cpp @@ -109,6 +109,11 @@ public: this, [this]() { QColor minColor = QColorDialog::getColor(); + if (!minColor.isValid()) + { + return; + } + rm = minColor.redF(); gm = minColor.greenF(); bm = minColor.blueF(); @@ -121,6 +126,8 @@ public: this, [this]() { QColor maxColor = QColorDialog::getColor(); + if(!maxColor.isValid()) + return; QPalette palette(maxColor); rM = maxColor.redF(); gM = maxColor.greenF(); From f24a31be1846f1eed663a0f520529146b71f0030 Mon Sep 17 00:00:00 2001 From: Maxime Gimeno Date: Mon, 20 Aug 2018 12:43:31 +0200 Subject: [PATCH 046/268] Add a button that resets the ramp extremas. Clicking colorize doesn't reset anymore. --- .../Plugins/Display/Display_property.ui | 32 +++++++++++- .../Display/Display_property_plugin.cpp | 52 +++++++++++++++++-- 2 files changed, 79 insertions(+), 5 deletions(-) diff --git a/Polyhedron/demo/Polyhedron/Plugins/Display/Display_property.ui b/Polyhedron/demo/Polyhedron/Plugins/Display/Display_property.ui index e8d8a8ee521..3ab8f12135a 100644 --- a/Polyhedron/demo/Polyhedron/Plugins/Display/Display_property.ui +++ b/Polyhedron/demo/Polyhedron/Plugins/Display/Display_property.ui @@ -7,7 +7,7 @@ 0 0 292 - 456 + 463
@@ -55,6 +55,36 @@
+ + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + Compute Ramp Extremas + + + Reset + + + false + + + + +
diff --git a/Polyhedron/demo/Polyhedron/Plugins/Display/Display_property_plugin.cpp b/Polyhedron/demo/Polyhedron/Plugins/Display/Display_property_plugin.cpp index 7fbe076db92..07db3a6f1bc 100644 --- a/Polyhedron/demo/Polyhedron/Plugins/Display/Display_property_plugin.cpp +++ b/Polyhedron/demo/Polyhedron/Plugins/Display/Display_property_plugin.cpp @@ -137,6 +137,8 @@ public: dock_widget->maxColorButton->setPalette(palette); dock_widget->maxColorButton->update(); }); + connect(dock_widget->resetButton, &QPushButton::pressed, + this, &DisplayPropertyPlugin::resetRampExtremas); dock_widget->zoomToMaxButton->setEnabled(false); dock_widget->zoomToMinButton->setEnabled(false); Scene* scene_obj =static_cast(scene); @@ -152,6 +154,29 @@ private Q_SLOTS: else { replaceRamp(); dock_widget->show(); } } + void resetRampExtremas() + { + Scene_surface_mesh_item* item = + qobject_cast(scene->item(scene->mainSelectionIndex())); + if(!item) + return; + QApplication::setOverrideCursor(Qt::WaitCursor); + item->face_graph()->collect_garbage(); + bool ok; + switch(dock_widget->propertyBox->currentIndex()) + { + case 0: + ok = resetAngles(item); + break; + default: + ok = resetScaledJacobian(item); + break; + } + QApplication::restoreOverrideCursor(); + if(!ok) + QMessageBox::warning(mw, "Error", "You must first run colorize once to initialize the values."); + } + void colorize() { Scene_surface_mesh_item* item = @@ -282,10 +307,20 @@ private Q_SLOTS: 255*color_ramp.b(f)); fcolors[*fit] = color; } - dock_widget->minBox->setValue(jacobian_min[item].first-0.01); - dock_widget->maxBox->setValue(jacobian_max[item].first); } + bool resetScaledJacobian(Scene_surface_mesh_item* item) + { + SMesh& smesh = *item->face_graph(); + if(!smesh.property_map("f:jacobian").second) + { + return false; + } + dock_widget->minBox->setValue(jacobian_min[item].first-0.01); + dock_widget->maxBox->setValue(jacobian_max[item].first); + return true; + } + void displayAngles(Scene_surface_mesh_item* item) { SMesh& smesh = *item->face_graph(); @@ -411,10 +446,19 @@ private Q_SLOTS: 255*color_ramp.b(f)); fcolors[*fit] = color; } - dock_widget->minBox->setValue(angles_min[item].first); - dock_widget->maxBox->setValue(angles_max[item].first); } + bool resetAngles(Scene_surface_mesh_item* item) + { + SMesh& smesh = *item->face_graph(); + if(!smesh.property_map("f:angle").second) + { + return false; + } + dock_widget->minBox->setValue(angles_min[item].first); + dock_widget->maxBox->setValue(angles_max[item].first); + return true; + } void replaceRamp() { color_ramp = Color_ramp(rm, rM, gm, gM, bm, bM); From fb22d14e921b8e0d838a365bd9098987cafde6b4 Mon Sep 17 00:00:00 2001 From: Maxime Gimeno Date: Mon, 20 Aug 2018 13:04:44 +0200 Subject: [PATCH 047/268] ZoomToId() actually zooms. --- Polyhedron/demo/Polyhedron/include/id_printing.h | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/Polyhedron/demo/Polyhedron/include/id_printing.h b/Polyhedron/demo/Polyhedron/include/id_printing.h index f195eb97f53..82c965c81d6 100644 --- a/Polyhedron/demo/Polyhedron/include/id_printing.h +++ b/Polyhedron/demo/Polyhedron/include/id_printing.h @@ -623,10 +623,10 @@ int zoomToId(const Mesh& mesh, CGAL::qglviewer::Quaternion new_orientation(CGAL::qglviewer::Vec(0,0,-1), CGAL::qglviewer::Vec(-normal.x(), -normal.y(), -normal.z())); Point new_pos = p + - CGAL::qglviewer::Vec( - viewer->camera()->position().x - viewer->camera()->sceneCenter().x, - viewer->camera()->position().y - viewer->camera()->sceneCenter().y, - viewer->camera()->position().z - viewer->camera()->sceneCenter().z) + 0.25*CGAL::qglviewer::Vec( + viewer->camera()->position().x - viewer->camera()->pivotPoint().x, + viewer->camera()->position().y - viewer->camera()->pivotPoint().y, + viewer->camera()->position().z - viewer->camera()->pivotPoint().z) .norm() * normal ; viewer->camera()->setPivotPoint(CGAL::qglviewer::Vec(p.x(), From 8826c5d9b6c87dad31a819acb2728712455be715 Mon Sep 17 00:00:00 2001 From: Maxime Gimeno Date: Mon, 20 Aug 2018 14:59:34 +0200 Subject: [PATCH 048/268] Remove ReplaceRamp button and removes pmaps on itemChanged(). --- .../Plugins/Display/Display_property.ui | 9 +-------- .../Plugins/Display/Display_property_plugin.cpp | 17 ++++++++++++++--- .../Scene_polyhedron_selection_item.cpp | 1 + 3 files changed, 16 insertions(+), 11 deletions(-) diff --git a/Polyhedron/demo/Polyhedron/Plugins/Display/Display_property.ui b/Polyhedron/demo/Polyhedron/Plugins/Display/Display_property.ui index 3ab8f12135a..5c6d0da2f22 100644 --- a/Polyhedron/demo/Polyhedron/Plugins/Display/Display_property.ui +++ b/Polyhedron/demo/Polyhedron/Plugins/Display/Display_property.ui @@ -7,7 +7,7 @@ 0 0 292 - 463 + 456 @@ -149,13 +149,6 @@ - - - Replace Ramp - - - - Colorize diff --git a/Polyhedron/demo/Polyhedron/Plugins/Display/Display_property_plugin.cpp b/Polyhedron/demo/Polyhedron/Plugins/Display/Display_property_plugin.cpp index 07db3a6f1bc..638a521f107 100644 --- a/Polyhedron/demo/Polyhedron/Plugins/Display/Display_property_plugin.cpp +++ b/Polyhedron/demo/Polyhedron/Plugins/Display/Display_property_plugin.cpp @@ -96,9 +96,6 @@ public: connect(dock_widget->colorizeButton, SIGNAL(clicked(bool)), this, SLOT(colorize())); - connect(dock_widget->rampButton, SIGNAL(clicked(bool)), - this, SLOT(replaceRamp())); - connect(dock_widget->propertyBox, SIGNAL(currentIndexChanged(int)), this, SLOT(on_propertyBox_currentIndexChanged(int))); connect(dock_widget->zoomToMinButton, &QPushButton::pressed, @@ -184,6 +181,7 @@ private Q_SLOTS: if(!item) return; QApplication::setOverrideCursor(Qt::WaitCursor); + replaceRamp(); item->face_graph()->collect_garbage(); switch(dock_widget->propertyBox->currentIndex()) { @@ -194,6 +192,19 @@ private Q_SLOTS: displayScaledJacobian(item); break; } + connect(item, &Scene_surface_mesh_item::itemChanged, + this, [item](){ + bool does_exist; + SMesh::Property_map pmap; + boost::tie(pmap, does_exist) = + item->face_graph()->property_map("f:jacobian"); + if(does_exist) + item->face_graph()->remove_property_map(pmap); + boost::tie(pmap, does_exist) = + item->face_graph()->property_map("f:angle"); + if(does_exist) + item->face_graph()->remove_property_map(pmap); + }); QApplication::restoreOverrideCursor(); item->invalidateOpenGLBuffers(); item->redraw(); diff --git a/Polyhedron/demo/Polyhedron/Scene_polyhedron_selection_item.cpp b/Polyhedron/demo/Polyhedron/Scene_polyhedron_selection_item.cpp index 970ad5a77be..65e2d16e0f3 100644 --- a/Polyhedron/demo/Polyhedron/Scene_polyhedron_selection_item.cpp +++ b/Polyhedron/demo/Polyhedron/Scene_polyhedron_selection_item.cpp @@ -2023,6 +2023,7 @@ void Scene_polyhedron_selection_item::validateMoveVertex() k_ring_selector.setEditMode(true); viewer->setManipulatedFrame(NULL); invalidateOpenGLBuffers(); + poly_item->itemChanged(); Q_EMIT updateInstructions("Select a vertex. (1/2)"); } From 3f023faf525bfb5cbc92d4efbe3b1fa49d428409 Mon Sep 17 00:00:00 2001 From: Maxime Gimeno Date: Mon, 20 Aug 2018 15:18:35 +0200 Subject: [PATCH 049/268] If the selection_widget is on the tab Components, then clicking "Clear" clears the edges. --- .../demo/Polyhedron/Plugins/PMP/Selection_plugin.cpp | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/Polyhedron/demo/Polyhedron/Plugins/PMP/Selection_plugin.cpp b/Polyhedron/demo/Polyhedron/Plugins/PMP/Selection_plugin.cpp index 4296804ce6d..bf76bd800fe 100644 --- a/Polyhedron/demo/Polyhedron/Plugins/PMP/Selection_plugin.cpp +++ b/Polyhedron/demo/Polyhedron/Plugins/PMP/Selection_plugin.cpp @@ -286,8 +286,14 @@ public Q_SLOTS: print_message("Error: there is no selected polyhedron selection item!"); return; } - - selection_item->clear(); + if(ui_widget.tabWidget->currentIndex() == 0) + selection_item->clear(); + else //case current tab is Components, then active simplices are edges. + { + selection_item->selected_edges.clear(); + selection_item->invalidateOpenGLBuffers(); + selection_item->itemChanged(); + } filter_operations(); } void on_Clear_all_button_clicked(){ From 0cc2749fd9055cc44c2b1079d64777093464d675 Mon Sep 17 00:00:00 2001 From: Maxime Gimeno Date: Mon, 20 Aug 2018 15:23:47 +0200 Subject: [PATCH 050/268] Add misisng renaming of selection_item in IO plugin --- Polyhedron/demo/Polyhedron/Plugins/IO/Selection_io_plugin.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/Polyhedron/demo/Polyhedron/Plugins/IO/Selection_io_plugin.cpp b/Polyhedron/demo/Polyhedron/Plugins/IO/Selection_io_plugin.cpp index 9405afa1e03..01e120b9a73 100644 --- a/Polyhedron/demo/Polyhedron/Plugins/IO/Selection_io_plugin.cpp +++ b/Polyhedron/demo/Polyhedron/Plugins/IO/Selection_io_plugin.cpp @@ -36,6 +36,7 @@ public: delete item; return NULL; } + item->setName(fileinfo.baseName()); return item; } From 5ba1ce6b44d6c65f7467a56384ce06f370dadcbc Mon Sep 17 00:00:00 2001 From: Maxime Gimeno Date: Mon, 20 Aug 2018 16:05:32 +0200 Subject: [PATCH 051/268] Fix saveas for tricky extensions --- Polyhedron/demo/Polyhedron/MainWindow.cpp | 44 ++++++++++++++++------- 1 file changed, 32 insertions(+), 12 deletions(-) diff --git a/Polyhedron/demo/Polyhedron/MainWindow.cpp b/Polyhedron/demo/Polyhedron/MainWindow.cpp index bb526a7a1d9..93120c1f822 100644 --- a/Polyhedron/demo/Polyhedron/MainWindow.cpp +++ b/Polyhedron/demo/Polyhedron/MainWindow.cpp @@ -1651,9 +1651,8 @@ void MainWindow::on_actionSaveAs_triggered() sf = plugin->saveNameFilters().split(";;").first(); } } - QString ext1, ext2; QRegExp extensions("\\(\\*\\..+\\)"); - QStringList filter_ext; + QStringList filter_exts; if(filters.empty()) { QMessageBox::warning(this, @@ -1668,7 +1667,7 @@ void MainWindow::on_actionSaveAs_triggered() Q_FOREACH(QString s, sl){ int pos = extensions.indexIn(s); if( pos >-1) - filter_ext.append(extensions.capturedTexts()); + filter_exts.append(extensions.capturedTexts()); } } filters << tr("All files (*)"); @@ -1694,22 +1693,23 @@ void MainWindow::on_actionSaveAs_triggered() last_saved_dir = QFileInfo(dir).absoluteDir().path(); extensions.indexIn(sf.split(";;").first()); - ext1 = extensions.cap().split(" ").first();// in case of syntax like (*.a *.b) + QString filter_ext, filename_ext; + filter_ext = extensions.cap().split(" ").first();// in case of syntax like (*.a *.b) - ext1.remove(")"); - ext1.remove("("); + filter_ext.remove(")"); + filter_ext.remove("("); //remove * - ext1=ext1.right(ext1.size()-1); + filter_ext=filter_ext.right(filter_ext.size()-1); if(filename.isEmpty()) continue; QStringList filename_split = filename.split("."); filename_split.removeFirst(); - ext2 = filename_split.join("."); - ext2.push_front("."); + filename_ext = filename_split.join("."); + filename_ext.push_front("."); QStringList final_extensions; - Q_FOREACH(QString string, filter_ext) + Q_FOREACH(QString string, filter_exts) { Q_FOREACH(QString s, string.split(" ")){// in case of syntax like (*.a *.b) s.remove(")"); @@ -1719,9 +1719,29 @@ void MainWindow::on_actionSaveAs_triggered() final_extensions.append(s); } } - if(!final_extensions.contains(ext2)) + bool ok = false; + while(!ok) { - filename = filename.append(ext1); + if(final_extensions.contains(filename_ext)) + { + ok = true; + } + else{ + QStringList shatterd_filename_ext = filename_ext.split("."); + if(!shatterd_filename_ext.last().isEmpty()) + { + shatterd_filename_ext.removeFirst();//removes "" + shatterd_filename_ext.removeFirst(); + filename_ext = shatterd_filename_ext.join("."); + filename_ext.push_front("."); + } + else + break; + } + } + if(!ok) + { + filename = filename.append(filter_ext); } viewer->update(); save(filename, item); From 805e4669e45385720af9440e1cb4fb237a34a743 Mon Sep 17 00:00:00 2001 From: Maxime Gimeno Date: Mon, 20 Aug 2018 17:12:19 +0200 Subject: [PATCH 052/268] Avoid having the visual hints hidden by the mesh when zooming too much. --- GraphicsView/include/CGAL/Qt/qglviewer_impl.h | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/GraphicsView/include/CGAL/Qt/qglviewer_impl.h b/GraphicsView/include/CGAL/Qt/qglviewer_impl.h index 972896a063a..a405b1d8670 100644 --- a/GraphicsView/include/CGAL/Qt/qglviewer_impl.h +++ b/GraphicsView/include/CGAL/Qt/qglviewer_impl.h @@ -3164,7 +3164,9 @@ void CGAL::QGLViewer::drawVisualHints() { int size = 100; glViewport(width()*devicePixelRatio()-size, height()*devicePixelRatio()-size, size, size); glScissor (width()*devicePixelRatio()-size, height()*devicePixelRatio()-size, size, size); + glDisable(GL_DEPTH_TEST); glDrawArrays(GL_TRIANGLES, 0, static_cast(axis_size / 9)); + glEnable(GL_DEPTH_TEST); // The viewport and the scissor are restored. glScissor(scissor[0],scissor[1],scissor[2],scissor[3]); glViewport(viewport[0],viewport[1],viewport[2],viewport[3]); @@ -3199,9 +3201,11 @@ void CGAL::QGLViewer::drawVisualHints() { glScissor (GLint((camera()->projectedCoordinatesOf(camera()->pivotPoint()).x-size/2)*devicePixelRatio()), GLint((height() - camera()->projectedCoordinatesOf(camera()->pivotPoint()).y-size/2)*devicePixelRatio()), size, size); rendering_program.setUniformValue("color", QColor(::Qt::black)); + glDisable(GL_DEPTH_TEST); glDrawArrays(GL_LINES, 0, static_cast(4)); rendering_program.setUniformValue("color", QColor(::Qt::white)); glDrawArrays(GL_LINES, 0, static_cast(4)); + glEnable(GL_DEPTH_TEST); // The viewport and the scissor are restored. glScissor(scissor[0],scissor[1],scissor[2],scissor[3]); glViewport(viewport[0],viewport[1],viewport[2],viewport[3]); From c964aa3518afaaf2ce6d8ccf40454dd7e94643bd Mon Sep 17 00:00:00 2001 From: Maxime Gimeno Date: Mon, 20 Aug 2018 17:19:01 +0200 Subject: [PATCH 053/268] Rename Clean into Clear Current Type --- Polyhedron/demo/Polyhedron/Plugins/PMP/Selection_widget.ui | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Polyhedron/demo/Polyhedron/Plugins/PMP/Selection_widget.ui b/Polyhedron/demo/Polyhedron/Plugins/PMP/Selection_widget.ui index e46381727ba..8075686e33b 100644 --- a/Polyhedron/demo/Polyhedron/Plugins/PMP/Selection_widget.ui +++ b/Polyhedron/demo/Polyhedron/Plugins/PMP/Selection_widget.ui @@ -416,7 +416,7 @@ - &Clear + &Clear Current Type From 1da4c30774fad38db30f3b2c331b51219128a8fe Mon Sep 17 00:00:00 2001 From: Maxime Gimeno Date: Mon, 20 Aug 2018 17:31:09 +0200 Subject: [PATCH 054/268] Add some spacers in to the Display_property widget --- .../Plugins/Display/Display_property.ui | 95 +++++++++++-------- 1 file changed, 54 insertions(+), 41 deletions(-) diff --git a/Polyhedron/demo/Polyhedron/Plugins/Display/Display_property.ui b/Polyhedron/demo/Polyhedron/Plugins/Display/Display_property.ui index 5c6d0da2f22..8a25ccc618a 100644 --- a/Polyhedron/demo/Polyhedron/Plugins/Display/Display_property.ui +++ b/Polyhedron/demo/Polyhedron/Plugins/Display/Display_property.ui @@ -6,15 +6,15 @@ 0 0 - 292 - 456 + 269 + 434 Property Displaying - + @@ -88,43 +88,6 @@ - - - - Zoom - - - - - - Zoom to min - - - - - - - Zoom to max - - - - - - - - - - - - - - - - - - - - @@ -148,6 +111,43 @@ + + + + Zoom + + + + + + Zoom to min + + + + + + + Zoom to max + + + + + + + + + + + + + + + + + + + + @@ -160,7 +160,20 @@ - + + + + + Qt::Horizontal + + + + 40 + 20 + + + + From a1d59fe281a01b6f6be41f99a8e7f7b638142ecb Mon Sep 17 00:00:00 2001 From: Maxime Gimeno Date: Mon, 20 Aug 2018 17:59:44 +0200 Subject: [PATCH 055/268] Selection item is saved by default to the place where its parent item has been loaded from if possible. --- Polyhedron/demo/Polyhedron/MainWindow.cpp | 7 ++++++- .../demo/Polyhedron/Scene_polyhedron_selection_item.cpp | 5 ++++- 2 files changed, 10 insertions(+), 2 deletions(-) diff --git a/Polyhedron/demo/Polyhedron/MainWindow.cpp b/Polyhedron/demo/Polyhedron/MainWindow.cpp index 93120c1f822..2813f7ee778 100644 --- a/Polyhedron/demo/Polyhedron/MainWindow.cpp +++ b/Polyhedron/demo/Polyhedron/MainWindow.cpp @@ -1680,7 +1680,12 @@ void MainWindow::on_actionSaveAs_triggered() } QString caption = tr("Save %1 to File...").arg(item->name()); QString dir = item->property("source filename").toString(); - if(dir.isEmpty()) + if(dir.isEmpty() && + !item->property("defaultSaveDir").toString().isEmpty()) + { + dir = item->property("defaultSaveDir").toString(); + } + else if(dir.isEmpty()) dir = QString("%1/%2").arg(last_saved_dir).arg(item->name()); if(dir.isEmpty()) dir = item->name(); diff --git a/Polyhedron/demo/Polyhedron/Scene_polyhedron_selection_item.cpp b/Polyhedron/demo/Polyhedron/Scene_polyhedron_selection_item.cpp index 65e2d16e0f3..64c03f363ca 100644 --- a/Polyhedron/demo/Polyhedron/Scene_polyhedron_selection_item.cpp +++ b/Polyhedron/demo/Polyhedron/Scene_polyhedron_selection_item.cpp @@ -49,6 +49,7 @@ struct Scene_polyhedron_selection_item_priv{ Scene_polyhedron_selection_item_priv(Scene_polyhedron_selection_item* parent): item(parent) { + } void initializeBuffers(CGAL::Three::Viewer_interface *viewer) const; @@ -1901,7 +1902,9 @@ Scene_polyhedron_selection_item::Scene_polyhedron_selection_item(Scene_face_grap d->nb_facets = 0; d->nb_points = 0; d->nb_lines = 0; - + QString sf = poly_item->property("source filename").toString(); + if(!sf.isEmpty()) + setProperty("defaultSaveDir", poly_item->property("source filename").toString()); for(int i=0; i Date: Tue, 21 Aug 2018 09:53:58 +0200 Subject: [PATCH 056/268] filter_operations() keeps the operations for the current selection simplex type visible, so it doesn't reset every time a facet is erased. --- .../Polyhedron/Plugins/PMP/Selection_plugin.cpp | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/Polyhedron/demo/Polyhedron/Plugins/PMP/Selection_plugin.cpp b/Polyhedron/demo/Polyhedron/Plugins/PMP/Selection_plugin.cpp index bf76bd800fe..015c24c6db1 100644 --- a/Polyhedron/demo/Polyhedron/Plugins/PMP/Selection_plugin.cpp +++ b/Polyhedron/demo/Polyhedron/Plugins/PMP/Selection_plugin.cpp @@ -420,7 +420,9 @@ public Q_SLOTS: Q_EMIT set_operation_mode(-1); } } + filter_operations(); } + void on_Insertion_radio_button_toggled(bool toggle){ for(Selection_item_map::iterator it = selection_item_map.begin(); it != selection_item_map.end(); ++it) { it->second->set_is_insert(toggle); @@ -932,9 +934,14 @@ void filter_operations() QString current_op = ui_widget.operationsBox->currentText(); ui_widget.operationsBox->clear(); - bool has_v(!selection_item->selected_vertices.empty()), - has_e(!selection_item->selected_edges.empty()), - has_f(!selection_item->selected_facets.empty()); + bool has_v(!selection_item->selected_vertices.empty() || + ui_widget.Selection_type_combo_box->currentIndex() == 0), + has_e(!selection_item->selected_edges.empty()|| + ui_widget.Selection_type_combo_box->currentIndex() == 2|| + ui_widget.Selection_type_combo_box->currentIndex() == 4), + has_f(!selection_item->selected_facets.empty()|| + ui_widget.Selection_type_combo_box->currentIndex() == 1|| + ui_widget.Selection_type_combo_box->currentIndex() == 3); if(has_v) { From efc2579f4c5e4877e2b0449163441decca8a3597 Mon Sep 17 00:00:00 2001 From: Maxime Gimeno Date: Tue, 21 Aug 2018 11:12:28 +0200 Subject: [PATCH 057/268] 2 things : - Add a function to Scene_item to enable specific default save name and use it for selection item in order to remove a possible (selection) from the name. - Fix the defaultSaveDir property to remove the extension, using all possible extensions leading to a surface_mesh_item. --- Polyhedron/demo/Polyhedron/MainWindow.cpp | 2 +- .../Polyhedron/Plugins/IO/Selection_io_plugin.cpp | 11 +++-------- .../demo/Polyhedron/Plugins/IO/VTK_io_plugin.cpp | 2 +- .../Polyhedron/Scene_polyhedron_selection_item.cpp | 5 ++++- .../demo/Polyhedron/Scene_polyhedron_selection_item.h | 6 ++++++ Three/include/CGAL/Three/Scene_item.h | 7 +++++++ 6 files changed, 22 insertions(+), 11 deletions(-) diff --git a/Polyhedron/demo/Polyhedron/MainWindow.cpp b/Polyhedron/demo/Polyhedron/MainWindow.cpp index 2813f7ee778..8fc4ea8e59c 100644 --- a/Polyhedron/demo/Polyhedron/MainWindow.cpp +++ b/Polyhedron/demo/Polyhedron/MainWindow.cpp @@ -1686,7 +1686,7 @@ void MainWindow::on_actionSaveAs_triggered() dir = item->property("defaultSaveDir").toString(); } else if(dir.isEmpty()) - dir = QString("%1/%2").arg(last_saved_dir).arg(item->name()); + dir = QString("%1/%2").arg(last_saved_dir).arg(item->defaultSaveName()); if(dir.isEmpty()) dir = item->name(); QString filename = diff --git a/Polyhedron/demo/Polyhedron/Plugins/IO/Selection_io_plugin.cpp b/Polyhedron/demo/Polyhedron/Plugins/IO/Selection_io_plugin.cpp index 01e120b9a73..bbbfe24bf58 100644 --- a/Polyhedron/demo/Polyhedron/Plugins/IO/Selection_io_plugin.cpp +++ b/Polyhedron/demo/Polyhedron/Plugins/IO/Selection_io_plugin.cpp @@ -11,15 +11,10 @@ class Polyhedron_demo_selection_io_plugin : Q_INTERFACES(CGAL::Three::Polyhedron_demo_io_plugin_interface) Q_PLUGIN_METADATA(IID "com.geometryfactory.PolyhedronDemo.PluginInterface/1.0") public: -#ifdef USE_SURFACE_MESH + QString name() const { return "selection_io_sm_plugin"; } - QString nameFilters() const { return "Surface_mesh selection files(*.selection.txt)"; } -#else - QString name() const { return "selection_io_plugin"; } - QString nameFilters() const { return "Polyhedron selection files (*.selection.txt)"; } -#endif - - + QString nameFilters() const { return "Selection files(*.selection.txt)"; } + bool canLoad() const { Scene_facegraph_item* sel_item = qobject_cast(CGAL::Three::Three::scene()->item( CGAL::Three::Three::scene()->mainSelectionIndex())); diff --git a/Polyhedron/demo/Polyhedron/Plugins/IO/VTK_io_plugin.cpp b/Polyhedron/demo/Polyhedron/Plugins/IO/VTK_io_plugin.cpp index be28d3748e0..29d0217948b 100644 --- a/Polyhedron/demo/Polyhedron/Plugins/IO/VTK_io_plugin.cpp +++ b/Polyhedron/demo/Polyhedron/Plugins/IO/VTK_io_plugin.cpp @@ -279,7 +279,7 @@ public: QString nameFilters() const { - return "VTK PolyData files Surface_mesh (*.vtk);; VTK XML PolyData Surface_mesh (*.vtp);; VTK XML UnstructuredGrid Surface_mesh(*.vtu)"; } + return "VTK PolyData files (*.vtk);; VTK XML PolyData (*.vtp);; VTK XML UnstructuredGrid (*.vtu)"; } QString name() const { return "vtk_sm_plugin"; } bool canSave(const CGAL::Three::Scene_item* item) { diff --git a/Polyhedron/demo/Polyhedron/Scene_polyhedron_selection_item.cpp b/Polyhedron/demo/Polyhedron/Scene_polyhedron_selection_item.cpp index 64c03f363ca..ba749cf15b5 100644 --- a/Polyhedron/demo/Polyhedron/Scene_polyhedron_selection_item.cpp +++ b/Polyhedron/demo/Polyhedron/Scene_polyhedron_selection_item.cpp @@ -1903,8 +1903,11 @@ Scene_polyhedron_selection_item::Scene_polyhedron_selection_item(Scene_face_grap d->nb_points = 0; d->nb_lines = 0; QString sf = poly_item->property("source filename").toString(); + QRegExp rx("\\.(ts$|off$|obj$|ply$|stl$|surf$|vtk$|vtp$|vtu)"); + sf.remove(rx); if(!sf.isEmpty()) - setProperty("defaultSaveDir", poly_item->property("source filename").toString()); + setProperty("defaultSaveDir", sf); + qDebug()<getShaderProgram()`. */ virtual QOpenGLShaderProgram* getShaderProgram(int name , CGAL::Three::Viewer_interface *viewer = 0) const; +public: + //! \brief defaultSaveName returns the name to be used as default + //! when saving this item. + //! + //! Default is `name()`. + //! \return A new name for the default value in the "save as" dialog. + virtual QString defaultSaveName() const { return name(); } }; // end class Scene_item } } From 7ff58adcc7e5b5e168ed8c40361340d72c33bd40 Mon Sep 17 00:00:00 2001 From: Maxime Gimeno Date: Tue, 21 Aug 2018 15:17:20 +0200 Subject: [PATCH 058/268] Move some settings to Preferences and save them. --- Polyhedron/demo/Polyhedron/MainWindow.cpp | 54 +++++-- Polyhedron/demo/Polyhedron/MainWindow.h | 4 +- Polyhedron/demo/Polyhedron/MainWindow.ui | 53 ------- Polyhedron/demo/Polyhedron/Preferences.ui | 175 +++++++++++++++++----- Polyhedron/demo/Polyhedron/Viewer.cpp | 8 +- 5 files changed, 183 insertions(+), 111 deletions(-) diff --git a/Polyhedron/demo/Polyhedron/MainWindow.cpp b/Polyhedron/demo/Polyhedron/MainWindow.cpp index 8fc4ea8e59c..c8989d3b374 100644 --- a/Polyhedron/demo/Polyhedron/MainWindow.cpp +++ b/Polyhedron/demo/Polyhedron/MainWindow.cpp @@ -153,7 +153,6 @@ MainWindow::MainWindow(bool verbose, QWidget* parent) viewer->setScene(scene); CGAL::Three::Three::s_scene = scene; CGAL::Three::Three::s_connectable_scene = scene; - ui->actionMaxTextItemsDisplayed->setText(QString("Set Maximum Text Items Displayed : %1").arg(viewer->textRenderer()->getMax_textItems())); { QShortcut* shortcut = new QShortcut(QKeySequence(Qt::ALT+Qt::Key_Q), this); connect(shortcut, SIGNAL(activated()), @@ -193,8 +192,6 @@ MainWindow::MainWindow(bool verbose, QWidget* parent) connect(viewer, &Viewer::needNewContext, [this](){create();}); - connect(ui->actionSet_Transparency_Pass_Number, SIGNAL(triggered()), - viewer, SLOT(setTotalPass_clicked())); connect(scene, SIGNAL(updated()), this, SLOT(selectionChanged())); @@ -261,16 +258,11 @@ MainWindow::MainWindow(bool verbose, QWidget* parent) // this, SLOT(showSceneContextMenu(const QPoint &))); connect(ui->actionRecenterScene, SIGNAL(triggered()), viewer, SLOT(update())); - connect(ui->actionAntiAliasing, SIGNAL(toggled(bool)), - viewer, SLOT(setAntiAliasing(bool))); - connect(ui->actionDrawTwoSides, SIGNAL(toggled(bool)), viewer, SLOT(setTwoSides(bool))); - connect(ui->actionQuickCameraMode, SIGNAL(toggled(bool)), - viewer, SLOT(setFastDrawing(bool))); connect(ui->actionSwitchProjection, SIGNAL(toggled(bool)), viewer, SLOT(SetOrthoProjection(bool))); - + // add the "About CGAL..." and "About demo..." entries this->addAboutCGAL(); this->addAboutDemo(":/cgal/Polyhedron_3/about.html"); @@ -1466,8 +1458,10 @@ void MainWindow::updateDisplayInfo() { void MainWindow::readSettings() { QSettings settings; - // enable anti-aliasing - ui->actionAntiAliasing->setChecked(settings.value("antialiasing", false).toBool()); + viewer->setAntiAliasing(settings.value("antialiasing", false).toBool()); + viewer->setFastDrawing(settings.value("quick_camera_mode", true).toBool()); + viewer->textRenderer()->setMax(settings.value("max_text_items", 10000).toInt()); + viewer->setTotalPass(settings.value("transparency_pass_number", 4).toInt()); // read plugin blacklist QStringList blacklist=settings.value("plugin_blacklist",QStringList()).toStringList(); Q_FOREACH(QString name,blacklist){ plugin_blacklist.insert(name); } @@ -1478,8 +1472,6 @@ void MainWindow::writeSettings() this->writeState("MainWindow"); { QSettings settings; - settings.setValue("antialiasing", - ui->actionAntiAliasing->isChecked()); //setting plugin blacklist QStringList blacklist; Q_FOREACH(QString name,plugin_blacklist){ blacklist << name; } @@ -1824,12 +1816,29 @@ void MainWindow::on_actionSetPolyhedronB_triggered() int i = getSelectedSceneItemIndex(); scene->setItemB(i); } + void MainWindow::on_actionPreferences_triggered() { QDialog dialog(this); Ui::PreferencesDialog prefdiag; + QSettings settings; prefdiag.setupUi(&dialog); + prefdiag.antialiasingCheckBox->setChecked(settings.value("antialiasing", false).toBool()); + connect(prefdiag.antialiasingCheckBox, SIGNAL(toggled(bool)), + viewer, SLOT(setAntiAliasing(bool))); + + prefdiag.quick_cameraCheckBox->setChecked(settings.value("quick_camera_mode", true).toBool()); + connect(prefdiag.quick_cameraCheckBox, SIGNAL(toggled(bool)), + viewer, SLOT(setFastDrawing(bool))); + prefdiag.max_text_itemsPushButton->setText(QString("Set Maximum Text Items Displayed : %1").arg(viewer->textRenderer()->getMax_textItems())); + connect(prefdiag.max_text_itemsPushButton, &QPushButton::clicked, + this, &MainWindow::setMaxTextItemsDisplayed); + connect(prefdiag.transparency_passPushButton, &QPushButton::clicked, + viewer, &Viewer::setTotalPass_clicked); + connect(prefdiag.background_colorPushButton, &QPushButton::clicked, + this, &MainWindow::setBackgroundColor); + std::vector items; QBrush successBrush(Qt::green), errorBrush(Qt::red), @@ -1879,10 +1888,24 @@ void MainWindow::on_actionPreferences_triggered() if (item->checkState(0)==Qt::Checked) plugin_blacklist.insert(item->text(1)); } + + //write settings + settings.setValue("antialiasing", + prefdiag.antialiasingCheckBox->isChecked()); + settings.setValue("quick_camera_mode", + prefdiag.quick_cameraCheckBox->isChecked()); + settings.setValue("transparency_pass_number", + viewer->total_pass()); + settings.setValue("max_text_items", + viewer->textRenderer()->getMax_textItems()); + settings.setValue("background_color",viewer->backgroundColor().name()); + + + } } -void MainWindow::on_actionSetBackgroundColor_triggered() +void MainWindow::setBackgroundColor() { QColor c = QColorDialog::getColor(); if(c.isValid()) { @@ -2157,7 +2180,7 @@ void MainWindow::setExpanded(QModelIndex index) } -void MainWindow::on_actionMaxTextItemsDisplayed_triggered() +void MainWindow::setMaxTextItemsDisplayed() { bool ok; bool valid; @@ -2167,7 +2190,6 @@ void MainWindow::on_actionMaxTextItemsDisplayed_triggered() text.toInt(&valid); if (ok && valid){ viewer->textRenderer()->setMax(text.toInt()); - ui->actionMaxTextItemsDisplayed->setText(QString("Set Maximum Text Items Displayed : %1").arg(text.toInt())); } } diff --git a/Polyhedron/demo/Polyhedron/MainWindow.h b/Polyhedron/demo/Polyhedron/MainWindow.h index 9560896aa83..f176ce37018 100644 --- a/Polyhedron/demo/Polyhedron/MainWindow.h +++ b/Polyhedron/demo/Polyhedron/MainWindow.h @@ -307,7 +307,7 @@ protected Q_SLOTS: //!Swap the visibility of the selected item(s). void on_actionShowHide_triggered(); //!Pops a dialog to change the max TextItems - void on_actionMaxTextItemsDisplayed_triggered(); + void setMaxTextItemsDisplayed(); // Select A/B //!Sets the selected item as item_A. void on_actionSetPolyhedronA_triggered(); @@ -325,7 +325,7 @@ protected Q_SLOTS: //!Calls the function saveSnapShot of the viewer. void on_actionSaveSnapshot_triggered(); //!Opens a Dialog to choose a color and make it the background color. - void on_actionSetBackgroundColor_triggered(); + void setBackgroundColor(); /*! Opens a Dialog to enter coordinates of the new center point and sets it * with viewerShow. *@see viewerShow(float, float, float, float, float, float) diff --git a/Polyhedron/demo/Polyhedron/MainWindow.ui b/Polyhedron/demo/Polyhedron/MainWindow.ui index 4d0b6d572e8..5065f1d63cc 100644 --- a/Polyhedron/demo/Polyhedron/MainWindow.ui +++ b/Polyhedron/demo/Polyhedron/MainWindow.ui @@ -93,16 +93,11 @@ - - - - - @@ -384,14 +379,6 @@ Ctrl+D - - - true - - - &Antialiasing - - n/a @@ -444,11 +431,6 @@ Ctrl+R - - - Change &Background Color... - - &Look at... @@ -497,22 +479,6 @@ Load Plugin - - - true - - - true - - - Quick Camera Mode - - - - - Set Maximum Text Items Displayed : - - true @@ -526,25 +492,6 @@ Set Different Colors for Selected Items - - - true - - - true - - - Polyhedron Mode - - - In Polyhedron Mode, the default type for facegraphs is Polyhedron, by opposition to Surface_mesh. - - - - - Set Transparency &Pass Number - - diff --git a/Polyhedron/demo/Polyhedron/Preferences.ui b/Polyhedron/demo/Polyhedron/Preferences.ui index 85e7167b3e7..86e1112ff8c 100644 --- a/Polyhedron/demo/Polyhedron/Preferences.ui +++ b/Polyhedron/demo/Polyhedron/Preferences.ui @@ -6,49 +6,150 @@ 0 0 - 377 - 503 + 612 + 253 Preferences - + - - - Tick plugins you don't want to load at start up - - - - - - - false - - - QAbstractItemView::NoSelection - - - true - - - 2 - - - false - - - - 1 - - - - - 2 - - - + + + + + Settings + + + + + + + 0 + 0 + + + + Qt::ScrollBarAlwaysOff + + + QAbstractScrollArea::AdjustIgnored + + + true + + + + + 0 + 0 + 259 + 159 + + + + + + + &Antialiasing + + + + + + + &Quick Camera Mode + + + + + + + Set &Maximum Text Items Displayed... + + + + + + + Change &Background Color... + + + + + + + Set Transparency &Pass Number... + + + + + + + Qt::Vertical + + + + 20 + 40 + + + + + + + + + + + + + + + Plugins Management + + + + + + Tick plugins you don't want to load at start up + + + + + + + false + + + QAbstractItemView::NoSelection + + + true + + + 2 + + + false + + + + 1 + + + + + 2 + + + + + + + + diff --git a/Polyhedron/demo/Polyhedron/Viewer.cpp b/Polyhedron/demo/Polyhedron/Viewer.cpp index 528da1e66df..ec69ad274ab 100644 --- a/Polyhedron/demo/Polyhedron/Viewer.cpp +++ b/Polyhedron/demo/Polyhedron/Viewer.cpp @@ -2,6 +2,7 @@ #include #include #include +#include #include #include #include @@ -245,9 +246,10 @@ void Viewer::init() } else d->extension_is_found = true; - - - setBackgroundColor(::Qt::white); + QSettings settings; + QString colorname = settings.value("background_color", "#ffffff").toString(); + QColor bc(colorname); + setBackgroundColor(bc); d->vao.create(); d->buffer.create(); From 949f93ab801a9ea20ca9475db7096366d63e5310 Mon Sep 17 00:00:00 2001 From: Maxime Gimeno Date: Tue, 21 Aug 2018 17:21:51 +0200 Subject: [PATCH 059/268] Add Default Rendering Mode for Surface_mesh and Point_set items to the settings. --- Polyhedron/demo/Polyhedron/MainWindow.cpp | 60 +++++--- Polyhedron/demo/Polyhedron/MainWindow.h | 3 +- .../Polyhedron/Plugins/IO/PLY_io_plugin.cpp | 4 +- .../Polyhedron/Plugins/IO/XYZ_io_plugin.cpp | 4 + Polyhedron/demo/Polyhedron/Preferences.ui | 140 ++++++++++++++++-- Polyhedron/demo/Polyhedron/Scene_item.cpp | 29 +--- .../Scene_points_with_normal_item.cpp | 40 +++-- .../Polyhedron/Scene_surface_mesh_item.cpp | 7 +- Polyhedron/demo/Polyhedron/Three.cpp | 54 +++++++ Polyhedron/demo/Polyhedron/Viewer.cpp | 10 -- Polyhedron/demo/Polyhedron/Viewer.h | 2 - Three/include/CGAL/Three/Three.h | 15 +- 12 files changed, 274 insertions(+), 94 deletions(-) diff --git a/Polyhedron/demo/Polyhedron/MainWindow.cpp b/Polyhedron/demo/Polyhedron/MainWindow.cpp index c8989d3b374..a4e468fffb5 100644 --- a/Polyhedron/demo/Polyhedron/MainWindow.cpp +++ b/Polyhedron/demo/Polyhedron/MainWindow.cpp @@ -38,6 +38,7 @@ #include #include #include +#include #include #ifdef QT_SCRIPT_LIB # include @@ -1462,6 +1463,10 @@ void MainWindow::readSettings() viewer->setFastDrawing(settings.value("quick_camera_mode", true).toBool()); viewer->textRenderer()->setMax(settings.value("max_text_items", 10000).toInt()); viewer->setTotalPass(settings.value("transparency_pass_number", 4).toInt()); + CGAL::Three::Three::s_defaultSMRM = CGAL::Three::Three::modeFromName( + settings.value("default_sm_rm", "flat+edges").toString()); + CGAL::Three::Three::s_defaultPSRM = CGAL::Three::Three::modeFromName( + settings.value("default_ps_rm", "points").toString()); // read plugin blacklist QStringList blacklist=settings.value("plugin_blacklist",QStringList()).toStringList(); Q_FOREACH(QString name,blacklist){ plugin_blacklist.insert(name); } @@ -1828,17 +1833,38 @@ void MainWindow::on_actionPreferences_triggered() connect(prefdiag.antialiasingCheckBox, SIGNAL(toggled(bool)), viewer, SLOT(setAntiAliasing(bool))); - prefdiag.quick_cameraCheckBox->setChecked(settings.value("quick_camera_mode", true).toBool()); + prefdiag.quick_cameraCheckBox->setChecked( + settings.value("quick_camera_mode", true).toBool()); connect(prefdiag.quick_cameraCheckBox, SIGNAL(toggled(bool)), viewer, SLOT(setFastDrawing(bool))); - prefdiag.max_text_itemsPushButton->setText(QString("Set Maximum Text Items Displayed : %1").arg(viewer->textRenderer()->getMax_textItems())); - connect(prefdiag.max_text_itemsPushButton, &QPushButton::clicked, - this, &MainWindow::setMaxTextItemsDisplayed); - connect(prefdiag.transparency_passPushButton, &QPushButton::clicked, - viewer, &Viewer::setTotalPass_clicked); + prefdiag.max_itemsSpinBox->setValue(viewer->textRenderer()->getMax_textItems()); + + connect(prefdiag.max_itemsSpinBox, QOverload::of(&QSpinBox::valueChanged), + this, [this](int i){ + setMaxTextItemsDisplayed(i); + }); + prefdiag.transpSpinBox->setValue(viewer->total_pass()); + connect(prefdiag.transpSpinBox, QOverload::of(&QSpinBox::valueChanged), + this, [this](int i) + { + setTransparencyPasses(i); + }); connect(prefdiag.background_colorPushButton, &QPushButton::clicked, this, &MainWindow::setBackgroundColor); + prefdiag.surface_meshComboBox->setCurrentText(CGAL::Three::Three::modeName( + CGAL::Three::Three::s_defaultSMRM)); + connect(prefdiag.surface_meshComboBox, &QComboBox::currentTextChanged, + this, [](const QString& text){ + CGAL::Three::Three::s_defaultSMRM = CGAL::Three::Three::modeFromName(text); + }); + + prefdiag.point_setComboBox->setCurrentText(CGAL::Three::Three::modeName( + CGAL::Three::Three::s_defaultPSRM)); + connect(prefdiag.point_setComboBox, &QComboBox::currentTextChanged, + this, [](const QString& text){ + CGAL::Three::Three::s_defaultPSRM = CGAL::Three::Three::modeFromName(text); + }); std::vector items; QBrush successBrush(Qt::green), errorBrush(Qt::red), @@ -1899,7 +1925,10 @@ void MainWindow::on_actionPreferences_triggered() settings.setValue("max_text_items", viewer->textRenderer()->getMax_textItems()); settings.setValue("background_color",viewer->backgroundColor().name()); - + settings.setValue("default_sm_rm", CGAL::Three::Three::modeName( + CGAL::Three::Three::defaultSurfaceMeshRenderingMode())); + settings.setValue("default_ps_rm", CGAL::Three::Three::modeName( + CGAL::Three::Three::defaultPointSetRenderingMode())); } @@ -2180,17 +2209,9 @@ void MainWindow::setExpanded(QModelIndex index) } -void MainWindow::setMaxTextItemsDisplayed() +void MainWindow::setMaxTextItemsDisplayed(int val) { - bool ok; - bool valid; - QString text = QInputDialog::getText(this, tr("Maximum Number of Text Items"), - tr("Maximum Text Items Diplayed:"), QLineEdit::Normal, - QString("%1").arg(viewer->textRenderer()->getMax_textItems()), &ok); - text.toInt(&valid); - if (ok && valid){ - viewer->textRenderer()->setMax(text.toInt()); - } + viewer->textRenderer()->setMax(val); } void MainWindow::resetHeader() @@ -2321,3 +2342,8 @@ void MainWindow::propagate_action() } } } +void MainWindow::setTransparencyPasses(int val) +{ + viewer->setTotalPass(val); + viewer->update(); +} diff --git a/Polyhedron/demo/Polyhedron/MainWindow.h b/Polyhedron/demo/Polyhedron/MainWindow.h index f176ce37018..269d03fe4f3 100644 --- a/Polyhedron/demo/Polyhedron/MainWindow.h +++ b/Polyhedron/demo/Polyhedron/MainWindow.h @@ -307,7 +307,8 @@ protected Q_SLOTS: //!Swap the visibility of the selected item(s). void on_actionShowHide_triggered(); //!Pops a dialog to change the max TextItems - void setMaxTextItemsDisplayed(); + void setMaxTextItemsDisplayed(int val); + void setTransparencyPasses(int val); // Select A/B //!Sets the selected item as item_A. void on_actionSetPolyhedronA_triggered(); diff --git a/Polyhedron/demo/Polyhedron/Plugins/IO/PLY_io_plugin.cpp b/Polyhedron/demo/Polyhedron/Plugins/IO/PLY_io_plugin.cpp index 846172e6c45..ed37933d0e4 100644 --- a/Polyhedron/demo/Polyhedron/Plugins/IO/PLY_io_plugin.cpp +++ b/Polyhedron/demo/Polyhedron/Plugins/IO/PLY_io_plugin.cpp @@ -3,6 +3,7 @@ #include "Scene_points_with_normal_item.h" #include +#include #include #include #include @@ -154,7 +155,8 @@ Polyhedron_demo_ply_plugin::load(QFileInfo fileinfo) { QApplication::restoreOverrideCursor(); return NULL; } - + if(item->has_normals()) + item->setRenderingMode(CGAL::Three::Three::defaultPointSetRenderingMode()); item->setName(fileinfo.completeBaseName()); QApplication::restoreOverrideCursor(); return item; diff --git a/Polyhedron/demo/Polyhedron/Plugins/IO/XYZ_io_plugin.cpp b/Polyhedron/demo/Polyhedron/Plugins/IO/XYZ_io_plugin.cpp index 9f95025a27f..3228bf27d90 100644 --- a/Polyhedron/demo/Polyhedron/Plugins/IO/XYZ_io_plugin.cpp +++ b/Polyhedron/demo/Polyhedron/Plugins/IO/XYZ_io_plugin.cpp @@ -3,6 +3,7 @@ #include #include +#include #include #include #include @@ -49,6 +50,9 @@ Polyhedron_demo_xyz_plugin::load(QFileInfo fileinfo) delete point_set_item; return NULL; } + if(point_set_item->has_normals()) + point_set_item->setRenderingMode(CGAL::Three::Three::defaultPointSetRenderingMode()); + return point_set_item; } diff --git a/Polyhedron/demo/Polyhedron/Preferences.ui b/Polyhedron/demo/Polyhedron/Preferences.ui index 86e1112ff8c..dd93a2ef0c9 100644 --- a/Polyhedron/demo/Polyhedron/Preferences.ui +++ b/Polyhedron/demo/Polyhedron/Preferences.ui @@ -6,18 +6,30 @@ 0 0 - 612 - 253 + 631 + 631 + + + 0 + 0 + + Preferences - + + + + 0 + 0 + + Settings @@ -25,11 +37,14 @@ - + 0 0 + + Qt::ScrollBarAsNeeded + Qt::ScrollBarAlwaysOff @@ -44,8 +59,8 @@ 0 0 - 259 - 159 + 278 + 537 @@ -64,10 +79,110 @@ - - - Set &Maximum Text Items Displayed... + + + + 0 + 0 + + + Max Text Items Displayed: + + + 1 + + + 999999999 + + + 100000 + + + + + + + + 0 + 0 + + + + Transparency Pass Number: + + + 4 + + + + + + + Surface Mesh Default RenderingMode + + + + + + 1 + + + + Gouraud + + + + + flat+edges + + + + + flat + + + + + wire + + + + + points + + + + + + + + + + + Point Set Default RenderingMode + + + + + + + points + + + + + shaded points + + + + + pts+normals + + + + + @@ -77,13 +192,6 @@ - - - - Set Transparency &Pass Number... - - - diff --git a/Polyhedron/demo/Polyhedron/Scene_item.cpp b/Polyhedron/demo/Polyhedron/Scene_item.cpp index fb69699861a..ce7b0a53370 100644 --- a/Polyhedron/demo/Polyhedron/Scene_item.cpp +++ b/Polyhedron/demo/Polyhedron/Scene_item.cpp @@ -1,6 +1,7 @@ #include #include #include +#include #include #include #include @@ -61,30 +62,6 @@ void CGAL::Three::Scene_item::itemAboutToBeDestroyed(CGAL::Three::Scene_item* it } } - -QString modeName(RenderingMode mode) { - switch(mode) - { - case Points: - return QObject::tr("points"); - case ShadedPoints: - return QObject::tr("shaded points"); - case Wireframe: - return QObject::tr("wire"); - case Flat: - return QObject::tr("flat"); - case FlatPlusEdges: - return QObject::tr("flat+edges"); - case Gouraud: - return QObject::tr("Gouraud"); - case PointsPlusNormals: - return QObject::tr("pts+normals"); - default: - Q_ASSERT(false); - return QObject::tr("unknown"); - } -} - const char* slotName(RenderingMode mode) { switch(mode) { @@ -111,7 +88,7 @@ const char* slotName(RenderingMode mode) { // Rendering mode as a human readable string QString CGAL::Three::Scene_item::renderingModeName() const { - return modeName(renderingMode()); + return CGAL::Three::Three::modeName(renderingMode()); } QMenu* CGAL::Three::Scene_item::contextMenu() { @@ -125,7 +102,7 @@ QMenu* CGAL::Three::Scene_item::contextMenu() ++mode) { if(!supportsRenderingMode(RenderingMode(mode))) continue; - QString mName = modeName(RenderingMode(mode)); + QString mName = CGAL::Three::Three::modeName(RenderingMode(mode)); defaultContextMenu->addAction(tr("Set %1 Mode") .arg(mName), this, diff --git a/Polyhedron/demo/Polyhedron/Scene_points_with_normal_item.cpp b/Polyhedron/demo/Polyhedron/Scene_points_with_normal_item.cpp index aeb972b7300..5ab9b97045e 100644 --- a/Polyhedron/demo/Polyhedron/Scene_points_with_normal_item.cpp +++ b/Polyhedron/demo/Polyhedron/Scene_points_with_normal_item.cpp @@ -8,6 +8,7 @@ #include #include +#include #include #include #include @@ -212,16 +213,15 @@ Scene_points_with_normal_item::Scene_points_with_normal_item(const Scene_points_ { d = new Scene_points_with_normal_item_priv(toCopy, this); - if (has_normals()) - { - setRenderingMode(PointsPlusNormals); - is_selected = true; - } - else - { - setRenderingMode(Points); - is_selected = true; - } + if (!has_normals()) + { + setRenderingMode(Points); + is_selected = true; + } + else{ + setRenderingMode(CGAL::Three::Three::defaultPointSetRenderingMode()); + is_selected = true; + } if(d->m_points->number_of_points() < 30 ) d->point_Slider->setValue(5); else @@ -237,7 +237,7 @@ Scene_points_with_normal_item::Scene_points_with_normal_item(const SMesh& input_ // Converts Polyhedron vertices to point set. // Computes vertices normal from connectivity. d = new Scene_points_with_normal_item_priv(input_mesh, this); - setRenderingMode(PointsPlusNormals); + setRenderingMode(CGAL::Three::Three::defaultPointSetRenderingMode()); is_selected = true; if(d->m_points->number_of_points() < 30 ) d->point_Slider->setValue(5); @@ -584,8 +584,13 @@ bool Scene_points_with_normal_item::read_las_point_set(std::istream& stream) std::cerr << d->m_points->info(); - if (d->m_points->has_normal_map()) - setRenderingMode(PointsPlusNormals); + if (!d->m_points->has_normal_map()) + { + setRenderingMode(Points); + } + else{ + setRenderingMode(CGAL::Three::Three::defaultPointSetRenderingMode()); + } if (d->m_points->check_colors()) std::cerr << "-> Point set has colors" << std::endl; @@ -622,8 +627,13 @@ bool Scene_points_with_normal_item::read_ply_point_set(std::istream& stream) d->point_Slider->setValue(2); std::cerr << d->m_points->info(); - if (d->m_points->has_normal_map()) - setRenderingMode(PointsPlusNormals); + if (!d->m_points->has_normal_map()) + { + setRenderingMode(Points); + } + else{ + setRenderingMode(CGAL::Three::Three::defaultPointSetRenderingMode()); + } if (d->m_points->check_colors()) std::cerr << "-> Point set has colors" << std::endl; diff --git a/Polyhedron/demo/Polyhedron/Scene_surface_mesh_item.cpp b/Polyhedron/demo/Polyhedron/Scene_surface_mesh_item.cpp index ad5f9c9817a..2a58575b735 100644 --- a/Polyhedron/demo/Polyhedron/Scene_surface_mesh_item.cpp +++ b/Polyhedron/demo/Polyhedron/Scene_surface_mesh_item.cpp @@ -42,6 +42,7 @@ #include #include #include +#include #include #include @@ -252,7 +253,7 @@ Scene_surface_mesh_item::Scene_surface_mesh_item() { d = new Scene_surface_mesh_item_priv(new SMesh(), this); d->floated = false; - + setRenderingMode(CGAL::Three::Three::defaultSurfaceMeshRenderingMode()); d->checkFloat(); d->textVItems = new TextListItem(this); d->textEItems = new TextListItem(this); @@ -265,8 +266,8 @@ Scene_surface_mesh_item::Scene_surface_mesh_item() Scene_surface_mesh_item::Scene_surface_mesh_item(const Scene_surface_mesh_item& other) { d = new Scene_surface_mesh_item_priv(other, this); + setRenderingMode(CGAL::Three::Three::defaultSurfaceMeshRenderingMode()); d->floated = false; - d->checkFloat(); d->textVItems = new TextListItem(this); d->textEItems = new TextListItem(this); @@ -280,7 +281,7 @@ void Scene_surface_mesh_item::standard_constructor(SMesh* sm) { d = new Scene_surface_mesh_item_priv(sm, this); d->floated = false; - + setRenderingMode(CGAL::Three::Three::defaultSurfaceMeshRenderingMode()); d->checkFloat(); d->textVItems = new TextListItem(this); d->textEItems = new TextListItem(this); diff --git a/Polyhedron/demo/Polyhedron/Three.cpp b/Polyhedron/demo/Polyhedron/Three.cpp index ae5b0f0dc2e..5bedb74a671 100644 --- a/Polyhedron/demo/Polyhedron/Three.cpp +++ b/Polyhedron/demo/Polyhedron/Three.cpp @@ -9,6 +9,8 @@ QMainWindow* Three::s_mainwindow = NULL; Scene_interface* Three::s_scene = NULL; QObject* Three::s_connectable_scene = NULL; Three* Three::s_three = NULL; +RenderingMode Three::s_defaultSMRM; +RenderingMode Three::s_defaultPSRM; QMainWindow* Three::mainWindow() { @@ -130,3 +132,55 @@ void Three::autoConnectActions(Polyhedron_demo_plugin_interface *plugin) action->objectName().toUtf8().data()); } // end foreach action of actions() } + +RenderingMode Three::defaultSurfaceMeshRenderingMode() +{ + return s_defaultSMRM; +} +RenderingMode Three::defaultPointSetRenderingMode() +{ + return s_defaultPSRM; +} + +QString Three::modeName(RenderingMode mode) { + switch(mode) + { + case Points: + return QObject::tr("points"); + case ShadedPoints: + return QObject::tr("shaded points"); + case Wireframe: + return QObject::tr("wire"); + case Flat: + return QObject::tr("flat"); + case FlatPlusEdges: + return QObject::tr("flat+edges"); + case Gouraud: + return QObject::tr("Gouraud"); + case PointsPlusNormals: + return QObject::tr("pts+normals"); + default: + Q_ASSERT(false); + return QObject::tr("unknown"); + } +} + +RenderingMode Three::modeFromName(QString name) { + if(name == "points") + return Points; + if(name == "shaded points") + return ShadedPoints; + if(name == "wire") + return Wireframe; + if(name == "flat") + return Flat; + if(name == "flat+edges") + return FlatPlusEdges; + if(name == "Gouraud") + return Gouraud; + if(name == "pts+normals") + return PointsPlusNormals; + Q_ASSERT(false); + return Points; +} + diff --git a/Polyhedron/demo/Polyhedron/Viewer.cpp b/Polyhedron/demo/Polyhedron/Viewer.cpp index ec69ad274ab..d2809a4d708 100644 --- a/Polyhedron/demo/Polyhedron/Viewer.cpp +++ b/Polyhedron/demo/Polyhedron/Viewer.cpp @@ -106,7 +106,6 @@ Viewer::Viewer(QWidget* parent, bool antialiasing) d->shader_programs.resize(NB_OF_PROGRAMS); d->textRenderer = new TextRenderer(); d->is_2d_selection_mode = false; - d->total_pass = 4; connect( d->textRenderer, SIGNAL(sendMessage(QString,int)), this, SLOT(printMessage(QString,int)) ); @@ -1293,15 +1292,6 @@ void Viewer::setTotalPass(int p) update(); } -void Viewer::setTotalPass_clicked() -{ - bool ok; - int passes = QInputDialog::getInt(0, QString("Set Number of Passes"), QString("Number of Depth Peeling Passes: "), 4, 2,100, 1, &ok); - if(!ok) - return; - setTotalPass(passes); -} - void Viewer::messageLogged(QOpenGLDebugMessage msg) { QString error; diff --git a/Polyhedron/demo/Polyhedron/Viewer.h b/Polyhedron/demo/Polyhedron/Viewer.h index 582983de04c..e197f23f60f 100644 --- a/Polyhedron/demo/Polyhedron/Viewer.h +++ b/Polyhedron/demo/Polyhedron/Viewer.h @@ -114,8 +114,6 @@ public Q_SLOTS: { setMouseBinding(::Qt::ShiftModifier, ::Qt::LeftButton, CGAL::qglviewer::SELECT); } - //!Prompt a dialog to set the number of passes for the transparency. - void setTotalPass_clicked(); virtual void setNoBinding() Q_DECL_OVERRIDE { setMouseBinding(::Qt::ShiftModifier, ::Qt::LeftButton, CGAL::qglviewer::NO_CLICK_ACTION); diff --git a/Three/include/CGAL/Three/Three.h b/Three/include/CGAL/Three/Three.h index 307034838d0..9887ed55727 100644 --- a/Three/include/CGAL/Three/Three.h +++ b/Three/include/CGAL/Three/Three.h @@ -48,14 +48,20 @@ public: static Scene_interface* scene(); static QObject* connectableScene(); static Three* messages(); + static RenderingMode defaultSurfaceMeshRenderingMode(); + static RenderingMode defaultPointSetRenderingMode(); + static QString modeName(RenderingMode mode); + static RenderingMode modeFromName(QString name); /*! \brief Adds a dock widget to the interface * - * Adds a dock widget in the left section of the MainWindow. If the slot is already taken, the dock widgets will be tabified. + * Adds a dock widget in the left section of the MainWindow. If the slot is already + * taken, the dock widgets will be tabified. */ void addDockWidget(QDockWidget* dock_widget); /*! \brief Gets an item of the templated type. - * \returns the first `SceneType` item found in the scene's list of currently selected items; + * \returns the first `SceneType` item found in the scene's list of currently selected + * items; * \returns NULL if there is no `SceneType` in the list. */ template @@ -63,7 +69,8 @@ public: /*! \brief Automatically connects each action of `plugin` to the corresponding slot. * - * \attention Each action named `ActionName` in the plugin's `actions()` list must have a corresponding slot named `on_ActionsName_triggered()` + * \attention Each action named `ActionName` in the plugin's `actions()` list must have + * a corresponding slot named `on_ActionsName_triggered()` * in the plugin. */ static void autoConnectActions(CGAL::Three::Polyhedron_demo_plugin_interface* plugin); @@ -72,6 +79,8 @@ protected: static Scene_interface* s_scene; static QObject* s_connectable_scene; static Three* s_three; + static RenderingMode s_defaultSMRM; + static RenderingMode s_defaultPSRM; }; } From 5489d35c96c7dbff888b5527f7beb0bbba780c3a Mon Sep 17 00:00:00 2001 From: Maxime Gimeno Date: Thu, 23 Aug 2018 09:42:14 +0200 Subject: [PATCH 060/268] Add a fullscreen-ish mode that hides all dockwidgets. Move spacer in selection widget. --- Polyhedron/demo/Polyhedron/MainWindow.cpp | 27 +++++++++++++++++++ Polyhedron/demo/Polyhedron/MainWindow.h | 4 +++ .../Plugins/PMP/Selection_widget.ui | 26 +++++++++--------- Polyhedron/demo/Polyhedron/Viewer.cpp | 4 +++ 4 files changed, 48 insertions(+), 13 deletions(-) diff --git a/Polyhedron/demo/Polyhedron/MainWindow.cpp b/Polyhedron/demo/Polyhedron/MainWindow.cpp index a4e468fffb5..e9ce7f61bc5 100644 --- a/Polyhedron/demo/Polyhedron/MainWindow.cpp +++ b/Polyhedron/demo/Polyhedron/MainWindow.cpp @@ -161,6 +161,9 @@ MainWindow::MainWindow(bool verbose, QWidget* parent) shortcut = new QShortcut(QKeySequence(Qt::Key_F5), this); connect(shortcut, SIGNAL(activated()), this, SLOT(reloadItem())); + shortcut = new QShortcut(QKeySequence(Qt::Key_F11), this); + connect(shortcut, SIGNAL(activated()), + this, SLOT(toggleFullScreen())); } proxyModel = new QSortFilterProxyModel(this); @@ -2347,3 +2350,27 @@ void MainWindow::setTransparencyPasses(int val) viewer->setTotalPass(val); viewer->update(); } + +void MainWindow::toggleFullScreen() +{ + QList dockWidgets = findChildren(); + if(visibleDockWidgets.isEmpty()) + { + Q_FOREACH(QDockWidget * dock, dockWidgets) + { + if(dock->isVisible()) + { + visibleDockWidgets.append(dock); + dock->hide(); + } + } + } + else + { + Q_FOREACH(QDockWidget * dock, visibleDockWidgets){ + dock->show(); + } + visibleDockWidgets.clear(); + + } +} diff --git a/Polyhedron/demo/Polyhedron/MainWindow.h b/Polyhedron/demo/Polyhedron/MainWindow.h index 269d03fe4f3..aaa577c8e73 100644 --- a/Polyhedron/demo/Polyhedron/MainWindow.h +++ b/Polyhedron/demo/Polyhedron/MainWindow.h @@ -428,6 +428,10 @@ public: void evaluate_script_quiet(QString script, const QString & fileName = QString()); #endif +public Q_SLOTS: + void toggleFullScreen(); +private: + QList visibleDockWidgets; }; #endif // ifndef MAINWINDOW_H diff --git a/Polyhedron/demo/Polyhedron/Plugins/PMP/Selection_widget.ui b/Polyhedron/demo/Polyhedron/Plugins/PMP/Selection_widget.ui index 8075686e33b..7bba0ebd80f 100644 --- a/Polyhedron/demo/Polyhedron/Plugins/PMP/Selection_widget.ui +++ b/Polyhedron/demo/Polyhedron/Plugins/PMP/Selection_widget.ui @@ -15,6 +15,19 @@ + + + + Qt::Vertical + + + + 20 + 40 + + + + @@ -42,19 +55,6 @@ - - - - Qt::Vertical - - - - 20 - 40 - - - - diff --git a/Polyhedron/demo/Polyhedron/Viewer.cpp b/Polyhedron/demo/Polyhedron/Viewer.cpp index d2809a4d708..e1b4b4e38df 100644 --- a/Polyhedron/demo/Polyhedron/Viewer.cpp +++ b/Polyhedron/demo/Polyhedron/Viewer.cpp @@ -142,6 +142,10 @@ Viewer::Viewer(QWidget* parent, bool antialiasing) setMouseBindingDescription(Qt::Key_O, Qt::NoModifier, Qt::LeftButton, tr("Move the camera orthogonally to the picked facet of a Scene_surface_mesh_item or " "to the current selection of a Scene_points_with_normal_item.")); + setKeyDescription(Qt::Key_F5, + tr("Reloads the selected item if possible.")); + setKeyDescription(Qt::Key_F11, + tr("Toggle the viewer's fullscreen mode.")); prev_radius = sceneRadius(); d->has_text = false; From 83f24f6cbec05f6af349076da89d1be21257bdcd Mon Sep 17 00:00:00 2001 From: Maxime Gimeno Date: Thu, 23 Aug 2018 15:34:14 +0200 Subject: [PATCH 061/268] Fix load script cancellation. --- Polyhedron/demo/Polyhedron/MainWindow.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/Polyhedron/demo/Polyhedron/MainWindow.cpp b/Polyhedron/demo/Polyhedron/MainWindow.cpp index e9ce7f61bc5..a863a386094 100644 --- a/Polyhedron/demo/Polyhedron/MainWindow.cpp +++ b/Polyhedron/demo/Polyhedron/MainWindow.cpp @@ -1553,7 +1553,8 @@ void MainWindow::on_actionLoadScript_triggered() tr("Select a script to run..."), ".", "QTScripts (*.js);;All Files (*)"); - +if(filename.isEmpty()) + return; loadScript(QFileInfo(filename)); #endif } From 9a5bd3521797d982a569b59c2c885e3fcba253c1 Mon Sep 17 00:00:00 2001 From: Maxime Gimeno Date: Thu, 23 Aug 2018 16:54:54 +0200 Subject: [PATCH 062/268] Move Lighting Settings to Preferences. --- Polyhedron/demo/Polyhedron/MainWindow.cpp | 5 ++++- Polyhedron/demo/Polyhedron/MainWindow.h | 2 +- Polyhedron/demo/Polyhedron/MainWindow.ui | 6 ------ Polyhedron/demo/Polyhedron/Preferences.ui | 7 +++++++ 4 files changed, 12 insertions(+), 8 deletions(-) diff --git a/Polyhedron/demo/Polyhedron/MainWindow.cpp b/Polyhedron/demo/Polyhedron/MainWindow.cpp index 74ec739a8e7..b4087c29216 100644 --- a/Polyhedron/demo/Polyhedron/MainWindow.cpp +++ b/Polyhedron/demo/Polyhedron/MainWindow.cpp @@ -1856,6 +1856,9 @@ void MainWindow::on_actionPreferences_triggered() connect(prefdiag.background_colorPushButton, &QPushButton::clicked, this, &MainWindow::setBackgroundColor); + connect(prefdiag.lightingPushButton, &QPushButton::clicked, + this, &MainWindow::setLighting_triggered); + prefdiag.surface_meshComboBox->setCurrentText(CGAL::Three::Three::modeName( CGAL::Three::Three::s_defaultSMRM)); connect(prefdiag.surface_meshComboBox, &QComboBox::currentTextChanged, @@ -1947,7 +1950,7 @@ void MainWindow::setBackgroundColor() } } -void MainWindow::on_actionSetLighting_triggered() +void MainWindow::setLighting_triggered() { viewer->setLighting(); } diff --git a/Polyhedron/demo/Polyhedron/MainWindow.h b/Polyhedron/demo/Polyhedron/MainWindow.h index e4a586963fe..db79649c1dc 100644 --- a/Polyhedron/demo/Polyhedron/MainWindow.h +++ b/Polyhedron/demo/Polyhedron/MainWindow.h @@ -328,7 +328,7 @@ protected Q_SLOTS: //!Opens a Dialog to choose a color and make it the background color. void setBackgroundColor(); //!Opens a Dialog to change the lighting settings - void on_actionSetLighting_triggered(); + void setLighting_triggered(); /*! Opens a Dialog to enter coordinates of the new center point and sets it * with viewerShow. *@see viewerShow(float, float, float, float, float, float) diff --git a/Polyhedron/demo/Polyhedron/MainWindow.ui b/Polyhedron/demo/Polyhedron/MainWindow.ui index 26687dcbb9f..5065f1d63cc 100644 --- a/Polyhedron/demo/Polyhedron/MainWindow.ui +++ b/Polyhedron/demo/Polyhedron/MainWindow.ui @@ -95,7 +95,6 @@ - @@ -493,11 +492,6 @@ Set Different Colors for Selected Items - - - Change Lighting &Settings... - - diff --git a/Polyhedron/demo/Polyhedron/Preferences.ui b/Polyhedron/demo/Polyhedron/Preferences.ui index dd93a2ef0c9..29eadeb0245 100644 --- a/Polyhedron/demo/Polyhedron/Preferences.ui +++ b/Polyhedron/demo/Polyhedron/Preferences.ui @@ -192,6 +192,13 @@ + + + + Change Lighting &Settings... + + + From 05a15e093a86c810160315063966463ed25add38 Mon Sep 17 00:00:00 2001 From: Maxime Gimeno Date: Thu, 23 Aug 2018 17:37:04 +0200 Subject: [PATCH 063/268] Add a filter for the operations menu. --- Polyhedron/demo/Polyhedron/MainWindow.cpp | 11 ++++++++++- Polyhedron/demo/Polyhedron/MainWindow.h | 2 ++ 2 files changed, 12 insertions(+), 1 deletion(-) diff --git a/Polyhedron/demo/Polyhedron/MainWindow.cpp b/Polyhedron/demo/Polyhedron/MainWindow.cpp index b4087c29216..547b1f37ac7 100644 --- a/Polyhedron/demo/Polyhedron/MainWindow.cpp +++ b/Polyhedron/demo/Polyhedron/MainWindow.cpp @@ -126,6 +126,7 @@ QScriptValue myPrintFunction(QScriptContext *context, QScriptEngine *engine) MainWindow::~MainWindow() { + searchAction->deleteLater(); delete ui; delete statistics_ui; } @@ -135,6 +136,7 @@ MainWindow::MainWindow(bool verbose, QWidget* parent) ui = new Ui::MainWindow; ui->setupUi(this); menuBar()->setNativeMenuBar(false); + searchAction = new QWidgetAction(0); CGAL::Three::Three::s_mainwindow = this; menu_map[ui->menuOperations->title()] = ui->menuOperations; this->verbose = verbose; @@ -347,6 +349,10 @@ MainWindow::MainWindow(bool verbose, QWidget* parent) readSettings(); // Among other things, the column widths are stored. // Load plugins, and re-enable actions that need it. + operationSearchBar.setPlaceholderText("Research..."); + searchAction->setDefaultWidget(&operationSearchBar); + connect(&operationSearchBar, &QLineEdit::textChanged, + this, &MainWindow::filterOperations); loadPlugins(); // Setup the submenu of the View menu that can toggle the dockwidgets @@ -404,9 +410,11 @@ void filterMenuOperations(QMenu* menu) void MainWindow::filterOperations() { + QString filter=operationSearchBar.text(); Q_FOREACH(const PluginNamePair& p, plugins) { Q_FOREACH(QAction* action, p.first->actions()) { - action->setVisible( p.first->applicable(action) ); + action->setVisible( p.first->applicable(action) + && action->text().contains(filter, Qt::CaseInsensitive)); } } // do a pass over all menus in Operations and their sub-menus(etc.) and hide them when they are empty @@ -675,6 +683,7 @@ void MainWindow::updateMenus() as = ui->menuOperations->actions(); qSort(as.begin(), as.end(), actionsByName); ui->menuOperations->clear(); + ui->menuOperations->addAction(searchAction); ui->menuOperations->addActions(as); } diff --git a/Polyhedron/demo/Polyhedron/MainWindow.h b/Polyhedron/demo/Polyhedron/MainWindow.h index db79649c1dc..d3c31ba53eb 100644 --- a/Polyhedron/demo/Polyhedron/MainWindow.h +++ b/Polyhedron/demo/Polyhedron/MainWindow.h @@ -434,6 +434,8 @@ public Q_SLOTS: void toggleFullScreen(); private: QList visibleDockWidgets; + QLineEdit operationSearchBar; + QWidgetAction* searchAction; }; #endif // ifndef MAINWINDOW_H From 4e4620e9ef5734e7281ccf4dd1582a88bfa38809 Mon Sep 17 00:00:00 2001 From: Maxime Gimeno Date: Tue, 28 Aug 2018 09:11:28 +0200 Subject: [PATCH 064/268] Fix last_save_dir --- Polyhedron/demo/Polyhedron/MainWindow.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Polyhedron/demo/Polyhedron/MainWindow.cpp b/Polyhedron/demo/Polyhedron/MainWindow.cpp index 547b1f37ac7..0b3bbfd6766 100644 --- a/Polyhedron/demo/Polyhedron/MainWindow.cpp +++ b/Polyhedron/demo/Polyhedron/MainWindow.cpp @@ -1706,7 +1706,7 @@ void MainWindow::on_actionSaveAs_triggered() filters.join(";;"), &sf); - last_saved_dir = QFileInfo(dir).absoluteDir().path(); + last_saved_dir = QFileInfo(filename).absoluteDir().path(); extensions.indexIn(sf.split(";;").first()); QString filter_ext, filename_ext; filter_ext = extensions.cap().split(" ").first();// in case of syntax like (*.a *.b) From 4c9b2bafbf8c418c36c6d04dcc0475d645b44d06 Mon Sep 17 00:00:00 2001 From: Maxime Gimeno Date: Tue, 28 Aug 2018 09:35:01 +0200 Subject: [PATCH 065/268] Add a setting to define the default save directory. Default value for this setting is the home path. --- Polyhedron/demo/Polyhedron/MainWindow.cpp | 23 ++++++++++++++++++----- Polyhedron/demo/Polyhedron/MainWindow.h | 2 ++ Polyhedron/demo/Polyhedron/Preferences.ui | 7 +++++++ 3 files changed, 27 insertions(+), 5 deletions(-) diff --git a/Polyhedron/demo/Polyhedron/MainWindow.cpp b/Polyhedron/demo/Polyhedron/MainWindow.cpp index 0b3bbfd6766..55a0d51ab8a 100644 --- a/Polyhedron/demo/Polyhedron/MainWindow.cpp +++ b/Polyhedron/demo/Polyhedron/MainWindow.cpp @@ -1482,6 +1482,7 @@ void MainWindow::readSettings() // read plugin blacklist QStringList blacklist=settings.value("plugin_blacklist",QStringList()).toStringList(); Q_FOREACH(QString name,blacklist){ plugin_blacklist.insert(name); } + def_save_dir = settings.value("default_saveas_dir", QDir::homePath()).toString(); } void MainWindow::writeSettings() @@ -1695,10 +1696,10 @@ void MainWindow::on_actionSaveAs_triggered() { dir = item->property("defaultSaveDir").toString(); } - else if(dir.isEmpty()) + else if(!last_saved_dir.isEmpty() && dir.isEmpty()) dir = QString("%1/%2").arg(last_saved_dir).arg(item->defaultSaveName()); - if(dir.isEmpty()) - dir = item->name(); + else if(dir.isEmpty()) + dir = QString("%1/%2").arg(def_save_dir).arg(item->name()); QString filename = QFileDialog::getSaveFileName(this, caption, @@ -1706,6 +1707,8 @@ void MainWindow::on_actionSaveAs_triggered() filters.join(";;"), &sf); + if(filename.isEmpty()) + continue; last_saved_dir = QFileInfo(filename).absoluteDir().path(); extensions.indexIn(sf.split(";;").first()); QString filter_ext, filename_ext; @@ -1715,8 +1718,6 @@ void MainWindow::on_actionSaveAs_triggered() filter_ext.remove("("); //remove * filter_ext=filter_ext.right(filter_ext.size()-1); - if(filename.isEmpty()) - continue; QStringList filename_split = filename.split("."); filename_split.removeFirst(); @@ -1865,6 +1866,9 @@ void MainWindow::on_actionPreferences_triggered() connect(prefdiag.background_colorPushButton, &QPushButton::clicked, this, &MainWindow::setBackgroundColor); + connect(prefdiag.default_save_asPushButton, &QPushButton::clicked, + this, &MainWindow::setDefaultSaveDir); + connect(prefdiag.lightingPushButton, &QPushButton::clicked, this, &MainWindow::setLighting_triggered); @@ -2392,3 +2396,12 @@ void MainWindow::toggleFullScreen() } } + +void MainWindow::setDefaultSaveDir() +{ + QString dirpath = QFileDialog::getExistingDirectory(this, "Set Default Save as Directory", def_save_dir); + if(!dirpath.isEmpty()) + def_save_dir = dirpath; + QSettings settings; + settings.setValue("default_saveas_dir", def_save_dir); +} diff --git a/Polyhedron/demo/Polyhedron/MainWindow.h b/Polyhedron/demo/Polyhedron/MainWindow.h index d3c31ba53eb..a3be3f9ab87 100644 --- a/Polyhedron/demo/Polyhedron/MainWindow.h +++ b/Polyhedron/demo/Polyhedron/MainWindow.h @@ -432,10 +432,12 @@ public: #endif public Q_SLOTS: void toggleFullScreen(); + void setDefaultSaveDir(); private: QList visibleDockWidgets; QLineEdit operationSearchBar; QWidgetAction* searchAction; + QString def_save_dir; }; #endif // ifndef MAINWINDOW_H diff --git a/Polyhedron/demo/Polyhedron/Preferences.ui b/Polyhedron/demo/Polyhedron/Preferences.ui index 29eadeb0245..0435444e306 100644 --- a/Polyhedron/demo/Polyhedron/Preferences.ui +++ b/Polyhedron/demo/Polyhedron/Preferences.ui @@ -199,6 +199,13 @@ + + + + Change Default Saveas Dir... + + + From 02eed9aae27898b3dff3a20ea34981eeea49be92 Mon Sep 17 00:00:00 2001 From: Maxime Gimeno Date: Tue, 28 Aug 2018 10:39:12 +0200 Subject: [PATCH 066/268] Fix color of display_property buttons --- .../demo/Polyhedron/Plugins/Display/Display_property_plugin.cpp | 2 -- 1 file changed, 2 deletions(-) diff --git a/Polyhedron/demo/Polyhedron/Plugins/Display/Display_property_plugin.cpp b/Polyhedron/demo/Polyhedron/Plugins/Display/Display_property_plugin.cpp index 638a521f107..6dab8378c56 100644 --- a/Polyhedron/demo/Polyhedron/Plugins/Display/Display_property_plugin.cpp +++ b/Polyhedron/demo/Polyhedron/Plugins/Display/Display_property_plugin.cpp @@ -115,7 +115,6 @@ public: gm = minColor.greenF(); bm = minColor.blueF(); QPalette palette(minColor); - dock_widget->minColorButton->setAutoFillBackground(true); dock_widget->minColorButton->setPalette(palette); dock_widget->minColorButton->update(); }); @@ -130,7 +129,6 @@ public: gM = maxColor.greenF(); bM = maxColor.blueF(); - dock_widget->maxColorButton->setAutoFillBackground(true); dock_widget->maxColorButton->setPalette(palette); dock_widget->maxColorButton->update(); }); From e507fb2e28ca7004307b1187fe38757ee227d96f Mon Sep 17 00:00:00 2001 From: Maxime Gimeno Date: Tue, 28 Aug 2018 11:33:22 +0200 Subject: [PATCH 067/268] Don't automatically select the selection item when picking the associated mesh_item. --- Polyhedron/demo/Polyhedron/MainWindow.cpp | 1 + .../Polyhedron/Plugins/PMP/Selection_plugin.cpp | 16 +++++++++------- .../Scene_polyhedron_selection_item.cpp | 2 ++ 3 files changed, 12 insertions(+), 7 deletions(-) diff --git a/Polyhedron/demo/Polyhedron/MainWindow.cpp b/Polyhedron/demo/Polyhedron/MainWindow.cpp index 55a0d51ab8a..c80a8690b1e 100644 --- a/Polyhedron/demo/Polyhedron/MainWindow.cpp +++ b/Polyhedron/demo/Polyhedron/MainWindow.cpp @@ -685,6 +685,7 @@ void MainWindow::updateMenus() ui->menuOperations->clear(); ui->menuOperations->addAction(searchAction); ui->menuOperations->addActions(as); + operationSearchBar.setFocus(); } bool MainWindow::hasPlugin(const QString& pluginName) const diff --git a/Polyhedron/demo/Polyhedron/Plugins/PMP/Selection_plugin.cpp b/Polyhedron/demo/Polyhedron/Plugins/PMP/Selection_plugin.cpp index 015c24c6db1..891013267bb 100644 --- a/Polyhedron/demo/Polyhedron/Plugins/PMP/Selection_plugin.cpp +++ b/Polyhedron/demo/Polyhedron/Plugins/PMP/Selection_plugin.cpp @@ -170,9 +170,9 @@ public Q_SLOTS: connect(new_item, SIGNAL(updateInstructions(QString)), this, SLOT(setInstructions(QString))); connect(this, SIGNAL(set_operation_mode(int)),new_item, SLOT(set_operation_mode(int))); int item_id = scene->addItem(new_item); - QObject* scene_ptr = dynamic_cast(scene); - if (scene_ptr) - connect(new_item,SIGNAL(simplicesSelected(CGAL::Three::Scene_item*)), scene_ptr, SLOT(setSelectedItem(CGAL::Three::Scene_item*))); + // QObject* scene_ptr = dynamic_cast(scene); + // if (scene_ptr) + // connect(new_item,SIGNAL(simplicesSelected(CGAL::Three::Scene_item*)), scene_ptr, SLOT(setSelectedItem(CGAL::Three::Scene_item*))); connect(new_item,SIGNAL(isCurrentlySelected(Scene_facegraph_item_k_ring_selection*)), this, SLOT(isCurrentlySelected(Scene_facegraph_item_k_ring_selection*))); connect(new_item,SIGNAL(simplicesSelected(CGAL::Three::Scene_item*)), this, SLOT(filter_operations())); scene->setSelectedItem(item_id); @@ -891,9 +891,9 @@ public Q_SLOTS: connect(selection_item, SIGNAL(updateInstructions(QString)), this, SLOT(setInstructions(QString))); connect(selection_item, SIGNAL(printMessage(QString)), this, SLOT(printMessage(QString))); connect(this, SIGNAL(set_operation_mode(int)),selection_item, SLOT(set_operation_mode(int))); - QObject* scene_ptr = dynamic_cast(scene); - if (scene_ptr) - connect(selection_item,SIGNAL(simplicesSelected(CGAL::Three::Scene_item*)), scene_ptr, SLOT(setSelectedItem(CGAL::Three::Scene_item*))); + //QObject* scene_ptr = dynamic_cast(scene); + //if (scene_ptr) + // connect(selection_item,SIGNAL(simplicesSelected(CGAL::Three::Scene_item*)), scene_ptr, SLOT(setSelectedItem(CGAL::Three::Scene_item*))); connect(selection_item,SIGNAL(isCurrentlySelected(Scene_facegraph_item_k_ring_selection*)), this, SLOT(isCurrentlySelected(Scene_facegraph_item_k_ring_selection*))); on_LassoCheckBox_changed(ui_widget.lassoCheckBox->isChecked()); on_SelectionOrEuler_changed(ui_widget.selectionOrEuler->currentIndex()); @@ -928,7 +928,9 @@ public Q_SLOTS: } void filter_operations() { - Scene_polyhedron_selection_item* selection_item = getSelectedItem(); + Scene_polyhedron_selection_item* selection_item = + qobject_cast(scene->item( + scene->mainSelectionIndex())); if (!selection_item) return; QString current_op = ui_widget.operationsBox->currentText(); diff --git a/Polyhedron/demo/Polyhedron/Scene_polyhedron_selection_item.cpp b/Polyhedron/demo/Polyhedron/Scene_polyhedron_selection_item.cpp index ba749cf15b5..9ec68024f6e 100644 --- a/Polyhedron/demo/Polyhedron/Scene_polyhedron_selection_item.cpp +++ b/Polyhedron/demo/Polyhedron/Scene_polyhedron_selection_item.cpp @@ -1891,6 +1891,7 @@ Scene_polyhedron_selection_item::Scene_polyhedron_selection_item() d->are_temp_buffers_filled = false; d->poly = NULL; d->ready_to_move = false; + setProperty("no_picking", true); } Scene_polyhedron_selection_item::Scene_polyhedron_selection_item(Scene_face_graph_item* poly_item, QMainWindow* mw) @@ -1927,6 +1928,7 @@ Scene_polyhedron_selection_item::Scene_polyhedron_selection_item(Scene_face_grap d->is_treated = false; d->poly_need_update = false; d->ready_to_move = false; + setProperty("no_picking", true); } From 11015420ef89e205694a2e99e117eb94e4f6e3d2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mael=20Rouxel-Labb=C3=A9?= Date: Wed, 5 Sep 2018 10:45:51 +0200 Subject: [PATCH 068/268] Fixed comment command in the user manual --- .../doc/Polygon_mesh_processing/Polygon_mesh_processing.txt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Polygon_mesh_processing/doc/Polygon_mesh_processing/Polygon_mesh_processing.txt b/Polygon_mesh_processing/doc/Polygon_mesh_processing/Polygon_mesh_processing.txt index 8dbb6d4d80c..2a089bbeafb 100644 --- a/Polygon_mesh_processing/doc/Polygon_mesh_processing/Polygon_mesh_processing.txt +++ b/Polygon_mesh_processing/doc/Polygon_mesh_processing/Polygon_mesh_processing.txt @@ -503,7 +503,7 @@ with duplicated border edges. \cgalExample{Polygon_mesh_processing/stitch_borders_example.cpp} ******************* -\cond + ******************* \subsection PolygonSoups Polygon Soups From f28df03d59e22db9f411f26703fac0f127c92925 Mon Sep 17 00:00:00 2001 From: Maxime Gimeno Date: Fri, 21 Sep 2018 10:45:49 +0200 Subject: [PATCH 069/268] Some enhancements for UI, menus and action names. --- Polyhedron/demo/Polyhedron/MainWindow.ui | 4 +- .../Plugins/Display/Display_property.ui | 28 +++---- .../IO/Implicit_function_io_plugin.cpp | 35 +++------ .../Plugins/Mesh_3/Io_image_plugin.cpp | 2 +- .../Polyhedron/Plugins/Mesh_3/Rib_dialog.ui | 15 +++- .../Polyhedron/Plugins/Mesh_3/raw_image.ui | 15 +++- .../Plugins/PCA/Basic_generator_plugin.cpp | 12 ++- .../Plugins/PCA/Clipping_box_widget.ui | 77 +++++++++++-------- .../Mean_curvature_flow_skeleton_plugin.ui | 17 +++- .../PMP/Point_inside_polyhedron_widget.ui | 4 +- .../Plugins/PMP/Selection_widget.ui | 29 ++----- .../Plugins/Point_set/Alpha_shape_widget.ui | 2 +- .../Point_set_shape_detection_plugin.ui | 28 +------ .../Point_set/Point_set_wlop_plugin.ui | 2 +- .../Surface_reconstruction_plugin.ui | 2 +- .../Plugins/Surface_mesh/OTE_dialog.ui | 15 +--- .../Surface_mesh/Offset_meshing_plugin.cpp | 2 +- .../Plugins/Surface_mesh/Remeshing_dialog.ui | 22 +++--- .../Surface_mesh/Shortest_path_widget.ui | 4 +- .../Surface_mesh_deformation/Deform_mesh.ui | 2 +- .../Polyhedron/Scene_surface_mesh_item.cpp | 6 ++ .../demo/Polyhedron/Show_point_dialog.ui | 2 +- .../Polyhedron/Statistics_on_item_dialog.ui | 2 +- 23 files changed, 162 insertions(+), 165 deletions(-) diff --git a/Polyhedron/demo/Polyhedron/MainWindow.ui b/Polyhedron/demo/Polyhedron/MainWindow.ui index 5065f1d63cc..a9a11be8a45 100644 --- a/Polyhedron/demo/Polyhedron/MainWindow.ui +++ b/Polyhedron/demo/Polyhedron/MainWindow.ui @@ -404,12 +404,12 @@ - Set Polyhedron A + Set FacegraphA - Set Polyhedron B + Set Facegraph B diff --git a/Polyhedron/demo/Polyhedron/Plugins/Display/Display_property.ui b/Polyhedron/demo/Polyhedron/Plugins/Display/Display_property.ui index 8a25ccc618a..5d3db16b4a0 100644 --- a/Polyhedron/demo/Polyhedron/Plugins/Display/Display_property.ui +++ b/Polyhedron/demo/Polyhedron/Plugins/Display/Display_property.ui @@ -14,20 +14,7 @@ Property Displaying - - - - - Qt::Vertical - - - - 20 - 40 - - - - + @@ -190,6 +177,19 @@ + + + + Qt::Vertical + + + + 20 + 40 + + + + diff --git a/Polyhedron/demo/Polyhedron/Plugins/IO/Implicit_function_io_plugin.cpp b/Polyhedron/demo/Polyhedron/Plugins/IO/Implicit_function_io_plugin.cpp index a6b66d40ac2..d6502c608d4 100644 --- a/Polyhedron/demo/Polyhedron/Plugins/IO/Implicit_function_io_plugin.cpp +++ b/Polyhedron/demo/Polyhedron/Plugins/IO/Implicit_function_io_plugin.cpp @@ -96,39 +96,22 @@ init(QMainWindow* mainWindow, CGAL::Three::Scene_interface* scene_interface, Mes this->scene = scene_interface; this->mw = mainWindow; - QAction* actionLoadFunction = new QAction("Load &Implicit Function", mw); + QAction* actionLoadFunction = new QAction("Generate &Implicit Function", mw); if( NULL != actionLoadFunction ) { connect(actionLoadFunction, SIGNAL(triggered()), this, SLOT(load_function())); } QMenu* menuFile = mw->findChild("menuFile"); - if ( NULL != menuFile ) - { - QList menuFileActions = menuFile->actions(); - - // Look for action just after "Load..." action - QAction* actionAfterLoad = NULL; - for ( QList::iterator it_action = menuFileActions.begin(), - end = menuFileActions.end() ; it_action != end ; ++ it_action ) //Q_FOREACH( QAction* action, menuFileActions) - { - if ( NULL != *it_action && (*it_action)->text().contains("Load") ) - { - ++it_action; - if ( it_action != end && NULL != *it_action ) - { - actionAfterLoad = *it_action; - } - } - } - - // Insert "Load implicit function" action - if ( NULL != actionAfterLoad ) - { - menuFile->insertAction(actionAfterLoad,actionLoadFunction); - } - + QMenu* menu = menuFile->findChild("menuGenerateObject"); + if(!menu){ + QAction* actionLoad = mw->findChild("actionLoadPlugin"); + menu = new QMenu(tr("Generate &Objet"), menuFile); + menu->setObjectName("menuGenerateObject"); + menuFile->insertMenu(actionLoad, menu); } + // Insert "Generate Implicit Function" action + menu->addAction(actionLoadFunction); } diff --git a/Polyhedron/demo/Polyhedron/Plugins/Mesh_3/Io_image_plugin.cpp b/Polyhedron/demo/Polyhedron/Plugins/Mesh_3/Io_image_plugin.cpp index e1d81dee10d..65a34c57ba9 100644 --- a/Polyhedron/demo/Polyhedron/Plugins/Mesh_3/Io_image_plugin.cpp +++ b/Polyhedron/demo/Polyhedron/Plugins/Mesh_3/Io_image_plugin.cpp @@ -215,7 +215,7 @@ public: z_control = NULL; current_control = NULL; planeSwitch = new QAction("Add Volume Planes", mw); - QAction *actionLoadDCM = new QAction("Open directory", mw); + QAction *actionLoadDCM = new QAction("Open Directory (for DCM files)", mw); connect(actionLoadDCM, SIGNAL(triggered()), this, SLOT(on_actionLoadDCM_triggered())); if(planeSwitch) { planeSwitch->setProperty("subMenuName", "3D Mesh Generation"); diff --git a/Polyhedron/demo/Polyhedron/Plugins/Mesh_3/Rib_dialog.ui b/Polyhedron/demo/Polyhedron/Plugins/Mesh_3/Rib_dialog.ui index cc30c3975dd..03a4514d7b6 100644 --- a/Polyhedron/demo/Polyhedron/Plugins/Mesh_3/Rib_dialog.ui +++ b/Polyhedron/demo/Polyhedron/Plugins/Mesh_3/Rib_dialog.ui @@ -7,7 +7,7 @@ 0 0 423 - 436 + 443 @@ -217,6 +217,19 @@ + + + + Qt::Vertical + + + + 20 + 40 + + + + diff --git a/Polyhedron/demo/Polyhedron/Plugins/Mesh_3/raw_image.ui b/Polyhedron/demo/Polyhedron/Plugins/Mesh_3/raw_image.ui index caca26af981..b00fef0ba1a 100644 --- a/Polyhedron/demo/Polyhedron/Plugins/Mesh_3/raw_image.ui +++ b/Polyhedron/demo/Polyhedron/Plugins/Mesh_3/raw_image.ui @@ -7,7 +7,7 @@ 0 0 585 - 342 + 326 @@ -278,6 +278,19 @@ + + + + Qt::Vertical + + + + 20 + 40 + + + + diff --git a/Polyhedron/demo/Polyhedron/Plugins/PCA/Basic_generator_plugin.cpp b/Polyhedron/demo/Polyhedron/Plugins/PCA/Basic_generator_plugin.cpp index 1d6a54fdad2..a57c821ac0b 100644 --- a/Polyhedron/demo/Polyhedron/Plugins/PCA/Basic_generator_plugin.cpp +++ b/Polyhedron/demo/Polyhedron/Plugins/PCA/Basic_generator_plugin.cpp @@ -53,8 +53,14 @@ public : QMenu* menuFile = mw->findChild("menuFile"); - QMenu* menu = new QMenu(tr("&Objet Generator Widget"), menuFile); - QAction* actionLoad = mw->findChild("actionLoadPlugin"); + + QMenu* menu = menuFile->findChild("menuGenerateObject"); + if(!menu){ + QAction* actionLoad = mw->findChild("actionLoadPlugin"); + menu = new QMenu(tr("Generate &Objet"), menuFile); + menu->setObjectName("menuGenerateObject"); + menuFile->insertMenu(actionLoad, menu); + } QAction* actionPrism = new QAction("P&rism", mw); @@ -101,12 +107,10 @@ public : this, SLOT(on_actionPolyline_triggered())); _actions << actionPolyline; - menu->clear(); Q_FOREACH(QAction* action, _actions) { menu->addAction(action); } - menuFile->insertMenu(actionLoad, menu); dock_widget = new GeneratorWidget("Basic Objets", mw); dock_widget->setVisible(false); // do not show at the beginning addDockWidget(dock_widget); diff --git a/Polyhedron/demo/Polyhedron/Plugins/PCA/Clipping_box_widget.ui b/Polyhedron/demo/Polyhedron/Plugins/PCA/Clipping_box_widget.ui index 352a677c63d..cd111c2aa2a 100644 --- a/Polyhedron/demo/Polyhedron/Plugins/PCA/Clipping_box_widget.ui +++ b/Polyhedron/demo/Polyhedron/Plugins/PCA/Clipping_box_widget.ui @@ -6,47 +6,64 @@ 0 0 - 219 - 62 + 218 + 68 Clipping Box - + - + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + Clip + + + true + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + - Qt::Horizontal + Qt::Vertical - 40 - 20 - - - - - - - - Clip - - - true - - - - - - - Qt::Horizontal - - - - 40 - 20 + 20 + 40 diff --git a/Polyhedron/demo/Polyhedron/Plugins/PMP/Mean_curvature_flow_skeleton_plugin.ui b/Polyhedron/demo/Polyhedron/Plugins/PMP/Mean_curvature_flow_skeleton_plugin.ui index 13b78bad89c..9bb3b0c53f1 100644 --- a/Polyhedron/demo/Polyhedron/Plugins/PMP/Mean_curvature_flow_skeleton_plugin.ui +++ b/Polyhedron/demo/Polyhedron/Plugins/PMP/Mean_curvature_flow_skeleton_plugin.ui @@ -7,14 +7,14 @@ 0 0 483 - 408 + 279 DockWidget - + @@ -187,6 +187,19 @@ + + + + Qt::Vertical + + + + 20 + 40 + + + + diff --git a/Polyhedron/demo/Polyhedron/Plugins/PMP/Point_inside_polyhedron_widget.ui b/Polyhedron/demo/Polyhedron/Plugins/PMP/Point_inside_polyhedron_widget.ui index a648383b638..4e3bd7e9d36 100644 --- a/Polyhedron/demo/Polyhedron/Plugins/PMP/Point_inside_polyhedron_widget.ui +++ b/Polyhedron/demo/Polyhedron/Plugins/PMP/Point_inside_polyhedron_widget.ui @@ -11,7 +11,7 @@ - Point Inside Polyhedron + Point Inside Facegraph @@ -78,7 +78,7 @@ - <html><head/><body><p>A selection is possible only if a point set item<br/>and a (closed) polyhedron item are selected</p></body></html> + <html><head/><body><p>A selection is possible only if a point set item<br/>and a (closed) surface mesh item are selected</p></body></html> diff --git a/Polyhedron/demo/Polyhedron/Plugins/PMP/Selection_widget.ui b/Polyhedron/demo/Polyhedron/Plugins/PMP/Selection_widget.ui index 7bba0ebd80f..20268dd9cd4 100644 --- a/Polyhedron/demo/Polyhedron/Plugins/PMP/Selection_widget.ui +++ b/Polyhedron/demo/Polyhedron/Plugins/PMP/Selection_widget.ui @@ -7,7 +7,7 @@ 0 0 613 - 342 + 336 @@ -15,19 +15,6 @@ - - - - Qt::Vertical - - - - 20 - 40 - - - - @@ -39,7 +26,7 @@ - Create Selection Item + Create Selection @@ -49,7 +36,7 @@ - Clear Selection Item + Clear Selection @@ -70,7 +57,7 @@ - 0 + 1 @@ -463,22 +450,22 @@ - Create Point Set Item from Selected Vertices + Create Point Set from Selected Vertices - Create Polyline Item from Selected Edges + Create Polyline from Selected Edges - Create Polyhedron Item from Selected Facets + Create Facegraph from Selected Facets - Erase Selected Facets from Polyhedron Item + Erase Selected Facets diff --git a/Polyhedron/demo/Polyhedron/Plugins/Point_set/Alpha_shape_widget.ui b/Polyhedron/demo/Polyhedron/Plugins/Point_set/Alpha_shape_widget.ui index 9acd6301056..d09258a9cee 100644 --- a/Polyhedron/demo/Polyhedron/Plugins/Point_set/Alpha_shape_widget.ui +++ b/Polyhedron/demo/Polyhedron/Plugins/Point_set/Alpha_shape_widget.ui @@ -7,7 +7,7 @@ 0 0 400 - 141 + 133 diff --git a/Polyhedron/demo/Polyhedron/Plugins/Point_set/Point_set_shape_detection_plugin.ui b/Polyhedron/demo/Polyhedron/Plugins/Point_set/Point_set_shape_detection_plugin.ui index c9c3c76e2db..a98d02d7ff7 100644 --- a/Polyhedron/demo/Polyhedron/Plugins/Point_set/Point_set_shape_detection_plugin.ui +++ b/Polyhedron/demo/Polyhedron/Plugins/Point_set/Point_set_shape_detection_plugin.ui @@ -7,7 +7,7 @@ 0 0 495 - 551 + 552 @@ -117,19 +117,6 @@ - - - - Qt::Vertical - - - - 20 - 40 - - - - @@ -301,19 +288,6 @@ - - - - Qt::Vertical - - - - 20 - 40 - - - - diff --git a/Polyhedron/demo/Polyhedron/Plugins/Point_set/Point_set_wlop_plugin.ui b/Polyhedron/demo/Polyhedron/Plugins/Point_set/Point_set_wlop_plugin.ui index 29f02784817..c38b18c5c2e 100644 --- a/Polyhedron/demo/Polyhedron/Plugins/Point_set/Point_set_wlop_plugin.ui +++ b/Polyhedron/demo/Polyhedron/Plugins/Point_set/Point_set_wlop_plugin.ui @@ -7,7 +7,7 @@ 0 0 539 - 480 + 108 diff --git a/Polyhedron/demo/Polyhedron/Plugins/Point_set/Surface_reconstruction_plugin.ui b/Polyhedron/demo/Polyhedron/Plugins/Point_set/Surface_reconstruction_plugin.ui index fe18f23a8dc..3cdd1a75902 100644 --- a/Polyhedron/demo/Polyhedron/Plugins/Point_set/Surface_reconstruction_plugin.ui +++ b/Polyhedron/demo/Polyhedron/Plugins/Point_set/Surface_reconstruction_plugin.ui @@ -7,7 +7,7 @@ 0 0 725 - 436 + 429 diff --git a/Polyhedron/demo/Polyhedron/Plugins/Surface_mesh/OTE_dialog.ui b/Polyhedron/demo/Polyhedron/Plugins/Surface_mesh/OTE_dialog.ui index f5ae423667a..d382cc7ef6c 100644 --- a/Polyhedron/demo/Polyhedron/Plugins/Surface_mesh/OTE_dialog.ui +++ b/Polyhedron/demo/Polyhedron/Plugins/Surface_mesh/OTE_dialog.ui @@ -7,7 +7,7 @@ 0 0 355 - 100 + 79 @@ -74,19 +74,6 @@ - - - - Qt::Vertical - - - - 20 - 40 - - - - diff --git a/Polyhedron/demo/Polyhedron/Plugins/Surface_mesh/Offset_meshing_plugin.cpp b/Polyhedron/demo/Polyhedron/Plugins/Surface_mesh/Offset_meshing_plugin.cpp index e24dc713440..4c196105039 100644 --- a/Polyhedron/demo/Polyhedron/Plugins/Surface_mesh/Offset_meshing_plugin.cpp +++ b/Polyhedron/demo/Polyhedron/Plugins/Surface_mesh/Offset_meshing_plugin.cpp @@ -316,7 +316,7 @@ public: void init(QMainWindow* mainWindow, CGAL::Three::Scene_interface* scene_interface, Messages_interface*) { this->scene = scene_interface; this->mw = mainWindow; - actionOffsetMeshing = new QAction(tr("Offset meshing"), mw); + actionOffsetMeshing = new QAction(tr("Offset Meshing"), mw); actionOffsetMeshing->setProperty("subMenuName", "3D Surface Mesh Generation"); if(actionOffsetMeshing) { connect(actionOffsetMeshing, SIGNAL(triggered()), diff --git a/Polyhedron/demo/Polyhedron/Plugins/Surface_mesh/Remeshing_dialog.ui b/Polyhedron/demo/Polyhedron/Plugins/Surface_mesh/Remeshing_dialog.ui index 3d5eaf74ba0..cfd2350787d 100644 --- a/Polyhedron/demo/Polyhedron/Plugins/Surface_mesh/Remeshing_dialog.ui +++ b/Polyhedron/demo/Polyhedron/Plugins/Surface_mesh/Remeshing_dialog.ui @@ -7,7 +7,7 @@ 0 0 344 - 168 + 169 @@ -112,16 +112,6 @@ - - - - Qt::Horizontal - - - QDialogButtonBox::Cancel|QDialogButtonBox::Ok - - - @@ -135,6 +125,16 @@ + + + + Qt::Horizontal + + + QDialogButtonBox::Cancel|QDialogButtonBox::Ok + + + diff --git a/Polyhedron/demo/Polyhedron/Plugins/Surface_mesh/Shortest_path_widget.ui b/Polyhedron/demo/Polyhedron/Plugins/Surface_mesh/Shortest_path_widget.ui index 754cb69a3bc..39e3082a1a6 100644 --- a/Polyhedron/demo/Polyhedron/Plugins/Surface_mesh/Shortest_path_widget.ui +++ b/Polyhedron/demo/Polyhedron/Plugins/Surface_mesh/Shortest_path_widget.ui @@ -7,7 +7,7 @@ 0 0 441 - 257 + 108 @@ -71,7 +71,7 @@ - + Qt::Vertical diff --git a/Polyhedron/demo/Polyhedron/Plugins/Surface_mesh_deformation/Deform_mesh.ui b/Polyhedron/demo/Polyhedron/Plugins/Surface_mesh_deformation/Deform_mesh.ui index f9027c53096..28d648d8c43 100644 --- a/Polyhedron/demo/Polyhedron/Plugins/Surface_mesh_deformation/Deform_mesh.ui +++ b/Polyhedron/demo/Polyhedron/Plugins/Surface_mesh_deformation/Deform_mesh.ui @@ -14,7 +14,7 @@ Surface Mesh Deformation - + diff --git a/Polyhedron/demo/Polyhedron/Scene_surface_mesh_item.cpp b/Polyhedron/demo/Polyhedron/Scene_surface_mesh_item.cpp index d77466107bc..373015e5435 100644 --- a/Polyhedron/demo/Polyhedron/Scene_surface_mesh_item.cpp +++ b/Polyhedron/demo/Polyhedron/Scene_surface_mesh_item.cpp @@ -1850,6 +1850,12 @@ void Scene_surface_mesh_item::zoomToPosition(const QPoint &point, CGAL::Three::V void Scene_surface_mesh_item::resetColors() { setItemIsMulticolor(false); + if(d->has_feature_edges){ + BOOST_FOREACH(boost::graph_traits::edge_descriptor e, edges(*d->smesh_)){ + put(d->e_is_feature_map, e, false); + } + d->has_feature_edges = false; + } invalidate(COLORS); itemChanged(); } diff --git a/Polyhedron/demo/Polyhedron/Show_point_dialog.ui b/Polyhedron/demo/Polyhedron/Show_point_dialog.ui index 1d94c9fd0b4..bbe92b716a9 100644 --- a/Polyhedron/demo/Polyhedron/Show_point_dialog.ui +++ b/Polyhedron/demo/Polyhedron/Show_point_dialog.ui @@ -7,7 +7,7 @@ 0 0 575 - 151 + 144 diff --git a/Polyhedron/demo/Polyhedron/Statistics_on_item_dialog.ui b/Polyhedron/demo/Polyhedron/Statistics_on_item_dialog.ui index 67c960ec259..4a07a90e174 100644 --- a/Polyhedron/demo/Polyhedron/Statistics_on_item_dialog.ui +++ b/Polyhedron/demo/Polyhedron/Statistics_on_item_dialog.ui @@ -10,7 +10,7 @@ 0 0 574 - 563 + 691 From 6e597ddc0fe998a8d40a154fed82a62b0c5f3f03 Mon Sep 17 00:00:00 2001 From: Maxime Gimeno Date: Fri, 21 Sep 2018 11:22:04 +0200 Subject: [PATCH 070/268] also select vertices of degen edges of degen faces. --- .../Plugins/PMP/Degenerated_faces_plugin.cpp | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) diff --git a/Polyhedron/demo/Polyhedron/Plugins/PMP/Degenerated_faces_plugin.cpp b/Polyhedron/demo/Polyhedron/Plugins/PMP/Degenerated_faces_plugin.cpp index df2a9d1cb48..b5ca99c0dfb 100644 --- a/Polyhedron/demo/Polyhedron/Plugins/PMP/Degenerated_faces_plugin.cpp +++ b/Polyhedron/demo/Polyhedron/Plugins/PMP/Degenerated_faces_plugin.cpp @@ -108,6 +108,7 @@ void Degenerated_faces_plugin::on_actionDegenFaces_triggered() typedef boost::graph_traits::face_descriptor Face_descriptor; typedef boost::graph_traits::halfedge_descriptor halfedge_descriptor; + typedef boost::graph_traits::edge_descriptor edge_descriptor; QApplication::setOverrideCursor(Qt::WaitCursor); bool found = false; std::vector selected_polys; @@ -127,13 +128,28 @@ void Degenerated_faces_plugin::on_actionDegenFaces_triggered() // add intersecting triangles to a selection_item. if(isDegen(pMesh, facets)) { + std::vector edges; + isDegen(pMesh, edges); + std::vector is_degen(pMesh->number_of_edges()+pMesh->number_of_removed_edges(), false); + BOOST_FOREACH(edge_descriptor e, edges) + { + is_degen[(std::size_t)e] = true; + } Scene_polyhedron_selection_item* selection_item = new Scene_polyhedron_selection_item(poly_item, mw); for(std::vector::iterator fb = facets.begin(); fb != facets.end(); ++fb) { selection_item->selected_facets.insert(*fb); BOOST_FOREACH(halfedge_descriptor h, halfedges_around_face(halfedge(*fb, *pMesh), *pMesh)) { - selection_item->selected_edges.insert(edge(h, *selection_item->polyhedron())); + edge_descriptor e = edge(h, *selection_item->polyhedron()); + selection_item->selected_edges.insert(e); + if(is_degen[(std::size_t)e]) + { + selection_item->selected_vertices.insert(source( halfedge(e, *selection_item->polyhedron()), + *selection_item->polyhedron())); + selection_item->selected_vertices.insert(target( halfedge(e, *selection_item->polyhedron()), + *selection_item->polyhedron())); + } } } selection_item->invalidateOpenGLBuffers(); From a47a4f547f28c84ecb251e3aafe87d97ae1dbd4e Mon Sep 17 00:00:00 2001 From: Maxime Gimeno Date: Fri, 21 Sep 2018 11:36:29 +0200 Subject: [PATCH 071/268] Make the ids bigger --- Polyhedron/demo/Polyhedron/include/id_printing.h | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/Polyhedron/demo/Polyhedron/include/id_printing.h b/Polyhedron/demo/Polyhedron/include/id_printing.h index 82c965c81d6..a46da39da12 100644 --- a/Polyhedron/demo/Polyhedron/include/id_printing.h +++ b/Polyhedron/demo/Polyhedron/include/id_printing.h @@ -7,7 +7,7 @@ #include #include #include - +#define POINT_SIZE 12 template struct VKRingPMAP{ typedef typename boost::graph_traits::vertex_descriptor key_type; @@ -206,6 +206,7 @@ void compute_displayed_ids(Mesh& mesh, QFont font; font.setBold(true); + font.setPointSize(POINT_SIZE); std::vector displayed_vertices; std::vector displayed_edges; std::vector displayed_faces; @@ -414,6 +415,7 @@ bool printVertexIds(const Mesh& mesh, const CGAL::qglviewer::Vec offset = viewer->offset(); QFont font; font.setBold(true); + font.setPointSize(POINT_SIZE); //fills textItems BOOST_FOREACH(typename boost::graph_traits::vertex_descriptor vh, vertices(mesh)) @@ -449,7 +451,8 @@ bool printEdgeIds(const Mesh& mesh, const CGAL::qglviewer::Vec offset = viewer->offset(); QFont font; font.setBold(true); - + font.setPointSize(POINT_SIZE); + BOOST_FOREACH(typename boost::graph_traits::edge_descriptor e, edges(mesh)) { const Point& p1 = get(ppmap, source(e, mesh)); @@ -482,6 +485,7 @@ bool printFaceIds(const Mesh& mesh, const CGAL::qglviewer::Vec offset = viewer->offset(); QFont font; font.setBold(true); + font.setPointSize(POINT_SIZE); BOOST_FOREACH(typename boost::graph_traits::face_descriptor fh, faces(mesh)) { double x(0), y(0), z(0); From dfe98f56abf511ba33d23af8c81859c8d19506fb Mon Sep 17 00:00:00 2001 From: Maxime Gimeno Date: Fri, 21 Sep 2018 11:40:12 +0200 Subject: [PATCH 072/268] fix load_obj so the item is not "unnamed" --- Polyhedron/demo/Polyhedron/Plugins/IO/OFF_io_plugin.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/Polyhedron/demo/Polyhedron/Plugins/IO/OFF_io_plugin.cpp b/Polyhedron/demo/Polyhedron/Plugins/IO/OFF_io_plugin.cpp index b302e2764b1..c9b1f913131 100644 --- a/Polyhedron/demo/Polyhedron/Plugins/IO/OFF_io_plugin.cpp +++ b/Polyhedron/demo/Polyhedron/Plugins/IO/OFF_io_plugin.cpp @@ -145,6 +145,7 @@ Polyhedron_demo_off_plugin::load_obj(QFileInfo fileinfo) { return NULL; } Scene_surface_mesh_item* item = new Scene_surface_mesh_item(); + item->setName(fileinfo.baseName()); if(item->load_obj(in)) return item; return 0; From 8250a0f53df3cb938b81cddd39f755cb37398f62 Mon Sep 17 00:00:00 2001 From: Maxime Gimeno Date: Fri, 21 Sep 2018 12:16:08 +0200 Subject: [PATCH 073/268] reset cursor type when creating sel_item not from the plugin. --- .../Polyhedron/Plugins/PMP/Selection_plugin.cpp | 17 +++++++++++++---- .../Polyhedron/Plugins/PMP/Selection_widget.ui | 2 +- 2 files changed, 14 insertions(+), 5 deletions(-) diff --git a/Polyhedron/demo/Polyhedron/Plugins/PMP/Selection_plugin.cpp b/Polyhedron/demo/Polyhedron/Plugins/PMP/Selection_plugin.cpp index 891013267bb..a097c96bb57 100644 --- a/Polyhedron/demo/Polyhedron/Plugins/PMP/Selection_plugin.cpp +++ b/Polyhedron/demo/Polyhedron/Plugins/PMP/Selection_plugin.cpp @@ -131,10 +131,10 @@ public: //Fill operations combo box. operations_strings = { - "Create Point Set Item from Selected Vertices" , - "Create Polyline Item from Selected Edges" , - "Create Polyhedron Item from Selected Facets" , - "Erase Selected Facets from Polyhedron Item" , + "Create Point Set from Selected Vertices" , + "Create Polyline from Selected Edges" , + "Create Facegraph from Selected Facets" , + "Erase Selected Facets" , "Keep Connected Components of Selected Facets" , "Expand Face Selection to Stay Manifold After Removal" , "Convert from Edge Selection to Facets Selection" , @@ -349,6 +349,7 @@ public Q_SLOTS: } // Create selection item for selected polyhedron item void on_Create_selection_item_button_clicked() { + Scene_face_graph_item* poly_item = qobject_cast(scene->item(scene->mainSelectionIndex())); if(!poly_item) { print_message("Error: there is no selected " @@ -358,6 +359,7 @@ public Q_SLOTS: } // all other arrangements (putting inside selection_item_map), setting names etc, // other params (e.g. k_ring) will be set inside new_item_created + from_plugin = true; Scene_polyhedron_selection_item* new_item = new Scene_polyhedron_selection_item(poly_item, mw); new_item->setName(QString("%1 (selection)").arg(poly_item->name())); ui_widget.selectionOrEuler->setCurrentIndex(last_mode); @@ -896,6 +898,12 @@ public Q_SLOTS: // connect(selection_item,SIGNAL(simplicesSelected(CGAL::Three::Scene_item*)), scene_ptr, SLOT(setSelectedItem(CGAL::Three::Scene_item*))); connect(selection_item,SIGNAL(isCurrentlySelected(Scene_facegraph_item_k_ring_selection*)), this, SLOT(isCurrentlySelected(Scene_facegraph_item_k_ring_selection*))); on_LassoCheckBox_changed(ui_widget.lassoCheckBox->isChecked()); + + if(!from_plugin){ + ui_widget.selectionOrEuler->setCurrentIndex(0); + } + else + from_plugin = false; on_SelectionOrEuler_changed(ui_widget.selectionOrEuler->currentIndex()); if(last_mode == 0) on_Selection_type_combo_box_changed(ui_widget.Selection_type_combo_box->currentIndex()); @@ -978,6 +986,7 @@ private: typedef std::multimap Selection_item_map; Selection_item_map selection_item_map; int last_mode; + bool from_plugin; }; // end Polyhedron_demo_selection_plugin //Q_EXPORT_PLUGIN2(Polyhedron_demo_selection_plugin, Polyhedron_demo_selection_plugin) diff --git a/Polyhedron/demo/Polyhedron/Plugins/PMP/Selection_widget.ui b/Polyhedron/demo/Polyhedron/Plugins/PMP/Selection_widget.ui index 20268dd9cd4..6cb5504b0c3 100644 --- a/Polyhedron/demo/Polyhedron/Plugins/PMP/Selection_widget.ui +++ b/Polyhedron/demo/Polyhedron/Plugins/PMP/Selection_widget.ui @@ -57,7 +57,7 @@ - 1 + 0 From 2043862688e1d4f1781de59887a209deb40e21e3 Mon Sep 17 00:00:00 2001 From: Maxime Gimeno Date: Fri, 21 Sep 2018 12:20:04 +0200 Subject: [PATCH 074/268] fix polyline name in basic_generator --- .../demo/Polyhedron/Plugins/PCA/Basic_generator_plugin.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Polyhedron/demo/Polyhedron/Plugins/PCA/Basic_generator_plugin.cpp b/Polyhedron/demo/Polyhedron/Plugins/PCA/Basic_generator_plugin.cpp index a57c821ac0b..3fde5e826fa 100644 --- a/Polyhedron/demo/Polyhedron/Plugins/PCA/Basic_generator_plugin.cpp +++ b/Polyhedron/demo/Polyhedron/Plugins/PCA/Basic_generator_plugin.cpp @@ -48,7 +48,7 @@ public : { this->scene = scene_interface; this->mw = mainWindow; - for(int i=0; i Date: Fri, 21 Sep 2018 12:26:58 +0200 Subject: [PATCH 075/268] Fix load_off() for surface_mesh. --- Polyhedron/demo/Polyhedron/Plugins/IO/OFF_io_plugin.cpp | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/Polyhedron/demo/Polyhedron/Plugins/IO/OFF_io_plugin.cpp b/Polyhedron/demo/Polyhedron/Plugins/IO/OFF_io_plugin.cpp index c9b1f913131..830e47b8602 100644 --- a/Polyhedron/demo/Polyhedron/Plugins/IO/OFF_io_plugin.cpp +++ b/Polyhedron/demo/Polyhedron/Plugins/IO/OFF_io_plugin.cpp @@ -89,7 +89,12 @@ Polyhedron_demo_off_plugin::load_off(QFileInfo fileinfo) { in.seekg(0); // Try to read .off in a surface_mesh SMesh *surface_mesh = new SMesh(); - in >> *surface_mesh; + try{ + in >> *surface_mesh; + } catch(...) + { + surface_mesh->clear(); + } if(!in || surface_mesh->is_empty()) { delete surface_mesh; From 98f0b4ee4775d2c9cdadac8f68c6de95cd1e54cd Mon Sep 17 00:00:00 2001 From: Maxime Gimeno Date: Fri, 21 Sep 2018 13:52:33 +0200 Subject: [PATCH 076/268] Add transparent background to textitems so they are easier to read. --- Polyhedron/demo/Polyhedron/TextRenderer.cpp | 10 ++++++++++ Polyhedron/demo/Polyhedron/include/id_printing.h | 2 +- 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/Polyhedron/demo/Polyhedron/TextRenderer.cpp b/Polyhedron/demo/Polyhedron/TextRenderer.cpp index 2821f4bfc7a..2e9ce45fefe 100644 --- a/Polyhedron/demo/Polyhedron/TextRenderer.cpp +++ b/Polyhedron/demo/Polyhedron/TextRenderer.cpp @@ -34,6 +34,11 @@ void TextRenderer::draw(CGAL::Three::Viewer_interface *viewer) int(item->height())); painter->setFont(item->font()); + QColor c = item->color().toHsv(); + c.setHsv((c.hsvHue()+180)%360, 255,255,100); + painter->setBrush(QBrush(c)); + painter->setPen(QPen(QColor(0,0,0,0))); + painter->drawRect(rect); painter->setPen(QPen(item->color())); painter->drawText(rect, item->text()); } @@ -62,6 +67,11 @@ void TextRenderer::draw(CGAL::Three::Viewer_interface *viewer) int(item->height())); } painter->setFont(item->font()); + QColor c = item->color().toHsv(); + c.setHsv((c.hsvHue()+180)%360, 255,255,100); + painter->setBrush(QBrush(c)); + painter->setPen(QPen(QColor(0,0,0,0))); + painter->drawRect(rect); painter->setPen(QPen(item->color())); painter->drawText(rect, item->text()); } diff --git a/Polyhedron/demo/Polyhedron/include/id_printing.h b/Polyhedron/demo/Polyhedron/include/id_printing.h index a46da39da12..60b47de964e 100644 --- a/Polyhedron/demo/Polyhedron/include/id_printing.h +++ b/Polyhedron/demo/Polyhedron/include/id_printing.h @@ -7,7 +7,7 @@ #include #include #include -#define POINT_SIZE 12 +#define POINT_SIZE 11 template struct VKRingPMAP{ typedef typename boost::graph_traits::vertex_descriptor key_type; From 037ee07dd027c143b8edb1cb5384c027c5b1e151 Mon Sep 17 00:00:00 2001 From: Maxime Gimeno Date: Mon, 24 Sep 2018 16:29:23 +0200 Subject: [PATCH 077/268] Fix typo --- Polyhedron/demo/Polyhedron/MainWindow.ui | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Polyhedron/demo/Polyhedron/MainWindow.ui b/Polyhedron/demo/Polyhedron/MainWindow.ui index a9a11be8a45..38eaa51b87a 100644 --- a/Polyhedron/demo/Polyhedron/MainWindow.ui +++ b/Polyhedron/demo/Polyhedron/MainWindow.ui @@ -404,7 +404,7 @@ - Set FacegraphA + Set Facegraph A From 41946b72d687dc63ae76e29dc2c3c76511fa7bfa Mon Sep 17 00:00:00 2001 From: Andreas Fabri Date: Wed, 26 Sep 2018 09:06:34 +0200 Subject: [PATCH 078/268] Make linear_interpolation() work with non-scalar data --- .../linear_interpolation_of_vector_3.cpp | 86 +++++++++++++++++++ .../include/CGAL/interpolation_functions.h | 9 +- 2 files changed, 91 insertions(+), 4 deletions(-) create mode 100644 Interpolation/examples/Interpolation/linear_interpolation_of_vector_3.cpp diff --git a/Interpolation/examples/Interpolation/linear_interpolation_of_vector_3.cpp b/Interpolation/examples/Interpolation/linear_interpolation_of_vector_3.cpp new file mode 100644 index 00000000000..590dac81f34 --- /dev/null +++ b/Interpolation/examples/Interpolation/linear_interpolation_of_vector_3.cpp @@ -0,0 +1,86 @@ +#include +#include + +#include +#include +#include + +typedef CGAL::Exact_predicates_inexact_constructions_kernel K; +typedef CGAL::Delaunay_triangulation_2 Delaunay_triangulation; +typedef CGAL::Interpolation_traits_2 Traits; +typedef K::Vector_3 Vector_3; +typedef K::Point_2 Point_2; + + +namespace boost { + +template +class value_initialized > +{ + private : + + typedef CGAL::Vector_3 T; + T m_data; + + public : + + value_initialized() + : + m_data(0,0,0) + { } + + T const & data() const + { + return m_data; + } + + T& data() + { + return m_data; + } + + operator T const &() const + { + return m_data; + } + + operator T&() + { + return m_data; + } +} ; + +} // nammespace boost + + +int main() +{ + Delaunay_triangulation T; + + typedef std::map Coord_map; + typedef CGAL::Data_access Value_access; + + Coord_map value_function; + double a(0.25), bx(1.3), by(-0.7); + + for (int y=0 ; y<255 ; y++){ + for (int x=0 ; x<255 ; x++){ + K::Point_2_2 p(x,y); + T.insert(p); + value_function.insert(std::make_pair(p, Vector_3(x,y,1))); + } + } + + //coordinate computation + K::Point_2_2 p(1.3, 0.34); + std::vector > coords; + + double norm = CGAL::natural_neighbor_coordinates_2(T, p, std::back_inserter(coords)).second; + Vector_3 res = CGAL::linear_interpolation(coords.begin(), coords.end(), norm, + Value_access(value_function)); + + std::cout << "Tested interpolation on " << p << " interpolation: " + << res << std::endl; + + return EXIT_SUCCESS; +} diff --git a/Interpolation/include/CGAL/interpolation_functions.h b/Interpolation/include/CGAL/interpolation_functions.h index cac67d5aa40..8d5e4565425 100644 --- a/Interpolation/include/CGAL/interpolation_functions.h +++ b/Interpolation/include/CGAL/interpolation_functions.h @@ -28,7 +28,7 @@ #include #include - +#include #include #include #include @@ -59,12 +59,13 @@ struct Data_access }; //the interpolation functions: -template < class ForwardIterator, class ValueFunctor > + template < class ForwardIterator, class ValueFunctor> typename boost::result_of< ValueFunctor(typename std::iterator_traits::value_type::first_type)> ::type::first_type linear_interpolation(ForwardIterator first, ForwardIterator beyond, const typename std::iterator_traits::value_type::second_type& norm, + //const Norm& norm, ValueFunctor value_function) { CGAL_precondition(norm > 0); @@ -73,13 +74,13 @@ linear_interpolation(ForwardIterator first, ForwardIterator beyond, typedef typename boost::result_of::type result_type; typedef typename result_type::first_type Value_type; - Value_type result(0); + boost::value_initialized result; result_type val; for(; first!=beyond; ++first) { val = value_function(first->first); CGAL_assertion(val.second); - result += (first->second / norm) * val.first; + get(result) += (first->second / norm) * val.first; } return result; } From c5f85b212de94de9a5c64d0f43e0c243ab80e8be Mon Sep 17 00:00:00 2001 From: Andreas Fabri Date: Wed, 26 Sep 2018 11:46:22 +0200 Subject: [PATCH 079/268] Switch to make_zero() --- .../linear_interpolation_of_vector_3.cpp | 46 +----------------- .../include/CGAL/interpolation_functions.h | 7 ++- Kernel_23/include/CGAL/Vector_2.h | 10 ++++ Kernel_23/include/CGAL/Vector_3.h | 11 +++++ Kernel_23/include/CGAL/make_zero.h | 48 +++++++++++++++++++ 5 files changed, 74 insertions(+), 48 deletions(-) create mode 100644 Kernel_23/include/CGAL/make_zero.h diff --git a/Interpolation/examples/Interpolation/linear_interpolation_of_vector_3.cpp b/Interpolation/examples/Interpolation/linear_interpolation_of_vector_3.cpp index 590dac81f34..5823a1f8799 100644 --- a/Interpolation/examples/Interpolation/linear_interpolation_of_vector_3.cpp +++ b/Interpolation/examples/Interpolation/linear_interpolation_of_vector_3.cpp @@ -11,48 +11,6 @@ typedef CGAL::Interpolation_traits_2 Traits; typedef K::Vector_3 Vector_3; typedef K::Point_2 Point_2; - -namespace boost { - -template -class value_initialized > -{ - private : - - typedef CGAL::Vector_3 T; - T m_data; - - public : - - value_initialized() - : - m_data(0,0,0) - { } - - T const & data() const - { - return m_data; - } - - T& data() - { - return m_data; - } - - operator T const &() const - { - return m_data; - } - - operator T&() - { - return m_data; - } -} ; - -} // nammespace boost - - int main() { Delaunay_triangulation T; @@ -65,14 +23,14 @@ int main() for (int y=0 ; y<255 ; y++){ for (int x=0 ; x<255 ; x++){ - K::Point_2_2 p(x,y); + K::Point_2 p(x,y); T.insert(p); value_function.insert(std::make_pair(p, Vector_3(x,y,1))); } } //coordinate computation - K::Point_2_2 p(1.3, 0.34); + K::Point_2 p(1.3, 0.34); std::vector > coords; double norm = CGAL::natural_neighbor_coordinates_2(T, p, std::back_inserter(coords)).second; diff --git a/Interpolation/include/CGAL/interpolation_functions.h b/Interpolation/include/CGAL/interpolation_functions.h index 8d5e4565425..e75569cffda 100644 --- a/Interpolation/include/CGAL/interpolation_functions.h +++ b/Interpolation/include/CGAL/interpolation_functions.h @@ -26,9 +26,9 @@ #include #include #include +#include #include -#include #include #include #include @@ -65,7 +65,6 @@ typename boost::result_of< ::type::first_type linear_interpolation(ForwardIterator first, ForwardIterator beyond, const typename std::iterator_traits::value_type::second_type& norm, - //const Norm& norm, ValueFunctor value_function) { CGAL_precondition(norm > 0); @@ -74,13 +73,13 @@ linear_interpolation(ForwardIterator first, ForwardIterator beyond, typedef typename boost::result_of::type result_type; typedef typename result_type::first_type Value_type; - boost::value_initialized result; + Value_type result = make_zero(); result_type val; for(; first!=beyond; ++first) { val = value_function(first->first); CGAL_assertion(val.second); - get(result) += (first->second / norm) * val.first; + result += (first->second / norm) * val.first; } return result; } diff --git a/Kernel_23/include/CGAL/Vector_2.h b/Kernel_23/include/CGAL/Vector_2.h index 1b37a2c24d9..fdc88269739 100644 --- a/Kernel_23/include/CGAL/Vector_2.h +++ b/Kernel_23/include/CGAL/Vector_2.h @@ -35,6 +35,7 @@ #include #include #include +#include #include namespace CGAL { @@ -389,6 +390,15 @@ operator>>(std::istream& is, Vector_2& v) return extract(is, v, typename R::Kernel_tag() ); } +template +struct Make_zero > +{ + Vector_2 operator()() const + { + return CGAL::NULL_VECTOR; + } + +}; } //namespace CGAL #endif // CGAL_VECTOR_2_H diff --git a/Kernel_23/include/CGAL/Vector_3.h b/Kernel_23/include/CGAL/Vector_3.h index 82818e8d229..5506c853d8a 100644 --- a/Kernel_23/include/CGAL/Vector_3.h +++ b/Kernel_23/include/CGAL/Vector_3.h @@ -35,6 +35,7 @@ #include #include #include +#include #include namespace CGAL { @@ -371,6 +372,16 @@ operator>>(std::istream& is, Vector_3& v) return extract(is, v, typename R::Kernel_tag() ); } + +template +struct Make_zero > +{ + Vector_3 operator()() const + { + return CGAL::NULL_VECTOR; + } +}; + } //namespace CGAL #endif // CGAL_VECTOR_3_H diff --git a/Kernel_23/include/CGAL/make_zero.h b/Kernel_23/include/CGAL/make_zero.h new file mode 100644 index 00000000000..fe160f17c35 --- /dev/null +++ b/Kernel_23/include/CGAL/make_zero.h @@ -0,0 +1,48 @@ +// Copyright (c) 2018 +// Utrecht University (The Netherlands), +// ETH Zurich (Switzerland), +// INRIA Sophia-Antipolis (France), +// Max-Planck-Institute Saarbruecken (Germany), +// and Tel-Aviv University (Israel). All rights reserved. +// +// This file is part of CGAL (www.cgal.org); you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public License as +// published by the Free Software Foundation; either version 3 of the License, +// or (at your option) any later version. +// +// Licensees holding a valid commercial license may use this file in +// accordance with the commercial license agreement provided with the software. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. +// +// $URL$ +// $Id$ +// SPDX-License-Identifier: LGPL-3.0+ +// +// +// Author(s) : Andreas Fabri + +#ifndef CGAL_MAKE_ZERO_H +#define CGAL_MAKE_ZERO_H + +namespace CGAL { + +template +struct Make_zero { + T operator()()const + { + return T(); + } +}; + +template +T make_zero() +{ + Make_zero mz; + return mz(); +} + +} //namespace CGAL + +#endif // CGAL_MAKE_ZERO_H From 77010f5f0a5c7e5014904c9268d38cf645377821 Mon Sep 17 00:00:00 2001 From: Andreas Fabri Date: Wed, 26 Sep 2018 16:17:35 +0200 Subject: [PATCH 080/268] Resimplify and fix the documentation --- .../CGAL/interpolation_functions.h | 4 +- .../doc/Interpolation/Interpolation.txt | 6 +++ Interpolation/doc/Interpolation/examples.txt | 1 + .../include/CGAL/interpolation_functions.h | 10 ++-- Kernel_23/include/CGAL/Vector_2.h | 10 ---- Kernel_23/include/CGAL/Vector_3.h | 11 ----- Kernel_23/include/CGAL/make_zero.h | 48 ------------------- 7 files changed, 14 insertions(+), 76 deletions(-) delete mode 100644 Kernel_23/include/CGAL/make_zero.h diff --git a/Interpolation/doc/Interpolation/CGAL/interpolation_functions.h b/Interpolation/doc/Interpolation/CGAL/interpolation_functions.h index bee04da3b82..0377cb867bb 100644 --- a/Interpolation/doc/Interpolation/CGAL/interpolation_functions.h +++ b/Interpolation/doc/Interpolation/CGAL/interpolation_functions.h @@ -72,8 +72,8 @@ types of a triangulation, to a (non-normalized) barycentric coordinate. \tparam ValueFunctor must be a functor where `ValueFunctor::argument_type` must be equivalent to `std::iterator_traits::%value_type::first_type` and `ValueFunctor::result_type` is a pair of the function value type and a Boolean. -The function value type must provide a multiplication and addition operation with the type -`Traits::FT` as well as a constructor with argument `0`. +The function value type `VT` must provide an addition operator, and a multiplication operator with the type +`Traits::FT`. A model of the functor `ValueFunctor` is provided by the struct `CGAL::Data_access` instantiated with an associative container (e.g. `std::map`) and having: diff --git a/Interpolation/doc/Interpolation/Interpolation.txt b/Interpolation/doc/Interpolation/Interpolation.txt index e9e6bde16ec..decec2ed20e 100644 --- a/Interpolation/doc/Interpolation/Interpolation.txt +++ b/Interpolation/doc/Interpolation/Interpolation.txt @@ -416,6 +416,12 @@ compatible with the function. \cgalExample{Interpolation/linear_interpolation_2.cpp} +The next example shows the interpolation of non-scalar values, namely `Vector_3`. +It may be any type `T` which provides a multiplication operator with a scalar, and +the addition operator for `T`. + +\cgalExample{Interpolation/linear_interpolation_of_vector_3.cpp} + \subsection InterpolationExampleSibson Example for Sibson's C^1 Interpolation Scheme with Gradient Estimation \cgalExample{Interpolation/sibson_interpolation_2.cpp} diff --git a/Interpolation/doc/Interpolation/examples.txt b/Interpolation/doc/Interpolation/examples.txt index 377ab8a017d..5fa82c096cd 100644 --- a/Interpolation/doc/Interpolation/examples.txt +++ b/Interpolation/doc/Interpolation/examples.txt @@ -5,6 +5,7 @@ \example Interpolation/rn_coordinates_2.cpp \example Interpolation/surface_neighbor_coordinates_3.cpp \example Interpolation/linear_interpolation_2.cpp +\example Interpolation/linear_interpolation_of_vector_3.cpp \example Interpolation/sibson_interpolation_2.cpp \example Interpolation/sibson_interpolation_vertex_with_info_2.cpp */ diff --git a/Interpolation/include/CGAL/interpolation_functions.h b/Interpolation/include/CGAL/interpolation_functions.h index e75569cffda..23c7a8d6ce0 100644 --- a/Interpolation/include/CGAL/interpolation_functions.h +++ b/Interpolation/include/CGAL/interpolation_functions.h @@ -26,7 +26,6 @@ #include #include #include -#include #include #include @@ -73,13 +72,14 @@ linear_interpolation(ForwardIterator first, ForwardIterator beyond, typedef typename boost::result_of::type result_type; typedef typename result_type::first_type Value_type; - Value_type result = make_zero(); - result_type val; + result_type val = value_function(first->first); + CGAL_assertion(val.second); + Value_type result = (first->second / norm) * val.first; + ++first; for(; first!=beyond; ++first) { val = value_function(first->first); - CGAL_assertion(val.second); - result += (first->second / norm) * val.first; + result = result + (first->second / norm) * val.first; } return result; } diff --git a/Kernel_23/include/CGAL/Vector_2.h b/Kernel_23/include/CGAL/Vector_2.h index fdc88269739..1b37a2c24d9 100644 --- a/Kernel_23/include/CGAL/Vector_2.h +++ b/Kernel_23/include/CGAL/Vector_2.h @@ -35,7 +35,6 @@ #include #include #include -#include #include namespace CGAL { @@ -390,15 +389,6 @@ operator>>(std::istream& is, Vector_2& v) return extract(is, v, typename R::Kernel_tag() ); } -template -struct Make_zero > -{ - Vector_2 operator()() const - { - return CGAL::NULL_VECTOR; - } - -}; } //namespace CGAL #endif // CGAL_VECTOR_2_H diff --git a/Kernel_23/include/CGAL/Vector_3.h b/Kernel_23/include/CGAL/Vector_3.h index 5506c853d8a..22674bf9a2f 100644 --- a/Kernel_23/include/CGAL/Vector_3.h +++ b/Kernel_23/include/CGAL/Vector_3.h @@ -35,7 +35,6 @@ #include #include #include -#include #include namespace CGAL { @@ -371,16 +370,6 @@ operator>>(std::istream& is, Vector_3& v) { return extract(is, v, typename R::Kernel_tag() ); } - - -template -struct Make_zero > -{ - Vector_3 operator()() const - { - return CGAL::NULL_VECTOR; - } -}; } //namespace CGAL diff --git a/Kernel_23/include/CGAL/make_zero.h b/Kernel_23/include/CGAL/make_zero.h deleted file mode 100644 index fe160f17c35..00000000000 --- a/Kernel_23/include/CGAL/make_zero.h +++ /dev/null @@ -1,48 +0,0 @@ -// Copyright (c) 2018 -// Utrecht University (The Netherlands), -// ETH Zurich (Switzerland), -// INRIA Sophia-Antipolis (France), -// Max-Planck-Institute Saarbruecken (Germany), -// and Tel-Aviv University (Israel). All rights reserved. -// -// This file is part of CGAL (www.cgal.org); you can redistribute it and/or -// modify it under the terms of the GNU Lesser General Public License as -// published by the Free Software Foundation; either version 3 of the License, -// or (at your option) any later version. -// -// Licensees holding a valid commercial license may use this file in -// accordance with the commercial license agreement provided with the software. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. -// -// $URL$ -// $Id$ -// SPDX-License-Identifier: LGPL-3.0+ -// -// -// Author(s) : Andreas Fabri - -#ifndef CGAL_MAKE_ZERO_H -#define CGAL_MAKE_ZERO_H - -namespace CGAL { - -template -struct Make_zero { - T operator()()const - { - return T(); - } -}; - -template -T make_zero() -{ - Make_zero mz; - return mz(); -} - -} //namespace CGAL - -#endif // CGAL_MAKE_ZERO_H From 4036377dfddf47ac682754ae72d4ebf4b387b587 Mon Sep 17 00:00:00 2001 From: Maxime Gimeno Date: Fri, 28 Sep 2018 15:37:21 +0200 Subject: [PATCH 081/268] Fix distance_plugin --- .../Plugins/PMP/Distance_plugin.cpp | 22 +++++++------------ 1 file changed, 8 insertions(+), 14 deletions(-) diff --git a/Polyhedron/demo/Polyhedron/Plugins/PMP/Distance_plugin.cpp b/Polyhedron/demo/Polyhedron/Plugins/PMP/Distance_plugin.cpp index 8e76521660e..2765e8993d2 100644 --- a/Polyhedron/demo/Polyhedron/Plugins/PMP/Distance_plugin.cpp +++ b/Polyhedron/demo/Polyhedron/Plugins/PMP/Distance_plugin.cpp @@ -20,7 +20,6 @@ #include #include #include - using namespace CGAL::Three; namespace PMP = CGAL::Polygon_mesh_processing; @@ -32,19 +31,16 @@ template struct Distance_computation{ const AABB_tree& tree; const std::vector& sample_points; - Point_3 initial_hint; - tbb::atomic* distance; + const Point_3 initial_hint; std::vector& output; Distance_computation(const AABB_tree& tree, const Point_3 p, const std::vector& sample_points, - tbb::atomic* d, std::vector& out ) : tree(tree) , sample_points(sample_points) , initial_hint(p) - , distance(d) , output(out) { } @@ -52,18 +48,13 @@ struct Distance_computation{ operator()(const tbb::blocked_range& range) const { Point_3 hint = initial_hint; - double hdist = 0; for( std::size_t i = range.begin(); i != range.end(); ++i) { hint = tree.closest_point(sample_points[i], hint); Kernel::FT dist = squared_distance(hint,sample_points[i]); double d = CGAL::sqrt(dist); output[i] = d; - if (d>hdist) hdist=d; } - - if (hdist > distance->load()) - distance->store(hdist); } }; #endif @@ -165,7 +156,7 @@ private: tree.accelerate_distance_queries(); tree.build(); boost::graph_traits::vertex_descriptor vd = *(vertices(m).first); - Traits::Point_3 hint = get(CGAL::vertex_point,*poly, vd); + Traits::Point_3 hint = get(CGAL::vertex_point,m, vd); #if !defined(CGAL_LINKED_WITH_TBB) double hdist = 0; @@ -179,10 +170,13 @@ private: } return hdist; #else - tbb::atomic distance; - distance.store(0); - Distance_computation f(tree, hint, sample_points, &distance, out); + double distance=0; + Distance_computation f(tree, hint, sample_points, out); tbb::parallel_for(tbb::blocked_range(0, sample_points.size()), f); + for(std::size_t i = 0; i< out.size(); ++i){ + if(out[i] > distance) + distance = out[i]; + } return distance; #endif } From 56af9d1e7e14c1288c577238d810598a4fb84be4 Mon Sep 17 00:00:00 2001 From: Andreas Fabri Date: Tue, 2 Oct 2018 10:57:34 +0200 Subject: [PATCH 082/268] fix whitespace --- Kernel_23/include/CGAL/Vector_3.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Kernel_23/include/CGAL/Vector_3.h b/Kernel_23/include/CGAL/Vector_3.h index 22674bf9a2f..82818e8d229 100644 --- a/Kernel_23/include/CGAL/Vector_3.h +++ b/Kernel_23/include/CGAL/Vector_3.h @@ -370,7 +370,7 @@ operator>>(std::istream& is, Vector_3& v) { return extract(is, v, typename R::Kernel_tag() ); } - + } //namespace CGAL #endif // CGAL_VECTOR_3_H From 660cb5d77845888ba481798da976346f24330c50 Mon Sep 17 00:00:00 2001 From: Andreas Fabri Date: Tue, 2 Oct 2018 11:07:43 +0200 Subject: [PATCH 083/268] Add precondition that range is non-empty. This is more explicit than the precondition that norm>0 --- .../doc/Interpolation/CGAL/interpolation_functions.h | 3 +++ Interpolation/include/CGAL/interpolation_functions.h | 5 +++++ 2 files changed, 8 insertions(+) diff --git a/Interpolation/doc/Interpolation/CGAL/interpolation_functions.h b/Interpolation/doc/Interpolation/CGAL/interpolation_functions.h index 0377cb867bb..873b22ccb11 100644 --- a/Interpolation/doc/Interpolation/CGAL/interpolation_functions.h +++ b/Interpolation/doc/Interpolation/CGAL/interpolation_functions.h @@ -99,6 +99,7 @@ the interpolated function value as the weighted sum of the values corresponding to each entry of the entity/coordinate pairs in the range `[first, beyond)`. \pre `norm` \f$ \neq0\f$. +\pre `first != beyond`. \pre `value_function(p.first).second == true` for all pairs `p` in the range `[first, beyond)`. \sa `CGAL::quadratic_interpolation()` @@ -163,6 +164,7 @@ the function returns a pair where the Boolean is set to `false`. \param traits is an instance of the traits class. \pre `norm` \f$ \neq0\f$. +\pre `first != beyond`. \pre `value_function(p.first).second == true` for pairs `p` in the range `[first, beyond)` \sa `CGAL::linear_interpolation()` @@ -229,6 +231,7 @@ the function returns a pair where the Boolean is set to `false`. \param traits is an instance of the traits class. \pre `norm` \f$ \neq0\f$. +\pre `first != beyond`. \pre `value_function(q).second == true` for all points `q` of the point/coordinate pairs in the range `[first, beyond)` \sa `CGAL::Interpolation_traits_2` diff --git a/Interpolation/include/CGAL/interpolation_functions.h b/Interpolation/include/CGAL/interpolation_functions.h index 23c7a8d6ce0..f7c8769e10a 100644 --- a/Interpolation/include/CGAL/interpolation_functions.h +++ b/Interpolation/include/CGAL/interpolation_functions.h @@ -66,6 +66,7 @@ linear_interpolation(ForwardIterator first, ForwardIterator beyond, const typename std::iterator_traits::value_type::second_type& norm, ValueFunctor value_function) { + CGAL_precondition(first != beyond); CGAL_precondition(norm > 0); typedef typename std::iterator_traits::value_type::first_type arg_type; @@ -97,6 +98,7 @@ quadratic_interpolation(ForwardIterator first, ForwardIterator beyond, GradFunctor gradient_function, const Traits& traits) { + CGAL_precondition(first != beyond); CGAL_precondition(norm > 0); typedef typename std::iterator_traits::value_type::first_type arg_type; @@ -145,6 +147,7 @@ sibson_c1_interpolation(ForwardIterator first, ForwardIterator beyond, GradFunctor gradient_function, const Traits& traits) { + CGAL_precondition(first != beyond); CGAL_precondition(norm >0); typedef typename std::iterator_traits::value_type::first_type arg_type; @@ -227,6 +230,7 @@ sibson_c1_interpolation_square(ForwardIterator first, ForwardIterator beyond, GradFunctor gradient_function, const Traits& traits) { + CGAL_precondition(first != beyond); CGAL_precondition(norm > 0); typedef typename std::iterator_traits::value_type::first_type arg_type; @@ -300,6 +304,7 @@ farin_c1_interpolation(RandomAccessIterator first, GradFunctor gradient_function, const Traits& traits) { + CGAL_precondition(first != beyond); CGAL_precondition(norm >0); typedef typename std::iterator_traits::value_type::first_type arg_type; From 8993817d9dca71ca48c74c338a4c58fad89b7019 Mon Sep 17 00:00:00 2001 From: Laurent Rineau Date: Wed, 3 Oct 2018 17:33:45 +0200 Subject: [PATCH 084/268] Time_stamper uses an atomic counter --- STL_Extension/include/CGAL/Time_stamper.h | 43 ++++++++++++++++++----- 1 file changed, 35 insertions(+), 8 deletions(-) diff --git a/STL_Extension/include/CGAL/Time_stamper.h b/STL_Extension/include/CGAL/Time_stamper.h index 64ec445e92f..904c82b6c98 100644 --- a/STL_Extension/include/CGAL/Time_stamper.h +++ b/STL_Extension/include/CGAL/Time_stamper.h @@ -22,6 +22,7 @@ #define CGAL_TIME_STAMPER_H #include +#include namespace CGAL { @@ -29,24 +30,47 @@ template struct Time_stamper { Time_stamper() - : time_stamp_(0) {} + : time_stamp_() {} Time_stamper(const Time_stamper& ts) - : time_stamp_(ts.time_stamp_) {} + : time_stamp_() + { + time_stamp_ = std::size_t(ts.time_stamp_); + } + + Time_stamper& operator=(const Time_stamper& ts) + { + time_stamp_ = std::size_t(ts.time_stamp_); + return *this; + } static void initialize_time_stamp(T* pt) { pt->set_time_stamp(std::size_t(-1)); } void set_time_stamp(T* pt) { - if(pt->time_stamp() == std::size_t(-1)) - pt->set_time_stamp(time_stamp_++); + if(pt->time_stamp() == std::size_t(-1)) { + const std::size_t new_ts = time_stamp_++; + pt->set_time_stamp(new_ts); + } else { // else: the time stamp is re-used // Enforces that the time stamp is greater than the current value. - // That is used when a TDS_3 is copied. + // That is used when a TDS_3 is copied: in that case, the + // time stamps are copied from the old element to the new one, + // but the time stamper does not know. +#ifdef CGAL_NO_ATOMIC time_stamp_ = (std::max)(time_stamp_, pt->time_stamp() + 1); +#else + // How to atomically update a maximum value? + // https://stackoverflow.com/a/16190791/1728537 + const std::size_t new_value = pt->time_stamp() + 1; + std::size_t prev_value = time_stamp_; + while(prev_value < new_value && + !time_stamp_.compare_exchange_weak(prev_value, new_value)) + ; +#endif // atomic } } @@ -69,9 +93,8 @@ struct Time_stamper if(p_t1 == NULL) return (p_t2 != NULL); else if(p_t2 == NULL) return false; else { - CGAL_assertion((p_t1 == p_t2) == - (p_t1->time_stamp() == p_t2->time_stamp())); - return p_t1->time_stamp() < p_t2->time_stamp(); + CGAL_assertion((p_t1 == p_t2) == (time_stamp(p_t1) == time_stamp(p_t2))); + return time_stamp(p_t1) < time_stamp(p_t2); } } @@ -79,7 +102,11 @@ struct Time_stamper time_stamp_ = 0; } private: +#ifdef CGAL_NO_ATOMIC std::size_t time_stamp_; +#else + CGAL::cpp11::atomic time_stamp_; +#endif }; // end class template Time_stamper template From 3a8aee198d63bf948674d26e40a44a3e1477709e Mon Sep 17 00:00:00 2001 From: Laurent Rineau Date: Wed, 3 Oct 2018 17:34:38 +0200 Subject: [PATCH 085/268] Concurrent_compact_container uses Time_stamper - and remove the `CCC_iterator`, in favor of a generic `CC_iterator`. --- .../Mesh_complex_3_in_triangulation_3_base.h | 14 - .../include/CGAL/Compact_container.h | 15 +- .../CGAL/Concurrent_compact_container.h | 264 ++---------------- 3 files changed, 31 insertions(+), 262 deletions(-) diff --git a/Mesh_3/include/CGAL/Mesh_3/Mesh_complex_3_in_triangulation_3_base.h b/Mesh_3/include/CGAL/Mesh_3/Mesh_complex_3_in_triangulation_3_base.h index dbfb582552f..f146b6dfd90 100644 --- a/Mesh_3/include/CGAL/Mesh_3/Mesh_complex_3_in_triangulation_3_base.h +++ b/Mesh_3/include/CGAL/Mesh_3/Mesh_complex_3_in_triangulation_3_base.h @@ -61,12 +61,6 @@ namespace CGAL { } - template < class DSC, bool Const > - std::size_t tbb_hasher(const CGAL::CCC_internal::CCC_iterator& it) - { - return CGAL::CCC_internal::hash_value(it); - } - // As Marc Glisse pointed out the TBB hash of a std::pair is // simplistic and leads to the // TBB Warning: Performance is not optimal because the hash function @@ -81,14 +75,6 @@ namespace CGAL { } - template < class DSC, bool Const > - std::size_t tbb_hasher(const std::pair, - CGAL::CCC_internal::CCC_iterator >& p) - { - return boost::hash, - CGAL::CCC_internal::CCC_iterator > >()(p); - } - } #endif diff --git a/STL_Extension/include/CGAL/Compact_container.h b/STL_Extension/include/CGAL/Compact_container.h index b4960af00c4..2396e370e89 100644 --- a/STL_Extension/include/CGAL/Compact_container.h +++ b/STL_Extension/include/CGAL/Compact_container.h @@ -1027,6 +1027,10 @@ bool operator>=(const Compact_container +class Concurrent_compact_container; + namespace internal { template < class DSC, bool Const > @@ -1095,12 +1099,13 @@ namespace internal { void *vp; } m_ptr; - // Only Compact_container should access these constructors. - friend class Compact_container; + // Only Compact_container and Concurrent_compact_container should + // access these constructors. + template + friend class CGAL::Compact_container; + friend class CGAL::Concurrent_compact_container; // For begin() CC_iterator(pointer ptr, int, int) diff --git a/STL_Extension/include/CGAL/Concurrent_compact_container.h b/STL_Extension/include/CGAL/Concurrent_compact_container.h index 57aec68df0f..deb229b675d 100644 --- a/STL_Extension/include/CGAL/Concurrent_compact_container.h +++ b/STL_Extension/include/CGAL/Concurrent_compact_container.h @@ -33,9 +33,12 @@ #include #include +#include + #include #include #include +#include #include #include @@ -75,9 +78,6 @@ struct Concurrent_compact_container_traits { }; namespace CCC_internal { - template < class CCC, bool Const > - class CCC_iterator; - CGAL_GENERATE_MEMBER_DETECTOR(increment_erase_counter); // A basic "no erase counter" strategy @@ -176,6 +176,8 @@ class Concurrent_compact_container typedef Concurrent_compact_container_traits Traits; public: + typedef CGAL::Time_stamper_impl Time_stamper_impl; + typedef T value_type; typedef Allocator allocator_type; @@ -194,8 +196,8 @@ public: typedef typename Allocator::difference_type difference_type; #endif - typedef CCC_internal::CCC_iterator iterator; - typedef CCC_internal::CCC_iterator const_iterator; + typedef internal::CC_iterator iterator; + typedef internal::CC_iterator const_iterator; typedef std::reverse_iterator reverse_iterator; typedef std::reverse_iterator const_reverse_iterator; @@ -207,11 +209,12 @@ private: friend class Free_list; public: - friend class CCC_internal::CCC_iterator; - friend class CCC_internal::CCC_iterator; + friend class internal::CC_iterator; + friend class internal::CC_iterator; explicit Concurrent_compact_container(const Allocator &a = Allocator()) : m_alloc(a) + , m_time_stamper(new Time_stamper_impl()) { init (); } @@ -220,6 +223,7 @@ public: Concurrent_compact_container(InputIterator first, InputIterator last, const Allocator & a = Allocator()) : m_alloc(a) + , m_time_stamper(new Time_stamper_impl()) { init(); std::copy(first, last, CGAL::inserter(*this)); @@ -228,6 +232,7 @@ public: // The copy constructor and assignment operator preserve the iterator order Concurrent_compact_container(const Concurrent_compact_container &c) : m_alloc(c.get_allocator()) + , m_time_stamper(new Time_stamper_impl()) { init(); m_block_size = c.m_block_size; @@ -246,6 +251,7 @@ public: ~Concurrent_compact_container() { clear(); + delete m_time_stamper; } bool is_used(const_iterator ptr) const @@ -267,6 +273,7 @@ public: std::swap(m_last_item, c.m_last_item); std::swap(m_free_lists, c.m_free_lists); m_all_items.swap(c.m_all_items); + std::swap(m_time_stamper, c.m_time_stamper); } iterator begin() { return iterator(m_first_item, 0, 0); } @@ -601,6 +608,7 @@ private: CGAL_assertion(type(ret) == USED); fl->dec_size(); ++m_size; + m_time_stamper->set_time_stamp(ret); return iterator(ret, 0); } @@ -689,6 +697,7 @@ private: m_last_item = NULL; m_all_items = All_items(); m_size = 0; + m_time_stamper->reset(); } allocator_type m_alloc; @@ -704,6 +713,10 @@ private: #else CGAL::cpp11::atomic m_size; #endif + + // This is a pointer, so that the definition of Compact_container does + // not require a complete type `T`. + Time_stamper_impl* m_time_stamper; }; template < class T, class Allocator > @@ -812,6 +825,7 @@ void Concurrent_compact_container:: for (size_type i = old_block_size; i >= 1; --i) { EraseCounterStrategy::set_erase_counter(*(new_block + i), 0); + m_time_stamper->initialize_time_stamp(new_block + i); put_on_free_list(new_block + i, fl); } } @@ -866,243 +880,7 @@ bool operator>=(const Concurrent_compact_container &lhs, return ! (lhs < rhs); } -namespace CCC_internal { - - template < class CCC, bool Const > - class CCC_iterator - { - typedef typename CCC::iterator iterator; - typedef CCC_iterator Self; - public: - typedef typename CCC::value_type value_type; - typedef typename CCC::size_type size_type; - typedef typename CCC::difference_type difference_type; - typedef typename boost::mpl::if_c< Const, const value_type*, - value_type*>::type pointer; - typedef typename boost::mpl::if_c< Const, const value_type&, - value_type&>::type reference; - typedef std::bidirectional_iterator_tag iterator_category; - - // the initialization with NULL is required by our Handle concept. - CCC_iterator() - { - m_ptr.p = NULL; - } - - // Either a harmless copy-ctor, - // or a conversion from iterator to const_iterator. - CCC_iterator (const iterator &it) - { - m_ptr.p = &(*it); - } - - // Same for assignment operator (otherwise MipsPro warns) - CCC_iterator & operator= (const iterator &it) - { - m_ptr.p = &(*it); - return *this; - } - - // Construction from NULL - CCC_iterator (Nullptr_t CGAL_assertion_code(n)) - { - CGAL_assertion (n == NULL); - m_ptr.p = NULL; - } - - private: - - union { - pointer p; - void *vp; - } m_ptr; - - // Only Concurrent_compact_container should access these constructors. - friend class Concurrent_compact_container; - - // For begin() - CCC_iterator(pointer ptr, int, int) - { - m_ptr.p = ptr; - if (m_ptr.p == NULL) // empty container. - return; - - ++(m_ptr.p); // if not empty, p = start - if (CCC::type(m_ptr.p) == CCC::FREE) - increment(); - } - - // Construction from raw pointer and for end(). - CCC_iterator(pointer ptr, int) - { - m_ptr.p = ptr; - } - - // NB : in case empty container, begin == end == NULL. - void increment() - { - // It's either pointing to end(), or valid. - CGAL_assertion_msg(m_ptr.p != NULL, - "Incrementing a singular iterator or an empty container iterator ?"); - CGAL_assertion_msg(CCC::type(m_ptr.p) != CCC::START_END, - "Incrementing end() ?"); - - // If it's not end(), then it's valid, we can do ++. - do { - ++(m_ptr.p); - if (CCC::type(m_ptr.p) == CCC::USED || - CCC::type(m_ptr.p) == CCC::START_END) - return; - - if (CCC::type(m_ptr.p) == CCC::BLOCK_BOUNDARY) - m_ptr.p = CCC::clean_pointee(m_ptr.p); - } while (true); - } - - void decrement() - { - // It's either pointing to end(), or valid. - CGAL_assertion_msg(m_ptr.p != NULL, - "Decrementing a singular iterator or an empty container iterator ?"); - CGAL_assertion_msg(CCC::type(m_ptr.p - 1) != CCC::START_END, - "Decrementing begin() ?"); - - // If it's not begin(), then it's valid, we can do --. - do { - --m_ptr.p; - if (CCC::type(m_ptr.p) == CCC::USED || - CCC::type(m_ptr.p) == CCC::START_END) - return; - - if (CCC::type(m_ptr.p) == CCC::BLOCK_BOUNDARY) - m_ptr.p = CCC::clean_pointee(m_ptr.p); - } while (true); - } - - public: - - Self & operator++() - { - CGAL_assertion_msg(m_ptr.p != NULL, - "Incrementing a singular iterator or an empty container iterator ?"); - /* CGAL_assertion_msg(CCC::type(m_ptr.p) == CCC::USED, - "Incrementing an invalid iterator."); */ - increment(); - return *this; - } - - Self & operator--() - { - CGAL_assertion_msg(m_ptr.p != NULL, - "Decrementing a singular iterator or an empty container iterator ?"); - /* CGAL_assertion_msg(CCC::type(m_ptr.p) == CCC::USED - || CCC::type(m_ptr.p) == CCC::START_END, - "Decrementing an invalid iterator."); */ - decrement(); - return *this; - } - - Self operator++(int) { Self tmp(*this); ++(*this); return tmp; } - Self operator--(int) { Self tmp(*this); --(*this); return tmp; } - - reference operator*() const { return *(m_ptr.p); } - - pointer operator->() const { return (m_ptr.p); } - - // For std::less... - bool operator<(const CCC_iterator& other) const - { - return (m_ptr.p < other.m_ptr.p); - } - - bool operator>(const CCC_iterator& other) const - { - return (m_ptr.p > other.m_ptr.p); - } - - bool operator<=(const CCC_iterator& other) const - { - return (m_ptr.p <= other.m_ptr.p); - } - - bool operator>=(const CCC_iterator& other) const - { - return (m_ptr.p >= other.m_ptr.p); - } - - // Can itself be used for bit-squatting. - void * for_compact_container() const { return (m_ptr.vp); } - void * & for_compact_container() { return (m_ptr.vp); } - }; - - template < class CCC, bool Const1, bool Const2 > - inline - bool operator==(const CCC_iterator &rhs, - const CCC_iterator &lhs) - { - return rhs.operator->() == lhs.operator->(); - } - - template < class CCC, bool Const1, bool Const2 > - inline - bool operator!=(const CCC_iterator &rhs, - const CCC_iterator &lhs) - { - return rhs.operator->() != lhs.operator->(); - } - - // Comparisons with NULL are part of CGAL's Handle concept... - template < class CCC, bool Const > - inline - bool operator==(const CCC_iterator &rhs, - Nullptr_t CGAL_assertion_code(n)) - { - CGAL_assertion( n == NULL); - return rhs.operator->() == NULL; - } - - template < class CCC, bool Const > - inline - bool operator!=(const CCC_iterator &rhs, - Nullptr_t CGAL_assertion_code(n)) - { - CGAL_assertion( n == NULL); - return rhs.operator->() != NULL; - } - - template - std::size_t hash_value(const CCC_iterator& i) - { - return reinterpret_cast(&*i) / sizeof(typename CCC::value_type); - } -} // namespace CCC_internal - } //namespace CGAL -namespace std { - -#if defined(BOOST_MSVC) -# pragma warning(push) -# pragma warning(disable:4099) // For VC10 it is class hash -#endif - -#ifndef CGAL_CFG_NO_STD_HASH - - template < class CCC, bool Const > - struct hash > - : public CGAL::cpp98::unary_function, std::size_t> { - - std::size_t operator()(const CGAL::CCC_internal::CCC_iterator& i) const - { - return reinterpret_cast(&*i) / sizeof(typename CCC::value_type); - } - }; -#endif // CGAL_CFG_NO_STD_HASH - -#if defined(BOOST_MSVC) -# pragma warning(pop) -#endif - -} // namespace std #include From 048934bb6c5a233520bfe24df27e7ab0e6096aef Mon Sep 17 00:00:00 2001 From: Laurent Rineau Date: Wed, 3 Oct 2018 17:35:10 +0200 Subject: [PATCH 086/268] Parallel compact container and Mesh_3 deterministic with 1 thread --- .../test/Mesh_3/test_meshing_determinism.cpp | 42 ++++++++++++------- .../test_Concurrent_compact_container.cpp | 31 ++++++++++++++ 2 files changed, 58 insertions(+), 15 deletions(-) diff --git a/Mesh_3/test/Mesh_3/test_meshing_determinism.cpp b/Mesh_3/test/Mesh_3/test_meshing_determinism.cpp index c3713a251eb..e71c56853bd 100644 --- a/Mesh_3/test/Mesh_3/test_meshing_determinism.cpp +++ b/Mesh_3/test/Mesh_3/test_meshing_determinism.cpp @@ -14,23 +14,15 @@ #include #include -// Domain -typedef CGAL::Exact_predicates_inexact_constructions_kernel K; -typedef CGAL::Mesh_polyhedron_3::type Polyhedron; -typedef CGAL::Polyhedral_mesh_domain_with_features_3 Mesh_domain; - -// Triangulation -typedef CGAL::Mesh_triangulation_3::type Tr; -typedef CGAL::Mesh_complex_3_in_triangulation_3< - Tr,Mesh_domain::Corner_index,Mesh_domain::Curve_index> C3t3; - -// Mesh Criteria -typedef CGAL::Mesh_criteria_3 Mesh_criteria; +#ifdef CGAL_LINKED_WITH_TBB +# include +#endif // To avoid verbose function and named parameters call using namespace CGAL::parameters; -int main(int, char*[]) +template +void test() { // Collect options std::size_t nb_runs = 2; @@ -39,6 +31,19 @@ int main(int, char*[]) double perturb_bound = 10.; double exude_bound = 15.; + // Domain + typedef CGAL::Exact_predicates_inexact_constructions_kernel K; + typedef CGAL::Mesh_polyhedron_3::type Polyhedron; + typedef CGAL::Polyhedral_mesh_domain_with_features_3 Mesh_domain; + + // Triangulation + typedef typename CGAL::Mesh_triangulation_3::type Tr; + typedef CGAL::Mesh_complex_3_in_triangulation_3< + Tr,Mesh_domain::Corner_index,Mesh_domain::Curve_index> C3t3; + + // Mesh Criteria + typedef CGAL::Mesh_criteria_3 Mesh_criteria; + // Domain std::cout << "\tSeed is\t 0" << std::endl; std::ifstream input("data/cube.off"); @@ -108,6 +113,13 @@ int main(int, char*[]) } } } - - return 0; +} + +int main(int, char*[]) +{ + test(); +#ifdef CGAL_LINKED_WITH_TBB + tbb::task_scheduler_init init(1); + test(); +#endif } diff --git a/STL_Extension/test/STL_Extension/test_Concurrent_compact_container.cpp b/STL_Extension/test/STL_Extension/test_Concurrent_compact_container.cpp index 1c12ab0507e..4d48b1f2889 100644 --- a/STL_Extension/test/STL_Extension/test_Concurrent_compact_container.cpp +++ b/STL_Extension/test/STL_Extension/test_Concurrent_compact_container.cpp @@ -24,6 +24,7 @@ int main() #include #include +# include # include # include @@ -32,9 +33,21 @@ int main() struct Node_1 : public CGAL::Compact_container_base { + Node_1() {} + Node_1(const Node_1& o) : time_stamp_(o.time_stamp_) {} bool operator==(const Node_1 &) const { return true; } bool operator!=(const Node_1 &) const { return false; } bool operator< (const Node_1 &) const { return false; } + + typedef CGAL::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; + } + std::size_t time_stamp_; }; class Node_2 @@ -380,6 +393,22 @@ void test(const Cont &) } +template < class Cont > +void test_time_stamps() { + Cont c1; + for (std::size_t i = 0 ; i < 10 ; ++i) + c1.emplace(); + typename Cont::iterator it = c1.begin(); + for (std::size_t i = 0 ; i < 10 ; ++i) { + assert(i == it++->time_stamp()); + } + Cont c2(c1); + it = c2.begin(); + for (std::size_t i = 0 ; i < 10 ; ++i) { + assert(i == it++->time_stamp()); + } +} + int main() { CGAL::Concurrent_compact_container C1; @@ -435,6 +464,8 @@ int main() std::cout << "cc2: " << it->rnd << " / " << std::endl; }*/ + tbb::task_scheduler_init init(1); + test_time_stamps >(); return 0; } From 1b6e85177495649cbe416176bb487bb747df109a Mon Sep 17 00:00:00 2001 From: Simon Giraudot Date: Mon, 24 Sep 2018 14:26:59 +0200 Subject: [PATCH 087/268] Workaround serialization bug with null pointers --- .../internal/auxiliary/random-forest/node.hpp | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/Classification/include/CGAL/Classification/internal/auxiliary/random-forest/node.hpp b/Classification/include/CGAL/Classification/internal/auxiliary/random-forest/node.hpp index 00e86323f84..84f8d973014 100644 --- a/Classification/include/CGAL/Classification/internal/auxiliary/random-forest/node.hpp +++ b/Classification/include/CGAL/Classification/internal/auxiliary/random-forest/node.hpp @@ -249,8 +249,11 @@ public: ar & BOOST_SERIALIZATION_NVP(params); ar & BOOST_SERIALIZATION_NVP(splitter); ar & BOOST_SERIALIZATION_NVP(node_dist); - ar & BOOST_SERIALIZATION_NVP(left); - ar & BOOST_SERIALIZATION_NVP(right); + if (!is_leaf) + { + ar & BOOST_SERIALIZATION_NVP(left); + ar & BOOST_SERIALIZATION_NVP(right); + } } }; From 98402a7cd95bcd6a40c9bd38a42e257fd526301e Mon Sep 17 00:00:00 2001 From: Simon Giraudot Date: Mon, 24 Sep 2018 14:43:09 +0200 Subject: [PATCH 088/268] Add test for IO functions of Classification --- .../test/Classification/CMakeLists.txt | 8 ++ .../test/Classification/test_io.cpp | 98 +++++++++++++++++++ 2 files changed, 106 insertions(+) create mode 100644 Classification/test/Classification/test_io.cpp diff --git a/Classification/test/Classification/CMakeLists.txt b/Classification/test/Classification/CMakeLists.txt index 845522e5213..7879c214c4c 100644 --- a/Classification/test/Classification/CMakeLists.txt +++ b/Classification/test/Classification/CMakeLists.txt @@ -104,3 +104,11 @@ if(TARGET deprecated_test_classification_point_set) CGAL_target_use_TBB( deprecated_test_classification_point_set ) endif() endif() + +create_single_source_cgal_program( "test_io.cpp" CXX_FEATURES ${needed_cxx_features} ) +if(TARGET test_io) + target_link_libraries(test_io PUBLIC ${classification_linked_libraries}) + if (TBB_FOUND) + CGAL_target_use_TBB( test_io ) + endif() +endif() diff --git a/Classification/test/Classification/test_io.cpp b/Classification/test/Classification/test_io.cpp new file mode 100644 index 00000000000..41c707ab590 --- /dev/null +++ b/Classification/test/Classification/test_io.cpp @@ -0,0 +1,98 @@ +#if defined (_MSC_VER) && !defined (_WIN64) +#pragma warning(disable:4244) // boost::number_distance::distance() + // converts 64 to 32 bits integers +#endif + +#include +#include +#include +#include + +#include +#include +#include +#include + +typedef CGAL::Simple_cartesian Kernel; +typedef Kernel::Point_3 Point; +typedef Kernel::Vector_3 Vector; +typedef CGAL::Point_set_3 Point_set; +typedef Point_set::Point_map Point_map; + +typedef Kernel::Iso_cuboid_3 Iso_cuboid_3; + +namespace Classification = CGAL::Classification; + +typedef Classification::Label_handle Label_handle; +typedef Classification::Feature_handle Feature_handle; +typedef Classification::Label_set Label_set; +typedef Classification::Feature_set Feature_set; + +typedef Classification::ETHZ_random_forest_classifier Classifier; + +typedef Classification::Planimetric_grid Planimetric_grid; +typedef Classification::Point_set_neighborhood Neighborhood; +typedef Classification::Local_eigen_analysis Local_eigen_analysis; + +typedef Classification::Feature::Distance_to_plane Distance_to_plane; +typedef Classification::Feature::Elevation Elevation; + +int main (int, char**) +{ + Point_set points; + + for (std::size_t i = 0; i < 1000; ++ i) + points.insert (Point (CGAL::get_default_random().get_double(), + CGAL::get_default_random().get_double(), + CGAL::get_default_random().get_double())); + + Iso_cuboid_3 bbox = CGAL::bounding_box (points.points().begin(), points.points().end()); + + float grid_resolution = 0.34f; + float radius_neighbors = 1.7f; + float radius_dtm = 15.0f; + + Planimetric_grid grid (points, points.point_map(), bbox, grid_resolution); + Neighborhood neighborhood (points, points.point_map()); + Local_eigen_analysis eigen (points, points.point_map(), neighborhood.k_neighbor_query(6)); + + Feature_set features; + Feature_handle distance_to_plane = features.add (points, points.point_map(), eigen); + Feature_handle elevation = features.add (points, points.point_map(), grid, + radius_dtm); + + Label_set labels; + + std::vector training_set (points.size(), -1); + for (std::size_t i = 0; i < 3; ++ i) + { + std::ostringstream oss; + oss << "label_" << i; + Label_handle lh = labels.add(oss.str().c_str()); + + for (std::size_t j = 0; j < 100; ++ j) + training_set[std::size_t(CGAL::get_default_random().get_int(0, int(training_set.size())))] = int(i); + } + + Classifier classifier (labels, features); + classifier.train (training_set); + + std::ofstream outf ("output_config.gz"); + outf.precision(18); + classifier.save_configuration(outf); + outf.close(); + + Classifier classifier2 (labels, features); + std::ifstream inf ("output_config.gz"); + classifier2.load_configuration(inf); + + std::vector label_indices; + std::vector label_indices_2; + + Classification::classify (points, labels, classifier, label_indices); + Classification::classify (points, labels, classifier2, label_indices_2); + + assert (label_indices == label_indices_2); + + return EXIT_SUCCESS; +} From 55581cbdec1f30e84428351f124131267086ec11 Mon Sep 17 00:00:00 2001 From: Simon Giraudot Date: Thu, 4 Oct 2018 12:08:06 +0200 Subject: [PATCH 089/268] Update test_io with latest Local_eigen_analysis API --- Classification/test/Classification/test_io.cpp | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/Classification/test/Classification/test_io.cpp b/Classification/test/Classification/test_io.cpp index 41c707ab590..765d980715b 100644 --- a/Classification/test/Classification/test_io.cpp +++ b/Classification/test/Classification/test_io.cpp @@ -54,7 +54,9 @@ int main (int, char**) Planimetric_grid grid (points, points.point_map(), bbox, grid_resolution); Neighborhood neighborhood (points, points.point_map()); - Local_eigen_analysis eigen (points, points.point_map(), neighborhood.k_neighbor_query(6)); + Local_eigen_analysis eigen + = Local_eigen_analysis::create_from_point_set + (points, points.point_map(), neighborhood.k_neighbor_query(6)); Feature_set features; Feature_handle distance_to_plane = features.add (points, points.point_map(), eigen); From 55b269d12a1cfeb7174a691fbc11ae7df1c8faa2 Mon Sep 17 00:00:00 2001 From: Simon Giraudot Date: Thu, 4 Oct 2018 15:39:49 +0200 Subject: [PATCH 090/268] Rename test to avoid conflict with other package --- Classification/test/Classification/CMakeLists.txt | 8 ++++---- .../{test_io.cpp => test_classification_io.cpp} | 0 2 files changed, 4 insertions(+), 4 deletions(-) rename Classification/test/Classification/{test_io.cpp => test_classification_io.cpp} (100%) diff --git a/Classification/test/Classification/CMakeLists.txt b/Classification/test/Classification/CMakeLists.txt index 7879c214c4c..e84a46c7010 100644 --- a/Classification/test/Classification/CMakeLists.txt +++ b/Classification/test/Classification/CMakeLists.txt @@ -105,10 +105,10 @@ if(TARGET deprecated_test_classification_point_set) endif() endif() -create_single_source_cgal_program( "test_io.cpp" CXX_FEATURES ${needed_cxx_features} ) -if(TARGET test_io) - target_link_libraries(test_io PUBLIC ${classification_linked_libraries}) +create_single_source_cgal_program( "test_classification_io.cpp" CXX_FEATURES ${needed_cxx_features} ) +if(TARGET test_classification_io) + target_link_libraries(test_classification_io PUBLIC ${classification_linked_libraries}) if (TBB_FOUND) - CGAL_target_use_TBB( test_io ) + CGAL_target_use_TBB( test_classification_io ) endif() endif() diff --git a/Classification/test/Classification/test_io.cpp b/Classification/test/Classification/test_classification_io.cpp similarity index 100% rename from Classification/test/Classification/test_io.cpp rename to Classification/test/Classification/test_classification_io.cpp From e977ce76b3b607894eb976d2ddc035b9409e0e1e Mon Sep 17 00:00:00 2001 From: Andreas Fabri Date: Thu, 4 Oct 2018 19:37:11 +0200 Subject: [PATCH 091/268] inline --- Polyhedron_IO/include/CGAL/IO/OFF_reader.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Polyhedron_IO/include/CGAL/IO/OFF_reader.h b/Polyhedron_IO/include/CGAL/IO/OFF_reader.h index 17741fe1933..fed7ad5dbfa 100644 --- a/Polyhedron_IO/include/CGAL/IO/OFF_reader.h +++ b/Polyhedron_IO/include/CGAL/IO/OFF_reader.h @@ -37,7 +37,7 @@ namespace CGAL{ pt = Point_3(x, y, z); } - void fill_point(double x, double y, double z, CGAL::cpp11::array& p) + inline void fill_point(double x, double y, double z, CGAL::cpp11::array& p) { p = CGAL::make_array(x,y,z); } From d82cdbcff157f2e79882f3d986aaf4d4bd365274 Mon Sep 17 00:00:00 2001 From: Laurent Rineau Date: Fri, 5 Oct 2018 17:02:38 +0200 Subject: [PATCH 092/268] Mesh_3: Allow `Subdomain_index` to be `short` ... That forced me to modify the `Index` of domains with features. --- Mesh_3/include/CGAL/Mesh_3/io_signature.h | 40 +++++++++++++ .../Mesh_domain_with_polyline_features_3.h | 56 +++++++++++++++---- .../CGAL/internal/Mesh_3/indices_management.h | 24 +++++++- .../test_domain_with_polyline_features.cpp | 1 + .../test_meshing_polyhedron_with_features.cpp | 7 ++- .../Polygon_mesh_processing/detect_features.h | 10 ++-- 6 files changed, 120 insertions(+), 18 deletions(-) diff --git a/Mesh_3/include/CGAL/Mesh_3/io_signature.h b/Mesh_3/include/CGAL/Mesh_3/io_signature.h index 1dda061e14b..c5dfd9dd25a 100644 --- a/Mesh_3/include/CGAL/Mesh_3/io_signature.h +++ b/Mesh_3/include/CGAL/Mesh_3/io_signature.h @@ -109,6 +109,46 @@ struct Get_io_signature } }; +template <> +struct Get_io_signature +{ + std::string operator()() { + return "c"; + } +}; + +template <> +struct Get_io_signature +{ + std::string operator()() { + return "uc"; + } +}; + +template <> +struct Get_io_signature +{ + std::string operator()() { + return "sc"; + } +}; + +template <> +struct Get_io_signature +{ + std::string operator()() { + return "s"; + } +}; + +template <> +struct Get_io_signature +{ + std::string operator()() { + return "us"; + } +}; + template <> struct Get_io_signature { diff --git a/Mesh_3/include/CGAL/Mesh_domain_with_polyline_features_3.h b/Mesh_3/include/CGAL/Mesh_domain_with_polyline_features_3.h index 5fc0fcc48df..eb9dfd83520 100644 --- a/Mesh_3/include/CGAL/Mesh_domain_with_polyline_features_3.h +++ b/Mesh_3/include/CGAL/Mesh_domain_with_polyline_features_3.h @@ -38,6 +38,7 @@ #include #include #include +#include #include #include @@ -546,15 +547,19 @@ class Mesh_domain_with_polyline_features_3 public: /// \name Types /// @{ - typedef typename MeshDomain_3::Index Index; + typedef typename MeshDomain_3::Surface_patch_index Surface_patch_index; + typedef typename MeshDomain_3::Subdomain_index Subdomain_index; + typedef int Curve_index; + typedef int Corner_index; - typedef typename MeshDomain_3::Surface_patch_index - Surface_patch_index; + typedef typename Mesh_3::internal::Index_generator_with_features< + typename MeshDomain_3::Subdomain_index, + Surface_patch_index, + Curve_index, + Corner_index>::type Index; - typedef int Curve_index; - typedef int Corner_index; - typedef CGAL::Tag_true Has_features; - typedef typename MeshDomain_3::R::FT FT; + typedef CGAL::Tag_true Has_features; + typedef typename MeshDomain_3::R::FT FT; /// @} #ifndef DOXYGEN_RUNNING @@ -777,18 +782,47 @@ public: const Point_3& c1, const Point_3& c2, const FT sq_r1, const FT sq_r2) const; + + /** + * Returns the index to be stored in a vertex lying on the surface identified + * by \c index. + */ + Index index_from_surface_patch_index(const Surface_patch_index& index) const + { return Index(index); } + + /** + * Returns the index to be stored in a vertex lying in the subdomain + * identified by \c index. + */ + Index index_from_subdomain_index(const Subdomain_index& index) const + { return Index(index); } + /// Returns an `Index` from a `Curve_index` Index index_from_curve_index(const Curve_index& index) const { return Index(index); } - /// Returns a `Curve_index` from an `Index` - Curve_index curve_index(const Index& index) const - { return boost::get(index); } - /// Returns an `Index` from a `Corner_index` Index index_from_corner_index(const Corner_index& index) const { return Index(index); } + /** + * Returns the \c Surface_patch_index of the surface patch + * where lies a vertex with dimension 2 and index \c index. + */ + Surface_patch_index surface_patch_index(const Index& index) const + { return boost::get(index); } + + /** + * Returns the index of the subdomain containing a vertex + * with dimension 3 and index \c index. + */ + Subdomain_index subdomain_index(const Index& index) const + { return boost::get(index); } + + /// Returns a `Curve_index` from an `Index` + Curve_index curve_index(const Index& index) const + { return boost::get(index); } + /// Returns a `Corner_index` from an `Index` Corner_index corner_index(const Index& index) const { return boost::get(index); } diff --git a/Mesh_3/include/CGAL/internal/Mesh_3/indices_management.h b/Mesh_3/include/CGAL/internal/Mesh_3/indices_management.h index 4bd0e7be97f..62cbed028f1 100644 --- a/Mesh_3/include/CGAL/internal/Mesh_3/indices_management.h +++ b/Mesh_3/include/CGAL/internal/Mesh_3/indices_management.h @@ -33,6 +33,7 @@ #include #include #include +#include #include #include @@ -48,7 +49,7 @@ template < typename Subdomain_index, typename Surface_patch_index > struct Index_generator { typedef boost::variant Index; - typedef Index type; + typedef Index type; }; template < typename T > @@ -58,6 +59,27 @@ struct Index_generator typedef Index type; }; +template < typename Subdomain_index, + typename Surface_patch_index, + typename Curves_index, + typename Corner_index> +struct Index_generator_with_features +{ + typedef boost::mpl::set4 Set; + typedef typename boost::make_variant_over::type Index; + typedef Index type; +}; + +template < typename T> +struct Index_generator_with_features +{ + typedef T Index; + typedef Index type; +}; + template const T& get_index(const Boost_variant& x, typename boost::disable_if >::type * = 0) diff --git a/Mesh_3/test/Mesh_3/test_domain_with_polyline_features.cpp b/Mesh_3/test/Mesh_3/test_domain_with_polyline_features.cpp index 5123829ce97..d5b480e8d10 100644 --- a/Mesh_3/test/Mesh_3/test_domain_with_polyline_features.cpp +++ b/Mesh_3/test/Mesh_3/test_domain_with_polyline_features.cpp @@ -38,6 +38,7 @@ struct Dummy_domain typedef typename K::FT FT; typedef int Index; typedef int Surface_patch_index; + typedef unsigned short Subdomain_index; }; typedef Dummy_domain Smooth_domain; diff --git a/Mesh_3/test/Mesh_3/test_meshing_polyhedron_with_features.cpp b/Mesh_3/test/Mesh_3/test_meshing_polyhedron_with_features.cpp index d69b475b3ad..9697ac33b19 100644 --- a/Mesh_3/test/Mesh_3/test_meshing_polyhedron_with_features.cpp +++ b/Mesh_3/test/Mesh_3/test_meshing_polyhedron_with_features.cpp @@ -39,8 +39,11 @@ struct Polyhedron_with_features_tester : public Tester void operator()() const { typedef CGAL::Mesh_3::Robust_intersection_traits_3 Gt; - typedef typename CGAL::Mesh_polyhedron_3::type Polyhedron; - typedef CGAL::Polyhedral_mesh_domain_with_features_3 Mesh_domain; + typedef typename CGAL::Mesh_polyhedron_3::type Polyhedron; + typedef CGAL::Polyhedral_mesh_domain_with_features_3 Mesh_domain; typedef typename CGAL::Mesh_triangulation_3< Mesh_domain, diff --git a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/detect_features.h b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/detect_features.h index 330e348277b..5e0394a876d 100644 --- a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/detect_features.h +++ b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/detect_features.h @@ -97,14 +97,16 @@ template typename PatchIdMapWrapper::value_type get(PatchIdMapWrapper& map, Handle_type h) { - return get(map.map, h) - map.offset; + typedef typename PatchIdMapWrapper::value_type value_type; + return value_type(get(map.map, h) - map.offset); } template void put(PatchIdMapWrapper& map, Handle_type h, typename PatchIdMapWrapper::value_type pid) { - put(map.map, h, pid + map.offset); + typedef typename PatchIdMapWrapper::value_type value_type; + put(map.map, h, value_type(pid + map.offset)); } @@ -127,14 +129,14 @@ template typename PatchIdMapWrapper >::value_type get(PatchIdMapWrapper >& map, Handle_type h) { - return get(map.map, h).first - map.offset; + return Int(get(map.map, h).first - map.offset); } template void put(PatchIdMapWrapper >& map, Handle_type h, typename PatchIdMapWrapper >::value_type pid) { - put(map.map, h, std::pair(pid+map.offset, 0)); + put(map.map, h, std::pair(Int(pid+map.offset), 0)); } template Date: Mon, 8 Oct 2018 09:50:03 +0200 Subject: [PATCH 093/268] Add `-ftemplate-backtrace-limit=0` to CXX flags That should allow to debug more efficiently compilation issues with templates --- .travis/build_package.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.travis/build_package.sh b/.travis/build_package.sh index f1faf434ddd..d9afbe224b7 100755 --- a/.travis/build_package.sh +++ b/.travis/build_package.sh @@ -2,7 +2,7 @@ set -e [ -n "$CGAL_DEBUG_TRAVIS" ] && set -x -CXX_FLAGS="-DCGAL_NDEBUG" +CXX_FLAGS="-DCGAL_NDEBUG -ftemplate-backtrace-limit=0" function build_examples { mkdir -p build-travis From a2e8a1c68fa225659d798d339683000dfd7ad059 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Loriot?= Date: Tue, 4 Sep 2018 11:11:41 +0200 Subject: [PATCH 094/268] add the suffix Ref to doxygen link to reference --- .../doc/AABB_tree/PackageDescription.txt | 8 ++-- .../CGAL/AABB_face_graph_triangle_primitive.h | 2 +- .../AABB_halfedge_graph_segment_primitive.h | 2 +- .../CGAL/AABB_polyhedron_segment_primitive.h | 2 +- .../CGAL/AABB_polyhedron_triangle_primitive.h | 2 +- AABB_tree/include/CGAL/AABB_primitive.h | 2 +- .../include/CGAL/AABB_segment_primitive.h | 2 +- AABB_tree/include/CGAL/AABB_traits.h | 2 +- AABB_tree/include/CGAL/AABB_tree.h | 2 +- .../include/CGAL/AABB_triangle_primitive.h | 2 +- .../AABB_triangulation_3_triangle_primitive.h | 2 +- .../PackageDescription.txt | 6 +-- .../Advancing_front_surface_reconstruction.h | 6 +-- ...front_surface_reconstruction_cell_base_3.h | 2 +- ...ont_surface_reconstruction_vertex_base_3.h | 2 +- .../Algebraic_foundations.txt | 2 +- .../CGAL/Algebraic_structure_traits.h | 18 ++++---- .../CGAL/Coercion_traits.h | 2 +- .../CGAL/Fraction_traits.h | 2 +- .../CGAL/Real_embeddable_traits.h | 2 +- .../Algebraic_foundations/CGAL/number_utils.h | 46 +++++++++---------- .../PackageDescription.txt | 8 ++-- .../Algebraic_kernel_d/PackageDescription.txt | 10 ++-- .../doc/Alpha_shapes_2/CGAL/Alpha_shape_2.h | 2 +- .../CGAL/Alpha_shape_face_base_2.h | 2 +- .../CGAL/Alpha_shape_vertex_base_2.h | 2 +- .../Weighted_alpha_shape_euclidean_traits_2.h | 2 +- .../doc/Alpha_shapes_2/PackageDescription.txt | 8 ++-- .../doc/Alpha_shapes_3/CGAL/Alpha_shape_3.h | 2 +- .../CGAL/Alpha_shape_cell_base_3.h | 4 +- .../CGAL/Alpha_shape_vertex_base_3.h | 2 +- .../Alpha_shapes_3/CGAL/Fixed_alpha_shape_3.h | 2 +- .../CGAL/Fixed_alpha_shape_cell_base_3.h | 2 +- .../CGAL/Fixed_alpha_shape_vertex_base_3.h | 2 +- .../doc/Alpha_shapes_3/PackageDescription.txt | 8 ++-- .../CGAL/Apollonius_graph_2.h | 2 +- .../CGAL/Apollonius_graph_filtered_traits_2.h | 2 +- .../CGAL/Apollonius_graph_hierarchy_2.h | 2 +- ...Apollonius_graph_hierarchy_vertex_base_2.h | 2 +- .../CGAL/Apollonius_graph_traits_2.h | 2 +- .../CGAL/Apollonius_graph_vertex_base_2.h | 2 +- .../CGAL/Apollonius_site_2.h | 2 +- .../Apollonius_graph_2/PackageDescription.txt | 8 ++-- .../CGAL/Arr_accessor.h | 2 +- .../CGAL/Arr_face_index_map.h | 2 +- .../CGAL/Arr_observer.h | 2 +- .../CGAL/Arr_vertex_index_map.h | 2 +- .../CGAL/Arrangement_2.h | 2 +- .../CGAL/Arrangement_with_history_2.h | 2 +- .../PackageDescription.txt | 26 +++++------ BGL/doc/BGL/NamedParameters.txt | 2 +- BGL/doc/BGL/PackageDescription.txt | 28 +++++------ BGL/doc/BGL/graph_traits.txt | 2 +- BGL/include/CGAL/boost/graph/partition.h | 2 +- .../boost/graph/split_graph_into_polylines.h | 2 +- .../Barycentric_coordinates_2.txt | 2 +- .../PackageDescription.txt | 8 ++-- .../Discrete_harmonic_2.h | 2 +- .../Generalized_barycentric_coordinates_2.h | 2 +- .../Barycentric_coordinates_2/Mean_value_2.h | 2 +- .../Segment_coordinates_2.h | 2 +- .../Triangle_coordinates_2.h | 2 +- .../Barycentric_coordinates_2/Wachspress_2.h | 2 +- .../barycentric_enum_2.h | 2 +- .../CGAL/Boolean_set_operations_2.h | 14 +++--- .../Gps_default_dcel.h | 6 +-- .../CGAL/General_polygon_2.h | 2 +- .../CGAL/General_polygon_set_2.h | 2 +- .../CGAL/Gps_circle_segment_traits_2.h | 2 +- .../CGAL/Gps_segment_traits_2.h | 2 +- .../CGAL/Gps_traits_2.h | 2 +- .../CGAL/Polygon_set_2.h | 2 +- .../CGAL/connect_holes.h | 2 +- .../PackageDescription.txt | 8 ++-- .../CGAL/Approximate_min_ellipsoid_d.h | 2 +- .../Approximate_min_ellipsoid_d_traits_2.h | 2 +- .../Approximate_min_ellipsoid_d_traits_3.h | 2 +- .../Approximate_min_ellipsoid_d_traits_d.h | 2 +- .../doc/Bounding_volumes/CGAL/Min_annulus_d.h | 2 +- .../doc/Bounding_volumes/CGAL/Min_circle_2.h | 2 +- .../CGAL/Min_circle_2_traits_2.h | 2 +- .../doc/Bounding_volumes/CGAL/Min_ellipse_2.h | 2 +- .../CGAL/Min_ellipse_2_traits_2.h | 2 +- .../CGAL/Min_quadrilateral_traits_2.h | 2 +- .../CGAL/Min_sphere_annulus_d_traits_2.h | 2 +- .../CGAL/Min_sphere_annulus_d_traits_3.h | 2 +- .../CGAL/Min_sphere_annulus_d_traits_d.h | 2 +- .../doc/Bounding_volumes/CGAL/Min_sphere_d.h | 2 +- .../CGAL/Min_sphere_of_points_d_traits_2.h | 2 +- .../CGAL/Min_sphere_of_points_d_traits_3.h | 2 +- .../CGAL/Min_sphere_of_points_d_traits_d.h | 2 +- .../CGAL/Min_sphere_of_spheres_d.h | 2 +- .../CGAL/Min_sphere_of_spheres_d_traits_2.h | 2 +- .../CGAL/Min_sphere_of_spheres_d_traits_3.h | 2 +- .../CGAL/Min_sphere_of_spheres_d_traits_d.h | 2 +- .../CGAL/min_quadrilateral_2.h | 6 +-- .../CGAL/rectangular_p_center_2.h | 4 +- .../Bounding_volumes/PackageDescription.txt | 8 ++-- .../Box_intersection_d/PackageDescription.txt | 18 ++++---- .../doc/CGAL_ipelets/CGAL/CGAL_Ipelet_base.h | 4 +- .../doc/CGAL_ipelets/PackageDescription.txt | 6 +-- .../Circular_kernel_2/PackageDescription.txt | 16 +++---- .../Circular_kernel_3/PackageDescription.txt | 16 +++---- Circulator/doc/Circulator/CGAL/circulator.h | 2 +- .../doc/Circulator/PackageDescription.txt | 18 ++++---- .../doc/Classification/PackageDescription.txt | 26 +++++------ .../Combinatorial_map/PackageDescription.txt | 14 +++--- .../Cone_spanners_2/PackageDescription.txt | 6 +-- .../include/CGAL/Compute_cone_boundaries_2.h | 2 +- .../include/CGAL/Cone_spanners_enum_2.h | 2 +- .../include/CGAL/Construct_theta_graph_2.h | 2 +- .../include/CGAL/Construct_yao_graph_2.h | 2 +- .../include/CGAL/gnuplot_output_2.h | 2 +- .../PackageDescription.txt | 6 +-- .../include/CGAL/convex_decomposition_3.h | 2 +- .../doc/Convex_hull_2/PackageDescription.txt | 18 ++++---- .../doc/Convex_hull_3/PackageDescription.txt | 14 +++--- .../doc/Convex_hull_d/CGAL/Convex_hull_d.h | 2 +- .../CGAL/Convex_hull_d_traits_3.h | 2 +- .../doc/Convex_hull_d/CGAL/Delaunay_d.h | 2 +- .../doc/Convex_hull_d/PackageDescription.txt | 8 ++-- .../doc/Documentation/Installation.txt | 20 ++++---- .../doc/Envelope_2/CGAL/Envelope_diagram_1.h | 2 +- Envelope_2/doc/Envelope_2/CGAL/envelope_2.h | 8 ++-- .../doc/Envelope_2/PackageDescription.txt | 8 ++-- .../doc/Envelope_3/CGAL/Env_plane_traits_3.h | 2 +- .../doc/Envelope_3/CGAL/Env_sphere_traits_3.h | 2 +- .../CGAL/Env_surface_data_traits_3.h | 2 +- .../Envelope_3/CGAL/Env_triangle_traits_3.h | 2 +- Envelope_3/doc/Envelope_3/CGAL/envelope_3.h | 10 ++-- .../doc/Envelope_3/PackageDescription.txt | 8 ++-- .../Generalized_map/PackageDescription.txt | 10 ++-- .../Generator/CGAL/Combination_enumerator.h | 2 +- Generator/doc/Generator/CGAL/Random.h | 6 +-- .../doc/Generator/CGAL/point_generators_2.h | 2 +- .../doc/Generator/CGAL/point_generators_3.h | 2 +- .../doc/Generator/CGAL/point_generators_d.h | 2 +- .../CGAL/random_convex_hull_in_disc_2.h | 2 +- .../doc/Generator/CGAL/random_convex_set_2.h | 2 +- .../doc/Generator/CGAL/random_polygon_2.h | 2 +- .../doc/Generator/CGAL/random_selection.h | 2 +- .../doc/Generator/PackageDescription.txt | 8 ++-- .../doc/Geomview/CGAL/IO/Geomview_stream.h | 8 ++-- Geomview/doc/Geomview/PackageDescription.txt | 6 +-- .../doc/GraphicsView/PackageDescription.txt | 12 ++--- .../doc/HalfedgeDS/PackageDescription.txt | 16 +++---- .../CGAL/Extremal_polygon_traits_2.h | 4 +- .../CGAL/Largest_empty_iso_rectangle_2.h | 2 +- .../Inscribed_areas/CGAL/extremal_polygon_2.h | 6 +-- .../Inscribed_areas/PackageDescription.txt | 8 ++-- .../CGAL/interpolation_functions.h | 2 +- .../doc/Interpolation/PackageDescription.txt | 14 +++--- .../CGAL/Interval_skip_list.h | 2 +- .../CGAL/Interval_skip_list_interval.h | 2 +- .../Interval_skip_list/CGAL/Level_interval.h | 2 +- .../Interval_skip_list/PackageDescription.txt | 8 ++-- .../CGAL/Monge_via_jet_fitting.h | 4 +- .../doc/Jet_fitting_3/PackageDescription.txt | 8 ++-- Kernel_23/doc/Kernel_23/CGAL/Origin.h | 4 +- .../doc/Kernel_23/PackageDescription.txt | 24 +++++----- Kernel_d/doc/Kernel_d/PackageDescription.txt | 18 ++++---- .../PackageDescription.txt | 16 +++---- .../doc/Matrix_search/CGAL/Dynamic_matrix.h | 2 +- .../Sorted_matrix_search_traits_adaptor.h | 2 +- .../CGAL/monotone_matrix_search.h | 2 +- .../Matrix_search/CGAL/sorted_matrix_search.h | 2 +- .../doc/Matrix_search/PackageDescription.txt | 8 ++-- .../Mesh_2/CGAL/Delaunay_mesh_criteria_2.h | 2 +- .../Mesh_2/CGAL/Delaunay_mesh_face_base_2.h | 2 +- .../CGAL/Delaunay_mesh_size_criteria_2.h | 2 +- .../Mesh_2/CGAL/Delaunay_mesh_vertex_base_2.h | 2 +- Mesh_2/doc/Mesh_2/CGAL/Delaunay_mesher_2.h | 2 +- Mesh_2/doc/Mesh_2/CGAL/Mesh_2/Face_badness.h | 2 +- .../Mesh_2/CGAL/Triangulation_conformer_2.h | 2 +- Mesh_2/doc/Mesh_2/PackageDescription.txt | 12 ++--- Mesh_3/doc/Mesh_3/PackageDescription.txt | 22 ++++----- .../CGAL/Polygon_convex_decomposition_2.h | 4 +- .../CGAL/Polygon_nop_decomposition_2.h | 2 +- .../Polygon_triangulation_decomposition_2.h | 2 +- .../CGAL/Polygon_vertical_decomposition_2.h | 2 +- ...mall_side_angle_bisector_decomposition_2.h | 2 +- .../CGAL/approximated_offset_2.h | 8 ++-- .../Minkowski_sum_2/CGAL/minkowski_sum_2.h | 12 ++--- .../Minkowski_sum_2/CGAL/offset_polygon_2.h | 8 ++-- .../Minkowski_sum_2/PackageDescription.txt | 8 ++-- .../Minkowski_sum_2/AABB_tree_with_join.h | 2 +- .../Minkowski_sum_3/PackageDescription.txt | 6 +-- .../include/CGAL/minkowski_sum_3.h | 2 +- .../Miscellany/CGAL/Handle_hash_function.h | 2 +- Miscellany/doc/Miscellany/CGAL/Memory_sizer.h | 2 +- .../doc/Miscellany/CGAL/Modifier_base.h | 2 +- .../doc/Miscellany/CGAL/Profile_counter.h | 2 +- Miscellany/doc/Miscellany/CGAL/Real_timer.h | 2 +- Miscellany/doc/Miscellany/CGAL/Timer.h | 2 +- Miscellany/doc/Miscellany/CGAL/Union_find.h | 2 +- .../doc/Miscellany/CGAL/Unique_hash_map.h | 2 +- .../doc/Miscellany/PackageDescription.txt | 8 ++-- .../Modular_arithmetic/CGAL/Modular_traits.h | 2 +- .../doc/Modular_arithmetic/CGAL/Residue.h | 2 +- .../Modular_arithmetic/PackageDescription.txt | 8 ++-- Nef_2/doc/Nef_2/CGAL/Extended_cartesian.h | 2 +- Nef_2/doc/Nef_2/CGAL/Extended_homogeneous.h | 2 +- .../CGAL/Filtered_extended_homogeneous.h | 2 +- Nef_2/doc/Nef_2/CGAL/Nef_polyhedron_2.h | 6 +-- Nef_2/doc/Nef_2/PackageDescription.txt | 8 ++-- Nef_3/doc/Nef_3/CGAL/Nef_nary_union_3.h | 2 +- Nef_3/doc/Nef_3/CGAL/Nef_polyhedron_3.h | 20 ++++---- Nef_3/doc/Nef_3/PackageDescription.txt | 8 ++-- Nef_S2/doc/Nef_S2/CGAL/Nef_polyhedron_S2.h | 18 ++++---- Nef_S2/doc/Nef_S2/PackageDescription.txt | 6 +-- .../Number_types/CGAL/number_type_config.h | 2 +- .../doc/Number_types/NumberTypeSupport.txt | 2 +- .../doc/Number_types/PackageDescription.txt | 26 +++++------ .../PackageDescription.txt | 10 ++-- .../CGAL/Partition_is_valid_traits_2.h | 2 +- .../doc/Partition_2/CGAL/Partition_traits_2.h | 2 +- .../doc/Partition_2/CGAL/is_y_monotone_2.h | 2 +- .../doc/Partition_2/CGAL/partition_2.h | 8 ++-- .../Partition_2/CGAL/partition_is_valid_2.h | 6 +-- .../doc/Partition_2/PackageDescription.txt | 12 ++--- .../Periodic_2TriangulationTraits_2.h | 2 +- .../PackageDescription.txt | 16 +++---- .../Periodic_3_mesh_3/PackageDescription.txt | 16 +++---- .../PackageDescription.txt | 12 ++--- .../doc/Point_set_2/CGAL/Point_set_2.h | 2 +- .../doc/Point_set_2/PackageDescription.txt | 12 ++--- .../doc/Point_set_3/PackageDescription.txt | 8 ++-- Point_set_3/doc/Point_set_3/Point_set_3.txt | 2 +- Point_set_3/include/CGAL/Point_set_3.h | 4 +- .../NamedParameters.txt | 2 +- .../PackageDescription.txt | 14 +++--- .../Point_set_processing_3.txt | 4 +- .../PackageDescription.txt | 10 ++-- .../include/CGAL/Shape_detection_3.h | 2 +- .../CGAL/Shape_detection_3/Efficient_RANSAC.h | 2 +- .../Efficient_RANSAC_traits.h | 2 +- .../CGAL/Shape_detection_3/Region_growing.h | 2 +- .../Shape_detection_traits.h | 2 +- .../CGAL/Shape_detection_3/property_maps.h | 4 +- .../include/CGAL/regularize_planes.h | 4 +- .../PackageDescription.txt | 6 +-- .../CGAL/Poisson_reconstruction_function.h | 2 +- .../CGAL/poisson_surface_reconstruction.h | 2 +- Polygon/doc/Polygon/PackageDescription.txt | 10 ++-- .../CGAL/General_polygon_with_holes_2.h | 2 +- Polygon/include/CGAL/Polygon_2.h | 2 +- Polygon/include/CGAL/Polygon_with_holes_2.h | 2 +- .../NamedParameters.txt | 2 +- .../PackageDescription.txt | 32 ++++++------- .../CGAL/Polygon_mesh_processing/bbox.h | 10 ++-- .../CGAL/Polygon_mesh_processing/border.h | 2 +- .../CGAL/Polygon_mesh_processing/transform.h | 2 +- .../include/CGAL/Polygon_mesh_slicer.h | 2 +- .../include/CGAL/Side_of_triangle_mesh.h | 2 +- .../include/CGAL/polygon_mesh_processing.h | 2 +- Polyhedron/doc/Polyhedron/CGAL/Polyhedron_3.h | 8 ++-- .../CGAL/Polyhedron_incremental_builder_3.h | 2 +- .../doc/Polyhedron/CGAL/Polyhedron_items_3.h | 2 +- .../Polyhedron/CGAL/Polyhedron_min_items_3.h | 2 +- .../doc/Polyhedron/CGAL/Polyhedron_traits_3.h | 2 +- .../CGAL/Polyhedron_traits_with_normals_3.h | 2 +- .../doc/Polyhedron/PackageDescription.txt | 12 ++--- .../PackageDescription.txt | 12 ++--- .../doc/Polynomial/PackageDescription.txt | 12 ++--- .../CGAL/Polytope_distance_d.h | 2 +- .../CGAL/Polytope_distance_d_traits_2.h | 2 +- .../CGAL/Polytope_distance_d_traits_3.h | 2 +- .../CGAL/Polytope_distance_d_traits_d.h | 2 +- .../doc/Polytope_distance_d/CGAL/Width_3.h | 2 +- .../CGAL/Width_default_traits_3.h | 2 +- .../CGAL/all_furthest_neighbors_2.h | 2 +- .../PackageDescription.txt | 8 ++-- .../PackageDescription.txt | 16 +++---- .../doc/Property_map/PackageDescription.txt | 6 +-- Property_map/include/CGAL/property_map.h | 32 ++++++------- .../doc/QP_solver/PackageDescription.txt | 12 ++--- Ridges_3/doc/Ridges_3/CGAL/Ridges.h | 10 ++-- Ridges_3/doc/Ridges_3/CGAL/Umbilics.h | 6 +-- Ridges_3/doc/Ridges_3/PackageDescription.txt | 8 ++-- .../doc/STL_Extension/CGAL/CC_safe_handle.h | 2 +- .../STL_Extension/CGAL/Compact_container.h | 2 +- .../CGAL/Concurrent_compact_container.h | 2 +- .../doc/STL_Extension/CGAL/Default.h | 2 +- .../doc/STL_Extension/CGAL/In_place_list.h | 2 +- .../doc/STL_Extension/CGAL/Iterator_range.h | 2 +- .../doc/STL_Extension/CGAL/Multiset.h | 2 +- STL_Extension/doc/STL_Extension/CGAL/Object.h | 2 +- .../STL_Extension/CGAL/Spatial_lock_grid_3.h | 2 +- .../doc/STL_Extension/CGAL/algorithm.h | 2 +- STL_Extension/doc/STL_Extension/CGAL/array.h | 2 +- .../doc/STL_Extension/CGAL/function.h | 2 +- .../doc/STL_Extension/CGAL/function_objects.h | 4 +- .../doc/STL_Extension/CGAL/iterator.h | 2 +- STL_Extension/doc/STL_Extension/CGAL/memory.h | 2 +- .../doc/STL_Extension/CGAL/result_of.h | 2 +- STL_Extension/doc/STL_Extension/CGAL/tuple.h | 2 +- .../doc/STL_Extension/PackageDescription.txt | 12 ++--- STL_Extension/include/CGAL/Iterator_range.h | 2 +- .../include/CGAL/value_type_traits.h | 2 +- .../PackageDescription.txt | 10 ++-- .../doc/SearchStructures/CGAL/Tree_base.h | 2 +- .../SearchStructures/PackageDescription.txt | 12 ++--- .../CGAL/Segment_Delaunay_graph_2.h | 2 +- ...Segment_Delaunay_graph_filtered_traits_2.h | 4 +- .../CGAL/Segment_Delaunay_graph_hierarchy_2.h | 2 +- ...t_Delaunay_graph_hierarchy_vertex_base_2.h | 2 +- .../CGAL/Segment_Delaunay_graph_site_2.h | 2 +- .../Segment_Delaunay_graph_storage_site_2.h | 2 +- .../CGAL/Segment_Delaunay_graph_traits_2.h | 4 +- .../Segment_Delaunay_graph_vertex_base_2.h | 2 +- .../PackageDescription.txt | 8 ++-- .../CGAL/Segment_Delaunay_graph_Linf_2.h | 2 +- ...nt_Delaunay_graph_Linf_filtered_traits_2.h | 4 +- .../Segment_Delaunay_graph_Linf_hierarchy_2.h | 2 +- .../Segment_Delaunay_graph_Linf_traits_2.h | 4 +- .../PackageDescription.txt | 8 ++-- .../PackageDescription.txt | 14 +++--- .../doc/Skin_surface_3/CGAL/Skin_surface_3.h | 2 +- .../CGAL/Skin_surface_polyhedral_items_3.h | 2 +- .../CGAL/Skin_surface_traits_3.h | 2 +- .../Skin_surface_3/CGAL/Union_of_balls_3.h | 2 +- .../CGAL/make_skin_surface_mesh_3.h | 2 +- .../Skin_surface_3/CGAL/mesh_skin_surface_3.h | 2 +- .../CGAL/subdivide_skin_surface_mesh_3.h | 2 +- .../doc/Skin_surface_3/PackageDescription.txt | 8 ++-- .../Snap_rounding_2/CGAL/Snap_rounding_2.h | 2 +- .../CGAL/Snap_rounding_traits_2.h | 2 +- .../Snap_rounding_2/PackageDescription.txt | 8 ++-- .../Solver_interface/PackageDescription.txt | 8 ++-- .../doc/Solver_interface/Solver_interface.txt | 4 +- .../include/CGAL/Default_diagonalize_traits.h | 2 +- .../include/CGAL/Diagonalize_traits.h | 2 +- .../include/CGAL/Eigen_diagonalize_traits.h | 2 +- Solver_interface/include/CGAL/Eigen_matrix.h | 6 +-- .../include/CGAL/Eigen_solver_traits.h | 2 +- Solver_interface/include/CGAL/Eigen_svd.h | 2 +- Solver_interface/include/CGAL/Eigen_vector.h | 2 +- Solver_interface/include/CGAL/Lapack_svd.h | 6 +-- .../Spatial_searching/PackageDescription.txt | 20 ++++---- .../Spatial_sorting/PackageDescription.txt | 16 +++---- .../PackageDescription.txt | 14 +++--- .../Stream_lines_2/CGAL/Euler_integrator_2.h | 2 +- .../doc/Stream_lines_2/CGAL/Regular_grid_2.h | 2 +- .../CGAL/Runge_kutta_integrator_2.h | 2 +- .../doc/Stream_lines_2/CGAL/Stream_lines_2.h | 2 +- .../Stream_lines_2/CGAL/Triangular_field_2.h | 2 +- .../doc/Stream_lines_2/PackageDescription.txt | 8 ++-- .../doc/Stream_support/CGAL/IO/Color.h | 2 +- .../Stream_support/CGAL/IO/Istream_iterator.h | 2 +- .../Stream_support/CGAL/IO/Ostream_iterator.h | 2 +- .../Stream_support/CGAL/IO/Verbose_ostream.h | 2 +- .../doc/Stream_support/CGAL/IO/io.h | 28 +++++------ .../doc/Stream_support/PackageDescription.txt | 8 ++-- .../Subdivision_method_3/NamedParameters.txt | 2 +- .../PackageDescription.txt | 10 ++-- .../subdivision_masks_3.h | 8 ++-- .../include/CGAL/subdivision_method_3.h | 2 +- .../PackageDescription.txt | 8 ++-- ...ormation_Eigen_closest_rotation_traits_3.h | 2 +- ...on_Eigen_polar_closest_rotation_traits_3.h | 2 +- .../include/CGAL/Surface_mesh_deformation.h | 4 +- .../PackageDescription.txt | 16 +++---- .../PackageDescription.txt | 8 ++-- .../include/CGAL/mesh_segmentation.h | 8 ++-- .../PackageDescription.txt | 10 ++-- .../include/CGAL/Surface_mesh_shortest_path.h | 2 +- .../Surface_mesh_shortest_path.h | 2 +- .../Edge_collapse_visitor_base.h | 2 +- .../Bounded_normal_change_placement.h | 2 +- .../Edge_collapse/Constrained_placement.h | 2 +- .../Count_ratio_stop_predicate.h | 2 +- .../Edge_collapse/Count_stop_predicate.h | 2 +- .../Policies/Edge_collapse/Edge_length_cost.h | 2 +- .../Edge_length_stop_predicate.h | 2 +- .../Policies/Edge_collapse/Edge_profile.h | 2 +- .../Edge_collapse/LindstromTurk_cost.h | 2 +- .../Edge_collapse/LindstromTurk_placement.h | 2 +- .../Edge_collapse/Midpoint_placement.h | 2 +- .../edge_collapse.h | 2 +- .../NamedParameters.txt | 2 +- .../PackageDescription.txt | 8 ++-- .../PackageDescription.txt | 8 ++-- .../Mean_curvature_flow_skeletonization.h | 2 +- .../extract_mean_curvature_flow_skeleton.h | 2 +- .../doc/Surface_mesher/PackageDescription.txt | 14 +++--- .../CGAL/Surface_sweep_2_algorithms.h | 12 ++--- .../Surface_sweep_2/PackageDescription.txt | 6 +-- .../CGAL/Triangulation_data_structure_2.h | 2 +- .../TDS_2/CGAL/Triangulation_ds_face_base_2.h | 2 +- .../CGAL/Triangulation_ds_vertex_base_2.h | 2 +- TDS_2/doc/TDS_2/PackageDescription.txt | 8 ++-- TDS_3/doc/TDS_3/PackageDescription.txt | 10 ++-- Three/doc/Three/PackageDescription.txt | 6 +-- Three/include/CGAL/Three/Scene_interface.h | 2 +- .../doc/Triangulation/PackageDescription.txt | 14 +++--- .../Triangulation_2/PackageDescription.txt | 20 ++++---- .../Triangulation_3/CGAL/link_to_face_graph.h | 2 +- .../Triangulation_3/PackageDescription.txt | 16 +++---- .../doc/Visibility_2/PackageDescription.txt | 10 ++-- .../CGAL/Identity_policy_2.h | 2 +- .../CGAL/Voronoi_diagram_2.h | 8 ++-- .../Voronoi_diagram_2/PackageDescription.txt | 14 +++--- 402 files changed, 1063 insertions(+), 1063 deletions(-) diff --git a/AABB_tree/doc/AABB_tree/PackageDescription.txt b/AABB_tree/doc/AABB_tree/PackageDescription.txt index e94a561f00a..d629e984b36 100644 --- a/AABB_tree/doc/AABB_tree/PackageDescription.txt +++ b/AABB_tree/doc/AABB_tree/PackageDescription.txt @@ -1,16 +1,16 @@ -/// \defgroup PkgAABB_tree AABB Tree Reference +/// \defgroup PkgAABB_treeRef AABB Tree Reference /// \defgroup PkgAABB_treeConcepts Concepts -/// \ingroup PkgAABB_tree +/// \ingroup PkgAABB_treeRef /*! -\addtogroup PkgAABB_tree +\addtogroup PkgAABB_treeRef \cgalPkgDescriptionBegin{3D Fast Intersection and Distance Computation,PkgAABB_treeSummary} \cgalPkgPicture{aabb-teaser-thumb.png} \cgalPkgSummaryBegin \cgalPkgAuthors{Pierre Alliez, Stéphane Tayeb, Camille Wormser} \cgalPkgDesc{The AABB (axis-aligned bounding box) tree component offers a static data structure and algorithms to perform efficient intersection and distance queries on sets of finite 3D geometric objects.} -\cgalPkgManuals{Chapter_3D_Fast_Intersection_and_Distance_Computation,PkgAABB_tree} +\cgalPkgManuals{Chapter_3D_Fast_Intersection_and_Distance_Computation,PkgAABB_treeRef} \cgalPkgSummaryEnd \cgalPkgShortInfoBegin \cgalPkgSince{3.5} diff --git a/AABB_tree/include/CGAL/AABB_face_graph_triangle_primitive.h b/AABB_tree/include/CGAL/AABB_face_graph_triangle_primitive.h index 83e01c72d6c..c5a2ce6fae2 100644 --- a/AABB_tree/include/CGAL/AABB_face_graph_triangle_primitive.h +++ b/AABB_tree/include/CGAL/AABB_face_graph_triangle_primitive.h @@ -34,7 +34,7 @@ namespace CGAL { /*! - * \ingroup PkgAABB_tree + * \ingroup PkgAABB_treeRef * Primitive type for a facet of a polyhedral surface. * It wraps a handle to a facet of a polyhedron to a 3D triangle. * The polyhedron from which the primitive is built should not be deleted diff --git a/AABB_tree/include/CGAL/AABB_halfedge_graph_segment_primitive.h b/AABB_tree/include/CGAL/AABB_halfedge_graph_segment_primitive.h index 1a0dc4eb616..5f64ce6ea49 100644 --- a/AABB_tree/include/CGAL/AABB_halfedge_graph_segment_primitive.h +++ b/AABB_tree/include/CGAL/AABB_halfedge_graph_segment_primitive.h @@ -42,7 +42,7 @@ namespace CGAL { /*! - * \ingroup PkgAABB_tree + * \ingroup PkgAABB_treeRef * Primitive type for a edge of a polyhedral surface. * It wraps an `edge_descriptor` into a 3D segment. * The class model of `HalfedgeGraph` from which the primitive is built should not be deleted diff --git a/AABB_tree/include/CGAL/AABB_polyhedron_segment_primitive.h b/AABB_tree/include/CGAL/AABB_polyhedron_segment_primitive.h index 85798d83374..dc407931a24 100644 --- a/AABB_tree/include/CGAL/AABB_polyhedron_segment_primitive.h +++ b/AABB_tree/include/CGAL/AABB_polyhedron_segment_primitive.h @@ -40,7 +40,7 @@ namespace CGAL { -/// \addtogroup PkgAABB_tree +/// \addtogroup PkgAABB_treeRef /// @{ /// \deprecated This class is deprecated since \cgal 4.3, the class /// `AABB_halfedge_graph_segment_primitive` should be used instead. diff --git a/AABB_tree/include/CGAL/AABB_polyhedron_triangle_primitive.h b/AABB_tree/include/CGAL/AABB_polyhedron_triangle_primitive.h index 363a718c03f..12c632640f9 100644 --- a/AABB_tree/include/CGAL/AABB_polyhedron_triangle_primitive.h +++ b/AABB_tree/include/CGAL/AABB_polyhedron_triangle_primitive.h @@ -35,7 +35,7 @@ #include namespace CGAL { - /// \ingroup PkgAABB_tree + /// \ingroup PkgAABB_treeRef /// \deprecated This class is deprecated since \cgal 4.3, the class /// `AABB_face_graph_triangle_primitive` should be used instead. /// diff --git a/AABB_tree/include/CGAL/AABB_primitive.h b/AABB_tree/include/CGAL/AABB_primitive.h index 205dad36754..29cb908e32f 100644 --- a/AABB_tree/include/CGAL/AABB_primitive.h +++ b/AABB_tree/include/CGAL/AABB_primitive.h @@ -57,7 +57,7 @@ public: #ifdef DOXYGEN_RUNNING /*! - * \ingroup PkgAABB_tree + * \ingroup PkgAABB_treeRef * Generic primitive type. * The two property maps which are template parameters of the class enable to get the datum and the reference point of * the primitive from the identifier. The last template parameter controls whether the primitive class holds a copy of the datum. diff --git a/AABB_tree/include/CGAL/AABB_segment_primitive.h b/AABB_tree/include/CGAL/AABB_segment_primitive.h index 00618eafd34..2e9e483be53 100644 --- a/AABB_tree/include/CGAL/AABB_segment_primitive.h +++ b/AABB_tree/include/CGAL/AABB_segment_primitive.h @@ -56,7 +56,7 @@ namespace internal { /*! - * \ingroup PkgAABB_tree + * \ingroup PkgAABB_treeRef * Primitive type that uses as identifier an iterator with a 3D segment as `value_type`. * The iterator from which the primitive is built should not be invalided * while the AABB tree holding the primitive is in use. diff --git a/AABB_tree/include/CGAL/AABB_traits.h b/AABB_tree/include/CGAL/AABB_traits.h index 632f2256d4b..26a457c4fda 100644 --- a/AABB_tree/include/CGAL/AABB_traits.h +++ b/AABB_tree/include/CGAL/AABB_traits.h @@ -173,7 +173,7 @@ struct AABB_traits_base_2{ } } //end of namespace internal::AABB_tree -/// \addtogroup PkgAABB_tree +/// \addtogroup PkgAABB_treeRef /// @{ /// This traits class handles any type of 3D geometric diff --git a/AABB_tree/include/CGAL/AABB_tree.h b/AABB_tree/include/CGAL/AABB_tree.h index d4275852147..078f3be02ee 100644 --- a/AABB_tree/include/CGAL/AABB_tree.h +++ b/AABB_tree/include/CGAL/AABB_tree.h @@ -44,7 +44,7 @@ namespace CGAL { -/// \addtogroup PkgAABB_tree +/// \addtogroup PkgAABB_treeRef /// @{ /** diff --git a/AABB_tree/include/CGAL/AABB_triangle_primitive.h b/AABB_tree/include/CGAL/AABB_triangle_primitive.h index 4b2035e00f4..694d937830c 100644 --- a/AABB_tree/include/CGAL/AABB_triangle_primitive.h +++ b/AABB_tree/include/CGAL/AABB_triangle_primitive.h @@ -56,7 +56,7 @@ namespace internal { /*! - * \ingroup PkgAABB_tree + * \ingroup PkgAABB_treeRef * Primitive type that uses as identifier an iterator with a 3D triangle as `value_type`. * The iterator from which the primitive is built should not be invalided * while the AABB tree holding the primitive is in use. diff --git a/AABB_tree/include/CGAL/AABB_triangulation_3_triangle_primitive.h b/AABB_tree/include/CGAL/AABB_triangulation_3_triangle_primitive.h index 96f4b305f28..7a09c780030 100644 --- a/AABB_tree/include/CGAL/AABB_triangulation_3_triangle_primitive.h +++ b/AABB_tree/include/CGAL/AABB_triangulation_3_triangle_primitive.h @@ -31,7 +31,7 @@ #include namespace CGAL { - // \ingroup PkgAABB_tree + // \ingroup PkgAABB_treeRef // Primitive type that wraps a facet handle of a CGAL::Triangulation_3, // which is used as id, and allows the construction of the datum on // the fly. Since only the facet handle is stored in this primitive, diff --git a/Advancing_front_surface_reconstruction/doc/Advancing_front_surface_reconstruction/PackageDescription.txt b/Advancing_front_surface_reconstruction/doc/Advancing_front_surface_reconstruction/PackageDescription.txt index 8e104c34c35..02dd623245b 100644 --- a/Advancing_front_surface_reconstruction/doc/Advancing_front_surface_reconstruction/PackageDescription.txt +++ b/Advancing_front_surface_reconstruction/doc/Advancing_front_surface_reconstruction/PackageDescription.txt @@ -1,7 +1,7 @@ -/// \defgroup PkgAdvancingFrontSurfaceReconstruction Advancing Front Surface Reconstruction Reference +/// \defgroup PkgAdvancingFrontSurfaceReconstructionRef Advancing Front Surface Reconstruction Reference /*! -\addtogroup PkgAdvancingFrontSurfaceReconstruction +\addtogroup PkgAdvancingFrontSurfaceReconstructionRef \cgalPkgDescriptionBegin{Advancing Front Surface Reconstruction,PkgAdvancingFrontSurfaceReconstructionSummary} \cgalPkgPicture{afsr-detail.png} @@ -12,7 +12,7 @@ unorganized point set. Starting from a seed facet, a piecewise linear surface is grown by adding Delaunay triangles one by one. The most plausible triangles are added first, in a way that avoids the appearance of topological singularities. } -\cgalPkgManuals{Chapter_Advancing_Front_Surface_Reconstruction,PkgAdvancingFrontSurfaceReconstruction} +\cgalPkgManuals{Chapter_Advancing_Front_Surface_Reconstruction,PkgAdvancingFrontSurfaceReconstructionRef} \cgalPkgSummaryEnd \cgalPkgShortInfoBegin \cgalPkgSince{4.7} diff --git a/Advancing_front_surface_reconstruction/include/CGAL/Advancing_front_surface_reconstruction.h b/Advancing_front_surface_reconstruction/include/CGAL/Advancing_front_surface_reconstruction.h index 6fc6e33b4d8..f97c3bca853 100644 --- a/Advancing_front_surface_reconstruction/include/CGAL/Advancing_front_surface_reconstruction.h +++ b/Advancing_front_surface_reconstruction/include/CGAL/Advancing_front_surface_reconstruction.h @@ -175,7 +175,7 @@ namespace CGAL { /*! - \ingroup PkgAdvancingFrontSurfaceReconstruction + \ingroup PkgAdvancingFrontSurfaceReconstructionRef The class `Advancing_front_surface_reconstruction` enables advanced users to provide the unstructured point cloud in a 3D Delaunay triangulation. The reconstruction algorithm then marks vertices and faces @@ -2480,7 +2480,7 @@ namespace CGAL { } /*! - \ingroup PkgAdvancingFrontSurfaceReconstruction + \ingroup PkgAdvancingFrontSurfaceReconstructionRef For a sequence of points computes a sequence of index triples describing the faces of the reconstructed surface. @@ -2532,7 +2532,7 @@ namespace CGAL { } /*! - \ingroup PkgAdvancingFrontSurfaceReconstruction + \ingroup PkgAdvancingFrontSurfaceReconstructionRef For a sequence of points computes a sequence of index triples describing the faces of the reconstructed surface. diff --git a/Advancing_front_surface_reconstruction/include/CGAL/Advancing_front_surface_reconstruction_cell_base_3.h b/Advancing_front_surface_reconstruction/include/CGAL/Advancing_front_surface_reconstruction_cell_base_3.h index 99cfa924cdf..eac9e519d77 100644 --- a/Advancing_front_surface_reconstruction/include/CGAL/Advancing_front_surface_reconstruction_cell_base_3.h +++ b/Advancing_front_surface_reconstruction/include/CGAL/Advancing_front_surface_reconstruction_cell_base_3.h @@ -28,7 +28,7 @@ namespace CGAL { /*! - \ingroup PkgAdvancingFrontSurfaceReconstruction + \ingroup PkgAdvancingFrontSurfaceReconstructionRef The class `Advancing_front_surface_reconstruction_cell_base_3` is the default cell type for the class `Advancing_front_surface_reconstruction`. diff --git a/Advancing_front_surface_reconstruction/include/CGAL/Advancing_front_surface_reconstruction_vertex_base_3.h b/Advancing_front_surface_reconstruction/include/CGAL/Advancing_front_surface_reconstruction_vertex_base_3.h index 1d381ccc89c..050e14036fd 100644 --- a/Advancing_front_surface_reconstruction/include/CGAL/Advancing_front_surface_reconstruction_vertex_base_3.h +++ b/Advancing_front_surface_reconstruction/include/CGAL/Advancing_front_surface_reconstruction_vertex_base_3.h @@ -38,7 +38,7 @@ namespace CGAL { template class Advancing_front_surface_reconstruction; /*! - \ingroup PkgAdvancingFrontSurfaceReconstruction + \ingroup PkgAdvancingFrontSurfaceReconstructionRef The class `Advancing_front_surface_reconstruction_vertex_base_3` is the default vertex type for the class `Advancing_front_surface_reconstruction`. diff --git a/Algebraic_foundations/doc/Algebraic_foundations/Algebraic_foundations.txt b/Algebraic_foundations/doc/Algebraic_foundations/Algebraic_foundations.txt index 7e6c7d0039d..6e08371d24e 100644 --- a/Algebraic_foundations/doc/Algebraic_foundations/Algebraic_foundations.txt +++ b/Algebraic_foundations/doc/Algebraic_foundations/Algebraic_foundations.txt @@ -81,7 +81,7 @@ compatibility all functionality is also accessible through global functions defined within namespace `CGAL`, e.g., \link sqrt `CGAL::sqrt(x)` \endlink. This is realized via function templates using the according functor of the traits class. For an overview see -Section \ref PkgAlgebraicFoundations in the reference manual. +Section \ref PkgAlgebraicFoundationsRef in the reference manual. \subsection Algebraic_foundationsTagsinAlgebraicStructure Tags in Algebraic Structure Traits diff --git a/Algebraic_foundations/doc/Algebraic_foundations/CGAL/Algebraic_structure_traits.h b/Algebraic_foundations/doc/Algebraic_foundations/CGAL/Algebraic_structure_traits.h index 38d35c6cf27..fee8e9b1daa 100644 --- a/Algebraic_foundations/doc/Algebraic_foundations/CGAL/Algebraic_structure_traits.h +++ b/Algebraic_foundations/doc/Algebraic_foundations/CGAL/Algebraic_structure_traits.h @@ -1,7 +1,7 @@ namespace CGAL { /*! -\ingroup PkgAlgebraicFoundations +\ingroup PkgAlgebraicFoundationsRef An instance of `Algebraic_structure_traits` is a model of `AlgebraicStructureTraits`, where T is the associated type. @@ -17,7 +17,7 @@ class Algebraic_structure_traits { namespace CGAL { /*! -\ingroup PkgAlgebraicFoundations +\ingroup PkgAlgebraicFoundationsRef Tag indicating that a type is a model of the `EuclideanRing` concept. @@ -34,7 +34,7 @@ struct Euclidean_ring_tag : public Unique_factorization_domain_tag { }; /* end Euclidean_ring_tag */ /*! -\ingroup PkgAlgebraicFoundations +\ingroup PkgAlgebraicFoundationsRef Tag indicating that a type is a model of the `Field` concept. @@ -50,7 +50,7 @@ struct Field_tag : public Integral_domain_tag { }; /* end Field_tag */ /*! -\ingroup PkgAlgebraicFoundations +\ingroup PkgAlgebraicFoundationsRef Tag indicating that a type is a model of the `FieldWithKthRoot` concept. @@ -66,7 +66,7 @@ struct Field_with_kth_root_tag : public Field_with_sqrt_tag { }; /* end Field_with_kth_root_tag */ /*! -\ingroup PkgAlgebraicFoundations +\ingroup PkgAlgebraicFoundationsRef Tag indicating that a type is a model of the `FieldWithRootOf` concept. @@ -82,7 +82,7 @@ struct Field_with_root_of_tag : public Field_with_kth_root_tag { }; /* end Field_with_root_of_tag */ /*! -\ingroup PkgAlgebraicFoundations +\ingroup PkgAlgebraicFoundationsRef Tag indicating that a type is a model of the `FieldWithSqrt` concept. @@ -98,7 +98,7 @@ struct Field_with_sqrt_tag : public Field_tag { }; /* end Field_with_sqrt_tag */ /*! -\ingroup PkgAlgebraicFoundations +\ingroup PkgAlgebraicFoundationsRef Tag indicating that a type is a model of the `IntegralDomain` concept. @@ -114,7 +114,7 @@ struct Integral_domain_tag : public Integral_domain_without_division_tag { }; /* end Integral_domain_tag */ /*! -\ingroup PkgAlgebraicFoundations +\ingroup PkgAlgebraicFoundationsRef Tag indicating that a type is a model of the `IntegralDomainWithoutDivision` concept. @@ -129,7 +129,7 @@ struct Integral_domain_without_division_tag { }; /* end Integral_domain_without_division_tag */ /*! -\ingroup PkgAlgebraicFoundations +\ingroup PkgAlgebraicFoundationsRef Tag indicating that a type is a model of the `UniqueFactorizationDomain` concept. diff --git a/Algebraic_foundations/doc/Algebraic_foundations/CGAL/Coercion_traits.h b/Algebraic_foundations/doc/Algebraic_foundations/CGAL/Coercion_traits.h index 7c1bbf3fbcb..51241f2fec2 100644 --- a/Algebraic_foundations/doc/Algebraic_foundations/CGAL/Coercion_traits.h +++ b/Algebraic_foundations/doc/Algebraic_foundations/CGAL/Coercion_traits.h @@ -2,7 +2,7 @@ namespace CGAL { /*! -\ingroup PkgAlgebraicFoundations +\ingroup PkgAlgebraicFoundationsRef An instance of `Coercion_traits` reflects the type coercion of the types A and B, it is symmetric in the two template arguments. diff --git a/Algebraic_foundations/doc/Algebraic_foundations/CGAL/Fraction_traits.h b/Algebraic_foundations/doc/Algebraic_foundations/CGAL/Fraction_traits.h index 0e2575ec3cf..5888f705f3f 100644 --- a/Algebraic_foundations/doc/Algebraic_foundations/CGAL/Fraction_traits.h +++ b/Algebraic_foundations/doc/Algebraic_foundations/CGAL/Fraction_traits.h @@ -1,7 +1,7 @@ namespace CGAL { /*! -\ingroup PkgAlgebraicFoundations +\ingroup PkgAlgebraicFoundationsRef An instance of `Fraction_traits` is a model of `FractionTraits`, where `T` is the associated type. diff --git a/Algebraic_foundations/doc/Algebraic_foundations/CGAL/Real_embeddable_traits.h b/Algebraic_foundations/doc/Algebraic_foundations/CGAL/Real_embeddable_traits.h index d4f7b67e6b8..fa61be8f8df 100644 --- a/Algebraic_foundations/doc/Algebraic_foundations/CGAL/Real_embeddable_traits.h +++ b/Algebraic_foundations/doc/Algebraic_foundations/CGAL/Real_embeddable_traits.h @@ -2,7 +2,7 @@ namespace CGAL { /*! -\ingroup PkgAlgebraicFoundations +\ingroup PkgAlgebraicFoundationsRef An instance of `Real_embeddable_traits` is a model of `RealEmbeddableTraits`, where T is the associated type. diff --git a/Algebraic_foundations/doc/Algebraic_foundations/CGAL/number_utils.h b/Algebraic_foundations/doc/Algebraic_foundations/CGAL/number_utils.h index 28fe692ade1..153988e6d93 100644 --- a/Algebraic_foundations/doc/Algebraic_foundations/CGAL/number_utils.h +++ b/Algebraic_foundations/doc/Algebraic_foundations/CGAL/number_utils.h @@ -1,7 +1,7 @@ namespace CGAL { /*! -\ingroup PkgAlgebraicFoundations +\ingroup PkgAlgebraicFoundationsRef The template function `abs()` returns the absolute value of a number. @@ -19,7 +19,7 @@ template NT abs(const NT& x); namespace CGAL { /*! -\ingroup PkgAlgebraicFoundations +\ingroup PkgAlgebraicFoundationsRef The template function `compare()` compares the first argument with respect to the second, i.e.\ it returns `CGAL::LARGER` if \f$ x\f$ is larger then \f$ y\f$. @@ -43,7 +43,7 @@ result_type compare(const NT &x, const NT &y); namespace CGAL { /*! -\ingroup PkgAlgebraicFoundations +\ingroup PkgAlgebraicFoundationsRef The function `div()` computes the integral quotient of division with remainder. @@ -74,7 +74,7 @@ div(const NT1& x, const NT2& y); namespace CGAL { /*! -\ingroup PkgAlgebraicFoundations +\ingroup PkgAlgebraicFoundationsRef computes the quotient \f$ q\f$ and remainder \f$ r\f$, such that \f$ x = q*y + r\f$ and \f$ r\f$ minimal with respect to the Euclidean Norm of the @@ -109,7 +109,7 @@ div_mod(const NT1& x, const NT2& y, result_type& q, result_type& r); namespace CGAL { /*! -\ingroup PkgAlgebraicFoundations +\ingroup PkgAlgebraicFoundationsRef The function `gcd()` computes the greatest common divisor of two values. @@ -136,7 +136,7 @@ gcd(const NT1& x, const NT2& y); namespace CGAL { /*! -\ingroup PkgAlgebraicFoundations +\ingroup PkgAlgebraicFoundationsRef The function `integral_division()` (a.k.a.\ exact division or division without remainder) maps ring elements \f$ (x,y)\f$ to ring element \f$ z\f$ such that \f$ x = yz\f$ if such a \f$ z\f$ @@ -167,7 +167,7 @@ integral_division(const NT1& x, const NT2& y); namespace CGAL { /*! -\ingroup PkgAlgebraicFoundations +\ingroup PkgAlgebraicFoundationsRef The function `inverse()` returns the inverse element with respect to multiplication. @@ -187,7 +187,7 @@ template NT inverse(const NT& x); namespace CGAL { /*! -\ingroup PkgAlgebraicFoundations +\ingroup PkgAlgebraicFoundationsRef The template function `is_negative()` determines if a value is negative or not. The function is defined if the argument type @@ -206,7 +206,7 @@ result_type is_negative(const NT& x); namespace CGAL { /*! -\ingroup PkgAlgebraicFoundations +\ingroup PkgAlgebraicFoundationsRef The function `is_one()` determines if a value is equal to 1 or not. @@ -226,7 +226,7 @@ template result_type is_one(const NT& x); namespace CGAL { /*! -\ingroup PkgAlgebraicFoundations +\ingroup PkgAlgebraicFoundationsRef The template function `is_positive()` determines if a value is positive or not. The function is defined if the argument type @@ -245,7 +245,7 @@ result_type is_positive(const NT& x); namespace CGAL { /*! -\ingroup PkgAlgebraicFoundations +\ingroup PkgAlgebraicFoundationsRef An ring element \f$ x\f$ is said to be a square iff there exists a ring element \f$ y\f$ such @@ -264,7 +264,7 @@ The `result_type` is convertible to `bool`. template result_type is_square(const NT& x); /*! -\ingroup PkgAlgebraicFoundations +\ingroup PkgAlgebraicFoundationsRef An ring element \f$ x\f$ is said to be a square iff there exists a ring element \f$ y\f$ such @@ -287,7 +287,7 @@ template result_type is_square(const NT& x, NT& y); namespace CGAL { /*! -\ingroup PkgAlgebraicFoundations +\ingroup PkgAlgebraicFoundationsRef The function `is_zero()` determines if a value is equal to 0 or not. @@ -309,7 +309,7 @@ template result_type is_zero(const NT& x); namespace CGAL { /*! -\ingroup PkgAlgebraicFoundations +\ingroup PkgAlgebraicFoundationsRef The function `kth_root()` returns the k-th root of a value. @@ -327,7 +327,7 @@ template NT kth_root(int k, const NT& x); namespace CGAL { /*! -\ingroup PkgAlgebraicFoundations +\ingroup PkgAlgebraicFoundationsRef The function `mod()` computes the remainder of division with remainder. @@ -357,7 +357,7 @@ mod(const NT1& x, const NT2& y); namespace CGAL { /*! -\ingroup PkgAlgebraicFoundations +\ingroup PkgAlgebraicFoundationsRef returns the k-th real root of the univariate polynomial, which is defined by the iterator range, where begin refers to the constant @@ -383,7 +383,7 @@ root_of(int k, InputIterator begin, InputIterator end); namespace CGAL { /*! -\ingroup PkgAlgebraicFoundations +\ingroup PkgAlgebraicFoundationsRef The template function `sign()` returns the sign of its argument. @@ -403,7 +403,7 @@ template result_type sign(const NT& x); namespace CGAL { /*! -\ingroup PkgAlgebraicFoundations +\ingroup PkgAlgebraicFoundationsRef The function `simplify()` may simplify a given object. @@ -421,7 +421,7 @@ template void simplify(const NT& x); namespace CGAL { /*! -\ingroup PkgAlgebraicFoundations +\ingroup PkgAlgebraicFoundationsRef The function `sqrt()` returns the square root of a value. @@ -439,7 +439,7 @@ template NT sqrt(const NT& x); namespace CGAL { /*! -\ingroup PkgAlgebraicFoundations +\ingroup PkgAlgebraicFoundationsRef The function `square()` returns the square of a number. @@ -457,7 +457,7 @@ template NT square(const NT& x); namespace CGAL { /*! -\ingroup PkgAlgebraicFoundations +\ingroup PkgAlgebraicFoundationsRef The template function `to_double()` returns a double approximation of a number. Note that in general, the value returned is not guaranteed to be the same @@ -482,7 +482,7 @@ template double to_double(const NT& x); namespace CGAL { /*! -\ingroup PkgAlgebraicFoundations +\ingroup PkgAlgebraicFoundationsRef The template function `to_interval()` computes for a given real embeddable number \f$ x\f$ a double interval containing \f$ x\f$. @@ -502,7 +502,7 @@ std::pair to_interval(const NT& x); namespace CGAL { /*! -\ingroup PkgAlgebraicFoundations +\ingroup PkgAlgebraicFoundationsRef The function `unit_part()` computes the unit part of a given ring element. diff --git a/Algebraic_foundations/doc/Algebraic_foundations/PackageDescription.txt b/Algebraic_foundations/doc/Algebraic_foundations/PackageDescription.txt index 9a5d49ffebf..90344ec0532 100644 --- a/Algebraic_foundations/doc/Algebraic_foundations/PackageDescription.txt +++ b/Algebraic_foundations/doc/Algebraic_foundations/PackageDescription.txt @@ -1,10 +1,10 @@ -/// \defgroup PkgAlgebraicFoundations Algebraic Foundations Reference +/// \defgroup PkgAlgebraicFoundationsRef Algebraic Foundations Reference /// \defgroup PkgAlgebraicFoundationsAlgebraicStructuresConcepts Concepts -/// \ingroup PkgAlgebraicFoundations +/// \ingroup PkgAlgebraicFoundationsRef /*! -\addtogroup PkgAlgebraicFoundations +\addtogroup PkgAlgebraicFoundationsRef \todo check generated documentation \cgalPkgDescriptionBegin{Algebraic Foundations,PkgAlgebraicFoundationsSummary} @@ -12,7 +12,7 @@ \cgalPkgSummaryBegin \cgalPkgAuthor{Michael Hemmer} \cgalPkgDesc{This package defines what algebra means for \cgal, in terms of concepts, classes and functions. The main features are: (i) explicit concepts for interoperability of types (ii) separation between algebraic types (not necessarily embeddable into the reals), and number types (embeddable into the reals).} -\cgalPkgManuals{Chapter_Algebraic_Foundations,PkgAlgebraicFoundations} +\cgalPkgManuals{Chapter_Algebraic_Foundations,PkgAlgebraicFoundationsRef} \cgalPkgSummaryEnd \cgalPkgShortInfoBegin \cgalPkgSince{3.3} diff --git a/Algebraic_kernel_d/doc/Algebraic_kernel_d/PackageDescription.txt b/Algebraic_kernel_d/doc/Algebraic_kernel_d/PackageDescription.txt index c47391fc374..026e6256c10 100644 --- a/Algebraic_kernel_d/doc/Algebraic_kernel_d/PackageDescription.txt +++ b/Algebraic_kernel_d/doc/Algebraic_kernel_d/PackageDescription.txt @@ -1,7 +1,7 @@ -/// \defgroup PkgAlgebraicKerneld Algebraic Kernel Reference +/// \defgroup PkgAlgebraicKerneldRef Algebraic Kernel Reference /// \defgroup PkgAlgebraicKerneldConcepts Concepts -/// \ingroup PkgAlgebraicKerneld +/// \ingroup PkgAlgebraicKerneldRef /// \defgroup PkgAlgebraicKerneldConceptsUni Univariate Algebraic Kernel /// \ingroup PkgAlgebraicKerneldConcepts @@ -11,18 +11,18 @@ /// \defgroup PkgAlgebraicKerneldModels Models -/// \ingroup PkgAlgebraicKerneld +/// \ingroup PkgAlgebraicKerneldRef /*! -\addtogroup PkgAlgebraicKerneld +\addtogroup PkgAlgebraicKerneldRef \todo check generated documentation \cgalPkgDescriptionBegin{Algebraic Kernel,PkgAlgebraicKerneldSummary} \cgalPkgPicture{Algebraic_kernel_d.png} \cgalPkgSummaryBegin \cgalPkgAuthors{Eric Berberich, Michael Hemmer, Michael Kerber, Sylvain Lazard, Luis Peñaranda, and Monique Teillaud} \cgalPkgDesc{Real solving of polynomials is a fundamental problem with a wide application range. This package is targeted to provide black-box implementations of state-of-the-art algorithms to determine, compare and approximate real roots of univariate polynomials and bivariate polynomial systems. Such a black-box is called an *Algebraic %Kernel*. So far the package only provides models for the univariate kernel. Nevertheless, it already defines concepts for the bivariate kernel, since this settles the interface for upcoming implementations.} -\cgalPkgManuals{Chapter_Algebraic_Kernel,PkgAlgebraicKerneld} +\cgalPkgManuals{Chapter_Algebraic_Kernel,PkgAlgebraicKerneldRef} \cgalPkgSummaryEnd \cgalPkgShortInfoBegin \cgalPkgSince{3.6} diff --git a/Alpha_shapes_2/doc/Alpha_shapes_2/CGAL/Alpha_shape_2.h b/Alpha_shapes_2/doc/Alpha_shapes_2/CGAL/Alpha_shape_2.h index fd3f480a7fb..2a36d775be3 100644 --- a/Alpha_shapes_2/doc/Alpha_shapes_2/CGAL/Alpha_shape_2.h +++ b/Alpha_shapes_2/doc/Alpha_shapes_2/CGAL/Alpha_shape_2.h @@ -2,7 +2,7 @@ namespace CGAL { /*! -\ingroup PkgAlphaShape2 +\ingroup PkgAlphaShape2Ref The class `Alpha_shape_2` represents the family of \f$ \alpha\f$-shapes of points in a plane for all positive diff --git a/Alpha_shapes_2/doc/Alpha_shapes_2/CGAL/Alpha_shape_face_base_2.h b/Alpha_shapes_2/doc/Alpha_shapes_2/CGAL/Alpha_shape_face_base_2.h index b6a5a330ae5..8c546ceaf93 100644 --- a/Alpha_shapes_2/doc/Alpha_shapes_2/CGAL/Alpha_shape_face_base_2.h +++ b/Alpha_shapes_2/doc/Alpha_shapes_2/CGAL/Alpha_shape_face_base_2.h @@ -2,7 +2,7 @@ namespace CGAL { /*! -\ingroup PkgAlphaShape2 +\ingroup PkgAlphaShape2Ref The class `Alpha_shape_face_base_2` is the default model for the concept `AlphaShapeFace_2`. diff --git a/Alpha_shapes_2/doc/Alpha_shapes_2/CGAL/Alpha_shape_vertex_base_2.h b/Alpha_shapes_2/doc/Alpha_shapes_2/CGAL/Alpha_shape_vertex_base_2.h index f20b2dfe563..7d71cdd8e7c 100644 --- a/Alpha_shapes_2/doc/Alpha_shapes_2/CGAL/Alpha_shape_vertex_base_2.h +++ b/Alpha_shapes_2/doc/Alpha_shapes_2/CGAL/Alpha_shape_vertex_base_2.h @@ -2,7 +2,7 @@ namespace CGAL { /*! -\ingroup PkgAlphaShape2 +\ingroup PkgAlphaShape2Ref The class `Alpha_shape_vertex_base_2` is the default model for the concept `AlphaShapeVertex_2`. diff --git a/Alpha_shapes_2/doc/Alpha_shapes_2/CGAL/Weighted_alpha_shape_euclidean_traits_2.h b/Alpha_shapes_2/doc/Alpha_shapes_2/CGAL/Weighted_alpha_shape_euclidean_traits_2.h index 93852d99a12..b7952e42f93 100644 --- a/Alpha_shapes_2/doc/Alpha_shapes_2/CGAL/Weighted_alpha_shape_euclidean_traits_2.h +++ b/Alpha_shapes_2/doc/Alpha_shapes_2/CGAL/Weighted_alpha_shape_euclidean_traits_2.h @@ -2,7 +2,7 @@ namespace CGAL { /*! -\ingroup PkgAlphaShape2 +\ingroup PkgAlphaShape2Ref \deprecated The class is deprecated since \cgal 4.10, as the weighted point and the function objects for weighted points are part of the concept `Kernel`. The class is kept for backward diff --git a/Alpha_shapes_2/doc/Alpha_shapes_2/PackageDescription.txt b/Alpha_shapes_2/doc/Alpha_shapes_2/PackageDescription.txt index 89f592fe677..1d563f2db90 100644 --- a/Alpha_shapes_2/doc/Alpha_shapes_2/PackageDescription.txt +++ b/Alpha_shapes_2/doc/Alpha_shapes_2/PackageDescription.txt @@ -1,16 +1,16 @@ -/// \defgroup PkgAlphaShape2 2D Alpha Shapes Reference +/// \defgroup PkgAlphaShape2Ref 2D Alpha Shapes Reference /// \defgroup PkgAlphaShape2Concepts Concepts -/// \ingroup PkgAlphaShape2 +/// \ingroup PkgAlphaShape2Ref /*! -\addtogroup PkgAlphaShape2 +\addtogroup PkgAlphaShape2Ref \cgalPkgDescriptionBegin{2D Alpha Shapes,PkgAlphaShape2Summary} \cgalPkgPicture{alpha-detail.png} \cgalPkgSummaryBegin \cgalPkgAuthors{Tran Kai Frank Da} \cgalPkgDesc{This package offers a data structure encoding the whole family of alpha-complexes related to a given 2D Delaunay or regular triangulation. In particular, the data structure allows to retrieve the alpha-complex for any alpha value, the whole spectrum of critical alpha values and a filtration on the triangulation faces (this filtration is based on the first alpha value for which each face is included on the alpha-complex).} -\cgalPkgManuals{Chapter_2D_Alpha_Shapes,PkgAlphaShape2} +\cgalPkgManuals{Chapter_2D_Alpha_Shapes,PkgAlphaShape2Ref} \cgalPkgSummaryEnd \cgalPkgShortInfoBegin \cgalPkgSince{2.1} diff --git a/Alpha_shapes_3/doc/Alpha_shapes_3/CGAL/Alpha_shape_3.h b/Alpha_shapes_3/doc/Alpha_shapes_3/CGAL/Alpha_shape_3.h index 52f081ba007..e1e14111ed0 100644 --- a/Alpha_shapes_3/doc/Alpha_shapes_3/CGAL/Alpha_shape_3.h +++ b/Alpha_shapes_3/doc/Alpha_shapes_3/CGAL/Alpha_shape_3.h @@ -2,7 +2,7 @@ namespace CGAL { /*! -\ingroup PkgAlphaShapes3 +\ingroup PkgAlphaShapes3Ref The class `Alpha_shape_3` represents the family of alpha shapes of points in the 3D space for all real diff --git a/Alpha_shapes_3/doc/Alpha_shapes_3/CGAL/Alpha_shape_cell_base_3.h b/Alpha_shapes_3/doc/Alpha_shapes_3/CGAL/Alpha_shape_cell_base_3.h index f733d1a9a8c..b57d44fe618 100644 --- a/Alpha_shapes_3/doc/Alpha_shapes_3/CGAL/Alpha_shape_cell_base_3.h +++ b/Alpha_shapes_3/doc/Alpha_shapes_3/CGAL/Alpha_shape_cell_base_3.h @@ -2,7 +2,7 @@ namespace CGAL { /*! -\ingroup PkgAlphaShapes3 +\ingroup PkgAlphaShapes3Ref The class `Alpha_shape_cell_base_3` is the default model for the concept `AlphaShapeCell_3`. @@ -37,7 +37,7 @@ public: namespace CGAL { /*! -\ingroup PkgAlphaShapes3 +\ingroup PkgAlphaShapes3Ref The class `Alpha_status` is a small data structure to store the critical alpha values of faces of an alpha shape. diff --git a/Alpha_shapes_3/doc/Alpha_shapes_3/CGAL/Alpha_shape_vertex_base_3.h b/Alpha_shapes_3/doc/Alpha_shapes_3/CGAL/Alpha_shape_vertex_base_3.h index 48a900c3234..146a941e218 100644 --- a/Alpha_shapes_3/doc/Alpha_shapes_3/CGAL/Alpha_shape_vertex_base_3.h +++ b/Alpha_shapes_3/doc/Alpha_shapes_3/CGAL/Alpha_shape_vertex_base_3.h @@ -2,7 +2,7 @@ namespace CGAL { /*! -\ingroup PkgAlphaShapes3 +\ingroup PkgAlphaShapes3Ref The class `Alpha_shape_vertex_base_3` is the default model for the concept `AlphaShapeVertex_3`. diff --git a/Alpha_shapes_3/doc/Alpha_shapes_3/CGAL/Fixed_alpha_shape_3.h b/Alpha_shapes_3/doc/Alpha_shapes_3/CGAL/Fixed_alpha_shape_3.h index 71b7394b4ef..d7bad466690 100644 --- a/Alpha_shapes_3/doc/Alpha_shapes_3/CGAL/Fixed_alpha_shape_3.h +++ b/Alpha_shapes_3/doc/Alpha_shapes_3/CGAL/Fixed_alpha_shape_3.h @@ -2,7 +2,7 @@ namespace CGAL { /*! -\ingroup PkgAlphaShapes3 +\ingroup PkgAlphaShapes3Ref The class `Fixed_alpha_shape_3` represents one (fixed) alpha shape of points in the 3D space for a real diff --git a/Alpha_shapes_3/doc/Alpha_shapes_3/CGAL/Fixed_alpha_shape_cell_base_3.h b/Alpha_shapes_3/doc/Alpha_shapes_3/CGAL/Fixed_alpha_shape_cell_base_3.h index 776e787b20c..ab50625bfd5 100644 --- a/Alpha_shapes_3/doc/Alpha_shapes_3/CGAL/Fixed_alpha_shape_cell_base_3.h +++ b/Alpha_shapes_3/doc/Alpha_shapes_3/CGAL/Fixed_alpha_shape_cell_base_3.h @@ -2,7 +2,7 @@ namespace CGAL { /*! -\ingroup PkgAlphaShapes3 +\ingroup PkgAlphaShapes3Ref The class `Fixed_alpha_shape_cell_base_3` is the default model for the concept `FixedAlphaShapeCell_3`. diff --git a/Alpha_shapes_3/doc/Alpha_shapes_3/CGAL/Fixed_alpha_shape_vertex_base_3.h b/Alpha_shapes_3/doc/Alpha_shapes_3/CGAL/Fixed_alpha_shape_vertex_base_3.h index d512a99e4a0..5c132505980 100644 --- a/Alpha_shapes_3/doc/Alpha_shapes_3/CGAL/Fixed_alpha_shape_vertex_base_3.h +++ b/Alpha_shapes_3/doc/Alpha_shapes_3/CGAL/Fixed_alpha_shape_vertex_base_3.h @@ -2,7 +2,7 @@ namespace CGAL { /*! -\ingroup PkgAlphaShapes3 +\ingroup PkgAlphaShapes3Ref The class `Fixed_alpha_shape_vertex_base_3` is the default model for the concept `FixedAlphaShapeVertex_3`. diff --git a/Alpha_shapes_3/doc/Alpha_shapes_3/PackageDescription.txt b/Alpha_shapes_3/doc/Alpha_shapes_3/PackageDescription.txt index 279faf91035..7ddf096a7ad 100644 --- a/Alpha_shapes_3/doc/Alpha_shapes_3/PackageDescription.txt +++ b/Alpha_shapes_3/doc/Alpha_shapes_3/PackageDescription.txt @@ -1,14 +1,14 @@ -/// \defgroup PkgAlphaShapes3 3D Alpha Shapes Reference +/// \defgroup PkgAlphaShapes3Ref 3D Alpha Shapes Reference /// \defgroup PkgAlphaShapes3Concepts Concepts -/// \ingroup PkgAlphaShapes3 +/// \ingroup PkgAlphaShapes3Ref /*! -\addtogroup PkgAlphaShapes3 +\addtogroup PkgAlphaShapes3Ref \cgalPkgDescriptionBegin{3D Alpha Shapes,PkgAlphaShapes3Summary} \cgalPkgPicture{alpha_shapes_3_small.png} \cgalPkgSummaryBegin \cgalPkgAuthors{Tran Kai Frank Da, Sébastien Loriot, and Mariette Yvinec} \cgalPkgDesc{This package offers a data structure encoding either one alpha-complex or the whole family of alpha-complexes related to a given 3D Delaunay or regular triangulation. In the latter case, the data structure allows to retrieve the alpha-complex for any alpha value, the whole spectrum of critical alpha values and a filtration on the triangulation faces (this filtration is based on the first alpha value for which each face is included on the alpha-complex). } -\cgalPkgManuals{Chapter_3D_Alpha_Shapes,PkgAlphaShapes3} +\cgalPkgManuals{Chapter_3D_Alpha_Shapes,PkgAlphaShapes3Ref} \cgalPkgSummaryEnd \cgalPkgShortInfoBegin \cgalPkgSince{2.3} diff --git a/Apollonius_graph_2/doc/Apollonius_graph_2/CGAL/Apollonius_graph_2.h b/Apollonius_graph_2/doc/Apollonius_graph_2/CGAL/Apollonius_graph_2.h index 27bb8401c69..6716e9095da 100644 --- a/Apollonius_graph_2/doc/Apollonius_graph_2/CGAL/Apollonius_graph_2.h +++ b/Apollonius_graph_2/doc/Apollonius_graph_2/CGAL/Apollonius_graph_2.h @@ -2,7 +2,7 @@ namespace CGAL { /*! -\ingroup PkgApolloniusGraph2 +\ingroup PkgApolloniusGraph2Ref The class `Apollonius_graph_2` represents the Apollonius graph. It supports insertions and deletions of sites. diff --git a/Apollonius_graph_2/doc/Apollonius_graph_2/CGAL/Apollonius_graph_filtered_traits_2.h b/Apollonius_graph_2/doc/Apollonius_graph_2/CGAL/Apollonius_graph_filtered_traits_2.h index 8f972d24d33..a1b4a8003d5 100644 --- a/Apollonius_graph_2/doc/Apollonius_graph_2/CGAL/Apollonius_graph_filtered_traits_2.h +++ b/Apollonius_graph_2/doc/Apollonius_graph_2/CGAL/Apollonius_graph_filtered_traits_2.h @@ -2,7 +2,7 @@ namespace CGAL { /*! -\ingroup PkgApolloniusGraph2 +\ingroup PkgApolloniusGraph2Ref The class `Apollonius_graph_filtered_traits_2` provides a model for the `ApolloniusGraphTraits_2` concept. diff --git a/Apollonius_graph_2/doc/Apollonius_graph_2/CGAL/Apollonius_graph_hierarchy_2.h b/Apollonius_graph_2/doc/Apollonius_graph_2/CGAL/Apollonius_graph_hierarchy_2.h index 863167f6e3b..6456ef59549 100644 --- a/Apollonius_graph_2/doc/Apollonius_graph_2/CGAL/Apollonius_graph_hierarchy_2.h +++ b/Apollonius_graph_2/doc/Apollonius_graph_2/CGAL/Apollonius_graph_hierarchy_2.h @@ -2,7 +2,7 @@ namespace CGAL { /*! -\ingroup PkgApolloniusGraph2 +\ingroup PkgApolloniusGraph2Ref We provide an alternative to the class `Apollonius_graph_2` for the dynamic diff --git a/Apollonius_graph_2/doc/Apollonius_graph_2/CGAL/Apollonius_graph_hierarchy_vertex_base_2.h b/Apollonius_graph_2/doc/Apollonius_graph_2/CGAL/Apollonius_graph_hierarchy_vertex_base_2.h index d04be3c9250..5dd5bf06793 100644 --- a/Apollonius_graph_2/doc/Apollonius_graph_2/CGAL/Apollonius_graph_hierarchy_vertex_base_2.h +++ b/Apollonius_graph_2/doc/Apollonius_graph_2/CGAL/Apollonius_graph_hierarchy_vertex_base_2.h @@ -2,7 +2,7 @@ namespace CGAL { /*! -\ingroup PkgApolloniusGraph2 +\ingroup PkgApolloniusGraph2Ref The class `Apollonius_graph_hierarchy_vertex_base_2` provides a model for the `ApolloniusGraphHierarchyVertexBase_2` concept, which is the diff --git a/Apollonius_graph_2/doc/Apollonius_graph_2/CGAL/Apollonius_graph_traits_2.h b/Apollonius_graph_2/doc/Apollonius_graph_2/CGAL/Apollonius_graph_traits_2.h index bdd1cc2b503..6f3d11a7517 100644 --- a/Apollonius_graph_2/doc/Apollonius_graph_2/CGAL/Apollonius_graph_traits_2.h +++ b/Apollonius_graph_2/doc/Apollonius_graph_2/CGAL/Apollonius_graph_traits_2.h @@ -2,7 +2,7 @@ namespace CGAL { /*! -\ingroup PkgApolloniusGraph2 +\ingroup PkgApolloniusGraph2Ref The class `Apollonius_graph_traits_2` provides a model for the `ApolloniusGraphTraits_2` concept. diff --git a/Apollonius_graph_2/doc/Apollonius_graph_2/CGAL/Apollonius_graph_vertex_base_2.h b/Apollonius_graph_2/doc/Apollonius_graph_2/CGAL/Apollonius_graph_vertex_base_2.h index a1ab5ac7b74..c86d80b0b1a 100644 --- a/Apollonius_graph_2/doc/Apollonius_graph_2/CGAL/Apollonius_graph_vertex_base_2.h +++ b/Apollonius_graph_2/doc/Apollonius_graph_2/CGAL/Apollonius_graph_vertex_base_2.h @@ -2,7 +2,7 @@ namespace CGAL { /*! -\ingroup PkgApolloniusGraph2 +\ingroup PkgApolloniusGraph2Ref The class `Apollonius_graph_vertex_base_2` provides a model for the `ApolloniusGraphVertexBase_2` concept which is the vertex base diff --git a/Apollonius_graph_2/doc/Apollonius_graph_2/CGAL/Apollonius_site_2.h b/Apollonius_graph_2/doc/Apollonius_graph_2/CGAL/Apollonius_site_2.h index fe4ddc0de0d..a77be4d6fe1 100644 --- a/Apollonius_graph_2/doc/Apollonius_graph_2/CGAL/Apollonius_site_2.h +++ b/Apollonius_graph_2/doc/Apollonius_graph_2/CGAL/Apollonius_site_2.h @@ -2,7 +2,7 @@ namespace CGAL { /*! -\ingroup PkgApolloniusGraph2 +\ingroup PkgApolloniusGraph2Ref The class `Apollonius_site_2` is a model for the concept `ApolloniusSite_2`. It is parametrized by a template parameter diff --git a/Apollonius_graph_2/doc/Apollonius_graph_2/PackageDescription.txt b/Apollonius_graph_2/doc/Apollonius_graph_2/PackageDescription.txt index a8b8e8c267c..caa9d9b5f44 100644 --- a/Apollonius_graph_2/doc/Apollonius_graph_2/PackageDescription.txt +++ b/Apollonius_graph_2/doc/Apollonius_graph_2/PackageDescription.txt @@ -1,15 +1,15 @@ -/// \defgroup PkgApolloniusGraph2 2D Apollonius Graphs (Delaunay Graphs of Disks) Reference +/// \defgroup PkgApolloniusGraph2Ref 2D Apollonius Graphs (Delaunay Graphs of Disks) Reference /// \defgroup PkgApolloniusGraph2Concepts Concepts -/// \ingroup PkgApolloniusGraph2 +/// \ingroup PkgApolloniusGraph2Ref /*! -\addtogroup PkgApolloniusGraph2 +\addtogroup PkgApolloniusGraph2Ref \todo check generated documentation \cgalPkgDescriptionBegin{2D Apollonius Graphs (Delaunay Graphs of Disks),PkgApolloniusGraph2Summary} \cgalPkgPicture{CircleVoronoi.png} \cgalPkgSummaryBegin \cgalPkgAuthors{Menelaos Karavelas and Mariette Yvinec} \cgalPkgDesc{Algorithms for computing the Apollonius graph in two dimensions. The Apollonius graph is the dual of the Apollonius diagram, also known as the additively weighted Voronoi diagram. The latter can be thought of as the Voronoi diagram of a set of disks under the Euclidean metric, and it is a generalization of the standard Voronoi diagram for points. The algorithms provided are dynamic.} -\cgalPkgManuals{Chapter_2D_Apollonius_Graphs,PkgApolloniusGraph2} +\cgalPkgManuals{Chapter_2D_Apollonius_Graphs,PkgApolloniusGraph2Ref} \cgalPkgSummaryEnd \cgalPkgShortInfoBegin \cgalPkgSince{3.0} diff --git a/Arrangement_on_surface_2/doc/Arrangement_on_surface_2/CGAL/Arr_accessor.h b/Arrangement_on_surface_2/doc/Arrangement_on_surface_2/CGAL/Arr_accessor.h index 68be885d043..70802debe79 100644 --- a/Arrangement_on_surface_2/doc/Arrangement_on_surface_2/CGAL/Arr_accessor.h +++ b/Arrangement_on_surface_2/doc/Arrangement_on_surface_2/CGAL/Arr_accessor.h @@ -2,7 +2,7 @@ namespace CGAL { /*! -\ingroup PkgArrangement2 +\ingroup PkgArrangement2Ref \anchor arr_refarr_access diff --git a/Arrangement_on_surface_2/doc/Arrangement_on_surface_2/CGAL/Arr_face_index_map.h b/Arrangement_on_surface_2/doc/Arrangement_on_surface_2/CGAL/Arr_face_index_map.h index c816ecd0a52..c451dd765b4 100644 --- a/Arrangement_on_surface_2/doc/Arrangement_on_surface_2/CGAL/Arr_face_index_map.h +++ b/Arrangement_on_surface_2/doc/Arrangement_on_surface_2/CGAL/Arr_face_index_map.h @@ -1,7 +1,7 @@ namespace CGAL { /*! -\ingroup PkgArrangement2 +\ingroup PkgArrangement2Ref `Arr_face_index_map` maintains a mapping of face handles of an attached arrangement object to indices (of type `unsigned int`). diff --git a/Arrangement_on_surface_2/doc/Arrangement_on_surface_2/CGAL/Arr_observer.h b/Arrangement_on_surface_2/doc/Arrangement_on_surface_2/CGAL/Arr_observer.h index 20c9cfbecb7..cdad68c7085 100644 --- a/Arrangement_on_surface_2/doc/Arrangement_on_surface_2/CGAL/Arr_observer.h +++ b/Arrangement_on_surface_2/doc/Arrangement_on_surface_2/CGAL/Arr_observer.h @@ -2,7 +2,7 @@ namespace CGAL { /*! -\ingroup PkgArrangement2 +\ingroup PkgArrangement2Ref \anchor arr_refarr_obs diff --git a/Arrangement_on_surface_2/doc/Arrangement_on_surface_2/CGAL/Arr_vertex_index_map.h b/Arrangement_on_surface_2/doc/Arrangement_on_surface_2/CGAL/Arr_vertex_index_map.h index c00dd12499a..7abba736a92 100644 --- a/Arrangement_on_surface_2/doc/Arrangement_on_surface_2/CGAL/Arr_vertex_index_map.h +++ b/Arrangement_on_surface_2/doc/Arrangement_on_surface_2/CGAL/Arr_vertex_index_map.h @@ -1,7 +1,7 @@ namespace CGAL { /*! -\ingroup PkgArrangement2 +\ingroup PkgArrangement2Ref `Arr_vertex_index_map` maintains a mapping of vertex handles of an attached arrangement object to indices (of type `unsigned int`). diff --git a/Arrangement_on_surface_2/doc/Arrangement_on_surface_2/CGAL/Arrangement_2.h b/Arrangement_on_surface_2/doc/Arrangement_on_surface_2/CGAL/Arrangement_2.h index 277ddf71eca..dd84f261e99 100644 --- a/Arrangement_on_surface_2/doc/Arrangement_on_surface_2/CGAL/Arrangement_2.h +++ b/Arrangement_on_surface_2/doc/Arrangement_on_surface_2/CGAL/Arrangement_2.h @@ -1,7 +1,7 @@ namespace CGAL { /*! - \ingroup PkgArrangement2 + \ingroup PkgArrangement2Ref \anchor arr_refarr diff --git a/Arrangement_on_surface_2/doc/Arrangement_on_surface_2/CGAL/Arrangement_with_history_2.h b/Arrangement_on_surface_2/doc/Arrangement_on_surface_2/CGAL/Arrangement_with_history_2.h index 7afef234acc..7d89aab47b0 100644 --- a/Arrangement_on_surface_2/doc/Arrangement_on_surface_2/CGAL/Arrangement_with_history_2.h +++ b/Arrangement_on_surface_2/doc/Arrangement_on_surface_2/CGAL/Arrangement_with_history_2.h @@ -2,7 +2,7 @@ namespace CGAL { /*! -\ingroup PkgArrangement2 +\ingroup PkgArrangement2Ref \anchor arr_refarr_with_hist diff --git a/Arrangement_on_surface_2/doc/Arrangement_on_surface_2/PackageDescription.txt b/Arrangement_on_surface_2/doc/Arrangement_on_surface_2/PackageDescription.txt index 844048f8e23..37a821ce963 100644 --- a/Arrangement_on_surface_2/doc/Arrangement_on_surface_2/PackageDescription.txt +++ b/Arrangement_on_surface_2/doc/Arrangement_on_surface_2/PackageDescription.txt @@ -1,7 +1,7 @@ -/// \defgroup PkgArrangement2 2D Arrangement Reference +/// \defgroup PkgArrangement2Ref 2D Arrangement Reference /// \defgroup PkgArrangement2Concepts Concepts -/// \ingroup PkgArrangement2 +/// \ingroup PkgArrangement2Ref /// \cgalConceptNamespace /// The namespace containing concepts specific to Arrangements. @@ -20,13 +20,13 @@ namespace ArrTraits {} /// \ingroup PkgArrangement2Concepts /// \defgroup PkgArrangement2TraitsClasses Traits Classes -/// \ingroup PkgArrangement2 +/// \ingroup PkgArrangement2Ref /// \defgroup PkgArrangement2DCEL DCEL -/// \ingroup PkgArrangement2 +/// \ingroup PkgArrangement2Ref /// \defgroup PkgArrangement2IO I/O -/// \ingroup PkgArrangement2 +/// \ingroup PkgArrangement2Ref /// \defgroup PkgArrangement2op_left_shift operator<< /// \ingroup PkgArrangement2IO @@ -35,35 +35,35 @@ namespace ArrTraits {} /// \ingroup PkgArrangement2IO /// \defgroup PkgArrangement2PointLocation Point Location -/// \ingroup PkgArrangement2 +/// \ingroup PkgArrangement2Ref /// \defgroup PkgArrangement2Overlay Overlay -/// \ingroup PkgArrangement2 +/// \ingroup PkgArrangement2Ref /// \defgroup PkgArrangement2Funcs Free Functions -/// \ingroup PkgArrangement2 +/// \ingroup PkgArrangement2Ref /// \defgroup PkgArrangement2Insert CGAL::insert() /// \ingroup PkgArrangement2Funcs /// \defgroup PkgArrangement2Tags Tags -/// \ingroup PkgArrangement2 +/// \ingroup PkgArrangement2Ref /// \defgroup PkgArrangement2Macros Macros -/// \ingroup PkgArrangement2 +/// \ingroup PkgArrangement2Ref /// \defgroup PkgArrangement2Enums Enumerations -/// \ingroup PkgArrangement2 +/// \ingroup PkgArrangement2Ref /*! -\addtogroup PkgArrangement2 +\addtogroup PkgArrangement2Ref \todo check generated documentation \cgalPkgDescriptionBegin{2D Arrangements,PkgArrangement2Summary} \cgalPkgPicture{Arrangement_2.png} \cgalPkgSummaryBegin \cgalPkgAuthors{Ron Wein, Eric Berberich, Efi Fogel, Dan Halperin, Michael Hemmer, Oren Salzman, and Baruch Zukerman} \cgalPkgDesc{This package can be used to construct, maintain, alter, and display arrangements in the plane. Once an arrangement is constructed, the package can be used to obtain results of various queries on the arrangement, such as point location. The package also includes generic implementations of two algorithmic frameworks, that are, computing the zone of an arrangement, and line-sweeping the plane, the arrangements is embedded on. These frameworks are used in turn in the implementations of other operations on arrangements. Computing the overlay of two arrangements, for example, is based on the sweep-line framework. Arrangements and arrangement components can also be extended to store additional data. An important extension stores the construction history of the arrangement, such that it is possible to obtain the originating curve of an arrangement subcurve.} -\cgalPkgManuals{Chapter_2D_Arrangements,PkgArrangement2} +\cgalPkgManuals{Chapter_2D_Arrangements,PkgArrangement2Ref} \cgalPkgSummaryEnd \cgalPkgShortInfoBegin \cgalPkgSince{2.1} diff --git a/BGL/doc/BGL/NamedParameters.txt b/BGL/doc/BGL/NamedParameters.txt index 9100d01d6fd..f775e26ce48 100644 --- a/BGL/doc/BGL/NamedParameters.txt +++ b/BGL/doc/BGL/NamedParameters.txt @@ -1,6 +1,6 @@ /*! \defgroup bgl_namedparameters BGL Named Parameters -\ingroup PkgBGL +\ingroup PkgBGLRef The algorithms of the \sc{Bgl} often have many parameters with default values that are appropriate for most cases. In general, when no diff --git a/BGL/doc/BGL/PackageDescription.txt b/BGL/doc/BGL/PackageDescription.txt index 85411a04874..557af29e8ab 100644 --- a/BGL/doc/BGL/PackageDescription.txt +++ b/BGL/doc/BGL/PackageDescription.txt @@ -1,7 +1,7 @@ -/// \defgroup PkgBGL CGAL and the Boost Graph Library Reference +/// \defgroup PkgBGLRef CGAL and the Boost Graph Library Reference /*! \defgroup PkgBGLConcepts Concepts - \ingroup PkgBGL + \ingroup PkgBGLRef We extend the Boost Graph Library (\sc{Bgl} for short) with a set of new concepts. In order to make this documentation self-contained we here also document @@ -438,34 +438,34 @@ the requirement for traversal of all faces in a graph. /// The property tags model of the boost concept PropertyTag. /// These tags are used to retrieve default property maps using the traits class boost::property_map. /// \defgroup PkgBGLProperties Properties -/// \ingroup PkgBGL +/// \ingroup PkgBGLRef /// \defgroup PkgBGLPropertiesDynamic Dynamic Properties -/// \ingroup PkgBGL +/// \ingroup PkgBGLRef /// \defgroup PkgBGLHelper Helper Classes -/// \ingroup PkgBGL +/// \ingroup PkgBGLRef /// \defgroup PkgBGLHelperFct Helper Functions -/// \ingroup PkgBGL +/// \ingroup PkgBGLRef /// \defgroup PkgBGLIterators Iterators and Circulators -/// \ingroup PkgBGL +/// \ingroup PkgBGLRef /// \defgroup PkgBGLSelectionFct Selection Functions -/// \ingroup PkgBGL +/// \ingroup PkgBGLRef /// \defgroup PkgBGLAdaptors Graph Adaptors -/// \ingroup PkgBGL +/// \ingroup PkgBGLRef /// \defgroup PkgBGLEulerOperations Euler Operations -/// \ingroup PkgBGL +/// \ingroup PkgBGLRef /// \defgroup PkgBGLPartition Partitioning Operations -/// \ingroup PkgBGL +/// \ingroup PkgBGLRef /// \defgroup PkgBGLIOFct I/O Functions -/// \ingroup PkgBGL +/// \ingroup PkgBGLRef /*! \addtogroup PkgBGLPropertiesDynamic @@ -541,13 +541,13 @@ Methods to read and write graphs. /*! -\addtogroup PkgBGL +\addtogroup PkgBGLRef \cgalPkgDescriptionBegin{CGAL and the Boost Graph Library,PkgBGLSummary} \cgalPkgPicture{emst-detail.png} \cgalPkgSummaryBegin \cgalPkgAuthors{Andreas Fabri, Fernando Cacciola, Philipp Moeller, and Ron Wein} \cgalPkgDesc{This package provides a framework for interfacing \cgal data structures with the algorithms of the Boost Graph Library, or \sc{BGL} for short. It allows to run graph algorithms directly on \cgal data structures which are model of the \sc{BGL} graph concepts, for example the shortest path algorithm on a Delaunay triangulation in order to compute the Euclidean minimum spanning tree. Furthermore, it introduces several new graph concepts describing halfedge data structures.} -\cgalPkgManuals{Chapter_CGAL_and_the_Boost_Graph_Library,PkgBGL} +\cgalPkgManuals{Chapter_CGAL_and_the_Boost_Graph_Library,PkgBGLRef} \cgalPkgSummaryEnd \cgalPkgShortInfoBegin \cgalPkgSince{3.3} diff --git a/BGL/doc/BGL/graph_traits.txt b/BGL/doc/BGL/graph_traits.txt index ce760aebcde..bbc9deabdd9 100644 --- a/BGL/doc/BGL/graph_traits.txt +++ b/BGL/doc/BGL/graph_traits.txt @@ -1,7 +1,7 @@ /*! \defgroup PkgBGLTraits Specializations of boost::graph_traits -\ingroup PkgBGL +\ingroup PkgBGLRef The \sc{Bgl} defines the class template `boost::graph_traits` diff --git a/BGL/include/CGAL/boost/graph/partition.h b/BGL/include/CGAL/boost/graph/partition.h index 129e2421e13..a6bf761fccb 100644 --- a/BGL/include/CGAL/boost/graph/partition.h +++ b/BGL/include/CGAL/boost/graph/partition.h @@ -22,7 +22,7 @@ #define CGAL_BGL_PARTITION_H /** -* \ingroup PkgBGL +* \ingroup PkgBGLRef * \file CGAL/boost/graph/partition.h * Convenience header file including the headers for all the partitioning-related * free functions of this package. diff --git a/BGL/include/CGAL/boost/graph/split_graph_into_polylines.h b/BGL/include/CGAL/boost/graph/split_graph_into_polylines.h index 09fe353349b..2fc9ed6b461 100644 --- a/BGL/include/CGAL/boost/graph/split_graph_into_polylines.h +++ b/BGL/include/CGAL/boost/graph/split_graph_into_polylines.h @@ -203,7 +203,7 @@ void duplicate_terminal_vertices(Graph& graph, /*! -\ingroup PkgBGL +\ingroup PkgBGLRef splits into polylines the graph `g` at vertices of degree greater than 2 and at vertices for which `is_terminal(v,graph)==true`. The polylines are reported using a visitor. diff --git a/Barycentric_coordinates_2/doc/Barycentric_coordinates_2/Barycentric_coordinates_2.txt b/Barycentric_coordinates_2/doc/Barycentric_coordinates_2/Barycentric_coordinates_2.txt index da226aedf29..c022f02d017 100644 --- a/Barycentric_coordinates_2/doc/Barycentric_coordinates_2/Barycentric_coordinates_2.txt +++ b/Barycentric_coordinates_2/doc/Barycentric_coordinates_2/Barycentric_coordinates_2.txt @@ -26,7 +26,7 @@ Segment and triangle coordinates can be computed by using either a global functi Any point in the plane may be taken as a query point. However, we do not recommend to use Wachspress and discrete harmonic coordinates with query points outside the closure of a polygon because at some of those points these coordinates are not well-defined, as explained in the Section \ref gbc_degeneracies. -Once instantiated for some polygon, the coordinates can be computed multiple times for different query points with respect to all the vertices of the provided polygon. Use the \ref PkgBarycentric_coordinates_2 "Reference Manual" for the detailed interface. +Once instantiated for some polygon, the coordinates can be computed multiple times for different query points with respect to all the vertices of the provided polygon. Use the \ref PkgBarycentric_coordinates_2Ref "Reference Manual" for the detailed interface. The output of the computation is a set of coordinate values at the current query point with respect to all the vertices of the polygon. This output can be stored in an arbitrary container providing an appropriate output iterator. In addition, all the classes return a pointer to the last stored element and a status of the computation (Boolean true or false). diff --git a/Barycentric_coordinates_2/doc/Barycentric_coordinates_2/PackageDescription.txt b/Barycentric_coordinates_2/doc/Barycentric_coordinates_2/PackageDescription.txt index 29cae2cd33c..42039a5eb61 100644 --- a/Barycentric_coordinates_2/doc/Barycentric_coordinates_2/PackageDescription.txt +++ b/Barycentric_coordinates_2/doc/Barycentric_coordinates_2/PackageDescription.txt @@ -1,17 +1,17 @@ -/// \defgroup PkgBarycentric_coordinates_2 2D Generalized Barycentric Coordinates Reference +/// \defgroup PkgBarycentric_coordinates_2Ref 2D Generalized Barycentric Coordinates Reference /// \defgroup PkgBarycentric_coordinates_2Concepts Concepts -/// \ingroup PkgBarycentric_coordinates_2 +/// \ingroup PkgBarycentric_coordinates_2Ref /*! -\addtogroup PkgBarycentric_coordinates_2 +\addtogroup PkgBarycentric_coordinates_2Ref \cgalPkgDescriptionBegin{2D Generalized Barycentric Coordinates, PkgBarycentric_coordinates_2Summary} \cgalPkgPicture{barcoord_thumb.png} \cgalPkgSummaryBegin \cgalPkgAuthors{Dmitry Anisimov, David Bommes, Kai Hormann, and Pierre Alliez} \cgalPkgDesc{The package 2D Generalized Barycentric Coordinates offers an efficient and robust implementation of two-dimensional closed-form generalized barycentric coordinates defined for simple two-dimensional polygons. If coordinates with respect to multivariate scattered points instead of a polygon are required, please refer to natural neighbor coordinates from the Package \ref PkgInterpolation2Summary.} -\cgalPkgManuals{Chapter_2D_Generalized_Barycentric_Coordinates, PkgBarycentric_coordinates_2} +\cgalPkgManuals{Chapter_2D_Generalized_Barycentric_Coordinates, PkgBarycentric_coordinates_2Ref} \cgalPkgSummaryEnd \cgalPkgShortInfoBegin \cgalPkgSince{4.6} diff --git a/Barycentric_coordinates_2/include/CGAL/Barycentric_coordinates_2/Discrete_harmonic_2.h b/Barycentric_coordinates_2/include/CGAL/Barycentric_coordinates_2/Discrete_harmonic_2.h index 5ab84f16885..210ad73abd7 100644 --- a/Barycentric_coordinates_2/include/CGAL/Barycentric_coordinates_2/Discrete_harmonic_2.h +++ b/Barycentric_coordinates_2/include/CGAL/Barycentric_coordinates_2/Discrete_harmonic_2.h @@ -49,7 +49,7 @@ namespace Barycentric_coordinates { // [1] Reference: "M. S. Floater, K. Hormann, and G. Kos. A general construction of barycentric coordinates over convex polygons. Advances in Computational Mathematics, 24(1-4):311-331, 2006.". /*! - * \ingroup PkgBarycentric_coordinates_2 + * \ingroup PkgBarycentric_coordinates_2Ref * The class `Discrete_harmonic_2` implements 2D discrete harmonic coordinates ( \cite cgal:bc:fhk-gcbcocp-06, \cite cgal:pp-cdmsc-93, \cite cgal:bc:eddhls-maam-95 ). * This class is parameterized by a traits class `Traits`, and it is used as a coordinate class to complete the class `Generalized_barycentric_coordinates_2`. * For a polygon with three vertices (triangle) it is better to use the class `Triangle_coordinates_2`. diff --git a/Barycentric_coordinates_2/include/CGAL/Barycentric_coordinates_2/Generalized_barycentric_coordinates_2.h b/Barycentric_coordinates_2/include/CGAL/Barycentric_coordinates_2/Generalized_barycentric_coordinates_2.h index 4bce42d7680..d40da83df11 100644 --- a/Barycentric_coordinates_2/include/CGAL/Barycentric_coordinates_2/Generalized_barycentric_coordinates_2.h +++ b/Barycentric_coordinates_2/include/CGAL/Barycentric_coordinates_2/Generalized_barycentric_coordinates_2.h @@ -48,7 +48,7 @@ namespace Barycentric_coordinates { // Examples: see the User Manual here - https://doc.cgal.org/latest/Manual/index.html. /*! - * \ingroup PkgBarycentric_coordinates_2 + * \ingroup PkgBarycentric_coordinates_2Ref * The class `Generalized_barycentric_coordinates_2` implements generalized barycentric coordinates along the polygon's boundary and provides a common interface for all coordinate classes. * This class is parameterized by a coordinate class `Coordinate_2`, and a traits class `Traits`. diff --git a/Barycentric_coordinates_2/include/CGAL/Barycentric_coordinates_2/Mean_value_2.h b/Barycentric_coordinates_2/include/CGAL/Barycentric_coordinates_2/Mean_value_2.h index e44a126dc56..ac512446eed 100644 --- a/Barycentric_coordinates_2/include/CGAL/Barycentric_coordinates_2/Mean_value_2.h +++ b/Barycentric_coordinates_2/include/CGAL/Barycentric_coordinates_2/Mean_value_2.h @@ -101,7 +101,7 @@ public: // [2] Reference: "M. S. Floater, Wachspress and mean value coordinates, to appear in the Proceedings of the 14th International Conference on Approximation Theory, G. Fasshauer and L. L. Schumaker (eds.)." /*! - * \ingroup PkgBarycentric_coordinates_2 + * \ingroup PkgBarycentric_coordinates_2Ref * The class `Mean_value_2` implements 2D mean value coordinates ( \cite cgal:bc:hf-mvcapp-06, \cite cgal:bc:fhk-gcbcocp-06, \cite cgal:f-mvc-03 ). * This class is parameterized by a traits class `Traits`, and it is used as a coordinate class to complete the class `Generalized_barycentric_coordinates_2`. * For a polygon with three vertices (triangle) it is better to use the class `Triangle_coordinates_2`. diff --git a/Barycentric_coordinates_2/include/CGAL/Barycentric_coordinates_2/Segment_coordinates_2.h b/Barycentric_coordinates_2/include/CGAL/Barycentric_coordinates_2/Segment_coordinates_2.h index 34fe8b3ba3b..fd81433a06e 100644 --- a/Barycentric_coordinates_2/include/CGAL/Barycentric_coordinates_2/Segment_coordinates_2.h +++ b/Barycentric_coordinates_2/include/CGAL/Barycentric_coordinates_2/Segment_coordinates_2.h @@ -48,7 +48,7 @@ namespace Barycentric_coordinates { // Examples: see the User Manual - https://doc.cgal.org/latest/Manual/index.html. /*! - * \ingroup PkgBarycentric_coordinates_2 + * \ingroup PkgBarycentric_coordinates_2Ref * The class `Segment_coordinates_2` implements barycentric coordinates with respect to an arbitrary non-degenerate segment along an arbitrary line in the plane. * This class is parameterized by a traits class `Traits`. diff --git a/Barycentric_coordinates_2/include/CGAL/Barycentric_coordinates_2/Triangle_coordinates_2.h b/Barycentric_coordinates_2/include/CGAL/Barycentric_coordinates_2/Triangle_coordinates_2.h index 8ef6af47752..82086944b5d 100644 --- a/Barycentric_coordinates_2/include/CGAL/Barycentric_coordinates_2/Triangle_coordinates_2.h +++ b/Barycentric_coordinates_2/include/CGAL/Barycentric_coordinates_2/Triangle_coordinates_2.h @@ -49,7 +49,7 @@ namespace Barycentric_coordinates { // [1] Reference: Weisstein, Eric W. "Barycentric Coordinates." From MathWorld--A Wolfram Web Resource. http://mathworld.wolfram.com/BarycentricCoordinates.html. /*! - * \ingroup PkgBarycentric_coordinates_2 + * \ingroup PkgBarycentric_coordinates_2Ref * The class `Triangle_coordinates_2` implements barycentric coordinates ( [1], * [2] ) with respect to an arbitrary non-degenerate triangle in the plane. * This class is parameterized by a traits class `Traits`. diff --git a/Barycentric_coordinates_2/include/CGAL/Barycentric_coordinates_2/Wachspress_2.h b/Barycentric_coordinates_2/include/CGAL/Barycentric_coordinates_2/Wachspress_2.h index 09209606660..2f0775655ae 100644 --- a/Barycentric_coordinates_2/include/CGAL/Barycentric_coordinates_2/Wachspress_2.h +++ b/Barycentric_coordinates_2/include/CGAL/Barycentric_coordinates_2/Wachspress_2.h @@ -49,7 +49,7 @@ namespace Barycentric_coordinates { // [1] Reference: "M. S. Floater, K. Hormann, and G. Kos. A general construction of barycentric coordinates over convex polygons. Advances in Computational Mathematics, 24(1-4):311-331, 2006.". /*! - * \ingroup PkgBarycentric_coordinates_2 + * \ingroup PkgBarycentric_coordinates_2Ref * The class `Wachspress_2` implements 2D Wachspress coordinates ( \cite cgal:bc:fhk-gcbcocp-06, \cite cgal:bc:mlbd-gbcip-02, \cite cgal:bc:w-rfeb-75 ). * This class is parameterized by a traits class `Traits`, and it is used as a coordinate class to complete the class `Generalized_barycentric_coordinates_2`. * For a polygon with three vertices it is better to use the class `Triangle_coordinates_2`. diff --git a/Barycentric_coordinates_2/include/CGAL/Barycentric_coordinates_2/barycentric_enum_2.h b/Barycentric_coordinates_2/include/CGAL/Barycentric_coordinates_2/barycentric_enum_2.h index 3f8fe3541ca..eb8cad0a6af 100644 --- a/Barycentric_coordinates_2/include/CGAL/Barycentric_coordinates_2/barycentric_enum_2.h +++ b/Barycentric_coordinates_2/include/CGAL/Barycentric_coordinates_2/barycentric_enum_2.h @@ -32,7 +32,7 @@ namespace CGAL { /*! - * \ingroup PkgBarycentric_coordinates_2 + * \ingroup PkgBarycentric_coordinates_2Ref * The namespace Barycentric_coordinates contains implementations of all generalized barycentric coordinates: 2D, 3D, related enumerations, and so on. */ diff --git a/Boolean_set_operations_2/doc/Boolean_set_operations_2/CGAL/Boolean_set_operations_2.h b/Boolean_set_operations_2/doc/Boolean_set_operations_2/CGAL/Boolean_set_operations_2.h index 4c918fffd2b..f22267db575 100644 --- a/Boolean_set_operations_2/doc/Boolean_set_operations_2/CGAL/Boolean_set_operations_2.h +++ b/Boolean_set_operations_2/doc/Boolean_set_operations_2/CGAL/Boolean_set_operations_2.h @@ -2,7 +2,7 @@ namespace CGAL { /*! \addtogroup boolean_complement Complement Functions -\ingroup PkgBooleanSetOperations2 +\ingroup PkgBooleanSetOperations2Ref \anchor ref_bso_complement The `complement` function is overloaded. Depending on the @@ -58,7 +58,7 @@ namespace CGAL { /*! \addtogroup boolean_difference Difference Functions -\ingroup PkgBooleanSetOperations2 +\ingroup PkgBooleanSetOperations2Ref \anchor ref_bso_difference Each one of these functions computes the difference between two given @@ -181,7 +181,7 @@ namespace CGAL { /*! \addtogroup boolean_do_intersect Intersection Testing Functions -\ingroup PkgBooleanSetOperations2 +\ingroup PkgBooleanSetOperations2Ref \anchor ref_bso_do_intersect Each one of these functions computes if the interior of two given @@ -305,7 +305,7 @@ namespace CGAL { /*! \addtogroup boolean_intersection Intersection Functions -\ingroup PkgBooleanSetOperations2 +\ingroup PkgBooleanSetOperations2Ref \anchor ref_bso_intersection Each one of these functions computes the intersection of two given @@ -467,7 +467,7 @@ namespace CGAL { /*! \addtogroup boolean_join Union Functions -\ingroup PkgBooleanSetOperations2 +\ingroup PkgBooleanSetOperations2Ref \anchor ref_bso_union Each one of these functions computes the union of two given polygons @@ -621,7 +621,7 @@ OutputIterator oi); namespace CGAL { /*! \addtogroup boolean_oriented_side Oriented Side Functions -\ingroup PkgBooleanSetOperations2 +\ingroup PkgBooleanSetOperations2Ref \anchor ref_bso_oriented_side Each one of these functions returns `ON_POSITIVE_SIDE` if the two @@ -706,7 +706,7 @@ namespace CGAL { /*! \addtogroup boolean_symmetric_difference Symmetric Difference Functions -\ingroup PkgBooleanSetOperations2 +\ingroup PkgBooleanSetOperations2Ref \anchor ref_bso_symmetric_difference Each one of these functions computes the symmetric difference between diff --git a/Boolean_set_operations_2/doc/Boolean_set_operations_2/CGAL/Boolean_set_operations_2/Gps_default_dcel.h b/Boolean_set_operations_2/doc/Boolean_set_operations_2/CGAL/Boolean_set_operations_2/Gps_default_dcel.h index f15067d1cfb..a70de3fc84d 100644 --- a/Boolean_set_operations_2/doc/Boolean_set_operations_2/CGAL/Boolean_set_operations_2/Gps_default_dcel.h +++ b/Boolean_set_operations_2/doc/Boolean_set_operations_2/CGAL/Boolean_set_operations_2/Gps_default_dcel.h @@ -1,7 +1,7 @@ namespace CGAL { /*! -\ingroup PkgBooleanSetOperations2 +\ingroup PkgBooleanSetOperations2Ref An instance of this template serves as a basis type for any face record of the Dcel class used by instances of the @@ -22,7 +22,7 @@ further. class Gps_face_base : public Arr_face_base {}; /*! -\ingroup PkgBooleanSetOperations2 +\ingroup PkgBooleanSetOperations2Ref An instance of this teplate serves as a basis type for any halfedge record of the Dcel class used by instances of the @@ -44,7 +44,7 @@ class Gps_halfedge_base : public Arr_halfedge_base {}; /*! -\ingroup PkgBooleanSetOperations2 +\ingroup PkgBooleanSetOperations2Ref The default Dcel class template used by the `General_polygon_set_2` and `General_polygon_with_holes_2` class templates. diff --git a/Boolean_set_operations_2/doc/Boolean_set_operations_2/CGAL/General_polygon_2.h b/Boolean_set_operations_2/doc/Boolean_set_operations_2/CGAL/General_polygon_2.h index 0eef1b3b4bf..9f1b175d383 100644 --- a/Boolean_set_operations_2/doc/Boolean_set_operations_2/CGAL/General_polygon_2.h +++ b/Boolean_set_operations_2/doc/Boolean_set_operations_2/CGAL/General_polygon_2.h @@ -2,7 +2,7 @@ namespace CGAL { /*! -\ingroup PkgBooleanSetOperations2 +\ingroup PkgBooleanSetOperations2Ref The class `General_polygon_2` models the concept `GeneralPolygon_2`. It represents a simple general-polygon. It is parameterized with the type diff --git a/Boolean_set_operations_2/doc/Boolean_set_operations_2/CGAL/General_polygon_set_2.h b/Boolean_set_operations_2/doc/Boolean_set_operations_2/CGAL/General_polygon_set_2.h index fbaf40f38b8..c11787975f8 100644 --- a/Boolean_set_operations_2/doc/Boolean_set_operations_2/CGAL/General_polygon_set_2.h +++ b/Boolean_set_operations_2/doc/Boolean_set_operations_2/CGAL/General_polygon_set_2.h @@ -1,7 +1,7 @@ namespace CGAL { /*! -\ingroup PkgBooleanSetOperations2 +\ingroup PkgBooleanSetOperations2Ref An object of the `General_polygon_set_2` class-template represents a point set in the plane bounded by \f$ x\f$ monotone curves. Points in the set diff --git a/Boolean_set_operations_2/doc/Boolean_set_operations_2/CGAL/Gps_circle_segment_traits_2.h b/Boolean_set_operations_2/doc/Boolean_set_operations_2/CGAL/Gps_circle_segment_traits_2.h index de13d563186..663c1d11a4c 100644 --- a/Boolean_set_operations_2/doc/Boolean_set_operations_2/CGAL/Gps_circle_segment_traits_2.h +++ b/Boolean_set_operations_2/doc/Boolean_set_operations_2/CGAL/Gps_circle_segment_traits_2.h @@ -2,7 +2,7 @@ namespace CGAL { /*! -\ingroup PkgBooleanSetOperations2 +\ingroup PkgBooleanSetOperations2Ref The traits class `Gps_circle_segment_traits_2` models the `GeneralPolygonSetTraits_2` concept. It enables Boolean set-operations on general polygons bounded by diff --git a/Boolean_set_operations_2/doc/Boolean_set_operations_2/CGAL/Gps_segment_traits_2.h b/Boolean_set_operations_2/doc/Boolean_set_operations_2/CGAL/Gps_segment_traits_2.h index adc2521cbfa..536b7dddd40 100644 --- a/Boolean_set_operations_2/doc/Boolean_set_operations_2/CGAL/Gps_segment_traits_2.h +++ b/Boolean_set_operations_2/doc/Boolean_set_operations_2/CGAL/Gps_segment_traits_2.h @@ -2,7 +2,7 @@ namespace CGAL { /*! -\ingroup PkgBooleanSetOperations2 +\ingroup PkgBooleanSetOperations2Ref \cgalModels `GeneralPolygonSetTraits_2` diff --git a/Boolean_set_operations_2/doc/Boolean_set_operations_2/CGAL/Gps_traits_2.h b/Boolean_set_operations_2/doc/Boolean_set_operations_2/CGAL/Gps_traits_2.h index cb5172cbf06..d5155423f8e 100644 --- a/Boolean_set_operations_2/doc/Boolean_set_operations_2/CGAL/Gps_traits_2.h +++ b/Boolean_set_operations_2/doc/Boolean_set_operations_2/CGAL/Gps_traits_2.h @@ -2,7 +2,7 @@ namespace CGAL { /*! -\ingroup PkgBooleanSetOperations2 +\ingroup PkgBooleanSetOperations2Ref The traits class `Gps_traits_2` models the concept `GeneralPolygonSetTraits_2`. It inherits from the instantiated diff --git a/Boolean_set_operations_2/doc/Boolean_set_operations_2/CGAL/Polygon_set_2.h b/Boolean_set_operations_2/doc/Boolean_set_operations_2/CGAL/Polygon_set_2.h index 1e9b5211e9a..3ed0e9cc728 100644 --- a/Boolean_set_operations_2/doc/Boolean_set_operations_2/CGAL/Polygon_set_2.h +++ b/Boolean_set_operations_2/doc/Boolean_set_operations_2/CGAL/Polygon_set_2.h @@ -2,7 +2,7 @@ namespace CGAL { /*! -\ingroup PkgBooleanSetOperations2 +\ingroup PkgBooleanSetOperations2Ref The class `Polygon_set_2` represents sets of linear polygons with holes. The first two template parameters (`Kernel` and `Container`) diff --git a/Boolean_set_operations_2/doc/Boolean_set_operations_2/CGAL/connect_holes.h b/Boolean_set_operations_2/doc/Boolean_set_operations_2/CGAL/connect_holes.h index 939c8566e9f..928c0d1fc96 100644 --- a/Boolean_set_operations_2/doc/Boolean_set_operations_2/CGAL/connect_holes.h +++ b/Boolean_set_operations_2/doc/Boolean_set_operations_2/CGAL/connect_holes.h @@ -2,7 +2,7 @@ namespace CGAL { /*! \addtogroup boolean_connect_holes Functions on Polygon with Holes -\ingroup PkgBooleanSetOperations2 +\ingroup PkgBooleanSetOperations2Ref \anchor ref_bso_connect_holes diff --git a/Boolean_set_operations_2/doc/Boolean_set_operations_2/PackageDescription.txt b/Boolean_set_operations_2/doc/Boolean_set_operations_2/PackageDescription.txt index c9570ed6982..dab4b1e3c38 100644 --- a/Boolean_set_operations_2/doc/Boolean_set_operations_2/PackageDescription.txt +++ b/Boolean_set_operations_2/doc/Boolean_set_operations_2/PackageDescription.txt @@ -1,20 +1,20 @@ -/// \defgroup PkgBooleanSetOperations2 2D Regularized Boolean Set-Operations Reference +/// \defgroup PkgBooleanSetOperations2Ref 2D Regularized Boolean Set-Operations Reference /// \defgroup PkgBooleanSetOperations2Concepts Concepts -/// \ingroup PkgBooleanSetOperations2 +/// \ingroup PkgBooleanSetOperations2Ref /// \cgalConceptNamespace /// The namespace containing concepts specific to 2D Boolean Set Operations. namespace ArrDirectionalTraits {} /*! -\addtogroup PkgBooleanSetOperations2 +\addtogroup PkgBooleanSetOperations2Ref \todo check generated documentation \cgalPkgDescriptionBegin{2D Regularized Boolean Set-Operations,PkgBooleanSetOperations2Summary} \cgalPkgPicture{Boolean_set_operations_2.png} \cgalPkgSummaryBegin \cgalPkgAuthors{Efi Fogel, Ophir Setter, Ron Wein, Guy Zucker, Baruch Zukerman, and Dan Halperin} \cgalPkgDesc{This package consists of the implementation of Boolean set-operations on point sets bounded by weakly x-monotone curves in 2-dimensional Euclidean space. In particular, it contains the implementation of regularized Boolean set-operations, intersection predicates, and point containment predicates.} -\cgalPkgManuals{Chapter_2D_Regularized_Boolean_Set-Operations,PkgBooleanSetOperations2} +\cgalPkgManuals{Chapter_2D_Regularized_Boolean_Set-Operations,PkgBooleanSetOperations2Ref} \cgalPkgSummaryEnd \cgalPkgShortInfoBegin \cgalPkgSince{3.2} diff --git a/Bounding_volumes/doc/Bounding_volumes/CGAL/Approximate_min_ellipsoid_d.h b/Bounding_volumes/doc/Bounding_volumes/CGAL/Approximate_min_ellipsoid_d.h index 8fbe5d25734..c53940face3 100644 --- a/Bounding_volumes/doc/Bounding_volumes/CGAL/Approximate_min_ellipsoid_d.h +++ b/Bounding_volumes/doc/Bounding_volumes/CGAL/Approximate_min_ellipsoid_d.h @@ -2,7 +2,7 @@ namespace CGAL { /*! -\ingroup PkgBoundingVolumes +\ingroup PkgBoundingVolumesRef An object of class `Approximate_min_ellipsoid_d` is an approximation to the ellipsoid of smallest volume enclosing a finite multiset of points diff --git a/Bounding_volumes/doc/Bounding_volumes/CGAL/Approximate_min_ellipsoid_d_traits_2.h b/Bounding_volumes/doc/Bounding_volumes/CGAL/Approximate_min_ellipsoid_d_traits_2.h index edd58cacab9..8692b24c19a 100644 --- a/Bounding_volumes/doc/Bounding_volumes/CGAL/Approximate_min_ellipsoid_d_traits_2.h +++ b/Bounding_volumes/doc/Bounding_volumes/CGAL/Approximate_min_ellipsoid_d_traits_2.h @@ -2,7 +2,7 @@ namespace CGAL { /*! -\ingroup PkgBoundingVolumes +\ingroup PkgBoundingVolumesRef The class `Approximate_min_ellipsoid_d_traits_2` is a traits class for `CGAL::Approximate_min_ellipsoid_d` using the diff --git a/Bounding_volumes/doc/Bounding_volumes/CGAL/Approximate_min_ellipsoid_d_traits_3.h b/Bounding_volumes/doc/Bounding_volumes/CGAL/Approximate_min_ellipsoid_d_traits_3.h index dd398e46456..b7f79cd4167 100644 --- a/Bounding_volumes/doc/Bounding_volumes/CGAL/Approximate_min_ellipsoid_d_traits_3.h +++ b/Bounding_volumes/doc/Bounding_volumes/CGAL/Approximate_min_ellipsoid_d_traits_3.h @@ -2,7 +2,7 @@ namespace CGAL { /*! -\ingroup PkgBoundingVolumes +\ingroup PkgBoundingVolumesRef The class `Approximate_min_ellipsoid_d_traits_3` is a traits class for `CGAL::Approximate_min_ellipsoid_d` using the diff --git a/Bounding_volumes/doc/Bounding_volumes/CGAL/Approximate_min_ellipsoid_d_traits_d.h b/Bounding_volumes/doc/Bounding_volumes/CGAL/Approximate_min_ellipsoid_d_traits_d.h index b7bdcbe586e..75d4b45137d 100644 --- a/Bounding_volumes/doc/Bounding_volumes/CGAL/Approximate_min_ellipsoid_d_traits_d.h +++ b/Bounding_volumes/doc/Bounding_volumes/CGAL/Approximate_min_ellipsoid_d_traits_d.h @@ -2,7 +2,7 @@ namespace CGAL { /*! -\ingroup PkgBoundingVolumes +\ingroup PkgBoundingVolumesRef The class `Approximate_min_ellipsoid_d_traits_d` is a traits class for `CGAL::Approximate_min_ellipsoid_d` using the diff --git a/Bounding_volumes/doc/Bounding_volumes/CGAL/Min_annulus_d.h b/Bounding_volumes/doc/Bounding_volumes/CGAL/Min_annulus_d.h index c7af75cd66f..fdcc62b8986 100644 --- a/Bounding_volumes/doc/Bounding_volumes/CGAL/Min_annulus_d.h +++ b/Bounding_volumes/doc/Bounding_volumes/CGAL/Min_annulus_d.h @@ -2,7 +2,7 @@ namespace CGAL { /*! -\ingroup PkgBoundingVolumes +\ingroup PkgBoundingVolumesRef An object of the class `Min_annulus_d` is the unique annulus (region between two concentric spheres with radii \f$ r\f$ and \f$ R\f$, \f$ r \leq R\f$) enclosing a diff --git a/Bounding_volumes/doc/Bounding_volumes/CGAL/Min_circle_2.h b/Bounding_volumes/doc/Bounding_volumes/CGAL/Min_circle_2.h index f4e8d622eb0..62309eefebe 100644 --- a/Bounding_volumes/doc/Bounding_volumes/CGAL/Min_circle_2.h +++ b/Bounding_volumes/doc/Bounding_volumes/CGAL/Min_circle_2.h @@ -2,7 +2,7 @@ namespace CGAL { /*! -\ingroup PkgBoundingVolumes +\ingroup PkgBoundingVolumesRef An object of the class `Min_circle_2` is the unique circle of smallest area enclosing a finite (multi)set of points in two-dimensional Euclidean diff --git a/Bounding_volumes/doc/Bounding_volumes/CGAL/Min_circle_2_traits_2.h b/Bounding_volumes/doc/Bounding_volumes/CGAL/Min_circle_2_traits_2.h index acba791f7dc..3fe2037bdc2 100644 --- a/Bounding_volumes/doc/Bounding_volumes/CGAL/Min_circle_2_traits_2.h +++ b/Bounding_volumes/doc/Bounding_volumes/CGAL/Min_circle_2_traits_2.h @@ -2,7 +2,7 @@ namespace CGAL { /*! -\ingroup PkgBoundingVolumes +\ingroup PkgBoundingVolumesRef The class `Min_circle_2_traits_2` is a traits class for `Min_circle_2` using the two-dimensional \cgal kernel. diff --git a/Bounding_volumes/doc/Bounding_volumes/CGAL/Min_ellipse_2.h b/Bounding_volumes/doc/Bounding_volumes/CGAL/Min_ellipse_2.h index fc36ae9e095..a9edbb88bcd 100644 --- a/Bounding_volumes/doc/Bounding_volumes/CGAL/Min_ellipse_2.h +++ b/Bounding_volumes/doc/Bounding_volumes/CGAL/Min_ellipse_2.h @@ -2,7 +2,7 @@ namespace CGAL { /*! -\ingroup PkgBoundingVolumes +\ingroup PkgBoundingVolumesRef An object of the class `Min_ellipse_2` is the unique ellipse of smallest area enclosing a finite (multi)set of points in two-dimensional euclidean diff --git a/Bounding_volumes/doc/Bounding_volumes/CGAL/Min_ellipse_2_traits_2.h b/Bounding_volumes/doc/Bounding_volumes/CGAL/Min_ellipse_2_traits_2.h index e6a1ec22a1e..3a1f2fd3e77 100644 --- a/Bounding_volumes/doc/Bounding_volumes/CGAL/Min_ellipse_2_traits_2.h +++ b/Bounding_volumes/doc/Bounding_volumes/CGAL/Min_ellipse_2_traits_2.h @@ -2,7 +2,7 @@ namespace CGAL { /*! -\ingroup PkgBoundingVolumes +\ingroup PkgBoundingVolumesRef The class `Min_ellipse_2_traits_2` is a traits class for `CGAL::Min_ellipse_2` using the two-di-men-sional \cgal kernel. diff --git a/Bounding_volumes/doc/Bounding_volumes/CGAL/Min_quadrilateral_traits_2.h b/Bounding_volumes/doc/Bounding_volumes/CGAL/Min_quadrilateral_traits_2.h index 6562281723e..212e5188ba2 100644 --- a/Bounding_volumes/doc/Bounding_volumes/CGAL/Min_quadrilateral_traits_2.h +++ b/Bounding_volumes/doc/Bounding_volumes/CGAL/Min_quadrilateral_traits_2.h @@ -2,7 +2,7 @@ namespace CGAL { /*! -\ingroup PkgBoundingVolumes +\ingroup PkgBoundingVolumesRef The class `Min_quadrilateral_default_traits_2` is a traits class for the functions `min_rectangle_2`, `min_parallelogram_2` and diff --git a/Bounding_volumes/doc/Bounding_volumes/CGAL/Min_sphere_annulus_d_traits_2.h b/Bounding_volumes/doc/Bounding_volumes/CGAL/Min_sphere_annulus_d_traits_2.h index d0806b47f50..9d0e4de3c88 100644 --- a/Bounding_volumes/doc/Bounding_volumes/CGAL/Min_sphere_annulus_d_traits_2.h +++ b/Bounding_volumes/doc/Bounding_volumes/CGAL/Min_sphere_annulus_d_traits_2.h @@ -2,7 +2,7 @@ namespace CGAL { /*! -\ingroup PkgBoundingVolumes +\ingroup PkgBoundingVolumesRef The class `Min_sphere_annulus_d_traits_2` is a traits class for the \f$ d\f$-dimensional optimisation algorithms using the two-dimensional \cgal kernel. diff --git a/Bounding_volumes/doc/Bounding_volumes/CGAL/Min_sphere_annulus_d_traits_3.h b/Bounding_volumes/doc/Bounding_volumes/CGAL/Min_sphere_annulus_d_traits_3.h index e4627f99380..6d07f070b9e 100644 --- a/Bounding_volumes/doc/Bounding_volumes/CGAL/Min_sphere_annulus_d_traits_3.h +++ b/Bounding_volumes/doc/Bounding_volumes/CGAL/Min_sphere_annulus_d_traits_3.h @@ -2,7 +2,7 @@ namespace CGAL { /*! -\ingroup PkgBoundingVolumes +\ingroup PkgBoundingVolumesRef The class `Min_sphere_annulus_d_traits_3` is a traits class for the \f$ d\f$-dimensional optimisation algorithms using the three-dimensional \cgal kernel. diff --git a/Bounding_volumes/doc/Bounding_volumes/CGAL/Min_sphere_annulus_d_traits_d.h b/Bounding_volumes/doc/Bounding_volumes/CGAL/Min_sphere_annulus_d_traits_d.h index 5fec804b71d..0e65c594f65 100644 --- a/Bounding_volumes/doc/Bounding_volumes/CGAL/Min_sphere_annulus_d_traits_d.h +++ b/Bounding_volumes/doc/Bounding_volumes/CGAL/Min_sphere_annulus_d_traits_d.h @@ -2,7 +2,7 @@ namespace CGAL { /*! -\ingroup PkgBoundingVolumes +\ingroup PkgBoundingVolumesRef The class `Min_sphere_annulus_d_traits_d` is a traits class for the \f$ d\f$-dimensional optimisation algorithms using the \f$ d\f$-dimensional \cgal kernel. diff --git a/Bounding_volumes/doc/Bounding_volumes/CGAL/Min_sphere_d.h b/Bounding_volumes/doc/Bounding_volumes/CGAL/Min_sphere_d.h index 7c93a00b5e1..a682dd41650 100644 --- a/Bounding_volumes/doc/Bounding_volumes/CGAL/Min_sphere_d.h +++ b/Bounding_volumes/doc/Bounding_volumes/CGAL/Min_sphere_d.h @@ -2,7 +2,7 @@ namespace CGAL { /*! -\ingroup PkgBoundingVolumes +\ingroup PkgBoundingVolumesRef An object of the class `Min_sphere_d` is the unique sphere of smallest volume enclosing a finite (multi)set of points in \f$ d\f$-dimensional diff --git a/Bounding_volumes/doc/Bounding_volumes/CGAL/Min_sphere_of_points_d_traits_2.h b/Bounding_volumes/doc/Bounding_volumes/CGAL/Min_sphere_of_points_d_traits_2.h index 778ee39f84d..5b5f00fc91f 100644 --- a/Bounding_volumes/doc/Bounding_volumes/CGAL/Min_sphere_of_points_d_traits_2.h +++ b/Bounding_volumes/doc/Bounding_volumes/CGAL/Min_sphere_of_points_d_traits_2.h @@ -1,7 +1,7 @@ namespace CGAL { /*! -\ingroup PkgBoundingVolumes +\ingroup PkgBoundingVolumesRef The class `Min_sphere_of_points_d_traits_2` is a diff --git a/Bounding_volumes/doc/Bounding_volumes/CGAL/Min_sphere_of_points_d_traits_3.h b/Bounding_volumes/doc/Bounding_volumes/CGAL/Min_sphere_of_points_d_traits_3.h index 94fc8752a01..0a789e04e45 100644 --- a/Bounding_volumes/doc/Bounding_volumes/CGAL/Min_sphere_of_points_d_traits_3.h +++ b/Bounding_volumes/doc/Bounding_volumes/CGAL/Min_sphere_of_points_d_traits_3.h @@ -1,7 +1,7 @@ namespace CGAL { /*! -\ingroup PkgBoundingVolumes +\ingroup PkgBoundingVolumesRef The class `Min_sphere_of_points_d_traits_3` is a diff --git a/Bounding_volumes/doc/Bounding_volumes/CGAL/Min_sphere_of_points_d_traits_d.h b/Bounding_volumes/doc/Bounding_volumes/CGAL/Min_sphere_of_points_d_traits_d.h index 20af328cf96..2fa016f2303 100644 --- a/Bounding_volumes/doc/Bounding_volumes/CGAL/Min_sphere_of_points_d_traits_d.h +++ b/Bounding_volumes/doc/Bounding_volumes/CGAL/Min_sphere_of_points_d_traits_d.h @@ -1,7 +1,7 @@ namespace CGAL { /*! -\ingroup PkgBoundingVolumes +\ingroup PkgBoundingVolumesRef The class `Min_sphere_of_points_d_traits_d` is diff --git a/Bounding_volumes/doc/Bounding_volumes/CGAL/Min_sphere_of_spheres_d.h b/Bounding_volumes/doc/Bounding_volumes/CGAL/Min_sphere_of_spheres_d.h index 24de9ca7fd8..f7cb4a140ca 100644 --- a/Bounding_volumes/doc/Bounding_volumes/CGAL/Min_sphere_of_spheres_d.h +++ b/Bounding_volumes/doc/Bounding_volumes/CGAL/Min_sphere_of_spheres_d.h @@ -2,7 +2,7 @@ namespace CGAL { /*! -\ingroup PkgBoundingVolumes +\ingroup PkgBoundingVolumesRef An object of the class `Min_sphere_of_spheres_d` is a data structure that represents the unique sphere of smallest volume enclosing a finite set of spheres diff --git a/Bounding_volumes/doc/Bounding_volumes/CGAL/Min_sphere_of_spheres_d_traits_2.h b/Bounding_volumes/doc/Bounding_volumes/CGAL/Min_sphere_of_spheres_d_traits_2.h index 6154e5dae39..a0e085ede92 100644 --- a/Bounding_volumes/doc/Bounding_volumes/CGAL/Min_sphere_of_spheres_d_traits_2.h +++ b/Bounding_volumes/doc/Bounding_volumes/CGAL/Min_sphere_of_spheres_d_traits_2.h @@ -1,7 +1,7 @@ namespace CGAL { /*! -\ingroup PkgBoundingVolumes +\ingroup PkgBoundingVolumesRef The class `Min_sphere_of_spheres_d_traits_2` is a diff --git a/Bounding_volumes/doc/Bounding_volumes/CGAL/Min_sphere_of_spheres_d_traits_3.h b/Bounding_volumes/doc/Bounding_volumes/CGAL/Min_sphere_of_spheres_d_traits_3.h index b59539673e6..e366016a9e0 100644 --- a/Bounding_volumes/doc/Bounding_volumes/CGAL/Min_sphere_of_spheres_d_traits_3.h +++ b/Bounding_volumes/doc/Bounding_volumes/CGAL/Min_sphere_of_spheres_d_traits_3.h @@ -1,7 +1,7 @@ namespace CGAL { /*! -\ingroup PkgBoundingVolumes +\ingroup PkgBoundingVolumesRef The class `Min_sphere_of_spheres_d_traits_3` is a diff --git a/Bounding_volumes/doc/Bounding_volumes/CGAL/Min_sphere_of_spheres_d_traits_d.h b/Bounding_volumes/doc/Bounding_volumes/CGAL/Min_sphere_of_spheres_d_traits_d.h index 81774e86735..6821e1e210c 100644 --- a/Bounding_volumes/doc/Bounding_volumes/CGAL/Min_sphere_of_spheres_d_traits_d.h +++ b/Bounding_volumes/doc/Bounding_volumes/CGAL/Min_sphere_of_spheres_d_traits_d.h @@ -1,7 +1,7 @@ namespace CGAL { /*! -\ingroup PkgBoundingVolumes +\ingroup PkgBoundingVolumesRef The class `Min_sphere_of_spheres_d_traits_d` is diff --git a/Bounding_volumes/doc/Bounding_volumes/CGAL/min_quadrilateral_2.h b/Bounding_volumes/doc/Bounding_volumes/CGAL/min_quadrilateral_2.h index 84ce8286486..c9c0f1469ae 100644 --- a/Bounding_volumes/doc/Bounding_volumes/CGAL/min_quadrilateral_2.h +++ b/Bounding_volumes/doc/Bounding_volumes/CGAL/min_quadrilateral_2.h @@ -1,7 +1,7 @@ namespace CGAL { /*! -\ingroup PkgBoundingVolumes +\ingroup PkgBoundingVolumesRef The function computes a minimum area enclosing parallelogram \f$ A(P)\f$ of a given convex point set \f$ P\f$. Note that @@ -72,7 +72,7 @@ Traits& t = Default_traits); namespace CGAL { /*! -\ingroup PkgBoundingVolumes +\ingroup PkgBoundingVolumesRef The function computes a minimum area enclosing rectangle \f$ R(P)\f$ of a given convex point set \f$ P\f$. Note that \f$ R(P)\f$ is not @@ -141,7 +141,7 @@ Traits& t = Default_traits); namespace CGAL { /*! -\ingroup PkgBoundingVolumes +\ingroup PkgBoundingVolumesRef The function computes a minimum width enclosing strip \f$ S(P)\f$ of a given convex point set \f$ P\f$. A strip is the closed region diff --git a/Bounding_volumes/doc/Bounding_volumes/CGAL/rectangular_p_center_2.h b/Bounding_volumes/doc/Bounding_volumes/CGAL/rectangular_p_center_2.h index debd0c3c8ea..77381b0cb91 100644 --- a/Bounding_volumes/doc/Bounding_volumes/CGAL/rectangular_p_center_2.h +++ b/Bounding_volumes/doc/Bounding_volumes/CGAL/rectangular_p_center_2.h @@ -1,7 +1,7 @@ namespace CGAL { /*! -\ingroup PkgBoundingVolumes +\ingroup PkgBoundingVolumesRef The class `Rectangular_p_center_default_traits_2` defines types and operations needed to compute rectilinear \f$ p\f$-centers of a planar point set @@ -194,7 +194,7 @@ construct_iso_rectangle_2_above_right_point_2_object() const; }; /*! -\ingroup PkgBoundingVolumes +\ingroup PkgBoundingVolumesRef Computes rectilinear \f$ p\f$-centers of a planar point set, i.e.\ a set of \f$ p\f$ points such diff --git a/Bounding_volumes/doc/Bounding_volumes/PackageDescription.txt b/Bounding_volumes/doc/Bounding_volumes/PackageDescription.txt index 30b90996b35..3dea01a9475 100644 --- a/Bounding_volumes/doc/Bounding_volumes/PackageDescription.txt +++ b/Bounding_volumes/doc/Bounding_volumes/PackageDescription.txt @@ -1,15 +1,15 @@ -/// \defgroup PkgBoundingVolumes Bounding Volumes Reference +/// \defgroup PkgBoundingVolumesRef Bounding Volumes Reference /// \defgroup PkgBoundingVolumesConcepts Concepts -/// \ingroup PkgBoundingVolumes +/// \ingroup PkgBoundingVolumesRef /*! -\addtogroup PkgBoundingVolumes +\addtogroup PkgBoundingVolumesRef \todo check generated documentation \cgalPkgDescriptionBegin{Bounding Volumes,PkgBoundingVolumesSummary} \cgalPkgPicture{minCircle.png} \cgalPkgSummaryBegin \cgalPkgAuthors{Kaspar Fischer, Bernd Gärtner, Thomas Herrmann, Michael Hoffmann, and Sven Schönherr} \cgalPkgDesc{This package provides algorithms for computing optimal bounding volumes of point sets. In d-dimensional space, the smallest enclosing sphere, ellipsoid (approximate), and annulus can be computed. In 3-dimensional space, the smallest enclosing strip is available as well, and in 2-dimensional space, there are algorithms for a number of additional volumes (rectangles, parallelograms, \f$ k=2,3,4\f$ axis-aligned rectangles). The smallest enclosing sphere algorithm can also be applied to a set of d-dimensional spheres.} -\cgalPkgManuals{Chapter_Bounding_Volumes,PkgBoundingVolumes} +\cgalPkgManuals{Chapter_Bounding_Volumes,PkgBoundingVolumesRef} \cgalPkgSummaryEnd \cgalPkgShortInfoBegin \cgalPkgSince{1.1} diff --git a/Box_intersection_d/doc/Box_intersection_d/PackageDescription.txt b/Box_intersection_d/doc/Box_intersection_d/PackageDescription.txt index 272c41c14d5..86ffd51bf38 100644 --- a/Box_intersection_d/doc/Box_intersection_d/PackageDescription.txt +++ b/Box_intersection_d/doc/Box_intersection_d/PackageDescription.txt @@ -1,24 +1,24 @@ -/// \defgroup PkgBoxIntersectionD Intersecting Sequences of dD Iso-oriented Boxes Reference +/// \defgroup PkgBoxIntersectionDRef Intersecting Sequences of dD Iso-oriented Boxes Reference /// \defgroup PkgBoxIntersectionDConcepts Concepts -/// \ingroup PkgBoxIntersectionD +/// \ingroup PkgBoxIntersectionDRef /// \defgroup PkgBoxIntersectionDClasses Classes -/// \ingroup PkgBoxIntersectionD +/// \ingroup PkgBoxIntersectionDRef /// \defgroup PkgBoxIntersectionD_box_intersection_d CGAL::box_intersection_d() -/// \ingroup PkgBoxIntersectionD +/// \ingroup PkgBoxIntersectionDRef /// \defgroup PkgBoxIntersectionD_box_intersection_all_pairs_d CGAL::box_intersection_all_pairs_d() -/// \ingroup PkgBoxIntersectionD +/// \ingroup PkgBoxIntersectionDRef /// \defgroup PkgBoxIntersectionD_box_self_intersection_d CGAL::box_self_intersection_d() -/// \ingroup PkgBoxIntersectionD +/// \ingroup PkgBoxIntersectionDRef /// \defgroup PkgBoxIntersectionD_box_self_intersection_all_pairs_d CGAL::box_self_intersection_all_pairs_d() -/// \ingroup PkgBoxIntersectionD +/// \ingroup PkgBoxIntersectionDRef /*! -\addtogroup PkgBoxIntersectionD +\addtogroup PkgBoxIntersectionDRef \todo de-math and change D to d for the dimension @@ -27,7 +27,7 @@ \cgalPkgSummaryBegin \cgalPkgAuthors{Lutz Kettner, Andreas Meyer, and Afra Zomorodian} \cgalPkgDesc{An efficient algorithm for finding all intersecting pairs for large numbers of iso-oriented boxes, in order to apply a user defined callback on them. Typically these boxes will be bounding boxes of more complicated geometries. The algorithm is useful for (self-) intersection tests of surfaces etc. } -\cgalPkgManuals{Chapter_Intersecting_Sequences_of_dD_Iso-oriented_Boxes,PkgBoxIntersectionD} +\cgalPkgManuals{Chapter_Intersecting_Sequences_of_dD_Iso-oriented_Boxes,PkgBoxIntersectionDRef} \cgalPkgSummaryEnd \cgalPkgShortInfoBegin \cgalPkgSince{3.1} diff --git a/CGAL_ipelets/doc/CGAL_ipelets/CGAL/CGAL_Ipelet_base.h b/CGAL_ipelets/doc/CGAL_ipelets/CGAL/CGAL_Ipelet_base.h index 32c46524737..5152f1a50a2 100644 --- a/CGAL_ipelets/doc/CGAL_ipelets/CGAL/CGAL_Ipelet_base.h +++ b/CGAL_ipelets/doc/CGAL_ipelets/CGAL/CGAL_Ipelet_base.h @@ -1,5 +1,5 @@ /*! -\ingroup PkgCGALIpelets +\ingroup PkgCGALIpeletsRef The registration of a new ipelet can be done using the macro command `CGAL_IPELET`. Taking as a parameter the name of the class defining the new ipelet, that macro must be placed in the source file after the class definition. @@ -9,7 +9,7 @@ file after the class definition. namespace CGAL { /*! -\ingroup PkgCGALIpelets +\ingroup PkgCGALIpeletsRef `Ipelet_base` is an abstract base class for defining an ipelet. The only function that needs to be defined in a derived class is diff --git a/CGAL_ipelets/doc/CGAL_ipelets/PackageDescription.txt b/CGAL_ipelets/doc/CGAL_ipelets/PackageDescription.txt index d51312d18c2..fc2d23952be 100644 --- a/CGAL_ipelets/doc/CGAL_ipelets/PackageDescription.txt +++ b/CGAL_ipelets/doc/CGAL_ipelets/PackageDescription.txt @@ -1,12 +1,12 @@ -/// \defgroup PkgCGALIpelets CGAL Ipelets Reference +/// \defgroup PkgCGALIpeletsRef CGAL Ipelets Reference /*! -\addtogroup PkgCGALIpelets +\addtogroup PkgCGALIpeletsRef \cgalPkgDescriptionBegin{CGAL Ipelets,PkgCGALIpeletsSummary} \cgalPkgPicture{ipeico.jpg} \cgalPkgSummaryBegin \cgalPkgAuthors{Olivier Devillers, Sébastien Loriot, and Sylvain Pion} \cgalPkgDesc{This package provides a generic framework to easily write ipelets (plug-in's) using \cgal for the the Ipe extensible drawing editor.} -\cgalPkgManuals{Chapter_CGAL_Ipelets,PkgCGALIpelets} +\cgalPkgManuals{Chapter_CGAL_Ipelets,PkgCGALIpeletsRef} \cgalPkgSummaryEnd \cgalPkgShortInfoBegin \cgalPkgSince{3.5} diff --git a/Circular_kernel_2/doc/Circular_kernel_2/PackageDescription.txt b/Circular_kernel_2/doc/Circular_kernel_2/PackageDescription.txt index 5343842eb4a..e23a47c2269 100644 --- a/Circular_kernel_2/doc/Circular_kernel_2/PackageDescription.txt +++ b/Circular_kernel_2/doc/Circular_kernel_2/PackageDescription.txt @@ -1,34 +1,34 @@ -/// \defgroup PkgCircularKernel2 2D Circular Geometry Kernel Reference +/// \defgroup PkgCircularKernel2Ref 2D Circular Geometry Kernel Reference /// \defgroup PkgCircularKernel2GeometricConcepts Geometric Concepts -/// \ingroup PkgCircularKernel2 +/// \ingroup PkgCircularKernel2Ref /// \defgroup PkgCircularKernel2GeometricClasses Geometric Kernel and Classes -/// \ingroup PkgCircularKernel2 +/// \ingroup PkgCircularKernel2Ref /// \defgroup PkgCircularKernel2GeometricFunctions Geometric Global Functions -/// \ingroup PkgCircularKernel2 +/// \ingroup PkgCircularKernel2Ref /// \defgroup PkgCircularKernel2AlgebraicConcepts Algebraic Concepts -/// \ingroup PkgCircularKernel2 +/// \ingroup PkgCircularKernel2Ref /// \defgroup PkgCircularKernel2AlgebraicClasses Algebraic Kernel and Classes -/// \ingroup PkgCircularKernel2 +/// \ingroup PkgCircularKernel2Ref /*! -\addtogroup PkgCircularKernel2 +\addtogroup PkgCircularKernel2Ref \todo check generated documentation \cgalPkgDescriptionBegin{2D Circular Geometry Kernel,PkgCircularKernel2Summary} \cgalPkgPicture{Boolean_operation_detail.png} \cgalPkgSummaryBegin \cgalPkgAuthors{Pedro Machado Manhães de Castro, Sylvain Pion, and Monique Teillaud} \cgalPkgDesc{This package is an extension of the linear \cgal kernel. It offers functionalities on circles, circular arcs and line segments in the plane. } -\cgalPkgManuals{Chapter_2D_Circular_Geometry_Kernel,PkgCircularKernel2} +\cgalPkgManuals{Chapter_2D_Circular_Geometry_Kernel,PkgCircularKernel2Ref} \cgalPkgSummaryEnd \cgalPkgShortInfoBegin \cgalPkgSince{3.2} diff --git a/Circular_kernel_3/doc/Circular_kernel_3/PackageDescription.txt b/Circular_kernel_3/doc/Circular_kernel_3/PackageDescription.txt index 5b04d8f987e..41460181e1c 100644 --- a/Circular_kernel_3/doc/Circular_kernel_3/PackageDescription.txt +++ b/Circular_kernel_3/doc/Circular_kernel_3/PackageDescription.txt @@ -1,31 +1,31 @@ -/// \defgroup PkgSphericalKernel3 3D Spherical Geometry Kernel Reference +/// \defgroup PkgSphericalKernel3Ref 3D Spherical Geometry Kernel Reference /// \defgroup PkgSphericalKernel3GeometricConcepts Geometric Concepts -/// \ingroup PkgSphericalKernel3 +/// \ingroup PkgSphericalKernel3Ref /// \defgroup PkgSphericalKernel3GeometricClasses Geometric Kernel and Classes -/// \ingroup PkgSphericalKernel3 +/// \ingroup PkgSphericalKernel3Ref /// \defgroup PkgSphericalKernel3GeometricFunctions Geometric Global Functions -/// \ingroup PkgSphericalKernel3 +/// \ingroup PkgSphericalKernel3Ref /// \defgroup PkgSphericalKernel3AlgebraicConcepts Algebraic Concepts -/// \ingroup PkgSphericalKernel3 +/// \ingroup PkgSphericalKernel3Ref /// \defgroup PkgSphericalKernel3AlgebraicClasses Algebraic Kernel and Classes -/// \ingroup PkgSphericalKernel3 +/// \ingroup PkgSphericalKernel3Ref /*! -\addtogroup PkgSphericalKernel3 +\addtogroup PkgSphericalKernel3Ref \cgalPkgDescriptionBegin{3D Spherical Geometry Kernel,PkgSphericalKernel3Summary} \cgalPkgPicture{segment_sphere_intersection_detail.png} \cgalPkgSummaryBegin \cgalPkgAuthors{Pedro Machado Manhães de Castro, Frédéric Cazals, Sébastien Loriot, and Monique Teillaud} \cgalPkgDesc{This package is an extension of the linear \cgal %Kernel. It offers functionalities on spheres, circles, circular arcs and line segments, in the 3D space or restricted on a reference sphere.} -\cgalPkgManuals{Chapter_3D_Spherical_Geometry_Kernel,PkgSphericalKernel3} +\cgalPkgManuals{Chapter_3D_Spherical_Geometry_Kernel,PkgSphericalKernel3Ref} \cgalPkgSummaryEnd \cgalPkgShortInfoBegin \cgalPkgSince{3.4} diff --git a/Circulator/doc/Circulator/CGAL/circulator.h b/Circulator/doc/Circulator/CGAL/circulator.h index d081d150af8..7a8cb8551ba 100644 --- a/Circulator/doc/Circulator/CGAL/circulator.h +++ b/Circulator/doc/Circulator/CGAL/circulator.h @@ -295,7 +295,7 @@ template C::size_type circulator_size(C c); namespace CGAL { /*! -\ingroup PkgHandlesAndCirculators +\ingroup PkgHandlesAndCirculatorsRef The circulator traits class distinguishes between circulators and iterators. It defines a local type `category` that is identical to the diff --git a/Circulator/doc/Circulator/PackageDescription.txt b/Circulator/doc/Circulator/PackageDescription.txt index f9141bf7c52..8e24e577d06 100644 --- a/Circulator/doc/Circulator/PackageDescription.txt +++ b/Circulator/doc/Circulator/PackageDescription.txt @@ -1,33 +1,33 @@ -/// \defgroup PkgHandlesAndCirculators Handles and Circulators Reference +/// \defgroup PkgHandlesAndCirculatorsRef Handles and Circulators Reference /// \defgroup PkgHandlesAndCirculatorsConcepts Concepts -/// \ingroup PkgHandlesAndCirculators +/// \ingroup PkgHandlesAndCirculatorsRef /// \defgroup PkgHandlesAndCirculatorsAdapter Adapters for Iterators and Containers -/// \ingroup PkgHandlesAndCirculators +/// \ingroup PkgHandlesAndCirculatorsRef /// \defgroup PkgHandlesAndCirculatorsFunctions Functions -/// \ingroup PkgHandlesAndCirculators +/// \ingroup PkgHandlesAndCirculatorsRef /// \defgroup PkgHandlesAndCirculatorsTags Compile Time Tags -/// \ingroup PkgHandlesAndCirculators +/// \ingroup PkgHandlesAndCirculatorsRef /// \defgroup PkgHandlesAndCirculatorsAssert Assertions -/// \ingroup PkgHandlesAndCirculators +/// \ingroup PkgHandlesAndCirculatorsRef /// \defgroup PkgHandlesAndCirculatorsBaseClasses Base Classes -/// \ingroup PkgHandlesAndCirculators +/// \ingroup PkgHandlesAndCirculatorsRef /*! -\addtogroup PkgHandlesAndCirculators +\addtogroup PkgHandlesAndCirculatorsRef \cgalPkgDescriptionBegin{Handles and Circulators,PkgHandlesAndCirculatorsSummary} \cgalPkgPicture{circulator.png} \cgalPkgSummaryBegin \cgalPkgAuthors{Olivier Devillers, Lutz Kettner, Sylvain Pion, Michael Seel, and Mariette Yvinec} \cgalPkgDesc{This package descibes handles and circulators. They are related to iterators. Handles allow to dereference but neither to increment nor to decrement. Circulators have no notion of past-the-end, and they are used in \cgal whenever we have cyclic stuctures. } -\cgalPkgManuals{Chapter_Handles_Ranges_and_Circulators,PkgHandlesAndCirculators} +\cgalPkgManuals{Chapter_Handles_Ranges_and_Circulators,PkgHandlesAndCirculatorsRef} \cgalPkgSummaryEnd \cgalPkgShortInfoBegin \cgalPkgSince{1.0} diff --git a/Classification/doc/Classification/PackageDescription.txt b/Classification/doc/Classification/PackageDescription.txt index 28404554d77..1c44376765e 100644 --- a/Classification/doc/Classification/PackageDescription.txt +++ b/Classification/doc/Classification/PackageDescription.txt @@ -1,55 +1,55 @@ /*! -\defgroup PkgClassification Classification Reference +\defgroup PkgClassificationRef Classification Reference \defgroup PkgClassificationConcepts Concepts -\ingroup PkgClassification +\ingroup PkgClassificationRef \defgroup PkgClassificationMain Main Functions -\ingroup PkgClassification +\ingroup PkgClassificationRef Functions that perform classification based on a set of labels and a classifier, with or without regularization. \defgroup PkgClassificationClassifiers Classifiers -\ingroup PkgClassification +\ingroup PkgClassificationRef Classifiers are functors that, given a label set and an input item, associate this input item with an energy for each label. This energy measures the likelihood of the item to belong to this label. \defgroup PkgClassificationDataStructures Common Data Structures -\ingroup PkgClassification +\ingroup PkgClassificationRef Useful data structures that are used to compute features (computation of eigenvalues, for example). \defgroup PkgClassificationLabel Label -\ingroup PkgClassification +\ingroup PkgClassificationRef A label represents how an item should be classified, for example: _vegetation_, _building_, _road_, etc. \defgroup PkgClassificationFeature Feature -\ingroup PkgClassification +\ingroup PkgClassificationRef Features are defined as scalar fields that associates each input item with a specific value. \defgroup PkgClassificationFeatures Predefined Features -\ingroup PkgClassification +\ingroup PkgClassificationRef \cgal provides some predefined features that are relevant for classification of point sets. \defgroup PkgClassificationPointSet Point Set Classification -\ingroup PkgClassification +\ingroup PkgClassificationRef Data structures specialized to classify point sets. \defgroup PkgClassificationMesh Mesh Classification -\ingroup PkgClassification +\ingroup PkgClassificationRef Data structures specialized to classify surface meshes. \defgroup PkgClassificationCluster Cluster Classification -\ingroup PkgClassification +\ingroup PkgClassificationRef Data structures specialized to classify clusters. -\addtogroup PkgClassification +\addtogroup PkgClassificationRef \cgalPkgDescriptionBegin{Classification, PkgClassificationSummary} \cgalPkgPicture{data_classif.png} @@ -57,7 +57,7 @@ Data structures specialized to classify clusters. \cgalPkgSummaryBegin \cgalPkgAuthors{Simon Giraudot, Florent Lafarge} \cgalPkgDesc{This component implements an algorithm that classifies a data set into a user-defined set of labels (such as ground, vegetation, buildings, etc.). A flexible API is provided so that users can classify any type of data, compute their own local features on the input data set, and define their own labels.} -\cgalPkgManuals{Chapter_Classification, PkgClassification} +\cgalPkgManuals{Chapter_Classification, PkgClassificationRef} \cgalPkgSummaryEnd \cgalPkgShortInfoBegin diff --git a/Combinatorial_map/doc/Combinatorial_map/PackageDescription.txt b/Combinatorial_map/doc/Combinatorial_map/PackageDescription.txt index 9dbdd2feb72..4a80ea30312 100644 --- a/Combinatorial_map/doc/Combinatorial_map/PackageDescription.txt +++ b/Combinatorial_map/doc/Combinatorial_map/PackageDescription.txt @@ -1,10 +1,10 @@ -/// \defgroup PkgCombinatorialMaps Combinatorial Maps Reference +/// \defgroup PkgCombinatorialMapsRef Combinatorial Maps Reference /// \defgroup PkgCombinatorialMapsConcepts Concepts -/// \ingroup PkgCombinatorialMaps +/// \ingroup PkgCombinatorialMapsRef /// \defgroup PkgCombinatorialMapsClasses Classes -/// \ingroup PkgCombinatorialMaps +/// \ingroup PkgCombinatorialMapsRef /*! Basic constructions. \code @@ -12,7 +12,7 @@ \endcode */ /// \defgroup PkgCombinatorialMapsConstructions Constructions -/// \ingroup PkgCombinatorialMaps +/// \ingroup PkgCombinatorialMapsRef /*! High-level operations. \code @@ -20,17 +20,17 @@ \endcode */ /// \defgroup PkgCombinatorialMapsOperations Operations -/// \ingroup PkgCombinatorialMaps +/// \ingroup PkgCombinatorialMapsRef /*! -\addtogroup PkgCombinatorialMaps +\addtogroup PkgCombinatorialMapsRef \cgalPkgDescriptionBegin{Combinatorial Maps,PkgCombinatorialMapsSummary} \cgalPkgPicture{cmap_logo.png} \cgalPkgSummaryBegin \cgalPkgAuthor{Guillaume Damiand} \cgalPkgDesc{This package implements Combinatorial Maps in d dimensions. A combinatorial map is a data structure enabling to represent an orientable subdivided object by describing all the cells of the subdivision (for example in 3D vertices, edges, faces, volumes) and all the incidence and adjacency relationships between these cells. Information can be associated to cells thanks to attributes. In 2D, a combinatorial map is equivalent to a halfedge data structure. The package provides basic creation, modification operations, and several iterators enabling to run through some specific part of the object.} -\cgalPkgManuals{Chapter_Combinatorial_Maps,PkgCombinatorialMaps} +\cgalPkgManuals{Chapter_Combinatorial_Maps,PkgCombinatorialMapsRef} \cgalPkgSummaryEnd \cgalPkgShortInfoBegin \cgalPkgSince{3.9} diff --git a/Cone_spanners_2/doc/Cone_spanners_2/PackageDescription.txt b/Cone_spanners_2/doc/Cone_spanners_2/PackageDescription.txt index f0258b35140..6c2e45d11d1 100644 --- a/Cone_spanners_2/doc/Cone_spanners_2/PackageDescription.txt +++ b/Cone_spanners_2/doc/Cone_spanners_2/PackageDescription.txt @@ -1,9 +1,9 @@ // PRETTY PACKAGE NAME should equal the project title in Doxyfile.in -/// \defgroup PkgConeBasedSpanners Cone-Based Spanners Reference +/// \defgroup PkgConeBasedSpannersRef Cone-Based Spanners Reference /*! -\addtogroup PkgConeBasedSpanners +\addtogroup PkgConeBasedSpannersRef \cgalPkgDescriptionBegin{Cone-Based Spanners,PkgConeBasedSpannersSummary} \cgalPkgPicture{Logo-ConeSpanners.png} @@ -20,7 +20,7 @@ value defined in \cgal, which is still accurate enough for most applications. Moreover, for visualization purpose, this package provides a global function to generate the data and script files used by Gnuplot to plot the constructed graphs. This package also provides options for the Half Yao graph and the Half Theta graph.} -\cgalPkgManuals{Chapter_ConeBasedSpanners,PkgConeBasedSpanners} +\cgalPkgManuals{Chapter_ConeBasedSpanners,PkgConeBasedSpannersRef} \cgalPkgSummaryEnd \cgalPkgShortInfoBegin diff --git a/Cone_spanners_2/include/CGAL/Compute_cone_boundaries_2.h b/Cone_spanners_2/include/CGAL/Compute_cone_boundaries_2.h index 19b61beaf66..2aead7db074 100644 --- a/Cone_spanners_2/include/CGAL/Compute_cone_boundaries_2.h +++ b/Cone_spanners_2/include/CGAL/Compute_cone_boundaries_2.h @@ -44,7 +44,7 @@ namespace CGAL { -/*! \ingroup PkgConeBasedSpanners +/*! \ingroup PkgConeBasedSpannersRef * * \brief The functor for computing the directions of cone boundaries with a given * cone number and a given initial direction. diff --git a/Cone_spanners_2/include/CGAL/Cone_spanners_enum_2.h b/Cone_spanners_2/include/CGAL/Cone_spanners_enum_2.h index 7f7832bfd43..29f37170519 100644 --- a/Cone_spanners_2/include/CGAL/Cone_spanners_enum_2.h +++ b/Cone_spanners_2/include/CGAL/Cone_spanners_enum_2.h @@ -31,7 +31,7 @@ namespace CGAL { - /*! \ingroup PkgConeBasedSpanners + /*! \ingroup PkgConeBasedSpannersRef \brief An enum of the choice of cones in cone spanners. */ diff --git a/Cone_spanners_2/include/CGAL/Construct_theta_graph_2.h b/Cone_spanners_2/include/CGAL/Construct_theta_graph_2.h index 156d5b3e151..313630607ba 100644 --- a/Cone_spanners_2/include/CGAL/Construct_theta_graph_2.h +++ b/Cone_spanners_2/include/CGAL/Construct_theta_graph_2.h @@ -45,7 +45,7 @@ namespace CGAL { -/*! \ingroup PkgConeBasedSpanners +/*! \ingroup PkgConeBasedSpannersRef \brief A template functor for constructing Theta graphs with a given set of 2D points and a given initial direction for the cone boundaries. diff --git a/Cone_spanners_2/include/CGAL/Construct_yao_graph_2.h b/Cone_spanners_2/include/CGAL/Construct_yao_graph_2.h index 621ce9011a6..e9701cbe9d7 100644 --- a/Cone_spanners_2/include/CGAL/Construct_yao_graph_2.h +++ b/Cone_spanners_2/include/CGAL/Construct_yao_graph_2.h @@ -42,7 +42,7 @@ namespace CGAL { -/*! \ingroup PkgConeBasedSpanners +/*! \ingroup PkgConeBasedSpannersRef \brief A template functor for constructing Yao graphs with a given set of 2D points and a given initial direction for the cone boundaries. diff --git a/Cone_spanners_2/include/CGAL/gnuplot_output_2.h b/Cone_spanners_2/include/CGAL/gnuplot_output_2.h index 95ec96f016b..177c0b6e350 100644 --- a/Cone_spanners_2/include/CGAL/gnuplot_output_2.h +++ b/Cone_spanners_2/include/CGAL/gnuplot_output_2.h @@ -46,7 +46,7 @@ namespace CGAL { /* ------ Declarations go first, then implementations follow. ------ */ /*! -* \ingroup PkgConeBasedSpanners +* \ingroup PkgConeBasedSpannersRef * \brief Output a set of files used by Gnuplot to plot `g`. * * The files that are generated for Gnuplot are: diff --git a/Convex_decomposition_3/doc/Convex_decomposition_3/PackageDescription.txt b/Convex_decomposition_3/doc/Convex_decomposition_3/PackageDescription.txt index e572fe2a1be..d2d4c0dbbbc 100644 --- a/Convex_decomposition_3/doc/Convex_decomposition_3/PackageDescription.txt +++ b/Convex_decomposition_3/doc/Convex_decomposition_3/PackageDescription.txt @@ -1,13 +1,13 @@ -/// \defgroup PkgConvexDecomposition3 Convex Decomposition of Polyhedra Reference +/// \defgroup PkgConvexDecomposition3Ref Convex Decomposition of Polyhedra Reference /*! -\addtogroup PkgConvexDecomposition3 +\addtogroup PkgConvexDecomposition3Ref \cgalPkgDescriptionBegin{Convex Decomposition of Polyhedra,PkgConvexDecomposition3Summary} \cgalPkgPicture{Convex_decomposition_3/fig/Convex_decomposition_3-teaser.png} \cgalPkgSummaryBegin \cgalPkgAuthor{Peter Hachenberger} \cgalPkgDesc{This packages provides a function for decomposing a bounded polyhedron into convex sub-polyhedra. The decomposition yields \f$ O(r^2)\f$ convex pieces, where \f$ r\f$ is the number of edges, whose adjacent facets form an angle of more than 180 degrees with respect to the polyhedron's interior. This bound is worst-case optimal. } -\cgalPkgManuals{Chapter_Convex_Decomposition_of_Polyhedra,PkgConvexDecomposition3} +\cgalPkgManuals{Chapter_Convex_Decomposition_of_Polyhedra,PkgConvexDecomposition3Ref} \cgalPkgSummaryEnd \cgalPkgShortInfoBegin \cgalPkgSince{3.5} diff --git a/Convex_decomposition_3/include/CGAL/convex_decomposition_3.h b/Convex_decomposition_3/include/CGAL/convex_decomposition_3.h index f232603ff8f..45ae44ca0f7 100644 --- a/Convex_decomposition_3/include/CGAL/convex_decomposition_3.h +++ b/Convex_decomposition_3/include/CGAL/convex_decomposition_3.h @@ -44,7 +44,7 @@ namespace CGAL { /*! -\ingroup PkgConvexDecomposition3 +\ingroup PkgConvexDecomposition3Ref The function `convex_decomposition_3()` inserts additional facets into the given `Nef_polyhedron_3` `N`, such that each bounded diff --git a/Convex_hull_2/doc/Convex_hull_2/PackageDescription.txt b/Convex_hull_2/doc/Convex_hull_2/PackageDescription.txt index e27762884c3..1979658b512 100644 --- a/Convex_hull_2/doc/Convex_hull_2/PackageDescription.txt +++ b/Convex_hull_2/doc/Convex_hull_2/PackageDescription.txt @@ -1,32 +1,32 @@ -/// \defgroup PkgConvexHull2 2D Convex Hulls and Extreme Points Reference +/// \defgroup PkgConvexHull2Ref 2D Convex Hulls and Extreme Points Reference /// \defgroup PkgConvexHull2Concepts Concepts -/// \ingroup PkgConvexHull2 +/// \ingroup PkgConvexHull2Ref /// \defgroup PkgConvexHull2Traits Traits Classes -/// \ingroup PkgConvexHull2 +/// \ingroup PkgConvexHull2Ref /// \defgroup PkgConvexHull2Functions Convex Hull Functions -/// \ingroup PkgConvexHull2 +/// \ingroup PkgConvexHull2Ref /// \defgroup PkgConvexHull2Convexity Convexity Checking -/// \ingroup PkgConvexHull2 +/// \ingroup PkgConvexHull2Ref /// \defgroup PkgConvexHull2Subsequence Hull Subsequence Functions -/// \ingroup PkgConvexHull2 +/// \ingroup PkgConvexHull2Ref /// \defgroup PkgConvexHull2Extreme Extreme Point Functions -/// \ingroup PkgConvexHull2 +/// \ingroup PkgConvexHull2Ref /*! -\addtogroup PkgConvexHull2 +\addtogroup PkgConvexHull2Ref \cgalPkgDescriptionBegin{2D Convex Hulls and Extreme Points,PkgConvexHull2Summary} \cgalPkgPicture{Convex_hull_2/fig/convex_hull.png} \cgalPkgSummaryBegin \cgalPkgAuthors{Susan Hert and Stefan Schirra} \cgalPkgDesc{This package provides functions for computing convex hulls in two dimensions as well as functions for checking if sets of points are strongly convex are not. There are also a number of functions described for computing particular extreme points and subsequences of hull points, such as the lower and upper hull of a set of points.} -\cgalPkgManuals{Chapter_2D_Convex_Hulls_and_Extreme_Points,PkgConvexHull2} +\cgalPkgManuals{Chapter_2D_Convex_Hulls_and_Extreme_Points,PkgConvexHull2Ref} \cgalPkgSummaryEnd \cgalPkgShortInfoBegin \cgalPkgSince{1.0} diff --git a/Convex_hull_3/doc/Convex_hull_3/PackageDescription.txt b/Convex_hull_3/doc/Convex_hull_3/PackageDescription.txt index 9f0636fa1e3..413d01009b7 100644 --- a/Convex_hull_3/doc/Convex_hull_3/PackageDescription.txt +++ b/Convex_hull_3/doc/Convex_hull_3/PackageDescription.txt @@ -1,13 +1,13 @@ -/// \defgroup PkgConvexHull3 3D Convex Hulls Reference +/// \defgroup PkgConvexHull3Ref 3D Convex Hulls Reference /// \defgroup PkgConvexHull3Concepts Concepts -/// \ingroup PkgConvexHull3 +/// \ingroup PkgConvexHull3Ref /// \defgroup PkgConvexHull3Traits Traits Classes -/// \ingroup PkgConvexHull3 +/// \ingroup PkgConvexHull3Ref /*! \defgroup PkgConvexHull3Functions Convex Hull Functions - \ingroup PkgConvexHull3 + \ingroup PkgConvexHull3Ref The function `convex_hull_3()` computes the convex hull of a given set of three-dimensional points. @@ -17,10 +17,10 @@ degenerate hull may also be possible. */ /// \defgroup PkgConvexityChecking Convexity Checking -/// \ingroup PkgConvexHull3 +/// \ingroup PkgConvexHull3Ref /*! -\addtogroup PkgConvexHull3 +\addtogroup PkgConvexHull3Ref \todo fix or keep the `Default_traits` \cgalPkgDescriptionBegin{3D Convex Hulls,PkgConvexHull3Summary} @@ -28,7 +28,7 @@ degenerate hull may also be possible. \cgalPkgSummaryBegin \cgalPkgAuthors{Susan Hert and Stefan Schirra} \cgalPkgDesc{This package provides functions for computing convex hulls in three dimensions as well as functions for checking if sets of points are strongly convex or not. One can compute the convex hull of a set of points in three dimensions in two ways: using a static algorithm or using a triangulation to get a fully dynamic computation.} -\cgalPkgManuals{Chapter_3D_Convex_Hulls,PkgConvexHull3} +\cgalPkgManuals{Chapter_3D_Convex_Hulls,PkgConvexHull3Ref} \cgalPkgSummaryEnd \cgalPkgShortInfoBegin \cgalPkgSince{1.1} diff --git a/Convex_hull_d/doc/Convex_hull_d/CGAL/Convex_hull_d.h b/Convex_hull_d/doc/Convex_hull_d/CGAL/Convex_hull_d.h index ec21aaa1d83..abf6ea4b567 100644 --- a/Convex_hull_d/doc/Convex_hull_d/CGAL/Convex_hull_d.h +++ b/Convex_hull_d/doc/Convex_hull_d/CGAL/Convex_hull_d.h @@ -1,7 +1,7 @@ namespace CGAL { /*! -\ingroup PkgConvexHullD +\ingroup PkgConvexHullDRef \deprecated This package is deprecated since the version 4.6 of \cgal. The package \ref PkgTriangulationsSummary should be used instead. diff --git a/Convex_hull_d/doc/Convex_hull_d/CGAL/Convex_hull_d_traits_3.h b/Convex_hull_d/doc/Convex_hull_d/CGAL/Convex_hull_d_traits_3.h index 3719f9fc270..5c533959ebc 100644 --- a/Convex_hull_d/doc/Convex_hull_d/CGAL/Convex_hull_d_traits_3.h +++ b/Convex_hull_d/doc/Convex_hull_d/CGAL/Convex_hull_d_traits_3.h @@ -1,7 +1,7 @@ namespace CGAL { /*! -\ingroup PkgConvexHullD +\ingroup PkgConvexHullDRef \deprecated This package is deprecated since the version 4.6 of \cgal. The package \ref PkgTriangulationsSummary should be used instead. diff --git a/Convex_hull_d/doc/Convex_hull_d/CGAL/Delaunay_d.h b/Convex_hull_d/doc/Convex_hull_d/CGAL/Delaunay_d.h index eb83d360fb8..1d31f4bc46c 100644 --- a/Convex_hull_d/doc/Convex_hull_d/CGAL/Delaunay_d.h +++ b/Convex_hull_d/doc/Convex_hull_d/CGAL/Delaunay_d.h @@ -1,7 +1,7 @@ namespace CGAL { /*! -\ingroup PkgConvexHullD +\ingroup PkgConvexHullDRef \deprecated This package is deprecated since the version 4.6 of \cgal. The package \ref PkgTriangulationsSummary should be used instead. diff --git a/Convex_hull_d/doc/Convex_hull_d/PackageDescription.txt b/Convex_hull_d/doc/Convex_hull_d/PackageDescription.txt index b0a8e105d97..a15a32b6ac6 100644 --- a/Convex_hull_d/doc/Convex_hull_d/PackageDescription.txt +++ b/Convex_hull_d/doc/Convex_hull_d/PackageDescription.txt @@ -1,15 +1,15 @@ -/// \defgroup PkgConvexHullD dD Convex Hulls and Delaunay Triangulations Reference +/// \defgroup PkgConvexHullDRef dD Convex Hulls and Delaunay Triangulations Reference /// \defgroup PkgConvexHullDConcepts Concepts -/// \ingroup PkgConvexHullD +/// \ingroup PkgConvexHullDRef /*! -\addtogroup PkgConvexHullD +\addtogroup PkgConvexHullDRef \todo check generated documentation \cgalPkgDescriptionBegin{dD Convex Hulls and Delaunay Triangulations,PkgConvexHullDSummary} \cgalPkgPicture{convex_hull_d-teaser.png} \cgalPkgSummaryBegin \cgalPkgAuthors{Susan Hert and Michael Seel} \cgalPkgDesc{This package provides functions for computing convex hulls and Delaunay triangulations in \f$ d\f$-dimensional Euclidean space.} -\cgalPkgManuals{Chapter_dD_Convex_Hulls_and_Delaunay_Triangulations,PkgConvexHullD} +\cgalPkgManuals{Chapter_dD_Convex_Hulls_and_Delaunay_Triangulations,PkgConvexHullDRef} \cgalPkgSummaryEnd \cgalPkgShortInfoBegin \cgalPkgSince{2.3} diff --git a/Documentation/doc/Documentation/Installation.txt b/Documentation/doc/Documentation/Installation.txt index 20354fe18c6..86ec4c3933b 100644 --- a/Documentation/doc/Documentation/Installation.txt +++ b/Documentation/doc/Documentation/Installation.txt @@ -439,7 +439,7 @@ of \sc{Gmp} and \sc{Mpfr}, which can be downloaded with the installer \sc{zlib} is a data compression library, and is essential for the component libCGAL_ImageIO. -In \cgal this library is used in the examples of the \ref PkgSurfaceMesher3 package. +In \cgal this library is used in the examples of the \ref PkgSurfaceMesher3Ref package. If it is not already on your system, for instance, on Windows, you can download it from `http://www.zlib.net/`. @@ -511,7 +511,7 @@ represented using \sc{Mpfr} reliable floating-point numbers. It is based on the libraries \sc{Gmp} and \sc{Mpfr}. In the setting of \cgal, this library is optional: it is used by some models of the -\ref PkgAlgebraicKerneld "Algebraic Kernel". +\ref PkgAlgebraicKerneldRef "Algebraic Kernel". \sc{Mpfi} can be downloaded from `http://mpfi.gforge.inria.fr/`. Version 1.4 or higher is recommended. @@ -520,7 +520,7 @@ optional: it is used by some models of the \sc{Rs} (Real Solutions) is devoted to the study of the real roots of polynomial systems with a finite number of complex roots (including univariate polynomials). In \cgal, \sc{Rs} is used by one model of the -\ref PkgAlgebraicKerneld "Algebraic Kernel". +\ref PkgAlgebraicKerneldRef "Algebraic Kernel". \sc{Rs} is freely distributable for non-commercial use. You can download it from `http://vegas.loria.fr/rs/`. Actually, the \sc{Rs} package also includes \sc{Rs3}, the @@ -543,11 +543,11 @@ to speed up operations of the Polynomial package, such as GCDs. It is recommende \sc{Eigen} is a `C++` template library for linear algebra. \sc{Eigen} supports all matrix sizes, various matrix decomposition methods and sparse linear solvers. -In \cgal, \sc{Eigen} provides sparse linear solvers in the \ref PkgPoissonSurfaceReconstruction -and the \ref PkgSurfaceParameterization packages. +In \cgal, \sc{Eigen} provides sparse linear solvers in the \ref PkgPoissonSurfaceReconstructionRef +and the \ref PkgSurfaceParameterizationRef packages. -In addition, \sc{Eigen} also provides singular value decomposition for the \ref PkgJet_fitting_3 -and the \ref PkgRidges_3 packages. +In addition, \sc{Eigen} also provides singular value decomposition for the \ref PkgJet_fitting_3Ref +and the \ref PkgRidges_3Ref packages. The \sc{Eigen} web site is `http://eigen.tuxfamily.org`. @@ -557,7 +557,7 @@ The \sc{Esbtl} (Easy Structural Biology Template Library) is a library that allo the handling of \sc{Pdb} data. In \cgal the \sc{Esbtl} is used in an example of the -\ref PkgSkinSurface3 package. +\ref PkgSkinSurface3Ref package. It can be downloaded from `http://esbtl.sourceforge.net/`. @@ -576,7 +576,7 @@ The \sc{Tbb} web site is `http: the LAS format (or the compressed LAZ format). In \cgal, \sc{LASlib} is used to provide input and output functions in -the \ref PkgPointSetProcessing package. +the \ref PkgPointSetProcessingRef package. The \sc{LASlib} web site is `https://rapidlasso.com/lastools/`. \sc{LASlib} @@ -589,7 +589,7 @@ CMake based install procedure. \sc{OpenCV} (Open Computer Vision) is a library designed for computer vision, computer graphics and machine learning. -In \cgal, \sc{OpenCV} is used by the \ref PkgClassification package. +In \cgal, \sc{OpenCV} is used by the \ref PkgClassificationRef package. The \sc{OpenCV} web site is `http://opencv.org/`. diff --git a/Envelope_2/doc/Envelope_2/CGAL/Envelope_diagram_1.h b/Envelope_2/doc/Envelope_2/CGAL/Envelope_diagram_1.h index 5458eeee9f3..8bc3b12b7e4 100644 --- a/Envelope_2/doc/Envelope_2/CGAL/Envelope_diagram_1.h +++ b/Envelope_2/doc/Envelope_2/CGAL/Envelope_diagram_1.h @@ -1,7 +1,7 @@ namespace CGAL { /*! -\ingroup PkgEnvelope2 +\ingroup PkgEnvelope2Ref This class is the default envelope-diagram class used by envelope functions to represent the minimization or the maximization diagram of a set of curves. diff --git a/Envelope_2/doc/Envelope_2/CGAL/envelope_2.h b/Envelope_2/doc/Envelope_2/CGAL/envelope_2.h index b6c9172ef2e..d45a0463b5f 100644 --- a/Envelope_2/doc/Envelope_2/CGAL/envelope_2.h +++ b/Envelope_2/doc/Envelope_2/CGAL/envelope_2.h @@ -1,7 +1,7 @@ namespace CGAL { /*! -\ingroup PkgEnvelope2 +\ingroup PkgEnvelope2Ref Computes the lower envelope of a set of curves in \f$ \mathbb{R}^2\f$, as given by the range `[begin, end)`. The lower envelope is @@ -19,7 +19,7 @@ EnvelopeDiagram& diag); namespace CGAL { /*! -\ingroup PkgEnvelope2 +\ingroup PkgEnvelope2Ref Computes the lower envelope of a set of \f$ x\f$-monotone curves in \f$ \mathbb{R}^2\f$, as given by the range `[begin, end)`. The lower @@ -38,7 +38,7 @@ EnvelopeDiagram& diag); namespace CGAL { /*! -\ingroup PkgEnvelope2 +\ingroup PkgEnvelope2Ref Computes the upper envelope of a set of curves in \f$ \mathbb{R}^2\f$, as given by the range `[begin, end)`. The upper envelope is @@ -56,7 +56,7 @@ EnvelopeDiagram& diag); namespace CGAL { /*! -\ingroup PkgEnvelope2 +\ingroup PkgEnvelope2Ref Computes the upper envelope of a set of \f$ x\f$-monotone curves in \f$ \mathbb{R}^2\f$, as given by the range `[begin, end)`. The upper diff --git a/Envelope_2/doc/Envelope_2/PackageDescription.txt b/Envelope_2/doc/Envelope_2/PackageDescription.txt index 23f43104d00..d9129901f68 100644 --- a/Envelope_2/doc/Envelope_2/PackageDescription.txt +++ b/Envelope_2/doc/Envelope_2/PackageDescription.txt @@ -1,15 +1,15 @@ -/// \defgroup PkgEnvelope2 2D Envelopes Reference +/// \defgroup PkgEnvelope2Ref 2D Envelopes Reference /// \defgroup PkgEnvelope2Concepts Concepts -/// \ingroup PkgEnvelope2 +/// \ingroup PkgEnvelope2Ref /*! -\addtogroup PkgEnvelope2 +\addtogroup PkgEnvelope2Ref \todo check generated documentation \cgalPkgDescriptionBegin{2D Envelopes,PkgEnvelope2Summary} \cgalPkgPicture{Envelope_2/fig/Envelope_2.png} \cgalPkgSummaryBegin \cgalPkgAuthor{Ron Wein} \cgalPkgDesc{This package consits of functions that computes the lower (or upper) envelope of a set of arbitrary curves in 2D. The output is represented as an envelope diagram, namely a subdivision of the \f$ x\f$-axis into intervals, such that the identity of the curves that induce the envelope on each interval is unique.} -\cgalPkgManuals{Chapter_Envelopes_of_Curves_in_2D,PkgEnvelope2} +\cgalPkgManuals{Chapter_Envelopes_of_Curves_in_2D,PkgEnvelope2Ref} \cgalPkgSummaryEnd \cgalPkgShortInfoBegin \cgalPkgSince{3.3} diff --git a/Envelope_3/doc/Envelope_3/CGAL/Env_plane_traits_3.h b/Envelope_3/doc/Envelope_3/CGAL/Env_plane_traits_3.h index 47c5254d1db..c1a839a38be 100644 --- a/Envelope_3/doc/Envelope_3/CGAL/Env_plane_traits_3.h +++ b/Envelope_3/doc/Envelope_3/CGAL/Env_plane_traits_3.h @@ -1,7 +1,7 @@ namespace CGAL { /*! -\ingroup PkgEnvelope3 +\ingroup PkgEnvelope3Ref The traits class `Env_plane_traits_3` models the `EnvelopeTraits_3` concept, and is used for the construction of lower and upper envelopes of planes diff --git a/Envelope_3/doc/Envelope_3/CGAL/Env_sphere_traits_3.h b/Envelope_3/doc/Envelope_3/CGAL/Env_sphere_traits_3.h index faffe652e84..157ad738d8f 100644 --- a/Envelope_3/doc/Envelope_3/CGAL/Env_sphere_traits_3.h +++ b/Envelope_3/doc/Envelope_3/CGAL/Env_sphere_traits_3.h @@ -1,7 +1,7 @@ namespace CGAL { /*! -\ingroup PkgEnvelope3 +\ingroup PkgEnvelope3Ref The traits class `Env_sphere_traits_3` models the `EnvelopeTraits_3` concept, and is used for the construction of lower and upper envelopes diff --git a/Envelope_3/doc/Envelope_3/CGAL/Env_surface_data_traits_3.h b/Envelope_3/doc/Envelope_3/CGAL/Env_surface_data_traits_3.h index 30dbf206ca1..9c8fbdec403 100644 --- a/Envelope_3/doc/Envelope_3/CGAL/Env_surface_data_traits_3.h +++ b/Envelope_3/doc/Envelope_3/CGAL/Env_surface_data_traits_3.h @@ -1,7 +1,7 @@ namespace CGAL { /*! -\ingroup PkgEnvelope3 +\ingroup PkgEnvelope3Ref The class `Env_surface_data_traits_3` is a model of the `EnvelopeTraits_3` concept and serves as a decorator class that allows the extension of the surfaces diff --git a/Envelope_3/doc/Envelope_3/CGAL/Env_triangle_traits_3.h b/Envelope_3/doc/Envelope_3/CGAL/Env_triangle_traits_3.h index 0043b162c32..87ade2cb2ff 100644 --- a/Envelope_3/doc/Envelope_3/CGAL/Env_triangle_traits_3.h +++ b/Envelope_3/doc/Envelope_3/CGAL/Env_triangle_traits_3.h @@ -1,7 +1,7 @@ namespace CGAL { /*! -\ingroup PkgEnvelope3 +\ingroup PkgEnvelope3Ref The traits class `Env_triangle_traits_3` models the `EnvelopeTraits_3` concept, and is used for the construction of lower and upper envelopes diff --git a/Envelope_3/doc/Envelope_3/CGAL/envelope_3.h b/Envelope_3/doc/Envelope_3/CGAL/envelope_3.h index d5c6b319111..d281cdb698d 100644 --- a/Envelope_3/doc/Envelope_3/CGAL/envelope_3.h +++ b/Envelope_3/doc/Envelope_3/CGAL/envelope_3.h @@ -1,7 +1,7 @@ namespace CGAL { /*! -\ingroup PkgEnvelope3 +\ingroup PkgEnvelope3Ref The class-template `Envelope_diagram_2` represents the minimization diagram that corresponds to the lower envelope of a set of curves, or the @@ -165,7 +165,7 @@ Envelope_diagram_2 (EnvTraits *traits); namespace CGAL { /*! -\ingroup PkgEnvelope3 +\ingroup PkgEnvelope3Ref Computes the lower envelope of a set of surfaces in \f$ \mathbb{R}^3\f$, as given by the range `[begin, end)`. The lower envelope is @@ -182,7 +182,7 @@ Envelope_diagram_2& diag); namespace CGAL { /*! -\ingroup PkgEnvelope3 +\ingroup PkgEnvelope3Ref Computes the lower envelope of a set of \f$ xy\f$-monotone surfaces in \f$ \mathbb{R}^3\f$, as given by the range `[begin, end)`. The lower @@ -199,7 +199,7 @@ Envelope_diagram_2& diag); namespace CGAL { /*! -\ingroup PkgEnvelope3 +\ingroup PkgEnvelope3Ref Computes the upper envelope of a set of surfaces in \f$ \mathbb{R}^3\f$, as given by the range `[begin, end)`. The upper envelope is @@ -216,7 +216,7 @@ Envelope_diagram_2& diag); namespace CGAL { /*! -\ingroup PkgEnvelope3 +\ingroup PkgEnvelope3Ref Computes the upper envelope of a set of \f$ xy\f$-monotone surfaces in \f$ \mathbb{R}^3\f$, as given by the range `[begin, end)`. The lower diff --git a/Envelope_3/doc/Envelope_3/PackageDescription.txt b/Envelope_3/doc/Envelope_3/PackageDescription.txt index afbadf2eaf2..104370cc5fa 100644 --- a/Envelope_3/doc/Envelope_3/PackageDescription.txt +++ b/Envelope_3/doc/Envelope_3/PackageDescription.txt @@ -1,15 +1,15 @@ -/// \defgroup PkgEnvelope3 3D Envelopes Reference +/// \defgroup PkgEnvelope3Ref 3D Envelopes Reference /// \defgroup PkgEnvelope3Concepts Concepts -/// \ingroup PkgEnvelope3 +/// \ingroup PkgEnvelope3Ref /*! -\addtogroup PkgEnvelope3 +\addtogroup PkgEnvelope3Ref \todo check generated documentation \cgalPkgDescriptionBegin{3D Envelopes,PkgEnvelope3Summary} \cgalPkgPicture{Envelope_3/fig/Envelope_3.png} \cgalPkgSummaryBegin \cgalPkgAuthors{Dan Halperin, Michal Meyerovitch, Ron Wein, and Baruch Zukerman} \cgalPkgDesc{This package consits of functions that compute the lower (or upper) envelope of a set of arbitrary surfaces in 3D. The output is represented as an 2D envelope diagram, namely a planar subdivision such that the identity of the surfaces that induce the envelope over each diagram cell is unique.} -\cgalPkgManuals{Chapter_Envelopes_of_Surfaces_in_3D,PkgEnvelope3} +\cgalPkgManuals{Chapter_Envelopes_of_Surfaces_in_3D,PkgEnvelope3Ref} \cgalPkgSummaryEnd \cgalPkgShortInfoBegin \cgalPkgSince{3.3} diff --git a/Generalized_map/doc/Generalized_map/PackageDescription.txt b/Generalized_map/doc/Generalized_map/PackageDescription.txt index acbdf16ff7e..3193c61df9b 100644 --- a/Generalized_map/doc/Generalized_map/PackageDescription.txt +++ b/Generalized_map/doc/Generalized_map/PackageDescription.txt @@ -1,19 +1,19 @@ -/// \defgroup PkgGeneralizedMaps Generalized Maps Reference +/// \defgroup PkgGeneralizedMapsRef Generalized Maps Reference /// \defgroup PkgGeneralizedMapsConcepts Concepts -/// \ingroup PkgGeneralizedMaps +/// \ingroup PkgGeneralizedMapsRef /// \defgroup PkgGeneralizedMapsClasses Classes -/// \ingroup PkgGeneralizedMaps +/// \ingroup PkgGeneralizedMapsRef /*! -\addtogroup PkgGeneralizedMaps +\addtogroup PkgGeneralizedMapsRef \cgalPkgDescriptionBegin{Generalized Maps,PkgGeneralizedMapsSummary} \cgalPkgPicture{gmap_logo.png} \cgalPkgSummaryBegin \cgalPkgAuthor{Guillaume Damiand} \cgalPkgDesc{This package implements Generalized Maps in d dimensions. A generalized map is a data structure enabling to represent an orientable or non orientable subdivided object by describing all the cells of the subdivision (for example in 3D vertices, edges, faces, volumes) and all the incidence and adjacency relationships between these cells. Information can be associated to cells thanks to attributes. The package provides basic creation, modification operations, and several iterators enabling to run through some specific part of the object.} -\cgalPkgManuals{Chapter_Generalized_Maps,PkgGeneralizedMaps} +\cgalPkgManuals{Chapter_Generalized_Maps,PkgGeneralizedMapsRef} \cgalPkgSummaryEnd \cgalPkgShortInfoBegin \cgalPkgSince{4.9} diff --git a/Generator/doc/Generator/CGAL/Combination_enumerator.h b/Generator/doc/Generator/CGAL/Combination_enumerator.h index 80a57e20784..5e1873882c0 100644 --- a/Generator/doc/Generator/CGAL/Combination_enumerator.h +++ b/Generator/doc/Generator/CGAL/Combination_enumerator.h @@ -1,6 +1,6 @@ namespace CGAL { -/// \addtogroup PkgGenerators +/// \addtogroup PkgGeneratorsRef /// @{ /*! diff --git a/Generator/doc/Generator/CGAL/Random.h b/Generator/doc/Generator/CGAL/Random.h index ead823642c6..653aa3240ca 100644 --- a/Generator/doc/Generator/CGAL/Random.h +++ b/Generator/doc/Generator/CGAL/Random.h @@ -1,7 +1,7 @@ namespace CGAL { /*! -\ingroup PkgGenerators +\ingroup PkgGeneratorsRef The class `Random` is a random numbers generator. It generates uniformly distributed random `bool`, `int` and `double`. It can be used as the random number generating function object in the @@ -180,7 +180,7 @@ bool operator == ( Random const& random2) const; }; /* end Random */ /*! - \ingroup PkgGenerators + \ingroup PkgGeneratorsRef The global function `get_default_random()` returns the default random numbers generator used for the generator functions and classes. The returned generator is thread local. @@ -188,7 +188,7 @@ bool operator == ( Random const& random2) const; Random &get_default_random(); /*! - \ingroup PkgGenerators + \ingroup PkgGeneratorsRef \deprecated The variable `default_random` was the default random numbers generator used for the generator functions and classes. Deprecated. Use `get_default_random()` instead. diff --git a/Generator/doc/Generator/CGAL/point_generators_2.h b/Generator/doc/Generator/CGAL/point_generators_2.h index 449f0444a20..4db77fafc06 100644 --- a/Generator/doc/Generator/CGAL/point_generators_2.h +++ b/Generator/doc/Generator/CGAL/point_generators_2.h @@ -1,6 +1,6 @@ namespace CGAL { -/// \addtogroup PkgGenerators +/// \addtogroup PkgGeneratorsRef /// @{ /*! diff --git a/Generator/doc/Generator/CGAL/point_generators_3.h b/Generator/doc/Generator/CGAL/point_generators_3.h index 631637941df..cb87e09ed95 100644 --- a/Generator/doc/Generator/CGAL/point_generators_3.h +++ b/Generator/doc/Generator/CGAL/point_generators_3.h @@ -1,7 +1,7 @@ namespace CGAL { /*! -\ingroup PkgGenerators +\ingroup PkgGeneratorsRef \brief generates a given number of points on a cubic grid whose size is determined by the number of points to be generated. diff --git a/Generator/doc/Generator/CGAL/point_generators_d.h b/Generator/doc/Generator/CGAL/point_generators_d.h index aa103faaa8b..b064051adac 100644 --- a/Generator/doc/Generator/CGAL/point_generators_d.h +++ b/Generator/doc/Generator/CGAL/point_generators_d.h @@ -1,7 +1,7 @@ namespace CGAL { /*! -\ingroup PkgGenerators +\ingroup PkgGeneratorsRef generates a given number of points on a cubic grid in any dimension whose size is determined by the number of points to be generated. diff --git a/Generator/doc/Generator/CGAL/random_convex_hull_in_disc_2.h b/Generator/doc/Generator/CGAL/random_convex_hull_in_disc_2.h index 3fd55c14b06..3800a0f7491 100644 --- a/Generator/doc/Generator/CGAL/random_convex_hull_in_disc_2.h +++ b/Generator/doc/Generator/CGAL/random_convex_hull_in_disc_2.h @@ -1,7 +1,7 @@ namespace CGAL { /*! -\ingroup PkgGenerators +\ingroup PkgGeneratorsRef \brief Computes a random convex polygon as the convex hull of \f$ n \f$ random points in a disc centered at the origin with radius `radius`. diff --git a/Generator/doc/Generator/CGAL/random_convex_set_2.h b/Generator/doc/Generator/CGAL/random_convex_set_2.h index 750bc06592d..dea39b97031 100644 --- a/Generator/doc/Generator/CGAL/random_convex_set_2.h +++ b/Generator/doc/Generator/CGAL/random_convex_set_2.h @@ -1,7 +1,7 @@ namespace CGAL { /*! -\ingroup PkgGenerators +\ingroup PkgGeneratorsRef \brief computes a random convex planar point set of given size where the points are drawn from a specific domain. diff --git a/Generator/doc/Generator/CGAL/random_polygon_2.h b/Generator/doc/Generator/CGAL/random_polygon_2.h index 1cb14cd4fdd..be9c8766f4b 100644 --- a/Generator/doc/Generator/CGAL/random_polygon_2.h +++ b/Generator/doc/Generator/CGAL/random_polygon_2.h @@ -1,7 +1,7 @@ namespace CGAL { /*! -\ingroup PkgGenerators +\ingroup PkgGeneratorsRef \brief computes a random simple polygon by writing its vertices (oriented counterclockwise) to `result`. The polygon generated will have a number diff --git a/Generator/doc/Generator/CGAL/random_selection.h b/Generator/doc/Generator/CGAL/random_selection.h index 173008e7fa4..b1460b86816 100644 --- a/Generator/doc/Generator/CGAL/random_selection.h +++ b/Generator/doc/Generator/CGAL/random_selection.h @@ -1,7 +1,7 @@ namespace CGAL { /*! -\ingroup PkgGenerators +\ingroup PkgGeneratorsRef \brief chooses `n` items at random from a random access iterator range which is useful to produce degenerate input data sets with multiple entries of identical items. diff --git a/Generator/doc/Generator/PackageDescription.txt b/Generator/doc/Generator/PackageDescription.txt index 2596c89d39d..22e04e8b38e 100644 --- a/Generator/doc/Generator/PackageDescription.txt +++ b/Generator/doc/Generator/PackageDescription.txt @@ -1,14 +1,14 @@ -/// \defgroup PkgGenerators Geometric Object Generators Reference +/// \defgroup PkgGeneratorsRef Geometric Object Generators Reference /// \defgroup PkgGeneratorsConcepts Concepts -/// \ingroup PkgGenerators +/// \ingroup PkgGeneratorsRef /*! -\addtogroup PkgGenerators +\addtogroup PkgGeneratorsRef \cgalPkgDescriptionBegin{Geometric Object Generators,PkgGeneratorsSummary} \cgalPkgPicture{dice.png} \cgalPkgSummaryBegin \cgalPkgAuthors{Pedro M. M. de Castro, Olivier Devillers, Susan Hert, Michael Hoffmann, Lutz Kettner, Sven Schönherr, Alexandru Tifrea, and Maxime Gimeno} \cgalPkgDesc{This package provides a variety of generators for geometric objects. They are useful as synthetic test data sets, e.g. for testing algorithms on degenerate object sets and for performance analysis. } -\cgalPkgManuals{Chapter_Geometric_Object_Generators,PkgGenerators} +\cgalPkgManuals{Chapter_Geometric_Object_Generators,PkgGeneratorsRef} \cgalPkgSummaryEnd \cgalPkgShortInfoBegin \cgalPkgSince{1.0} diff --git a/Geomview/doc/Geomview/CGAL/IO/Geomview_stream.h b/Geomview/doc/Geomview/CGAL/IO/Geomview_stream.h index 3b6cc552736..d189bb8367f 100644 --- a/Geomview/doc/Geomview/CGAL/IO/Geomview_stream.h +++ b/Geomview/doc/Geomview/CGAL/IO/Geomview_stream.h @@ -1,7 +1,7 @@ namespace CGAL { /*! - \ingroup PkgGeomview + \ingroup PkgGeomviewRef An object of the class `Geomview_stream` is a stream in which geometric objects can be inserted and where geometric objects can be extracted @@ -256,7 +256,7 @@ Geomview_stream& operator<<(Geomview_stream& gs, const Point_2& p); /// \addtogroup GeomviewOutput Output Operators for CGAL Kernel Classes -/// \ingroup PkgGeomview +/// \ingroup PkgGeomviewRef /// The following classes of the \cgal kernel have output /// operators. 2D objects are embedded in the `xy`-plane. /// @{ @@ -380,7 +380,7 @@ operator<<(Geomview_stream& gs, const Bbox_3& b); /// @} /// \addtogroup GeomviewInput Input Operators for CGAL Kernel Classes -/// \ingroup PkgGeomview +/// \ingroup PkgGeomviewRef /// An input operator is provided for points. The user has to select /// a point on the pick plane with the right mouse button. The pick plane /// can be moved anywhere with the left mouse button, before a point is entered. @@ -398,7 +398,7 @@ operator>>(Geomview_stream& gs, Point_3& p); /// @} /// \addtogroup GeomviewOutputClasses Output Operators for CGAL Basic Library Classes -/// \ingroup PkgGeomview +/// \ingroup PkgGeomviewRef /// Output operators are provided for polyhedral surfaces, as well as for 3D /// and 2D triangulations. The latter allow to visualize terrrains if the /// point type isa 3D point. diff --git a/Geomview/doc/Geomview/PackageDescription.txt b/Geomview/doc/Geomview/PackageDescription.txt index 7e598818921..fa1a6de594b 100644 --- a/Geomview/doc/Geomview/PackageDescription.txt +++ b/Geomview/doc/Geomview/PackageDescription.txt @@ -1,13 +1,13 @@ -/// \defgroup PkgGeomview Geomview Reference +/// \defgroup PkgGeomviewRef Geomview Reference /*! -\addtogroup PkgGeomview +\addtogroup PkgGeomviewRef \todo check generated documentation \cgalPkgDescriptionBegin{Geomview,PkgGeomviewSummary} \cgalPkgPicture{geomview.png} \cgalPkgSummaryBegin \cgalPkgAuthors{Andreas Fabri and Sylvain Pion} \cgalPkgDesc{This package implements an interface to Geomview, an interactive 3D viewing program, originally developed at the Geometry Center in Minneapolis.} -\cgalPkgManuals{Chapter_Geomview,PkgGeomview} +\cgalPkgManuals{Chapter_Geomview,PkgGeomviewRef} \cgalPkgSummaryEnd \cgalPkgShortInfoBegin \cgalPkgSince{2.0} diff --git a/GraphicsView/doc/GraphicsView/PackageDescription.txt b/GraphicsView/doc/GraphicsView/PackageDescription.txt index 01513917180..93e9c93f279 100644 --- a/GraphicsView/doc/GraphicsView/PackageDescription.txt +++ b/GraphicsView/doc/GraphicsView/PackageDescription.txt @@ -1,20 +1,20 @@ -/// \defgroup PkgGraphicsView CGAL and the Qt Graphics View Framework Reference +/// \defgroup PkgGraphicsViewRef CGAL and the Qt Graphics View Framework Reference /// \defgroup PkgGraphicsViewGraphicsItemClasses Graphics Item Classes -/// \ingroup PkgGraphicsView +/// \ingroup PkgGraphicsViewRef /// \defgroup PkgGraphicsViewInputClasses Input Classes -/// \ingroup PkgGraphicsView +/// \ingroup PkgGraphicsViewRef /// \defgroup PkgGraphicsViewMiscClasses Miscellaneous Classes -/// \ingroup PkgGraphicsView +/// \ingroup PkgGraphicsViewRef /*! -\addtogroup PkgGraphicsView +\addtogroup PkgGraphicsViewRef \cgalPkgDescriptionBegin{CGAL and the Qt Graphics View Framework,PkgGraphicsViewSummary} \cgalPkgPicture{detail.png} \cgalPkgSummaryBegin \cgalPkgAuthors{Andreas Fabri and Laurent Rineau} \cgalPkgDesc{This package provides classes for displaying \cgal objects and data structures in the Qt 5 Graphics View Framework.} -\cgalPkgManuals{Chapter_CGAL_and_the_Qt_Graphics_View_Framework,PkgGraphicsView} +\cgalPkgManuals{Chapter_CGAL_and_the_Qt_Graphics_View_Framework,PkgGraphicsViewRef} \cgalPkgSummaryEnd \cgalPkgShortInfoBegin \cgalPkgSince{3.4} diff --git a/HalfedgeDS/doc/HalfedgeDS/PackageDescription.txt b/HalfedgeDS/doc/HalfedgeDS/PackageDescription.txt index bca353bfb67..c0c6af84452 100644 --- a/HalfedgeDS/doc/HalfedgeDS/PackageDescription.txt +++ b/HalfedgeDS/doc/HalfedgeDS/PackageDescription.txt @@ -1,31 +1,31 @@ -/// \defgroup PkgHDS Halfedge Data Structures Reference +/// \defgroup PkgHDSRef Halfedge Data Structures Reference /// \defgroup PkgHDSConcepts Concepts -/// \ingroup PkgHDS +/// \ingroup PkgHDSRef /// \defgroup PkgHDS_HDS Halfedge Data Structures -/// \ingroup PkgHDS +/// \ingroup PkgHDSRef /// \defgroup PkgHDS_Items Item Classes -/// \ingroup PkgHDS +/// \ingroup PkgHDSRef /// \defgroup PkgHDS_VHF Vertices, Halfedges, Faces -/// \ingroup PkgHDS +/// \ingroup PkgHDSRef /// \defgroup PkgHDS_Decorators Decorators -/// \ingroup PkgHDS +/// \ingroup PkgHDSRef /// Classes that provide additional functions /// to examine and to modify a halfedge data structure. /*! -\addtogroup PkgHDS +\addtogroup PkgHDSRef \todo check generated documentation \cgalPkgDescriptionBegin{Halfedge Data Structures,PkgHDSSummary} \cgalPkgPicture{HalfedgeDS/fig/HalfedgeDS-teaser-small.png} \cgalPkgSummaryBegin \cgalPkgAuthor{Lutz Kettner} \cgalPkgDesc{A halfedge data structure is an edge-centered data structure capable of maintaining incidence information of vertices, edges and faces, for example for planar maps, polyhedra, or other orientable, two-dimensional surfaces embedded in arbitrary dimension. Each edge is decomposed into two halfedges with opposite orientations. One incident face and one incident vertex are stored in each halfedge. For each face and each vertex, one incident halfedge is stored. Reduced variants of the halfedge data structure can omit some of these information, for example the halfedge pointers in faces or the storage of faces at all.} -\cgalPkgManuals{Chapter_Halfedge_Data_Structures,PkgHDS} +\cgalPkgManuals{Chapter_Halfedge_Data_Structures,PkgHDSRef} \cgalPkgSummaryEnd \cgalPkgShortInfoBegin \cgalPkgSince{1.0} diff --git a/Inscribed_areas/doc/Inscribed_areas/CGAL/Extremal_polygon_traits_2.h b/Inscribed_areas/doc/Inscribed_areas/CGAL/Extremal_polygon_traits_2.h index 4cbe9351891..106392639d5 100644 --- a/Inscribed_areas/doc/Inscribed_areas/CGAL/Extremal_polygon_traits_2.h +++ b/Inscribed_areas/doc/Inscribed_areas/CGAL/Extremal_polygon_traits_2.h @@ -1,7 +1,7 @@ namespace CGAL { /*! -\ingroup PkgInscribedAreas +\ingroup PkgInscribedAreasRef \cgalAdvancedClass \cgalAdvancedBegin @@ -105,7 +105,7 @@ Orientation_2 orientation_2_object(); }; /* end Extremal_polygon_area_traits_2 */ /*! -\ingroup PkgInscribedAreas +\ingroup PkgInscribedAreasRef \cgalAdvancedClass \cgalAdvancedBegin diff --git a/Inscribed_areas/doc/Inscribed_areas/CGAL/Largest_empty_iso_rectangle_2.h b/Inscribed_areas/doc/Inscribed_areas/CGAL/Largest_empty_iso_rectangle_2.h index 716236ecf76..f464fb1fdee 100644 --- a/Inscribed_areas/doc/Inscribed_areas/CGAL/Largest_empty_iso_rectangle_2.h +++ b/Inscribed_areas/doc/Inscribed_areas/CGAL/Largest_empty_iso_rectangle_2.h @@ -2,7 +2,7 @@ namespace CGAL { /*! -\ingroup PkgInscribedAreas +\ingroup PkgInscribedAreasRef Given a set of points in the plane, the class `Largest_empty_iso_rectangle_2` is a data structure that maintains an iso-rectangle with the largest area among diff --git a/Inscribed_areas/doc/Inscribed_areas/CGAL/extremal_polygon_2.h b/Inscribed_areas/doc/Inscribed_areas/CGAL/extremal_polygon_2.h index ebc2093435c..08c4b2a7031 100644 --- a/Inscribed_areas/doc/Inscribed_areas/CGAL/extremal_polygon_2.h +++ b/Inscribed_areas/doc/Inscribed_areas/CGAL/extremal_polygon_2.h @@ -1,7 +1,7 @@ namespace CGAL { /*! -\ingroup PkgInscribedAreas +\ingroup PkgInscribedAreasRef computes a maximal (as specified by `t`) inscribed `k`-gon of the convex polygon described by [`points_begin`, @@ -49,7 +49,7 @@ const Traits& t); /*! -\ingroup PkgInscribedAreas +\ingroup PkgInscribedAreasRef \brief computes a maximum area inscribed `k`-gon of the convex polygon @@ -116,7 +116,7 @@ OutputIterator o); namespace CGAL { /*! -\ingroup PkgInscribedAreas +\ingroup PkgInscribedAreasRef \brief computes a maximum perimeter inscribed `k`-gon of the convex polygon described by `[points_begin, points_end)`, writes its diff --git a/Inscribed_areas/doc/Inscribed_areas/PackageDescription.txt b/Inscribed_areas/doc/Inscribed_areas/PackageDescription.txt index 929cb77847e..cf559fcc2ea 100644 --- a/Inscribed_areas/doc/Inscribed_areas/PackageDescription.txt +++ b/Inscribed_areas/doc/Inscribed_areas/PackageDescription.txt @@ -1,17 +1,17 @@ -/// \defgroup PkgInscribedAreas Inscribed Areas Reference +/// \defgroup PkgInscribedAreasRef Inscribed Areas Reference /// \defgroup PkgInscribedAreasConcepts Concepts -/// \ingroup PkgInscribedAreas +/// \ingroup PkgInscribedAreasRef /*! -\addtogroup PkgInscribedAreas +\addtogroup PkgInscribedAreasRef \todo check generated documentation \cgalPkgDescriptionBegin{Inscribed Areas,PkgInscribedAreasSummary} \cgalPkgPicture{ler-detail.png} \cgalPkgSummaryBegin \cgalPkgAuthors{Michael Hoffmann and Eli Packer} \cgalPkgDesc{This package provides algorithms for computing inscribed areas. The algorithms for computing inscribed areas are: the largest inscribed k-gon (area or perimeter) of a convex point set and the largest inscribed iso-rectangle.} -\cgalPkgManuals{Chapter_Inscribed_Areas,PkgInscribedAreas} +\cgalPkgManuals{Chapter_Inscribed_Areas,PkgInscribedAreasRef} \cgalPkgSummaryEnd \cgalPkgShortInfoBegin \cgalPkgSince{1.1} diff --git a/Interpolation/doc/Interpolation/CGAL/interpolation_functions.h b/Interpolation/doc/Interpolation/CGAL/interpolation_functions.h index bee04da3b82..778a2a63720 100644 --- a/Interpolation/doc/Interpolation/CGAL/interpolation_functions.h +++ b/Interpolation/doc/Interpolation/CGAL/interpolation_functions.h @@ -2,7 +2,7 @@ namespace CGAL { /*! -\ingroup PkgInterpolation2 +\ingroup PkgInterpolation2Ref The struct `Data_access` implements a functor that allows to retrieve data from an associative container. The functor keeps a reference to diff --git a/Interpolation/doc/Interpolation/PackageDescription.txt b/Interpolation/doc/Interpolation/PackageDescription.txt index 1b13ef5d3b3..6a4b53f4442 100644 --- a/Interpolation/doc/Interpolation/PackageDescription.txt +++ b/Interpolation/doc/Interpolation/PackageDescription.txt @@ -1,19 +1,19 @@ -/// \defgroup PkgInterpolation2 2D and Surface Function Interpolation Reference +/// \defgroup PkgInterpolation2Ref 2D and Surface Function Interpolation Reference /// \defgroup PkgInterpolation2Concepts Concepts -/// \ingroup PkgInterpolation2 +/// \ingroup PkgInterpolation2Ref /// \defgroup PkgInterpolation2Interpolation Interpolation Functions -/// \ingroup PkgInterpolation2 +/// \ingroup PkgInterpolation2Ref /// \defgroup PkgInterpolation2NatNeighbor Natural Neighbor Coordinate Computation -/// \ingroup PkgInterpolation2 +/// \ingroup PkgInterpolation2Ref /// \defgroup PkgInterpolation2SurfaceNeighbor Surface Neighbor and Surface Neighbor Coordinate Computation -/// \ingroup PkgInterpolation2 +/// \ingroup PkgInterpolation2Ref /*! -\addtogroup PkgInterpolation2 +\addtogroup PkgInterpolation2Ref \cgalPkgDescriptionBegin{2D and Surface Function Interpolation,PkgInterpolation2Summary} \cgalPkgPicture{interpolation.png} \cgalPkgSummaryBegin @@ -21,7 +21,7 @@ \cgalPkgDesc{This package implements different methods for scattered data interpolation: Given measures of a function on a set of discrete data points, the task is to interpolate this function on an arbitrary query point. The package further offers functions for natural neighbor interpolation.} -\cgalPkgManuals{Chapter_2D_and_Surface_Function_Interpolation,PkgInterpolation2} +\cgalPkgManuals{Chapter_2D_and_Surface_Function_Interpolation,PkgInterpolation2Ref} \cgalPkgSummaryEnd \cgalPkgShortInfoBegin \cgalPkgSince{3.1} diff --git a/Interval_skip_list/doc/Interval_skip_list/CGAL/Interval_skip_list.h b/Interval_skip_list/doc/Interval_skip_list/CGAL/Interval_skip_list.h index 0aa28b3c0d4..ad15203e6ce 100644 --- a/Interval_skip_list/doc/Interval_skip_list/CGAL/Interval_skip_list.h +++ b/Interval_skip_list/doc/Interval_skip_list/CGAL/Interval_skip_list.h @@ -1,7 +1,7 @@ namespace CGAL { /*! -\ingroup PkgIntervalSkipList +\ingroup PkgIntervalSkipListRef The class `Interval_skip_list` is a dynamic data structure that allows to find all members of a set of intervals that overlap a point. diff --git a/Interval_skip_list/doc/Interval_skip_list/CGAL/Interval_skip_list_interval.h b/Interval_skip_list/doc/Interval_skip_list/CGAL/Interval_skip_list_interval.h index 6db50ce910f..d5a2ce3250f 100644 --- a/Interval_skip_list/doc/Interval_skip_list/CGAL/Interval_skip_list_interval.h +++ b/Interval_skip_list/doc/Interval_skip_list/CGAL/Interval_skip_list_interval.h @@ -1,7 +1,7 @@ namespace CGAL { /*! -\ingroup PkgIntervalSkipList +\ingroup PkgIntervalSkipListRef The class `Interval_skip_list_interval` represents intervals with lower and upper bound of type `Value`. These intervals diff --git a/Interval_skip_list/doc/Interval_skip_list/CGAL/Level_interval.h b/Interval_skip_list/doc/Interval_skip_list/CGAL/Level_interval.h index 0175c59494e..eaa1db22fc9 100644 --- a/Interval_skip_list/doc/Interval_skip_list/CGAL/Level_interval.h +++ b/Interval_skip_list/doc/Interval_skip_list/CGAL/Level_interval.h @@ -1,7 +1,7 @@ namespace CGAL { /*! -\ingroup PkgIntervalSkipList +\ingroup PkgIntervalSkipListRef The class `Level_interval` represents intervals for the minimum and maximum value of the `z`-coordinate of a face of a triangulation. diff --git a/Interval_skip_list/doc/Interval_skip_list/PackageDescription.txt b/Interval_skip_list/doc/Interval_skip_list/PackageDescription.txt index 30af0633afc..b9fc74b4a19 100644 --- a/Interval_skip_list/doc/Interval_skip_list/PackageDescription.txt +++ b/Interval_skip_list/doc/Interval_skip_list/PackageDescription.txt @@ -1,15 +1,15 @@ -/// \defgroup PkgIntervalSkipList Interval Skip List Reference +/// \defgroup PkgIntervalSkipListRef Interval Skip List Reference /// \defgroup PkgIntervalSkipListConcepts Concepts -/// \ingroup PkgIntervalSkipList +/// \ingroup PkgIntervalSkipListRef /*! -\addtogroup PkgIntervalSkipList +\addtogroup PkgIntervalSkipListRef \cgalPkgDescriptionBegin{Interval Skip List,PkgIntervalSkipListSummary} \cgalPkgPicture{Interval_skip_list/fig/query.png} \cgalPkgSummaryBegin \cgalPkgAuthor{Andreas Fabri} \cgalPkgDesc{An interval skip list is a data structure for finding all intervals that contain a point, and for stabbing queries, that is for answering the question whether a given point is contained in an interval or not. For a triangulated terrain, this allows to quickly identify the triangles which intersect an iso line. } -\cgalPkgManuals{Chapter_Interval_Skip_List,PkgIntervalSkipList} +\cgalPkgManuals{Chapter_Interval_Skip_List,PkgIntervalSkipListRef} \cgalPkgSummaryEnd \cgalPkgShortInfoBegin \cgalPkgSince{3.0} diff --git a/Jet_fitting_3/doc/Jet_fitting_3/CGAL/Monge_via_jet_fitting.h b/Jet_fitting_3/doc/Jet_fitting_3/CGAL/Monge_via_jet_fitting.h index 7f31a429a16..1d142275ebc 100644 --- a/Jet_fitting_3/doc/Jet_fitting_3/CGAL/Monge_via_jet_fitting.h +++ b/Jet_fitting_3/doc/Jet_fitting_3/CGAL/Monge_via_jet_fitting.h @@ -1,7 +1,7 @@ namespace CGAL { /*! -\ingroup PkgJet_fitting_3 +\ingroup PkgJet_fitting_3Ref The class `Monge_via_jet_fitting` is designed to perform the estimation of the local differential quantities at a given point. The point range is @@ -39,7 +39,7 @@ public: /// @{ /*! -\ingroup PkgJet_fitting_3 +\ingroup PkgJet_fitting_3Ref The class `Monge_form` stores the Monge representation, i.e., the Monge coordinate system and the coefficients of the Monge form in this diff --git a/Jet_fitting_3/doc/Jet_fitting_3/PackageDescription.txt b/Jet_fitting_3/doc/Jet_fitting_3/PackageDescription.txt index ff80e0f65c4..ce78c9d23f5 100644 --- a/Jet_fitting_3/doc/Jet_fitting_3/PackageDescription.txt +++ b/Jet_fitting_3/doc/Jet_fitting_3/PackageDescription.txt @@ -1,15 +1,15 @@ -/// \defgroup PkgJet_fitting_3 Estimation of Local Differential Properties of Point-Sampled Surfaces Reference +/// \defgroup PkgJet_fitting_3Ref Estimation of Local Differential Properties of Point-Sampled Surfaces Reference /// \defgroup PkgJet_fitting_3Concepts Concepts -/// \ingroup PkgJet_fitting_3 +/// \ingroup PkgJet_fitting_3Ref /*! -\addtogroup PkgJet_fitting_3 +\addtogroup PkgJet_fitting_3Ref \todo check generated documentation \cgalPkgDescriptionBegin{Estimation of Local Differential Properties of Point-Sampled Surfaces,PkgJet_fitting_3Summary} \cgalPkgPicture{DavidDetail.png} \cgalPkgSummaryBegin \cgalPkgAuthors{Marc Pouget and Frédéric Cazals} \cgalPkgDesc{For a surface discretized as a point cloud or a mesh, it is desirable to estimate pointwise differential quantities. More precisely, first order properties correspond to the normal or the tangent plane; second order properties provide the principal curvatures and directions, third order properties provide the directional derivatives of the principal curvatures along the curvature lines, etc. This package allows the estimation of local differential quantities of a surface from a point sample.} -\cgalPkgManuals{Chapter_Estimation_of_Local_Differential_Properties_of_Point-Sampled_Surfaces,PkgJet_fitting_3} +\cgalPkgManuals{Chapter_Estimation_of_Local_Differential_Properties_of_Point-Sampled_Surfaces,PkgJet_fitting_3Ref} \cgalPkgSummaryEnd \cgalPkgShortInfoBegin \cgalPkgSince{3.3} diff --git a/Kernel_23/doc/Kernel_23/CGAL/Origin.h b/Kernel_23/doc/Kernel_23/CGAL/Origin.h index ad1fccbaaa7..2b590a04bed 100644 --- a/Kernel_23/doc/Kernel_23/CGAL/Origin.h +++ b/Kernel_23/doc/Kernel_23/CGAL/Origin.h @@ -2,7 +2,7 @@ namespace CGAL { /*! -\ingroup PkgKernel23 +\ingroup PkgKernel23Ref \cgal defines a symbolic constant `NULL_VECTOR` to construct zero length vectors. @@ -21,7 +21,7 @@ public: namespace CGAL { /*! -\ingroup PkgKernel23 +\ingroup PkgKernel23Ref \cgal defines a symbolic constant `ORIGIN` which denotes the point at the origin. diff --git a/Kernel_23/doc/Kernel_23/PackageDescription.txt b/Kernel_23/doc/Kernel_23/PackageDescription.txt index aa5e95fc237..fc28676855d 100644 --- a/Kernel_23/doc/Kernel_23/PackageDescription.txt +++ b/Kernel_23/doc/Kernel_23/PackageDescription.txt @@ -1,7 +1,7 @@ -/// \defgroup PkgKernel23 2D and 3D Linear Geometry Kernel Reference +/// \defgroup PkgKernel23Ref 2D and 3D Linear Geometry Kernel Reference /// \defgroup PkgKernel23Concepts Concepts -/// \ingroup PkgKernel23 +/// \ingroup PkgKernel23Ref /// \defgroup PkgKernel23ConceptsGeomObject Kernel Geometric Object Concepts /// \ingroup PkgKernel23Concepts @@ -10,37 +10,37 @@ /// \ingroup PkgKernel23Concepts /// \defgroup kernel_predef Predefined Kernels -/// \ingroup PkgKernel23 +/// \ingroup PkgKernel23Ref /// \defgroup kernel_classes2 2D Kernel Objects -/// \ingroup PkgKernel23 +/// \ingroup PkgKernel23Ref /// \defgroup kernel_classes3 3D Kernel Objects -/// \ingroup PkgKernel23 +/// \ingroup PkgKernel23Ref /// \defgroup kernel_classes Kernel Classes -/// \ingroup PkgKernel23 +/// \ingroup PkgKernel23Ref /// \defgroup kernel_global_function Global Kernel Functions -/// \ingroup PkgKernel23 +/// \ingroup PkgKernel23Ref /// \defgroup kernel_enums Enumerations and Related Functions -/// \ingroup PkgKernel23 +/// \ingroup PkgKernel23Ref /// \defgroup kernel_conversion Cartesian/Homogenous Conversion -/// \ingroup PkgKernel23 +/// \ingroup PkgKernel23Ref /// \defgroup kernel_dimension Dimension Handling Tools -/// \ingroup PkgKernel23 +/// \ingroup PkgKernel23Ref /*! -\addtogroup PkgKernel23 +\addtogroup PkgKernel23Ref \cgalPkgDescriptionBegin{2D and 3D Linear Geometry Kernel,PkgKernel23Summary} \cgalPkgPicture{pointSegmentTriangle.png} \cgalPkgSummaryBegin \cgalPkgAuthors{Hervé Brönnimann, Andreas Fabri, Geert-Jan Giezeman, Susan Hert, Michael Hoffmann, Lutz Kettner, Sylvain Pion, and Stefan Schirra} \cgalPkgDesc{This package contains kernels each containing objects of constant size, such as point, vector, direction, line, ray, segment, circle as well as predicates and constructions for these objects. The kernels mainly differ in the way they handle robustness issues.} -\cgalPkgManuals{Chapter_2D_and_3D_Geometry_Kernel,PkgKernel23} +\cgalPkgManuals{Chapter_2D_and_3D_Geometry_Kernel,PkgKernel23Ref} \cgalPkgSummaryEnd \cgalPkgShortInfoBegin \cgalPkgSince{0.9} diff --git a/Kernel_d/doc/Kernel_d/PackageDescription.txt b/Kernel_d/doc/Kernel_d/PackageDescription.txt index 296f53b8bf4..6a1d4bfb9dc 100644 --- a/Kernel_d/doc/Kernel_d/PackageDescription.txt +++ b/Kernel_d/doc/Kernel_d/PackageDescription.txt @@ -1,33 +1,33 @@ -/// \defgroup PkgKernelD dD Geometry Kernel Reference +/// \defgroup PkgKernelDRef dD Geometry Kernel Reference /// \defgroup PkgKernelDLinAlgConcepts Linear Algebra Concepts -/// \ingroup PkgKernelD +/// \ingroup PkgKernelDRef /// \defgroup PkgKernelDLinAlgClasses Linear Algebra Classes -/// \ingroup PkgKernelD +/// \ingroup PkgKernelDRef /// \defgroup PkgKernelDKernels Kernels -/// \ingroup PkgKernelD +/// \ingroup PkgKernelDRef /// \defgroup PkgKernelDKernelObjs Kernel Objects -/// \ingroup PkgKernelD +/// \ingroup PkgKernelDRef /// \defgroup PkgKernelDFunctions Global Kernel Functions -/// \ingroup PkgKernelD +/// \ingroup PkgKernelDRef /// \defgroup PkgKernelDKernelConcept Kernel Concept -/// \ingroup PkgKernelD +/// \ingroup PkgKernelDRef /*! -\addtogroup PkgKernelD +\addtogroup PkgKernelDRef \todo check generated documentation \cgalPkgDescriptionBegin{dD Geometry Kernel,PkgKernelDSummary} \cgalPkgPicture{hypercube.png} \cgalPkgSummaryBegin \cgalPkgAuthor{Michael Seel} \cgalPkgDesc{The dD %Kernel contains objects of constant size, such as point, vector, direction, line, ray, segment, circle in d dimensional Euclidean space, as well as predicates and constructions for these objects.} -\cgalPkgManuals{Chapter_dD_Geometry_Kernel,PkgKernelD} +\cgalPkgManuals{Chapter_dD_Geometry_Kernel,PkgKernelDRef} \cgalPkgSummaryEnd \cgalPkgShortInfoBegin \cgalPkgSince{1.1} diff --git a/Linear_cell_complex/doc/Linear_cell_complex/PackageDescription.txt b/Linear_cell_complex/doc/Linear_cell_complex/PackageDescription.txt index 8eb6f42e7dc..0cb3fa001a1 100644 --- a/Linear_cell_complex/doc/Linear_cell_complex/PackageDescription.txt +++ b/Linear_cell_complex/doc/Linear_cell_complex/PackageDescription.txt @@ -1,15 +1,15 @@ -/// \defgroup PkgLinearCellComplex Linear Cell Complex Reference +/// \defgroup PkgLinearCellComplexRef Linear Cell Complex Reference /// \defgroup PkgLinearCellComplexConcepts Concepts -/// \ingroup PkgLinearCellComplex +/// \ingroup PkgLinearCellComplexRef /// \defgroup PkgLinearCellComplexClasses Classes -/// \ingroup PkgLinearCellComplex +/// \ingroup PkgLinearCellComplexRef /*! Basic constructions. */ /// \defgroup PkgLinearCellComplexConstructions Constructions for Linear Cell Complex -/// \ingroup PkgLinearCellComplex +/// \ingroup PkgLinearCellComplexRef /*! High-level operations. \code @@ -17,7 +17,7 @@ \endcode */ /// \defgroup PkgLinearCellComplexOperations Operations for Linear Cell Complex -/// \ingroup PkgLinearCellComplex +/// \ingroup PkgLinearCellComplexRef /*! Draw. \code @@ -25,17 +25,17 @@ \endcode */ /// \defgroup PkgDrawLinearCellComplex Draw a Linear Cell Complex -/// \ingroup PkgLinearCellComplex +/// \ingroup PkgLinearCellComplexRef /*! -\addtogroup PkgLinearCellComplex +\addtogroup PkgLinearCellComplexRef \cgalPkgDescriptionBegin{Linear Cell Complex,PkgLinearCellComplexSummary} \cgalPkgPicture{lcc_logo.png} \cgalPkgSummaryBegin \cgalPkgAuthor{Guillaume Damiand} \cgalPkgDesc{This package implements linear cell complexes, objects in d-dimension with linear geometry. The combinatorial part of objects is described either by a combinatorial or a generalized map, representing all the cells of the object plus the incidence and adjacency relations between cells. Geometry is added to the combinatorial data-structure simply by associating a point to each vertex of the map. Taking a 2D combinatorial map, and using 3D points, gives a linear cell complex equivalent to a Polyhedron_3.} -\cgalPkgManuals{Chapter_Linear_Cell_Complex,PkgLinearCellComplex} +\cgalPkgManuals{Chapter_Linear_Cell_Complex,PkgLinearCellComplexRef} \cgalPkgSummaryEnd \cgalPkgShortInfoBegin \cgalPkgSince{4.0} diff --git a/Matrix_search/doc/Matrix_search/CGAL/Dynamic_matrix.h b/Matrix_search/doc/Matrix_search/CGAL/Dynamic_matrix.h index 4761f703302..96b960f8b4a 100644 --- a/Matrix_search/doc/Matrix_search/CGAL/Dynamic_matrix.h +++ b/Matrix_search/doc/Matrix_search/CGAL/Dynamic_matrix.h @@ -2,7 +2,7 @@ namespace CGAL { /*! -\ingroup PkgMatrixSearch +\ingroup PkgMatrixSearchRef The class `Dynamic_matrix` is an adaptor for an arbitrary matrix class `M` to provide the dynamic operations needed for monotone diff --git a/Matrix_search/doc/Matrix_search/CGAL/Sorted_matrix_search_traits_adaptor.h b/Matrix_search/doc/Matrix_search/CGAL/Sorted_matrix_search_traits_adaptor.h index e4f01c40586..cff3fcffd6a 100644 --- a/Matrix_search/doc/Matrix_search/CGAL/Sorted_matrix_search_traits_adaptor.h +++ b/Matrix_search/doc/Matrix_search/CGAL/Sorted_matrix_search_traits_adaptor.h @@ -2,7 +2,7 @@ namespace CGAL { /*! -\ingroup PkgMatrixSearch +\ingroup PkgMatrixSearchRef The class `Sorted_matrix_search_traits_adaptor` can be used as an adaptor to create sorted matrix search traits classes for diff --git a/Matrix_search/doc/Matrix_search/CGAL/monotone_matrix_search.h b/Matrix_search/doc/Matrix_search/CGAL/monotone_matrix_search.h index a62799d1a10..91b60ccd958 100644 --- a/Matrix_search/doc/Matrix_search/CGAL/monotone_matrix_search.h +++ b/Matrix_search/doc/Matrix_search/CGAL/monotone_matrix_search.h @@ -1,7 +1,7 @@ namespace CGAL { /*! -\ingroup PkgMatrixSearch +\ingroup PkgMatrixSearchRef \brief computes the maximum (as specified by `compare_strictly`) entry for each row of `m` and writes the corresponding column diff --git a/Matrix_search/doc/Matrix_search/CGAL/sorted_matrix_search.h b/Matrix_search/doc/Matrix_search/CGAL/sorted_matrix_search.h index f54578520b4..d27ad901387 100644 --- a/Matrix_search/doc/Matrix_search/CGAL/sorted_matrix_search.h +++ b/Matrix_search/doc/Matrix_search/CGAL/sorted_matrix_search.h @@ -1,7 +1,7 @@ namespace CGAL { /*! -\ingroup PkgMatrixSearch +\ingroup PkgMatrixSearchRef \brief returns the element `x` in one of the sorted matrices from the range `[f, l)`, for which `t.is_feasible(x)` diff --git a/Matrix_search/doc/Matrix_search/PackageDescription.txt b/Matrix_search/doc/Matrix_search/PackageDescription.txt index 97b2f8fbd5c..53af97c84b6 100644 --- a/Matrix_search/doc/Matrix_search/PackageDescription.txt +++ b/Matrix_search/doc/Matrix_search/PackageDescription.txt @@ -1,17 +1,17 @@ -/// \defgroup PkgMatrixSearch Monotone and Sorted Matrix Search Reference +/// \defgroup PkgMatrixSearchRef Monotone and Sorted Matrix Search Reference /// \defgroup PkgMatrixSearchConcepts Concepts -/// \ingroup PkgMatrixSearch +/// \ingroup PkgMatrixSearchRef /*! -\addtogroup PkgMatrixSearch +\addtogroup PkgMatrixSearchRef \todo check generated documentation \cgalPkgDescriptionBegin{Monotone and Sorted Matrix Search,PkgMatrixSearchSummary} \cgalPkgPicture{matrix.png} \cgalPkgSummaryBegin \cgalPkgAuthor{Michael Hoffmann} \cgalPkgDesc{This package provides a matrix search framework, which is the underlying technique for the computation of all furthest neighbors for the vertices of a convex polygon, maximal k-gons inscribed into a planar point set, and computing rectangular p-centers.} -\cgalPkgManuals{Chapter_Monotone_and_Sorted_Matrix_Search,PkgMatrixSearch} +\cgalPkgManuals{Chapter_Monotone_and_Sorted_Matrix_Search,PkgMatrixSearchRef} \cgalPkgSummaryEnd \cgalPkgShortInfoBegin \cgalPkgSince{1.1} diff --git a/Mesh_2/doc/Mesh_2/CGAL/Delaunay_mesh_criteria_2.h b/Mesh_2/doc/Mesh_2/CGAL/Delaunay_mesh_criteria_2.h index e80acb71a5b..3979f8baf04 100644 --- a/Mesh_2/doc/Mesh_2/CGAL/Delaunay_mesh_criteria_2.h +++ b/Mesh_2/doc/Mesh_2/CGAL/Delaunay_mesh_criteria_2.h @@ -2,7 +2,7 @@ namespace CGAL { /*! -\ingroup PkgMesh2 +\ingroup PkgMesh2Ref diff --git a/Mesh_2/doc/Mesh_2/CGAL/Delaunay_mesh_face_base_2.h b/Mesh_2/doc/Mesh_2/CGAL/Delaunay_mesh_face_base_2.h index 3fe813eecfe..909c91012c5 100644 --- a/Mesh_2/doc/Mesh_2/CGAL/Delaunay_mesh_face_base_2.h +++ b/Mesh_2/doc/Mesh_2/CGAL/Delaunay_mesh_face_base_2.h @@ -2,7 +2,7 @@ namespace CGAL { /*! -\ingroup PkgMesh2 +\ingroup PkgMesh2Ref diff --git a/Mesh_2/doc/Mesh_2/CGAL/Delaunay_mesh_size_criteria_2.h b/Mesh_2/doc/Mesh_2/CGAL/Delaunay_mesh_size_criteria_2.h index f8624d97adc..1c29f732f89 100644 --- a/Mesh_2/doc/Mesh_2/CGAL/Delaunay_mesh_size_criteria_2.h +++ b/Mesh_2/doc/Mesh_2/CGAL/Delaunay_mesh_size_criteria_2.h @@ -2,7 +2,7 @@ namespace CGAL { /*! -\ingroup PkgMesh2 +\ingroup PkgMesh2Ref diff --git a/Mesh_2/doc/Mesh_2/CGAL/Delaunay_mesh_vertex_base_2.h b/Mesh_2/doc/Mesh_2/CGAL/Delaunay_mesh_vertex_base_2.h index 02894cb4e84..0eb0c2f8028 100644 --- a/Mesh_2/doc/Mesh_2/CGAL/Delaunay_mesh_vertex_base_2.h +++ b/Mesh_2/doc/Mesh_2/CGAL/Delaunay_mesh_vertex_base_2.h @@ -2,7 +2,7 @@ namespace CGAL { /*! -\ingroup PkgMesh2 +\ingroup PkgMesh2Ref The class `Delaunay_mesh_vertex_base_2` is a model for the concept `DelaunayMeshVertexBase_2`. diff --git a/Mesh_2/doc/Mesh_2/CGAL/Delaunay_mesher_2.h b/Mesh_2/doc/Mesh_2/CGAL/Delaunay_mesher_2.h index 449cb10d6e7..dd71a465d4d 100644 --- a/Mesh_2/doc/Mesh_2/CGAL/Delaunay_mesher_2.h +++ b/Mesh_2/doc/Mesh_2/CGAL/Delaunay_mesher_2.h @@ -2,7 +2,7 @@ namespace CGAL { /*! -\ingroup PkgMesh2 +\ingroup PkgMesh2Ref This class implements a 2D mesh generator. diff --git a/Mesh_2/doc/Mesh_2/CGAL/Mesh_2/Face_badness.h b/Mesh_2/doc/Mesh_2/CGAL/Mesh_2/Face_badness.h index fc3e577f324..57ac738075b 100644 --- a/Mesh_2/doc/Mesh_2/CGAL/Mesh_2/Face_badness.h +++ b/Mesh_2/doc/Mesh_2/CGAL/Mesh_2/Face_badness.h @@ -1,7 +1,7 @@ namespace CGAL { namespace Mesh_2 { /*! -\ingroup PkgMesh2 +\ingroup PkgMesh2Ref */ enum Face_badness { NOT_BAD, BAD, IMPERATIVELY_BAD}; diff --git a/Mesh_2/doc/Mesh_2/CGAL/Triangulation_conformer_2.h b/Mesh_2/doc/Mesh_2/CGAL/Triangulation_conformer_2.h index b0ff428a78e..2a8fcae9eef 100644 --- a/Mesh_2/doc/Mesh_2/CGAL/Triangulation_conformer_2.h +++ b/Mesh_2/doc/Mesh_2/CGAL/Triangulation_conformer_2.h @@ -40,7 +40,7 @@ template void make_conforming_Gabriel_2 (CDT &t); namespace CGAL { /*! -\ingroup PkgMesh2 +\ingroup PkgMesh2Ref The class `Triangulation_conformer_2` is an auxiliary class of diff --git a/Mesh_2/doc/Mesh_2/PackageDescription.txt b/Mesh_2/doc/Mesh_2/PackageDescription.txt index 79733d285b8..be61cc3a694 100644 --- a/Mesh_2/doc/Mesh_2/PackageDescription.txt +++ b/Mesh_2/doc/Mesh_2/PackageDescription.txt @@ -1,18 +1,18 @@ -/// \defgroup PkgMesh2 2D Conforming Triangulations and Meshes Reference +/// \defgroup PkgMesh2Ref 2D Conforming Triangulations and Meshes Reference /// \defgroup PkgMesh2Concepts Concepts -/// \ingroup PkgMesh2 +/// \ingroup PkgMesh2Ref /// \defgroup PkgMesh2Functions Mesh Generation Functions -/// \ingroup PkgMesh2 +/// \ingroup PkgMesh2Ref /// The main function to generate a mesh is `refine_Delaunay_mesh_2()`. /// The function `lloyd_optimize_mesh_2()` allows to optimize an existing mesh. /// \defgroup PkgMesh2Enum Enumerations -/// \ingroup PkgMesh2 +/// \ingroup PkgMesh2Ref /*! -\addtogroup PkgMesh2 +\addtogroup PkgMesh2Ref \cgalPkgDescriptionBegin{2D Conforming Triangulations and Meshes,PkgMesh2Summary} \cgalPkgPicture{Mesh_2/fig/delaunaymesh-small.png} \cgalPkgSummaryBegin @@ -23,7 +23,7 @@ Conforming Gabriel triangulations are obtained by further refining constrained The package provides also a 2D mesh generator that refines triangles and constrained edges until user defined size and shape criteria on triangles are satisfied. The generated meshes can be optimized using the Lloyd algorithm, also provided in this package. The package can handle intersecting input constraints and set no restriction on the angle formed by two constraints sharing an endpoint.} -\cgalPkgManuals{Chapter_2D_Conforming_Triangulations_and_Meshes,PkgMesh2} +\cgalPkgManuals{Chapter_2D_Conforming_Triangulations_and_Meshes,PkgMesh2Ref} \cgalPkgSummaryEnd \cgalPkgShortInfoBegin \cgalPkgSince{3.1} diff --git a/Mesh_3/doc/Mesh_3/PackageDescription.txt b/Mesh_3/doc/Mesh_3/PackageDescription.txt index 791b9c7894b..f0d660ae7c5 100644 --- a/Mesh_3/doc/Mesh_3/PackageDescription.txt +++ b/Mesh_3/doc/Mesh_3/PackageDescription.txt @@ -1,45 +1,45 @@ -/// \defgroup PkgMesh_3 3D Mesh Generation Reference +/// \defgroup PkgMesh_3Ref 3D Mesh Generation Reference /// \defgroup PkgMesh_3Concepts Main Concepts -/// \ingroup PkgMesh_3 +/// \ingroup PkgMesh_3Ref /// The main concepts of this package. /// \defgroup PkgMesh_3SecondaryConcepts Secondary Concepts -/// \ingroup PkgMesh_3 +/// \ingroup PkgMesh_3Ref /// The concepts in this group are secondary concepts, related to the template parameters of some models of the main concept. /// \defgroup PkgMesh_3MeshClasses Mesh Classes -/// \ingroup PkgMesh_3 +/// \ingroup PkgMesh_3Ref /// The classes in this group are the main classes involved in the mesh generation process. /// \defgroup PkgMesh_3Domains Domain Classes -/// \ingroup PkgMesh_3 +/// \ingroup PkgMesh_3Ref /// The classes in this group are models of domain concepts and their associated classes. /// \defgroup PkgMesh_3Functions Mesh Generation Functions -/// \ingroup PkgMesh_3 +/// \ingroup PkgMesh_3Ref /// The two main functions to generate a mesh are `make_mesh_3()` and `refine_mesh_3()`. /// The other functions allow to optimize an existing mesh. /// \defgroup PkgMesh_3Parameters Parameter Functions -/// \ingroup PkgMesh_3 +/// \ingroup PkgMesh_3Ref /// \defgroup PkgMesh_3Enum Enumerations -/// \ingroup PkgMesh_3 +/// \ingroup PkgMesh_3Ref /// \defgroup PkgMesh_3IOFunctions Input/Output Functions -/// \ingroup PkgMesh_3 +/// \ingroup PkgMesh_3Ref /// The free functions that can be used to read and write meshes. /*! -\addtogroup PkgMesh_3 +\addtogroup PkgMesh_3Ref \todo check generated documentation \cgalPkgDescriptionBegin{3D Mesh Generation,PkgMesh_3Summary} \cgalPkgPicture{Mesh_3/fig/multilabel_mesher_small.jpg} \cgalPkgSummaryBegin \cgalPkgAuthors{Pierre Alliez, Clément Jamin, Laurent Rineau, Stéphane Tayeb, Jane Tournois, Mariette Yvinec} \cgalPkgDesc{This package is devoted to the generation of isotropic simplicial meshes discretizing 3D domains. The domain to be meshed is a region of 3D space that has to be bounded. The region may be connected or composed of multiple components and/or subdivided in several subdomains. The domain is input as an oracle able to answer queries, of a few different types, on the domain. Boundary and subdivision surfaces are either smooth or piecewise smooth surfaces, formed with planar or curved surface patches. Surfaces may exhibit 1-dimensional features (e.g. crease edges) and 0-dimensional features (e.g. singular points as corners tips, cusps or darts), that have to be fairly approximated in the mesh. Optionally, the algorithms support multi-core shared-memory architectures to take advantage of available parallelism.} -\cgalPkgManuals{Chapter_3D_Mesh_Generation,PkgMesh_3} +\cgalPkgManuals{Chapter_3D_Mesh_Generation,PkgMesh_3Ref} \cgalPkgSummaryEnd \cgalPkgShortInfoBegin \cgalPkgSince{3.5} diff --git a/Minkowski_sum_2/doc/Minkowski_sum_2/CGAL/Polygon_convex_decomposition_2.h b/Minkowski_sum_2/doc/Minkowski_sum_2/CGAL/Polygon_convex_decomposition_2.h index 881bfb39dee..2100ae0d516 100644 --- a/Minkowski_sum_2/doc/Minkowski_sum_2/CGAL/Polygon_convex_decomposition_2.h +++ b/Minkowski_sum_2/doc/Minkowski_sum_2/CGAL/Polygon_convex_decomposition_2.h @@ -1,7 +1,7 @@ namespace CGAL { /*! -\ingroup PkgMinkowskiSum2 +\ingroup PkgMinkowskiSum2Ref The `Greene_convex_decomposition_2` class implements the approximation algorithm of Greene for the decomposition of an input polygon into convex @@ -68,7 +68,7 @@ public: namespace CGAL { /*! -\ingroup PkgMinkowskiSum2 +\ingroup PkgMinkowskiSum2Ref The `Optimal_convex_decomposition_2` class provides an implementation of Greene's dynamic programming algorithm for optimal decomposition of a diff --git a/Minkowski_sum_2/doc/Minkowski_sum_2/CGAL/Polygon_nop_decomposition_2.h b/Minkowski_sum_2/doc/Minkowski_sum_2/CGAL/Polygon_nop_decomposition_2.h index ece39aec050..b2843d722dc 100644 --- a/Minkowski_sum_2/doc/Minkowski_sum_2/CGAL/Polygon_nop_decomposition_2.h +++ b/Minkowski_sum_2/doc/Minkowski_sum_2/CGAL/Polygon_nop_decomposition_2.h @@ -1,7 +1,7 @@ namespace CGAL { /*! -\ingroup PkgMinkowskiSum2 +\ingroup PkgMinkowskiSum2Ref The `Polygon_nop_decomposition_2` class implements a convex decomposition of a polygon, which merely passes the input polygon to diff --git a/Minkowski_sum_2/doc/Minkowski_sum_2/CGAL/Polygon_triangulation_decomposition_2.h b/Minkowski_sum_2/doc/Minkowski_sum_2/CGAL/Polygon_triangulation_decomposition_2.h index b78e6adf9e9..4dd0cf19ca0 100644 --- a/Minkowski_sum_2/doc/Minkowski_sum_2/CGAL/Polygon_triangulation_decomposition_2.h +++ b/Minkowski_sum_2/doc/Minkowski_sum_2/CGAL/Polygon_triangulation_decomposition_2.h @@ -1,7 +1,7 @@ namespace CGAL { /*! -\ingroup PkgMinkowskiSum2 +\ingroup PkgMinkowskiSum2Ref The `Polygon_triangulation_decomposition_2` class implements a convex decomposition of a polygon or a polygon with holes into triangles using diff --git a/Minkowski_sum_2/doc/Minkowski_sum_2/CGAL/Polygon_vertical_decomposition_2.h b/Minkowski_sum_2/doc/Minkowski_sum_2/CGAL/Polygon_vertical_decomposition_2.h index d2a0a457a5a..28e560c6fd3 100644 --- a/Minkowski_sum_2/doc/Minkowski_sum_2/CGAL/Polygon_vertical_decomposition_2.h +++ b/Minkowski_sum_2/doc/Minkowski_sum_2/CGAL/Polygon_vertical_decomposition_2.h @@ -1,7 +1,7 @@ namespace CGAL { /*! -\ingroup PkgMinkowskiSum2 +\ingroup PkgMinkowskiSum2Ref The `Polygon_vertical_decomposition_2` class implements a convex decompistion of a polygon or a polygon with holes into pseudo trapezoids diff --git a/Minkowski_sum_2/doc/Minkowski_sum_2/CGAL/Small_side_angle_bisector_decomposition_2.h b/Minkowski_sum_2/doc/Minkowski_sum_2/CGAL/Small_side_angle_bisector_decomposition_2.h index ae6d95055d0..8688bbd2de9 100644 --- a/Minkowski_sum_2/doc/Minkowski_sum_2/CGAL/Small_side_angle_bisector_decomposition_2.h +++ b/Minkowski_sum_2/doc/Minkowski_sum_2/CGAL/Small_side_angle_bisector_decomposition_2.h @@ -1,7 +1,7 @@ namespace CGAL { /*! -\ingroup PkgMinkowskiSum2 +\ingroup PkgMinkowskiSum2Ref The `Small_side_angle_bisector_decomposition_2` class implements a simple yet efficient heuristic for decomposing an input polygon into convex sub-polygons. It is based diff --git a/Minkowski_sum_2/doc/Minkowski_sum_2/CGAL/approximated_offset_2.h b/Minkowski_sum_2/doc/Minkowski_sum_2/CGAL/approximated_offset_2.h index c6f376b9bae..4b98132bb68 100644 --- a/Minkowski_sum_2/doc/Minkowski_sum_2/CGAL/approximated_offset_2.h +++ b/Minkowski_sum_2/doc/Minkowski_sum_2/CGAL/approximated_offset_2.h @@ -1,7 +1,7 @@ namespace CGAL { /*! -\ingroup PkgMinkowskiSum2 +\ingroup PkgMinkowskiSum2Ref Provides a guaranteed approximation of the inset, or inner offset, of the given polygon `P` by a given radius `r`. Namely, the @@ -29,7 +29,7 @@ OutputIterator oi); namespace CGAL { /*! -\ingroup PkgMinkowskiSum2 +\ingroup PkgMinkowskiSum2Ref Provides a guaranteed approximation of the offset of the given polygon `P` by a given radius `r` - namely, the function computes the @@ -49,7 +49,7 @@ const typename Kernel::FT& r, const double& eps); /*! -\ingroup PkgMinkowskiSum2 +\ingroup PkgMinkowskiSum2Ref Provides a guaranteed approximation of offset the given polygon with holes `pwh` by a given radius `r`, such that the approximation error is bounded @@ -66,7 +66,7 @@ const typename Kernel::FT& r, const double& eps); /*! -\ingroup PkgMinkowskiSum2 +\ingroup PkgMinkowskiSum2Ref Provides a guaranteed approximation of the offset of the given polygon `P` by a radius `r`, as described above. diff --git a/Minkowski_sum_2/doc/Minkowski_sum_2/CGAL/minkowski_sum_2.h b/Minkowski_sum_2/doc/Minkowski_sum_2/CGAL/minkowski_sum_2.h index a0b5d14f579..5f23ea4e15c 100644 --- a/Minkowski_sum_2/doc/Minkowski_sum_2/CGAL/minkowski_sum_2.h +++ b/Minkowski_sum_2/doc/Minkowski_sum_2/CGAL/minkowski_sum_2.h @@ -1,7 +1,7 @@ namespace CGAL { /*! -\ingroup PkgMinkowskiSum2 +\ingroup PkgMinkowskiSum2Ref Computes the Minkowski sum \f$ P \oplus Q\f$ of two given polygons (which may have holes). `PolygonType1` and `PolygonType2` can be any combination of: @@ -20,7 +20,7 @@ minkowski_sum_2(const PolygonType1& P, const PolygonType2& Q); /*! -\ingroup PkgMinkowskiSum2 +\ingroup PkgMinkowskiSum2Ref Computes the Minkowski sum \f$ P \oplus Q\f$ of the two given polygons. The function computes the reduced convolution \cgalCite{cgal:bl-frmsurc-11} of @@ -42,7 +42,7 @@ minkowski_sum_by_reduced_convolution_2(const PolygonType1& P, const PolygonType2& Q); /*! -\ingroup PkgMinkowskiSum2 +\ingroup PkgMinkowskiSum2Ref Computes the Minkowski sum \f$ P \oplus Q\f$ of the two given polygons. The function computes the (full) convolution cycles of the two polygons and @@ -61,7 +61,7 @@ minkowski_sum_by_full_convolution_2(const Polygon_2& P, const Polygon_2& Q); /*! -\ingroup PkgMinkowskiSum2 +\ingroup PkgMinkowskiSum2Ref Computes the Minkowski sum \f$ P \oplus Q\f$ of the two given polygons. The function decomposes the summand `P` into convex sub-polygons @@ -92,7 +92,7 @@ minkowski_sum_2(const PolygonType1& P, const Gps_segment_traits_2& traits = Gps_segment_traits_2()); /*! -\ingroup PkgMinkowskiSum2 +\ingroup PkgMinkowskiSum2Ref Computes the Minkowski sum \f$ P \oplus Q\f$ of the two given polygons. The function decomposes the summands `P` and `Q` into convex sub-polygons @@ -114,7 +114,7 @@ minkowski_sum_2(const PolygonType1& P, const Gps_segment_traits_2& traits = Gps_segment_traits_2()); /*! -\ingroup PkgMinkowskiSum2 +\ingroup PkgMinkowskiSum2Ref Computes the Minkowski sum \f$ P \oplus Q\f$ of the two given polygons using the decomposition strategy. It decomposes the summands `P` and `Q` diff --git a/Minkowski_sum_2/doc/Minkowski_sum_2/CGAL/offset_polygon_2.h b/Minkowski_sum_2/doc/Minkowski_sum_2/CGAL/offset_polygon_2.h index e149088efd5..b07a2ae2a6d 100644 --- a/Minkowski_sum_2/doc/Minkowski_sum_2/CGAL/offset_polygon_2.h +++ b/Minkowski_sum_2/doc/Minkowski_sum_2/CGAL/offset_polygon_2.h @@ -1,7 +1,7 @@ namespace CGAL { /*! -\ingroup PkgMinkowskiSum2 +\ingroup PkgMinkowskiSum2Ref Computes the inset, or inner offset, of the given polygon `P` by a given radius `r` - namely, the function computes the set of points @@ -29,7 +29,7 @@ OutputIterator oi); namespace CGAL { /*! -\ingroup PkgMinkowskiSum2 +\ingroup PkgMinkowskiSum2Ref Computes the offset of the given polygon `P` by a given radius `r` - namely, the function computes the Minkowski sum @@ -51,7 +51,7 @@ const typename ConicTraits::Rat_kernel::FT& r, const ConicTraits& traits); /*! -\ingroup PkgMinkowskiSum2 +\ingroup PkgMinkowskiSum2Ref Computes the offset of the given polygon with holes `pwh` by a given radius `r`. It does so by offsetting outer boundary of `pwh` and @@ -70,7 +70,7 @@ const typename ConicTraits::Rat_kernel::FT& r, const ConicTraits& traits); /*! -\ingroup PkgMinkowskiSum2 +\ingroup PkgMinkowskiSum2Ref Computes the exact representation of the offset of the given polygon `P` by a radius `r`, as described above. diff --git a/Minkowski_sum_2/doc/Minkowski_sum_2/PackageDescription.txt b/Minkowski_sum_2/doc/Minkowski_sum_2/PackageDescription.txt index 19ea98938c3..da4cbc55053 100644 --- a/Minkowski_sum_2/doc/Minkowski_sum_2/PackageDescription.txt +++ b/Minkowski_sum_2/doc/Minkowski_sum_2/PackageDescription.txt @@ -1,16 +1,16 @@ -/// \defgroup PkgMinkowskiSum2 2D Minkowski Sums Reference +/// \defgroup PkgMinkowskiSum2Ref 2D Minkowski Sums Reference /// \defgroup PkgMinkowskiSum2Concepts Concepts -/// \ingroup PkgMinkowskiSum2 +/// \ingroup PkgMinkowskiSum2Ref /*! -\addtogroup PkgMinkowskiSum2 +\addtogroup PkgMinkowskiSum2Ref \cgalPkgDescriptionBegin{2D Minkowski Sums,PkgMinkowskiSum2Summary} \cgalPkgPicture{Minkowski_sum_2/fig/Minkowski_sum_2.png} \cgalPkgSummaryBegin \cgalPkgAuthor{Ron Wein, Alon Baram, Eyal Flato, Efi Fogel, Michael Hemmer, Sebastian Morr} \cgalPkgDesc{This package consists of functions that compute the Minkowski sum of two simple straight-edge polygons in the plane. It also contains functions for computing the Minkowski sum of a polygon and a disc, an operation known as offsetting or dilating a polygon. The package can compute the exact representation of the offset polygon, or provide a guaranteed approximation of the offset.} -\cgalPkgManuals{Chapter_2D_Minkowski_Sums,PkgMinkowskiSum2} +\cgalPkgManuals{Chapter_2D_Minkowski_Sums,PkgMinkowskiSum2Ref} \cgalPkgSummaryEnd \cgalPkgShortInfoBegin \cgalPkgSince{3.3} diff --git a/Minkowski_sum_2/include/CGAL/Minkowski_sum_2/AABB_tree_with_join.h b/Minkowski_sum_2/include/CGAL/Minkowski_sum_2/AABB_tree_with_join.h index 92ee60b1978..c742210a2e1 100644 --- a/Minkowski_sum_2/include/CGAL/Minkowski_sum_2/AABB_tree_with_join.h +++ b/Minkowski_sum_2/include/CGAL/Minkowski_sum_2/AABB_tree_with_join.h @@ -42,7 +42,7 @@ namespace CGAL { -/// \addtogroup PkgAABB_tree +/// \addtogroup PkgAABB_treeRef /// @{ /** diff --git a/Minkowski_sum_3/doc/Minkowski_sum_3/PackageDescription.txt b/Minkowski_sum_3/doc/Minkowski_sum_3/PackageDescription.txt index 6741691780a..96135dd13d6 100644 --- a/Minkowski_sum_3/doc/Minkowski_sum_3/PackageDescription.txt +++ b/Minkowski_sum_3/doc/Minkowski_sum_3/PackageDescription.txt @@ -1,14 +1,14 @@ -/// \defgroup PkgMinkowskiSum3 3D Minkowski Sum of Polyhedra Reference +/// \defgroup PkgMinkowskiSum3Ref 3D Minkowski Sum of Polyhedra Reference /*! -\addtogroup PkgMinkowskiSum3 +\addtogroup PkgMinkowskiSum3Ref \todo check generated documentation \cgalPkgDescriptionBegin{3D Minkowski Sum of Polyhedra,PkgMinkowskiSum3Summary} \cgalPkgPicture{Minkowski_sum_3/fig/Minkowski_sum_3_teaser.png} \cgalPkgSummaryBegin \cgalPkgAuthor{Peter Hachenberger} \cgalPkgDesc{This package provides a function, which computes the Minkowski sum of two point sets in \f$ \mathbb{R}^3\f$. These point sets may consist of isolated vertices, isolated edges, surfaces with convex facets without holes, and open and closed solids. Thus, it is possible to compute the configuration space of translational robots (even in tight passage scenarios) as well as several graphics operations, like for instance the glide operation, which computes the point set swept by a polyhedron that moves along a polygonal line.} -\cgalPkgManuals{Chapter_3D_Minkowski_Sum_of_Polyhedra,PkgMinkowskiSum3} +\cgalPkgManuals{Chapter_3D_Minkowski_Sum_of_Polyhedra,PkgMinkowskiSum3Ref} \cgalPkgSummaryEnd \cgalPkgShortInfoBegin \cgalPkgSince{3.5} diff --git a/Minkowski_sum_3/include/CGAL/minkowski_sum_3.h b/Minkowski_sum_3/include/CGAL/minkowski_sum_3.h index 176645951bd..b7bb39e662d 100644 --- a/Minkowski_sum_3/include/CGAL/minkowski_sum_3.h +++ b/Minkowski_sum_3/include/CGAL/minkowski_sum_3.h @@ -33,7 +33,7 @@ namespace CGAL { /*! -\ingroup PkgMinkowskiSum3 +\ingroup PkgMinkowskiSum3Ref The function `minkowski_sum_3()` computes the Minkowski sum of two given 3D Nef polyhedra \f$ N0\f$ and \f$ N1\f$. Note that the function runs in diff --git a/Miscellany/doc/Miscellany/CGAL/Handle_hash_function.h b/Miscellany/doc/Miscellany/CGAL/Handle_hash_function.h index ebebe8f5659..9c971fdd098 100644 --- a/Miscellany/doc/Miscellany/CGAL/Handle_hash_function.h +++ b/Miscellany/doc/Miscellany/CGAL/Handle_hash_function.h @@ -2,7 +2,7 @@ namespace CGAL { /*! -\ingroup PkgProfilingTools +\ingroup PkgProfilingToolsRef The class `Handle_hash_function` is a model for the `UniqueHashFunction` concept. It is applicable for all key types with pointer-like diff --git a/Miscellany/doc/Miscellany/CGAL/Memory_sizer.h b/Miscellany/doc/Miscellany/CGAL/Memory_sizer.h index 5c5df051208..d67bec9799c 100644 --- a/Miscellany/doc/Miscellany/CGAL/Memory_sizer.h +++ b/Miscellany/doc/Miscellany/CGAL/Memory_sizer.h @@ -2,7 +2,7 @@ namespace CGAL { /*! -\ingroup PkgProfilingTools +\ingroup PkgProfilingToolsRef The class `Memory_sizer` allows to measure the memory size used by the process. Both the virtual memory size and the resident size are available (the resident diff --git a/Miscellany/doc/Miscellany/CGAL/Modifier_base.h b/Miscellany/doc/Miscellany/CGAL/Modifier_base.h index c53841d30a5..2ddf02559ef 100644 --- a/Miscellany/doc/Miscellany/CGAL/Modifier_base.h +++ b/Miscellany/doc/Miscellany/CGAL/Modifier_base.h @@ -2,7 +2,7 @@ namespace CGAL { /*! -\ingroup PkgProfilingTools +\ingroup PkgProfilingToolsRef `Modifier_base` is an abstract base class providing the interface for any modifier. A modifier is a function object derived diff --git a/Miscellany/doc/Miscellany/CGAL/Profile_counter.h b/Miscellany/doc/Miscellany/CGAL/Profile_counter.h index 30b36d15693..d33866cfa68 100644 --- a/Miscellany/doc/Miscellany/CGAL/Profile_counter.h +++ b/Miscellany/doc/Miscellany/CGAL/Profile_counter.h @@ -2,7 +2,7 @@ namespace CGAL { /*! -\ingroup PkgProfilingTools +\ingroup PkgProfilingToolsRef The class `Profile_counter` provides a way to count the number of times a given line of code is executed during the execution of a program, and print this diff --git a/Miscellany/doc/Miscellany/CGAL/Real_timer.h b/Miscellany/doc/Miscellany/CGAL/Real_timer.h index 775a1e013e4..d1d00e34160 100644 --- a/Miscellany/doc/Miscellany/CGAL/Real_timer.h +++ b/Miscellany/doc/Miscellany/CGAL/Real_timer.h @@ -2,7 +2,7 @@ namespace CGAL { /*! -\ingroup PkgProfilingTools +\ingroup PkgProfilingToolsRef The class `Real_timer` is a timer class for measuring real time. A timer `t` of type `Real_timer` is an object with a state. It is diff --git a/Miscellany/doc/Miscellany/CGAL/Timer.h b/Miscellany/doc/Miscellany/CGAL/Timer.h index f0bac801705..172606c81cc 100644 --- a/Miscellany/doc/Miscellany/CGAL/Timer.h +++ b/Miscellany/doc/Miscellany/CGAL/Timer.h @@ -2,7 +2,7 @@ namespace CGAL { /*! -\ingroup PkgProfilingTools +\ingroup PkgProfilingToolsRef The class `Timer` is a timer class for measuring user process time. diff --git a/Miscellany/doc/Miscellany/CGAL/Union_find.h b/Miscellany/doc/Miscellany/CGAL/Union_find.h index 86148c8c12c..4d9d3c9ca96 100644 --- a/Miscellany/doc/Miscellany/CGAL/Union_find.h +++ b/Miscellany/doc/Miscellany/CGAL/Union_find.h @@ -2,7 +2,7 @@ namespace CGAL { /*! -\ingroup PkgProfilingTools +\ingroup PkgProfilingToolsRef An instance `P` of the data type `Union_find` is a partition of values of type `T` into disjoint sets. The template diff --git a/Miscellany/doc/Miscellany/CGAL/Unique_hash_map.h b/Miscellany/doc/Miscellany/CGAL/Unique_hash_map.h index 364240a2e93..d9c172360e6 100644 --- a/Miscellany/doc/Miscellany/CGAL/Unique_hash_map.h +++ b/Miscellany/doc/Miscellany/CGAL/Unique_hash_map.h @@ -2,7 +2,7 @@ namespace CGAL { /*! -\ingroup PkgProfilingTools +\ingroup PkgProfilingToolsRef An instance of the class template `Unique_hash_map` is an injective mapping from the set of keys of type `Key` to the set of diff --git a/Miscellany/doc/Miscellany/PackageDescription.txt b/Miscellany/doc/Miscellany/PackageDescription.txt index 4e1880df2de..c9889a09e97 100644 --- a/Miscellany/doc/Miscellany/PackageDescription.txt +++ b/Miscellany/doc/Miscellany/PackageDescription.txt @@ -1,14 +1,14 @@ -/// \defgroup PkgProfilingTools Profiling Tools, Hash Map, Union-find, Modifiers Reference +/// \defgroup PkgProfilingToolsRef Profiling Tools, Hash Map, Union-find, Modifiers Reference /// \defgroup PkgProfilingToolsConcepts Concepts -/// \ingroup PkgProfilingTools +/// \ingroup PkgProfilingToolsRef /*! -\addtogroup PkgProfilingTools +\addtogroup PkgProfilingToolsRef \cgalPkgDescriptionBegin{Profiling tools\, Hash Map\, Union-find\, Modifiers,PkgProfilingToolsSummary} \cgalPkgPicture{stopwatch.png} \cgalPkgSummaryBegin \cgalPkgAuthors{Lutz Kettner, Sylvain Pion, and Michael Seel} \cgalPkgDesc{This package provides classes for profiling time and memory consumption, profiling macros, a hash map, a union find data structure and a modifier.} -\cgalPkgManuals{Chapter_Profiling_Tools_Hash_Map_Union-find_Modifiers,PkgProfilingTools} +\cgalPkgManuals{Chapter_Profiling_Tools_Hash_Map_Union-find_Modifiers,PkgProfilingToolsRef} \cgalPkgSummaryEnd \cgalPkgShortInfoBegin \cgalPkgSince{3.2} diff --git a/Modular_arithmetic/doc/Modular_arithmetic/CGAL/Modular_traits.h b/Modular_arithmetic/doc/Modular_arithmetic/CGAL/Modular_traits.h index b2c41119af1..4375c9ea9e1 100644 --- a/Modular_arithmetic/doc/Modular_arithmetic/CGAL/Modular_traits.h +++ b/Modular_arithmetic/doc/Modular_arithmetic/CGAL/Modular_traits.h @@ -2,7 +2,7 @@ namespace CGAL { /*! -\ingroup PkgModularArithmetic +\ingroup PkgModularArithmeticRef An instance of `Modular_traits` is a model of `ModularTraits`, where T is the associated type. diff --git a/Modular_arithmetic/doc/Modular_arithmetic/CGAL/Residue.h b/Modular_arithmetic/doc/Modular_arithmetic/CGAL/Residue.h index 89e6b74b07e..bd494cfa0a6 100644 --- a/Modular_arithmetic/doc/Modular_arithmetic/CGAL/Residue.h +++ b/Modular_arithmetic/doc/Modular_arithmetic/CGAL/Residue.h @@ -2,7 +2,7 @@ namespace CGAL { /*! -\ingroup PkgModularArithmetic +\ingroup PkgModularArithmeticRef \anchor Residue \brief The class `Residue` represents a finite field \f$ \mathbb{Z}{/p\mathbb{Z}}\f$, diff --git a/Modular_arithmetic/doc/Modular_arithmetic/PackageDescription.txt b/Modular_arithmetic/doc/Modular_arithmetic/PackageDescription.txt index 6e2cf7ab070..6e9f8f5d5fa 100644 --- a/Modular_arithmetic/doc/Modular_arithmetic/PackageDescription.txt +++ b/Modular_arithmetic/doc/Modular_arithmetic/PackageDescription.txt @@ -1,14 +1,14 @@ -/// \defgroup PkgModularArithmetic Modular Arithmetic Reference +/// \defgroup PkgModularArithmeticRef Modular Arithmetic Reference /// \defgroup PkgModularArithmeticConcepts Concepts -/// \ingroup PkgModularArithmetic +/// \ingroup PkgModularArithmeticRef /*! -\addtogroup PkgModularArithmetic +\addtogroup PkgModularArithmeticRef \cgalPkgDescriptionBegin{Modular Arithmetic,PkgModularArithmeticSummary} \cgalPkgPicture{Modular_arithmetic.png} \cgalPkgSummaryBegin \cgalPkgAuthors{Michael Hemmer and Sylvain Pion} \cgalPkgDesc{This package provides arithmetic over finite fields. The provided tools are in particular useful for filters based on modular arithmetic and algorithms based on Chinese remainder. } -\cgalPkgManuals{Chapter_Modular_Arithmetic,PkgModularArithmetic} +\cgalPkgManuals{Chapter_Modular_Arithmetic,PkgModularArithmeticRef} \cgalPkgSummaryEnd \cgalPkgShortInfoBegin \cgalPkgSince{3.4} diff --git a/Nef_2/doc/Nef_2/CGAL/Extended_cartesian.h b/Nef_2/doc/Nef_2/CGAL/Extended_cartesian.h index ecb679d14c4..95235341ae7 100644 --- a/Nef_2/doc/Nef_2/CGAL/Extended_cartesian.h +++ b/Nef_2/doc/Nef_2/CGAL/Extended_cartesian.h @@ -2,7 +2,7 @@ namespace CGAL { /*! -\ingroup PkgNef2 +\ingroup PkgNef2Ref The class `Extended_cartesian` serves as a traits class for the class `Nef_polyhedron_2`. It uses a polynomial component diff --git a/Nef_2/doc/Nef_2/CGAL/Extended_homogeneous.h b/Nef_2/doc/Nef_2/CGAL/Extended_homogeneous.h index 1c77cd7f52e..d2091ba2fe9 100644 --- a/Nef_2/doc/Nef_2/CGAL/Extended_homogeneous.h +++ b/Nef_2/doc/Nef_2/CGAL/Extended_homogeneous.h @@ -2,7 +2,7 @@ namespace CGAL { /*! -\ingroup PkgNef2 +\ingroup PkgNef2Ref The class `Extended_homogeneous` serves as a traits class for the class `Nef_polyhedron_2`. It uses a polynomial component diff --git a/Nef_2/doc/Nef_2/CGAL/Filtered_extended_homogeneous.h b/Nef_2/doc/Nef_2/CGAL/Filtered_extended_homogeneous.h index f70c8ad5d12..29eddd0b9b5 100644 --- a/Nef_2/doc/Nef_2/CGAL/Filtered_extended_homogeneous.h +++ b/Nef_2/doc/Nef_2/CGAL/Filtered_extended_homogeneous.h @@ -2,7 +2,7 @@ namespace CGAL { /*! -\ingroup PkgNef2 +\ingroup PkgNef2Ref The class `Filtered_extended_homogeneous` serves as a traits class for the class `Nef_polyhedron_2`. It uses a polynomial component diff --git a/Nef_2/doc/Nef_2/CGAL/Nef_polyhedron_2.h b/Nef_2/doc/Nef_2/CGAL/Nef_polyhedron_2.h index a9b92f79b6d..afdc3c8dbd1 100644 --- a/Nef_2/doc/Nef_2/CGAL/Nef_polyhedron_2.h +++ b/Nef_2/doc/Nef_2/CGAL/Nef_polyhedron_2.h @@ -2,7 +2,7 @@ namespace CGAL { /*! -\ingroup PkgNef2 +\ingroup PkgNef2Ref An instance of data type `Nef_polyhedron_2` is a subset of the plane that is the result of forming complements and intersections @@ -285,7 +285,7 @@ Nef_polyhedron_2 symmetric_difference(const Nef_polyhedron_2& N1) ; /// @{ /*! -\ingroup PkgNef2 +\ingroup PkgNef2Ref An instance `D` of the data type `Topological_explorer` is a decorator for interfacing the topological structure of a plane map @@ -661,7 +661,7 @@ void check_integrity_and_topological_planarity(bool faces=true) ; }; /* end Topological_explorer */ /*! -\ingroup PkgNef2 +\ingroup PkgNef2Ref a decorator to examine the underlying plane map. diff --git a/Nef_2/doc/Nef_2/PackageDescription.txt b/Nef_2/doc/Nef_2/PackageDescription.txt index 0ba157bc7bb..a312ba70d83 100644 --- a/Nef_2/doc/Nef_2/PackageDescription.txt +++ b/Nef_2/doc/Nef_2/PackageDescription.txt @@ -1,15 +1,15 @@ -/// \defgroup PkgNef2 2D Boolean Operations on Nef Polygons Reference +/// \defgroup PkgNef2Ref 2D Boolean Operations on Nef Polygons Reference /// \defgroup PkgNef2Concepts Concepts -/// \ingroup PkgNef2 +/// \ingroup PkgNef2Ref /*! -\addtogroup PkgNef2 +\addtogroup PkgNef2Ref \cgalPkgDescriptionBegin{2D Boolean Operations on Nef Polygons,PkgNef2Summary} \cgalPkgPicture{complex-teaser.png} \cgalPkgSummaryBegin \cgalPkgAuthor{Michael Seel} \cgalPkgDesc{A Nef polygon is any set that can be obtained from a finite set of open halfspaces by set complement and set intersection operations. Due to the fact that all other binary set operations like union, difference and symmetric difference can be reduced to intersection and complement calculations, Nef polygons are also closed under those operations. Apart from the set complement operation there are more topological unary set operations that are closed in the domain of Nef polygons interior, boundary, and closure.} -\cgalPkgManuals{Chapter_2D_Boolean_Operations_on_Nef_Polygons,PkgNef2} +\cgalPkgManuals{Chapter_2D_Boolean_Operations_on_Nef_Polygons,PkgNef2Ref} \cgalPkgSummaryEnd \cgalPkgShortInfoBegin \cgalPkgSince{2.3} diff --git a/Nef_3/doc/Nef_3/CGAL/Nef_nary_union_3.h b/Nef_3/doc/Nef_3/CGAL/Nef_nary_union_3.h index 12680890b93..c105a1a981b 100644 --- a/Nef_3/doc/Nef_3/CGAL/Nef_nary_union_3.h +++ b/Nef_3/doc/Nef_3/CGAL/Nef_nary_union_3.h @@ -2,7 +2,7 @@ namespace CGAL { /*! -\ingroup PkgNef3 +\ingroup PkgNef3Ref This class helps to perform the union of a set of 3D Nef polyhedra efficiently. It succesively applies the binary union operation of diff --git a/Nef_3/doc/Nef_3/CGAL/Nef_polyhedron_3.h b/Nef_3/doc/Nef_3/CGAL/Nef_polyhedron_3.h index cccc47b1c72..0a148d74348 100644 --- a/Nef_3/doc/Nef_3/CGAL/Nef_polyhedron_3.h +++ b/Nef_3/doc/Nef_3/CGAL/Nef_polyhedron_3.h @@ -1,7 +1,7 @@ namespace CGAL { /*! - \ingroup PkgNef3 + \ingroup PkgNef3Ref A 3D Nef polyhedron is a subset of the 3-dimensional space that is the result of forming complements and intersections starting from a finite @@ -59,7 +59,7 @@ public: /// @{ /*! - \ingroup PkgNef3 + \ingroup PkgNef3Ref A Halfedge has a double meaning. In the global incidence structure of a `Nef_polyhedron_3` it is an oriented edge going from one vertex to another. @@ -185,7 +185,7 @@ public: }; /* end Halfedge */ /*! - \ingroup PkgNef3 + \ingroup PkgNef3Ref The type `Halffacet_cycle_iterator` iterates over a list of `Object_handles`. Each item of that list can either be assigned @@ -255,7 +255,7 @@ public: /*! - \ingroup PkgNef3 + \ingroup PkgNef3Ref A halffacet is an oriented, rectilinear bounded part of a plane. The following figure depicts the incidences to halfedges, vertices and the notion of facet @@ -361,7 +361,7 @@ public: }; /* end Halffacet */ /*! - \ingroup PkgNef3 + \ingroup PkgNef3Ref The type `SFace_cycle_iterator` iterates over a list of `Object_handles`. Each item of that list can either be assigned @@ -447,7 +447,7 @@ public: }; /* end SFace_cycle_iterator */ /*! - \ingroup PkgNef3 + \ingroup PkgNef3Ref An sface is described by its boundaries. Figures \ref figureNef3HalfedgeIncidences @@ -542,7 +542,7 @@ public: }; /* end SFace */ /*! - \ingroup PkgNef3 + \ingroup PkgNef3Ref A shalfedge is a great arc on a sphere map. Figure \ref figureNef3HalfedgeIncidences @@ -728,7 +728,7 @@ public: }; /* end SHalfedge */ /*! - \ingroup PkgNef3 + \ingroup PkgNef3Ref A shalfloop is a great circle on a sphere map. Figure \ref figureNef3HalfloopIncidences @@ -825,7 +825,7 @@ public: }; /* end SHalfloop */ /*! - \ingroup PkgNef3 + \ingroup PkgNef3Ref A vertex is a point in the 3-dimensional space. Its incidence structure can be accessed creating a sphere map of the vertex. @@ -877,7 +877,7 @@ public: }; /* end Vertex */ /*! - \ingroup PkgNef3 + \ingroup PkgNef3Ref A volume is a full-dimensional connected point set in \f$ \mathbb{R}^3\f$. It is bounded by several shells, i.e.\ a connected part of the boundary incident diff --git a/Nef_3/doc/Nef_3/PackageDescription.txt b/Nef_3/doc/Nef_3/PackageDescription.txt index 27cfa4f73cc..61462a586ca 100644 --- a/Nef_3/doc/Nef_3/PackageDescription.txt +++ b/Nef_3/doc/Nef_3/PackageDescription.txt @@ -1,18 +1,18 @@ -/// \defgroup PkgNef3 3D Boolean Operations on Nef Polyhedra Reference +/// \defgroup PkgNef3Ref 3D Boolean Operations on Nef Polyhedra Reference /// /// \defgroup PkgNef3IOFunctions I/O Functions -/// \ingroup PkgNef3 +/// \ingroup PkgNef3Ref /*! -\addtogroup PkgNef3 +\addtogroup PkgNef3Ref \todo check generated documentation \cgalPkgDescriptionBegin{3D Boolean Operations on Nef Polyhedra,PkgNef3Summary} \cgalPkgPicture{Nef_3-teaser.png} \cgalPkgSummaryBegin \cgalPkgAuthors{Peter Hachenberger and Lutz Kettner} \cgalPkgDesc{3D Nef polyhedra, are a boundary representation for cell-complexes bounded by halfspaces that supports Boolean operations and topological operations in full generality including unbounded cells, mixed dimensional cells (e.g., isolated vertices and antennas). Nef polyhedra distinguish between open and closed sets and can represent non-manifold geometry.} -\cgalPkgManuals{Chapter_3D_Boolean_Operations_on_Nef_Polyhedra,PkgNef3} +\cgalPkgManuals{Chapter_3D_Boolean_Operations_on_Nef_Polyhedra,PkgNef3Ref} \cgalPkgSummaryEnd \cgalPkgShortInfoBegin \cgalPkgSince{3.1} diff --git a/Nef_S2/doc/Nef_S2/CGAL/Nef_polyhedron_S2.h b/Nef_S2/doc/Nef_S2/CGAL/Nef_polyhedron_S2.h index d1707cd9e5f..e8719594ff6 100644 --- a/Nef_S2/doc/Nef_S2/CGAL/Nef_polyhedron_S2.h +++ b/Nef_S2/doc/Nef_S2/CGAL/Nef_polyhedron_S2.h @@ -1,7 +1,7 @@ namespace CGAL { /*! -\ingroup PkgNefS2 +\ingroup PkgNefS2Ref An instance of data type `Nef_polyhedron_S2` is a subset of the sphere \f$ S_2\f$ that is the result of forming complements and @@ -74,7 +74,7 @@ public: /// @{ /*! -\ingroup PkgNefS2 +\ingroup PkgNefS2Ref An object `c` of type `Sphere_circle` is an oriented great circle on the surface of a unit sphere. Such circles correspond to @@ -172,7 +172,7 @@ Sphere_point orthogonal_pole() ; }; /* end Sphere_circle */ /*! -\ingroup PkgNefS2 +\ingroup PkgNefS2Ref An object `p` of type `Sphere_point` is a point on the surface of a unit sphere. Such points correspond to the nontrivial @@ -254,7 +254,7 @@ Sphere_point antipode() ; }; /* end Sphere_point */ /*! -\ingroup PkgNefS2 +\ingroup PkgNefS2Ref An object `s` of type `Sphere_segment` is a segment in the surface of a unit sphere that is part of a great circle trough the @@ -381,7 +381,7 @@ bool has_in_relative_interior(const Sphere_point& p) ; /*! -\ingroup PkgNefS2 +\ingroup PkgNefS2Ref The type `SFace_cycle_iterator` iterates over a list of `Object_handles`. Each item of that list can either be assigned @@ -467,7 +467,7 @@ operator SHalfloop_handle() const; }; /* end SFace_cycle_iterator */ /*! -\ingroup PkgNefS2 +\ingroup PkgNefS2Ref Figures \ref figureNefS2SVertexIncidences and \ref figureNefS2SHalfloopIncidences @@ -551,7 +551,7 @@ SFace_cycle_const_iterator sface_cycle_end() const; }; /* end SFace */ /*! -\ingroup PkgNefS2 +\ingroup PkgNefS2Ref A shalfedge is a great arc on a sphere map. The figure below @@ -696,7 +696,7 @@ bool in_inner_sface_cycle() const; }; /* end SHalfedge */ /*! -\ingroup PkgNefS2 +\ingroup PkgNefS2Ref A sloop is a great circle on a sphere. A shalfloop is an oriented sloop. It is always paired with a shalfloop whose supporting `Sphere_circle` is pointing in @@ -778,7 +778,7 @@ SFace_const_handle incident_sface() const; }; /* end SHalfloop */ /*! -\ingroup PkgNefS2 +\ingroup PkgNefS2Ref Figure \ref figureNefS2SVertexIncidences illustrates the incidence of a svertex on a sphere map. diff --git a/Nef_S2/doc/Nef_S2/PackageDescription.txt b/Nef_S2/doc/Nef_S2/PackageDescription.txt index c2619aec027..f9625e75312 100644 --- a/Nef_S2/doc/Nef_S2/PackageDescription.txt +++ b/Nef_S2/doc/Nef_S2/PackageDescription.txt @@ -1,13 +1,13 @@ -/// \defgroup PkgNefS2 2D Boolean Operations on Nef Polygons Embedded on the Sphere Reference +/// \defgroup PkgNefS2Ref 2D Boolean Operations on Nef Polygons Embedded on the Sphere Reference /*! -\addtogroup PkgNefS2 +\addtogroup PkgNefS2Ref \cgalPkgDescriptionBegin{2D Boolean Operations on Nef Polygons Embedded on the Sphere,PkgNefS2Summary} \cgalPkgPicture{Nef_S2-teaser-small.png} \cgalPkgSummaryBegin \cgalPkgAuthors{Peter Hachenberger and Lutz Kettner} \cgalPkgDesc{This package offers the equivalent to 2D Nef Polygons in the plane. Here halfplanes correspond to half spheres delimited by great circles.} -\cgalPkgManuals{Chapter_2D_Boolean_Operations_on_Nef_Polygons_Embedded_on_the_Sphere,PkgNefS2} +\cgalPkgManuals{Chapter_2D_Boolean_Operations_on_Nef_Polygons_Embedded_on_the_Sphere,PkgNefS2Ref} \cgalPkgSummaryEnd \cgalPkgShortInfoBegin \cgalPkgSince{3.1} diff --git a/Number_types/doc/Number_types/CGAL/number_type_config.h b/Number_types/doc/Number_types/CGAL/number_type_config.h index 3fa09cdb7a9..5d53ff8d521 100644 --- a/Number_types/doc/Number_types/CGAL/number_type_config.h +++ b/Number_types/doc/Number_types/CGAL/number_type_config.h @@ -1,3 +1,3 @@ -/// \ingroup PkgNumberTypes +/// \ingroup PkgNumberTypesRef /// an approximation of \f$ \pi \f$ #define CGAL_PI 3.14159265358979323846 diff --git a/Number_types/doc/Number_types/NumberTypeSupport.txt b/Number_types/doc/Number_types/NumberTypeSupport.txt index ddefc7048ef..7a5845f6f46 100644 --- a/Number_types/doc/Number_types/NumberTypeSupport.txt +++ b/Number_types/doc/Number_types/NumberTypeSupport.txt @@ -16,7 +16,7 @@ requirements, such that they can be successfully used in \cgal code. In general they are expected to be a model of an algebraic structure concepts and in case they model a subring of the real numbers they are also a model of `RealEmbeddable`. For an overview of the algebraic -structure concepts see Section \ref PkgAlgebraicFoundations. +structure concepts see Section \ref PkgAlgebraicFoundationsRef. \section Number_typesBuilt Built-in Number Types diff --git a/Number_types/doc/Number_types/PackageDescription.txt b/Number_types/doc/Number_types/PackageDescription.txt index 04b91bd7869..a63d56b7aef 100644 --- a/Number_types/doc/Number_types/PackageDescription.txt +++ b/Number_types/doc/Number_types/PackageDescription.txt @@ -1,45 +1,45 @@ -/// \defgroup PkgNumberTypes Number Types Reference +/// \defgroup PkgNumberTypesRef Number Types Reference /// \defgroup PkgNumberTypesConcepts Concepts -/// \ingroup PkgNumberTypes +/// \ingroup PkgNumberTypesRef /// \defgroup nt_builtin Built-in types -/// \ingroup PkgNumberTypes +/// \ingroup PkgNumberTypesRef /// \defgroup nt_core CORE -/// \ingroup PkgNumberTypes +/// \ingroup PkgNumberTypesRef /// \defgroup nt_leda LEDA -/// \ingroup PkgNumberTypes +/// \ingroup PkgNumberTypesRef /// \defgroup nt_gmp GMP -/// \ingroup PkgNumberTypes +/// \ingroup PkgNumberTypesRef /// \defgroup nt_cgal CGAL Number Types -/// \ingroup PkgNumberTypes +/// \ingroup PkgNumberTypesRef /// \defgroup nt_cgal CGAL Number Types -/// \ingroup PkgNumberTypes +/// \ingroup PkgNumberTypesRef /// \defgroup nt_rrational Relates Rational -/// \ingroup PkgNumberTypes +/// \ingroup PkgNumberTypesRef /// \defgroup nt_ralgebraic Relates Algebraic Extensions -/// \ingroup PkgNumberTypes +/// \ingroup PkgNumberTypesRef /// \defgroup nt_util Utilities -/// \ingroup PkgNumberTypes +/// \ingroup PkgNumberTypesRef /*! -\addtogroup PkgNumberTypes +\addtogroup PkgNumberTypesRef \todo check generated documentation \cgalPkgDescriptionBegin{Number Types,PkgNumberTypesSummary} \cgalPkgPicture{illustration.png} \cgalPkgSummaryBegin \cgalPkgAuthors{Michael Hemmer, Susan Hert, Sylvain Pion, and Stefan Schirra} \cgalPkgDesc{This package provides number type concepts as well as number type classes and wrapper classes for third party number type libraries. } -\cgalPkgManuals{Chapter_Number_Types,PkgNumberTypes} +\cgalPkgManuals{Chapter_Number_Types,PkgNumberTypesRef} \cgalPkgSummaryEnd \cgalPkgShortInfoBegin \cgalPkgSince{1.0} diff --git a/Optimal_transportation_reconstruction_2/doc/Optimal_transportation_reconstruction_2/PackageDescription.txt b/Optimal_transportation_reconstruction_2/doc/Optimal_transportation_reconstruction_2/PackageDescription.txt index 4bca3636d37..692a7cee60b 100644 --- a/Optimal_transportation_reconstruction_2/doc/Optimal_transportation_reconstruction_2/PackageDescription.txt +++ b/Optimal_transportation_reconstruction_2/doc/Optimal_transportation_reconstruction_2/PackageDescription.txt @@ -1,20 +1,20 @@ -/// \defgroup PkgOptimalTransportationReconstruction2 Optimal Transportation Curve Reconstruction Reference +/// \defgroup PkgOptimalTransportationReconstruction2Ref Optimal Transportation Curve Reconstruction Reference /// \defgroup PkgOptimalTransportationReconstruction2Concepts Concepts -/// \ingroup PkgOptimalTransportationReconstruction2 +/// \ingroup PkgOptimalTransportationReconstruction2Ref /// \defgroup PkgOptimalTransportationReconstruction2Classes Classes -/// \ingroup PkgOptimalTransportationReconstruction2 +/// \ingroup PkgOptimalTransportationReconstruction2Ref /*! -\addtogroup PkgOptimalTransportationReconstruction2 +\addtogroup PkgOptimalTransportationReconstruction2Ref \cgalPkgDescriptionBegin{Optimal Transportation Curve Reconstruction, PkgOptimalTransportationReconstruction2Summary} \cgalPkgPicture{RS_2_small.png} \cgalPkgSummaryBegin \cgalPkgAuthor{Pierre Alliez, David Cohen-Steiner, Fernando de Goes, Clément Jamin, Ivo Vigan} \cgalPkgDesc{This package provides an algorithm to reconstruct and simplify a shape from a point set in the plane, possibly hampered with noise and outliers. It generates as output a set of line segments and isolated points, which approximate the input point set.} -\cgalPkgManuals{Chapter_Optimal_Transportation_Curve_Reconstruction, PkgOptimalTransportationReconstruction2} +\cgalPkgManuals{Chapter_Optimal_Transportation_Curve_Reconstruction, PkgOptimalTransportationReconstruction2Ref} \cgalPkgSummaryEnd \cgalPkgShortInfoBegin \cgalPkgSince{4.8} diff --git a/Partition_2/doc/Partition_2/CGAL/Partition_is_valid_traits_2.h b/Partition_2/doc/Partition_2/CGAL/Partition_is_valid_traits_2.h index 0907ad2079c..aac6c1113d4 100644 --- a/Partition_2/doc/Partition_2/CGAL/Partition_is_valid_traits_2.h +++ b/Partition_2/doc/Partition_2/CGAL/Partition_is_valid_traits_2.h @@ -1,7 +1,7 @@ namespace CGAL { /*! -\ingroup PkgPolygonPartitioning2 +\ingroup PkgPolygonPartitioning2Ref Class that derives a traits class for `partition_is_valid_2()` from a given traits class by defining the validity testing function object diff --git a/Partition_2/doc/Partition_2/CGAL/Partition_traits_2.h b/Partition_2/doc/Partition_2/CGAL/Partition_traits_2.h index 9996785a690..b62785b087f 100644 --- a/Partition_2/doc/Partition_2/CGAL/Partition_traits_2.h +++ b/Partition_2/doc/Partition_2/CGAL/Partition_traits_2.h @@ -1,7 +1,7 @@ namespace CGAL { /*! -\ingroup PkgPolygonPartitioning2 +\ingroup PkgPolygonPartitioning2Ref Traits class that can be used with all the 2-dimensional polygon partitioning algorithms. It is parameterized by diff --git a/Partition_2/doc/Partition_2/CGAL/is_y_monotone_2.h b/Partition_2/doc/Partition_2/CGAL/is_y_monotone_2.h index 06cde3ab9f6..2ae6b776249 100644 --- a/Partition_2/doc/Partition_2/CGAL/is_y_monotone_2.h +++ b/Partition_2/doc/Partition_2/CGAL/is_y_monotone_2.h @@ -1,7 +1,7 @@ namespace CGAL { /*! -\ingroup PkgPolygonPartitioning2 +\ingroup PkgPolygonPartitioning2Ref determines if the sequence of points in the range [`first`, `beyond`) defines a \f$ y\f$-monotone diff --git a/Partition_2/doc/Partition_2/CGAL/partition_2.h b/Partition_2/doc/Partition_2/CGAL/partition_2.h index d94eddd399a..d71a9cb2739 100644 --- a/Partition_2/doc/Partition_2/CGAL/partition_2.h +++ b/Partition_2/doc/Partition_2/CGAL/partition_2.h @@ -1,7 +1,7 @@ namespace CGAL { /*! -\ingroup PkgPolygonPartitioning2 +\ingroup PkgPolygonPartitioning2Ref \brief computes a partition of the polygon defined by the points in the range [`first`, `beyond`) into convex polygons. The @@ -70,7 +70,7 @@ const Traits& traits = Default_traits); namespace CGAL { /*! -\ingroup PkgPolygonPartitioning2 +\ingroup PkgPolygonPartitioning2Ref \brief computes a partition of the polygon defined by the points in the range [`first`, `beyond`) into convex @@ -144,7 +144,7 @@ const Traits& traits = Default_traits); namespace CGAL { /*! -\ingroup PkgPolygonPartitioning2 +\ingroup PkgPolygonPartitioning2Ref \brief computes a partition of the polygon defined by the points in the range [`first`, `beyond`) into convex @@ -218,7 +218,7 @@ const Traits& traits = Default_traits); namespace CGAL { /*! -\ingroup PkgPolygonPartitioning2 +\ingroup PkgPolygonPartitioning2Ref \brief computes a partition of the polygon defined by the points in the range [`first`, `beyond`) into \f$ y\f$-monotone diff --git a/Partition_2/doc/Partition_2/CGAL/partition_is_valid_2.h b/Partition_2/doc/Partition_2/CGAL/partition_is_valid_2.h index afcca9a1f4b..db417a0b428 100644 --- a/Partition_2/doc/Partition_2/CGAL/partition_is_valid_2.h +++ b/Partition_2/doc/Partition_2/CGAL/partition_is_valid_2.h @@ -1,7 +1,7 @@ namespace CGAL { /*! -\ingroup PkgPolygonPartitioning2 +\ingroup PkgPolygonPartitioning2Ref \brief determines if the polygons in the range [`poly_first`, `poly_beyond`) define a valid convex partition of the polygon defined by the points in the @@ -65,7 +65,7 @@ const Traits& traits = Default_traits); namespace CGAL { /*! -\ingroup PkgPolygonPartitioning2 +\ingroup PkgPolygonPartitioning2Ref \brief returns `true` iff the polygons in the range [`poly_first`, `poly_beyond`) define a valid partition of the polygon defined by the @@ -125,7 +125,7 @@ const Traits& traits = Default_traits); namespace CGAL { /*! -\ingroup PkgPolygonPartitioning2 +\ingroup PkgPolygonPartitioning2Ref \brief determines if the polygons in the range [`poly_first`, `poly_beyond`) define a valid \f$ y\f$-monotone partition of the simple, counterclockwise-oriented polygon represented by the points diff --git a/Partition_2/doc/Partition_2/PackageDescription.txt b/Partition_2/doc/Partition_2/PackageDescription.txt index aa18a804b3f..1a69f93f358 100644 --- a/Partition_2/doc/Partition_2/PackageDescription.txt +++ b/Partition_2/doc/Partition_2/PackageDescription.txt @@ -1,19 +1,19 @@ -/// \defgroup PkgPolygonPartitioning2 2D Polygon Partitioning Reference +/// \defgroup PkgPolygonPartitioning2Ref 2D Polygon Partitioning Reference /// \defgroup PkgPolygonPartitioning2Concepts Concepts -/// \ingroup PkgPolygonPartitioning2 +/// \ingroup PkgPolygonPartitioning2Ref /// \defgroup PkgPolygonPartitioning2FunctionObjectConcepts Function Object Concepts -/// \ingroup PkgPolygonPartitioning2 +/// \ingroup PkgPolygonPartitioning2Ref /// \defgroup PkgPolygonPartitioning2FunctionObjectClasses Function Object Classes -/// \ingroup PkgPolygonPartitioning2 +/// \ingroup PkgPolygonPartitioning2Ref /*! -\addtogroup PkgPolygonPartitioning2 +\addtogroup PkgPolygonPartitioning2Ref \todo check generated documentation \cgalPkgDescriptionBegin{2D Polygon Partitioning,PkgPolygonPartitioning2Summary} \cgalPkgPicture{Partition_2/fig/Partition_2-teaser-small.png} \cgalPkgSummaryBegin \cgalPkgAuthor{Susan Hert} \cgalPkgDesc{This package provides functions for partitioning polygons in monotone or convex polygons. The algorithms can produce results with the minimal number of polygons, as well as approximations which have no more than four times the optimal number of convex pieces but they differ in their runtime complexities.} -\cgalPkgManuals{Chapter_2D_Polygon_Partitioning,PkgPolygonPartitioning2} +\cgalPkgManuals{Chapter_2D_Polygon_Partitioning,PkgPolygonPartitioning2Ref} \cgalPkgSummaryEnd \cgalPkgShortInfoBegin \cgalPkgSince{2.3} diff --git a/Periodic_2_triangulation_2/doc/Periodic_2_triangulation_2/Concepts/Periodic_2TriangulationTraits_2.h b/Periodic_2_triangulation_2/doc/Periodic_2_triangulation_2/Concepts/Periodic_2TriangulationTraits_2.h index 20d5c2a68ec..781ffd7b85d 100644 --- a/Periodic_2_triangulation_2/doc/Periodic_2_triangulation_2/Concepts/Periodic_2TriangulationTraits_2.h +++ b/Periodic_2_triangulation_2/doc/Periodic_2_triangulation_2/Concepts/Periodic_2TriangulationTraits_2.h @@ -11,7 +11,7 @@ the geometric primitives used in the triangulation and some function object types for the required predicates on those primitives. It refines the concept -`TriangulationTraits_2` from the \cgal \ref PkgTriangulation2 package. It redefines the +`TriangulationTraits_2` from the \cgal \ref PkgTriangulation2Ref package. It redefines the geometric objects, predicates and constructions to work with point-offset pairs. In most cases the offsets will be (0,0) and the predicates from `TriangulationTraits_2` can be used diff --git a/Periodic_2_triangulation_2/doc/Periodic_2_triangulation_2/PackageDescription.txt b/Periodic_2_triangulation_2/doc/Periodic_2_triangulation_2/PackageDescription.txt index a1e8dcd7e66..d5ae6555a22 100644 --- a/Periodic_2_triangulation_2/doc/Periodic_2_triangulation_2/PackageDescription.txt +++ b/Periodic_2_triangulation_2/doc/Periodic_2_triangulation_2/PackageDescription.txt @@ -1,22 +1,22 @@ -/// \defgroup PkgPeriodic2Triangulation2 2D Periodic Triangulations Reference +/// \defgroup PkgPeriodic2Triangulation2Ref 2D Periodic Triangulations Reference /// \defgroup PkgPeriodic2Triangulation2Concepts Concepts -/// \ingroup PkgPeriodic2Triangulation2 +/// \ingroup PkgPeriodic2Triangulation2Ref /// \defgroup PkgPeriodic2Triangulation2MainClasses Main Classes -/// \ingroup PkgPeriodic2Triangulation2 +/// \ingroup PkgPeriodic2Triangulation2Ref /// \defgroup PkgPeriodic2Triangulation2TraitsClasses Traits Classes -/// \ingroup PkgPeriodic2Triangulation2 +/// \ingroup PkgPeriodic2Triangulation2Ref /// \defgroup PkgPeriodic2Triangulation2VertexFaceClasses Vertex and Face Classes -/// \ingroup PkgPeriodic2Triangulation2 +/// \ingroup PkgPeriodic2Triangulation2Ref /// \defgroup PkgPeriodic2Triangulation2Enums Enums -/// \ingroup PkgPeriodic2Triangulation2 +/// \ingroup PkgPeriodic2Triangulation2Ref /*! -\addtogroup PkgPeriodic2Triangulation2 +\addtogroup PkgPeriodic2Triangulation2Ref \cgalPkgDescriptionBegin{2D Periodic Triangulations,PkgPeriodic2Triangulation2Summary} \cgalPkgPicture{Periodic_2_triangulation_2/fig/p2Delaunay2_thumb.png} @@ -24,7 +24,7 @@ \cgalPkgSummaryBegin \cgalPkgAuthor{Nico Kruithof} \cgalPkgDesc{This package allows to build and handle triangulations of point sets in the two dimensional flat torus. Triangulations are built incrementally and can be modified by insertion or removal of vertices. They offer point location facilities. The package provides Delaunay triangulations and offers nearest neighbor queries and primitives to build the dual Voronoi diagrams.} -\cgalPkgManuals{Chapter_2D_Periodic_Triangulations,PkgPeriodic2Triangulation2} +\cgalPkgManuals{Chapter_2D_Periodic_Triangulations,PkgPeriodic2Triangulation2Ref} \cgalPkgSummaryEnd \cgalPkgShortInfoBegin diff --git a/Periodic_3_mesh_3/doc/Periodic_3_mesh_3/PackageDescription.txt b/Periodic_3_mesh_3/doc/Periodic_3_mesh_3/PackageDescription.txt index bdeb479abca..3627cea8ab1 100644 --- a/Periodic_3_mesh_3/doc/Periodic_3_mesh_3/PackageDescription.txt +++ b/Periodic_3_mesh_3/doc/Periodic_3_mesh_3/PackageDescription.txt @@ -1,29 +1,29 @@ -/// \defgroup PkgPeriodic_3_mesh_3 3D Periodic Mesh Generation Reference +/// \defgroup PkgPeriodic_3_mesh_3Ref 3D Periodic Mesh Generation Reference /// \defgroup PkgPeriodic_3_mesh_3Concepts Concepts -/// \ingroup PkgPeriodic_3_mesh_3 +/// \ingroup PkgPeriodic_3_mesh_3Ref /// The concepts of this package. /// \defgroup PkgPeriodic_3_mesh_3MeshClasses Mesh Classes -/// \ingroup PkgPeriodic_3_mesh_3 +/// \ingroup PkgPeriodic_3_mesh_3Ref /// The classes in this group are the main classes involved in the mesh generation process. /// \defgroup PkgPeriodic_3_mesh_3Domains Domain Classes -/// \ingroup PkgPeriodic_3_mesh_3 +/// \ingroup PkgPeriodic_3_mesh_3Ref /// The classes in this group are models of domain concepts and their associated classes. /// \defgroup PkgPeriodic_3_mesh_3Functions Mesh Generation Functions -/// \ingroup PkgPeriodic_3_mesh_3 +/// \ingroup PkgPeriodic_3_mesh_3Ref /// The two main functions to generate a periodic mesh are `make_periodic_3_mesh_3()` /// and `refine_periodic_3_mesh_3()`. Other functions are provided to optimize /// an existing periodic mesh. /// \defgroup PkgPeriodic_3_mesh_3IOFunctions Input/Output Functions -/// \ingroup PkgPeriodic_3_mesh_3 +/// \ingroup PkgPeriodic_3_mesh_3Ref /// The free functions that can be used to read and write periodic meshes. /*! -\addtogroup PkgPeriodic_3_mesh_3 +\addtogroup PkgPeriodic_3_mesh_3Ref \cgalPkgDescriptionBegin{3D Periodic Mesh Generation,PkgPeriodic_3_mesh_3Summary} \cgalPkgPicture{periodic_mesher_small.png} \cgalPkgSummaryBegin @@ -32,7 +32,7 @@ discretizing periodic 3D domains. The domain to be meshed is a region of the three-dimensional flat torus. The periodic mesh generator provides users with the same flexibility that is offered in the \ref PkgMesh_3Summary package.} -\cgalPkgManuals{Chapter_3D_Periodic_Mesh_Generation,PkgPeriodic_3_mesh_3} +\cgalPkgManuals{Chapter_3D_Periodic_Mesh_Generation,PkgPeriodic_3_mesh_3Ref} \cgalPkgSummaryEnd \cgalPkgShortInfoBegin \cgalPkgSince{4.13} diff --git a/Periodic_3_triangulation_3/doc/Periodic_3_triangulation_3/PackageDescription.txt b/Periodic_3_triangulation_3/doc/Periodic_3_triangulation_3/PackageDescription.txt index 10ba236de93..cb7391d4fa5 100644 --- a/Periodic_3_triangulation_3/doc/Periodic_3_triangulation_3/PackageDescription.txt +++ b/Periodic_3_triangulation_3/doc/Periodic_3_triangulation_3/PackageDescription.txt @@ -1,16 +1,16 @@ -/// \defgroup PkgPeriodic3Triangulation3 3D Periodic Triangulations Reference +/// \defgroup PkgPeriodic3Triangulation3Ref 3D Periodic Triangulations Reference /// \defgroup PkgPeriodic3Triangulation3Concepts Concepts -/// \ingroup PkgPeriodic3Triangulation3 +/// \ingroup PkgPeriodic3Triangulation3Ref /// \defgroup PkgPeriodic3Triangulation3MainClasses Main Classes -/// \ingroup PkgPeriodic3Triangulation3 +/// \ingroup PkgPeriodic3Triangulation3Ref /// \defgroup PkgPeriodic3Triangulation3TraitsClasses Traits Classes -/// \ingroup PkgPeriodic3Triangulation3 +/// \ingroup PkgPeriodic3Triangulation3Ref /*! -\addtogroup PkgPeriodic3Triangulation3 +\addtogroup PkgPeriodic3Triangulation3Ref \cgalPkgDescriptionBegin{3D Periodic Triangulations,PkgPeriodic3Triangulation3Summary} \cgalPkgPicture{p3Delaunay3_small.jpg} @@ -21,7 +21,7 @@ in the three dimensional flat torus. Triangulations are built incrementally and can be modified by insertion or removal of vertices. They offer point location facilities. The package provides Delaunay and regular triangulations and offers nearest neighbor queries and primitives to build the dual Voronoi diagrams.} -\cgalPkgManuals{Chapter_3D_Periodic_Triangulations,PkgPeriodic3Triangulation3} +\cgalPkgManuals{Chapter_3D_Periodic_Triangulations,PkgPeriodic3Triangulation3Ref} \cgalPkgSummaryEnd \cgalPkgShortInfoBegin \cgalPkgSince{3.5} diff --git a/Point_set_2/doc/Point_set_2/CGAL/Point_set_2.h b/Point_set_2/doc/Point_set_2/CGAL/Point_set_2.h index 505d18591cd..6938484d48e 100644 --- a/Point_set_2/doc/Point_set_2/CGAL/Point_set_2.h +++ b/Point_set_2/doc/Point_set_2/CGAL/Point_set_2.h @@ -1,7 +1,7 @@ namespace CGAL { /*! -\ingroup PkgPointSet2 +\ingroup PkgPointSet2Ref An instance `PS` of the data type `Point_set_2` is a Delaunay Triangulation of its vertex set. The class `Point_set_2` is inherited from the \cgal Delaunay triangulation, diff --git a/Point_set_2/doc/Point_set_2/PackageDescription.txt b/Point_set_2/doc/Point_set_2/PackageDescription.txt index c6a422cf1e9..c629950dc3e 100644 --- a/Point_set_2/doc/Point_set_2/PackageDescription.txt +++ b/Point_set_2/doc/Point_set_2/PackageDescription.txt @@ -1,22 +1,22 @@ -/// \defgroup PkgPointSet2 2D Range and Neighbor Search Reference +/// \defgroup PkgPointSet2Ref 2D Range and Neighbor Search Reference /// \defgroup PkgPointSet2Concepts Concepts -/// \ingroup PkgPointSet2 +/// \ingroup PkgPointSet2Ref /// \defgroup PkgPointSet2RangeSearch Range Search -/// \ingroup PkgPointSet2 +/// \ingroup PkgPointSet2Ref /// \defgroup PkgPointSet2NeighborSearch Nearest Neighbor Search -/// \ingroup PkgPointSet2 +/// \ingroup PkgPointSet2Ref /*! -\addtogroup PkgPointSet2 +\addtogroup PkgPointSet2Ref \todo check generated documentation \cgalPkgDescriptionBegin{2D Range and Neighbor Search,PkgPointSet2Summary} \cgalPkgPicture{Point_set_2/fig/point_set.png} \cgalPkgSummaryBegin \cgalPkgAuthor{Matthias Bäsken} \cgalPkgDesc{This package supports circular, triangular, and isorectangular range search queries as well as (k) nearest neighbor search queries on 2D point sets. In contrast to the spatial searching package, this package uses a Delaunay triangulation as underlying data structure.} -\cgalPkgManuals{Chapter_2D_Range_and_Neighbor_Search,PkgPointSet2} +\cgalPkgManuals{Chapter_2D_Range_and_Neighbor_Search,PkgPointSet2Ref} \cgalPkgSummaryEnd \cgalPkgShortInfoBegin \cgalPkgSince{2.1} diff --git a/Point_set_3/doc/Point_set_3/PackageDescription.txt b/Point_set_3/doc/Point_set_3/PackageDescription.txt index ba953ea5b1e..da7c382eeb9 100644 --- a/Point_set_3/doc/Point_set_3/PackageDescription.txt +++ b/Point_set_3/doc/Point_set_3/PackageDescription.txt @@ -1,12 +1,12 @@ /*! -\defgroup PkgPointSet3 3D Point Set Reference +\defgroup PkgPointSet3Ref 3D Point Set Reference \cgalPkgDescriptionBegin{3D Point Set, PkgPointSet3Summary} \cgalPkgPicture{point_set_3.png} \cgalPkgSummaryBegin \cgalPkgAuthors{Simon Giraudot} \cgalPkgDesc{This component provides the user with a flexible 3D point set data structure. The user can define any additional property needed such as normal vectors, colors or labels. \cgal algorithms can be easily applied to this data structure.} -\cgalPkgManuals{Chapter_Point_Set_3, PkgPointSet3} +\cgalPkgManuals{Chapter_Point_Set_3, PkgPointSet3Ref} \cgalPkgSummaryEnd \cgalPkgShortInfoBegin \cgalPkgSince{4.10} @@ -22,7 +22,7 @@ - `CGAL::Point_set_3` \defgroup PkgPointSet3IO Input/Output -\ingroup PkgPointSet3 +\ingroup PkgPointSet3Ref \brief This module offers convenience overloads of input/ouput functions available in the \ref PkgPointSetProcessingSummary package. @@ -40,6 +40,6 @@ the `CGAL::Point_set_3` class with the name and type given by the PLY header or by the LAS standard. For a complete documentation of these functions, please refer to the -\ref PkgPointSetProcessing manual. +\ref PkgPointSetProcessingRef manual. */ diff --git a/Point_set_3/doc/Point_set_3/Point_set_3.txt b/Point_set_3/doc/Point_set_3/Point_set_3.txt index 60a5ba36a3b..466e79774e6 100644 --- a/Point_set_3/doc/Point_set_3/Point_set_3.txt +++ b/Point_set_3/doc/Point_set_3/Point_set_3.txt @@ -69,7 +69,7 @@ structure: the points and attributes are then accessed through ranges and property maps. The `CGAL::Point_set_3` class is a range that provides property maps: applying \cgal algorithms is straightforward. -As the \ref PkgPointSetProcessing "Point Set Processing" algorithms +As the \ref PkgPointSetProcessingRef "Point Set Processing" algorithms use \ref BGLNamedParameters to handle property maps, a method `CGAL::Point_set_3::parameters()` is provided: it returns a named parameter object with the right point and normal maps to read and diff --git a/Point_set_3/include/CGAL/Point_set_3.h b/Point_set_3/include/CGAL/Point_set_3.h index c5f3cba43e9..afb4f87349a 100644 --- a/Point_set_3/include/CGAL/Point_set_3.h +++ b/Point_set_3/include/CGAL/Point_set_3.h @@ -41,7 +41,7 @@ namespace CGAL { /*! - \ingroup PkgPointSet3 + \ingroup PkgPointSet3Ref \brief A collection of points with dynamically associated properties. @@ -67,7 +67,7 @@ namespace CGAL { removed elements. A garbage collection method must be called to really remove it from memory. - For convenience, all functions of the package \ref PkgPointSetProcessing + For convenience, all functions of the package \ref PkgPointSetProcessingRef are provided with an overload that takes a Point_set_3 object as an argument. diff --git a/Point_set_processing_3/doc/Point_set_processing_3/NamedParameters.txt b/Point_set_processing_3/doc/Point_set_processing_3/NamedParameters.txt index 154688a883d..a65bfbacfa0 100644 --- a/Point_set_processing_3/doc/Point_set_processing_3/NamedParameters.txt +++ b/Point_set_processing_3/doc/Point_set_processing_3/NamedParameters.txt @@ -1,6 +1,6 @@ /*! \defgroup psp_namedparameters Named Parameters for Point Set Processing -\ingroup PkgPointSetProcessing +\ingroup PkgPointSetProcessingRef In this package, all functions optional parameters are implemented as BGL optional named parameters (see \ref BGLNamedParameters for more information on how to use them). diff --git a/Point_set_processing_3/doc/Point_set_processing_3/PackageDescription.txt b/Point_set_processing_3/doc/Point_set_processing_3/PackageDescription.txt index b03c31e380f..cb6538835c0 100644 --- a/Point_set_processing_3/doc/Point_set_processing_3/PackageDescription.txt +++ b/Point_set_processing_3/doc/Point_set_processing_3/PackageDescription.txt @@ -1,38 +1,38 @@ /*! -\defgroup PkgPointSetProcessing Point Set Processing Reference +\defgroup PkgPointSetProcessingRef Point Set Processing Reference \defgroup PkgPointSetProcessingAlgorithms Algorithms -\ingroup PkgPointSetProcessing +\ingroup PkgPointSetProcessingRef Collection of algorithms of point set processing (smoothing, simplification, etc.). \defgroup PkgPointSetProcessingIO IO (XYZ/OFF Formats) -\ingroup PkgPointSetProcessing +\ingroup PkgPointSetProcessingRef Read and write points (with or without normal vectors) in XYZ and OFF formats. \defgroup PkgPointSetProcessingIOPly IO (PLY Format) -\ingroup PkgPointSetProcessing +\ingroup PkgPointSetProcessingRef Read and write points (with or without additional properties) in PLY format. \defgroup PkgPointSetProcessingIOLas IO (LAS Format) -\ingroup PkgPointSetProcessing +\ingroup PkgPointSetProcessingRef Read and write points (with or without additional properties) in LAS format. -\addtogroup PkgPointSetProcessing +\addtogroup PkgPointSetProcessingRef \cgalPkgDescriptionBegin{Point Set Processing,PkgPointSetProcessingSummary} \cgalPkgPicture{point_set_processing_detail.png} \cgalPkgSummaryBegin \cgalPkgAuthors{Pierre Alliez, Simon Giraudot, Clément Jamin, Florent Lafarge, Quentin Mérigot, Jocelyn Meyron, Laurent Saboret, Nader Salman, Shihao Wu} \cgalPkgDesc{This \cgal component implements methods to analyze and process unorganized point sets. The input is an unorganized point set, possibly with normal attributes (unoriented or oriented). The point set can be analyzed to measure its average spacing, and processed through functions devoted to the simplification, outlier removal, smoothing, normal estimation, normal orientation and feature edges estimation.} -\cgalPkgManuals{Chapter_Point_Set_Processing,PkgPointSetProcessing} +\cgalPkgManuals{Chapter_Point_Set_Processing,PkgPointSetProcessingRef} \cgalPkgSummaryEnd \cgalPkgShortInfoBegin \cgalPkgSince{3.5} diff --git a/Point_set_processing_3/doc/Point_set_processing_3/Point_set_processing_3.txt b/Point_set_processing_3/doc/Point_set_processing_3/Point_set_processing_3.txt index ccd0c750df0..4aece868ac7 100644 --- a/Point_set_processing_3/doc/Point_set_processing_3/Point_set_processing_3.txt +++ b/Point_set_processing_3/doc/Point_set_processing_3/Point_set_processing_3.txt @@ -143,7 +143,7 @@ CGAL::jet_estimate_normals normal_map (CGAL::Second_of_pair_property_map())); \endcode -Please refer to the [Reference Manual](@ref PkgPointSetProcessing) for +Please refer to the [Reference Manual](@ref PkgPointSetProcessingRef) for the detailed API of the Point Set Processing functions. @@ -636,7 +636,7 @@ point set: Several functions of this package provide a callback mechanism that enables the user to track the progress of the algorithms and to interrupt them if needed. A callback, in this package, is an instance of `CGAL::cpp11::function` that takes the advancement as a parameter (between 0. when the algorithm begins to 1. when the algorithm is completed) and that returns `true` if the algorithm should carry on, `false` otherwise. It is passed as a named parameter with an empty function as default. -Algorithms that support this mechanism are detailed in the [Reference Manual](@ref PkgPointSetProcessing), along with the effect that an early interruption has on the output. +Algorithms that support this mechanism are detailed in the [Reference Manual](@ref PkgPointSetProcessingRef), along with the effect that an early interruption has on the output. \subsection Point_set_processing_3Example_callbacks Example diff --git a/Point_set_shape_detection_3/doc/Point_set_shape_detection_3/PackageDescription.txt b/Point_set_shape_detection_3/doc/Point_set_shape_detection_3/PackageDescription.txt index 908d1c28ae3..f8755d8b6e3 100644 --- a/Point_set_shape_detection_3/doc/Point_set_shape_detection_3/PackageDescription.txt +++ b/Point_set_shape_detection_3/doc/Point_set_shape_detection_3/PackageDescription.txt @@ -1,15 +1,15 @@ /*! -\defgroup PkgPointSetShapeDetection3 Point Set Shape Detection Reference +\defgroup PkgPointSetShapeDetection3Ref Point Set Shape Detection Reference \defgroup PkgPointSetShapeDetection3Concepts Concepts -\ingroup PkgPointSetShapeDetection3 +\ingroup PkgPointSetShapeDetection3Ref \defgroup PkgPointSetShapeDetection3Shapes Shapes -\ingroup PkgPointSetShapeDetection3 +\ingroup PkgPointSetShapeDetection3Ref -\addtogroup PkgPointSetShapeDetection3 +\addtogroup PkgPointSetShapeDetection3Ref \cgalPkgDescriptionBegin{Point Set Shape Detection, PkgPointSetShapeDetection3Summary} \cgalPkgPicture{shapes_detail.png} @@ -17,7 +17,7 @@ \cgalPkgSummaryBegin \cgalPkgAuthors{Sven Oesau, Yannick Verdie, Clément Jamin, Pierre Alliez, Florent Lafarge, Simon Giraudot} \cgalPkgDesc{This component implements two primitive shape detection algorithms: efficient RANSAC and region growing. Planes are detected from point sets with unoriented normals. RANSAC also handles the following shapes: sphere, cylinder, cone and torus. Other types of shapes can be detected through implementing a class deriving from the base shape class.} -\cgalPkgManuals{Chapter_Point_Set_Shape_Detection, PkgPointSetShapeDetection3} +\cgalPkgManuals{Chapter_Point_Set_Shape_Detection, PkgPointSetShapeDetection3Ref} \cgalPkgSummaryEnd \cgalPkgShortInfoBegin diff --git a/Point_set_shape_detection_3/include/CGAL/Shape_detection_3.h b/Point_set_shape_detection_3/include/CGAL/Shape_detection_3.h index 4bf090f5e56..e8c8d8c28a9 100644 --- a/Point_set_shape_detection_3/include/CGAL/Shape_detection_3.h +++ b/Point_set_shape_detection_3/include/CGAL/Shape_detection_3.h @@ -21,7 +21,7 @@ // /** -* \ingroup PkgPointSetShapeDetection3 +* \ingroup PkgPointSetShapeDetection3Ref * \file CGAL/Shape_detection_3.h * Convenience header file including the headers of this package. */ diff --git a/Point_set_shape_detection_3/include/CGAL/Shape_detection_3/Efficient_RANSAC.h b/Point_set_shape_detection_3/include/CGAL/Shape_detection_3/Efficient_RANSAC.h index 5694bf54031..7c52d6ef45e 100644 --- a/Point_set_shape_detection_3/include/CGAL/Shape_detection_3/Efficient_RANSAC.h +++ b/Point_set_shape_detection_3/include/CGAL/Shape_detection_3/Efficient_RANSAC.h @@ -59,7 +59,7 @@ namespace CGAL { namespace Shape_detection_3 { /*! -\ingroup PkgPointSetShapeDetection3 +\ingroup PkgPointSetShapeDetection3Ref \brief A shape detection algorithm using a RANSAC method. Given a point set in 3D space with unoriented normals, sampled on surfaces, diff --git a/Point_set_shape_detection_3/include/CGAL/Shape_detection_3/Efficient_RANSAC_traits.h b/Point_set_shape_detection_3/include/CGAL/Shape_detection_3/Efficient_RANSAC_traits.h index dc2e8bddaea..8af00b65b00 100644 --- a/Point_set_shape_detection_3/include/CGAL/Shape_detection_3/Efficient_RANSAC_traits.h +++ b/Point_set_shape_detection_3/include/CGAL/Shape_detection_3/Efficient_RANSAC_traits.h @@ -39,7 +39,7 @@ namespace CGAL { namespace Shape_detection_3 { /*! - \ingroup PkgPointSetShapeDetection3 + \ingroup PkgPointSetShapeDetection3Ref \brief %Default traits class to use the shape detection class `Efficient_RANSAC`. \cgalModels `Shape_detection_3::Traits` diff --git a/Point_set_shape_detection_3/include/CGAL/Shape_detection_3/Region_growing.h b/Point_set_shape_detection_3/include/CGAL/Shape_detection_3/Region_growing.h index 2e0566b6bd1..9aa50891591 100644 --- a/Point_set_shape_detection_3/include/CGAL/Shape_detection_3/Region_growing.h +++ b/Point_set_shape_detection_3/include/CGAL/Shape_detection_3/Region_growing.h @@ -44,7 +44,7 @@ namespace Shape_detection_3 { /*! -\ingroup PkgPointSetShapeDetection3 +\ingroup PkgPointSetShapeDetection3Ref \brief A shape detection algorithm using a region growing method. Given a point set in 3D space with unoriented normals, sampled on surfaces, diff --git a/Point_set_shape_detection_3/include/CGAL/Shape_detection_3/Shape_detection_traits.h b/Point_set_shape_detection_3/include/CGAL/Shape_detection_3/Shape_detection_traits.h index e8f0852d845..3faacfc4e01 100644 --- a/Point_set_shape_detection_3/include/CGAL/Shape_detection_3/Shape_detection_traits.h +++ b/Point_set_shape_detection_3/include/CGAL/Shape_detection_3/Shape_detection_traits.h @@ -31,7 +31,7 @@ namespace CGAL { namespace Shape_detection_3 { /*! - \ingroup PkgPointSetShapeDetection3 + \ingroup PkgPointSetShapeDetection3Ref \brief %Default traits class to use the shape detection class `Efficient_RANSAC`. \cgalModels `Shape_detection_3::Traits` diff --git a/Point_set_shape_detection_3/include/CGAL/Shape_detection_3/property_maps.h b/Point_set_shape_detection_3/include/CGAL/Shape_detection_3/property_maps.h index f26597397a7..bf0e0e2c9f0 100644 --- a/Point_set_shape_detection_3/include/CGAL/Shape_detection_3/property_maps.h +++ b/Point_set_shape_detection_3/include/CGAL/Shape_detection_3/property_maps.h @@ -32,7 +32,7 @@ namespace CGAL { namespace Shape_detection_3 { /*! - \ingroup PkgPointSetShapeDetection3 + \ingroup PkgPointSetShapeDetection3Ref Property map that associate a point index to its assigned shape found by a shape detection algorithm (such as @@ -87,7 +87,7 @@ namespace Shape_detection_3 { }; /*! - \ingroup PkgPointSetShapeDetection3 + \ingroup PkgPointSetShapeDetection3Ref Property map that associates a detected plane object (`CGAL::Shape_detection_3::Plane`) to a `CGAL::Plane_3` object. diff --git a/Point_set_shape_detection_3/include/CGAL/regularize_planes.h b/Point_set_shape_detection_3/include/CGAL/regularize_planes.h index 14cb4907b22..148c9482c9d 100644 --- a/Point_set_shape_detection_3/include/CGAL/regularize_planes.h +++ b/Point_set_shape_detection_3/include/CGAL/regularize_planes.h @@ -21,7 +21,7 @@ // /** - * \ingroup PkgPointSetShapeDetection3 + * \ingroup PkgPointSetShapeDetection3Ref * \file CGAL/regularize_planes.h * */ @@ -540,7 +540,7 @@ void subgraph_mutually_orthogonal_clusters (std::vector >& // Public section // ---------------------------------------------------------------------------- -/// \ingroup PkgPointSetShapeDetection3 +/// \ingroup PkgPointSetShapeDetection3Ref /*! diff --git a/Poisson_surface_reconstruction_3/doc/Poisson_surface_reconstruction_3/PackageDescription.txt b/Poisson_surface_reconstruction_3/doc/Poisson_surface_reconstruction_3/PackageDescription.txt index 380bf560294..0639d3daa55 100644 --- a/Poisson_surface_reconstruction_3/doc/Poisson_surface_reconstruction_3/PackageDescription.txt +++ b/Poisson_surface_reconstruction_3/doc/Poisson_surface_reconstruction_3/PackageDescription.txt @@ -1,12 +1,12 @@ -/// \defgroup PkgPoissonSurfaceReconstruction Poisson Surface Reconstruction Reference +/// \defgroup PkgPoissonSurfaceReconstructionRef Poisson Surface Reconstruction Reference /*! -\addtogroup PkgPoissonSurfaceReconstruction +\addtogroup PkgPoissonSurfaceReconstructionRef \cgalPkgDescriptionBegin{Poisson Surface Reconstruction,PkgPoissonSurfaceReconstructionSummary} \cgalPkgPicture{surface_reconstruction_points_detail.png} \cgalPkgSummaryBegin \cgalPkgAuthors{Pierre Alliez, Laurent Saboret, Gaël Guennebaud} \cgalPkgDesc{This package implements a surface reconstruction method: Poisson Surface Reconstruction. It takes as input a set of points with oriented normals and computes an implicit function. The \cgal surface mesh generator can then be used to extract an iso-surface from this function. } -\cgalPkgManuals{Chapter_Poisson_Surface_Reconstruction,PkgPoissonSurfaceReconstruction} +\cgalPkgManuals{Chapter_Poisson_Surface_Reconstruction,PkgPoissonSurfaceReconstructionRef} \cgalPkgSummaryEnd \cgalPkgShortInfoBegin \cgalPkgSince{3.5} diff --git a/Poisson_surface_reconstruction_3/include/CGAL/Poisson_reconstruction_function.h b/Poisson_surface_reconstruction_3/include/CGAL/Poisson_reconstruction_function.h index c4d72553b36..d8555c71e8e 100644 --- a/Poisson_surface_reconstruction_3/include/CGAL/Poisson_reconstruction_function.h +++ b/Poisson_surface_reconstruction_3/include/CGAL/Poisson_reconstruction_function.h @@ -149,7 +149,7 @@ struct Special_wrapper_of_two_functions_keep_pointers { /*! -\ingroup PkgPoissonSurfaceReconstruction +\ingroup PkgPoissonSurfaceReconstructionRef \brief Implementation of the Poisson Surface Reconstruction method. diff --git a/Poisson_surface_reconstruction_3/include/CGAL/poisson_surface_reconstruction.h b/Poisson_surface_reconstruction_3/include/CGAL/poisson_surface_reconstruction.h index 3fa7f6b5fb9..cf9f00b73e2 100644 --- a/Poisson_surface_reconstruction_3/include/CGAL/poisson_surface_reconstruction.h +++ b/Poisson_surface_reconstruction_3/include/CGAL/poisson_surface_reconstruction.h @@ -34,7 +34,7 @@ namespace CGAL { /*! - \ingroup PkgPoissonSurfaceReconstruction + \ingroup PkgPoissonSurfaceReconstructionRef Performs surface reconstruction as follows: diff --git a/Polygon/doc/Polygon/PackageDescription.txt b/Polygon/doc/Polygon/PackageDescription.txt index 84e1a8d5c77..39c3596ffaa 100644 --- a/Polygon/doc/Polygon/PackageDescription.txt +++ b/Polygon/doc/Polygon/PackageDescription.txt @@ -1,20 +1,20 @@ -/// \defgroup PkgPolygon2 2D Polygon Reference +/// \defgroup PkgPolygon2Ref 2D Polygon Reference /// \defgroup PkgPolygon2Concepts Concepts -/// \ingroup PkgPolygon2 +/// \ingroup PkgPolygon2Ref /// \defgroup PkgPolygon2Functions Global Functions -/// \ingroup PkgPolygon2 +/// \ingroup PkgPolygon2Ref /*! -\addtogroup PkgPolygon2 +\addtogroup PkgPolygon2Ref \cgalPkgDescriptionBegin{2D Polygons,PkgPolygon2Summary} \cgalPkgPicture{polygon.png} \cgalPkgSummaryBegin \cgalPkgAuthors{Geert-Jan Giezeman and Wieger Wesselink} \cgalPkgDesc{This package provides a 2D polygon class and operations on sequences of points, like bounding box, extremal points, signed area, simplicity and convexity test, orientation, and point location. The demo includes operations on polygons, such as computing a convex partition, and the straight skeleton.} -\cgalPkgManuals{Chapter_2D_Polygon,PkgPolygon2} +\cgalPkgManuals{Chapter_2D_Polygon,PkgPolygon2Ref} \cgalPkgSummaryEnd \cgalPkgShortInfoBegin \cgalPkgSince{0.9} diff --git a/Polygon/include/CGAL/General_polygon_with_holes_2.h b/Polygon/include/CGAL/General_polygon_with_holes_2.h index 3e896d71c6f..b2d07098c02 100644 --- a/Polygon/include/CGAL/General_polygon_with_holes_2.h +++ b/Polygon/include/CGAL/General_polygon_with_holes_2.h @@ -33,7 +33,7 @@ namespace CGAL { /*! -\ingroup PkgPolygon2 +\ingroup PkgPolygon2Ref The class `General_polygon_with_holes_2` models the concept `GeneralPolygonWithHoles_2`. It represents a general polygon with diff --git a/Polygon/include/CGAL/Polygon_2.h b/Polygon/include/CGAL/Polygon_2.h index 443cefca305..e3458435161 100644 --- a/Polygon/include/CGAL/Polygon_2.h +++ b/Polygon/include/CGAL/Polygon_2.h @@ -49,7 +49,7 @@ namespace CGAL { -/// \ingroup PkgPolygon2 +/// \ingroup PkgPolygon2Ref /// The class Polygon_2 implements polygons. The Polygon_2 is /// parameterized by a traits class and a container class. The latter /// can be any class that fulfills the requirements for an STL diff --git a/Polygon/include/CGAL/Polygon_with_holes_2.h b/Polygon/include/CGAL/Polygon_with_holes_2.h index 0f63f43805d..70fcb52a4ee 100644 --- a/Polygon/include/CGAL/Polygon_with_holes_2.h +++ b/Polygon/include/CGAL/Polygon_with_holes_2.h @@ -34,7 +34,7 @@ namespace CGAL { /*! -\ingroup PkgPolygon2 +\ingroup PkgPolygon2Ref The class `Polygon_with_holes_2` models the concept `GeneralPolygonWithHoles_2`. It represents a linear polygon with holes. It is parameterized with two diff --git a/Polygon_mesh_processing/doc/Polygon_mesh_processing/NamedParameters.txt b/Polygon_mesh_processing/doc/Polygon_mesh_processing/NamedParameters.txt index 839bd7b52ff..87a4e4b0058 100644 --- a/Polygon_mesh_processing/doc/Polygon_mesh_processing/NamedParameters.txt +++ b/Polygon_mesh_processing/doc/Polygon_mesh_processing/NamedParameters.txt @@ -1,6 +1,6 @@ /*! \defgroup pmp_namedparameters Named Parameters for Polygon Mesh Processing -\ingroup PkgPolygonMeshProcessing +\ingroup PkgPolygonMeshProcessingRef In this package, all functions optional parameters are implemented as BGL optional named parameters (see \ref BGLNamedParameters for more information on how to use them). diff --git a/Polygon_mesh_processing/doc/Polygon_mesh_processing/PackageDescription.txt b/Polygon_mesh_processing/doc/Polygon_mesh_processing/PackageDescription.txt index 3baa705dad3..87b7e9d6954 100644 --- a/Polygon_mesh_processing/doc/Polygon_mesh_processing/PackageDescription.txt +++ b/Polygon_mesh_processing/doc/Polygon_mesh_processing/PackageDescription.txt @@ -1,6 +1,6 @@ -/// \defgroup PkgPolygonMeshProcessing Polygon Mesh Processing Reference +/// \defgroup PkgPolygonMeshProcessingRef Polygon Mesh Processing Reference /// \defgroup PkgPolygonMeshProcessingConcepts Concepts -/// \ingroup PkgPolygonMeshProcessing +/// \ingroup PkgPolygonMeshProcessingRef /// \defgroup keep_connected_components_grp Connected Components /// @@ -8,58 +8,58 @@ /// of adjacent faces such that all edges between two consecutive faces of the /// path are not marked as constrained. /// -/// \ingroup PkgPolygonMeshProcessing +/// \ingroup PkgPolygonMeshProcessingRef /// \defgroup hole_filling_grp Hole Filling /// Functions to fill holes given as a range of halfedges or as range of points. -/// \ingroup PkgPolygonMeshProcessing +/// \ingroup PkgPolygonMeshProcessingRef /// \defgroup PMP_meshing_grp Meshing /// Functions to triangulate faces, and to refine and fair regions of a polygon mesh. -/// \ingroup PkgPolygonMeshProcessing +/// \ingroup PkgPolygonMeshProcessingRef /// \defgroup PMP_normal_grp Normal Computation /// Functions to compute unit normals for individual/all vertices or faces. -/// \ingroup PkgPolygonMeshProcessing +/// \ingroup PkgPolygonMeshProcessingRef /// \defgroup measure_grp Geometric Measure Functions /// Functions to compute lengths of edges and borders, areas of faces and patches, as well as volumes of closed meshes. -/// \ingroup PkgPolygonMeshProcessing +/// \ingroup PkgPolygonMeshProcessingRef /// \defgroup PMP_orientation_grp Orientation Functions /// Functions to compute or change the orientation of faces and surfaces. -/// \ingroup PkgPolygonMeshProcessing +/// \ingroup PkgPolygonMeshProcessingRef /// \defgroup PMP_intersection_grp Intersection Functions /// Functions to test if there are self intersections, and to report faces that do intersect. -/// \ingroup PkgPolygonMeshProcessing +/// \ingroup PkgPolygonMeshProcessingRef /// \defgroup PMP_repairing_grp Combinatorial Repairing /// Functions to orient polygon soups and to stitch geometrically identical boundaries. -/// \ingroup PkgPolygonMeshProcessing +/// \ingroup PkgPolygonMeshProcessingRef /// \defgroup PMP_distance_grp Distance Functions /// Functions to compute the distance between meshes, between a mesh and a point set and between a point set and a mesh. -/// \ingroup PkgPolygonMeshProcessing +/// \ingroup PkgPolygonMeshProcessingRef /// \defgroup PMP_corefinement_grp Corefinement and Boolean Operations /// Functions to corefine triangulated surface meshes and compute triangulated /// surface meshes of the union, difference and intersection /// of the bounded volumes. -/// \ingroup PkgPolygonMeshProcessing +/// \ingroup PkgPolygonMeshProcessingRef /// \defgroup PMP_detect_features_grp Feature Detection Functions /// Functions to detect sharp edges and surface patches of polygon meshes. -/// \ingroup PkgPolygonMeshProcessing +/// \ingroup PkgPolygonMeshProcessingRef /// \defgroup PMP_predicates_grp Intersection Detection Functions /// Functions to detect intersections. /// Note that those functions will be exact as long as the underlying do-intersect predicates used are exact. /// In practice, it means that the 3D point type used must come from a \cgal kernel with exact predicates. -/// \ingroup PkgPolygonMeshProcessing +/// \ingroup PkgPolygonMeshProcessingRef /*! -\addtogroup PkgPolygonMeshProcessing +\addtogroup PkgPolygonMeshProcessingRef \cgalPkgDescriptionBegin{Polygon Mesh Processing, PkgPolygonMeshProcessingSummary} \cgalPkgPicture{hole_filling_ico.png} @@ -69,7 +69,7 @@ \cgalPkgDesc{This package provides a collection of methods and classes for polygon mesh processing, ranging from basic operations on simplices, to complex geometry processing algorithms.} -\cgalPkgManuals{Chapter_PolygonMeshProcessing,PkgPolygonMeshProcessing} +\cgalPkgManuals{Chapter_PolygonMeshProcessing,PkgPolygonMeshProcessingRef} \cgalPkgSummaryEnd \cgalPkgShortInfoBegin diff --git a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/bbox.h b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/bbox.h index 0c73a8655dd..c3207e9acbb 100644 --- a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/bbox.h +++ b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/bbox.h @@ -39,7 +39,7 @@ namespace CGAL { namespace Polygon_mesh_processing { /*! - * \ingroup PkgPolygonMeshProcessing + * \ingroup PkgPolygonMeshProcessingRef * computes a bounding box of a polygon mesh. * * @tparam PolygonMesh a model of `HalfedgeListGraph` @@ -88,7 +88,7 @@ namespace CGAL { } /*! - * \ingroup PkgPolygonMeshProcessing + * \ingroup PkgPolygonMeshProcessingRef * computes a bounding box of a vertex of a polygon mesh. * * @tparam PolygonMesh a model of `HalfedgeGraph` @@ -131,7 +131,7 @@ namespace CGAL { } /*! - * \ingroup PkgPolygonMeshProcessing + * \ingroup PkgPolygonMeshProcessingRef * computes a bounding box of an edge of a polygon mesh. * * @tparam PolygonMesh a model of `HalfedgeGraph` @@ -175,7 +175,7 @@ namespace CGAL { } /*! - * \ingroup PkgPolygonMeshProcessing + * \ingroup PkgPolygonMeshProcessingRef * computes a bounding box of a face of a polygon mesh. * * @tparam PolygonMesh a model of `HalfedgeGraph` @@ -257,7 +257,7 @@ namespace CGAL { // deprecated function #ifndef CGAL_NO_DEPRECATED_CODE /*! - * \ingroup PkgPolygonMeshProcessing + * \ingroup PkgPolygonMeshProcessingRef * \deprecated This function is deprecated since \cgal 4.10, `CGAL::Polygon_mesh_processing::bbox()` should be used instead. */ template diff --git a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/border.h b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/border.h index 6c30cb6d077..91bc67d34be 100644 --- a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/border.h +++ b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/border.h @@ -147,7 +147,7 @@ namespace Polygon_mesh_processing { }//end namespace internal /*! - \ingroup PkgPolygonMeshProcessing + \ingroup PkgPolygonMeshProcessingRef * collects the border halfedges of a surface patch defined as a face range. * For each returned halfedge `h`, `opposite(h, pmesh)` belongs to a face of the patch, * but `face(h, pmesh)` does not belong to the patch. diff --git a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/transform.h b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/transform.h index efff419092c..cb2fac6ed76 100644 --- a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/transform.h +++ b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/transform.h @@ -28,7 +28,7 @@ namespace CGAL{ namespace Polygon_mesh_processing{ /** - * \ingroup PkgPolygonMeshProcessing + * \ingroup PkgPolygonMeshProcessingRef * applies a transformation to every vertex of a `PolygonMesh`. * * @tparam Transformation a functor that has an `operator()(Point_3)`, with `Point_3` diff --git a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_slicer.h b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_slicer.h index cda6a7e6c77..f667edeb8fe 100644 --- a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_slicer.h +++ b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_slicer.h @@ -44,7 +44,7 @@ namespace CGAL { -/// \ingroup PkgPolygonMeshProcessing +/// \ingroup PkgPolygonMeshProcessingRef /// Function object that computes the intersection of a plane with /// a triangulated surface mesh. /// diff --git a/Polygon_mesh_processing/include/CGAL/Side_of_triangle_mesh.h b/Polygon_mesh_processing/include/CGAL/Side_of_triangle_mesh.h index b59b027fd90..ef47a19a190 100644 --- a/Polygon_mesh_processing/include/CGAL/Side_of_triangle_mesh.h +++ b/Polygon_mesh_processing/include/CGAL/Side_of_triangle_mesh.h @@ -37,7 +37,7 @@ namespace CGAL { /** - * \ingroup PkgPolygonMeshProcessing + * \ingroup PkgPolygonMeshProcessingRef * This class provides an efficient point location functionality with respect to a domain bounded * by one or several disjoint closed triangle meshes. * diff --git a/Polygon_mesh_processing/include/CGAL/polygon_mesh_processing.h b/Polygon_mesh_processing/include/CGAL/polygon_mesh_processing.h index 7d587ad4b84..325abd04658 100644 --- a/Polygon_mesh_processing/include/CGAL/polygon_mesh_processing.h +++ b/Polygon_mesh_processing/include/CGAL/polygon_mesh_processing.h @@ -20,7 +20,7 @@ // Author(s) : Jane Tournois /** -* \ingroup PkgPolygonMeshProcessing +* \ingroup PkgPolygonMeshProcessingRef * \file CGAL/polygon_mesh_processing.h * Convenience header file including the headers for all * the free functions of this package. diff --git a/Polyhedron/doc/Polyhedron/CGAL/Polyhedron_3.h b/Polyhedron/doc/Polyhedron/CGAL/Polyhedron_3.h index 7d7b22d075f..47811036fd6 100644 --- a/Polyhedron/doc/Polyhedron/CGAL/Polyhedron_3.h +++ b/Polyhedron/doc/Polyhedron/CGAL/Polyhedron_3.h @@ -1,7 +1,7 @@ namespace CGAL { /*! - \ingroup PkgPolyhedron + \ingroup PkgPolyhedronRef A polyhedral surface `Polyhedron_3` consists of vertices `V`, edges `E`, facets `F` and an incidence relation on them. Each edge is @@ -114,7 +114,7 @@ class Polyhedron_3 { public: /*! - \ingroup PkgPolyhedron + \ingroup PkgPolyhedronRef A halfedge is an oriented edge between two vertices. It is always paired with a halfedge pointing in @@ -423,7 +423,7 @@ public: }; /* end Halfedge */ /*! - \ingroup PkgPolyhedron + \ingroup PkgPolyhedronRef A facet optionally stores a plane equation, and a reference to an incident halfedge that points to the facet. Type tags indicate whether @@ -600,7 +600,7 @@ public: }; /* end Facet */ /*! - \ingroup PkgPolyhedron + \ingroup PkgPolyhedronRef A vertex optionally stores a point and a reference to an incident halfedge that points to the vertex. Type tags indicate whether these diff --git a/Polyhedron/doc/Polyhedron/CGAL/Polyhedron_incremental_builder_3.h b/Polyhedron/doc/Polyhedron/CGAL/Polyhedron_incremental_builder_3.h index dc62a2a620f..8fbea2f7893 100644 --- a/Polyhedron/doc/Polyhedron/CGAL/Polyhedron_incremental_builder_3.h +++ b/Polyhedron/doc/Polyhedron/CGAL/Polyhedron_incremental_builder_3.h @@ -2,7 +2,7 @@ namespace CGAL { /*! -\ingroup PkgPolyhedron +\ingroup PkgPolyhedronRef The auxiliary class `Polyhedron_incremental_builder_3` supports the incremental construction of polyhedral surfaces, which is for example convenient diff --git a/Polyhedron/doc/Polyhedron/CGAL/Polyhedron_items_3.h b/Polyhedron/doc/Polyhedron/CGAL/Polyhedron_items_3.h index a67ea634e7d..c4a2108545c 100644 --- a/Polyhedron/doc/Polyhedron/CGAL/Polyhedron_items_3.h +++ b/Polyhedron/doc/Polyhedron/CGAL/Polyhedron_items_3.h @@ -2,7 +2,7 @@ namespace CGAL { /*! -\ingroup PkgPolyhedron +\ingroup PkgPolyhedronRef The class `Polyhedron_items_3` is a model of the `PolyhedronItems_3` concept. It provides definitions for vertices with points, halfedges, diff --git a/Polyhedron/doc/Polyhedron/CGAL/Polyhedron_min_items_3.h b/Polyhedron/doc/Polyhedron/CGAL/Polyhedron_min_items_3.h index 122d5d5ff96..441aaba4277 100644 --- a/Polyhedron/doc/Polyhedron/CGAL/Polyhedron_min_items_3.h +++ b/Polyhedron/doc/Polyhedron/CGAL/Polyhedron_min_items_3.h @@ -2,7 +2,7 @@ namespace CGAL { /*! -\ingroup PkgPolyhedron +\ingroup PkgPolyhedronRef The class `Polyhedron_min_items_3` is a minimal model of the `PolyhedronItems_3` concept. It provides definitions for vertices diff --git a/Polyhedron/doc/Polyhedron/CGAL/Polyhedron_traits_3.h b/Polyhedron/doc/Polyhedron/CGAL/Polyhedron_traits_3.h index 68df4c08d0d..b112413c0b6 100644 --- a/Polyhedron/doc/Polyhedron/CGAL/Polyhedron_traits_3.h +++ b/Polyhedron/doc/Polyhedron/CGAL/Polyhedron_traits_3.h @@ -2,7 +2,7 @@ namespace CGAL { /*! -\ingroup PkgPolyhedron +\ingroup PkgPolyhedronRef The class `Polyhedron_traits_3` is a model of the `PolyhedronTraits_3` concept. It defines the geometric types and primitive operations used diff --git a/Polyhedron/doc/Polyhedron/CGAL/Polyhedron_traits_with_normals_3.h b/Polyhedron/doc/Polyhedron/CGAL/Polyhedron_traits_with_normals_3.h index ab00f7f5e17..a99b689b63b 100644 --- a/Polyhedron/doc/Polyhedron/CGAL/Polyhedron_traits_with_normals_3.h +++ b/Polyhedron/doc/Polyhedron/CGAL/Polyhedron_traits_with_normals_3.h @@ -2,7 +2,7 @@ namespace CGAL { /*! -\ingroup PkgPolyhedron +\ingroup PkgPolyhedronRef The class `Polyhedron_traits_with_normals_3` is a model of the `PolyhedronTraits_3` concept. It defines the geometric types and primitive operations used diff --git a/Polyhedron/doc/Polyhedron/PackageDescription.txt b/Polyhedron/doc/Polyhedron/PackageDescription.txt index 05972f40034..95e0c5ddf88 100644 --- a/Polyhedron/doc/Polyhedron/PackageDescription.txt +++ b/Polyhedron/doc/Polyhedron/PackageDescription.txt @@ -1,9 +1,9 @@ -/// \defgroup PkgPolyhedron 3D Polyhedral Surface Reference +/// \defgroup PkgPolyhedronRef 3D Polyhedral Surface Reference /// \defgroup PkgPolyhedronConcepts Concepts -/// \ingroup PkgPolyhedron +/// \ingroup PkgPolyhedronRef /// \defgroup PkgPolyhedronIOFunc I/O Functions -/// \ingroup PkgPolyhedron +/// \ingroup PkgPolyhedronRef /*! Draw. \code @@ -11,17 +11,17 @@ \endcode */ /// \defgroup PkgDrawPolyhedron Draw a Polyhedron 3 -/// \ingroup PkgPolyhedron +/// \ingroup PkgPolyhedronRef /*! -\addtogroup PkgPolyhedron +\addtogroup PkgPolyhedronRef \todo check generated documentation \cgalPkgDescriptionBegin{3D Polyhedral Surface,PkgPolyhedronSummary} \cgalPkgPicture{Polyhedron-teaser-small.png} \cgalPkgSummaryBegin \cgalPkgAuthor{Lutz Kettner} \cgalPkgDesc{Polyhedral surfaces in three dimensions are composed of vertices, edges, facets and an incidence relationship on them. The organization beneath is a halfedge data structure, which restricts the class of representable surfaces to orientable 2-manifolds - with and without boundary. If the surface is closed we call it a polyhedron.} -\cgalPkgManuals{Chapter_3D_Polyhedral_Surfaces,PkgPolyhedron} +\cgalPkgManuals{Chapter_3D_Polyhedral_Surfaces,PkgPolyhedronRef} \cgalPkgSummaryEnd \cgalPkgShortInfoBegin \cgalPkgSince{1.0} diff --git a/Polyline_simplification_2/doc/Polyline_simplification_2/PackageDescription.txt b/Polyline_simplification_2/doc/Polyline_simplification_2/PackageDescription.txt index 7a4b2f38fe7..6e5b9fcca6a 100644 --- a/Polyline_simplification_2/doc/Polyline_simplification_2/PackageDescription.txt +++ b/Polyline_simplification_2/doc/Polyline_simplification_2/PackageDescription.txt @@ -1,24 +1,24 @@ -/// \defgroup PkgPolylineSimplification2 2D Polyline Simplification Reference +/// \defgroup PkgPolylineSimplification2Ref 2D Polyline Simplification Reference /// \defgroup PkgPolylineSimplification2Concepts Concepts -/// \ingroup PkgPolylineSimplification2 +/// \ingroup PkgPolylineSimplification2Ref /// \defgroup PkgPolylineSimplification2Classes Polyline Simplification Classes -/// \ingroup PkgPolylineSimplification2 +/// \ingroup PkgPolylineSimplification2Ref /// \defgroup PkgPolylineSimplification2Functions Global Functions -/// \ingroup PkgPolylineSimplification2 +/// \ingroup PkgPolylineSimplification2Ref /*! -\addtogroup PkgPolylineSimplification2 +\addtogroup PkgPolylineSimplification2Ref \cgalPkgDescriptionBegin{2D Polyline Simplification,PkgPolylineSimplification2Summary} \cgalPkgPicture{PolylineSimplification-small.png} \cgalPkgSummaryBegin \cgalPkgAuthor{Andreas Fabri} \cgalPkgDesc{This package enables to simplify polylines with the guarantee that the topology of the polylines does not change. This can be done for a single polyline as well as for a set of polyline constraints in a constrained triangulation. The simplification can be controlled with cost and stop functions.} -\cgalPkgManuals{Chapter_2D_Polyline_simplification,PkgPolylineSimplification2} +\cgalPkgManuals{Chapter_2D_Polyline_simplification,PkgPolylineSimplification2Ref} \cgalPkgSummaryEnd \cgalPkgShortInfoBegin \cgalPkgSince{4.6} diff --git a/Polynomial/doc/Polynomial/PackageDescription.txt b/Polynomial/doc/Polynomial/PackageDescription.txt index e8ea1ffb953..d2036ebd27b 100644 --- a/Polynomial/doc/Polynomial/PackageDescription.txt +++ b/Polynomial/doc/Polynomial/PackageDescription.txt @@ -1,21 +1,21 @@ -/// \defgroup PkgPolynomial Polynomial Reference +/// \defgroup PkgPolynomialRef Polynomial Reference /// \defgroup PkgPolynomialConcepts Concepts -/// \ingroup PkgPolynomial +/// \ingroup PkgPolynomialRef /// \defgroup PkgPolynomialClasses Classes -/// \ingroup PkgPolynomial +/// \ingroup PkgPolynomialRef /// \defgroup PkgPolynomialFunctions Functions -/// \ingroup PkgPolynomial +/// \ingroup PkgPolynomialRef /*! -\addtogroup PkgPolynomial +\addtogroup PkgPolynomialRef \todo check generated documentation \cgalPkgDescriptionBegin{Polynomial,PkgPolynomialSummary} \cgalPkgPicture{Polynomial.png} \cgalPkgSummaryBegin \cgalPkgAuthor{Michael Hemmer} \cgalPkgDesc{This package introduces a concept for univariate and multivariate polynomials in \f$ d\f$ variables. Though the concept is written for an arbitrary number of variables, the number of variables is considered as fixed for a particular model of this concept.} -\cgalPkgManuals{Chapter_Polynomial,PkgPolynomial} +\cgalPkgManuals{Chapter_Polynomial,PkgPolynomialRef} \cgalPkgSummaryEnd \cgalPkgShortInfoBegin \cgalPkgSince{3.3} diff --git a/Polytope_distance_d/doc/Polytope_distance_d/CGAL/Polytope_distance_d.h b/Polytope_distance_d/doc/Polytope_distance_d/CGAL/Polytope_distance_d.h index d156904ed69..2322803b180 100644 --- a/Polytope_distance_d/doc/Polytope_distance_d/CGAL/Polytope_distance_d.h +++ b/Polytope_distance_d/doc/Polytope_distance_d/CGAL/Polytope_distance_d.h @@ -2,7 +2,7 @@ namespace CGAL { /*! -\ingroup PkgOptimalDistances +\ingroup PkgOptimalDistancesRef An object of the class `Polytope_distance_d` represents the (squared) distance between two convex polytopes, given as the convex hulls of two finite point diff --git a/Polytope_distance_d/doc/Polytope_distance_d/CGAL/Polytope_distance_d_traits_2.h b/Polytope_distance_d/doc/Polytope_distance_d/CGAL/Polytope_distance_d_traits_2.h index efe82888ec9..5692608860b 100644 --- a/Polytope_distance_d/doc/Polytope_distance_d/CGAL/Polytope_distance_d_traits_2.h +++ b/Polytope_distance_d/doc/Polytope_distance_d/CGAL/Polytope_distance_d_traits_2.h @@ -2,7 +2,7 @@ namespace CGAL { /*! -\ingroup PkgOptimalDistances +\ingroup PkgOptimalDistancesRef The class `Polytope_distance_d_traits_2` is a traits class for the \f$ d\f$-dimensional optimisation algorithms using the two-dimensional \cgal kernel. diff --git a/Polytope_distance_d/doc/Polytope_distance_d/CGAL/Polytope_distance_d_traits_3.h b/Polytope_distance_d/doc/Polytope_distance_d/CGAL/Polytope_distance_d_traits_3.h index fdd520bd1b8..df36af390b7 100644 --- a/Polytope_distance_d/doc/Polytope_distance_d/CGAL/Polytope_distance_d_traits_3.h +++ b/Polytope_distance_d/doc/Polytope_distance_d/CGAL/Polytope_distance_d_traits_3.h @@ -2,7 +2,7 @@ namespace CGAL { /*! -\ingroup PkgOptimalDistances +\ingroup PkgOptimalDistancesRef The class `Polytope_distance_d_traits_3` is a traits class for the \f$ d\f$-dimensional optimisation algorithms using the three-dimensional \cgal kernel. diff --git a/Polytope_distance_d/doc/Polytope_distance_d/CGAL/Polytope_distance_d_traits_d.h b/Polytope_distance_d/doc/Polytope_distance_d/CGAL/Polytope_distance_d_traits_d.h index 9749da82e48..808d76d850d 100644 --- a/Polytope_distance_d/doc/Polytope_distance_d/CGAL/Polytope_distance_d_traits_d.h +++ b/Polytope_distance_d/doc/Polytope_distance_d/CGAL/Polytope_distance_d_traits_d.h @@ -2,7 +2,7 @@ namespace CGAL { /*! -\ingroup PkgOptimalDistances +\ingroup PkgOptimalDistancesRef The class `Polytope_distance_d_traits_d` is a traits class for the \f$ d\f$-dimensional optimisation algorithms using the \f$ d\f$-dimensional \cgal kernel. diff --git a/Polytope_distance_d/doc/Polytope_distance_d/CGAL/Width_3.h b/Polytope_distance_d/doc/Polytope_distance_d/CGAL/Width_3.h index faf013b2eb8..c9beaf62ab6 100644 --- a/Polytope_distance_d/doc/Polytope_distance_d/CGAL/Width_3.h +++ b/Polytope_distance_d/doc/Polytope_distance_d/CGAL/Width_3.h @@ -2,7 +2,7 @@ namespace CGAL { /*! -\ingroup PkgOptimalDistances +\ingroup PkgOptimalDistancesRef Given a set of points \f$ \mathcal{S}=\left\{p_1,\ldots , p_n\right\}\f$ in \f$ \mathbb{R}^3\f$. The width of \f$ \mathcal{S}\f$, denoted as \f$ \mathcal{W(S)}\f$, is defined diff --git a/Polytope_distance_d/doc/Polytope_distance_d/CGAL/Width_default_traits_3.h b/Polytope_distance_d/doc/Polytope_distance_d/CGAL/Width_default_traits_3.h index c37cae8e2da..6e15580ba2b 100644 --- a/Polytope_distance_d/doc/Polytope_distance_d/CGAL/Width_default_traits_3.h +++ b/Polytope_distance_d/doc/Polytope_distance_d/CGAL/Width_default_traits_3.h @@ -2,7 +2,7 @@ namespace CGAL { /*! -\ingroup PkgOptimalDistances +\ingroup PkgOptimalDistancesRef The class `Width_default_traits_3` is a traits class for `Width_3` using the three-dimensional \cgal kernel. diff --git a/Polytope_distance_d/doc/Polytope_distance_d/CGAL/all_furthest_neighbors_2.h b/Polytope_distance_d/doc/Polytope_distance_d/CGAL/all_furthest_neighbors_2.h index 4688aeb2dad..ad42470ba56 100644 --- a/Polytope_distance_d/doc/Polytope_distance_d/CGAL/all_furthest_neighbors_2.h +++ b/Polytope_distance_d/doc/Polytope_distance_d/CGAL/all_furthest_neighbors_2.h @@ -1,7 +1,7 @@ namespace CGAL { /*! -\ingroup PkgOptimalDistances +\ingroup PkgOptimalDistancesRef \brief computes all furthest neighbors for the vertices of the convex polygon described by the range [`points_begin`, `points_end`), writes diff --git a/Polytope_distance_d/doc/Polytope_distance_d/PackageDescription.txt b/Polytope_distance_d/doc/Polytope_distance_d/PackageDescription.txt index 21aa9b1fc34..d7cdc6df200 100644 --- a/Polytope_distance_d/doc/Polytope_distance_d/PackageDescription.txt +++ b/Polytope_distance_d/doc/Polytope_distance_d/PackageDescription.txt @@ -1,16 +1,16 @@ -/// \defgroup PkgOptimalDistances Optimal Distances Reference +/// \defgroup PkgOptimalDistancesRef Optimal Distances Reference /// \defgroup PkgOptimalDistancesConcepts Concepts -/// \ingroup PkgOptimalDistances +/// \ingroup PkgOptimalDistancesRef /*! -\addtogroup PkgOptimalDistances +\addtogroup PkgOptimalDistancesRef \todo check generated documentation \cgalPkgDescriptionBegin{Optimal Distances,PkgOptimalDistancesSummary} \cgalPkgPicture{dist.png} \cgalPkgSummaryBegin \cgalPkgAuthors{Kaspar Fischer, Bernd Gärtner, Thomas Herrmann, Michael Hoffmann, and Sven Schönherr} \cgalPkgDesc{This package provides algorithms for computing the distance between the convex hulls of two point sets in d-dimensional space, without explicitely constructing the convex hulls. It further provides an algorithm to compute the width of a point set, and the furthest point for each vertex of a convex polygon. } -\cgalPkgManuals{Chapter_Optimal_Distances,PkgOptimalDistances} +\cgalPkgManuals{Chapter_Optimal_Distances,PkgOptimalDistancesRef} \cgalPkgSummaryEnd \cgalPkgShortInfoBegin \cgalPkgSince{1.1} diff --git a/Principal_component_analysis/doc/Principal_component_analysis/PackageDescription.txt b/Principal_component_analysis/doc/Principal_component_analysis/PackageDescription.txt index 7ce6f967c15..42816fa6162 100644 --- a/Principal_component_analysis/doc/Principal_component_analysis/PackageDescription.txt +++ b/Principal_component_analysis/doc/Principal_component_analysis/PackageDescription.txt @@ -1,29 +1,29 @@ -/// \defgroup PkgPrincipalComponentAnalysisD Principal Component Analysis Reference +/// \defgroup PkgPrincipalComponentAnalysisDRef Principal Component Analysis Reference /// \defgroup PkgPrincipalComponentAnalysisDBary CGAL::barycenter() -/// \ingroup PkgPrincipalComponentAnalysisD +/// \ingroup PkgPrincipalComponentAnalysisDRef /// \defgroup PkgPrincipalComponentAnalysisDbb CGAL::bounding_box() -/// \ingroup PkgPrincipalComponentAnalysisD +/// \ingroup PkgPrincipalComponentAnalysisDRef /// \defgroup PkgPrincipalComponentAnalysisDCentroid CGAL::centroid() -/// \ingroup PkgPrincipalComponentAnalysisD +/// \ingroup PkgPrincipalComponentAnalysisDRef /// \defgroup PkgPrincipalComponentAnalysisDLLSF2 CGAL::linear_least_square_fitting_2() -/// \ingroup PkgPrincipalComponentAnalysisD +/// \ingroup PkgPrincipalComponentAnalysisDRef /// \defgroup PkgPrincipalComponentAnalysisDLLSF3 CGAL::linear_least_square_fitting_3() -/// \ingroup PkgPrincipalComponentAnalysisD +/// \ingroup PkgPrincipalComponentAnalysisDRef /*! -\addtogroup PkgPrincipalComponentAnalysisD +\addtogroup PkgPrincipalComponentAnalysisDRef \todo check generated documentation \cgalPkgDescriptionBegin{Principal Component Analysis,PkgPrincipalComponentAnalysisDSummary} \cgalPkgPicture{teaserLeastSquaresFitting.png} \cgalPkgSummaryBegin \cgalPkgAuthors{Pierre Alliez, Sylvain Pion and Ankit Gupta} \cgalPkgDesc{This package provides functions to compute global information about the shape of a set of 2D or 3D objects. It provides the computation of axis-aligned bounding boxes for point sets, and barycenters of weighted point sets. In addition, it provides computation of centroids (center of mass) and linear least squares fitting for point sets as well as for sets of other bounded objects. More specifically, it is possible to fit 2D lines to 2D segments, circles, disks, iso rectangles and triangles, as well as to fit 3D lines or 3D planes to 3D segments, triangles, iso cuboids, tetrahedra, spheres and balls. The common interface to these functions takes an iterator range of objects.} -\cgalPkgManuals{Chapter_Principal_Component_Analysis,PkgPrincipalComponentAnalysisD} +\cgalPkgManuals{Chapter_Principal_Component_Analysis,PkgPrincipalComponentAnalysisDRef} \cgalPkgSummaryEnd \cgalPkgShortInfoBegin \cgalPkgSince{3.2} diff --git a/Property_map/doc/Property_map/PackageDescription.txt b/Property_map/doc/Property_map/PackageDescription.txt index a768dfacd9b..100328d94c8 100644 --- a/Property_map/doc/Property_map/PackageDescription.txt +++ b/Property_map/doc/Property_map/PackageDescription.txt @@ -1,14 +1,14 @@ -/// \defgroup PkgProperty_map CGAL and Boost Property Maps Reference +/// \defgroup PkgProperty_mapRef CGAL and Boost Property Maps Reference /*! -\addtogroup PkgProperty_map +\addtogroup PkgProperty_mapRef \cgalPkgDescriptionBegin{CGAL and Boost Property Maps,PkgProperty_mapSummary} \cgalPkgPicture{property_map.png} \cgalPkgSummaryBegin \cgalPkgAuthors{Andreas Fabri and Laurent Saboret} \cgalPkgDesc{This package provides a framework for interfacing \cgal data structures with algorithms expecting Boost Property Maps.} -\cgalPkgManuals{Chapter_CGAL_and_Boost_Property_Maps,PkgProperty_map} +\cgalPkgManuals{Chapter_CGAL_and_Boost_Property_Maps,PkgProperty_mapRef} \cgalPkgSummaryEnd \cgalPkgShortInfoBegin \cgalPkgSince{3.5} diff --git a/Property_map/include/CGAL/property_map.h b/Property_map/include/CGAL/property_map.h index f589496dcba..0a63ec9dca6 100644 --- a/Property_map/include/CGAL/property_map.h +++ b/Property_map/include/CGAL/property_map.h @@ -169,7 +169,7 @@ struct Input_iterator_property_map{ get(Input_iterator_property_map,InputIterator it){ return *it; } }; -/// \ingroup PkgProperty_map +/// \ingroup PkgProperty_mapRef /// Property map that converts a `T*` pointer (or in general an iterator /// over `T` elements) to the `T` object. /// @@ -201,7 +201,7 @@ make_dereference_property_map(Iter) return Dereference_property_map::type>(); } -/// \ingroup PkgProperty_map +/// \ingroup PkgProperty_mapRef /// A `LvaluePropertyMap` property map mapping a key to itself (by reference). /// /// \cgalModels `LvaluePropertyMap` @@ -235,7 +235,7 @@ Identity_property_map } -/// \ingroup PkgProperty_map +/// \ingroup PkgProperty_mapRef /// Property map that accesses the first item of a `std::pair`. /// \tparam Pair Instance of `std::pair`. /// \cgalModels `LvaluePropertyMap` @@ -271,7 +271,7 @@ First_of_pair_property_map return First_of_pair_property_map(); } -/// \ingroup PkgProperty_map +/// \ingroup PkgProperty_mapRef /// /// Property map that accesses the second item of a `std::pair`. /// @@ -310,7 +310,7 @@ Second_of_pair_property_map return Second_of_pair_property_map(); } -/// \ingroup PkgProperty_map +/// \ingroup PkgProperty_mapRef /// /// Property map that accesses the Nth item of a `boost::tuple` or a `std::tuple`. /// @@ -370,7 +370,7 @@ Nth_of_tuple_property_map return Nth_of_tuple_property_map(); } -/// \ingroup PkgProperty_map +/// \ingroup PkgProperty_mapRef /// Struct that turns a property map into a unary functor with /// `operator()(key k)` calling the get function with `k` template @@ -391,7 +391,7 @@ struct Property_map_to_unary_function{ } }; -/// \ingroup PkgProperty_map +/// \ingroup PkgProperty_mapRef /// Utility class providing shortcuts to property maps based on raw pointers template struct Pointer_property_map{ @@ -405,7 +405,7 @@ struct Pointer_property_map{ const T&> const_type; ///< non-mutable `LvaluePropertyMap` }; -/// \ingroup PkgProperty_map +/// \ingroup PkgProperty_mapRef /// Starting from boost 1.55, the use of raw pointers as property maps has been deprecated. /// This function is a shortcut to the recommanded replacement: /// `boost::make_iterator_property_map(, boost::typed_identity_property_map())` @@ -418,7 +418,7 @@ make_property_map(T* pointer) return typename Pointer_property_map::type(pointer); } -/// \ingroup PkgProperty_map +/// \ingroup PkgProperty_mapRef /// equivalent to `make_property_map(&v[0])` /// Note that `v` must not be modified while using the property map created template @@ -432,7 +432,7 @@ make_property_map(std::vector& v) return make_property_map(&v[0]); } -/// \ingroup PkgProperty_map +/// \ingroup PkgProperty_mapRef /// Non-mutable version template inline @@ -442,7 +442,7 @@ make_property_map(const T* pointer) return typename Pointer_property_map::const_type(pointer); } -/// \ingroup PkgProperty_map +/// \ingroup PkgProperty_mapRef /// equivalent to `make_property_map(&v[0])` /// Note that `v` must not be modified while using the property map created template @@ -453,7 +453,7 @@ make_property_map(const std::vector& v) return make_property_map(&v[0]); } -/// \ingroup PkgProperty_map +/// \ingroup PkgProperty_mapRef /// Property map that returns a fixed value. /// Note that this value is chosen when the map is constructed and cannot /// be changed afterwards. Specifically, the free function `put()` does nothing. @@ -479,7 +479,7 @@ struct Constant_property_map put (const Constant_property_map&, const key_type&, const value_type&) { } }; -/// \ingroup PkgProperty_map +/// \ingroup PkgProperty_mapRef /// Read-write property map turning a set (such a `std::set`, /// `boost::unordered_set`, `std::unordered_set`) into a property map /// associating a Boolean to the value type of the set. The function `get` will @@ -517,7 +517,7 @@ struct Boolean_property_map } }; -/// \ingroup PkgProperty_map +/// \ingroup PkgProperty_mapRef /// returns `Boolean_property_map(set_)` template Boolean_property_map @@ -526,7 +526,7 @@ make_boolean_property_map(Set& set_) return Boolean_property_map(set_); } -/// \ingroup PkgProperty_map +/// \ingroup PkgProperty_mapRef /// Read-write property map doing on-the-fly conversions between two default constructible \cgal %Cartesian kernels. /// Its value type is `GeomObject` and its key type is the same as `Vpm`. /// `GeomObject` must be a geometric object from a \cgal kernel. @@ -561,7 +561,7 @@ struct Cartesian_converter_property_map } }; -/// \ingroup PkgProperty_map +/// \ingroup PkgProperty_mapRef /// returns `Cartesian_converter_property_map(vpm)` template Cartesian_converter_property_map diff --git a/QP_solver/doc/QP_solver/PackageDescription.txt b/QP_solver/doc/QP_solver/PackageDescription.txt index 401a802f8c4..5f136f6b41a 100644 --- a/QP_solver/doc/QP_solver/PackageDescription.txt +++ b/QP_solver/doc/QP_solver/PackageDescription.txt @@ -1,7 +1,7 @@ -/// \defgroup PkgQPSolver Linear and Quadratic Programming Solver Reference +/// \defgroup PkgQPSolverRef Linear and Quadratic Programming Solver Reference /*! \defgroup PkgQPSolverConcepts Concepts - \ingroup PkgQPSolver + \ingroup PkgQPSolverRef - `QuadraticProgram` (for quadratic programs with variable bounds \f$ l \leq x \leq u\f$) - `LinearProgram` (for linear programs with variable bounds \f$ l \leq x \leq u\f$) @@ -13,7 +13,7 @@ /*! \defgroup PkgQPSolverClasses Classes - \ingroup PkgQPSolver + \ingroup PkgQPSolverRef This module provides high and low level classes that allow to construct and represent linear and quadratic programs and their solution. @@ -39,7 +39,7 @@ Then there are specific models for any of the four program concepts above; these /*! \defgroup PkgQPSolverFunctions Functions - \ingroup PkgQPSolver + \ingroup PkgQPSolverRef This module provides makers to construct a program, as well as functions to solve and print programs. @@ -71,14 +71,14 @@ Programs can be written to an output stream in MPSFormat, using one of the follo */ /*! -\addtogroup PkgQPSolver +\addtogroup PkgQPSolverRef \todo check generated documentation \cgalPkgDescriptionBegin{Linear and Quadratic Programming Solver,PkgQPSolverSummary} \cgalPkgPicture{qp.png} \cgalPkgSummaryBegin \cgalPkgAuthors{Kaspar Fischer, Bernd Gärtner, Sven Schönherr, and Frans Wessendorp} \cgalPkgDesc{This package contains algorithms for minimizing linear and convex quadratic functions over polyhedral domains, described by linear equations and inequalities. The algorithms are exact, i.e.\ the solution is computed in terms of multiprecision rational numbers. The resulting solution is certified: along with the claims that the problem under consideration has an optimal solution, is infeasible, or is unbounded, the algorithms also deliver proofs for these facts. These proofs can easily (and independently from the algorithms) be checked for correctness. The solution algorithms are based on a generalization of the simplex method to quadratic objective functions. } -\cgalPkgManuals{Chapter_Linear_and_Quadratic_Programming_Solver,PkgQPSolver} +\cgalPkgManuals{Chapter_Linear_and_Quadratic_Programming_Solver,PkgQPSolverRef} \cgalPkgSummaryEnd \cgalPkgShortInfoBegin \cgalPkgSince{3.3} diff --git a/Ridges_3/doc/Ridges_3/CGAL/Ridges.h b/Ridges_3/doc/Ridges_3/CGAL/Ridges.h index 1c6cec82ad6..7f882b10726 100644 --- a/Ridges_3/doc/Ridges_3/CGAL/Ridges.h +++ b/Ridges_3/doc/Ridges_3/CGAL/Ridges.h @@ -24,7 +24,7 @@ enum Ridge_type { /*! -\ingroup PkgRidges_3 +\ingroup PkgRidges_3Ref The function `compute_crest_ridges()` is a shortcut to the method `Ridge_approximation::compute_crest_ridges()`. @@ -53,7 +53,7 @@ OutputIterator compute_crest_ridges(const TriangleMesh &tm, namespace CGAL { /*! -\ingroup PkgRidges_3 +\ingroup PkgRidges_3Ref The function `compute_max_ridges()` is a shortcut to the method `Ridge_approximation::compute_max_ridges()`. @@ -80,7 +80,7 @@ OutputIterator compute_max_ridges(const TriangleMesh &tm, namespace CGAL { /*! -\ingroup PkgRidges_3 +\ingroup PkgRidges_3Ref The function `compute_min_ridges()` is a shortcut to the method `Ridge_approximation::compute_min_ridges()`. @@ -110,7 +110,7 @@ OutputIterator compute_min_ridges(const TriangleMesh &tm, namespace CGAL { /*! -\ingroup PkgRidges_3 +\ingroup PkgRidges_3Ref The class `Ridge_approximation` computes the approximation of ridges of a triangular polyhedral surface. @@ -194,7 +194,7 @@ template OutputIterator compute_crest_ridges(OutputIterat namespace CGAL { /*! -\ingroup PkgRidges_3 +\ingroup PkgRidges_3Ref The class `Ridge_line` stores the description of a ridge line. The list of halfedges defines a connected sequence of edges (but not as diff --git a/Ridges_3/doc/Ridges_3/CGAL/Umbilics.h b/Ridges_3/doc/Ridges_3/CGAL/Umbilics.h index 2b791415ca2..eaa1d8e1a5a 100644 --- a/Ridges_3/doc/Ridges_3/CGAL/Umbilics.h +++ b/Ridges_3/doc/Ridges_3/CGAL/Umbilics.h @@ -9,7 +9,7 @@ enum Umbilic_type { NON_GENERIC_UMBILIC, ELLIPTIC_UMBILIC, HYPERBOLIC_UMBILIC }; /*! -\ingroup PkgRidges_3 +\ingroup PkgRidges_3Ref The function `compute_umbilics()` is a shortcut to the method `Umbilic_approximation::compute()`. See `Umbilic_approximation::Umbilic_approximation()` for an explanation of the parameters. @@ -34,7 +34,7 @@ double size); namespace CGAL { /*! -\ingroup PkgRidges_3 +\ingroup PkgRidges_3Ref The class `Umbilic_approximation` computes the approximation of umbilics on a triangular polyhedral surface. @@ -109,7 +109,7 @@ template OutputIterator compute(OutputIterator it, FT siz namespace CGAL { /*! -\ingroup PkgRidges_3 +\ingroup PkgRidges_3Ref The class `Umbilic` stores the description of an umbilic. diff --git a/Ridges_3/doc/Ridges_3/PackageDescription.txt b/Ridges_3/doc/Ridges_3/PackageDescription.txt index 41da0e8439c..31774bc9931 100644 --- a/Ridges_3/doc/Ridges_3/PackageDescription.txt +++ b/Ridges_3/doc/Ridges_3/PackageDescription.txt @@ -1,17 +1,17 @@ -/// \defgroup PkgRidges_3 Approximation of Ridges and Umbilics on Triangulated Surface Meshes Reference +/// \defgroup PkgRidges_3Ref Approximation of Ridges and Umbilics on Triangulated Surface Meshes Reference /// \defgroup PkgRidges_3Enums Enums -/// \ingroup PkgRidges_3 +/// \ingroup PkgRidges_3Ref /*! -\addtogroup PkgRidges_3 +\addtogroup PkgRidges_3Ref \todo check generated documentation \cgalPkgDescriptionBegin{Approximation of Ridges and Umbilics on Triangulated Surface Meshes,PkgRidges_3Summary} \cgalPkgPicture{RidgesMechPartDetail.png} \cgalPkgSummaryBegin \cgalPkgAuthors{Marc Pouget and Frédéric Cazals} \cgalPkgDesc{Global features related to curvature extrema encode important informations used in segmentation, registration, matching and surface analysis. Given pointwise estimations of local differential quantities, this package allows the approximation of differential features on a triangulated surface mesh. Such curvature related features are curves: ridges or crests, and points: umbilics.} -\cgalPkgManuals{Chapter_Approximation_of_Ridges_and_Umbilics_on_Triangulated_Surface_Meshes,PkgRidges_3} +\cgalPkgManuals{Chapter_Approximation_of_Ridges_and_Umbilics_on_Triangulated_Surface_Meshes,PkgRidges_3Ref} \cgalPkgSummaryEnd \cgalPkgShortInfoBegin \cgalPkgSince{3.3} diff --git a/STL_Extension/doc/STL_Extension/CGAL/CC_safe_handle.h b/STL_Extension/doc/STL_Extension/CGAL/CC_safe_handle.h index 8b1f42a1eb8..34d6767c387 100644 --- a/STL_Extension/doc/STL_Extension/CGAL/CC_safe_handle.h +++ b/STL_Extension/doc/STL_Extension/CGAL/CC_safe_handle.h @@ -1,7 +1,7 @@ namespace CGAL { -/// \ingroup PkgStlExtension +/// \ingroup PkgStlExtensionRef /*! \ingroup CompactContainer diff --git a/STL_Extension/doc/STL_Extension/CGAL/Compact_container.h b/STL_Extension/doc/STL_Extension/CGAL/Compact_container.h index 66887daa22f..d7ef04fcafb 100644 --- a/STL_Extension/doc/STL_Extension/CGAL/Compact_container.h +++ b/STL_Extension/doc/STL_Extension/CGAL/Compact_container.h @@ -2,7 +2,7 @@ namespace CGAL { /// \defgroup CompactContainer Compact Container -/// \ingroup PkgStlExtension +/// \ingroup PkgStlExtensionRef /*! \ingroup CompactContainer diff --git a/STL_Extension/doc/STL_Extension/CGAL/Concurrent_compact_container.h b/STL_Extension/doc/STL_Extension/CGAL/Concurrent_compact_container.h index e358e5788f6..8732316de17 100644 --- a/STL_Extension/doc/STL_Extension/CGAL/Concurrent_compact_container.h +++ b/STL_Extension/doc/STL_Extension/CGAL/Concurrent_compact_container.h @@ -1,7 +1,7 @@ namespace CGAL { -/// \ingroup PkgStlExtension +/// \ingroup PkgStlExtensionRef /*! \ingroup CompactContainer diff --git a/STL_Extension/doc/STL_Extension/CGAL/Default.h b/STL_Extension/doc/STL_Extension/CGAL/Default.h index ccd301b0c2e..6939f93b2de 100644 --- a/STL_Extension/doc/STL_Extension/CGAL/Default.h +++ b/STL_Extension/doc/STL_Extension/CGAL/Default.h @@ -1,7 +1,7 @@ namespace CGAL { /*! -\ingroup PkgStlExtension +\ingroup PkgStlExtensionRef diff --git a/STL_Extension/doc/STL_Extension/CGAL/In_place_list.h b/STL_Extension/doc/STL_Extension/CGAL/In_place_list.h index d0aa69ce56b..5bc32a5602e 100644 --- a/STL_Extension/doc/STL_Extension/CGAL/In_place_list.h +++ b/STL_Extension/doc/STL_Extension/CGAL/In_place_list.h @@ -1,5 +1,5 @@ /// \defgroup inplacelist Doubly-Connected List Managing Items in Place -/// \ingroup PkgStlExtension +/// \ingroup PkgStlExtensionRef namespace CGAL { diff --git a/STL_Extension/doc/STL_Extension/CGAL/Iterator_range.h b/STL_Extension/doc/STL_Extension/CGAL/Iterator_range.h index ba96dbaa48e..457f0ddd955 100644 --- a/STL_Extension/doc/STL_Extension/CGAL/Iterator_range.h +++ b/STL_Extension/doc/STL_Extension/CGAL/Iterator_range.h @@ -27,7 +27,7 @@ namespace CGAL { /*! - \ingroup PkgStlExtension + \ingroup PkgStlExtensionRef `CGAL::Iterator_range` encapsulates two iterators so they fulfill the `ForwardRange` concept. The class is essentially a clone of `boost::iterator_range`, and it additionally is derived from `std::pair`, so that one can apply `boost::tie`. diff --git a/STL_Extension/doc/STL_Extension/CGAL/Multiset.h b/STL_Extension/doc/STL_Extension/CGAL/Multiset.h index 833c51dff9a..233032e5345 100644 --- a/STL_Extension/doc/STL_Extension/CGAL/Multiset.h +++ b/STL_Extension/doc/STL_Extension/CGAL/Multiset.h @@ -2,7 +2,7 @@ namespace CGAL { /*! -\ingroup PkgStlExtension +\ingroup PkgStlExtensionRef \anchor classcgal_multimap diff --git a/STL_Extension/doc/STL_Extension/CGAL/Object.h b/STL_Extension/doc/STL_Extension/CGAL/Object.h index 27f21b9212d..88dc3a5ac64 100644 --- a/STL_Extension/doc/STL_Extension/CGAL/Object.h +++ b/STL_Extension/doc/STL_Extension/CGAL/Object.h @@ -2,7 +2,7 @@ namespace CGAL { /*! -\ingroup PkgStlExtension +\ingroup PkgStlExtensionRef Some functions can return different types of objects. A typical \cpp solution to this problem is to derive all possible return diff --git a/STL_Extension/doc/STL_Extension/CGAL/Spatial_lock_grid_3.h b/STL_Extension/doc/STL_Extension/CGAL/Spatial_lock_grid_3.h index c0e4b5edfa4..118d3a4f227 100644 --- a/STL_Extension/doc/STL_Extension/CGAL/Spatial_lock_grid_3.h +++ b/STL_Extension/doc/STL_Extension/CGAL/Spatial_lock_grid_3.h @@ -2,7 +2,7 @@ namespace CGAL { /*! -\ingroup PkgStlExtension +\ingroup PkgStlExtensionRef The class `Spatial_lock_grid_3` allows to lock points with coordinates (x, y, z) in a 3D grid. diff --git a/STL_Extension/doc/STL_Extension/CGAL/algorithm.h b/STL_Extension/doc/STL_Extension/CGAL/algorithm.h index c0a74209c71..a915d057a3e 100644 --- a/STL_Extension/doc/STL_Extension/CGAL/algorithm.h +++ b/STL_Extension/doc/STL_Extension/CGAL/algorithm.h @@ -1,5 +1,5 @@ /// \defgroup STLAlgos Generic Algorithms -/// \ingroup PkgStlExtension +/// \ingroup PkgStlExtensionRef namespace CGAL { diff --git a/STL_Extension/doc/STL_Extension/CGAL/array.h b/STL_Extension/doc/STL_Extension/CGAL/array.h index 15660adb630..5f35cb9607a 100644 --- a/STL_Extension/doc/STL_Extension/CGAL/array.h +++ b/STL_Extension/doc/STL_Extension/CGAL/array.h @@ -2,7 +2,7 @@ namespace CGAL { namespace cpp11 { /*! -\ingroup PkgStlExtension +\ingroup PkgStlExtensionRef An object of the class `cpp11::array` represents an array of elements of type `T`, the number of which is specified by the second template argument. diff --git a/STL_Extension/doc/STL_Extension/CGAL/function.h b/STL_Extension/doc/STL_Extension/CGAL/function.h index cf5433d971d..842d1422374 100644 --- a/STL_Extension/doc/STL_Extension/CGAL/function.h +++ b/STL_Extension/doc/STL_Extension/CGAL/function.h @@ -2,7 +2,7 @@ namespace CGAL { namespace cpp11 { /*! -\ingroup PkgStlExtension +\ingroup PkgStlExtensionRef An object of the class `cpp11::function` is a general-purpose polymorphic function wrapper. diff --git a/STL_Extension/doc/STL_Extension/CGAL/function_objects.h b/STL_Extension/doc/STL_Extension/CGAL/function_objects.h index 997cf54dd4c..196add3b710 100644 --- a/STL_Extension/doc/STL_Extension/CGAL/function_objects.h +++ b/STL_Extension/doc/STL_Extension/CGAL/function_objects.h @@ -1,5 +1,5 @@ /// \defgroup projectionobjects Projection Function Objects -/// \ingroup PkgStlExtension +/// \ingroup PkgStlExtensionRef namespace CGAL { @@ -138,7 +138,7 @@ compare_to_less(const F& f); /// \defgroup STLCreators Creator Function Objects -/// \ingroup PkgStlExtension +/// \ingroup PkgStlExtensionRef namespace CGAL { diff --git a/STL_Extension/doc/STL_Extension/CGAL/iterator.h b/STL_Extension/doc/STL_Extension/CGAL/iterator.h index 6291a81be44..68d5b274be5 100644 --- a/STL_Extension/doc/STL_Extension/CGAL/iterator.h +++ b/STL_Extension/doc/STL_Extension/CGAL/iterator.h @@ -1,5 +1,5 @@ /// \defgroup STLIterators Iterators and Iterator/Circulator Adaptors -/// \ingroup PkgStlExtension +/// \ingroup PkgStlExtensionRef namespace CGAL { diff --git a/STL_Extension/doc/STL_Extension/CGAL/memory.h b/STL_Extension/doc/STL_Extension/CGAL/memory.h index 5a9f02b663a..4d5afc39d5b 100644 --- a/STL_Extension/doc/STL_Extension/CGAL/memory.h +++ b/STL_Extension/doc/STL_Extension/CGAL/memory.h @@ -1,7 +1,7 @@ #include /** - * \ingroup PkgStlExtension + * \ingroup PkgStlExtensionRef * * A define for the allocator used by %CGAL. This is only defined if * there is no user defined version before `memory.h` is included diff --git a/STL_Extension/doc/STL_Extension/CGAL/result_of.h b/STL_Extension/doc/STL_Extension/CGAL/result_of.h index b39244044e2..d15a9db5bb4 100644 --- a/STL_Extension/doc/STL_Extension/CGAL/result_of.h +++ b/STL_Extension/doc/STL_Extension/CGAL/result_of.h @@ -2,7 +2,7 @@ namespace CGAL { namespace cpp11 { /*! - \ingroup PkgStlExtension + \ingroup PkgStlExtensionRef Alias to the tr1 implementation from boost of the `result_of` mechanism. When all compilers supported by %CGAL will have a Standard compliant implemention of the the \cpp11 `decltype` feature, it will become an alias to std::result_of. diff --git a/STL_Extension/doc/STL_Extension/CGAL/tuple.h b/STL_Extension/doc/STL_Extension/CGAL/tuple.h index 4d7f15eea1d..56e27c2ec45 100644 --- a/STL_Extension/doc/STL_Extension/CGAL/tuple.h +++ b/STL_Extension/doc/STL_Extension/CGAL/tuple.h @@ -3,7 +3,7 @@ namespace CGAL { namespace cpp11 { /*! -\ingroup PkgStlExtension +\ingroup PkgStlExtensionRef diff --git a/STL_Extension/doc/STL_Extension/PackageDescription.txt b/STL_Extension/doc/STL_Extension/PackageDescription.txt index 1c3c8a18f10..2717cce3dda 100644 --- a/STL_Extension/doc/STL_Extension/PackageDescription.txt +++ b/STL_Extension/doc/STL_Extension/PackageDescription.txt @@ -1,23 +1,23 @@ -/// \defgroup PkgStlExtension STL Extensions for CGAL Reference +/// \defgroup PkgStlExtensionRef STL Extensions for CGAL Reference /// \defgroup PkgStlExtensionConcepts Concepts -/// \ingroup PkgStlExtension +/// \ingroup PkgStlExtensionRef /// \defgroup PkgStlExtensionUtilities Utilities -/// \ingroup PkgStlExtension +/// \ingroup PkgStlExtensionRef /// \defgroup PkgStlExtensionAssertions Assertions and Failure Behaviour -/// \ingroup PkgStlExtension +/// \ingroup PkgStlExtensionRef /*! -\addtogroup PkgStlExtension +\addtogroup PkgStlExtensionRef \cgalPkgDescriptionBegin{STL Extensions for CGAL,PkgStlExtensionSummary} \cgalPkgPicture{plusplus.png} \cgalPkgSummaryBegin \cgalPkgAuthors{Michael Hoffmann, Lutz Kettner, Sylvain Pion, and Ron Wein} \cgalPkgDesc{\cgal is designed in the spirit of the generic programming paradigm to work together with the Standard Template Library (\stl). This package provides non-geometric \stl-like algorithms and datastructures that are not in the \stl standard, as well as functions to change the failure behaviour of assertions.} -\cgalPkgManuals{Chapter_STL_Extensions_for_CGAL,PkgStlExtension} +\cgalPkgManuals{Chapter_STL_Extensions_for_CGAL,PkgStlExtensionRef} \cgalPkgSummaryEnd \cgalPkgShortInfoBegin \cgalPkgSince{1.0} diff --git a/STL_Extension/include/CGAL/Iterator_range.h b/STL_Extension/include/CGAL/Iterator_range.h index 677aa9c44d2..5f1eb07ad1e 100644 --- a/STL_Extension/include/CGAL/Iterator_range.h +++ b/STL_Extension/include/CGAL/Iterator_range.h @@ -28,7 +28,7 @@ namespace CGAL { /*! -\ingroup PkgStlExtension +\ingroup PkgStlExtensionRef /// `CGAL::Iterator_range` is a... */ template diff --git a/STL_Extension/include/CGAL/value_type_traits.h b/STL_Extension/include/CGAL/value_type_traits.h index e50fc7de38b..31451fa6a38 100644 --- a/STL_Extension/include/CGAL/value_type_traits.h +++ b/STL_Extension/include/CGAL/value_type_traits.h @@ -26,7 +26,7 @@ namespace CGAL { -/// \ingroup PkgStlExtension +/// \ingroup PkgStlExtensionRef /// Class providing the value type of an iterator, and /// in the case of an output iterator, a type of objects that can be put in it. /// diff --git a/Scale_space_reconstruction_3/doc/Scale_space_reconstruction_3/PackageDescription.txt b/Scale_space_reconstruction_3/doc/Scale_space_reconstruction_3/PackageDescription.txt index a39837cd67e..959b2bd0a7d 100644 --- a/Scale_space_reconstruction_3/doc/Scale_space_reconstruction_3/PackageDescription.txt +++ b/Scale_space_reconstruction_3/doc/Scale_space_reconstruction_3/PackageDescription.txt @@ -1,20 +1,20 @@ -/// \defgroup PkgScaleSpaceReconstruction3 Scale-Space Surface Reconstruction Reference +/// \defgroup PkgScaleSpaceReconstruction3Ref Scale-Space Surface Reconstruction Reference /// \defgroup PkgScaleSpaceReconstruction3Concepts Concepts -/// \ingroup PkgScaleSpaceReconstruction3 +/// \ingroup PkgScaleSpaceReconstruction3Ref /// \defgroup PkgScaleSpaceReconstruction3Classes Classes -/// \ingroup PkgScaleSpaceReconstruction3 +/// \ingroup PkgScaleSpaceReconstruction3Ref /*! -\addtogroup PkgScaleSpaceReconstruction3 +\addtogroup PkgScaleSpaceReconstruction3Ref \cgalPkgDescriptionBegin{Scale-Space Surface Reconstruction,PkgScaleSpaceReconstruction3Summary} \cgalPkgPicture{knot_thumb.png} \cgalPkgSummaryBegin \cgalPkgAuthors{Thijs van Lankveld} \cgalPkgDesc{This method allows to reconstruct a surface that interpolates a set of 3D points using either and alpha shape or the advancing front surface reconstruction method. The output interpolates the point set (as opposed to approximating the point set). How the surface connects the points depends on a scale variable, which can be estimated semi-automatically.} -\cgalPkgManuals{Chapter_Scale_space_reconstruction,PkgScaleSpaceReconstruction3} +\cgalPkgManuals{Chapter_Scale_space_reconstruction,PkgScaleSpaceReconstruction3Ref} \cgalPkgSummaryEnd \cgalPkgShortInfoBegin \cgalPkgSince{4.6} diff --git a/SearchStructures/doc/SearchStructures/CGAL/Tree_base.h b/SearchStructures/doc/SearchStructures/CGAL/Tree_base.h index 6feffa1d1b4..7197381e62f 100644 --- a/SearchStructures/doc/SearchStructures/CGAL/Tree_base.h +++ b/SearchStructures/doc/SearchStructures/CGAL/Tree_base.h @@ -2,7 +2,7 @@ namespace CGAL { /*! -\ingroup PkgRangeSegmentTreesD +\ingroup PkgRangeSegmentTreesDRef `Tree_anchor` is also derived from `Tree_base`. Therefore, it provides the same methods as `Range_tree_d` and `Segment_tree_d`, but does diff --git a/SearchStructures/doc/SearchStructures/PackageDescription.txt b/SearchStructures/doc/SearchStructures/PackageDescription.txt index e6f3cd1a575..12b775c081e 100644 --- a/SearchStructures/doc/SearchStructures/PackageDescription.txt +++ b/SearchStructures/doc/SearchStructures/PackageDescription.txt @@ -1,22 +1,22 @@ -/// \defgroup PkgRangeSegmentTreesD dD Range and Segment Trees Reference +/// \defgroup PkgRangeSegmentTreesDRef dD Range and Segment Trees Reference /// \defgroup PkgRangeSegmentTreesDConcepts Concepts -/// \ingroup PkgRangeSegmentTreesD +/// \ingroup PkgRangeSegmentTreesDRef /// \defgroup PkgRangeSegmentTreesDTraitsClasses Traits Classes -/// \ingroup PkgRangeSegmentTreesD +/// \ingroup PkgRangeSegmentTreesDRef /// \defgroup PkgRangeSegmentTreesDSearchStructure Search Structures -/// \ingroup PkgRangeSegmentTreesD +/// \ingroup PkgRangeSegmentTreesDRef /*! -\addtogroup PkgRangeSegmentTreesD +\addtogroup PkgRangeSegmentTreesDRef \todo check generated documentation \cgalPkgDescriptionBegin{dD Range and Segment Trees,PkgRangeSegmentTreesDSummary} \cgalPkgPicture{segment_tree.png} \cgalPkgSummaryBegin \cgalPkgAuthor{Gabriele Neyer} \cgalPkgDesc{%Range and segment trees allow to perform window queries on point sets, and to enumerate all ranges enclosing a query point. The provided data structures are static and they are optimized for fast queries.} -\cgalPkgManuals{Chapter_dD_Range_and_Segment_Trees,PkgRangeSegmentTreesD} +\cgalPkgManuals{Chapter_dD_Range_and_Segment_Trees,PkgRangeSegmentTreesDRef} \cgalPkgSummaryEnd \cgalPkgShortInfoBegin \cgalPkgSince{0.9} diff --git a/Segment_Delaunay_graph_2/doc/Segment_Delaunay_graph_2/CGAL/Segment_Delaunay_graph_2.h b/Segment_Delaunay_graph_2/doc/Segment_Delaunay_graph_2/CGAL/Segment_Delaunay_graph_2.h index b027e98202f..88f940e398f 100644 --- a/Segment_Delaunay_graph_2/doc/Segment_Delaunay_graph_2/CGAL/Segment_Delaunay_graph_2.h +++ b/Segment_Delaunay_graph_2/doc/Segment_Delaunay_graph_2/CGAL/Segment_Delaunay_graph_2.h @@ -2,7 +2,7 @@ namespace CGAL { /*! -\ingroup PkgSegmentDelaunayGraph2 +\ingroup PkgSegmentDelaunayGraph2Ref The class `Segment_Delaunay_graph_2` represents the segment Delaunay graph (which is the dual graph of the 2D segment Voronoi diagram). diff --git a/Segment_Delaunay_graph_2/doc/Segment_Delaunay_graph_2/CGAL/Segment_Delaunay_graph_filtered_traits_2.h b/Segment_Delaunay_graph_2/doc/Segment_Delaunay_graph_2/CGAL/Segment_Delaunay_graph_filtered_traits_2.h index efe1816766d..eabca2b1001 100644 --- a/Segment_Delaunay_graph_2/doc/Segment_Delaunay_graph_2/CGAL/Segment_Delaunay_graph_filtered_traits_2.h +++ b/Segment_Delaunay_graph_2/doc/Segment_Delaunay_graph_2/CGAL/Segment_Delaunay_graph_filtered_traits_2.h @@ -2,7 +2,7 @@ namespace CGAL { /*! -\ingroup PkgSegmentDelaunayGraph2 +\ingroup PkgSegmentDelaunayGraph2Ref The class `Segment_Delaunay_graph_filtered_traits_2` provides a model for the `SegmentDelaunayGraphTraits_2` concept. @@ -150,7 +150,7 @@ typedef unspecified_type Exact_traits; namespace CGAL { /*! -\ingroup PkgSegmentDelaunayGraph2 +\ingroup PkgSegmentDelaunayGraph2Ref The class `Segment_Delaunay_graph_filtered_traits_without_intersections_2` provides a model for the `SegmentDelaunayGraphTraits_2` concept. diff --git a/Segment_Delaunay_graph_2/doc/Segment_Delaunay_graph_2/CGAL/Segment_Delaunay_graph_hierarchy_2.h b/Segment_Delaunay_graph_2/doc/Segment_Delaunay_graph_2/CGAL/Segment_Delaunay_graph_hierarchy_2.h index fed2677c2ee..4e60298c8af 100644 --- a/Segment_Delaunay_graph_2/doc/Segment_Delaunay_graph_2/CGAL/Segment_Delaunay_graph_hierarchy_2.h +++ b/Segment_Delaunay_graph_2/doc/Segment_Delaunay_graph_2/CGAL/Segment_Delaunay_graph_hierarchy_2.h @@ -2,7 +2,7 @@ namespace CGAL { /*! -\ingroup PkgSegmentDelaunayGraph2 +\ingroup PkgSegmentDelaunayGraph2Ref We provide an alternative to the class `Segment_Delaunay_graph_2` for the incremental diff --git a/Segment_Delaunay_graph_2/doc/Segment_Delaunay_graph_2/CGAL/Segment_Delaunay_graph_hierarchy_vertex_base_2.h b/Segment_Delaunay_graph_2/doc/Segment_Delaunay_graph_2/CGAL/Segment_Delaunay_graph_hierarchy_vertex_base_2.h index 14c07257944..91b29a16620 100644 --- a/Segment_Delaunay_graph_2/doc/Segment_Delaunay_graph_2/CGAL/Segment_Delaunay_graph_hierarchy_vertex_base_2.h +++ b/Segment_Delaunay_graph_2/doc/Segment_Delaunay_graph_2/CGAL/Segment_Delaunay_graph_hierarchy_vertex_base_2.h @@ -2,7 +2,7 @@ namespace CGAL { /*! -\ingroup PkgSegmentDelaunayGraph2 +\ingroup PkgSegmentDelaunayGraph2Ref The class `Segment_Delaunay_graph_hierarchy_vertex_base_2` provides a model for the `SegmentDelaunayGraphHierarchyVertexBase_2` concept, which is the diff --git a/Segment_Delaunay_graph_2/doc/Segment_Delaunay_graph_2/CGAL/Segment_Delaunay_graph_site_2.h b/Segment_Delaunay_graph_2/doc/Segment_Delaunay_graph_2/CGAL/Segment_Delaunay_graph_site_2.h index 8453319b95e..5a9ac423e12 100644 --- a/Segment_Delaunay_graph_2/doc/Segment_Delaunay_graph_2/CGAL/Segment_Delaunay_graph_site_2.h +++ b/Segment_Delaunay_graph_2/doc/Segment_Delaunay_graph_2/CGAL/Segment_Delaunay_graph_site_2.h @@ -2,7 +2,7 @@ namespace CGAL { /*! -\ingroup PkgSegmentDelaunayGraph2 +\ingroup PkgSegmentDelaunayGraph2Ref The class `Segment_Delaunay_graph_site_2` is a model for the concept `SegmentDelaunayGraphSite_2`. diff --git a/Segment_Delaunay_graph_2/doc/Segment_Delaunay_graph_2/CGAL/Segment_Delaunay_graph_storage_site_2.h b/Segment_Delaunay_graph_2/doc/Segment_Delaunay_graph_2/CGAL/Segment_Delaunay_graph_storage_site_2.h index 5b51c5e4360..0b76d67103f 100644 --- a/Segment_Delaunay_graph_2/doc/Segment_Delaunay_graph_2/CGAL/Segment_Delaunay_graph_storage_site_2.h +++ b/Segment_Delaunay_graph_2/doc/Segment_Delaunay_graph_2/CGAL/Segment_Delaunay_graph_storage_site_2.h @@ -2,7 +2,7 @@ namespace CGAL { /*! -\ingroup PkgSegmentDelaunayGraph2 +\ingroup PkgSegmentDelaunayGraph2Ref The class `Segment_Delaunay_graph_storage_site_2` is a model for the concept `SegmentDelaunayGraphStorageSite_2`. diff --git a/Segment_Delaunay_graph_2/doc/Segment_Delaunay_graph_2/CGAL/Segment_Delaunay_graph_traits_2.h b/Segment_Delaunay_graph_2/doc/Segment_Delaunay_graph_2/CGAL/Segment_Delaunay_graph_traits_2.h index 5d915262170..ec45c0ff065 100644 --- a/Segment_Delaunay_graph_2/doc/Segment_Delaunay_graph_2/CGAL/Segment_Delaunay_graph_traits_2.h +++ b/Segment_Delaunay_graph_2/doc/Segment_Delaunay_graph_2/CGAL/Segment_Delaunay_graph_traits_2.h @@ -2,7 +2,7 @@ namespace CGAL { /*! -\ingroup PkgSegmentDelaunayGraph2 +\ingroup PkgSegmentDelaunayGraph2Ref The class `Segment_Delaunay_graph_traits_2` provides a model for the `SegmentDelaunayGraphTraits_2` concept. @@ -74,7 +74,7 @@ typedef MTag Method_tag; namespace CGAL { /*! -\ingroup PkgSegmentDelaunayGraph2 +\ingroup PkgSegmentDelaunayGraph2Ref The class `Segment_Delaunay_graph_traits_without_intersections_2` provides a model for the `SegmentDelaunayGraphTraits_2` concept. diff --git a/Segment_Delaunay_graph_2/doc/Segment_Delaunay_graph_2/CGAL/Segment_Delaunay_graph_vertex_base_2.h b/Segment_Delaunay_graph_2/doc/Segment_Delaunay_graph_2/CGAL/Segment_Delaunay_graph_vertex_base_2.h index dfd1c5ef860..8b35879a460 100644 --- a/Segment_Delaunay_graph_2/doc/Segment_Delaunay_graph_2/CGAL/Segment_Delaunay_graph_vertex_base_2.h +++ b/Segment_Delaunay_graph_2/doc/Segment_Delaunay_graph_2/CGAL/Segment_Delaunay_graph_vertex_base_2.h @@ -2,7 +2,7 @@ namespace CGAL { /*! -\ingroup PkgSegmentDelaunayGraph2 +\ingroup PkgSegmentDelaunayGraph2Ref The class `Segment_Delaunay_graph_vertex_base_2` provides a model for the `SegmentDelaunayGraphVertexBase_2` concept which is the vertex diff --git a/Segment_Delaunay_graph_2/doc/Segment_Delaunay_graph_2/PackageDescription.txt b/Segment_Delaunay_graph_2/doc/Segment_Delaunay_graph_2/PackageDescription.txt index ad569d97e61..78913698102 100644 --- a/Segment_Delaunay_graph_2/doc/Segment_Delaunay_graph_2/PackageDescription.txt +++ b/Segment_Delaunay_graph_2/doc/Segment_Delaunay_graph_2/PackageDescription.txt @@ -1,15 +1,15 @@ -/// \defgroup PkgSegmentDelaunayGraph2 2D Segment Delaunay Graphs Reference +/// \defgroup PkgSegmentDelaunayGraph2Ref 2D Segment Delaunay Graphs Reference /// \defgroup PkgSegmentDelaunayGraph2Concepts Concepts -/// \ingroup PkgSegmentDelaunayGraph2 +/// \ingroup PkgSegmentDelaunayGraph2Ref /*! -\addtogroup PkgSegmentDelaunayGraph2 +\addtogroup PkgSegmentDelaunayGraph2Ref \todo check generated documentation \cgalPkgDescriptionBegin{2D Segment Delaunay Graphs,PkgSegmentDelaunayGraph2Summary} \cgalPkgPicture{svd.png} \cgalPkgSummaryBegin \cgalPkgAuthor{Menelaos Karavelas} \cgalPkgDesc{An algorithm for computing the dual of a Voronoi diagram of a set of segments under the Euclidean metric. It is a generalization of the standard Voronoi diagram for points. The algorithms provided are dynamic.} -\cgalPkgManuals{Chapter_2D_Segment_Delaunay_Graphs,PkgSegmentDelaunayGraph2} +\cgalPkgManuals{Chapter_2D_Segment_Delaunay_Graphs,PkgSegmentDelaunayGraph2Ref} \cgalPkgSummaryEnd \cgalPkgShortInfoBegin \cgalPkgSince{3.1} diff --git a/Segment_Delaunay_graph_Linf_2/doc/Segment_Delaunay_graph_Linf_2/CGAL/Segment_Delaunay_graph_Linf_2.h b/Segment_Delaunay_graph_Linf_2/doc/Segment_Delaunay_graph_Linf_2/CGAL/Segment_Delaunay_graph_Linf_2.h index e42b0215104..162c139da59 100644 --- a/Segment_Delaunay_graph_Linf_2/doc/Segment_Delaunay_graph_Linf_2/CGAL/Segment_Delaunay_graph_Linf_2.h +++ b/Segment_Delaunay_graph_Linf_2/doc/Segment_Delaunay_graph_Linf_2/CGAL/Segment_Delaunay_graph_Linf_2.h @@ -2,7 +2,7 @@ namespace CGAL { /*! -\ingroup PkgSDGLinf +\ingroup PkgSDGLinfRef The class `Segment_Delaunay_graph_Linf_2` represents the segment Delaunay graph under the \f$ L_{\infty} \f$ metric (which is diff --git a/Segment_Delaunay_graph_Linf_2/doc/Segment_Delaunay_graph_Linf_2/CGAL/Segment_Delaunay_graph_Linf_filtered_traits_2.h b/Segment_Delaunay_graph_Linf_2/doc/Segment_Delaunay_graph_Linf_2/CGAL/Segment_Delaunay_graph_Linf_filtered_traits_2.h index 8ed68312025..6111e8bed87 100644 --- a/Segment_Delaunay_graph_Linf_2/doc/Segment_Delaunay_graph_Linf_2/CGAL/Segment_Delaunay_graph_Linf_filtered_traits_2.h +++ b/Segment_Delaunay_graph_Linf_2/doc/Segment_Delaunay_graph_Linf_2/CGAL/Segment_Delaunay_graph_Linf_filtered_traits_2.h @@ -2,7 +2,7 @@ namespace CGAL { /*! -\ingroup PkgSDGLinf +\ingroup PkgSDGLinfRef The class `Segment_Delaunay_graph_Linf_filtered_traits_2` provides a model for the `SegmentDelaunayGraphLinfTraits_2` concept. @@ -34,7 +34,7 @@ struct Segment_Delaunay_graph_Linf_filtered_traits_2 { namespace CGAL { /*! -\ingroup PkgSDGLinf +\ingroup PkgSDGLinfRef The class `Segment_Delaunay_graph_Linf_filtered_traits_without_intersections_2` provides a model for the diff --git a/Segment_Delaunay_graph_Linf_2/doc/Segment_Delaunay_graph_Linf_2/CGAL/Segment_Delaunay_graph_Linf_hierarchy_2.h b/Segment_Delaunay_graph_Linf_2/doc/Segment_Delaunay_graph_Linf_2/CGAL/Segment_Delaunay_graph_Linf_hierarchy_2.h index 3242e220287..e823186116c 100644 --- a/Segment_Delaunay_graph_Linf_2/doc/Segment_Delaunay_graph_Linf_2/CGAL/Segment_Delaunay_graph_Linf_hierarchy_2.h +++ b/Segment_Delaunay_graph_Linf_2/doc/Segment_Delaunay_graph_Linf_2/CGAL/Segment_Delaunay_graph_Linf_hierarchy_2.h @@ -2,7 +2,7 @@ namespace CGAL { /*! -\ingroup PkgSDGLinf +\ingroup PkgSDGLinfRef This class is equivalent to the `Segment_Delaunay_graph_hierarchy_2` class, but it uses `Segment_Delaunay_graph_Linf_2` diff --git a/Segment_Delaunay_graph_Linf_2/doc/Segment_Delaunay_graph_Linf_2/CGAL/Segment_Delaunay_graph_Linf_traits_2.h b/Segment_Delaunay_graph_Linf_2/doc/Segment_Delaunay_graph_Linf_2/CGAL/Segment_Delaunay_graph_Linf_traits_2.h index d5e21605e23..1c0c752aad1 100644 --- a/Segment_Delaunay_graph_Linf_2/doc/Segment_Delaunay_graph_Linf_2/CGAL/Segment_Delaunay_graph_Linf_traits_2.h +++ b/Segment_Delaunay_graph_Linf_2/doc/Segment_Delaunay_graph_Linf_2/CGAL/Segment_Delaunay_graph_Linf_traits_2.h @@ -2,7 +2,7 @@ namespace CGAL { /*! -\ingroup PkgSDGLinf +\ingroup PkgSDGLinfRef The class `Segment_Delaunay_graph_Linf_traits_2` provides a model for the `SegmentDelaunayGraphLinfTraits_2` concept. @@ -36,7 +36,7 @@ struct Segment_Delaunay_graph_Linf_traits_2 { namespace CGAL { /*! -\ingroup PkgSDGLinf +\ingroup PkgSDGLinfRef The class `Segment_Delaunay_graph_Linf_traits_without_intersections_2` provides a model for the diff --git a/Segment_Delaunay_graph_Linf_2/doc/Segment_Delaunay_graph_Linf_2/PackageDescription.txt b/Segment_Delaunay_graph_Linf_2/doc/Segment_Delaunay_graph_Linf_2/PackageDescription.txt index 52b93543f4b..9218294b077 100644 --- a/Segment_Delaunay_graph_Linf_2/doc/Segment_Delaunay_graph_Linf_2/PackageDescription.txt +++ b/Segment_Delaunay_graph_Linf_2/doc/Segment_Delaunay_graph_Linf_2/PackageDescription.txt @@ -1,9 +1,9 @@ -/// \defgroup PkgSDGLinf L Infinity Segment Delaunay Graphs Reference +/// \defgroup PkgSDGLinfRef L Infinity Segment Delaunay Graphs Reference /// \defgroup PkgSDGLinfConcepts Concepts -/// \ingroup PkgSDGLinf +/// \ingroup PkgSDGLinfRef /*! -\addtogroup PkgSDGLinf +\addtogroup PkgSDGLinfRef \todo check generated documentation \cgalPkgDescriptionBegin{L Infinity Segment Delaunay Graphs,PkgSDGLinfSummary} @@ -14,7 +14,7 @@ \cgalPkgDesc{Algorithms and geometric traits for computing the dual of the Voronoi diagram of a set of points and segments under the \f$L_{\infty}\f$ metric.} -\cgalPkgManuals{Chapter_L_Infinity_Segment_Delaunay_Graphs,PkgSDGLinf} +\cgalPkgManuals{Chapter_L_Infinity_Segment_Delaunay_Graphs,PkgSDGLinfRef} \cgalPkgSummaryEnd \cgalPkgShortInfoBegin diff --git a/Set_movable_separability_2/doc/Set_movable_separability_2/PackageDescription.txt b/Set_movable_separability_2/doc/Set_movable_separability_2/PackageDescription.txt index d67eb0b8c9d..e5c495945f6 100644 --- a/Set_movable_separability_2/doc/Set_movable_separability_2/PackageDescription.txt +++ b/Set_movable_separability_2/doc/Set_movable_separability_2/PackageDescription.txt @@ -1,18 +1,18 @@ -/// \defgroup PkgSetMovableSeparability2 2D Movable Separability of Sets Reference +/// \defgroup PkgSetMovableSeparability2Ref 2D Movable Separability of Sets Reference /// \defgroup top_edges_grp Top Edges /// These function determine whether a cavity (of a mold in the plane) /// that has the shape of a given polygon could be casted in the mold /// and then pulled out of the mold without colliding into the mold (but /// possibly sliding along the mold boundary). -/// \ingroup PkgSetMovableSeparability2 +/// \ingroup PkgSetMovableSeparability2Ref /// \defgroup is_pullout_direction_grp Is Pullout Direction /// These functions determine whether a cavity (of a mold in the plane) /// that has the shape of a given polygon could be casted in the mold /// and then pulled out of the mold in a given direction without colliding /// into the mold (but possibly sliding along the mold boundary). -/// \ingroup PkgSetMovableSeparability2 +/// \ingroup PkgSetMovableSeparability2Ref /// \defgroup pullout_directions_grp Pullout Directions /// These functions determine whether a cavity (of a mold in the plane) @@ -21,13 +21,13 @@ /// without colliding into the mold (but possibly sliding along the mold /// boundary). If the polygon is castable this way, the function /// computes the closed range of pullout directions. -/// \ingroup PkgSetMovableSeparability2 +/// \ingroup PkgSetMovableSeparability2Ref /// \defgroup PkgSetMovableSeparability2Concepts Concepts -/// \ingroup PkgSetMovableSeparability2 +/// \ingroup PkgSetMovableSeparability2Ref /*! -\addtogroup PkgSetMovableSeparability2 +\addtogroup PkgSetMovableSeparability2Ref \cgalPkgDescriptionBegin{2D Movable Separability of Sets,PkgSetMovableSeparability2Summary} \cgalPkgPicture{Casting_2.png} \cgalPkgSummaryBegin @@ -37,7 +37,7 @@ class of problems that deal with moving sets of objects, such as polygons in the plane; the challenge is to avoid collisions between the objects while considering different kinds of motions and various definitions of separation.} -\cgalPkgManuals{Chapter_SetMovableSeparability2,PkgSetMovableSeparability2} +\cgalPkgManuals{Chapter_SetMovableSeparability2,PkgSetMovableSeparability2Ref} \cgalPkgSummaryEnd \cgalPkgShortInfoBegin \cgalPkgSince{4.12} diff --git a/Skin_surface_3/doc/Skin_surface_3/CGAL/Skin_surface_3.h b/Skin_surface_3/doc/Skin_surface_3/CGAL/Skin_surface_3.h index 43fe3738db0..2ff4d1a05ca 100644 --- a/Skin_surface_3/doc/Skin_surface_3/CGAL/Skin_surface_3.h +++ b/Skin_surface_3/doc/Skin_surface_3/CGAL/Skin_surface_3.h @@ -2,7 +2,7 @@ namespace CGAL { /*! -\ingroup PkgSkinSurface3 +\ingroup PkgSkinSurface3Ref The `Skin_surface_3` is the main class in this package. It is a model of the concept `SkinSurface_3`. diff --git a/Skin_surface_3/doc/Skin_surface_3/CGAL/Skin_surface_polyhedral_items_3.h b/Skin_surface_3/doc/Skin_surface_3/CGAL/Skin_surface_polyhedral_items_3.h index 0a9442df293..e2e8e5584ae 100644 --- a/Skin_surface_3/doc/Skin_surface_3/CGAL/Skin_surface_polyhedral_items_3.h +++ b/Skin_surface_3/doc/Skin_surface_3/CGAL/Skin_surface_polyhedral_items_3.h @@ -2,7 +2,7 @@ namespace CGAL { /*! -\ingroup PkgSkinSurface3 +\ingroup PkgSkinSurface3Ref An items class for the `Polyhedron_3` that stores information in faces instead of an auxiliary data structure. Using it accelerates the subdivision function `subdivide_skin_surface_mesh_3()`. */ diff --git a/Skin_surface_3/doc/Skin_surface_3/CGAL/Skin_surface_traits_3.h b/Skin_surface_3/doc/Skin_surface_3/CGAL/Skin_surface_traits_3.h index 9ab34f3c30a..eb1d74ac693 100644 --- a/Skin_surface_3/doc/Skin_surface_3/CGAL/Skin_surface_traits_3.h +++ b/Skin_surface_3/doc/Skin_surface_3/CGAL/Skin_surface_traits_3.h @@ -2,7 +2,7 @@ namespace CGAL { /*! -\ingroup PkgSkinSurface3 +\ingroup PkgSkinSurface3Ref The class `Skin_surface_traits_3` is designed as a default traits class for the class `Skin_surface_3`. It is a model of diff --git a/Skin_surface_3/doc/Skin_surface_3/CGAL/Union_of_balls_3.h b/Skin_surface_3/doc/Skin_surface_3/CGAL/Union_of_balls_3.h index 04e523e559e..821e5910268 100644 --- a/Skin_surface_3/doc/Skin_surface_3/CGAL/Union_of_balls_3.h +++ b/Skin_surface_3/doc/Skin_surface_3/CGAL/Union_of_balls_3.h @@ -2,7 +2,7 @@ namespace CGAL { /*! -\ingroup PkgSkinSurface3 +\ingroup PkgSkinSurface3Ref The `Union_of_balls_3` is used to represent a skin surface with shrink factor equal to one, which is the boundary of the union of the input diff --git a/Skin_surface_3/doc/Skin_surface_3/CGAL/make_skin_surface_mesh_3.h b/Skin_surface_3/doc/Skin_surface_3/CGAL/make_skin_surface_mesh_3.h index 2df94dec5fb..bc6093aab44 100644 --- a/Skin_surface_3/doc/Skin_surface_3/CGAL/make_skin_surface_mesh_3.h +++ b/Skin_surface_3/doc/Skin_surface_3/CGAL/make_skin_surface_mesh_3.h @@ -1,7 +1,7 @@ namespace CGAL { /*! -\ingroup PkgSkinSurface3 +\ingroup PkgSkinSurface3Ref constructs a mesh of the skin surface defined by the weighted points and the shrink factor. diff --git a/Skin_surface_3/doc/Skin_surface_3/CGAL/mesh_skin_surface_3.h b/Skin_surface_3/doc/Skin_surface_3/CGAL/mesh_skin_surface_3.h index 8ab6fe9ca0b..c18efb9fb39 100644 --- a/Skin_surface_3/doc/Skin_surface_3/CGAL/mesh_skin_surface_3.h +++ b/Skin_surface_3/doc/Skin_surface_3/CGAL/mesh_skin_surface_3.h @@ -2,7 +2,7 @@ namespace CGAL { /*! -\ingroup PkgSkinSurface3 +\ingroup PkgSkinSurface3Ref constructs a mesh of the `skin_surface` in `p`. diff --git a/Skin_surface_3/doc/Skin_surface_3/CGAL/subdivide_skin_surface_mesh_3.h b/Skin_surface_3/doc/Skin_surface_3/CGAL/subdivide_skin_surface_mesh_3.h index 85c3ef465fa..820aff81571 100644 --- a/Skin_surface_3/doc/Skin_surface_3/CGAL/subdivide_skin_surface_mesh_3.h +++ b/Skin_surface_3/doc/Skin_surface_3/CGAL/subdivide_skin_surface_mesh_3.h @@ -1,7 +1,7 @@ namespace CGAL { /*! -\ingroup PkgSkinSurface3 +\ingroup PkgSkinSurface3Ref subdivides a skin surface mesh constructed diff --git a/Skin_surface_3/doc/Skin_surface_3/PackageDescription.txt b/Skin_surface_3/doc/Skin_surface_3/PackageDescription.txt index bb541cb99ae..911488ec95d 100644 --- a/Skin_surface_3/doc/Skin_surface_3/PackageDescription.txt +++ b/Skin_surface_3/doc/Skin_surface_3/PackageDescription.txt @@ -1,16 +1,16 @@ -/// \defgroup PkgSkinSurface3 3D Skin Surface Meshing Reference +/// \defgroup PkgSkinSurface3Ref 3D Skin Surface Meshing Reference /// \defgroup PkgSkinSurface3Concepts Concepts -/// \ingroup PkgSkinSurface3 +/// \ingroup PkgSkinSurface3Ref /*! -\addtogroup PkgSkinSurface3 +\addtogroup PkgSkinSurface3Ref \cgalPkgDescriptionBegin{3D Skin Surface Meshing,PkgSkinSurface3Summary} \cgalPkgPicture{small.png} \cgalPkgSummaryBegin \cgalPkgAuthor{Nico Kruithof} \cgalPkgDesc{This package allows to build a triangular mesh of a skin surface. Skin surfaces are used for modeling large molecules in biological computing. The surface is defined by a set of balls, representing the atoms of the molecule, and a shrink factor that determines the size of the smooth patches gluing the balls together. The construction of a triangular mesh of a smooth skin surface is often necessary for further analysis and for fast visualization. This package provides functions to construct a triangular mesh approximating the skin surface from a set of balls and a shrink factor. It also contains code to subdivide the mesh efficiently. } -\cgalPkgManuals{Chapter_3D_Skin_Surface_Meshing,PkgSkinSurface3} +\cgalPkgManuals{Chapter_3D_Skin_Surface_Meshing,PkgSkinSurface3Ref} \cgalPkgSummaryEnd \cgalPkgShortInfoBegin \cgalPkgSince{3.3} diff --git a/Snap_rounding_2/doc/Snap_rounding_2/CGAL/Snap_rounding_2.h b/Snap_rounding_2/doc/Snap_rounding_2/CGAL/Snap_rounding_2.h index 4874ee272f8..e407669d24c 100644 --- a/Snap_rounding_2/doc/Snap_rounding_2/CGAL/Snap_rounding_2.h +++ b/Snap_rounding_2/doc/Snap_rounding_2/CGAL/Snap_rounding_2.h @@ -1,7 +1,7 @@ namespace CGAL { /*! -\ingroup PkgSnapRounding2 +\ingroup PkgSnapRounding2Ref \f$ \def\A{{\cal A}} \f$ \f$ \def\S{{\cal S}} \f$ diff --git a/Snap_rounding_2/doc/Snap_rounding_2/CGAL/Snap_rounding_traits_2.h b/Snap_rounding_2/doc/Snap_rounding_2/CGAL/Snap_rounding_traits_2.h index bd3222545b8..8e0c352ef33 100644 --- a/Snap_rounding_2/doc/Snap_rounding_2/CGAL/Snap_rounding_traits_2.h +++ b/Snap_rounding_2/doc/Snap_rounding_2/CGAL/Snap_rounding_traits_2.h @@ -2,7 +2,7 @@ namespace CGAL { /*! -\ingroup PkgSnapRounding2 +\ingroup PkgSnapRounding2Ref The class `Snap_rounding_traits_2` is a model of the `SnapRoundingTraits_2` concept, and is the only traits class supplied diff --git a/Snap_rounding_2/doc/Snap_rounding_2/PackageDescription.txt b/Snap_rounding_2/doc/Snap_rounding_2/PackageDescription.txt index 908837d8052..ca292599232 100644 --- a/Snap_rounding_2/doc/Snap_rounding_2/PackageDescription.txt +++ b/Snap_rounding_2/doc/Snap_rounding_2/PackageDescription.txt @@ -1,15 +1,15 @@ -/// \defgroup PkgSnapRounding2 2D Snap Rounding Reference +/// \defgroup PkgSnapRounding2Ref 2D Snap Rounding Reference /// \defgroup PkgSnapRounding2Concepts Concepts -/// \ingroup PkgSnapRounding2 +/// \ingroup PkgSnapRounding2Ref /*! -\addtogroup PkgSnapRounding2 +\addtogroup PkgSnapRounding2Ref \todo check generated documentation \cgalPkgDescriptionBegin{2D Snap Rounding,PkgSnapRounding2Summary} \cgalPkgPicture{snap-detail.png} \cgalPkgSummaryBegin \cgalPkgAuthor{Eli Packer} \cgalPkgDesc{Snap Rounding is a well known method for converting arbitrary-precision arrangements of segments into a fixed-precision representation. In the study of robust geometric computing, it can be classified as a finite precision approximation technique. Iterated Snap Rounding is a modification of Snap Rounding in which each vertex is at least half-the-width-of-a-pixel away from any non-incident edge. This package supports both methods.} -\cgalPkgManuals{Chapter_2D_Snap_Rounding,PkgSnapRounding2} +\cgalPkgManuals{Chapter_2D_Snap_Rounding,PkgSnapRounding2Ref} \cgalPkgSummaryEnd \cgalPkgShortInfoBegin \cgalPkgSince{3.1} diff --git a/Solver_interface/doc/Solver_interface/PackageDescription.txt b/Solver_interface/doc/Solver_interface/PackageDescription.txt index c8cb3e86a2d..d9156f46a6e 100644 --- a/Solver_interface/doc/Solver_interface/PackageDescription.txt +++ b/Solver_interface/doc/Solver_interface/PackageDescription.txt @@ -1,17 +1,17 @@ -/// \defgroup PkgSolver CGAL and Solvers Reference +/// \defgroup PkgSolverRef CGAL and Solvers Reference /// \defgroup PkgSolverConcepts Concepts -/// \ingroup PkgSolver +/// \ingroup PkgSolverRef /// /*! -\addtogroup PkgSolver +\addtogroup PkgSolverRef \cgalPkgDescriptionBegin{CGAL and Solvers,PkgSolverSummary} \cgalPkgPicture{solver.png} \cgalPkgSummaryBegin \cgalPkgAuthors{Simon Giraudot, Pierre Alliez, Frédéric Cazals, Gaël Guennebaud, Bruno Lévy, Marc Pouget, and Laurent Saboret} \cgalPkgDesc{This package provides concepts and models for solving linear systems with dense or sparse matrices.} -\cgalPkgManuals{Chapter_CGAL_and_Solvers,PkgSolver} +\cgalPkgManuals{Chapter_CGAL_and_Solvers,PkgSolverRef} \cgalPkgSummaryEnd \cgalPkgShortInfoBegin \cgalPkgSince{4.8} diff --git a/Solver_interface/doc/Solver_interface/Solver_interface.txt b/Solver_interface/doc/Solver_interface/Solver_interface.txt index 8025bd5cafd..d035a80dba0 100644 --- a/Solver_interface/doc/Solver_interface/Solver_interface.txt +++ b/Solver_interface/doc/Solver_interface/Solver_interface.txt @@ -90,8 +90,8 @@ the solver: \section SolversHistory Implementation History This package is the result of the increasing needs for linear solvers in \cgal. The first packages that introduced the solver concepts were -\ref PkgSurfaceParameterization, \ref PkgPoissonSurfaceReconstruction -and \ref PkgJet_fitting_3. At that time, these packages were relying +\ref PkgSurfaceParameterizationRef, \ref PkgPoissonSurfaceReconstructionRef +and \ref PkgJet_fitting_3Ref. At that time, these packages were relying on \sc{Taucs}, \sc{LAPACK}, \sc{BLAS} and \sc{OpenNL}. Gaël Guennebaud then introduced new models using the \ref thirdpartyEigen library that became the only supported models by \cgal. Later on the packages \ref diff --git a/Solver_interface/include/CGAL/Default_diagonalize_traits.h b/Solver_interface/include/CGAL/Default_diagonalize_traits.h index 7dd97adf522..0389f49232b 100644 --- a/Solver_interface/include/CGAL/Default_diagonalize_traits.h +++ b/Solver_interface/include/CGAL/Default_diagonalize_traits.h @@ -30,7 +30,7 @@ namespace CGAL { -/// \ingroup PkgSolver +/// \ingroup PkgSolverRef /// /// The class `Default_diagonalize_traits` is a wrapper designed to automatically /// use `Eigen_diagonalize_traits` if Eigen is available and otherwise use diff --git a/Solver_interface/include/CGAL/Diagonalize_traits.h b/Solver_interface/include/CGAL/Diagonalize_traits.h index 57c086ef6b2..40b50a0bc1a 100644 --- a/Solver_interface/include/CGAL/Diagonalize_traits.h +++ b/Solver_interface/include/CGAL/Diagonalize_traits.h @@ -34,7 +34,7 @@ lead to precision issues, please use CGAL::Eigen_diagonalize_traits") namespace CGAL { -/// \ingroup PkgSolver +/// \ingroup PkgSolverRef /// /// The class `Diagonalize_traits` provides an internal /// implementation for the diagonalization of Variance-Covariance diff --git a/Solver_interface/include/CGAL/Eigen_diagonalize_traits.h b/Solver_interface/include/CGAL/Eigen_diagonalize_traits.h index 165a6ed56c0..1a0b15f742e 100644 --- a/Solver_interface/include/CGAL/Eigen_diagonalize_traits.h +++ b/Solver_interface/include/CGAL/Eigen_diagonalize_traits.h @@ -39,7 +39,7 @@ namespace CGAL { -/// \ingroup PkgSolver +/// \ingroup PkgSolverRef /// /// The class `Eigen_diagonalize_traits` provides an interface to the /// diagonalization of covariance matrices of \ref thirdpartyEigen diff --git a/Solver_interface/include/CGAL/Eigen_matrix.h b/Solver_interface/include/CGAL/Eigen_matrix.h index 9293f27c8a2..6e1f90f2975 100644 --- a/Solver_interface/include/CGAL/Eigen_matrix.h +++ b/Solver_interface/include/CGAL/Eigen_matrix.h @@ -27,7 +27,7 @@ namespace CGAL { /*! -\ingroup PkgSolver +\ingroup PkgSolverRef The class `Eigen_sparse_matrix` is a wrapper around \ref thirdpartyEigen "Eigen" matrix type `Eigen::SparseMatrix` @@ -265,7 +265,7 @@ private: }; // Eigen_sparse_matrix /*! -\ingroup PkgSolver +\ingroup PkgSolverRef The class `Eigen_sparse_symmetric_matrix` is a wrapper around \ref thirdpartyEigen "Eigen" matrix type `Eigen::SparseMatrix` @@ -301,7 +301,7 @@ struct Eigen_sparse_symmetric_matrix }; /*! -\ingroup PkgSolver +\ingroup PkgSolverRef The class `Eigen_matrix` is a wrapper around \ref thirdpartyEigen "Eigen" matrix type `Eigen::Matrix`. diff --git a/Solver_interface/include/CGAL/Eigen_solver_traits.h b/Solver_interface/include/CGAL/Eigen_solver_traits.h index d54e2f4a7d3..2f66eeb861c 100644 --- a/Solver_interface/include/CGAL/Eigen_solver_traits.h +++ b/Solver_interface/include/CGAL/Eigen_solver_traits.h @@ -71,7 +71,7 @@ struct Get_eigen_matrix< ::Eigen::SparseLU, FT> } //internal /*! -\ingroup PkgSolver +\ingroup PkgSolverRef The class `Eigen_solver_traits` provides an interface to the sparse solvers of \ref thirdpartyEigen "Eigen". \ref thirdpartyEigen "Eigen" version 3.1 (or later) must be available on the system. diff --git a/Solver_interface/include/CGAL/Eigen_svd.h b/Solver_interface/include/CGAL/Eigen_svd.h index a6db6704087..b39bead2be1 100644 --- a/Solver_interface/include/CGAL/Eigen_svd.h +++ b/Solver_interface/include/CGAL/Eigen_svd.h @@ -34,7 +34,7 @@ namespace CGAL { /*! -\ingroup PkgSolver +\ingroup PkgSolverRef The class `Eigen_svd` provides an algorithm to solve in the least square sense a linear system with a singular value decomposition using diff --git a/Solver_interface/include/CGAL/Eigen_vector.h b/Solver_interface/include/CGAL/Eigen_vector.h index 7e30d3fadd8..3e1a6a9509b 100644 --- a/Solver_interface/include/CGAL/Eigen_vector.h +++ b/Solver_interface/include/CGAL/Eigen_vector.h @@ -26,7 +26,7 @@ namespace CGAL { /*! -\ingroup PkgSolver +\ingroup PkgSolverRef The class `Eigen_vector` is a wrapper around \ref thirdpartyEigen "Eigen" vector type , diff --git a/Solver_interface/include/CGAL/Lapack_svd.h b/Solver_interface/include/CGAL/Lapack_svd.h index dea9a3147d4..a5ca3b75562 100644 --- a/Solver_interface/include/CGAL/Lapack_svd.h +++ b/Solver_interface/include/CGAL/Lapack_svd.h @@ -58,7 +58,7 @@ void dgelss(int *m, int *n, int *nrhs, namespace CGAL { -/// \ingroup PkgSolver +/// \ingroup PkgSolverRef /// /// A matrix class to be used in the class `Lapack_svd`. /// @@ -102,7 +102,7 @@ private: Lapack_vector& operator =(const Lapack_vector& toCopy); }; -/// \ingroup PkgSolver +/// \ingroup PkgSolverRef /// /// In CLAPACK, matrices are one-dimensional arrays and elements are /// column-major ordered. This class is a wrapper defining set and get @@ -152,7 +152,7 @@ private: Lapack_matrix& operator =(const Lapack_matrix& toCopy); }; -/// \ingroup PkgSolver +/// \ingroup PkgSolverRef /// /// This class is a wrapper to the singular value decomposition algorithm of LAPACK. /// diff --git a/Spatial_searching/doc/Spatial_searching/PackageDescription.txt b/Spatial_searching/doc/Spatial_searching/PackageDescription.txt index fb7d95df765..2b24bd24432 100644 --- a/Spatial_searching/doc/Spatial_searching/PackageDescription.txt +++ b/Spatial_searching/doc/Spatial_searching/PackageDescription.txt @@ -1,37 +1,37 @@ -/// \defgroup PkgSpatialSearchingD dD Spatial Searching Reference +/// \defgroup PkgSpatialSearchingDRef dD Spatial Searching Reference /// \defgroup PkgSpatialSearchingDConcepts Concepts -/// \ingroup PkgSpatialSearchingD +/// \ingroup PkgSpatialSearchingDRef /// \defgroup SearchClasses Search Classes -/// \ingroup PkgSpatialSearchingD +/// \ingroup PkgSpatialSearchingDRef /// \defgroup RangeQueryItemClasses Range Query Item Classes -/// \ingroup PkgSpatialSearchingD +/// \ingroup PkgSpatialSearchingDRef /// \defgroup SearchTraitsClasses Search Traits Classes -/// \ingroup PkgSpatialSearchingD +/// \ingroup PkgSpatialSearchingDRef /// \defgroup DistanceClasses Distance Classes -/// \ingroup PkgSpatialSearchingD +/// \ingroup PkgSpatialSearchingDRef /// \defgroup SplitterClasses Splitter Classes -/// \ingroup PkgSpatialSearchingD +/// \ingroup PkgSpatialSearchingDRef /// \defgroup AdvancedClasses Advanced Classes -/// \ingroup PkgSpatialSearchingD +/// \ingroup PkgSpatialSearchingDRef /*! -\addtogroup PkgSpatialSearchingD +\addtogroup PkgSpatialSearchingDRef \cgalPkgDescriptionBegin{dD Spatial Searching,PkgSpatialSearchingDSummary} \cgalPkgPicture{windowQuery.png} \cgalPkgSummaryBegin \cgalPkgAuthors{Hans Tangelder and Andreas Fabri} \cgalPkgDesc{This package implements exact and approximate distance browsing by providing exact and approximate algorithms for range searching, k-nearest and k-furthest neighbor searching, as well as incremental nearest and incremental furthest neighbor searching, where the query items are points in dD Euclidean space.} -\cgalPkgManuals{Chapter_dD_Spatial_Searching,PkgSpatialSearchingD} +\cgalPkgManuals{Chapter_dD_Spatial_Searching,PkgSpatialSearchingDRef} \cgalPkgSummaryEnd \cgalPkgShortInfoBegin \cgalPkgSince{3.0} diff --git a/Spatial_sorting/doc/Spatial_sorting/PackageDescription.txt b/Spatial_sorting/doc/Spatial_sorting/PackageDescription.txt index 08f97469814..1745cfc582c 100644 --- a/Spatial_sorting/doc/Spatial_sorting/PackageDescription.txt +++ b/Spatial_sorting/doc/Spatial_sorting/PackageDescription.txt @@ -1,29 +1,29 @@ -/// \defgroup PkgSpatialSorting Spatial Sorting Reference +/// \defgroup PkgSpatialSortingRef Spatial Sorting Reference /// \defgroup PkgSpatialSortingConcepts Concepts -/// \ingroup PkgSpatialSorting +/// \ingroup PkgSpatialSortingRef /// \defgroup PkgSpatialSortingTraits Traits Classes -/// \ingroup PkgSpatialSorting +/// \ingroup PkgSpatialSortingRef /// \defgroup PkgSpatialSortingUtils Utilities -/// \ingroup PkgSpatialSorting +/// \ingroup PkgSpatialSortingRef /// \defgroup PkgSpatialSortingFunctions Functions -/// \ingroup PkgSpatialSorting +/// \ingroup PkgSpatialSortingRef /// \defgroup PkgSpatialSortingFunctionObjects Function Objects -/// \ingroup PkgSpatialSorting +/// \ingroup PkgSpatialSortingRef /*! -\addtogroup PkgSpatialSorting +\addtogroup PkgSpatialSortingRef \cgalPkgDescriptionBegin{Spatial Sorting,PkgSpatialSortingSummary} \cgalPkgPicture{hilbert.png} \cgalPkgSummaryBegin \cgalPkgAuthors{Christophe Delage and Olivier Devillers} \cgalPkgDesc{This package provides functions for sorting geometric objects in two, three and higher dimensions, including on a sphere, in order to improve efficiency of incremental geometric algorithms.} -\cgalPkgManuals{Chapter_Spatial_Sorting,PkgSpatialSorting} +\cgalPkgManuals{Chapter_Spatial_Sorting,PkgSpatialSortingRef} \cgalPkgSummaryEnd \cgalPkgShortInfoBegin \cgalPkgSince{3.3} diff --git a/Straight_skeleton_2/doc/Straight_skeleton_2/PackageDescription.txt b/Straight_skeleton_2/doc/Straight_skeleton_2/PackageDescription.txt index 353a78069b5..28b00669641 100644 --- a/Straight_skeleton_2/doc/Straight_skeleton_2/PackageDescription.txt +++ b/Straight_skeleton_2/doc/Straight_skeleton_2/PackageDescription.txt @@ -1,24 +1,24 @@ -/// \defgroup PkgStraightSkeleton2 2D Straight Skeleton and Polygon Offsetting Reference +/// \defgroup PkgStraightSkeleton2Ref 2D Straight Skeleton and Polygon Offsetting Reference /// \defgroup PkgStraightSkeleton2Concepts Concepts -/// \ingroup PkgStraightSkeleton2 +/// \ingroup PkgStraightSkeleton2Ref /// \defgroup PkgStraightSkeleton2Classes Classes -/// \ingroup PkgStraightSkeleton2 +/// \ingroup PkgStraightSkeleton2Ref /// \defgroup PkgStraightSkeleton2Auxiliary Auxiliary Classes -/// \ingroup PkgStraightSkeleton2 +/// \ingroup PkgStraightSkeleton2Ref /// \defgroup PkgStraightSkeleton2Functions Functions -/// \ingroup PkgStraightSkeleton2 +/// \ingroup PkgStraightSkeleton2Ref /*! -\addtogroup PkgStraightSkeleton2 +\addtogroup PkgStraightSkeleton2Ref \cgalPkgDescriptionBegin{2D Straight Skeleton and Polygon Offsetting,PkgStraightSkeleton2Summary} \cgalPkgPicture{Straight_skeleton_2/fig/StraightSkeletonTeaser.png} \cgalPkgSummaryBegin \cgalPkgAuthor{Fernando Cacciola} \cgalPkgDesc{This package implements an algorithm to construct a halfedge data structure representing the straight skeleton in the interior of 2D polygons with holes and an algorithm to construct inward offset polygons at any offset distance given a straight skeleton.} -\cgalPkgManuals{Chapter_2D_Straight_Skeleton_and_Polygon_Offsetting,PkgStraightSkeleton2} +\cgalPkgManuals{Chapter_2D_Straight_Skeleton_and_Polygon_Offsetting,PkgStraightSkeleton2Ref} \cgalPkgSummaryEnd \cgalPkgShortInfoBegin \cgalPkgSince{3.2} diff --git a/Stream_lines_2/doc/Stream_lines_2/CGAL/Euler_integrator_2.h b/Stream_lines_2/doc/Stream_lines_2/CGAL/Euler_integrator_2.h index 411ee87ee4f..cef2da98436 100644 --- a/Stream_lines_2/doc/Stream_lines_2/CGAL/Euler_integrator_2.h +++ b/Stream_lines_2/doc/Stream_lines_2/CGAL/Euler_integrator_2.h @@ -1,7 +1,7 @@ namespace CGAL { /*! -\ingroup PkgPlacementOfStreamlines2 +\ingroup PkgPlacementOfStreamlines2Ref This class implements the first order Euler integrator. diff --git a/Stream_lines_2/doc/Stream_lines_2/CGAL/Regular_grid_2.h b/Stream_lines_2/doc/Stream_lines_2/CGAL/Regular_grid_2.h index 2fcd5696719..850553c9de8 100644 --- a/Stream_lines_2/doc/Stream_lines_2/CGAL/Regular_grid_2.h +++ b/Stream_lines_2/doc/Stream_lines_2/CGAL/Regular_grid_2.h @@ -1,7 +1,7 @@ namespace CGAL { /*! -\ingroup PkgPlacementOfStreamlines2 +\ingroup PkgPlacementOfStreamlines2Ref This class provides a 2D vector field specified by a set of sample diff --git a/Stream_lines_2/doc/Stream_lines_2/CGAL/Runge_kutta_integrator_2.h b/Stream_lines_2/doc/Stream_lines_2/CGAL/Runge_kutta_integrator_2.h index 9e3e16c6e51..7fd71dc901e 100644 --- a/Stream_lines_2/doc/Stream_lines_2/CGAL/Runge_kutta_integrator_2.h +++ b/Stream_lines_2/doc/Stream_lines_2/CGAL/Runge_kutta_integrator_2.h @@ -1,7 +1,7 @@ namespace CGAL { /*! -\ingroup PkgPlacementOfStreamlines2 +\ingroup PkgPlacementOfStreamlines2Ref This class implements the second order Runge-Kutta integrator. diff --git a/Stream_lines_2/doc/Stream_lines_2/CGAL/Stream_lines_2.h b/Stream_lines_2/doc/Stream_lines_2/CGAL/Stream_lines_2.h index d7de6332e56..4acf7d472be 100644 --- a/Stream_lines_2/doc/Stream_lines_2/CGAL/Stream_lines_2.h +++ b/Stream_lines_2/doc/Stream_lines_2/CGAL/Stream_lines_2.h @@ -1,7 +1,7 @@ namespace CGAL { /*! -\ingroup PkgPlacementOfStreamlines2 +\ingroup PkgPlacementOfStreamlines2Ref The class `Stream_lines_2` generates a placement of streamlines in a 2D domain according to a bidimensional vector field. diff --git a/Stream_lines_2/doc/Stream_lines_2/CGAL/Triangular_field_2.h b/Stream_lines_2/doc/Stream_lines_2/CGAL/Triangular_field_2.h index eb04eff7d75..37f76d8f360 100644 --- a/Stream_lines_2/doc/Stream_lines_2/CGAL/Triangular_field_2.h +++ b/Stream_lines_2/doc/Stream_lines_2/CGAL/Triangular_field_2.h @@ -1,7 +1,7 @@ namespace CGAL { /*! -\ingroup PkgPlacementOfStreamlines2 +\ingroup PkgPlacementOfStreamlines2Ref This class provides a vector field specified by a set of sample points diff --git a/Stream_lines_2/doc/Stream_lines_2/PackageDescription.txt b/Stream_lines_2/doc/Stream_lines_2/PackageDescription.txt index ce85d714f8b..17fe3667949 100644 --- a/Stream_lines_2/doc/Stream_lines_2/PackageDescription.txt +++ b/Stream_lines_2/doc/Stream_lines_2/PackageDescription.txt @@ -1,15 +1,15 @@ -/// \defgroup PkgPlacementOfStreamlines2 2D Placement of Streamlines Reference +/// \defgroup PkgPlacementOfStreamlines2Ref 2D Placement of Streamlines Reference /// \defgroup PkgPlacementOfStreamlines2Concepts Concepts -/// \ingroup PkgPlacementOfStreamlines2 +/// \ingroup PkgPlacementOfStreamlines2Ref /*! -\addtogroup PkgPlacementOfStreamlines2 +\addtogroup PkgPlacementOfStreamlines2Ref \cgalPkgDescriptionBegin{2D Placement of Streamlines,PkgPlacementOfStreamlines2Summary} \cgalPkgPicture{streamlines-small.jpg} \cgalPkgSummaryBegin \cgalPkgAuthor{Abdelkrim Mebarki} \cgalPkgDesc{Visualizing vector fields is important for many application domains. A good way to do it is to generate streamlines that describe the flow behavior. This package implements the "Farthest Point Seeding" algorithm for placing streamlines in 2D vector fields. It generates a list of streamlines corresponding to an input flow using a specified separating distance. The algorithm uses a Delaunay triangulation to model objects and address different queries, and relies on choosing the centers of the biggest empty circles to start the integration of the streamlines.} -\cgalPkgManuals{Chapter_2D_Placement_of_Streamlines,PkgPlacementOfStreamlines2} +\cgalPkgManuals{Chapter_2D_Placement_of_Streamlines,PkgPlacementOfStreamlines2Ref} \cgalPkgSummaryEnd \cgalPkgShortInfoBegin \cgalPkgSince{3.2} diff --git a/Stream_support/doc/Stream_support/CGAL/IO/Color.h b/Stream_support/doc/Stream_support/CGAL/IO/Color.h index e3ad9813bdc..ebf2e7af76f 100644 --- a/Stream_support/doc/Stream_support/CGAL/IO/Color.h +++ b/Stream_support/doc/Stream_support/CGAL/IO/Color.h @@ -2,7 +2,7 @@ namespace CGAL { /*! -\ingroup PkgIOstreams +\ingroup PkgIOstreamsRef An object of the class `Color` is a color available for drawing operations in many \cgal output streams. diff --git a/Stream_support/doc/Stream_support/CGAL/IO/Istream_iterator.h b/Stream_support/doc/Stream_support/CGAL/IO/Istream_iterator.h index cb90ef6695b..9a86afd5fea 100644 --- a/Stream_support/doc/Stream_support/CGAL/IO/Istream_iterator.h +++ b/Stream_support/doc/Stream_support/CGAL/IO/Istream_iterator.h @@ -2,7 +2,7 @@ namespace CGAL { /*! -\ingroup PkgIOstreams +\ingroup PkgIOstreamsRef The class `Istream_iterator` is an input iterator adaptor for the input stream class `Stream` and value type `T`. It is particularly diff --git a/Stream_support/doc/Stream_support/CGAL/IO/Ostream_iterator.h b/Stream_support/doc/Stream_support/CGAL/IO/Ostream_iterator.h index 71ea3de2419..4c2dde591da 100644 --- a/Stream_support/doc/Stream_support/CGAL/IO/Ostream_iterator.h +++ b/Stream_support/doc/Stream_support/CGAL/IO/Ostream_iterator.h @@ -2,7 +2,7 @@ namespace CGAL { /*! -\ingroup PkgIOstreams +\ingroup PkgIOstreamsRef The class `Ostream_iterator` is an output iterator adaptor for the output stream class `Stream` and value type `T`. diff --git a/Stream_support/doc/Stream_support/CGAL/IO/Verbose_ostream.h b/Stream_support/doc/Stream_support/CGAL/IO/Verbose_ostream.h index 60195fc183d..de3be14eccc 100644 --- a/Stream_support/doc/Stream_support/CGAL/IO/Verbose_ostream.h +++ b/Stream_support/doc/Stream_support/CGAL/IO/Verbose_ostream.h @@ -2,7 +2,7 @@ namespace CGAL { /*! -\ingroup PkgIOstreams +\ingroup PkgIOstreamsRef The class `Verbose_ostream` can be used as an output stream. The stream output operator `<<` is defined for any type. The class diff --git a/Stream_support/doc/Stream_support/CGAL/IO/io.h b/Stream_support/doc/Stream_support/CGAL/IO/io.h index 549aeea9d8b..7870bedd001 100644 --- a/Stream_support/doc/Stream_support/CGAL/IO/io.h +++ b/Stream_support/doc/Stream_support/CGAL/IO/io.h @@ -3,7 +3,7 @@ namespace CGAL { namespace IO{ /*! - \ingroup PkgIOstreams + \ingroup PkgIOstreamsRef All classes in the \cgal `Kernel` provide input and output operators for IOStreams. The basic task of such an operator is to produce a @@ -38,7 +38,7 @@ enum Mode { ASCII = 0, BINARY, PRETTY }; } /*! -\ingroup PkgIOstreams +\ingroup PkgIOstreamsRef returns the printing mode of the %IO stream `s`. @@ -56,7 +56,7 @@ returns the printing mode of the %IO stream `s`. IO::Mode get_mode(std::ios& s); /*! -\ingroup PkgIOstreams +\ingroup PkgIOstreamsRef sets the mode of the %IO stream `s` to be the `IO::ASCII` mode. Returns the previous mode of `s`. @@ -74,7 +74,7 @@ Returns the previous mode of `s`. IO::Mode set_ascii_mode(std::ios& s); /*! -\ingroup PkgIOstreams +\ingroup PkgIOstreamsRef \sa `CGAL::IO::Mode` \sa `CGAL::set_mode()` @@ -91,7 +91,7 @@ Returns the previous mode of `s`. IO::Mode set_binary_mode(std::ios& s); /*! -\ingroup PkgIOstreams +\ingroup PkgIOstreamsRef sets the printing mode of the %IO stream `s`. @@ -107,7 +107,7 @@ sets the printing mode of the %IO stream `s`. IO::Mode set_mode(std::ios& s, IO::Mode m); /*! -\ingroup PkgIOstreams +\ingroup PkgIOstreamsRef sets the mode of the %IO stream `s` to be the `IO::PRETTY` mode. Returns the previous mode of `s`. @@ -126,7 +126,7 @@ IO::Mode set_pretty_mode(std::ios& s); /*! -\ingroup PkgIOstreams +\ingroup PkgIOstreamsRef The definition of `Input_rep` is completely symmetric to `Output_rep`. @@ -137,7 +137,7 @@ class Input_rep { }; /* end Input_rep */ /*! -\ingroup PkgIOstreams +\ingroup PkgIOstreamsRef The purpose of `Output_rep` is to provide a way to control output formatting that works independently of the object's stream output operator. @@ -171,7 +171,7 @@ class Output_rep { /*! -\ingroup PkgIOstreams +\ingroup PkgIOstreamsRef checks if the %IO stream `s` is in `IO::ASCII` mode. @@ -188,7 +188,7 @@ bool is_ascii(std::ios& s); /*! -\ingroup PkgIOstreams +\ingroup PkgIOstreamsRef checks if the %IO stream `s` is in `IO::BINARY` mode. @@ -204,7 +204,7 @@ checks if the %IO stream `s` is in `IO::BINARY` mode. bool is_binary(std::ios& s); /*! -\ingroup PkgIOstreams +\ingroup PkgIOstreamsRef checks if the %IO stream `s` is in `IO::PRETTY` mode. @@ -221,7 +221,7 @@ checks if the %IO stream `s` is in `IO::PRETTY` mode. bool is_pretty(std::ios& s); /*! -\ingroup PkgIOstreams +\ingroup PkgIOstreamsRef Convenience function to construct an output representation (`Output_rep`) for type `T`. @@ -230,7 +230,7 @@ Generic IO for type `T`. template Output_rep oformat( const T& t); /*! -\ingroup PkgIOstreams +\ingroup PkgIOstreamsRef The definition of this function is completely symmetric to `oformat()`. */ @@ -238,7 +238,7 @@ template Input_rep iformat( const T& t); /*! -\ingroup PkgIOstreams +\ingroup PkgIOstreamsRef Convenience function to construct an output representation (`Output_rep`) for type `T`. diff --git a/Stream_support/doc/Stream_support/PackageDescription.txt b/Stream_support/doc/Stream_support/PackageDescription.txt index 07cf8dcf7ad..0ecad560998 100644 --- a/Stream_support/doc/Stream_support/PackageDescription.txt +++ b/Stream_support/doc/Stream_support/PackageDescription.txt @@ -1,14 +1,14 @@ -/// \defgroup PkgIOstreams IO Streams Reference +/// \defgroup PkgIOstreamsRef IO Streams Reference /// \defgroup IOstreamOperators Stream Operators -/// \ingroup PkgIOstreams +/// \ingroup PkgIOstreamsRef /*! -\addtogroup PkgIOstreams +\addtogroup PkgIOstreamsRef \cgalPkgDescriptionBegin{IO Streams,PkgIOstreamsSummary} \cgalPkgPicture{io.png} \cgalPkgSummaryBegin \cgalPkgAuthors{Andreas Fabri, Geert-Jan Giezeman, and Lutz Kettner} \cgalPkgDesc{All classes in the \cgal kernel provide input and output operators for IO streams. The basic task of such an operator is to produce a representation of an object that can be written as a sequence of characters on devices as a console, a file, or a pipe. In \cgal we distinguish between a raw ascii, a raw binary and a pretty printing format.} -\cgalPkgManuals{Chapter_IO_Streams,PkgIOstreams} +\cgalPkgManuals{Chapter_IO_Streams,PkgIOstreamsRef} \cgalPkgSummaryEnd \cgalPkgShortInfoBegin \cgalPkgSince{1.0} diff --git a/Subdivision_method_3/doc/Subdivision_method_3/NamedParameters.txt b/Subdivision_method_3/doc/Subdivision_method_3/NamedParameters.txt index 25ccd8f1e11..4accfce3524 100644 --- a/Subdivision_method_3/doc/Subdivision_method_3/NamedParameters.txt +++ b/Subdivision_method_3/doc/Subdivision_method_3/NamedParameters.txt @@ -1,6 +1,6 @@ /*! \defgroup sm_namedparameters Named Parameters for Subdivision Methods -\ingroup PkgSurfaceSubdivisionMethods3 +\ingroup PkgSurfaceSubdivisionMethods3Ref In this package, all functions optional parameters are implemented as BGL optional named parameters (see \ref BGLNamedParameters for more information on how to use them). diff --git a/Subdivision_method_3/doc/Subdivision_method_3/PackageDescription.txt b/Subdivision_method_3/doc/Subdivision_method_3/PackageDescription.txt index 810657c81e5..8236ca110b6 100644 --- a/Subdivision_method_3/doc/Subdivision_method_3/PackageDescription.txt +++ b/Subdivision_method_3/doc/Subdivision_method_3/PackageDescription.txt @@ -1,20 +1,20 @@ -/// \defgroup PkgSurfaceSubdivisionMethods3 3D Surface Subdivision Methods +/// \defgroup PkgSurfaceSubdivisionMethods3Ref 3D Surface Subdivision Methods /// \defgroup PkgSurfaceSubdivisionMethods3Concepts Concepts -/// \ingroup PkgSurfaceSubdivisionMethods3 +/// \ingroup PkgSurfaceSubdivisionMethods3Ref /// \defgroup PkgSurfaceSubdivisionMethods3Functions Subdivision Methods -/// \ingroup PkgSurfaceSubdivisionMethods3 +/// \ingroup PkgSurfaceSubdivisionMethods3Ref /*! -\addtogroup PkgSurfaceSubdivisionMethods3 +\addtogroup PkgSurfaceSubdivisionMethods3Ref \cgalPkgDescriptionBegin{3D Surface Subdivision Methods,PkgSurfaceSubdivisionMethods3Summary} \cgalPkgPicture{twoheads-detail.png} \cgalPkgSummaryBegin \cgalPkgAuthor{Le-Jeng Andy Shiue} \cgalPkgDesc{Subdivision methods recursively refine a control mesh and generate points approximating the limit surface. This package consists of four popular subdivision methods and their refinement hosts. Supported subdivision methods include Catmull-Clark, Loop, Doo-Sabin and \f$ \sqrt{3}\f$ subdivisions. Their respective refinement hosts are Pqq, Ptq, Dqq and \f$ \sqrt{3}\f$ refinements. Variations of those methods can be easily extended by substituting the geometry computation of the refinement host.} -\cgalPkgManuals{Chapter_3D_Surface_Subdivision_Methods,PkgSurfaceSubdivisionMethods3} +\cgalPkgManuals{Chapter_3D_Surface_Subdivision_Methods,PkgSurfaceSubdivisionMethods3Ref} \cgalPkgSummaryEnd \cgalPkgShortInfoBegin \cgalPkgSince{4.11} diff --git a/Subdivision_method_3/include/CGAL/Subdivision_method_3/subdivision_masks_3.h b/Subdivision_method_3/include/CGAL/Subdivision_method_3/subdivision_masks_3.h index e6353e38b61..c36477b4783 100644 --- a/Subdivision_method_3/include/CGAL/Subdivision_method_3/subdivision_masks_3.h +++ b/Subdivision_method_3/include/CGAL/Subdivision_method_3/subdivision_masks_3.h @@ -136,7 +136,7 @@ public: // ====================================================================== /*! -\ingroup PkgSurfaceSubdivisionMethods3 +\ingroup PkgSurfaceSubdivisionMethods3Ref The geometry mask of Catmull-Clark subdivision. @@ -260,7 +260,7 @@ public: // ====================================================================== /*! -\ingroup PkgSurfaceSubdivisionMethods3 +\ingroup PkgSurfaceSubdivisionMethods3Ref The geometry mask of Loop subdivision. @@ -422,7 +422,7 @@ public: // ====================================================================== /*! -\ingroup PkgSurfaceSubdivisionMethods3 +\ingroup PkgSurfaceSubdivisionMethods3Ref The geometry mask of Doo-Sabin subdivision. @@ -517,7 +517,7 @@ public: // ====================================================================== /*! -\ingroup PkgSurfaceSubdivisionMethods3 +\ingroup PkgSurfaceSubdivisionMethods3Ref The geometry mask of Sqrt(3) subdivision. diff --git a/Subdivision_method_3/include/CGAL/subdivision_method_3.h b/Subdivision_method_3/include/CGAL/subdivision_method_3.h index 15e6ee141e7..95f9067de7b 100644 --- a/Subdivision_method_3/include/CGAL/subdivision_method_3.h +++ b/Subdivision_method_3/include/CGAL/subdivision_method_3.h @@ -23,7 +23,7 @@ // ====================================================================== /** -* \ingroup PkgSurfaceSubdivisionMethods3 +* \ingroup PkgSurfaceSubdivisionMethods3Ref * \file CGAL/subdivision_method_3.h * Convenience header file including the headers for all * the free functions of this package. diff --git a/Surface_mesh_deformation/doc/Surface_mesh_deformation/PackageDescription.txt b/Surface_mesh_deformation/doc/Surface_mesh_deformation/PackageDescription.txt index 9e6d03b2ed2..8420fdd49d4 100644 --- a/Surface_mesh_deformation/doc/Surface_mesh_deformation/PackageDescription.txt +++ b/Surface_mesh_deformation/doc/Surface_mesh_deformation/PackageDescription.txt @@ -1,16 +1,16 @@ -/// \defgroup PkgSurfaceMeshDeformation Triangulated Surface Mesh Deformation Reference +/// \defgroup PkgSurfaceMeshDeformationRef Triangulated Surface Mesh Deformation Reference /// \defgroup PkgSurfaceMeshDeformationConcepts Concepts -/// \ingroup PkgSurfaceMeshDeformation +/// \ingroup PkgSurfaceMeshDeformationRef /*! -\addtogroup PkgSurfaceMeshDeformation +\addtogroup PkgSurfaceMeshDeformationRef \cgalPkgDescriptionBegin{Triangulated Surface Mesh Deformation,PkgSurfaceMeshDeformationSummary} \cgalPkgPicture{deform-ico.png} \cgalPkgSummaryBegin \cgalPkgAuthor{Sébastien Loriot, Olga Sorkine-Hornung, Yin Xu and Ilker %O. Yaz} \cgalPkgDesc{This package offers surface mesh deformation algorithms which provide new positions to the vertices of a surface mesh under positional constraints of some of its vertices, without requiring any additional structure other than the surface mesh itself.} -\cgalPkgManuals{Chapter_SurfaceMeshDeformation,PkgSurfaceMeshDeformation} +\cgalPkgManuals{Chapter_SurfaceMeshDeformation,PkgSurfaceMeshDeformationRef} \cgalPkgSummaryEnd \cgalPkgShortInfoBegin \cgalPkgSince{4.5} diff --git a/Surface_mesh_deformation/include/CGAL/Deformation_Eigen_closest_rotation_traits_3.h b/Surface_mesh_deformation/include/CGAL/Deformation_Eigen_closest_rotation_traits_3.h index 1350947abdf..30fa0065b7e 100644 --- a/Surface_mesh_deformation/include/CGAL/Deformation_Eigen_closest_rotation_traits_3.h +++ b/Surface_mesh_deformation/include/CGAL/Deformation_Eigen_closest_rotation_traits_3.h @@ -26,7 +26,7 @@ #include namespace CGAL { -/// \ingroup PkgSurfaceMeshDeformation +/// \ingroup PkgSurfaceMeshDeformationRef /// A class to compute the closest rotation in Frobenius norm to a 3x3 Matrix using the \link thirdpartyEigen `Eigen` library \endlink. /// The internal computation relies on `Eigen::JacobiSVD<>` solver. /// diff --git a/Surface_mesh_deformation/include/CGAL/Deformation_Eigen_polar_closest_rotation_traits_3.h b/Surface_mesh_deformation/include/CGAL/Deformation_Eigen_polar_closest_rotation_traits_3.h index 24e12cb0de2..b481ee01ece 100644 --- a/Surface_mesh_deformation/include/CGAL/Deformation_Eigen_polar_closest_rotation_traits_3.h +++ b/Surface_mesh_deformation/include/CGAL/Deformation_Eigen_polar_closest_rotation_traits_3.h @@ -27,7 +27,7 @@ #include namespace CGAL { - /// \ingroup PkgSurfaceMeshDeformation + /// \ingroup PkgSurfaceMeshDeformationRef /// A class to compute the closest rotation in Frobenius norm to a 3x3 Matrix using the \link thirdpartyEigen `Eigen` library \endlink. /// The internal computation relies on a hybrid system using the solvers `Eigen::SelfAdjointEigenSolver<>` /// and `Eigen::JacobiSVD<>` (polar decomposition). diff --git a/Surface_mesh_deformation/include/CGAL/Surface_mesh_deformation.h b/Surface_mesh_deformation/include/CGAL/Surface_mesh_deformation.h index c9d2b7576f0..f25f6f43a9d 100644 --- a/Surface_mesh_deformation/include/CGAL/Surface_mesh_deformation.h +++ b/Surface_mesh_deformation/include/CGAL/Surface_mesh_deformation.h @@ -52,7 +52,7 @@ namespace CGAL { -/// \ingroup PkgSurfaceMeshDeformation +/// \ingroup PkgSurfaceMeshDeformationRef ///@brief Deformation algorithm type enum Deformation_algorithm_tag { @@ -173,7 +173,7 @@ struct SC_on_the_fly_pmap: public Vertex_point_map{ /// @endcond /// - /// \ingroup PkgSurfaceMeshDeformation + /// \ingroup PkgSurfaceMeshDeformationRef /// @brief Class providing the functionalities for deforming a triangulated surface mesh /// /// @tparam TM a model of `HalfedgeGraph` diff --git a/Surface_mesh_parameterization/doc/Surface_mesh_parameterization/PackageDescription.txt b/Surface_mesh_parameterization/doc/Surface_mesh_parameterization/PackageDescription.txt index 834d640d929..03cb39c4d31 100644 --- a/Surface_mesh_parameterization/doc/Surface_mesh_parameterization/PackageDescription.txt +++ b/Surface_mesh_parameterization/doc/Surface_mesh_parameterization/PackageDescription.txt @@ -1,8 +1,8 @@ -/// \defgroup PkgSurfaceParameterization Triangulated Surface Mesh Parameterization Reference +/// \defgroup PkgSurfaceParameterizationRef Triangulated Surface Mesh Parameterization Reference /*! -\addtogroup PkgSurfaceParameterization +\addtogroup PkgSurfaceParameterizationRef \cgalPkgDescriptionBegin{Triangulated Surface Mesh Parameterization,PkgSurfaceParameterizationSummary} \cgalPkgPicture{bimbaDetail.png} \cgalPkgSummaryBegin @@ -15,7 +15,7 @@ As Rigid As Possible Parameterization, Discrete Authalic Parameterization, Discrete Conformal Map, Floater Mean Value Coordinates, Least Squares Conformal Maps, Orbifold Tutte Embedding, or Tutte Barycentric Mapping. The code is generic and works with any model of the `FaceGraph` concept.} -\cgalPkgManuals{Chapter_Planar_Parameterization_of_Triangulated_Surface_Meshes, PkgSurfaceParameterization} +\cgalPkgManuals{Chapter_Planar_Parameterization_of_Triangulated_Surface_Meshes, PkgSurfaceParameterizationRef} \cgalPkgSummaryEnd \cgalPkgShortInfoBegin \cgalPkgSince{3.2} @@ -114,28 +114,28 @@ The package performs the next checks: /*! \defgroup PkgSurfaceParameterizationMainFunction Main Functions - \ingroup PkgSurfaceParameterization + \ingroup PkgSurfaceParameterizationRef The central functions, main entry point of the package. */ /*! \defgroup PkgSurfaceParameterizationEnums Enums - \ingroup PkgSurfaceParameterization + \ingroup PkgSurfaceParameterizationRef The enum classes defined and used in this package. */ /*! \defgroup PkgSurfaceParameterizationConcepts Concepts - \ingroup PkgSurfaceParameterization + \ingroup PkgSurfaceParameterizationRef The concepts of this package. */ /*! \defgroup PkgSurfaceParameterizationMethods Surface Parameterization Methods - \ingroup PkgSurfaceParameterization + \ingroup PkgSurfaceParameterizationRef This \cgal package implements several parameterization methods: @@ -157,7 +157,7 @@ The package performs the next checks: /*! \defgroup PkgSurfaceParameterizationBorderParameterizationMethods Border Parameterization Methods - \ingroup PkgSurfaceParameterization + \ingroup PkgSurfaceParameterizationRef Border parameterization methods define a set of constraints (a constraint specifies two (u,v) coordinates for diff --git a/Surface_mesh_segmentation/doc/Surface_mesh_segmentation/PackageDescription.txt b/Surface_mesh_segmentation/doc/Surface_mesh_segmentation/PackageDescription.txt index 43c56dfdf1e..f311d083dfe 100644 --- a/Surface_mesh_segmentation/doc/Surface_mesh_segmentation/PackageDescription.txt +++ b/Surface_mesh_segmentation/doc/Surface_mesh_segmentation/PackageDescription.txt @@ -1,11 +1,11 @@ -/// \defgroup PkgSurfaceSegmentation Triangulated Surface Mesh Segmentation Reference +/// \defgroup PkgSurfaceSegmentationRef Triangulated Surface Mesh Segmentation Reference /// \defgroup PkgSurfaceSegmentationConcepts Concepts -/// \ingroup PkgSurfaceSegmentation +/// \ingroup PkgSurfaceSegmentationRef /*! -\addtogroup PkgSurfaceSegmentation +\addtogroup PkgSurfaceSegmentationRef \cgalPkgDescriptionBegin{Triangulated Surface Mesh Segmentation,PkgSurfaceSegmentationSummary} \cgalPkgPicture{segmentation_ico.png} @@ -17,7 +17,7 @@ Shape Diameter Function (SDF) for all facets and applies a graph-cut based algorithm over these values. Low level functions are provided to replace any intermediate step by a custom one. } -\cgalPkgManuals{Chapter_3D_SurfaceSegmentation,PkgSurfaceSegmentation} +\cgalPkgManuals{Chapter_3D_SurfaceSegmentation,PkgSurfaceSegmentationRef} \cgalPkgSummaryEnd \cgalPkgShortInfoBegin diff --git a/Surface_mesh_segmentation/include/CGAL/mesh_segmentation.h b/Surface_mesh_segmentation/include/CGAL/mesh_segmentation.h index 49da4622a96..db33df616a8 100644 --- a/Surface_mesh_segmentation/include/CGAL/mesh_segmentation.h +++ b/Surface_mesh_segmentation/include/CGAL/mesh_segmentation.h @@ -69,7 +69,7 @@ sdf_values( const TriangleMesh& triangle_mesh, /// @endcond /*! - * \ingroup PkgSurfaceSegmentation + * \ingroup PkgSurfaceSegmentationRef * @brief Function computing the Shape Diameter Function over a surface mesh. * * This function implements the Shape Diameter Function (SDF) as described in \cgalCite{shapira2008consistent}. @@ -117,7 +117,7 @@ sdf_values( const TriangleMesh& triangle_mesh, /*! - * \ingroup PkgSurfaceSegmentation + * \ingroup PkgSurfaceSegmentationRef * @brief Function post-processing raw SDF values computed per facet. * * Post-processing steps applied : @@ -152,7 +152,7 @@ sdf_values_postprocessing(const TriangleMesh& triangle_mesh, /*! - * \ingroup PkgSurfaceSegmentation + * \ingroup PkgSurfaceSegmentationRef * @brief Function computing the segmentation of a surface mesh given an SDF value per facet. * * This function fills a property map which associates a segment-id (in [0, number of segments -1]) @@ -252,7 +252,7 @@ segmentation_via_sdf_values(const TriangleMesh& triangle_mesh, /*! - * \ingroup PkgSurfaceSegmentation + * \ingroup PkgSurfaceSegmentationRef * @brief Function computing the segmentation of a surface mesh. * * This function is equivalent to calling the functions `CGAL::sdf_values()` and diff --git a/Surface_mesh_shortest_path/doc/Surface_mesh_shortest_path/PackageDescription.txt b/Surface_mesh_shortest_path/doc/Surface_mesh_shortest_path/PackageDescription.txt index 92612538034..ecb84fd86d1 100644 --- a/Surface_mesh_shortest_path/doc/Surface_mesh_shortest_path/PackageDescription.txt +++ b/Surface_mesh_shortest_path/doc/Surface_mesh_shortest_path/PackageDescription.txt @@ -1,15 +1,15 @@ // Triangulated Surface Mesh Geodesic Shortest Paths -/// \defgroup PkgSurfaceMeshShortestPath Triangulated Surface Mesh Geodesic Shortest Paths Reference +/// \defgroup PkgSurfaceMeshShortestPathRef Triangulated Surface Mesh Geodesic Shortest Paths Reference /// \defgroup PkgSurfaceMeshShortestPathConcepts Concepts -/// \ingroup PkgSurfaceMeshShortestPath +/// \ingroup PkgSurfaceMeshShortestPathRef /// \defgroup PkgSurfaceMeshShortestPathTraitsClasses Traits Classes -/// \ingroup PkgSurfaceMeshShortestPath +/// \ingroup PkgSurfaceMeshShortestPathRef /*! -\addtogroup PkgSurfaceMeshShortestPath +\addtogroup PkgSurfaceMeshShortestPathRef \todo Modify the algorithm to support more efficient incremental construction \todo Add parallelization to the algorithm \todo Add methods for computing the ridge tree using the output of the algorithm @@ -20,7 +20,7 @@ \cgalPkgSummaryBegin \cgalPkgAuthors{Stephen Kiazyk, Sébastien Loriot, Éric Colin de Verdière} \cgalPkgDesc{The package provides methods for computing geodesic shortest path on triangulated surface meshes. The algorithm used is based on a paper by Xin and Wang \cgalCite{XinWang2009improvingchenandhan} . The input of this package can be any model of the `FaceListGraph` concept. } -\cgalPkgManuals{Chapter_Surface_mesh_shortest_path,PkgSurfaceMeshShortestPath} +\cgalPkgManuals{Chapter_Surface_mesh_shortest_path,PkgSurfaceMeshShortestPathRef} \cgalPkgSummaryEnd \cgalPkgShortInfoBegin \cgalPkgSince{4.7} diff --git a/Surface_mesh_shortest_path/include/CGAL/Surface_mesh_shortest_path.h b/Surface_mesh_shortest_path/include/CGAL/Surface_mesh_shortest_path.h index e196e2e63ac..2f9d75f00fd 100644 --- a/Surface_mesh_shortest_path/include/CGAL/Surface_mesh_shortest_path.h +++ b/Surface_mesh_shortest_path/include/CGAL/Surface_mesh_shortest_path.h @@ -25,7 +25,7 @@ /** - * \ingroup PkgSurfaceMeshShortestPath + * \ingroup PkgSurfaceMeshShortestPathRef * \file CGAL/Surface_mesh_shortest_path.h * Convenience header file only including `CGAL/Surface_mesh_shortest_path/Surface_mesh_shortest_path.h` * and `CGAL/Surface_mesh_shortest_path/Surface_mesh_shortest_path_traits.h`. diff --git a/Surface_mesh_shortest_path/include/CGAL/Surface_mesh_shortest_path/Surface_mesh_shortest_path.h b/Surface_mesh_shortest_path/include/CGAL/Surface_mesh_shortest_path/Surface_mesh_shortest_path.h index 68bd9b9327c..15170a91326 100644 --- a/Surface_mesh_shortest_path/include/CGAL/Surface_mesh_shortest_path/Surface_mesh_shortest_path.h +++ b/Surface_mesh_shortest_path/include/CGAL/Surface_mesh_shortest_path/Surface_mesh_shortest_path.h @@ -54,7 +54,7 @@ namespace CGAL { /*! -\ingroup PkgSurfaceMeshShortestPath +\ingroup PkgSurfaceMeshShortestPathRef \brief Computes shortest surface paths from one or more source points on a surface mesh. diff --git a/Surface_mesh_simplification/doc/Surface_mesh_simplification/CGAL/Surface_mesh_simplification/Edge_collapse_visitor_base.h b/Surface_mesh_simplification/doc/Surface_mesh_simplification/CGAL/Surface_mesh_simplification/Edge_collapse_visitor_base.h index 4fb784a6762..6f3f8b45fcc 100644 --- a/Surface_mesh_simplification/doc/Surface_mesh_simplification/CGAL/Surface_mesh_simplification/Edge_collapse_visitor_base.h +++ b/Surface_mesh_simplification/doc/Surface_mesh_simplification/CGAL/Surface_mesh_simplification/Edge_collapse_visitor_base.h @@ -2,7 +2,7 @@ namespace CGAL { namespace Surface_mesh_simplification { /*! -\ingroup PkgSurfaceMeshSimplification +\ingroup PkgSurfaceMeshSimplificationRef The class `Surface_mesh_simplification::Edge_collapse_visitor_base` provides a base class for models of the `EdgeCollapseSimplificationVisitor` concept. diff --git a/Surface_mesh_simplification/doc/Surface_mesh_simplification/CGAL/Surface_mesh_simplification/Policies/Edge_collapse/Bounded_normal_change_placement.h b/Surface_mesh_simplification/doc/Surface_mesh_simplification/CGAL/Surface_mesh_simplification/Policies/Edge_collapse/Bounded_normal_change_placement.h index d8db52c58d5..3fabd75ee17 100644 --- a/Surface_mesh_simplification/doc/Surface_mesh_simplification/CGAL/Surface_mesh_simplification/Policies/Edge_collapse/Bounded_normal_change_placement.h +++ b/Surface_mesh_simplification/doc/Surface_mesh_simplification/CGAL/Surface_mesh_simplification/Policies/Edge_collapse/Bounded_normal_change_placement.h @@ -3,7 +3,7 @@ namespace CGAL { namespace Surface_mesh_simplification { /*! -\ingroup PkgSurfaceMeshSimplification +\ingroup PkgSurfaceMeshSimplificationRef The class `Bounded_normal_change_placement` is a model for the `GetPlacement` concept which serves as a filter for another placement. It rejects the placement if any diff --git a/Surface_mesh_simplification/doc/Surface_mesh_simplification/CGAL/Surface_mesh_simplification/Policies/Edge_collapse/Constrained_placement.h b/Surface_mesh_simplification/doc/Surface_mesh_simplification/CGAL/Surface_mesh_simplification/Policies/Edge_collapse/Constrained_placement.h index 6dbd277a059..94e5c193e39 100644 --- a/Surface_mesh_simplification/doc/Surface_mesh_simplification/CGAL/Surface_mesh_simplification/Policies/Edge_collapse/Constrained_placement.h +++ b/Surface_mesh_simplification/doc/Surface_mesh_simplification/CGAL/Surface_mesh_simplification/Policies/Edge_collapse/Constrained_placement.h @@ -3,7 +3,7 @@ namespace CGAL { namespace Surface_mesh_simplification { /*! -\ingroup PkgSurfaceMeshSimplification +\ingroup PkgSurfaceMeshSimplificationRef The class `Constrained_placement` is a model for the `GetPlacement` concept provided the template parameter `BasePlacement` is such a model. diff --git a/Surface_mesh_simplification/doc/Surface_mesh_simplification/CGAL/Surface_mesh_simplification/Policies/Edge_collapse/Count_ratio_stop_predicate.h b/Surface_mesh_simplification/doc/Surface_mesh_simplification/CGAL/Surface_mesh_simplification/Policies/Edge_collapse/Count_ratio_stop_predicate.h index 726294904e6..0d01d7b04a7 100644 --- a/Surface_mesh_simplification/doc/Surface_mesh_simplification/CGAL/Surface_mesh_simplification/Policies/Edge_collapse/Count_ratio_stop_predicate.h +++ b/Surface_mesh_simplification/doc/Surface_mesh_simplification/CGAL/Surface_mesh_simplification/Policies/Edge_collapse/Count_ratio_stop_predicate.h @@ -3,7 +3,7 @@ namespace CGAL { namespace Surface_mesh_simplification { /*! -\ingroup PkgSurfaceMeshSimplification +\ingroup PkgSurfaceMeshSimplificationRef The class `Count_ratio_stop_predicate` is a model for the `StopPredicate` concept which returns `true` when the relation between the initial and current number of edges drops below a certain ratio. diff --git a/Surface_mesh_simplification/doc/Surface_mesh_simplification/CGAL/Surface_mesh_simplification/Policies/Edge_collapse/Count_stop_predicate.h b/Surface_mesh_simplification/doc/Surface_mesh_simplification/CGAL/Surface_mesh_simplification/Policies/Edge_collapse/Count_stop_predicate.h index a7f5861cbea..7e11c1950ad 100644 --- a/Surface_mesh_simplification/doc/Surface_mesh_simplification/CGAL/Surface_mesh_simplification/Policies/Edge_collapse/Count_stop_predicate.h +++ b/Surface_mesh_simplification/doc/Surface_mesh_simplification/CGAL/Surface_mesh_simplification/Policies/Edge_collapse/Count_stop_predicate.h @@ -3,7 +3,7 @@ namespace CGAL { namespace Surface_mesh_simplification { /*! -\ingroup PkgSurfaceMeshSimplification +\ingroup PkgSurfaceMeshSimplificationRef The class `Count_stop_predicate` is a model for the `StopPredicate` concept, which returns `true` when the number of current edges drops below a certain threshold. diff --git a/Surface_mesh_simplification/doc/Surface_mesh_simplification/CGAL/Surface_mesh_simplification/Policies/Edge_collapse/Edge_length_cost.h b/Surface_mesh_simplification/doc/Surface_mesh_simplification/CGAL/Surface_mesh_simplification/Policies/Edge_collapse/Edge_length_cost.h index 8d6f35ace4d..58f43d54057 100644 --- a/Surface_mesh_simplification/doc/Surface_mesh_simplification/CGAL/Surface_mesh_simplification/Policies/Edge_collapse/Edge_length_cost.h +++ b/Surface_mesh_simplification/doc/Surface_mesh_simplification/CGAL/Surface_mesh_simplification/Policies/Edge_collapse/Edge_length_cost.h @@ -3,7 +3,7 @@ namespace CGAL { namespace Surface_mesh_simplification { /*! -\ingroup PkgSurfaceMeshSimplification +\ingroup PkgSurfaceMeshSimplificationRef The class `Edge_length_cost` is a model for the `GetCost` concept, which computes the collapse cost as the squared length of the edge. diff --git a/Surface_mesh_simplification/doc/Surface_mesh_simplification/CGAL/Surface_mesh_simplification/Policies/Edge_collapse/Edge_length_stop_predicate.h b/Surface_mesh_simplification/doc/Surface_mesh_simplification/CGAL/Surface_mesh_simplification/Policies/Edge_collapse/Edge_length_stop_predicate.h index 1363c60da46..d2c11fec0be 100644 --- a/Surface_mesh_simplification/doc/Surface_mesh_simplification/CGAL/Surface_mesh_simplification/Policies/Edge_collapse/Edge_length_stop_predicate.h +++ b/Surface_mesh_simplification/doc/Surface_mesh_simplification/CGAL/Surface_mesh_simplification/Policies/Edge_collapse/Edge_length_stop_predicate.h @@ -3,7 +3,7 @@ namespace CGAL { namespace Surface_mesh_simplification { /*! -\ingroup PkgSurfaceMeshSimplification +\ingroup PkgSurfaceMeshSimplificationRef The class `Edge_length_stop_predicate` is a model for the `StopPredicate` concept, which returns `true` when the top edge in the priority queue is larger than a certain threshold. diff --git a/Surface_mesh_simplification/doc/Surface_mesh_simplification/CGAL/Surface_mesh_simplification/Policies/Edge_collapse/Edge_profile.h b/Surface_mesh_simplification/doc/Surface_mesh_simplification/CGAL/Surface_mesh_simplification/Policies/Edge_collapse/Edge_profile.h index dc0bf118dd2..77fd121f6f7 100644 --- a/Surface_mesh_simplification/doc/Surface_mesh_simplification/CGAL/Surface_mesh_simplification/Policies/Edge_collapse/Edge_profile.h +++ b/Surface_mesh_simplification/doc/Surface_mesh_simplification/CGAL/Surface_mesh_simplification/Policies/Edge_collapse/Edge_profile.h @@ -3,7 +3,7 @@ namespace CGAL { namespace Surface_mesh_simplification { /*! -\ingroup PkgSurfaceMeshSimplification +\ingroup PkgSurfaceMeshSimplificationRef The class `Edge_profile` provides a model for the `EdgeProfile` concept. diff --git a/Surface_mesh_simplification/doc/Surface_mesh_simplification/CGAL/Surface_mesh_simplification/Policies/Edge_collapse/LindstromTurk_cost.h b/Surface_mesh_simplification/doc/Surface_mesh_simplification/CGAL/Surface_mesh_simplification/Policies/Edge_collapse/LindstromTurk_cost.h index c4a5e75a712..8a5a91dd3ac 100644 --- a/Surface_mesh_simplification/doc/Surface_mesh_simplification/CGAL/Surface_mesh_simplification/Policies/Edge_collapse/LindstromTurk_cost.h +++ b/Surface_mesh_simplification/doc/Surface_mesh_simplification/CGAL/Surface_mesh_simplification/Policies/Edge_collapse/LindstromTurk_cost.h @@ -2,7 +2,7 @@ namespace CGAL { namespace Surface_mesh_simplification { /*! -\ingroup PkgSurfaceMeshSimplification +\ingroup PkgSurfaceMeshSimplificationRef The class `LindstromTurk_cost` provides a model for the `GetCost` concept. It computes the collapse cost following the Lindstrom-Turk strategy diff --git a/Surface_mesh_simplification/doc/Surface_mesh_simplification/CGAL/Surface_mesh_simplification/Policies/Edge_collapse/LindstromTurk_placement.h b/Surface_mesh_simplification/doc/Surface_mesh_simplification/CGAL/Surface_mesh_simplification/Policies/Edge_collapse/LindstromTurk_placement.h index 431de0560dd..b182d0f246b 100644 --- a/Surface_mesh_simplification/doc/Surface_mesh_simplification/CGAL/Surface_mesh_simplification/Policies/Edge_collapse/LindstromTurk_placement.h +++ b/Surface_mesh_simplification/doc/Surface_mesh_simplification/CGAL/Surface_mesh_simplification/Policies/Edge_collapse/LindstromTurk_placement.h @@ -3,7 +3,7 @@ namespace CGAL { namespace Surface_mesh_simplification { /*! -\ingroup PkgSurfaceMeshSimplification +\ingroup PkgSurfaceMeshSimplificationRef The class `LindstromTurk_placement` provides a model for the `GetPlacement` concept. It computes the placement, that is, the new position for the remaining vertex after diff --git a/Surface_mesh_simplification/doc/Surface_mesh_simplification/CGAL/Surface_mesh_simplification/Policies/Edge_collapse/Midpoint_placement.h b/Surface_mesh_simplification/doc/Surface_mesh_simplification/CGAL/Surface_mesh_simplification/Policies/Edge_collapse/Midpoint_placement.h index 76f0e524b04..feef0b812da 100644 --- a/Surface_mesh_simplification/doc/Surface_mesh_simplification/CGAL/Surface_mesh_simplification/Policies/Edge_collapse/Midpoint_placement.h +++ b/Surface_mesh_simplification/doc/Surface_mesh_simplification/CGAL/Surface_mesh_simplification/Policies/Edge_collapse/Midpoint_placement.h @@ -3,7 +3,7 @@ namespace CGAL { namespace Surface_mesh_simplification { /*! -\ingroup PkgSurfaceMeshSimplification +\ingroup PkgSurfaceMeshSimplificationRef The class `Midpoint_placement` is a model for the `GetPlacement` concept which computes the placement as the midpoint position along the edge. diff --git a/Surface_mesh_simplification/doc/Surface_mesh_simplification/CGAL/Surface_mesh_simplification/edge_collapse.h b/Surface_mesh_simplification/doc/Surface_mesh_simplification/CGAL/Surface_mesh_simplification/edge_collapse.h index a6e25392da0..878278b4b69 100644 --- a/Surface_mesh_simplification/doc/Surface_mesh_simplification/CGAL/Surface_mesh_simplification/edge_collapse.h +++ b/Surface_mesh_simplification/doc/Surface_mesh_simplification/CGAL/Surface_mesh_simplification/edge_collapse.h @@ -2,7 +2,7 @@ namespace CGAL { namespace Surface_mesh_simplification { /*! -\ingroup PkgSurfaceMeshSimplification +\ingroup PkgSurfaceMeshSimplificationRef Simplifies `surface_mesh` in-place by collapsing edges, and returns the number of edges effectively removed. diff --git a/Surface_mesh_simplification/doc/Surface_mesh_simplification/NamedParameters.txt b/Surface_mesh_simplification/doc/Surface_mesh_simplification/NamedParameters.txt index 8ed97de9fab..fd764a017fa 100644 --- a/Surface_mesh_simplification/doc/Surface_mesh_simplification/NamedParameters.txt +++ b/Surface_mesh_simplification/doc/Surface_mesh_simplification/NamedParameters.txt @@ -1,6 +1,6 @@ /*! \defgroup sms_namedparameters Named Parameters for Surface Mesh Simplification -\ingroup PkgSurfaceMeshSimplification +\ingroup PkgSurfaceMeshSimplificationRef In this package, some optional parameters are implemented as BGL optional named parameters (see \ref BGLNamedParameters for more information on how to use them). diff --git a/Surface_mesh_simplification/doc/Surface_mesh_simplification/PackageDescription.txt b/Surface_mesh_simplification/doc/Surface_mesh_simplification/PackageDescription.txt index ca6427cd49c..a288593c70a 100644 --- a/Surface_mesh_simplification/doc/Surface_mesh_simplification/PackageDescription.txt +++ b/Surface_mesh_simplification/doc/Surface_mesh_simplification/PackageDescription.txt @@ -1,15 +1,15 @@ -/// \defgroup PkgSurfaceMeshSimplification Triangulated Surface Mesh Simplification Reference +/// \defgroup PkgSurfaceMeshSimplificationRef Triangulated Surface Mesh Simplification Reference /// \defgroup PkgSurfaceMeshSimplificationConcepts Concepts -/// \ingroup PkgSurfaceMeshSimplification +/// \ingroup PkgSurfaceMeshSimplificationRef /*! -\addtogroup PkgSurfaceMeshSimplification +\addtogroup PkgSurfaceMeshSimplificationRef \todo check generated documentation \cgalPkgDescriptionBegin{Triangulated Surface Mesh Simplification,PkgSurfaceMeshSimplificationSummary} \cgalPkgPicture{SMS-detail.png} \cgalPkgSummaryBegin \cgalPkgAuthor{Fernando Cacciola} \cgalPkgDesc{This package provides an algorithm to simplify a triangulated surface mesh by edge collapsing. It is an implementation of the Turk/Lindstrom memoryless surface mesh simplification algorithm.} -\cgalPkgManuals{Chapter_Triangulated_Surface_Mesh_Simplification,PkgSurfaceMeshSimplification} +\cgalPkgManuals{Chapter_Triangulated_Surface_Mesh_Simplification,PkgSurfaceMeshSimplificationRef} \cgalPkgSummaryEnd \cgalPkgShortInfoBegin \cgalPkgSince{3.3} diff --git a/Surface_mesh_skeletonization/doc/Surface_mesh_skeletonization/PackageDescription.txt b/Surface_mesh_skeletonization/doc/Surface_mesh_skeletonization/PackageDescription.txt index 2163696092f..e563a161fa4 100644 --- a/Surface_mesh_skeletonization/doc/Surface_mesh_skeletonization/PackageDescription.txt +++ b/Surface_mesh_skeletonization/doc/Surface_mesh_skeletonization/PackageDescription.txt @@ -1,9 +1,9 @@ -/// \defgroup PkgMeanCurvatureSkeleton3 Triangulated Surface Mesh Skeletonization Reference +/// \defgroup PkgMeanCurvatureSkeleton3Ref Triangulated Surface Mesh Skeletonization Reference /// \defgroup PkgMeanCurvatureSkeleton3Concepts Concepts -/// \ingroup PkgMeanCurvatureSkeleton3 +/// \ingroup PkgMeanCurvatureSkeleton3Ref /*! -\addtogroup PkgMeanCurvatureSkeleton3 +\addtogroup PkgMeanCurvatureSkeleton3Ref \cgalPkgDescriptionBegin{Triangulated Surface Mesh Skeletonization,PkgMeanCurvatureSkeleton3Summary} \cgalPkgPicture{mcfskel-small.png} \cgalPkgSummaryBegin @@ -14,7 +14,7 @@ The code is generic and works with any model of the `FaceListGraph` concept. } -\cgalPkgManuals{Chapter_3D_Surface_mesh_skeletonization,PkgMeanCurvatureSkeleton3} +\cgalPkgManuals{Chapter_3D_Surface_mesh_skeletonization,PkgMeanCurvatureSkeleton3Ref} \cgalPkgSummaryEnd \cgalPkgShortInfoBegin \cgalPkgSince{4.7} diff --git a/Surface_mesh_skeletonization/include/CGAL/Mean_curvature_flow_skeletonization.h b/Surface_mesh_skeletonization/include/CGAL/Mean_curvature_flow_skeletonization.h index 64fd82fb438..a9fec191c37 100644 --- a/Surface_mesh_skeletonization/include/CGAL/Mean_curvature_flow_skeletonization.h +++ b/Surface_mesh_skeletonization/include/CGAL/Mean_curvature_flow_skeletonization.h @@ -112,7 +112,7 @@ struct Skel_polyhedron_items_3: CGAL::Polyhedron_items_with_id_3 { } //end of namespace internal -/// \ingroup PkgMeanCurvatureSkeleton3 +/// \ingroup PkgMeanCurvatureSkeleton3Ref /// Function object that enables to extract the mean curvature /// flow skeleton of a triangulated surface mesh. /// diff --git a/Surface_mesh_skeletonization/include/CGAL/extract_mean_curvature_flow_skeleton.h b/Surface_mesh_skeletonization/include/CGAL/extract_mean_curvature_flow_skeleton.h index e49279a405d..67cba2652b5 100644 --- a/Surface_mesh_skeletonization/include/CGAL/extract_mean_curvature_flow_skeleton.h +++ b/Surface_mesh_skeletonization/include/CGAL/extract_mean_curvature_flow_skeleton.h @@ -35,7 +35,7 @@ namespace CGAL{ #if defined(DOXYGEN_RUNNING) || defined(CGAL_EIGEN3_ENABLED) -/// \ingroup PkgMeanCurvatureSkeleton3 +/// \ingroup PkgMeanCurvatureSkeleton3Ref /// @brief extracts a medially centered curve skeleton for the triangle mesh `tmesh`. /// This function uses the class CGAL::Mean_curvature_flow_skeletonization with the default parameters. /// This function is provided only if \ref thirdpartyEigen "Eigen" 3.2 (or greater) is available and `CGAL_EIGEN3_ENABLED` is defined. diff --git a/Surface_mesher/doc/Surface_mesher/PackageDescription.txt b/Surface_mesher/doc/Surface_mesher/PackageDescription.txt index df23e90f9b6..1327a4e8006 100644 --- a/Surface_mesher/doc/Surface_mesher/PackageDescription.txt +++ b/Surface_mesher/doc/Surface_mesher/PackageDescription.txt @@ -1,18 +1,18 @@ -/// \defgroup PkgSurfaceMesher3 3D Surface Mesh Generation Reference +/// \defgroup PkgSurfaceMesher3Ref 3D Surface Mesh Generation Reference /// \defgroup PkgSurfaceMesher3Concepts Concepts -/// \ingroup PkgSurfaceMesher3 +/// \ingroup PkgSurfaceMesher3Ref /// \defgroup PkgSurfaceMesher3Classes Mesh and Domain Classes -/// \ingroup PkgSurfaceMesher3 +/// \ingroup PkgSurfaceMesher3Ref /// \defgroup PkgSurfaceMesher3TagClasses Tag Classes -/// \ingroup PkgSurfaceMesher3 +/// \ingroup PkgSurfaceMesher3Ref /// \defgroup PkgSurfaceMesher3Functions Functions -/// \ingroup PkgSurfaceMesher3 +/// \ingroup PkgSurfaceMesher3Ref /// \defgroup PkgSurfaceMesher3FunctionsMakeMesh Mesh Generation @@ -24,14 +24,14 @@ /*! -\addtogroup PkgSurfaceMesher3 +\addtogroup PkgSurfaceMesher3Ref \todo check generated documentation \cgalPkgDescriptionBegin{3D Surface Mesh Generation,PkgSurfaceMesher3Summary} \cgalPkgPicture{segmented_head-small.png} \cgalPkgSummaryBegin \cgalPkgAuthors{Laurent Rineau and Mariette Yvinec} \cgalPkgDesc{This package provides functions to generate surface meshes that interpolate smooth surfaces. The meshing algorithm is based on Delaunay refinement and provides some guarantees on the resulting mesh: the user is able to control the size and shape of the mesh elements and the accuracy of the surface approximation. There is no restriction on the topology and number of components of input surfaces. The surface mesh generator may also be used for non smooth surfaces but without guarantee. Currently, implementations are provided for implicit surfaces described as the zero level set of some function and surfaces described as a gray level set in a three-dimensional image.} -\cgalPkgManuals{Chapter_3D_Surface_Mesh_Generation,PkgSurfaceMesher3} +\cgalPkgManuals{Chapter_3D_Surface_Mesh_Generation,PkgSurfaceMesher3Ref} \cgalPkgSummaryEnd \cgalPkgShortInfoBegin \cgalPkgSince{3.2} diff --git a/Surface_sweep_2/doc/Surface_sweep_2/CGAL/Surface_sweep_2_algorithms.h b/Surface_sweep_2/doc/Surface_sweep_2/CGAL/Surface_sweep_2_algorithms.h index 65d4383e56d..dfc692a631c 100644 --- a/Surface_sweep_2/doc/Surface_sweep_2/CGAL/Surface_sweep_2_algorithms.h +++ b/Surface_sweep_2/doc/Surface_sweep_2/CGAL/Surface_sweep_2_algorithms.h @@ -2,7 +2,7 @@ namespace CGAL { /*! -\ingroup PkgIntersectionOfCurves2 +\ingroup PkgIntersectionOfCurves2Ref Given a range of curves, compute all intersection points between two (or more) input curves. When the flag `report_endpoints` is `true`, @@ -20,7 +20,7 @@ OutputIterator compute_intersection_points (InputIterator curves_begin, bool report_endpoints = false); /*! -\ingroup PkgIntersectionOfCurves2 +\ingroup PkgIntersectionOfCurves2Ref Given a range of curves, compute all intersection points between two (or more) input curves. When the flag `report_endpoints` is `true`, @@ -40,7 +40,7 @@ OutputIterator compute_intersection_points (InputIterator curves_begin, Traits traits); /*! -\ingroup PkgIntersectionOfCurves2 +\ingroup PkgIntersectionOfCurves2Ref Given a range of curves, compute all \f$ x\f$-monotone subcurves that are pairwise disjoint in their interior, as induced by the input curves. @@ -57,7 +57,7 @@ OutputIterator compute_subcurves (InputIterator curves_begin, bool multiple_overlaps = false); /*! -\ingroup PkgIntersectionOfCurves2 +\ingroup PkgIntersectionOfCurves2Ref Given a range of curves, compute all \f$ x\f$-monotone subcurves that are pairwise disjoint in their interior, as induced by the input curves. @@ -76,7 +76,7 @@ OutputIterator compute_subcurves (InputIterator curves_begin, Traits traits = Default_traits()); /*! -\ingroup PkgIntersectionOfCurves2 +\ingroup PkgIntersectionOfCurves2Ref Given a range of curves, check whether there is at least one pair of curves that intersect in their interior. The function returns `true` if such @@ -88,7 +88,7 @@ bool do_curves_intersect (InputIterator curves_begin, InputIterator curves_end); /*! -\ingroup PkgIntersectionOfCurves2 +\ingroup PkgIntersectionOfCurves2Ref Given a range of curves, check whether there is at least one pair of curves that intersect in their interior. The function returns `true` if such diff --git a/Surface_sweep_2/doc/Surface_sweep_2/PackageDescription.txt b/Surface_sweep_2/doc/Surface_sweep_2/PackageDescription.txt index 131f7fa07c1..028e5e2d45d 100644 --- a/Surface_sweep_2/doc/Surface_sweep_2/PackageDescription.txt +++ b/Surface_sweep_2/doc/Surface_sweep_2/PackageDescription.txt @@ -1,13 +1,13 @@ -/// \defgroup PkgIntersectionOfCurves2 2D Intersection of Curves Reference +/// \defgroup PkgIntersectionOfCurves2Ref 2D Intersection of Curves Reference /*! -\addtogroup PkgIntersectionOfCurves2 +\addtogroup PkgIntersectionOfCurves2Ref \todo check generated documentation \cgalPkgDescriptionBegin{2D Intersection of Curves,PkgIntersectionOfCurves2Summary} \cgalPkgPicture{Curve_intersections_2.png} \cgalPkgSummaryBegin \cgalPkgAuthors{Baruch Zukerman, Ron Wein, and Efi Fogel} \cgalPkgDesc{This package provides three free functions implemented based on the sweep-line paradigm: given a collection of input curves, compute all intersection points, compute the set of subcurves that are pairwise interior-disjoint induced by them, and check whether there is at least one pair of curves among them that intersect in their interior.} -\cgalPkgManuals{Chapter_2D_Intersection_of_Curves,PkgIntersectionOfCurves2} +\cgalPkgManuals{Chapter_2D_Intersection_of_Curves,PkgIntersectionOfCurves2Ref} \cgalPkgSummaryEnd \cgalPkgShortInfoBegin \cgalPkgSince{2.4} diff --git a/TDS_2/doc/TDS_2/CGAL/Triangulation_data_structure_2.h b/TDS_2/doc/TDS_2/CGAL/Triangulation_data_structure_2.h index 47455af8bba..4409f5f7243 100644 --- a/TDS_2/doc/TDS_2/CGAL/Triangulation_data_structure_2.h +++ b/TDS_2/doc/TDS_2/CGAL/Triangulation_data_structure_2.h @@ -2,7 +2,7 @@ namespace CGAL { /*! -\ingroup PkgTDS2 +\ingroup PkgTDS2Ref The class `Triangulation_data_structure_2` is a model for the `TriangulationDataStructure_2` concept. diff --git a/TDS_2/doc/TDS_2/CGAL/Triangulation_ds_face_base_2.h b/TDS_2/doc/TDS_2/CGAL/Triangulation_ds_face_base_2.h index fe921c4f1c0..f9b9784fde9 100644 --- a/TDS_2/doc/TDS_2/CGAL/Triangulation_ds_face_base_2.h +++ b/TDS_2/doc/TDS_2/CGAL/Triangulation_ds_face_base_2.h @@ -2,7 +2,7 @@ namespace CGAL { /*! -\ingroup PkgTDS2 +\ingroup PkgTDS2Ref The class `Triangulation_ds_face_base_2` is a model for the concept `TriangulationDSFaceBase_2` to be used by diff --git a/TDS_2/doc/TDS_2/CGAL/Triangulation_ds_vertex_base_2.h b/TDS_2/doc/TDS_2/CGAL/Triangulation_ds_vertex_base_2.h index 80d0064167e..822a61e891d 100644 --- a/TDS_2/doc/TDS_2/CGAL/Triangulation_ds_vertex_base_2.h +++ b/TDS_2/doc/TDS_2/CGAL/Triangulation_ds_vertex_base_2.h @@ -2,7 +2,7 @@ namespace CGAL { /*! -\ingroup PkgTDS2 +\ingroup PkgTDS2Ref The class `Triangulation_ds_vertex_base_2` can be used as the base vertex for a `Triangulation_data_structure_2`, it is a model of the concept diff --git a/TDS_2/doc/TDS_2/PackageDescription.txt b/TDS_2/doc/TDS_2/PackageDescription.txt index 35ca4dbe5e7..b923cf39729 100644 --- a/TDS_2/doc/TDS_2/PackageDescription.txt +++ b/TDS_2/doc/TDS_2/PackageDescription.txt @@ -1,15 +1,15 @@ -/// \defgroup PkgTDS2 2D Triangulation Data Structure Reference +/// \defgroup PkgTDS2Ref 2D Triangulation Data Structure Reference /// \defgroup PkgTDS2Concepts Concepts -/// \ingroup PkgTDS2 +/// \ingroup PkgTDS2Ref /*! -\addtogroup PkgTDS2 +\addtogroup PkgTDS2Ref \todo check generated documentation \cgalPkgDescriptionBegin{2D Triangulation Data Structure,PkgTDS2Summary} \cgalPkgPicture{tds_small.png} \cgalPkgSummaryBegin \cgalPkgAuthors{Sylvain Pion and Mariette Yvinec} \cgalPkgDesc{This package provides a data structure to store a two-dimensional triangulation that has the topology of a two-dimensional sphere. The package acts as a container for the vertices and faces of the triangulation and provides basic combinatorial operation on the triangulation. } -\cgalPkgManuals{Chapter_2D_Triangulation_Data_Structure,PkgTDS2} +\cgalPkgManuals{Chapter_2D_Triangulation_Data_Structure,PkgTDS2Ref} \cgalPkgSummaryEnd \cgalPkgShortInfoBegin \cgalPkgSince{2.2} diff --git a/TDS_3/doc/TDS_3/PackageDescription.txt b/TDS_3/doc/TDS_3/PackageDescription.txt index 9167af3f17a..e89ca7540e4 100644 --- a/TDS_3/doc/TDS_3/PackageDescription.txt +++ b/TDS_3/doc/TDS_3/PackageDescription.txt @@ -1,20 +1,20 @@ -/// \defgroup PkgTDS3 3D Triangulation Data Structure Reference +/// \defgroup PkgTDS3Ref 3D Triangulation Data Structure Reference /// \defgroup PkgTDS3Concepts Concepts -/// \ingroup PkgTDS3 +/// \ingroup PkgTDS3Ref /// \defgroup PkgTDS3Classes Classes -/// \ingroup PkgTDS3 +/// \ingroup PkgTDS3Ref /*! -\addtogroup PkgTDS3 +\addtogroup PkgTDS3Ref \todo check generated documentation \cgalPkgDescriptionBegin{3D Triangulation Data Structure,PkgTDS3Summary} \cgalPkgPicture{tds3_small.png} \cgalPkgSummaryBegin \cgalPkgAuthors{Clément Jamin, Sylvain Pion and Monique Teillaud} \cgalPkgDesc{This package provides a data structure to store a three-dimensional triangulation that has the topology of a three-dimensional sphere. The package acts as a container for the vertices and cells of the triangulation and provides basic combinatorial operations on the triangulation.} -\cgalPkgManuals{Chapter_3D_Triangulation_Data_Structure,PkgTDS3} +\cgalPkgManuals{Chapter_3D_Triangulation_Data_Structure,PkgTDS3Ref} \cgalPkgSummaryEnd \cgalPkgShortInfoBegin \cgalPkgSince{2.1} diff --git a/Three/doc/Three/PackageDescription.txt b/Three/doc/Three/PackageDescription.txt index 3347d8e1677..ee880d67e50 100644 --- a/Three/doc/Three/PackageDescription.txt +++ b/Three/doc/Three/PackageDescription.txt @@ -1,14 +1,14 @@ -/// \defgroup PkgThree Three +/// \defgroup PkgThreeRef Three /// /*! -\addtogroup PkgThree +\addtogroup PkgThreeRef \cgalPkgDescriptionBegin{Three,PkgThreeSummary} \cgalPkgPicture{pkg-small.png} \cgalPkgSummaryBegin \cgalPkgAuthors{Laurent Rineau, Sebastien Loriot, Andreas Fabri, Maxime Gimeno} \cgalPkgDesc{This package provides base classes for building a plugin. } -\cgalPkgManuals{Chapter_Three,PkgThree} +\cgalPkgManuals{Chapter_Three,PkgThreeRef} \cgalPkgSummaryEnd \cgalPkgShortInfoBegin \cgalPkgSince{4.8} diff --git a/Three/include/CGAL/Three/Scene_interface.h b/Three/include/CGAL/Three/Scene_interface.h index 065d30e7c0f..b6e39f9feb6 100644 --- a/Three/include/CGAL/Three/Scene_interface.h +++ b/Three/include/CGAL/Three/Scene_interface.h @@ -26,7 +26,7 @@ #define SCENE_INTERFACE_H #include /*! -* \ingroup PkgThree +* \ingroup PkgThreeRef * The RenderingMode determines which of an item's primitives must be drawn. * It can be Points, PointsPlusNormals, Wireframe, Flat, FlatPlusEdges, or Gouraud. * - Points, PointsPlusNormals, and Wireframe have no light model. diff --git a/Triangulation/doc/Triangulation/PackageDescription.txt b/Triangulation/doc/Triangulation/PackageDescription.txt index b3bf73dd86f..a74336a10f8 100644 --- a/Triangulation/doc/Triangulation/PackageDescription.txt +++ b/Triangulation/doc/Triangulation/PackageDescription.txt @@ -1,18 +1,18 @@ -/// \defgroup PkgTriangulations dD Triangulations +/// \defgroup PkgTriangulationsRef dD Triangulations /// \defgroup PkgTriangulationsConcepts Concepts -/// \ingroup PkgTriangulations +/// \ingroup PkgTriangulationsRef /// \defgroup PkgTriangulationsTriangulationClasses Triangulation Classes -/// \ingroup PkgTriangulations +/// \ingroup PkgTriangulationsRef /// \defgroup PkgTriangulationsTraitsClasses Traits Classes -/// \ingroup PkgTriangulations +/// \ingroup PkgTriangulationsRef /// \defgroup PkgTriangulationsVertexCellClasses Vertex, Face and Cell Classes -/// \ingroup PkgTriangulations +/// \ingroup PkgTriangulationsRef /*! -\addtogroup PkgTriangulations +\addtogroup PkgTriangulationsRef \cgalPkgDescriptionBegin{dD Triangulations,PkgTriangulationsSummary} \cgalPkgPicture{Hypertriangle.png} \cgalPkgSummaryBegin @@ -23,7 +23,7 @@ can be specified at compile-time or at run-time. Specifically, it provides a data structure to store the triangulations, and two classes to handle triangulations and Delaunay triangulations of point sets. Point location and point insertion are supported. The Delaunay triangulation also supports point removal.} -\cgalPkgManuals{Chapter_Triangulations,PkgTriangulations} +\cgalPkgManuals{Chapter_Triangulations,PkgTriangulationsRef} \cgalPkgSummaryEnd \cgalPkgShortInfoBegin \cgalPkgSince{4.6} diff --git a/Triangulation_2/doc/Triangulation_2/PackageDescription.txt b/Triangulation_2/doc/Triangulation_2/PackageDescription.txt index 0984fbd61b3..15544296896 100644 --- a/Triangulation_2/doc/Triangulation_2/PackageDescription.txt +++ b/Triangulation_2/doc/Triangulation_2/PackageDescription.txt @@ -1,20 +1,20 @@ -/// \defgroup PkgTriangulation2 2D Triangulation Reference +/// \defgroup PkgTriangulation2Ref 2D Triangulation Reference /// \defgroup PkgTriangulation2Concepts Concepts -/// \ingroup PkgTriangulation2 +/// \ingroup PkgTriangulation2Ref /// \defgroup PkgTriangulation2TriangulationClasses Triangulation Classes -/// \ingroup PkgTriangulation2 +/// \ingroup PkgTriangulation2Ref /// \defgroup PkgTriangulation2TraitsClasses Traits Classes -/// \ingroup PkgTriangulation2 +/// \ingroup PkgTriangulation2Ref /// \defgroup PkgTriangulation2VertexFaceClasses Vertex and Face Classes -/// \ingroup PkgTriangulation2 +/// \ingroup PkgTriangulation2Ref /// \defgroup PkgTriangulation2Miscellaneous Miscellaneous -/// \ingroup PkgTriangulation2 +/// \ingroup PkgTriangulation2Ref /*! Draw. \code @@ -22,17 +22,17 @@ \endcode */ /// \defgroup PkgDrawTriangulation2 Draw a Triangulation 2 -/// \ingroup PkgTriangulation2 +/// \ingroup PkgTriangulation2Ref /*! -\addtogroup PkgTriangulation2 +\addtogroup PkgTriangulation2Ref \todo check generated documentation \cgalPkgDescriptionBegin{2D Triangulation,PkgTriangulation2Summary} \cgalPkgPicture{cdt2d-small.png} \cgalPkgSummaryBegin \cgalPkgAuthor{Mariette Yvinec} \cgalPkgDesc{This package allows to build and handle various triangulations for point sets two dimensions. Any \cgal triangulation covers the convex hull of its vertices. Triangulations are built incrementally and can be modified by insertion or removal of vertices. They offer point location facilities. The package provides plain triangulation (whose faces depend on the insertion order of the vertices) and Delaunay triangulations. Regular triangulations are also provided for sets of weighted points. Delaunay and regular triangulations offer nearest neighbor queries and primitives to build the dual Voronoi and power diagrams. Finally, constrained and Delaunay constrained triangulations allows to force some constrained segments to appear as edges of the triangulation. Several versions of constrained and Delaunay constrained triangulations are provided: some of them handle intersections between input constraints segment while others do not. } -\cgalPkgManuals{Chapter_2D_Triangulations,PkgTriangulation2} +\cgalPkgManuals{Chapter_2D_Triangulations,PkgTriangulation2Ref} \cgalPkgSummaryEnd \cgalPkgShortInfoBegin \cgalPkgSince{0.9} @@ -66,7 +66,7 @@ of triangulation data structure acting as a container for faces and vertices while taking care of the combinatorial aspects of the triangulation. The concepts and models relative to the triangulation data structure -are described in Chapter \ref PkgTDS2 "2D Triangulation Data Structure". +are described in Chapter \ref PkgTDS2Ref "2D Triangulation Data Structure". \cgalClassifedRefPages diff --git a/Triangulation_3/doc/Triangulation_3/CGAL/link_to_face_graph.h b/Triangulation_3/doc/Triangulation_3/CGAL/link_to_face_graph.h index 4a61bbdf8ae..600ec0441e8 100644 --- a/Triangulation_3/doc/Triangulation_3/CGAL/link_to_face_graph.h +++ b/Triangulation_3/doc/Triangulation_3/CGAL/link_to_face_graph.h @@ -1,7 +1,7 @@ namespace CGAL { /*! -\ingroup PkgTriangulation3 +\ingroup PkgTriangulation3Ref fills the face graph `tm` with the link of triangulation vertex `vh`. diff --git a/Triangulation_3/doc/Triangulation_3/PackageDescription.txt b/Triangulation_3/doc/Triangulation_3/PackageDescription.txt index d24aa743c3b..a3df66f26fa 100644 --- a/Triangulation_3/doc/Triangulation_3/PackageDescription.txt +++ b/Triangulation_3/doc/Triangulation_3/PackageDescription.txt @@ -1,17 +1,17 @@ -/// \defgroup PkgTriangulation3 3D Triangulations Reference +/// \defgroup PkgTriangulation3Ref 3D Triangulations Reference /// \defgroup PkgTriangulation3Concepts Concepts -/// \ingroup PkgTriangulation3 +/// \ingroup PkgTriangulation3Ref /// \defgroup PkgTriangulation3TriangulationClasses Triangulation Classes -/// \ingroup PkgTriangulation3 +/// \ingroup PkgTriangulation3Ref /// \defgroup PkgTriangulation3TraitsClasses Traits Classes -/// \ingroup PkgTriangulation3 +/// \ingroup PkgTriangulation3Ref /// \defgroup PkgTriangulation3VertexCellClasses Vertex and Cell Classes -/// \ingroup PkgTriangulation3 +/// \ingroup PkgTriangulation3Ref /*! Draw. \code @@ -19,16 +19,16 @@ \endcode */ /// \defgroup PkgDrawTriangulation3 Draw a Triangulation 3 -/// \ingroup PkgTriangulation3 +/// \ingroup PkgTriangulation3Ref /*! -\addtogroup PkgTriangulation3 +\addtogroup PkgTriangulation3Ref \cgalPkgDescriptionBegin{3D Triangulations,PkgTriangulation3Summary} \cgalPkgPicture{twotets.png} \cgalPkgSummaryBegin \cgalPkgAuthors{Clément Jamin, Sylvain Pion and Monique Teillaud} \cgalPkgDesc{This package allows to build and handle triangulations for point sets in three dimensions. Any \cgal triangulation covers the convex hull of its vertices. Triangulations are build incrementally and can be modified by insertion, displacements or removal of vertices. They offer point location facilities. The package provides plain triangulation (whose faces depends on the insertion order of the vertices) and Delaunay triangulations. Regular triangulations are also provided for sets of weighted points. Delaunay and regular triangulations offer nearest neighbor queries and primitives to build the dual Voronoi and power diagrams. Optionally, the main Delaunay and regular triangulation algorithms (insert, remove) support multi-core shared-memory architectures to take advantage of available parallelism.} -\cgalPkgManuals{Chapter_3D_Triangulations,PkgTriangulation3} +\cgalPkgManuals{Chapter_3D_Triangulations,PkgTriangulation3Ref} \cgalPkgSummaryEnd \cgalPkgShortInfoBegin \cgalPkgSince{2.1} diff --git a/Visibility_2/doc/Visibility_2/PackageDescription.txt b/Visibility_2/doc/Visibility_2/PackageDescription.txt index 3b3a2ad8672..4b822f96c03 100644 --- a/Visibility_2/doc/Visibility_2/PackageDescription.txt +++ b/Visibility_2/doc/Visibility_2/PackageDescription.txt @@ -1,20 +1,20 @@ -/// \defgroup PkgVisibility_2 Visibility_2 Reference +/// \defgroup PkgVisibility_2Ref Visibility_2 Reference /// \defgroup PkgVisibility_2Concepts Concepts -/// \ingroup PkgVisibility_2 +/// \ingroup PkgVisibility_2Ref /// \defgroup PkgVisibility_2Classes Classes -/// \ingroup PkgVisibility_2 +/// \ingroup PkgVisibility_2Ref /*! -\addtogroup PkgVisibility_2 +\addtogroup PkgVisibility_2Ref \cgalPkgDescriptionBegin{2D Visibility Computation,PkgVisibility_2Summary} \cgalPkgPicture{visibility-teaser-thumbnail.png} \cgalPkgSummaryBegin \cgalPkgAuthors{Michael Hemmer, Kan Huang, Francisc Bungiu, Ning Xu} \cgalPkgDesc{This package provides several variants to compute the visibility area of a point within polygonal regions in two dimensions.} -\cgalPkgManuals{Chapter_2D_Visibility_Computation,PkgVisibility_2} +\cgalPkgManuals{Chapter_2D_Visibility_Computation,PkgVisibility_2Ref} \cgalPkgSummaryEnd \cgalPkgShortInfoBegin \cgalPkgSince{4.7} diff --git a/Voronoi_diagram_2/doc/Voronoi_diagram_2/CGAL/Identity_policy_2.h b/Voronoi_diagram_2/doc/Voronoi_diagram_2/CGAL/Identity_policy_2.h index 9360de7f479..fab2cd8ae00 100644 --- a/Voronoi_diagram_2/doc/Voronoi_diagram_2/CGAL/Identity_policy_2.h +++ b/Voronoi_diagram_2/doc/Voronoi_diagram_2/CGAL/Identity_policy_2.h @@ -2,7 +2,7 @@ namespace CGAL { /*! -\ingroup PkgVoronoiDiagramAdaptor2 +\ingroup PkgVoronoiDiagramAdaptor2Ref The class `Identity_policy_2` provides a model for the `AdaptationPolicy_2` concept. The first template parameter of the `Identity_policy_2` class must be a diff --git a/Voronoi_diagram_2/doc/Voronoi_diagram_2/CGAL/Voronoi_diagram_2.h b/Voronoi_diagram_2/doc/Voronoi_diagram_2/CGAL/Voronoi_diagram_2.h index dd98107e487..cc36c9326a1 100644 --- a/Voronoi_diagram_2/doc/Voronoi_diagram_2/CGAL/Voronoi_diagram_2.h +++ b/Voronoi_diagram_2/doc/Voronoi_diagram_2/CGAL/Voronoi_diagram_2.h @@ -2,7 +2,7 @@ namespace CGAL { /*! -\ingroup PkgVoronoiDiagramAdaptor2 +\ingroup PkgVoronoiDiagramAdaptor2Ref The class `Voronoi_diagram_2` provides an adaptor that enables us to view a triangulated Delaunay graph as their dual subdivision, the @@ -34,7 +34,7 @@ public: /*! - \ingroup PkgVoronoiDiagramAdaptor2 + \ingroup PkgVoronoiDiagramAdaptor2Ref The class `Face` is the class provided by the `Voronoi_diagram_2` class for Voronoi faces. Below we @@ -162,7 +162,7 @@ public: /*! - \ingroup PkgVoronoiDiagramAdaptor2 + \ingroup PkgVoronoiDiagramAdaptor2Ref The class `Halfedge` is the class provided by the `Voronoi_diagram_2` class for Voronoi halfedges. @@ -403,7 +403,7 @@ public: /*! - \ingroup PkgVoronoiDiagramAdaptor2 + \ingroup PkgVoronoiDiagramAdaptor2Ref The class `Vertex` is the Voronoi vertex class provided by the class `Voronoi_diagram_2` class. Below we present its interface. diff --git a/Voronoi_diagram_2/doc/Voronoi_diagram_2/PackageDescription.txt b/Voronoi_diagram_2/doc/Voronoi_diagram_2/PackageDescription.txt index 6c2c370f9ad..a6f4523bccb 100644 --- a/Voronoi_diagram_2/doc/Voronoi_diagram_2/PackageDescription.txt +++ b/Voronoi_diagram_2/doc/Voronoi_diagram_2/PackageDescription.txt @@ -1,26 +1,26 @@ -/// \defgroup PkgVoronoiDiagramAdaptor2 2D Voronoi Diagram Adaptor Reference +/// \defgroup PkgVoronoiDiagramAdaptor2Ref 2D Voronoi Diagram Adaptor Reference /// \defgroup PkgVoronoiDiagramAdaptor2Concepts Concepts -/// \ingroup PkgVoronoiDiagramAdaptor2 +/// \ingroup PkgVoronoiDiagramAdaptor2Ref /// \defgroup PkgVoronoiDiagramAdaptor2Points Voronoi Diagram of Points -/// \ingroup PkgVoronoiDiagramAdaptor2 +/// \ingroup PkgVoronoiDiagramAdaptor2Ref /// \defgroup PkgVoronoiDiagramAdaptor2Segments Voronoi Diagram of Segments -/// \ingroup PkgVoronoiDiagramAdaptor2 +/// \ingroup PkgVoronoiDiagramAdaptor2Ref /// \defgroup PkgVoronoiDiagramAdaptor2Disks Voronoi Diagram of Disks -/// \ingroup PkgVoronoiDiagramAdaptor2 +/// \ingroup PkgVoronoiDiagramAdaptor2Ref /*! -\addtogroup PkgVoronoiDiagramAdaptor2 +\addtogroup PkgVoronoiDiagramAdaptor2Ref \todo check generated documentation \cgalPkgDescriptionBegin{2D Voronoi Diagram Adaptor,PkgVoronoiDiagramAdaptor2Summary} \cgalPkgPicture{voronoi.png} \cgalPkgSummaryBegin \cgalPkgAuthor{Menelaos Karavelas} \cgalPkgDesc{The 2D Voronoi diagram adaptor package provides an adaptor that adapts a 2-dimensional triangulated Delaunay graph to the corresponding Voronoi diagram, represented as a doubly connected edge list (DCEL) data structure. The adaptor has the ability to automatically eliminate, in a consistent manner, degenerate features of the Voronoi diagram, that are artifacts of the requirement that Delaunay graphs should be triangulated even in degenerate configurations. Depending on the type of operations that the underlying Delaunay graph supports, the adaptor allows for the incremental or dynamic construction of Voronoi diagrams and can support point location queries. } -\cgalPkgManuals{Chapter_2D_Voronoi_Diagram_Adaptor,PkgVoronoiDiagramAdaptor2} +\cgalPkgManuals{Chapter_2D_Voronoi_Diagram_Adaptor,PkgVoronoiDiagramAdaptor2Ref} \cgalPkgSummaryEnd \cgalPkgShortInfoBegin \cgalPkgSince{3.2} From ea240cfac5ddee2be4389de9193e213111f678a3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Loriot?= Date: Tue, 4 Sep 2018 11:20:02 +0200 Subject: [PATCH 095/268] use \PkgXXX instead of \PkgXXXSummary --- .../doc/AABB_tree/PackageDescription.txt | 2 +- .../PackageDescription.txt | 4 +-- .../PackageDescription.txt | 2 +- .../Algebraic_kernel_d/PackageDescription.txt | 2 +- .../doc/Alpha_shapes_2/PackageDescription.txt | 4 +-- .../doc/Alpha_shapes_3/PackageDescription.txt | 4 +-- .../Apollonius_graph_2/PackageDescription.txt | 4 +-- .../PackageDescription.txt | 2 +- BGL/doc/BGL/BGL.txt | 20 ++++++------- BGL/doc/BGL/PackageDescription.txt | 2 +- .../Barycentric_coordinates_2.txt | 8 +++--- .../PackageDescription.txt | 4 +-- .../Boolean_set_operations_2.txt | 2 +- .../PackageDescription.txt | 4 +-- .../Bounding_volumes/PackageDescription.txt | 2 +- .../Box_intersection_d/PackageDescription.txt | 2 +- .../doc/CGAL_ipelets/PackageDescription.txt | 2 +- .../Circular_kernel_2/PackageDescription.txt | 2 +- .../Circular_kernel_3/PackageDescription.txt | 2 +- .../doc/Circulator/PackageDescription.txt | 2 +- .../doc/Classification/PackageDescription.txt | 4 +-- .../Combinatorial_map/PackageDescription.txt | 2 +- .../Cone_spanners_2/PackageDescription.txt | 2 +- .../PackageDescription.txt | 2 +- .../doc/Convex_hull_2/PackageDescription.txt | 2 +- .../doc/Convex_hull_3/PackageDescription.txt | 4 +-- .../doc/Convex_hull_d/CGAL/Convex_hull_d.h | 2 +- .../CGAL/Convex_hull_d_to_polyhedron_3.h | 4 +-- .../CGAL/Convex_hull_d_traits_3.h | 2 +- .../doc/Convex_hull_d/CGAL/Delaunay_d.h | 2 +- .../Concepts/ConvexHullTraits_d.h | 2 +- .../Concepts/DelaunayLiftedTraits_d.h | 2 +- .../Convex_hull_d/Concepts/DelaunayTraits_d.h | 2 +- .../doc/Convex_hull_d/Convex_hull_d.txt | 2 +- .../doc/Convex_hull_d/PackageDescription.txt | 4 +-- .../Chapter_iterators_and_circulators.txt | 10 +++---- .../doc/Documentation/Installation.txt | 2 +- .../Tutorials/Tutorial_hello_world.txt | 2 +- .../doc/Envelope_2/PackageDescription.txt | 4 +-- .../doc/Envelope_3/PackageDescription.txt | 4 +-- .../Generalized_map/PackageDescription.txt | 2 +- .../doc/Generator/PackageDescription.txt | 2 +- Geomview/doc/Geomview/PackageDescription.txt | 2 +- .../doc/GraphicsView/PackageDescription.txt | 2 +- .../doc/HalfedgeDS/PackageDescription.txt | 2 +- .../Inscribed_areas/PackageDescription.txt | 2 +- .../doc/Interpolation/Interpolation.txt | 2 +- .../doc/Interpolation/PackageDescription.txt | 2 +- .../Interval_skip_list/PackageDescription.txt | 2 +- .../doc/Jet_fitting_3/PackageDescription.txt | 4 +-- .../doc/Kernel_23/PackageDescription.txt | 2 +- Kernel_d/doc/Kernel_d/PackageDescription.txt | 2 +- .../PackageDescription.txt | 6 ++-- .../doc/Matrix_search/PackageDescription.txt | 2 +- Mesh_2/doc/Mesh_2/PackageDescription.txt | 4 +-- Mesh_3/doc/Mesh_3/PackageDescription.txt | 4 +-- .../Minkowski_sum_2/PackageDescription.txt | 4 +-- .../Minkowski_sum_3/PackageDescription.txt | 4 +-- .../doc/Miscellany/PackageDescription.txt | 2 +- .../Modular_arithmetic/PackageDescription.txt | 2 +- Nef_2/doc/Nef_2/PackageDescription.txt | 2 +- Nef_3/doc/Nef_3/PackageDescription.txt | 4 +-- Nef_S2/doc/Nef_S2/PackageDescription.txt | 4 +-- .../doc/Number_types/PackageDescription.txt | 2 +- .../PackageDescription.txt | 4 +-- .../doc/Partition_2/PackageDescription.txt | 2 +- .../PackageDescription.txt | 4 +-- .../Periodic_3_mesh_3/PackageDescription.txt | 22 +++++++-------- .../Periodic_3_mesh_3/Periodic_3_mesh_3.txt | 28 +++++++++---------- .../PackageDescription.txt | 4 +-- .../doc/Point_set_2/PackageDescription.txt | 4 +-- .../doc/Point_set_3/PackageDescription.txt | 4 +-- .../PackageDescription.txt | 4 +-- .../Point_set_processing_3.txt | 4 +-- .../PackageDescription.txt | 2 +- .../PackageDescription.txt | 4 +-- Polygon/doc/Polygon/PackageDescription.txt | 2 +- .../NamedParameters.txt | 2 +- .../PackageDescription.txt | 4 +-- .../Polygon_mesh_processing.txt | 6 ++-- .../Polygon_mesh_processing/intersection.h | 26 ++++++++--------- .../self_intersections.h | 6 ++-- .../triangulate_faces.h | 6 ++-- .../include/CGAL/Polygon_mesh_slicer.h | 2 +- .../include/CGAL/Side_of_triangle_mesh.h | 2 +- .../doc/Polyhedron/PackageDescription.txt | 4 +-- .../PackageDescription.txt | 4 +-- .../Polyline_simplification_2.txt | 2 +- .../doc/Polynomial/PackageDescription.txt | 2 +- .../PackageDescription.txt | 2 +- .../PackageDescription.txt | 4 +-- .../doc/Property_map/PackageDescription.txt | 2 +- .../doc/QP_solver/PackageDescription.txt | 2 +- Ridges_3/doc/Ridges_3/PackageDescription.txt | 4 +-- Ridges_3/doc/Ridges_3/Ridges_3.txt | 4 +-- .../doc/STL_Extension/PackageDescription.txt | 2 +- .../PackageDescription.txt | 4 +-- .../SearchStructures/PackageDescription.txt | 2 +- .../PackageDescription.txt | 4 +-- .../PackageDescription.txt | 4 +-- .../Segment_Delaunay_graph_Linf_2.txt | 2 +- .../PackageDescription.txt | 4 +-- .../doc/Skin_surface_3/PackageDescription.txt | 4 +-- .../Snap_rounding_2/PackageDescription.txt | 4 +-- .../Solver_interface/PackageDescription.txt | 2 +- .../doc/Solver_interface/Solver_interface.txt | 2 +- .../Spatial_searching/PackageDescription.txt | 2 +- .../Spatial_sorting/PackageDescription.txt | 2 +- .../PackageDescription.txt | 4 +-- .../doc/Stream_lines_2/PackageDescription.txt | 4 +-- .../doc/Stream_support/PackageDescription.txt | 2 +- .../Subdivision_method_3/NamedParameters.txt | 2 +- .../PackageDescription.txt | 2 +- .../doc/Surface_mesh/PackageDescription.txt | 4 +-- .../doc/Surface_mesh/Surface_mesh.txt | 22 +++++++-------- .../include/CGAL/Surface_mesh/Surface_mesh.h | 2 +- .../PackageDescription.txt | 4 +-- .../PackageDescription.txt | 4 +-- .../Surface_mesh_parameterization.txt | 4 +-- .../PackageDescription.txt | 4 +-- .../Surface_Mesh_Segmentation.txt | 2 +- .../PackageDescription.txt | 2 +- .../NamedParameters.txt | 2 +- .../PackageDescription.txt | 2 +- .../PackageDescription.txt | 4 +-- .../Surface_mesh_skeletonization.txt | 2 +- .../doc/Surface_mesher/PackageDescription.txt | 4 +-- .../Surface_sweep_2/PackageDescription.txt | 4 +-- TDS_2/doc/TDS_2/PackageDescription.txt | 2 +- TDS_3/doc/TDS_3/PackageDescription.txt | 2 +- Three/doc/Three/PackageDescription.txt | 2 +- .../doc/Triangulation/PackageDescription.txt | 2 +- .../Triangulation_2/PackageDescription.txt | 4 +-- .../Triangulation_3/PackageDescription.txt | 4 +-- .../doc/Visibility_2/PackageDescription.txt | 6 ++-- .../doc/Visibility_2/visibility_2.txt | 6 ++-- .../Voronoi_diagram_2/PackageDescription.txt | 2 +- 137 files changed, 261 insertions(+), 261 deletions(-) diff --git a/AABB_tree/doc/AABB_tree/PackageDescription.txt b/AABB_tree/doc/AABB_tree/PackageDescription.txt index d629e984b36..a852060aa94 100644 --- a/AABB_tree/doc/AABB_tree/PackageDescription.txt +++ b/AABB_tree/doc/AABB_tree/PackageDescription.txt @@ -5,7 +5,7 @@ /*! \addtogroup PkgAABB_treeRef -\cgalPkgDescriptionBegin{3D Fast Intersection and Distance Computation,PkgAABB_treeSummary} +\cgalPkgDescriptionBegin{3D Fast Intersection and Distance Computation,PkgAABB_tree} \cgalPkgPicture{aabb-teaser-thumb.png} \cgalPkgSummaryBegin \cgalPkgAuthors{Pierre Alliez, Stéphane Tayeb, Camille Wormser} diff --git a/Advancing_front_surface_reconstruction/doc/Advancing_front_surface_reconstruction/PackageDescription.txt b/Advancing_front_surface_reconstruction/doc/Advancing_front_surface_reconstruction/PackageDescription.txt index 02dd623245b..d944d7fbbbf 100644 --- a/Advancing_front_surface_reconstruction/doc/Advancing_front_surface_reconstruction/PackageDescription.txt +++ b/Advancing_front_surface_reconstruction/doc/Advancing_front_surface_reconstruction/PackageDescription.txt @@ -3,7 +3,7 @@ /*! \addtogroup PkgAdvancingFrontSurfaceReconstructionRef -\cgalPkgDescriptionBegin{Advancing Front Surface Reconstruction,PkgAdvancingFrontSurfaceReconstructionSummary} +\cgalPkgDescriptionBegin{Advancing Front Surface Reconstruction,PkgAdvancingFrontSurfaceReconstruction} \cgalPkgPicture{afsr-detail.png} \cgalPkgSummaryBegin \cgalPkgAuthors{Tran Kai Frank Da, David Cohen-Steiner} @@ -16,7 +16,7 @@ of topological singularities. } \cgalPkgSummaryEnd \cgalPkgShortInfoBegin \cgalPkgSince{4.7} -\cgalPkgDependsOn{\ref PkgTriangulation3Summary} +\cgalPkgDependsOn{\ref PkgTriangulation3} \cgalPkgBib{cgal:dc-afsr} \cgalPkgLicense{\ref licensesGPL "GPL"} \cgalPkgShortInfoEnd diff --git a/Algebraic_foundations/doc/Algebraic_foundations/PackageDescription.txt b/Algebraic_foundations/doc/Algebraic_foundations/PackageDescription.txt index 90344ec0532..cbf66ce5727 100644 --- a/Algebraic_foundations/doc/Algebraic_foundations/PackageDescription.txt +++ b/Algebraic_foundations/doc/Algebraic_foundations/PackageDescription.txt @@ -7,7 +7,7 @@ \addtogroup PkgAlgebraicFoundationsRef \todo check generated documentation -\cgalPkgDescriptionBegin{Algebraic Foundations,PkgAlgebraicFoundationsSummary} +\cgalPkgDescriptionBegin{Algebraic Foundations,PkgAlgebraicFoundations} \cgalPkgPicture{Algebraic_foundations2.png} \cgalPkgSummaryBegin \cgalPkgAuthor{Michael Hemmer} diff --git a/Algebraic_kernel_d/doc/Algebraic_kernel_d/PackageDescription.txt b/Algebraic_kernel_d/doc/Algebraic_kernel_d/PackageDescription.txt index 026e6256c10..1dc80babab7 100644 --- a/Algebraic_kernel_d/doc/Algebraic_kernel_d/PackageDescription.txt +++ b/Algebraic_kernel_d/doc/Algebraic_kernel_d/PackageDescription.txt @@ -17,7 +17,7 @@ /*! \addtogroup PkgAlgebraicKerneldRef \todo check generated documentation -\cgalPkgDescriptionBegin{Algebraic Kernel,PkgAlgebraicKerneldSummary} +\cgalPkgDescriptionBegin{Algebraic Kernel,PkgAlgebraicKerneld} \cgalPkgPicture{Algebraic_kernel_d.png} \cgalPkgSummaryBegin \cgalPkgAuthors{Eric Berberich, Michael Hemmer, Michael Kerber, Sylvain Lazard, Luis Peñaranda, and Monique Teillaud} diff --git a/Alpha_shapes_2/doc/Alpha_shapes_2/PackageDescription.txt b/Alpha_shapes_2/doc/Alpha_shapes_2/PackageDescription.txt index 1d563f2db90..be25cc2a956 100644 --- a/Alpha_shapes_2/doc/Alpha_shapes_2/PackageDescription.txt +++ b/Alpha_shapes_2/doc/Alpha_shapes_2/PackageDescription.txt @@ -5,7 +5,7 @@ /*! \addtogroup PkgAlphaShape2Ref -\cgalPkgDescriptionBegin{2D Alpha Shapes,PkgAlphaShape2Summary} +\cgalPkgDescriptionBegin{2D Alpha Shapes,PkgAlphaShape2} \cgalPkgPicture{alpha-detail.png} \cgalPkgSummaryBegin \cgalPkgAuthors{Tran Kai Frank Da} @@ -14,7 +14,7 @@ \cgalPkgSummaryEnd \cgalPkgShortInfoBegin \cgalPkgSince{2.1} -\cgalPkgDependsOn{\ref PkgTriangulation2Summary} +\cgalPkgDependsOn{\ref PkgTriangulation2} \cgalPkgBib{cgal:d-as2} \cgalPkgLicense{\ref licensesGPL "GPL"} \cgalPkgDemo{2D Alpha Shapes,alpha_shapes_2.zip} diff --git a/Alpha_shapes_3/doc/Alpha_shapes_3/PackageDescription.txt b/Alpha_shapes_3/doc/Alpha_shapes_3/PackageDescription.txt index 7ddf096a7ad..cd6d40f3d30 100644 --- a/Alpha_shapes_3/doc/Alpha_shapes_3/PackageDescription.txt +++ b/Alpha_shapes_3/doc/Alpha_shapes_3/PackageDescription.txt @@ -3,7 +3,7 @@ /// \ingroup PkgAlphaShapes3Ref /*! \addtogroup PkgAlphaShapes3Ref -\cgalPkgDescriptionBegin{3D Alpha Shapes,PkgAlphaShapes3Summary} +\cgalPkgDescriptionBegin{3D Alpha Shapes,PkgAlphaShapes3} \cgalPkgPicture{alpha_shapes_3_small.png} \cgalPkgSummaryBegin \cgalPkgAuthors{Tran Kai Frank Da, Sébastien Loriot, and Mariette Yvinec} @@ -12,7 +12,7 @@ \cgalPkgSummaryEnd \cgalPkgShortInfoBegin \cgalPkgSince{2.3} -\cgalPkgDependsOn{\ref PkgTriangulation3Summary} +\cgalPkgDependsOn{\ref PkgTriangulation3} \cgalPkgBib{cgal:dy-as3} \cgalPkgLicense{\ref licensesGPL "GPL"} \cgalPkgDemo{3D Alpha Shapes,alpha_shape_3.zip} diff --git a/Apollonius_graph_2/doc/Apollonius_graph_2/PackageDescription.txt b/Apollonius_graph_2/doc/Apollonius_graph_2/PackageDescription.txt index caa9d9b5f44..c35cbc53915 100644 --- a/Apollonius_graph_2/doc/Apollonius_graph_2/PackageDescription.txt +++ b/Apollonius_graph_2/doc/Apollonius_graph_2/PackageDescription.txt @@ -4,7 +4,7 @@ /*! \addtogroup PkgApolloniusGraph2Ref \todo check generated documentation -\cgalPkgDescriptionBegin{2D Apollonius Graphs (Delaunay Graphs of Disks),PkgApolloniusGraph2Summary} +\cgalPkgDescriptionBegin{2D Apollonius Graphs (Delaunay Graphs of Disks),PkgApolloniusGraph2} \cgalPkgPicture{CircleVoronoi.png} \cgalPkgSummaryBegin \cgalPkgAuthors{Menelaos Karavelas and Mariette Yvinec} @@ -13,7 +13,7 @@ \cgalPkgSummaryEnd \cgalPkgShortInfoBegin \cgalPkgSince{3.0} -\cgalPkgDependsOn{\ref PkgTDS2Summary} +\cgalPkgDependsOn{\ref PkgTDS2} \cgalPkgBib{cgal:ky-ag2} \cgalPkgLicense{\ref licensesGPL "GPL"} \cgalPkgDemo{2D Apollonius Graph,apollonius_graph_2.zip} diff --git a/Arrangement_on_surface_2/doc/Arrangement_on_surface_2/PackageDescription.txt b/Arrangement_on_surface_2/doc/Arrangement_on_surface_2/PackageDescription.txt index 37a821ce963..9d205049da5 100644 --- a/Arrangement_on_surface_2/doc/Arrangement_on_surface_2/PackageDescription.txt +++ b/Arrangement_on_surface_2/doc/Arrangement_on_surface_2/PackageDescription.txt @@ -58,7 +58,7 @@ namespace ArrTraits {} /*! \addtogroup PkgArrangement2Ref \todo check generated documentation -\cgalPkgDescriptionBegin{2D Arrangements,PkgArrangement2Summary} +\cgalPkgDescriptionBegin{2D Arrangements,PkgArrangement2} \cgalPkgPicture{Arrangement_2.png} \cgalPkgSummaryBegin \cgalPkgAuthors{Ron Wein, Eric Berberich, Efi Fogel, Dan Halperin, Michael Hemmer, Oren Salzman, and Baruch Zukerman} diff --git a/BGL/doc/BGL/BGL.txt b/BGL/doc/BGL/BGL.txt index b5deb9702b6..81bab2cecd3 100644 --- a/BGL/doc/BGL/BGL.txt +++ b/BGL/doc/BGL/BGL.txt @@ -22,7 +22,7 @@ Furthermore, this package extends the \sc{Bgl} by introducing concepts such as `HalfedgeGraph` and `FaceGraph` allowing to handle *halfedges* and *faces*. These concepts reflect the design of the halfedge data structure described -in Chapter \ref PkgHDSSummary, with opposite halfedges and circular +in Chapter \ref PkgHDS, with opposite halfedges and circular sequences of halfedges around vertices and around faces. This chapter is organized as follows: @@ -31,10 +31,10 @@ This chapter is organized as follows: different libraries. - The four following sections give examples on how to use CGAL graph and mesh data structures such as -\link PkgSurfaceMeshSummary Surface_mesh \endlink, -\link PkgPolyhedronSummary Polyhedron \endlink, -\link PkgArrangement2Summary Arrangement_2 \endlink, and the -\link PkgTriangulation2Summary 2D triangulation \endlink classes as models of the \sc{Bgl} concepts. +\link PkgSurfaceMesh Surface_mesh \endlink, +\link PkgPolyhedron Polyhedron \endlink, +\link PkgArrangement2 Arrangement_2 \endlink, and the +\link PkgTriangulation2 2D triangulation \endlink classes as models of the \sc{Bgl} concepts. - Starting with Section \ref BGLExtensions, we introduce new graph concepts, classes, and functions that extend the functionalities of the \sc{Bgl}. @@ -127,7 +127,7 @@ The data itself may be stored in the vertex or the edge, or it may be stored in an external data structure, or it may be computed on the fly. This is an implementation detail of a particular property map. -See also Chapter \ref PkgProperty_mapSummary. +See also Chapter \ref PkgProperty_map. \subsection BGLVisitors Visitors @@ -218,7 +218,7 @@ the concepts provided by \cgal to implement a simple algorithm. The following example program computes the minimum spanning tree on a surface mesh. More examples can be found in Chapters -\ref PkgSurfaceMeshSimplificationSummary, \ref PkgSurfaceSegmentationSummary, and \ref PkgSurfaceMeshDeformationSummary. +\ref PkgSurfaceMeshSimplification, \ref PkgSurfaceSegmentation, and \ref PkgSurfaceMeshDeformation. The surface mesh class uses integer indices to address vertices and edges, and it comes with a built-in property mechanism that maps nicely on the \sc{Bgl}. @@ -237,7 +237,7 @@ the concepts provided by \cgal to implement a simple algorithm. The following example program computes the minimum spanning tree on a polyhedral surface. More examples can be found in the Chapter -\ref PkgSurfaceMeshSimplificationSummary. +\ref PkgSurfaceMeshSimplification. \cgalExample{BGL_polyhedron_3/kruskal.cpp} @@ -423,7 +423,7 @@ by the functionalities of the \sc{Bgl}. \subsection BGLExtensionsGraphConcepts Graph concepts -In order to match \ref PkgHDSSummary more closely and to enable writing generic algorithms +In order to match \ref PkgHDS more closely and to enable writing generic algorithms which operate on data structures that have faces and halfedges, we define a set of new concepts to extend the graph concepts of the BGL: @@ -636,7 +636,7 @@ Vertices of the seam mesh that are linked by a green dashed segment correspond to the same vertex in the underlying mesh. \cgalFigureEnd -Seam meshes are for example used in Chapter \ref PkgSurfaceParameterizationSummary +Seam meshes are for example used in Chapter \ref PkgSurfaceParameterization to parameterize a topological sphere by first virtually cutting it into a topological disk. diff --git a/BGL/doc/BGL/PackageDescription.txt b/BGL/doc/BGL/PackageDescription.txt index 557af29e8ab..225ab7b7e8a 100644 --- a/BGL/doc/BGL/PackageDescription.txt +++ b/BGL/doc/BGL/PackageDescription.txt @@ -542,7 +542,7 @@ Methods to read and write graphs. /*! \addtogroup PkgBGLRef -\cgalPkgDescriptionBegin{CGAL and the Boost Graph Library,PkgBGLSummary} +\cgalPkgDescriptionBegin{CGAL and the Boost Graph Library,PkgBGL} \cgalPkgPicture{emst-detail.png} \cgalPkgSummaryBegin \cgalPkgAuthors{Andreas Fabri, Fernando Cacciola, Philipp Moeller, and Ron Wein} diff --git a/Barycentric_coordinates_2/doc/Barycentric_coordinates_2/Barycentric_coordinates_2.txt b/Barycentric_coordinates_2/doc/Barycentric_coordinates_2/Barycentric_coordinates_2.txt index c022f02d017..1ab34f97b52 100644 --- a/Barycentric_coordinates_2/doc/Barycentric_coordinates_2/Barycentric_coordinates_2.txt +++ b/Barycentric_coordinates_2/doc/Barycentric_coordinates_2/Barycentric_coordinates_2.txt @@ -10,7 +10,7 @@ namespace CGAL { \section gbc_introduction Introduction -The package 2D Generalized Barycentric Coordinates offers an efficient and robust implementation of two-dimensional closed-form generalized barycentric coordinates defined for simple two-dimensional polygons. If coordinates with respect to multivariate scattered points instead of a polygon are required, please refer to natural neighbour coordinates from the package \ref PkgInterpolation2Summary "2D and Surface Function Interpolation". +The package 2D Generalized Barycentric Coordinates offers an efficient and robust implementation of two-dimensional closed-form generalized barycentric coordinates defined for simple two-dimensional polygons. If coordinates with respect to multivariate scattered points instead of a polygon are required, please refer to natural neighbour coordinates from the package \ref PkgInterpolation2 "2D and Surface Function Interpolation". In particular, the package includes an implementation of \ref wp_example "Wachspress", \ref mv_example "mean value", and \ref dh_example "discrete harmonic" coordinates and provides some extra functions to compute barycentric coordinates with respect to segments (\ref seg_example "segment coordinates") and triangles (\ref tri_example "triangle coordinates"). The section \ref gbc_theory gives a short introduction to the topic of barycentric coordinates. @@ -85,7 +85,7 @@ This is an advanced example that shows how to use generalized barycentric coordi A 2D polygon with 50 vertices representing a piece of terrain with convex and concave parts. The height is not shown. \cgalFigureEnd -In this example we project a three-dimensional polygon orthogonally onto the two-dimensional plane using the class `CGAL::Projection_traits_xy_3`, triangulate its interior using the class `CGAL::Delaunay_mesher_2`, and compute mean value coordinates for all the obtained points with respect to all the polygon's vertices. Finally, we interpolate the height data from the polygon's boundary to its interior using the computed coordinates and the global interpolation function from the package \ref PkgInterpolation2Summary "2D and Surface Function Interpolation". +In this example we project a three-dimensional polygon orthogonally onto the two-dimensional plane using the class `CGAL::Projection_traits_xy_3`, triangulate its interior using the class `CGAL::Delaunay_mesher_2`, and compute mean value coordinates for all the obtained points with respect to all the polygon's vertices. Finally, we interpolate the height data from the polygon's boundary to its interior using the computed coordinates and the global interpolation function from the package \ref PkgInterpolation2 "2D and Surface Function Interpolation". \cgalExample{Barycentric_coordinates_2/Terrain_height_modeling.cpp} @@ -256,7 +256,7 @@ Analogously to the previous cases, we want to plot the Wachspress coordinates an The Wachspress coordinate function with respect to the indicated vertex with values from zero to one as the colour bar indicates. \cgalFigureEnd -Another type of generalized barycentric coordinates goes back to Pinkall and Polthier in 1993 \cite cgal:pp-cdmsc-93 and Eck et al. in 1995 \cite cgal:bc:eddhls-maam-95 in the context of \ref PkgSurfaceParameterizationSummary "triangle mesh parameterization". They are called discrete harmonic coordinates. \ref gbc_deg_discrete_harmonic_coordinates "These coordinates" are well-defined, similarly to Wachspress coordinates, for arbitrary strictly convex polygons and inherit all the properties of triangle coordinates apart from the positivity inside a polygon because they can take on negative values \ref gbc_deg_discrete_harmonic_coordinates "for some polygons". Another interesting property of these coordinate functions is that they coincide with Wachspress coordinates for any polygon whose vertices lie on a common circle. +Another type of generalized barycentric coordinates goes back to Pinkall and Polthier in 1993 \cite cgal:pp-cdmsc-93 and Eck et al. in 1995 \cite cgal:bc:eddhls-maam-95 in the context of \ref PkgSurfaceParameterization "triangle mesh parameterization". They are called discrete harmonic coordinates. \ref gbc_deg_discrete_harmonic_coordinates "These coordinates" are well-defined, similarly to Wachspress coordinates, for arbitrary strictly convex polygons and inherit all the properties of triangle coordinates apart from the positivity inside a polygon because they can take on negative values \ref gbc_deg_discrete_harmonic_coordinates "for some polygons". Another interesting property of these coordinate functions is that they coincide with Wachspress coordinates for any polygon whose vertices lie on a common circle. To plot discrete harmonic coordinates we take \ref wp_plot "the same polygon" as for Wachspress coordinates and plot the coordinate function with respect to the same vertex. Again, we get a smooth function, which is linear along all edges and grows from zero to one. Isolines in the plot show the difference between discrete harmonic and Wachspress coordinates for the chosen polygon and vertex. @@ -265,7 +265,7 @@ To plot discrete harmonic coordinates we take \ref wp_plot "the same polygon" as The discrete harmonic coordinate function with respect to the indicated vertex with values from zero to one as the colour bar indicates. \cgalFigureEnd -The last type of generalized barycentric coordinates that we discuss are mean value coordinates \cite cgal:f-mvc-03 proposed by M. Floater in 2003. Based on the mean value theorem, \ref gbc_deg_mean_value_coordinates "these coordinates", unlike Wachspress and discrete harmonic coordinates, are well-defined for arbitrary simple polygons, inherit all the properties of triangle coordinates for any convex polygon, and lack only the positivity property for general concave polygons. Hormann and Floater prove in \cite cgal:bc:hf-mvcapp-06 that these coordinates are positive inside the kernel of a star-shaped polygon. They are also positive in the closure of any quadrilateral. Like discrete harmonic weights, mean value weights are often used in the context of \ref PkgSurfaceParameterizationSummary "triangle mesh parameterization." +The last type of generalized barycentric coordinates that we discuss are mean value coordinates \cite cgal:f-mvc-03 proposed by M. Floater in 2003. Based on the mean value theorem, \ref gbc_deg_mean_value_coordinates "these coordinates", unlike Wachspress and discrete harmonic coordinates, are well-defined for arbitrary simple polygons, inherit all the properties of triangle coordinates for any convex polygon, and lack only the positivity property for general concave polygons. Hormann and Floater prove in \cite cgal:bc:hf-mvcapp-06 that these coordinates are positive inside the kernel of a star-shaped polygon. They are also positive in the closure of any quadrilateral. Like discrete harmonic weights, mean value weights are often used in the context of \ref PkgSurfaceParameterization "triangle mesh parameterization." In order to show the particular behaviour of mean value coordinates with an application to concave polygons, we take \ref fig__mv__example "a star-shaped polygon" with ten vertices \f$[v_0, \dots, v_9]\f$, sample its interior and boundary, and plot the coordinate function with respect to the fourth vertex \f$v_3\f$. As the colour bar indicates, the obtained function grows from a slightly negative value to one at the chosen vertex. It is also smooth inside the polygon and linear along all edges. diff --git a/Barycentric_coordinates_2/doc/Barycentric_coordinates_2/PackageDescription.txt b/Barycentric_coordinates_2/doc/Barycentric_coordinates_2/PackageDescription.txt index 42039a5eb61..11d81b173f2 100644 --- a/Barycentric_coordinates_2/doc/Barycentric_coordinates_2/PackageDescription.txt +++ b/Barycentric_coordinates_2/doc/Barycentric_coordinates_2/PackageDescription.txt @@ -6,11 +6,11 @@ /*! \addtogroup PkgBarycentric_coordinates_2Ref -\cgalPkgDescriptionBegin{2D Generalized Barycentric Coordinates, PkgBarycentric_coordinates_2Summary} +\cgalPkgDescriptionBegin{2D Generalized Barycentric Coordinates, PkgBarycentric_coordinates_2} \cgalPkgPicture{barcoord_thumb.png} \cgalPkgSummaryBegin \cgalPkgAuthors{Dmitry Anisimov, David Bommes, Kai Hormann, and Pierre Alliez} -\cgalPkgDesc{The package 2D Generalized Barycentric Coordinates offers an efficient and robust implementation of two-dimensional closed-form generalized barycentric coordinates defined for simple two-dimensional polygons. If coordinates with respect to multivariate scattered points instead of a polygon are required, please refer to natural neighbor coordinates from the Package \ref PkgInterpolation2Summary.} +\cgalPkgDesc{The package 2D Generalized Barycentric Coordinates offers an efficient and robust implementation of two-dimensional closed-form generalized barycentric coordinates defined for simple two-dimensional polygons. If coordinates with respect to multivariate scattered points instead of a polygon are required, please refer to natural neighbor coordinates from the Package \ref PkgInterpolation2.} \cgalPkgManuals{Chapter_2D_Generalized_Barycentric_Coordinates, PkgBarycentric_coordinates_2Ref} \cgalPkgSummaryEnd \cgalPkgShortInfoBegin diff --git a/Boolean_set_operations_2/doc/Boolean_set_operations_2/Boolean_set_operations_2.txt b/Boolean_set_operations_2/doc/Boolean_set_operations_2/Boolean_set_operations_2.txt index fefab6d04e6..f62ef5d35b8 100644 --- a/Boolean_set_operations_2/doc/Boolean_set_operations_2/Boolean_set_operations_2.txt +++ b/Boolean_set_operations_2/doc/Boolean_set_operations_2/Boolean_set_operations_2.txt @@ -23,7 +23,7 @@ intersection predicates, and point containment predicates. Ordinary Boolean set-operations, which distinguish between the interior and the boundary of a polygon, are not implemented within this -package. The Chapter \ref PkgNef2Summary supports these operations for (linear) +package. The Chapter \ref PkgNef2 supports these operations for (linear) polygons. In the rest of this chapter we use, unless otherwise stated, the diff --git a/Boolean_set_operations_2/doc/Boolean_set_operations_2/PackageDescription.txt b/Boolean_set_operations_2/doc/Boolean_set_operations_2/PackageDescription.txt index dab4b1e3c38..5a96b0fb205 100644 --- a/Boolean_set_operations_2/doc/Boolean_set_operations_2/PackageDescription.txt +++ b/Boolean_set_operations_2/doc/Boolean_set_operations_2/PackageDescription.txt @@ -9,7 +9,7 @@ namespace ArrDirectionalTraits {} /*! \addtogroup PkgBooleanSetOperations2Ref \todo check generated documentation -\cgalPkgDescriptionBegin{2D Regularized Boolean Set-Operations,PkgBooleanSetOperations2Summary} +\cgalPkgDescriptionBegin{2D Regularized Boolean Set-Operations,PkgBooleanSetOperations2} \cgalPkgPicture{Boolean_set_operations_2.png} \cgalPkgSummaryBegin \cgalPkgAuthors{Efi Fogel, Ophir Setter, Ron Wein, Guy Zucker, Baruch Zukerman, and Dan Halperin} @@ -18,7 +18,7 @@ namespace ArrDirectionalTraits {} \cgalPkgSummaryEnd \cgalPkgShortInfoBegin \cgalPkgSince{3.2} -\cgalPkgDependsOn{\ref PkgArrangement2Summary} +\cgalPkgDependsOn{\ref PkgArrangement2} \cgalPkgBib{cgal:fwzh-rbso2} \cgalPkgLicense{\ref licensesGPL "GPL"} \cgalPkgDemo{Boolean operations,boolean_operations_2.zip} diff --git a/Bounding_volumes/doc/Bounding_volumes/PackageDescription.txt b/Bounding_volumes/doc/Bounding_volumes/PackageDescription.txt index 3dea01a9475..761addad579 100644 --- a/Bounding_volumes/doc/Bounding_volumes/PackageDescription.txt +++ b/Bounding_volumes/doc/Bounding_volumes/PackageDescription.txt @@ -4,7 +4,7 @@ /*! \addtogroup PkgBoundingVolumesRef \todo check generated documentation -\cgalPkgDescriptionBegin{Bounding Volumes,PkgBoundingVolumesSummary} +\cgalPkgDescriptionBegin{Bounding Volumes,PkgBoundingVolumes} \cgalPkgPicture{minCircle.png} \cgalPkgSummaryBegin \cgalPkgAuthors{Kaspar Fischer, Bernd Gärtner, Thomas Herrmann, Michael Hoffmann, and Sven Schönherr} diff --git a/Box_intersection_d/doc/Box_intersection_d/PackageDescription.txt b/Box_intersection_d/doc/Box_intersection_d/PackageDescription.txt index 86ffd51bf38..1478c8a0cf1 100644 --- a/Box_intersection_d/doc/Box_intersection_d/PackageDescription.txt +++ b/Box_intersection_d/doc/Box_intersection_d/PackageDescription.txt @@ -22,7 +22,7 @@ \todo de-math and change D to d for the dimension -\cgalPkgDescriptionBegin{Intersecting Sequences of dD Iso-oriented Boxes,PkgBoxIntersectionDSummary} +\cgalPkgDescriptionBegin{Intersecting Sequences of dD Iso-oriented Boxes,PkgBoxIntersectionD} \cgalPkgPicture{box_inters-small.png} \cgalPkgSummaryBegin \cgalPkgAuthors{Lutz Kettner, Andreas Meyer, and Afra Zomorodian} diff --git a/CGAL_ipelets/doc/CGAL_ipelets/PackageDescription.txt b/CGAL_ipelets/doc/CGAL_ipelets/PackageDescription.txt index fc2d23952be..61200e65b1f 100644 --- a/CGAL_ipelets/doc/CGAL_ipelets/PackageDescription.txt +++ b/CGAL_ipelets/doc/CGAL_ipelets/PackageDescription.txt @@ -1,7 +1,7 @@ /// \defgroup PkgCGALIpeletsRef CGAL Ipelets Reference /*! \addtogroup PkgCGALIpeletsRef -\cgalPkgDescriptionBegin{CGAL Ipelets,PkgCGALIpeletsSummary} +\cgalPkgDescriptionBegin{CGAL Ipelets,PkgCGALIpelets} \cgalPkgPicture{ipeico.jpg} \cgalPkgSummaryBegin \cgalPkgAuthors{Olivier Devillers, Sébastien Loriot, and Sylvain Pion} diff --git a/Circular_kernel_2/doc/Circular_kernel_2/PackageDescription.txt b/Circular_kernel_2/doc/Circular_kernel_2/PackageDescription.txt index e23a47c2269..e51308477a9 100644 --- a/Circular_kernel_2/doc/Circular_kernel_2/PackageDescription.txt +++ b/Circular_kernel_2/doc/Circular_kernel_2/PackageDescription.txt @@ -23,7 +23,7 @@ /*! \addtogroup PkgCircularKernel2Ref \todo check generated documentation -\cgalPkgDescriptionBegin{2D Circular Geometry Kernel,PkgCircularKernel2Summary} +\cgalPkgDescriptionBegin{2D Circular Geometry Kernel,PkgCircularKernel2} \cgalPkgPicture{Boolean_operation_detail.png} \cgalPkgSummaryBegin \cgalPkgAuthors{Pedro Machado Manhães de Castro, Sylvain Pion, and Monique Teillaud} diff --git a/Circular_kernel_3/doc/Circular_kernel_3/PackageDescription.txt b/Circular_kernel_3/doc/Circular_kernel_3/PackageDescription.txt index 41460181e1c..8f93076d077 100644 --- a/Circular_kernel_3/doc/Circular_kernel_3/PackageDescription.txt +++ b/Circular_kernel_3/doc/Circular_kernel_3/PackageDescription.txt @@ -20,7 +20,7 @@ /*! \addtogroup PkgSphericalKernel3Ref -\cgalPkgDescriptionBegin{3D Spherical Geometry Kernel,PkgSphericalKernel3Summary} +\cgalPkgDescriptionBegin{3D Spherical Geometry Kernel,PkgSphericalKernel3} \cgalPkgPicture{segment_sphere_intersection_detail.png} \cgalPkgSummaryBegin \cgalPkgAuthors{Pedro Machado Manhães de Castro, Frédéric Cazals, Sébastien Loriot, and Monique Teillaud} diff --git a/Circulator/doc/Circulator/PackageDescription.txt b/Circulator/doc/Circulator/PackageDescription.txt index 8e24e577d06..2b781abd240 100644 --- a/Circulator/doc/Circulator/PackageDescription.txt +++ b/Circulator/doc/Circulator/PackageDescription.txt @@ -22,7 +22,7 @@ /*! \addtogroup PkgHandlesAndCirculatorsRef -\cgalPkgDescriptionBegin{Handles and Circulators,PkgHandlesAndCirculatorsSummary} +\cgalPkgDescriptionBegin{Handles and Circulators,PkgHandlesAndCirculators} \cgalPkgPicture{circulator.png} \cgalPkgSummaryBegin \cgalPkgAuthors{Olivier Devillers, Lutz Kettner, Sylvain Pion, Michael Seel, and Mariette Yvinec} diff --git a/Classification/doc/Classification/PackageDescription.txt b/Classification/doc/Classification/PackageDescription.txt index 1c44376765e..96d3d221d3f 100644 --- a/Classification/doc/Classification/PackageDescription.txt +++ b/Classification/doc/Classification/PackageDescription.txt @@ -51,7 +51,7 @@ Data structures specialized to classify clusters. \addtogroup PkgClassificationRef -\cgalPkgDescriptionBegin{Classification, PkgClassificationSummary} +\cgalPkgDescriptionBegin{Classification, PkgClassification} \cgalPkgPicture{data_classif.png} \cgalPkgSummaryBegin @@ -62,7 +62,7 @@ Data structures specialized to classify clusters. \cgalPkgShortInfoBegin \cgalPkgSince{4.12} -\cgalPkgDependsOn{\ref PkgSolverSummary, \ref PkgSpatialSearchingDSummary, [Boost Serialization](http://www.boost.org/libs/serialization) and +\cgalPkgDependsOn{\ref PkgSolver, \ref PkgSpatialSearchingD, [Boost Serialization](http://www.boost.org/libs/serialization) and [Boost IO Streams](http://www.boost.org/libs/iostreams)} \cgalPkgBib{cgal:lm-clscm-12} \cgalPkgLicense{\ref licensesGPL "GPL"} diff --git a/Combinatorial_map/doc/Combinatorial_map/PackageDescription.txt b/Combinatorial_map/doc/Combinatorial_map/PackageDescription.txt index 4a80ea30312..f1c758d89df 100644 --- a/Combinatorial_map/doc/Combinatorial_map/PackageDescription.txt +++ b/Combinatorial_map/doc/Combinatorial_map/PackageDescription.txt @@ -25,7 +25,7 @@ /*! \addtogroup PkgCombinatorialMapsRef -\cgalPkgDescriptionBegin{Combinatorial Maps,PkgCombinatorialMapsSummary} +\cgalPkgDescriptionBegin{Combinatorial Maps,PkgCombinatorialMaps} \cgalPkgPicture{cmap_logo.png} \cgalPkgSummaryBegin \cgalPkgAuthor{Guillaume Damiand} diff --git a/Cone_spanners_2/doc/Cone_spanners_2/PackageDescription.txt b/Cone_spanners_2/doc/Cone_spanners_2/PackageDescription.txt index 6c2e45d11d1..92c0e8552fe 100644 --- a/Cone_spanners_2/doc/Cone_spanners_2/PackageDescription.txt +++ b/Cone_spanners_2/doc/Cone_spanners_2/PackageDescription.txt @@ -5,7 +5,7 @@ /*! \addtogroup PkgConeBasedSpannersRef -\cgalPkgDescriptionBegin{Cone-Based Spanners,PkgConeBasedSpannersSummary} +\cgalPkgDescriptionBegin{Cone-Based Spanners,PkgConeBasedSpanners} \cgalPkgPicture{Logo-ConeSpanners.png} \cgalPkgSummaryBegin diff --git a/Convex_decomposition_3/doc/Convex_decomposition_3/PackageDescription.txt b/Convex_decomposition_3/doc/Convex_decomposition_3/PackageDescription.txt index d2d4c0dbbbc..19c85a1d7f5 100644 --- a/Convex_decomposition_3/doc/Convex_decomposition_3/PackageDescription.txt +++ b/Convex_decomposition_3/doc/Convex_decomposition_3/PackageDescription.txt @@ -2,7 +2,7 @@ /*! \addtogroup PkgConvexDecomposition3Ref -\cgalPkgDescriptionBegin{Convex Decomposition of Polyhedra,PkgConvexDecomposition3Summary} +\cgalPkgDescriptionBegin{Convex Decomposition of Polyhedra,PkgConvexDecomposition3} \cgalPkgPicture{Convex_decomposition_3/fig/Convex_decomposition_3-teaser.png} \cgalPkgSummaryBegin \cgalPkgAuthor{Peter Hachenberger} diff --git a/Convex_hull_2/doc/Convex_hull_2/PackageDescription.txt b/Convex_hull_2/doc/Convex_hull_2/PackageDescription.txt index 1979658b512..8ccbfaa6dfa 100644 --- a/Convex_hull_2/doc/Convex_hull_2/PackageDescription.txt +++ b/Convex_hull_2/doc/Convex_hull_2/PackageDescription.txt @@ -21,7 +21,7 @@ /*! \addtogroup PkgConvexHull2Ref -\cgalPkgDescriptionBegin{2D Convex Hulls and Extreme Points,PkgConvexHull2Summary} +\cgalPkgDescriptionBegin{2D Convex Hulls and Extreme Points,PkgConvexHull2} \cgalPkgPicture{Convex_hull_2/fig/convex_hull.png} \cgalPkgSummaryBegin \cgalPkgAuthors{Susan Hert and Stefan Schirra} diff --git a/Convex_hull_3/doc/Convex_hull_3/PackageDescription.txt b/Convex_hull_3/doc/Convex_hull_3/PackageDescription.txt index 413d01009b7..1c808b0fdc0 100644 --- a/Convex_hull_3/doc/Convex_hull_3/PackageDescription.txt +++ b/Convex_hull_3/doc/Convex_hull_3/PackageDescription.txt @@ -23,7 +23,7 @@ degenerate hull may also be possible. \addtogroup PkgConvexHull3Ref \todo fix or keep the `Default_traits` -\cgalPkgDescriptionBegin{3D Convex Hulls,PkgConvexHull3Summary} +\cgalPkgDescriptionBegin{3D Convex Hulls,PkgConvexHull3} \cgalPkgPicture{Convex_hull_3/fig/bunny.png} \cgalPkgSummaryBegin \cgalPkgAuthors{Susan Hert and Stefan Schirra} @@ -32,7 +32,7 @@ degenerate hull may also be possible. \cgalPkgSummaryEnd \cgalPkgShortInfoBegin \cgalPkgSince{1.1} -\cgalPkgDependsOn{The dynamic algorithms depend on \ref PkgTriangulation3Summary "3D Triangulations".} +\cgalPkgDependsOn{The dynamic algorithms depend on \ref PkgTriangulation3 "3D Triangulations".} \cgalPkgBib{cgal:hs-ch3} \cgalPkgLicense{\ref licensesGPL "GPL"} \cgalPkgDemo{Polyhedron demo,polyhedron_3.zip} diff --git a/Convex_hull_d/doc/Convex_hull_d/CGAL/Convex_hull_d.h b/Convex_hull_d/doc/Convex_hull_d/CGAL/Convex_hull_d.h index abf6ea4b567..c14515a6e9a 100644 --- a/Convex_hull_d/doc/Convex_hull_d/CGAL/Convex_hull_d.h +++ b/Convex_hull_d/doc/Convex_hull_d/CGAL/Convex_hull_d.h @@ -3,7 +3,7 @@ namespace CGAL { /*! \ingroup PkgConvexHullDRef -\deprecated This package is deprecated since the version 4.6 of \cgal. The package \ref PkgTriangulationsSummary should be used instead. +\deprecated This package is deprecated since the version 4.6 of \cgal. The package \ref PkgTriangulations should be used instead. An instance `C` of type `Convex_hull_d` is the convex hull of a multi-set `S` of points in \f$ d\f$-dimensional space. We call diff --git a/Convex_hull_d/doc/Convex_hull_d/CGAL/Convex_hull_d_to_polyhedron_3.h b/Convex_hull_d/doc/Convex_hull_d/CGAL/Convex_hull_d_to_polyhedron_3.h index 13d0c98dfd9..9f7775b2157 100644 --- a/Convex_hull_d/doc/Convex_hull_d/CGAL/Convex_hull_d_to_polyhedron_3.h +++ b/Convex_hull_d/doc/Convex_hull_d/CGAL/Convex_hull_d_to_polyhedron_3.h @@ -1,7 +1,7 @@ namespace CGAL { /*! -\deprecated This package is deprecated since the version 4.6 of \cgal. The package \ref PkgTriangulationsSummary should be used instead. +\deprecated This package is deprecated since the version 4.6 of \cgal. The package \ref PkgTriangulations should be used instead. converts the convex hull `C` to polyhedral surface stored in `P`. @@ -13,7 +13,7 @@ template void convex_hull_d_to_polyhedron_3( const Convex_hull_d& C, Polyhedron_3& P) ; /*! -\deprecated This package is deprecated since the version 4.6 of \cgal. The package \ref PkgTriangulationsSummary should be used instead +\deprecated This package is deprecated since the version 4.6 of \cgal. The package \ref PkgTriangulations should be used instead constructs the representation of the surface of `C` as a bidirected LEDA graph `G`. diff --git a/Convex_hull_d/doc/Convex_hull_d/CGAL/Convex_hull_d_traits_3.h b/Convex_hull_d/doc/Convex_hull_d/CGAL/Convex_hull_d_traits_3.h index 5c533959ebc..694105e5729 100644 --- a/Convex_hull_d/doc/Convex_hull_d/CGAL/Convex_hull_d_traits_3.h +++ b/Convex_hull_d/doc/Convex_hull_d/CGAL/Convex_hull_d_traits_3.h @@ -3,7 +3,7 @@ namespace CGAL { /*! \ingroup PkgConvexHullDRef -\deprecated This package is deprecated since the version 4.6 of \cgal. The package \ref PkgTriangulationsSummary should be used instead. +\deprecated This package is deprecated since the version 4.6 of \cgal. The package \ref PkgTriangulations should be used instead. diff --git a/Convex_hull_d/doc/Convex_hull_d/CGAL/Delaunay_d.h b/Convex_hull_d/doc/Convex_hull_d/CGAL/Delaunay_d.h index 1d31f4bc46c..21e2d14953d 100644 --- a/Convex_hull_d/doc/Convex_hull_d/CGAL/Delaunay_d.h +++ b/Convex_hull_d/doc/Convex_hull_d/CGAL/Delaunay_d.h @@ -3,7 +3,7 @@ namespace CGAL { /*! \ingroup PkgConvexHullDRef -\deprecated This package is deprecated since the version 4.6 of \cgal. The package \ref PkgTriangulationsSummary should be used instead. +\deprecated This package is deprecated since the version 4.6 of \cgal. The package \ref PkgTriangulations should be used instead. An instance `DT` of type `Delaunay_d< R, Lifted_R >` is the nearest and furthest site Delaunay triangulation of a set `S` of diff --git a/Convex_hull_d/doc/Convex_hull_d/Concepts/ConvexHullTraits_d.h b/Convex_hull_d/doc/Convex_hull_d/Concepts/ConvexHullTraits_d.h index a5b30b4e9cb..3be7fa3ddbb 100644 --- a/Convex_hull_d/doc/Convex_hull_d/Concepts/ConvexHullTraits_d.h +++ b/Convex_hull_d/doc/Convex_hull_d/Concepts/ConvexHullTraits_d.h @@ -2,7 +2,7 @@ \ingroup PkgConvexHullDConcepts \cgalConcept -\deprecated This package is deprecated since the version 4.6 of \cgal. The package \ref PkgTriangulationsSummary should be used instead. +\deprecated This package is deprecated since the version 4.6 of \cgal. The package \ref PkgTriangulations should be used instead. Requirements of the traits class to be used with the class `CGAL::Convex_hull_d`. diff --git a/Convex_hull_d/doc/Convex_hull_d/Concepts/DelaunayLiftedTraits_d.h b/Convex_hull_d/doc/Convex_hull_d/Concepts/DelaunayLiftedTraits_d.h index d6211139b40..047dcdd09b1 100644 --- a/Convex_hull_d/doc/Convex_hull_d/Concepts/DelaunayLiftedTraits_d.h +++ b/Convex_hull_d/doc/Convex_hull_d/Concepts/DelaunayLiftedTraits_d.h @@ -2,7 +2,7 @@ \ingroup PkgConvexHullDConcepts \cgalConcept -\deprecated This package is deprecated since the version 4.6 of \cgal. The package \ref PkgTriangulationsSummary should be used instead. +\deprecated This package is deprecated since the version 4.6 of \cgal. The package \ref PkgTriangulations should be used instead. Requirements of the second traits class to be used with the class `CGAL::Delaunay_d`. diff --git a/Convex_hull_d/doc/Convex_hull_d/Concepts/DelaunayTraits_d.h b/Convex_hull_d/doc/Convex_hull_d/Concepts/DelaunayTraits_d.h index 868aa546169..3857c62ba55 100644 --- a/Convex_hull_d/doc/Convex_hull_d/Concepts/DelaunayTraits_d.h +++ b/Convex_hull_d/doc/Convex_hull_d/Concepts/DelaunayTraits_d.h @@ -2,7 +2,7 @@ \ingroup PkgConvexHullDConcepts \cgalConcept -\deprecated This package is deprecated since the version 4.6 of \cgal. The package \ref PkgTriangulationsSummary should be used instead. +\deprecated This package is deprecated since the version 4.6 of \cgal. The package \ref PkgTriangulations should be used instead. Requirements of the first traits class to be used with the class `CGAL::Delaunay_d`. diff --git a/Convex_hull_d/doc/Convex_hull_d/Convex_hull_d.txt b/Convex_hull_d/doc/Convex_hull_d/Convex_hull_d.txt index 1f31fff9b19..07f98db9fc6 100644 --- a/Convex_hull_d/doc/Convex_hull_d/Convex_hull_d.txt +++ b/Convex_hull_d/doc/Convex_hull_d/Convex_hull_d.txt @@ -7,7 +7,7 @@ namespace CGAL { \anchor chapconvexhulld \authors Susan Hert and Michael Seel -\deprecated This package is deprecated since the version 4.6 of \cgal. The package \ref PkgTriangulationsSummary should be used instead. +\deprecated This package is deprecated since the version 4.6 of \cgal. The package \ref PkgTriangulations should be used instead. \section Convex_hull_dIntroduction Introduction diff --git a/Convex_hull_d/doc/Convex_hull_d/PackageDescription.txt b/Convex_hull_d/doc/Convex_hull_d/PackageDescription.txt index a15a32b6ac6..86ce0ec9281 100644 --- a/Convex_hull_d/doc/Convex_hull_d/PackageDescription.txt +++ b/Convex_hull_d/doc/Convex_hull_d/PackageDescription.txt @@ -4,7 +4,7 @@ /*! \addtogroup PkgConvexHullDRef \todo check generated documentation -\cgalPkgDescriptionBegin{dD Convex Hulls and Delaunay Triangulations,PkgConvexHullDSummary} +\cgalPkgDescriptionBegin{dD Convex Hulls and Delaunay Triangulations,PkgConvexHullD} \cgalPkgPicture{convex_hull_d-teaser.png} \cgalPkgSummaryBegin \cgalPkgAuthors{Susan Hert and Michael Seel} @@ -18,7 +18,7 @@ \cgalPkgShortInfoEnd \cgalPkgDescriptionEnd -\deprecated This package is deprecated since the version 4.6 of \cgal. The package \ref PkgTriangulationsSummary should be used instead. +\deprecated This package is deprecated since the version 4.6 of \cgal. The package \ref PkgTriangulations should be used instead. A subset \f$ S \subseteq \mathbb{R}^d\f$ is convex if for any two points \f$ p\f$ and \f$ q\f$ in the set the line segment with endpoints \f$ p\f$ and \f$ q\f$ is contained diff --git a/Documentation/doc/Documentation/Developer_manual/Chapter_iterators_and_circulators.txt b/Documentation/doc/Documentation/Developer_manual/Chapter_iterators_and_circulators.txt index 900eda9aa58..d1407672ac5 100644 --- a/Documentation/doc/Documentation/Developer_manual/Chapter_iterators_and_circulators.txt +++ b/Documentation/doc/Documentation/Developer_manual/Chapter_iterators_and_circulators.txt @@ -19,15 +19,15 @@ Iterators are widely used in \cgal too. \cgal extends the idea of the iterator, which works for linear data structures, to circular data structures by defining the concept of a circulator. -\ref PkgHandlesAndCirculatorsSummary "Circulators" are quite similar to iterators, with the +\ref PkgHandlesAndCirculators "Circulators" are quite similar to iterators, with the major difference being the absence of a past-the-end position in a sequence. Note that circulators are NOT part of the \stl, but of \cgal. -In \cgal, we also define the concept of \ref PkgHandlesAndCirculatorsSummary "handle", +In \cgal, we also define the concept of \ref PkgHandlesAndCirculators "handle", which behaves roughly like a pointer to an object without an increment or decrement operation. More details about handles and their requirements can be found in -the \ref PkgHandlesAndCirculatorsSummary "chapter Circulators and Handles" +the \ref PkgHandlesAndCirculators "chapter Circulators and Handles" of the Support Library part of \cgal manual. Section \ref sechandle_vs_it_vs_circ below discusses when handles should be used in your code. @@ -35,7 +35,7 @@ should be used in your code. The concepts of iterators is relatively well described in textbooks such as Stroustrup's book (The C++ Programming Language \cgalCite{cgal:s-cpl-97}) and Austern's book (Generic Programming and the \stl \cgalCite{cgal:a-gps-98}) -and in chapter \ref PkgHandlesAndCirculatorsSummary "Handles and Circulators" +and in chapter \ref PkgHandlesAndCirculators "Handles and Circulators" of the Support Library part of the \cgal manual. which also presents the concepts of handles and circulators. Thus we will not give a full description of these concept here @@ -325,7 +325,7 @@ over either a linear or circular sequence: - `CGAL_For_all( ic1, ic2)` - `CGAL_For_all_backwards( ic1, ic2)`. -See the chapter \ref PkgHandlesAndCirculatorsSummary "Handles and Circulators" +See the chapter \ref PkgHandlesAndCirculators "Handles and Circulators" in the Support Library part of \cgal manual for more information and examples. diff --git a/Documentation/doc/Documentation/Installation.txt b/Documentation/doc/Documentation/Installation.txt index 86ec4c3933b..d36d66446ce 100644 --- a/Documentation/doc/Documentation/Installation.txt +++ b/Documentation/doc/Documentation/Installation.txt @@ -601,7 +601,7 @@ and designed to partition graphs and produce fill-reducing matrix orderings. \cgal offers wrappers around some of the methods of the \sc{METIS} library to allow the partitioning of graphs that are models of the concepts of the Boost Graph Library, -and, by extension, of surface meshes (see Section \ref BGLPartitioning of the package \ref PkgBGLSummary). +and, by extension, of surface meshes (see Section \ref BGLPartitioning of the package \ref PkgBGL). More information is available on the METIS library at `http://glaros.dtc.umn.edu/gkhome/metis/metis/overview`. diff --git a/Documentation/doc/Documentation/Tutorials/Tutorial_hello_world.txt b/Documentation/doc/Documentation/Tutorials/Tutorial_hello_world.txt index 99b6ca99c44..e90944007da 100644 --- a/Documentation/doc/Documentation/Tutorials/Tutorial_hello_world.txt +++ b/Documentation/doc/Documentation/Tutorials/Tutorial_hello_world.txt @@ -318,7 +318,7 @@ This function only compiles if the `operator<(..)` is defined for the type used and we say that the type must be a model of `LessThanComparable`. An example for a concept with required free functions is the `HalfedgeListGraph` in the -\cgal package \ref PkgBGLSummary. In order to be a model of `HalfedgeListGraph` a class `G` +\cgal package \ref PkgBGL. In order to be a model of `HalfedgeListGraph` a class `G` there must be a global function `halfedges(const G&)`, etc. An example for a concept with a required traits class is `InputIterator`. diff --git a/Envelope_2/doc/Envelope_2/PackageDescription.txt b/Envelope_2/doc/Envelope_2/PackageDescription.txt index d9129901f68..103674c459d 100644 --- a/Envelope_2/doc/Envelope_2/PackageDescription.txt +++ b/Envelope_2/doc/Envelope_2/PackageDescription.txt @@ -4,7 +4,7 @@ /*! \addtogroup PkgEnvelope2Ref \todo check generated documentation -\cgalPkgDescriptionBegin{2D Envelopes,PkgEnvelope2Summary} +\cgalPkgDescriptionBegin{2D Envelopes,PkgEnvelope2} \cgalPkgPicture{Envelope_2/fig/Envelope_2.png} \cgalPkgSummaryBegin \cgalPkgAuthor{Ron Wein} @@ -13,7 +13,7 @@ \cgalPkgSummaryEnd \cgalPkgShortInfoBegin \cgalPkgSince{3.3} -\cgalPkgDependsOn{\ref PkgArrangement2Summary} +\cgalPkgDependsOn{\ref PkgArrangement2} \cgalPkgBib{cgal:w-e2} \cgalPkgLicense{\ref licensesGPL "GPL"} \cgalPkgShortInfoEnd diff --git a/Envelope_3/doc/Envelope_3/PackageDescription.txt b/Envelope_3/doc/Envelope_3/PackageDescription.txt index 104370cc5fa..a9a1c17a861 100644 --- a/Envelope_3/doc/Envelope_3/PackageDescription.txt +++ b/Envelope_3/doc/Envelope_3/PackageDescription.txt @@ -4,7 +4,7 @@ /*! \addtogroup PkgEnvelope3Ref \todo check generated documentation -\cgalPkgDescriptionBegin{3D Envelopes,PkgEnvelope3Summary} +\cgalPkgDescriptionBegin{3D Envelopes,PkgEnvelope3} \cgalPkgPicture{Envelope_3/fig/Envelope_3.png} \cgalPkgSummaryBegin \cgalPkgAuthors{Dan Halperin, Michal Meyerovitch, Ron Wein, and Baruch Zukerman} @@ -13,7 +13,7 @@ \cgalPkgSummaryEnd \cgalPkgShortInfoBegin \cgalPkgSince{3.3} -\cgalPkgDependsOn{\ref PkgArrangement2Summary} +\cgalPkgDependsOn{\ref PkgArrangement2} \cgalPkgBib{cgal:mwz-e3} \cgalPkgLicense{\ref licensesGPL "GPL"} \cgalPkgDemo{3D Envelopes,envelope_3.zip,L1 Voronoi Diagram,l1_voronoi_diagram_2.zip} diff --git a/Generalized_map/doc/Generalized_map/PackageDescription.txt b/Generalized_map/doc/Generalized_map/PackageDescription.txt index 3193c61df9b..642f145a29a 100644 --- a/Generalized_map/doc/Generalized_map/PackageDescription.txt +++ b/Generalized_map/doc/Generalized_map/PackageDescription.txt @@ -8,7 +8,7 @@ /*! \addtogroup PkgGeneralizedMapsRef -\cgalPkgDescriptionBegin{Generalized Maps,PkgGeneralizedMapsSummary} +\cgalPkgDescriptionBegin{Generalized Maps,PkgGeneralizedMaps} \cgalPkgPicture{gmap_logo.png} \cgalPkgSummaryBegin \cgalPkgAuthor{Guillaume Damiand} diff --git a/Generator/doc/Generator/PackageDescription.txt b/Generator/doc/Generator/PackageDescription.txt index 22e04e8b38e..f9e3f2f935a 100644 --- a/Generator/doc/Generator/PackageDescription.txt +++ b/Generator/doc/Generator/PackageDescription.txt @@ -3,7 +3,7 @@ /// \ingroup PkgGeneratorsRef /*! \addtogroup PkgGeneratorsRef -\cgalPkgDescriptionBegin{Geometric Object Generators,PkgGeneratorsSummary} +\cgalPkgDescriptionBegin{Geometric Object Generators,PkgGenerators} \cgalPkgPicture{dice.png} \cgalPkgSummaryBegin \cgalPkgAuthors{Pedro M. M. de Castro, Olivier Devillers, Susan Hert, Michael Hoffmann, Lutz Kettner, Sven Schönherr, Alexandru Tifrea, and Maxime Gimeno} diff --git a/Geomview/doc/Geomview/PackageDescription.txt b/Geomview/doc/Geomview/PackageDescription.txt index fa1a6de594b..15e58d59d6f 100644 --- a/Geomview/doc/Geomview/PackageDescription.txt +++ b/Geomview/doc/Geomview/PackageDescription.txt @@ -2,7 +2,7 @@ /*! \addtogroup PkgGeomviewRef \todo check generated documentation -\cgalPkgDescriptionBegin{Geomview,PkgGeomviewSummary} +\cgalPkgDescriptionBegin{Geomview,PkgGeomview} \cgalPkgPicture{geomview.png} \cgalPkgSummaryBegin \cgalPkgAuthors{Andreas Fabri and Sylvain Pion} diff --git a/GraphicsView/doc/GraphicsView/PackageDescription.txt b/GraphicsView/doc/GraphicsView/PackageDescription.txt index 93e9c93f279..0e6d19ed6a8 100644 --- a/GraphicsView/doc/GraphicsView/PackageDescription.txt +++ b/GraphicsView/doc/GraphicsView/PackageDescription.txt @@ -9,7 +9,7 @@ /*! \addtogroup PkgGraphicsViewRef -\cgalPkgDescriptionBegin{CGAL and the Qt Graphics View Framework,PkgGraphicsViewSummary} +\cgalPkgDescriptionBegin{CGAL and the Qt Graphics View Framework,PkgGraphicsView} \cgalPkgPicture{detail.png} \cgalPkgSummaryBegin \cgalPkgAuthors{Andreas Fabri and Laurent Rineau} diff --git a/HalfedgeDS/doc/HalfedgeDS/PackageDescription.txt b/HalfedgeDS/doc/HalfedgeDS/PackageDescription.txt index c0c6af84452..33e43e7deaf 100644 --- a/HalfedgeDS/doc/HalfedgeDS/PackageDescription.txt +++ b/HalfedgeDS/doc/HalfedgeDS/PackageDescription.txt @@ -20,7 +20,7 @@ /*! \addtogroup PkgHDSRef \todo check generated documentation -\cgalPkgDescriptionBegin{Halfedge Data Structures,PkgHDSSummary} +\cgalPkgDescriptionBegin{Halfedge Data Structures,PkgHDS} \cgalPkgPicture{HalfedgeDS/fig/HalfedgeDS-teaser-small.png} \cgalPkgSummaryBegin \cgalPkgAuthor{Lutz Kettner} diff --git a/Inscribed_areas/doc/Inscribed_areas/PackageDescription.txt b/Inscribed_areas/doc/Inscribed_areas/PackageDescription.txt index cf559fcc2ea..9270c38d3bb 100644 --- a/Inscribed_areas/doc/Inscribed_areas/PackageDescription.txt +++ b/Inscribed_areas/doc/Inscribed_areas/PackageDescription.txt @@ -6,7 +6,7 @@ /*! \addtogroup PkgInscribedAreasRef \todo check generated documentation -\cgalPkgDescriptionBegin{Inscribed Areas,PkgInscribedAreasSummary} +\cgalPkgDescriptionBegin{Inscribed Areas,PkgInscribedAreas} \cgalPkgPicture{ler-detail.png} \cgalPkgSummaryBegin \cgalPkgAuthors{Michael Hoffmann and Eli Packer} diff --git a/Interpolation/doc/Interpolation/Interpolation.txt b/Interpolation/doc/Interpolation/Interpolation.txt index e9e6bde16ec..cc581bac7da 100644 --- a/Interpolation/doc/Interpolation/Interpolation.txt +++ b/Interpolation/doc/Interpolation/Interpolation.txt @@ -95,7 +95,7 @@ diagrams, also known as power diagrams, are obtained by considering wei defined between two weighted points \f$ (p, \omega_p) \f$ and \f$ (q, \omega_q) \f$ by \f$ \Pi( (p, \omega_p), (q, \omega_q) ) = pq^2 - \omega_p - \omega_q \f$. See \link Subsection_2D_Triangulations_Regular_Description this section \endlink -of the package \ref PkgTriangulation2Summary for an in-depth description of power diagrams. +of the package \ref PkgTriangulation2 for an in-depth description of power diagrams. \cgalFigureBegin{figrn_coords, rn_coords.svg} Illustration of regular neighbor coordinates. The point set is the same diff --git a/Interpolation/doc/Interpolation/PackageDescription.txt b/Interpolation/doc/Interpolation/PackageDescription.txt index 6a4b53f4442..6482d84ac87 100644 --- a/Interpolation/doc/Interpolation/PackageDescription.txt +++ b/Interpolation/doc/Interpolation/PackageDescription.txt @@ -14,7 +14,7 @@ /*! \addtogroup PkgInterpolation2Ref -\cgalPkgDescriptionBegin{2D and Surface Function Interpolation,PkgInterpolation2Summary} +\cgalPkgDescriptionBegin{2D and Surface Function Interpolation,PkgInterpolation2} \cgalPkgPicture{interpolation.png} \cgalPkgSummaryBegin \cgalPkgAuthor{Julia Flötotto} diff --git a/Interval_skip_list/doc/Interval_skip_list/PackageDescription.txt b/Interval_skip_list/doc/Interval_skip_list/PackageDescription.txt index b9fc74b4a19..aff3f5fe49f 100644 --- a/Interval_skip_list/doc/Interval_skip_list/PackageDescription.txt +++ b/Interval_skip_list/doc/Interval_skip_list/PackageDescription.txt @@ -4,7 +4,7 @@ /*! \addtogroup PkgIntervalSkipListRef -\cgalPkgDescriptionBegin{Interval Skip List,PkgIntervalSkipListSummary} +\cgalPkgDescriptionBegin{Interval Skip List,PkgIntervalSkipList} \cgalPkgPicture{Interval_skip_list/fig/query.png} \cgalPkgSummaryBegin \cgalPkgAuthor{Andreas Fabri} diff --git a/Jet_fitting_3/doc/Jet_fitting_3/PackageDescription.txt b/Jet_fitting_3/doc/Jet_fitting_3/PackageDescription.txt index ce78c9d23f5..0337db041c2 100644 --- a/Jet_fitting_3/doc/Jet_fitting_3/PackageDescription.txt +++ b/Jet_fitting_3/doc/Jet_fitting_3/PackageDescription.txt @@ -4,7 +4,7 @@ /*! \addtogroup PkgJet_fitting_3Ref \todo check generated documentation -\cgalPkgDescriptionBegin{Estimation of Local Differential Properties of Point-Sampled Surfaces,PkgJet_fitting_3Summary} +\cgalPkgDescriptionBegin{Estimation of Local Differential Properties of Point-Sampled Surfaces,PkgJet_fitting_3} \cgalPkgPicture{DavidDetail.png} \cgalPkgSummaryBegin \cgalPkgAuthors{Marc Pouget and Frédéric Cazals} @@ -13,7 +13,7 @@ \cgalPkgSummaryEnd \cgalPkgShortInfoBegin \cgalPkgSince{3.3} -\cgalPkgDependsOn{\ref PkgSolverSummary and \ref thirdpartyEigen} +\cgalPkgDependsOn{\ref PkgSolver and \ref thirdpartyEigen} \cgalPkgBib{cgal:pc-eldp} \cgalPkgLicense{\ref licensesGPL "GPL"} \cgalPkgDemo{Polyhedron demo,polyhedron_3.zip} diff --git a/Kernel_23/doc/Kernel_23/PackageDescription.txt b/Kernel_23/doc/Kernel_23/PackageDescription.txt index fc28676855d..4dfd75a4e2d 100644 --- a/Kernel_23/doc/Kernel_23/PackageDescription.txt +++ b/Kernel_23/doc/Kernel_23/PackageDescription.txt @@ -35,7 +35,7 @@ /*! \addtogroup PkgKernel23Ref -\cgalPkgDescriptionBegin{2D and 3D Linear Geometry Kernel,PkgKernel23Summary} +\cgalPkgDescriptionBegin{2D and 3D Linear Geometry Kernel,PkgKernel23} \cgalPkgPicture{pointSegmentTriangle.png} \cgalPkgSummaryBegin \cgalPkgAuthors{Hervé Brönnimann, Andreas Fabri, Geert-Jan Giezeman, Susan Hert, Michael Hoffmann, Lutz Kettner, Sylvain Pion, and Stefan Schirra} diff --git a/Kernel_d/doc/Kernel_d/PackageDescription.txt b/Kernel_d/doc/Kernel_d/PackageDescription.txt index 6a1d4bfb9dc..a2a4f31cbf3 100644 --- a/Kernel_d/doc/Kernel_d/PackageDescription.txt +++ b/Kernel_d/doc/Kernel_d/PackageDescription.txt @@ -22,7 +22,7 @@ /*! \addtogroup PkgKernelDRef \todo check generated documentation -\cgalPkgDescriptionBegin{dD Geometry Kernel,PkgKernelDSummary} +\cgalPkgDescriptionBegin{dD Geometry Kernel,PkgKernelD} \cgalPkgPicture{hypercube.png} \cgalPkgSummaryBegin \cgalPkgAuthor{Michael Seel} diff --git a/Linear_cell_complex/doc/Linear_cell_complex/PackageDescription.txt b/Linear_cell_complex/doc/Linear_cell_complex/PackageDescription.txt index 0cb3fa001a1..4aa6d9777bf 100644 --- a/Linear_cell_complex/doc/Linear_cell_complex/PackageDescription.txt +++ b/Linear_cell_complex/doc/Linear_cell_complex/PackageDescription.txt @@ -30,7 +30,7 @@ /*! \addtogroup PkgLinearCellComplexRef -\cgalPkgDescriptionBegin{Linear Cell Complex,PkgLinearCellComplexSummary} +\cgalPkgDescriptionBegin{Linear Cell Complex,PkgLinearCellComplex} \cgalPkgPicture{lcc_logo.png} \cgalPkgSummaryBegin \cgalPkgAuthor{Guillaume Damiand} @@ -39,8 +39,8 @@ \cgalPkgSummaryEnd \cgalPkgShortInfoBegin \cgalPkgSince{4.0} -\cgalPkgDependsOn{\ref PkgCombinatorialMapsSummary} -\cgalPkgDependsOn{\ref PkgGeneralizedMapsSummary} +\cgalPkgDependsOn{\ref PkgCombinatorialMaps} +\cgalPkgDependsOn{\ref PkgGeneralizedMaps} \cgalPkgBib{cgal:d-lcc-12} \cgalPkgLicense{\ref licensesLGPL "LGPL"} \cgalPkgDemo{3D Linear Cell Complex,linear_cell_complex_3.zip} diff --git a/Matrix_search/doc/Matrix_search/PackageDescription.txt b/Matrix_search/doc/Matrix_search/PackageDescription.txt index 53af97c84b6..6e91a1dba4e 100644 --- a/Matrix_search/doc/Matrix_search/PackageDescription.txt +++ b/Matrix_search/doc/Matrix_search/PackageDescription.txt @@ -6,7 +6,7 @@ /*! \addtogroup PkgMatrixSearchRef \todo check generated documentation -\cgalPkgDescriptionBegin{Monotone and Sorted Matrix Search,PkgMatrixSearchSummary} +\cgalPkgDescriptionBegin{Monotone and Sorted Matrix Search,PkgMatrixSearch} \cgalPkgPicture{matrix.png} \cgalPkgSummaryBegin \cgalPkgAuthor{Michael Hoffmann} diff --git a/Mesh_2/doc/Mesh_2/PackageDescription.txt b/Mesh_2/doc/Mesh_2/PackageDescription.txt index be61cc3a694..96c93298c8b 100644 --- a/Mesh_2/doc/Mesh_2/PackageDescription.txt +++ b/Mesh_2/doc/Mesh_2/PackageDescription.txt @@ -13,7 +13,7 @@ /*! \addtogroup PkgMesh2Ref -\cgalPkgDescriptionBegin{2D Conforming Triangulations and Meshes,PkgMesh2Summary} +\cgalPkgDescriptionBegin{2D Conforming Triangulations and Meshes,PkgMesh2} \cgalPkgPicture{Mesh_2/fig/delaunaymesh-small.png} \cgalPkgSummaryBegin \cgalPkgAuthor{Laurent Rineau} @@ -27,7 +27,7 @@ The package can handle intersecting input constraints and set no restriction on \cgalPkgSummaryEnd \cgalPkgShortInfoBegin \cgalPkgSince{3.1} -\cgalPkgDependsOn{\ref PkgTriangulation2Summary} +\cgalPkgDependsOn{\ref PkgTriangulation2} \cgalPkgBib{cgal:r-ctm2} \cgalPkgLicense{\ref licensesGPL "GPL"} \cgalPkgDemo{2D Mesh Generator,constrained_delaunay_triangulation_2.zip} diff --git a/Mesh_3/doc/Mesh_3/PackageDescription.txt b/Mesh_3/doc/Mesh_3/PackageDescription.txt index f0d660ae7c5..0bc137e497a 100644 --- a/Mesh_3/doc/Mesh_3/PackageDescription.txt +++ b/Mesh_3/doc/Mesh_3/PackageDescription.txt @@ -34,7 +34,7 @@ /*! \addtogroup PkgMesh_3Ref \todo check generated documentation -\cgalPkgDescriptionBegin{3D Mesh Generation,PkgMesh_3Summary} +\cgalPkgDescriptionBegin{3D Mesh Generation,PkgMesh_3} \cgalPkgPicture{Mesh_3/fig/multilabel_mesher_small.jpg} \cgalPkgSummaryBegin \cgalPkgAuthors{Pierre Alliez, Clément Jamin, Laurent Rineau, Stéphane Tayeb, Jane Tournois, Mariette Yvinec} @@ -43,7 +43,7 @@ \cgalPkgSummaryEnd \cgalPkgShortInfoBegin \cgalPkgSince{3.5} -\cgalPkgDependsOn{\ref PkgTriangulation3Summary and \ref thirdpartyEigen} +\cgalPkgDependsOn{\ref PkgTriangulation3 and \ref thirdpartyEigen} \cgalPkgBib{cgal:rty-m3} \cgalPkgLicense{\ref licensesGPL "GPL"} \cgalPkgDemo{Polyhedron demo,polyhedron_3.zip} diff --git a/Minkowski_sum_2/doc/Minkowski_sum_2/PackageDescription.txt b/Minkowski_sum_2/doc/Minkowski_sum_2/PackageDescription.txt index da4cbc55053..5eb907fdb84 100644 --- a/Minkowski_sum_2/doc/Minkowski_sum_2/PackageDescription.txt +++ b/Minkowski_sum_2/doc/Minkowski_sum_2/PackageDescription.txt @@ -5,7 +5,7 @@ /*! \addtogroup PkgMinkowskiSum2Ref -\cgalPkgDescriptionBegin{2D Minkowski Sums,PkgMinkowskiSum2Summary} +\cgalPkgDescriptionBegin{2D Minkowski Sums,PkgMinkowskiSum2} \cgalPkgPicture{Minkowski_sum_2/fig/Minkowski_sum_2.png} \cgalPkgSummaryBegin \cgalPkgAuthor{Ron Wein, Alon Baram, Eyal Flato, Efi Fogel, Michael Hemmer, Sebastian Morr} @@ -14,7 +14,7 @@ \cgalPkgSummaryEnd \cgalPkgShortInfoBegin \cgalPkgSince{3.3} -\cgalPkgDependsOn{\ref PkgArrangement2Summary, \ref PkgAABB_treeSummary, \ref PkgTriangulation2Summary} +\cgalPkgDependsOn{\ref PkgArrangement2, \ref PkgAABB_tree, \ref PkgTriangulation2} \cgalPkgBib{cgal:w-rms2} \cgalPkgLicense{\ref licensesGPL "GPL"} \cgalPkgShortInfoEnd diff --git a/Minkowski_sum_3/doc/Minkowski_sum_3/PackageDescription.txt b/Minkowski_sum_3/doc/Minkowski_sum_3/PackageDescription.txt index 96135dd13d6..5850f51e735 100644 --- a/Minkowski_sum_3/doc/Minkowski_sum_3/PackageDescription.txt +++ b/Minkowski_sum_3/doc/Minkowski_sum_3/PackageDescription.txt @@ -3,7 +3,7 @@ /*! \addtogroup PkgMinkowskiSum3Ref \todo check generated documentation -\cgalPkgDescriptionBegin{3D Minkowski Sum of Polyhedra,PkgMinkowskiSum3Summary} +\cgalPkgDescriptionBegin{3D Minkowski Sum of Polyhedra,PkgMinkowskiSum3} \cgalPkgPicture{Minkowski_sum_3/fig/Minkowski_sum_3_teaser.png} \cgalPkgSummaryBegin \cgalPkgAuthor{Peter Hachenberger} @@ -12,7 +12,7 @@ \cgalPkgSummaryEnd \cgalPkgShortInfoBegin \cgalPkgSince{3.5} -\cgalPkgDependsOn{\ref PkgNef3Summary\, \ref PkgConvexDecomposition3Summary} +\cgalPkgDependsOn{\ref PkgNef3\, \ref PkgConvexDecomposition3} \cgalPkgBib{cgal:h-msp3} \cgalPkgLicense{\ref licensesGPL "GPL"} \cgalPkgDemo{Polyhedron demo,polyhedron_3.zip} diff --git a/Miscellany/doc/Miscellany/PackageDescription.txt b/Miscellany/doc/Miscellany/PackageDescription.txt index c9889a09e97..1db5526f5ce 100644 --- a/Miscellany/doc/Miscellany/PackageDescription.txt +++ b/Miscellany/doc/Miscellany/PackageDescription.txt @@ -3,7 +3,7 @@ /// \ingroup PkgProfilingToolsRef /*! \addtogroup PkgProfilingToolsRef -\cgalPkgDescriptionBegin{Profiling tools\, Hash Map\, Union-find\, Modifiers,PkgProfilingToolsSummary} +\cgalPkgDescriptionBegin{Profiling tools\, Hash Map\, Union-find\, Modifiers,PkgProfilingTools} \cgalPkgPicture{stopwatch.png} \cgalPkgSummaryBegin \cgalPkgAuthors{Lutz Kettner, Sylvain Pion, and Michael Seel} diff --git a/Modular_arithmetic/doc/Modular_arithmetic/PackageDescription.txt b/Modular_arithmetic/doc/Modular_arithmetic/PackageDescription.txt index 6e9f8f5d5fa..4c62f6f853d 100644 --- a/Modular_arithmetic/doc/Modular_arithmetic/PackageDescription.txt +++ b/Modular_arithmetic/doc/Modular_arithmetic/PackageDescription.txt @@ -3,7 +3,7 @@ /// \ingroup PkgModularArithmeticRef /*! \addtogroup PkgModularArithmeticRef -\cgalPkgDescriptionBegin{Modular Arithmetic,PkgModularArithmeticSummary} +\cgalPkgDescriptionBegin{Modular Arithmetic,PkgModularArithmetic} \cgalPkgPicture{Modular_arithmetic.png} \cgalPkgSummaryBegin \cgalPkgAuthors{Michael Hemmer and Sylvain Pion} diff --git a/Nef_2/doc/Nef_2/PackageDescription.txt b/Nef_2/doc/Nef_2/PackageDescription.txt index a312ba70d83..d01b8982334 100644 --- a/Nef_2/doc/Nef_2/PackageDescription.txt +++ b/Nef_2/doc/Nef_2/PackageDescription.txt @@ -4,7 +4,7 @@ /*! \addtogroup PkgNef2Ref -\cgalPkgDescriptionBegin{2D Boolean Operations on Nef Polygons,PkgNef2Summary} +\cgalPkgDescriptionBegin{2D Boolean Operations on Nef Polygons,PkgNef2} \cgalPkgPicture{complex-teaser.png} \cgalPkgSummaryBegin \cgalPkgAuthor{Michael Seel} diff --git a/Nef_3/doc/Nef_3/PackageDescription.txt b/Nef_3/doc/Nef_3/PackageDescription.txt index 61462a586ca..c54ab4aa33d 100644 --- a/Nef_3/doc/Nef_3/PackageDescription.txt +++ b/Nef_3/doc/Nef_3/PackageDescription.txt @@ -7,7 +7,7 @@ /*! \addtogroup PkgNef3Ref \todo check generated documentation -\cgalPkgDescriptionBegin{3D Boolean Operations on Nef Polyhedra,PkgNef3Summary} +\cgalPkgDescriptionBegin{3D Boolean Operations on Nef Polyhedra,PkgNef3} \cgalPkgPicture{Nef_3-teaser.png} \cgalPkgSummaryBegin \cgalPkgAuthors{Peter Hachenberger and Lutz Kettner} @@ -16,7 +16,7 @@ \cgalPkgSummaryEnd \cgalPkgShortInfoBegin \cgalPkgSince{3.1} -\cgalPkgDependsOn{\ref PkgNef2Summary\, \ref PkgNefS2Summary} +\cgalPkgDependsOn{\ref PkgNef2\, \ref PkgNefS2} \cgalPkgBib{cgal:hk-bonp3} \cgalPkgLicense{\ref licensesGPL "GPL"} \cgalPkgDemo{Polyhedron demo,polyhedron_3.zip} diff --git a/Nef_S2/doc/Nef_S2/PackageDescription.txt b/Nef_S2/doc/Nef_S2/PackageDescription.txt index f9625e75312..22ef703b6be 100644 --- a/Nef_S2/doc/Nef_S2/PackageDescription.txt +++ b/Nef_S2/doc/Nef_S2/PackageDescription.txt @@ -2,7 +2,7 @@ /*! \addtogroup PkgNefS2Ref -\cgalPkgDescriptionBegin{2D Boolean Operations on Nef Polygons Embedded on the Sphere,PkgNefS2Summary} +\cgalPkgDescriptionBegin{2D Boolean Operations on Nef Polygons Embedded on the Sphere,PkgNefS2} \cgalPkgPicture{Nef_S2-teaser-small.png} \cgalPkgSummaryBegin \cgalPkgAuthors{Peter Hachenberger and Lutz Kettner} @@ -11,7 +11,7 @@ \cgalPkgSummaryEnd \cgalPkgShortInfoBegin \cgalPkgSince{3.1} -\cgalPkgDependsOn{\ref PkgNef2Summary} +\cgalPkgDependsOn{\ref PkgNef2} \cgalPkgBib{cgal:hk-bonpes2} \cgalPkgLicense{\ref licensesGPL "GPL"} \cgalPkgShortInfoEnd diff --git a/Number_types/doc/Number_types/PackageDescription.txt b/Number_types/doc/Number_types/PackageDescription.txt index a63d56b7aef..66ec07c03ac 100644 --- a/Number_types/doc/Number_types/PackageDescription.txt +++ b/Number_types/doc/Number_types/PackageDescription.txt @@ -34,7 +34,7 @@ /*! \addtogroup PkgNumberTypesRef \todo check generated documentation -\cgalPkgDescriptionBegin{Number Types,PkgNumberTypesSummary} +\cgalPkgDescriptionBegin{Number Types,PkgNumberTypes} \cgalPkgPicture{illustration.png} \cgalPkgSummaryBegin \cgalPkgAuthors{Michael Hemmer, Susan Hert, Sylvain Pion, and Stefan Schirra} diff --git a/Optimal_transportation_reconstruction_2/doc/Optimal_transportation_reconstruction_2/PackageDescription.txt b/Optimal_transportation_reconstruction_2/doc/Optimal_transportation_reconstruction_2/PackageDescription.txt index 692a7cee60b..08b34f772fa 100644 --- a/Optimal_transportation_reconstruction_2/doc/Optimal_transportation_reconstruction_2/PackageDescription.txt +++ b/Optimal_transportation_reconstruction_2/doc/Optimal_transportation_reconstruction_2/PackageDescription.txt @@ -9,7 +9,7 @@ /*! \addtogroup PkgOptimalTransportationReconstruction2Ref -\cgalPkgDescriptionBegin{Optimal Transportation Curve Reconstruction, PkgOptimalTransportationReconstruction2Summary} +\cgalPkgDescriptionBegin{Optimal Transportation Curve Reconstruction, PkgOptimalTransportationReconstruction2} \cgalPkgPicture{RS_2_small.png} \cgalPkgSummaryBegin \cgalPkgAuthor{Pierre Alliez, David Cohen-Steiner, Fernando de Goes, Clément Jamin, Ivo Vigan} @@ -18,7 +18,7 @@ \cgalPkgSummaryEnd \cgalPkgShortInfoBegin \cgalPkgSince{4.8} -\cgalPkgDependsOn{\ref PkgTriangulation2Summary} +\cgalPkgDependsOn{\ref PkgTriangulation2} \cgalPkgBib{cgal:gavj-rs} \cgalPkgLicense{\ref licensesGPL "GPL"} \cgalPkgDemo{2D Optimal Transportation Curve Reconstruction,otr2.zip} diff --git a/Partition_2/doc/Partition_2/PackageDescription.txt b/Partition_2/doc/Partition_2/PackageDescription.txt index 1a69f93f358..6f8a11eb6ac 100644 --- a/Partition_2/doc/Partition_2/PackageDescription.txt +++ b/Partition_2/doc/Partition_2/PackageDescription.txt @@ -8,7 +8,7 @@ /*! \addtogroup PkgPolygonPartitioning2Ref \todo check generated documentation -\cgalPkgDescriptionBegin{2D Polygon Partitioning,PkgPolygonPartitioning2Summary} +\cgalPkgDescriptionBegin{2D Polygon Partitioning,PkgPolygonPartitioning2} \cgalPkgPicture{Partition_2/fig/Partition_2-teaser-small.png} \cgalPkgSummaryBegin \cgalPkgAuthor{Susan Hert} diff --git a/Periodic_2_triangulation_2/doc/Periodic_2_triangulation_2/PackageDescription.txt b/Periodic_2_triangulation_2/doc/Periodic_2_triangulation_2/PackageDescription.txt index d5ae6555a22..bfdd048ef36 100644 --- a/Periodic_2_triangulation_2/doc/Periodic_2_triangulation_2/PackageDescription.txt +++ b/Periodic_2_triangulation_2/doc/Periodic_2_triangulation_2/PackageDescription.txt @@ -18,7 +18,7 @@ /*! \addtogroup PkgPeriodic2Triangulation2Ref -\cgalPkgDescriptionBegin{2D Periodic Triangulations,PkgPeriodic2Triangulation2Summary} +\cgalPkgDescriptionBegin{2D Periodic Triangulations,PkgPeriodic2Triangulation2} \cgalPkgPicture{Periodic_2_triangulation_2/fig/p2Delaunay2_thumb.png} \cgalPkgSummaryBegin @@ -29,7 +29,7 @@ \cgalPkgShortInfoBegin \cgalPkgSince{4.3} -\cgalPkgDependsOn{\ref PkgTriangulation2Summary} +\cgalPkgDependsOn{\ref PkgTriangulation2} \cgalPkgBib{cgal:k-pt2-13} \cgalPkgLicense{\ref licensesGPL "GPL"} \cgalPkgDemo{Periodic Delaunay Triangulation,Periodic_2_Delaunay_triangulation_2.zip} diff --git a/Periodic_3_mesh_3/doc/Periodic_3_mesh_3/PackageDescription.txt b/Periodic_3_mesh_3/doc/Periodic_3_mesh_3/PackageDescription.txt index 3627cea8ab1..ca329dfb80e 100644 --- a/Periodic_3_mesh_3/doc/Periodic_3_mesh_3/PackageDescription.txt +++ b/Periodic_3_mesh_3/doc/Periodic_3_mesh_3/PackageDescription.txt @@ -24,19 +24,19 @@ /*! \addtogroup PkgPeriodic_3_mesh_3Ref -\cgalPkgDescriptionBegin{3D Periodic Mesh Generation,PkgPeriodic_3_mesh_3Summary} +\cgalPkgDescriptionBegin{3D Periodic Mesh Generation,PkgPeriodic_3_mesh_3} \cgalPkgPicture{periodic_mesher_small.png} \cgalPkgSummaryBegin \cgalPkgAuthors{Mikhail Bogdanov, Aymeric Pellé, Mael Rouxel-Labbé, and Monique Teillaud} \cgalPkgDesc{This package is devoted to the generation of isotropic simplicial meshes discretizing periodic 3D domains. The domain to be meshed is a region of the three-dimensional flat torus. The periodic mesh generator provides users with the same -flexibility that is offered in the \ref PkgMesh_3Summary package.} +flexibility that is offered in the \ref PkgMesh_3 package.} \cgalPkgManuals{Chapter_3D_Periodic_Mesh_Generation,PkgPeriodic_3_mesh_3Ref} \cgalPkgSummaryEnd \cgalPkgShortInfoBegin \cgalPkgSince{4.13} -\cgalPkgDependsOn{\ref PkgPeriodic3Triangulation3Summary, \ref PkgMesh_3Summary, and \ref thirdpartyEigen} +\cgalPkgDependsOn{\ref PkgPeriodic3Triangulation3, \ref PkgMesh_3, and \ref thirdpartyEigen} \cgalPkgBib{cgal:btprl-p3m3} \cgalPkgLicense{\ref licensesGPL "GPL"} \cgalPkgShortInfoEnd @@ -49,14 +49,14 @@ manipulating duplicate points, well-chosen "dummy" points are inserted at the beginning of the meshing process, thus ensuring that the underlying periodic triangulation forms at all times a simplicial complex within a single copy of the periodic space \f$ \mathbb T_c^3\f$ (see Sections \ref P3Triangulation3secspace and \ref P3Triangulation3secintro -of the package \ref PkgPeriodic3Triangulation3Summary). +of the package \ref PkgPeriodic3Triangulation3). By identifying a single copy of the flat torus \f$ \mathbb T_c^3\f$ (where `c` denotes the period) with a cube of side `c` in \f$ \mathbb R^3\f$, the meshing process can be exclusively conducted within a cube of side `c`. -The mesh within a single copy is created using %CGAL's \ref PkgMesh_3Summary package, but -because %CGAL's \ref PkgMesh_3Summary package aims to mesh traditional (non-periodic) -domains, an interface is necessary between %CGAL's \ref PkgMesh_3Summary package -and %CGAL's \ref PkgPeriodic3Triangulation3Summary. +The mesh within a single copy is created using %CGAL's \ref PkgMesh_3 package, but +because %CGAL's \ref PkgMesh_3 package aims to mesh traditional (non-periodic) +domains, an interface is necessary between %CGAL's \ref PkgMesh_3 package +and %CGAL's \ref PkgPeriodic3Triangulation3. This package offers these interfaces. \cgalClassifedRefPages @@ -64,9 +64,9 @@ This package offers these interfaces. ## Concepts ## This package relies entirely on the \ref PkgMesh_3Concepts -and the \ref PkgMesh_3SecondaryConcepts described in the \ref PkgMesh_3Summary package. +and the \ref PkgMesh_3SecondaryConcepts described in the \ref PkgMesh_3 package. The following concepts are essentially identical to the concepts `MeshDomain_3` -and `MeshDomainWithFeatures_3` in the package \ref PkgMesh_3Summary : +and `MeshDomainWithFeatures_3` in the package \ref PkgMesh_3 : - `Periodic_3MeshDomain_3` - `Periodic_3MeshDomainWithFeatures_3` @@ -97,7 +97,7 @@ The following functions handle the generation of a periodic mesh: ## Classes and Functions of `Mesh_3` ## Many classes and functions used by this package are defined within the package -\ref PkgMesh_3Summary, see \ref PkgMesh_3MeshClasses, \ref PkgMesh_3Domains, +\ref PkgMesh_3, see \ref PkgMesh_3MeshClasses, \ref PkgMesh_3Domains, and \ref PkgMesh_3Parameters. ## Input/Output Functions ## diff --git a/Periodic_3_mesh_3/doc/Periodic_3_mesh_3/Periodic_3_mesh_3.txt b/Periodic_3_mesh_3/doc/Periodic_3_mesh_3/Periodic_3_mesh_3.txt index a571d3dfd36..765a7ebf8ed 100644 --- a/Periodic_3_mesh_3/doc/Periodic_3_mesh_3/Periodic_3_mesh_3.txt +++ b/Periodic_3_mesh_3/doc/Periodic_3_mesh_3/Periodic_3_mesh_3.txt @@ -20,7 +20,7 @@ A cut view of a periodic mesh. This package is devoted to the generation of isotropic simplicial meshes discretizing periodic 3D domains. The domain to be meshed is a subset of the three-dimensional flat torus -(see Section \ref P3Triangulation3secspace of the package \ref PkgPeriodic3Triangulation3Summary). +(see Section \ref P3Triangulation3secspace of the package \ref PkgPeriodic3Triangulation3). The domain may be connected or composed of multiple components and/or subdivided in several subdomains. The current implementation provides classes to represent @@ -60,24 +60,24 @@ by a mesh optimization phase to remove slivers and provide a good quality mesh. \subsection Periodic_3_mesh_3Mesh_3 Relation to the 3D Mesh Generation and 3D Periodic Triangulations Packages -This package is fundamentally linked to the package \ref PkgMesh_3Summary, +This package is fundamentally linked to the package \ref PkgMesh_3, which is devoted to the generation of isotropic simplicial -meshes discretizing (non-periodic) 3D domains and to the \ref PkgPeriodic3Triangulation3Summary of %CGAL, +meshes discretizing (non-periodic) 3D domains and to the \ref PkgPeriodic3Triangulation3 of %CGAL, which are used as underlying triangulation structures of the mesh. A periodic mesh extends, by definition, infinitely in space. We consider the flat torus \f$ \mathbb T_c^3\f$, whose canonical cube has side length `c` (this canonical cube is named original domain -in Chapter \ref PkgPeriodic3Triangulation3Summary; we rename it here to avoid the confusion -with the domain defined in Chapter \ref PkgMesh_3Summary). Well-chosen "dummy" points +in Chapter \ref PkgPeriodic3Triangulation3; we rename it here to avoid the confusion +with the domain defined in Chapter \ref PkgMesh_3). Well-chosen "dummy" points are inserted at the beginning of the meshing process, ensuring that the projection of the periodic triangulation into the flat torus \f$ \mathbb T_c^3\f$ forms at all times a simplicial complex (see Sections \ref P3Triangulation3secspace and \ref P3Triangulation3secintro of the manual of 3D periodic triangulations). Thanks to this construction, the meshing process can be exclusively conducted within the canonical cube. -The mesh can then be created using the \ref PkgMesh_3Summary package of %CGAL. +The mesh can then be created using the \ref PkgMesh_3 package of %CGAL. As this package originally aims to mesh non-periodic domains of \f$ \mathbb R^3\f$, an interface -is necessary between the packages \ref PkgMesh_3Summary and \ref PkgPeriodic3Triangulation3Summary. +is necessary between the packages \ref PkgMesh_3 and \ref PkgPeriodic3Triangulation3. This package provides this interface. \subsection Periodic_3_mesh_3InputDomain Input Domain @@ -227,7 +227,7 @@ and to guarantee that the refinement process terminates whatever may be the dihedral angles formed by input surface patches incident to a given 1-feature or the angles formed by two 1-features incident to a 0-feature. See Section \ref Mesh_3Protectionof0and1dimensionalExposed in the documentation -of the package \ref PkgMesh_3Summary for further information. +of the package \ref PkgMesh_3 for further information. Section \ref Periodic_3_mesh_3MeshingDomainswithSharpFeatures details how to prescribe sharp features and examples of periodic meshes with features. @@ -236,7 +236,7 @@ to prescribe sharp features and examples of periodic meshes with features. The optimization phase is a succession of optimization processes which aim to improve the quality of the mesh in terms of shape of its elements. -All the optimizers offered by the package \ref PkgMesh_3Summary are also available +All the optimizers offered by the package \ref PkgMesh_3 are also available for periodic mesh generation: - The Lloyd and ODT-smoother are global optimizers, moving the mesh vertices @@ -245,7 +245,7 @@ to minimize a mesh energy. the worst mesh elements. See Sections \ref Mesh_3OptimizationPhase, \ref Mesh_3TheOptimizationParameters, -and \ref Mesh_3TuningMeshOptimization in the documentation of the package \ref PkgMesh_3Summary +and \ref Mesh_3TuningMeshOptimization in the documentation of the package \ref PkgMesh_3 for further information. \section Periodic_3_mesh_3_section_interface Interface @@ -416,7 +416,7 @@ This section presents various use cases of the periodic mesh generator. \subsection Periodic_3_mesh_3SubMultipleCopies Visualizing Multiple Copies of a Periodic Mesh Generated meshes can be output to the `.mesh` file format, which can be visualized with the demo -of the package \ref PkgPolyhedronSummary. The function \link PkgPeriodic_3_mesh_3IOFunctions `CGAL::output_periodic_mesh_to_medit()` \endlink +of the package \ref PkgPolyhedron. The function \link PkgPeriodic_3_mesh_3IOFunctions `CGAL::output_periodic_mesh_to_medit()` \endlink takes a stream, a mesh complex, and - optionally - the number of periodic copies that should be drawn, making it easier to observe the periodicity of the result. \cgalFigureRef{Periodic_3_mesh_3Periodic_copies} illustrates the different output @@ -674,16 +674,16 @@ A periodic mesh without (left) and with (right) sharp features protection. Advanced use cases of the 3D mesh generator with implicit domains, its optimizers, and protection mechanisms can be found in Section \ref Mesh_3_section_examples -of the package \ref PkgMesh_3Summary. +of the package \ref PkgMesh_3. \section Periodic_3_mesh_3DesignAndImpl Design and Implementation History \subsection Periodic_3_mesh_3TheoreticalFoundations Theoretical Foundations Theoretical foundations of periodic meshes are explained in detail in the package -\ref PkgPeriodic3Triangulation3Summary. +\ref PkgPeriodic3Triangulation3. For the theoretical foundations of the mesh generation process, see Section -\ref Mesh_3TheoreticalFoundations of the package \ref PkgMesh_3Summary. +\ref Mesh_3TheoreticalFoundations of the package \ref PkgMesh_3. \subsection Periodic_3_mesh_3ImplementationHistory Implementation History diff --git a/Periodic_3_triangulation_3/doc/Periodic_3_triangulation_3/PackageDescription.txt b/Periodic_3_triangulation_3/doc/Periodic_3_triangulation_3/PackageDescription.txt index cb7391d4fa5..74b8122babb 100644 --- a/Periodic_3_triangulation_3/doc/Periodic_3_triangulation_3/PackageDescription.txt +++ b/Periodic_3_triangulation_3/doc/Periodic_3_triangulation_3/PackageDescription.txt @@ -12,7 +12,7 @@ /*! \addtogroup PkgPeriodic3Triangulation3Ref -\cgalPkgDescriptionBegin{3D Periodic Triangulations,PkgPeriodic3Triangulation3Summary} +\cgalPkgDescriptionBegin{3D Periodic Triangulations,PkgPeriodic3Triangulation3} \cgalPkgPicture{p3Delaunay3_small.jpg} \cgalPkgSummaryBegin \cgalPkgAuthors{Manuel Caroli, Aymeric Pellé, Mael Rouxel-Labbé, and Monique Teillaud} @@ -25,7 +25,7 @@ nearest neighbor queries and primitives to build the dual Voronoi diagrams.} \cgalPkgSummaryEnd \cgalPkgShortInfoBegin \cgalPkgSince{3.5} -\cgalPkgDependsOn{\ref PkgTDS3Summary} +\cgalPkgDependsOn{\ref PkgTDS3} \cgalPkgBib{cgal:ct-pt3} \cgalPkgLicense{\ref licensesGPL "GPL"} \cgalPkgDemo{3D Periodic Delaunay Triangulation,periodic_3_triangulation_3.zip,3D Periodic Lloyd,periodic_3_lloyd.zip} diff --git a/Point_set_2/doc/Point_set_2/PackageDescription.txt b/Point_set_2/doc/Point_set_2/PackageDescription.txt index c629950dc3e..9c3e34d682e 100644 --- a/Point_set_2/doc/Point_set_2/PackageDescription.txt +++ b/Point_set_2/doc/Point_set_2/PackageDescription.txt @@ -11,7 +11,7 @@ /*! \addtogroup PkgPointSet2Ref \todo check generated documentation -\cgalPkgDescriptionBegin{2D Range and Neighbor Search,PkgPointSet2Summary} +\cgalPkgDescriptionBegin{2D Range and Neighbor Search,PkgPointSet2} \cgalPkgPicture{Point_set_2/fig/point_set.png} \cgalPkgSummaryBegin \cgalPkgAuthor{Matthias Bäsken} @@ -20,7 +20,7 @@ \cgalPkgSummaryEnd \cgalPkgShortInfoBegin \cgalPkgSince{2.1} -\cgalPkgDependsOn{\ref PkgTriangulation2Summary} +\cgalPkgDependsOn{\ref PkgTriangulation2} \cgalPkgBib{cgal:b-ss2} \cgalPkgLicense{\ref licensesGPL "GPL"} \cgalPkgShortInfoEnd diff --git a/Point_set_3/doc/Point_set_3/PackageDescription.txt b/Point_set_3/doc/Point_set_3/PackageDescription.txt index da7c382eeb9..005a4fe6047 100644 --- a/Point_set_3/doc/Point_set_3/PackageDescription.txt +++ b/Point_set_3/doc/Point_set_3/PackageDescription.txt @@ -1,7 +1,7 @@ /*! \defgroup PkgPointSet3Ref 3D Point Set Reference -\cgalPkgDescriptionBegin{3D Point Set, PkgPointSet3Summary} +\cgalPkgDescriptionBegin{3D Point Set, PkgPointSet3} \cgalPkgPicture{point_set_3.png} \cgalPkgSummaryBegin \cgalPkgAuthors{Simon Giraudot} @@ -25,7 +25,7 @@ \ingroup PkgPointSet3Ref \brief This module offers convenience overloads of input/ouput -functions available in the \ref PkgPointSetProcessingSummary package. +functions available in the \ref PkgPointSetProcessing package. These overloads, available after including `CGAL/Point_set_3/IO.h`, allow the user to call point set processing algorithms without having to handle manually property maps and iterators. diff --git a/Point_set_processing_3/doc/Point_set_processing_3/PackageDescription.txt b/Point_set_processing_3/doc/Point_set_processing_3/PackageDescription.txt index cb6538835c0..20b170af4c3 100644 --- a/Point_set_processing_3/doc/Point_set_processing_3/PackageDescription.txt +++ b/Point_set_processing_3/doc/Point_set_processing_3/PackageDescription.txt @@ -27,7 +27,7 @@ Read and write points (with or without additional properties) in LAS format. \addtogroup PkgPointSetProcessingRef -\cgalPkgDescriptionBegin{Point Set Processing,PkgPointSetProcessingSummary} +\cgalPkgDescriptionBegin{Point Set Processing,PkgPointSetProcessing} \cgalPkgPicture{point_set_processing_detail.png} \cgalPkgSummaryBegin \cgalPkgAuthors{Pierre Alliez, Simon Giraudot, Clément Jamin, Florent Lafarge, Quentin Mérigot, Jocelyn Meyron, Laurent Saboret, Nader Salman, Shihao Wu} @@ -36,7 +36,7 @@ format. \cgalPkgSummaryEnd \cgalPkgShortInfoBegin \cgalPkgSince{3.5} -\cgalPkgDependsOn{\ref PkgSolverSummary} +\cgalPkgDependsOn{\ref PkgSolver} \cgalPkgBib{cgal:ass-psp} \cgalPkgLicense{\ref licensesGPL "GPL"} \cgalPkgDemo{Polyhedron demo,polyhedron_3.zip} diff --git a/Point_set_processing_3/doc/Point_set_processing_3/Point_set_processing_3.txt b/Point_set_processing_3/doc/Point_set_processing_3/Point_set_processing_3.txt index 4aece868ac7..7789be9788f 100644 --- a/Point_set_processing_3/doc/Point_set_processing_3/Point_set_processing_3.txt +++ b/Point_set_processing_3/doc/Point_set_processing_3/Point_set_processing_3.txt @@ -80,7 +80,7 @@ as, e.g., a class derived from the \cgal 3D point, or as a `std::pair, Vector_3>`, or as a `boost::tuple<..,Point_3, ..., Vector_3 >`. -The following classes described in Chapter \ref PkgProperty_mapSummary +The following classes described in Chapter \ref PkgProperty_map provide property maps for the implementations of points with normals listed above: @@ -584,7 +584,7 @@ points that are on sharp edges: The function `structure_point_set()` generates a structured version of the input point set assigned to a set of planes. Such an input can be produced by a shape detection algorithm (see \ref -PkgPointSetShapeDetection3Summary). Point set structuring is based on +PkgPointSetShapeDetection3). Point set structuring is based on the article \cgalCite{cgal:la-srpss-13}. - __Planes__: inliers of each detected plane are replaced by sets of diff --git a/Point_set_shape_detection_3/doc/Point_set_shape_detection_3/PackageDescription.txt b/Point_set_shape_detection_3/doc/Point_set_shape_detection_3/PackageDescription.txt index f8755d8b6e3..e9a6eda262e 100644 --- a/Point_set_shape_detection_3/doc/Point_set_shape_detection_3/PackageDescription.txt +++ b/Point_set_shape_detection_3/doc/Point_set_shape_detection_3/PackageDescription.txt @@ -11,7 +11,7 @@ \addtogroup PkgPointSetShapeDetection3Ref -\cgalPkgDescriptionBegin{Point Set Shape Detection, PkgPointSetShapeDetection3Summary} +\cgalPkgDescriptionBegin{Point Set Shape Detection, PkgPointSetShapeDetection3} \cgalPkgPicture{shapes_detail.png} \cgalPkgSummaryBegin diff --git a/Poisson_surface_reconstruction_3/doc/Poisson_surface_reconstruction_3/PackageDescription.txt b/Poisson_surface_reconstruction_3/doc/Poisson_surface_reconstruction_3/PackageDescription.txt index 0639d3daa55..7b53b8a8635 100644 --- a/Poisson_surface_reconstruction_3/doc/Poisson_surface_reconstruction_3/PackageDescription.txt +++ b/Poisson_surface_reconstruction_3/doc/Poisson_surface_reconstruction_3/PackageDescription.txt @@ -1,7 +1,7 @@ /// \defgroup PkgPoissonSurfaceReconstructionRef Poisson Surface Reconstruction Reference /*! \addtogroup PkgPoissonSurfaceReconstructionRef -\cgalPkgDescriptionBegin{Poisson Surface Reconstruction,PkgPoissonSurfaceReconstructionSummary} +\cgalPkgDescriptionBegin{Poisson Surface Reconstruction,PkgPoissonSurfaceReconstruction} \cgalPkgPicture{surface_reconstruction_points_detail.png} \cgalPkgSummaryBegin \cgalPkgAuthors{Pierre Alliez, Laurent Saboret, Gaël Guennebaud} @@ -10,7 +10,7 @@ \cgalPkgSummaryEnd \cgalPkgShortInfoBegin \cgalPkgSince{3.5} -\cgalPkgDependsOn{\ref PkgSolverSummary} +\cgalPkgDependsOn{\ref PkgSolver} \cgalPkgBib{cgal:asg-srps} \cgalPkgLicense{\ref licensesGPL "GPL"} \cgalPkgDemo{Polyhedron demo,polyhedron_3.zip} diff --git a/Polygon/doc/Polygon/PackageDescription.txt b/Polygon/doc/Polygon/PackageDescription.txt index 39c3596ffaa..988baca5d1d 100644 --- a/Polygon/doc/Polygon/PackageDescription.txt +++ b/Polygon/doc/Polygon/PackageDescription.txt @@ -9,7 +9,7 @@ /*! \addtogroup PkgPolygon2Ref -\cgalPkgDescriptionBegin{2D Polygons,PkgPolygon2Summary} +\cgalPkgDescriptionBegin{2D Polygons,PkgPolygon2} \cgalPkgPicture{polygon.png} \cgalPkgSummaryBegin \cgalPkgAuthors{Geert-Jan Giezeman and Wieger Wesselink} diff --git a/Polygon_mesh_processing/doc/Polygon_mesh_processing/NamedParameters.txt b/Polygon_mesh_processing/doc/Polygon_mesh_processing/NamedParameters.txt index 87a4e4b0058..70e8e720129 100644 --- a/Polygon_mesh_processing/doc/Polygon_mesh_processing/NamedParameters.txt +++ b/Polygon_mesh_processing/doc/Polygon_mesh_processing/NamedParameters.txt @@ -19,7 +19,7 @@ the type is more specific: predicates evaluated. Everywhere in this package, a \cgal `Kernel` fulfills the requirements. -The following named parameters, offered by the package \ref PkgBGLSummary +The following named parameters, offered by the package \ref PkgBGL (see \ref bgl_namedparameters), are used in this package: \cgalNPTableBegin diff --git a/Polygon_mesh_processing/doc/Polygon_mesh_processing/PackageDescription.txt b/Polygon_mesh_processing/doc/Polygon_mesh_processing/PackageDescription.txt index 87b7e9d6954..6e494277819 100644 --- a/Polygon_mesh_processing/doc/Polygon_mesh_processing/PackageDescription.txt +++ b/Polygon_mesh_processing/doc/Polygon_mesh_processing/PackageDescription.txt @@ -61,7 +61,7 @@ /*! \addtogroup PkgPolygonMeshProcessingRef -\cgalPkgDescriptionBegin{Polygon Mesh Processing, PkgPolygonMeshProcessingSummary} +\cgalPkgDescriptionBegin{Polygon Mesh Processing, PkgPolygonMeshProcessing} \cgalPkgPicture{hole_filling_ico.png} \cgalPkgSummaryBegin @@ -74,7 +74,7 @@ ranging from basic operations on simplices, to complex geometry processing algor \cgalPkgShortInfoBegin \cgalPkgSince{4.7} -\cgalPkgDependsOn{documented for each function; \ref PkgSolverSummary} +\cgalPkgDependsOn{documented for each function; \ref PkgSolver} \cgalPkgBib{cgal:lty-pmp} \cgalPkgLicense{\ref licensesGPL "GPL"} \cgalPkgDemo{Polyhedron demo,polyhedron_3.zip} diff --git a/Polygon_mesh_processing/doc/Polygon_mesh_processing/Polygon_mesh_processing.txt b/Polygon_mesh_processing/doc/Polygon_mesh_processing/Polygon_mesh_processing.txt index 985deadf51f..8f4bbc0c275 100644 --- a/Polygon_mesh_processing/doc/Polygon_mesh_processing/Polygon_mesh_processing.txt +++ b/Polygon_mesh_processing/doc/Polygon_mesh_processing/Polygon_mesh_processing.txt @@ -27,7 +27,7 @@ A polygon mesh can have any number of connected components, and also some self-i In this package, a polygon mesh is considered to have the topology of a 2-manifold. \subsection PMPAPI API -This package follows the BGL API described in \ref PkgBGLSummary. +This package follows the BGL API described in \ref PkgBGL. It can thus be used either with `Polyhedron_3`, `Surface_mesh`, or any class model of the concept `FaceGraph`. Each function or class of this package details the requirements on the input polygon mesh. @@ -229,7 +229,7 @@ centered in the output volume is a topological ball. At the surface level this m that no non-manifold vertex or edge is allowed in the output. For example, it is not possible to compute the union of two cubes that are disjoint but sharing an edge. In case you have to deal with such scenarios, you should consider using the -package \ref PkgNef3Summary. +package \ref PkgNef3. It is possible to update the input so that it contains the result (in-place operation). In that case the whole mesh will not be copied and only the region around the @@ -710,7 +710,7 @@ In the following example, a mesh is isotropically remeshed and the approximate d \subsection PoissonDistanceExample Max Distance Between Point Set and Surface Example In \ref Poisson_surface_reconstruction_3/poisson_reconstruction_example.cpp, a triangulated surface mesh is constructed from a point set using the -\link PkgPoissonSurfaceReconstructionSummary Poisson reconstruction algorithm \endlink, +\link PkgPoissonSurfaceReconstruction Poisson reconstruction algorithm \endlink, and the distance between the point set and the reconstructed surface is computed with the following code: diff --git a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/intersection.h b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/intersection.h index 9dc79169d25..cb65aa92c49 100644 --- a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/intersection.h +++ b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/intersection.h @@ -359,7 +359,7 @@ struct Throw_at_first_output { // Note this is not officially documented /* * reports all the pairs of faces intersecting between two triangulated surface meshes. - * This function depends on the package \ref PkgBoxIntersectionDSummary. + * This function depends on the package \ref PkgBoxIntersectionD. * * \pre `CGAL::is_triangle_mesh(tm1)` * \pre `CGAL::is_triangle_mesh(tm2)` @@ -478,7 +478,7 @@ compute_face_face_intersection(const FaceRange& face_range1, * a triangulated surface mesh and a polyline. * \attention If a polyline vertex intersects a face, the intersection will * be reported twice (even more if it is on a vertex, edge, or point). - * This function depends on the package \ref PkgBoxIntersectionDSummary. + * This function depends on the package \ref PkgBoxIntersectionD. * * \pre `CGAL::is_triangle_mesh(tm)` * @@ -603,7 +603,7 @@ compute_face_polyline_intersection( const FaceRange& face_range, * a triangulated surface mesh and a range of polylines. * \attention If a polyline vertex intersects a face, the intersection will * be reported twice (even more if it is on a vertex, edge, or point). - * This function depends on the package \ref PkgBoxIntersectionDSummary. + * This function depends on the package \ref PkgBoxIntersectionD. * * \pre `CGAL::is_triangle_mesh(tm)` * @@ -732,7 +732,7 @@ compute_face_polylines_intersection(const FaceRange& face_range, // Note this is not officially documented /* * detects and records intersections between two polylines. - * This function depends on the package \ref PkgBoxIntersectionDSummary. + * This function depends on the package \ref PkgBoxIntersectionD. * \attention If a polyline vertex intersects another polyline, the intersection will * be reported twice (even more if it is on a vertex). * \tparam Polyline a `RandomAccessRange` of points. @@ -815,7 +815,7 @@ compute_polyline_polyline_intersection(const Polyline& polyline1, * detects and records intersections between two ranges of polylines. * \attention If a polyline vertex intersects another polyline, the intersection will * be reported twice (even more if it is on a vertex). - * This function depends on the package \ref PkgBoxIntersectionDSummary. + * This function depends on the package \ref PkgBoxIntersectionD. * * \tparam PolylineRange a `RandomAccessRange` of `RandomAccessRange` of points. * \tparam OutputIterator a model of `OutputIterator` holding objects of type @@ -915,7 +915,7 @@ compute_polylines_polylines_intersection(const PolylineRange& polylines1, // Note this is not officially documented /* * reports all the pairs of faces intersecting between two triangulated surface meshes. - * This function depends on the package \ref PkgBoxIntersectionDSummary. + * This function depends on the package \ref PkgBoxIntersectionD. * * @pre `CGAL::is_triangle_mesh(tm1)` * @pre `CGAL::is_triangle_mesh(tm2)` @@ -960,7 +960,7 @@ compute_face_face_intersection(const TriangleMesh& tm1, * and a polyline. * \attention If a polyline vertex intersects a face or another polyline, the intersection will * be reported twice (even more if it is on a vertex, edge, or point). - * This function depends on the package \ref PkgBoxIntersectionDSummary. + * This function depends on the package \ref PkgBoxIntersectionD. * * \pre `CGAL::is_triangle_mesh(tm)` * @@ -1081,7 +1081,7 @@ bool is_mesh2_in_mesh1(const TriangleMesh& tm1, * \ingroup PMP_predicates_grp * returns `true` if any segment of any polyline of `polylines1` intersects * any segment of any polyline of `polylines2`, and `false` otherwise. - * This function depends on the package \ref PkgBoxIntersectionDSummary. + * This function depends on the package \ref PkgBoxIntersectionD. * * \tparam PolylineRange a `RandomAccessRange` of `RandomAccessRange` of points. * The point type must be from a 3D point from a \cgal Kernel. @@ -1123,7 +1123,7 @@ bool do_intersect(const PolylineRange& polylines1, /** * \ingroup PMP_predicates_grp * returns `true` if any segment of `polyline1` intersects any segment of `polyline2`, and `false` otherwise. - * This function depends on the package \ref PkgBoxIntersectionDSummary. + * This function depends on the package \ref PkgBoxIntersectionD. * * \tparam Polyline a `RandomAccessRange` of points. * The point type must be from a 3D point type from \cgal Kernel. @@ -1169,7 +1169,7 @@ bool do_intersect(const Polyline& polyline1, * \ingroup PMP_predicates_grp * returns `true` if any face of `tm1` intersects any face of `tm2`, and `false` otherwise. * If `do_overlap_test_of_bounded_sides` is set to `true`, the overlap of bounded sides are tested as well. In that case, the meshes must be closed. - * This function depends on the package \ref PkgBoxIntersectionDSummary. + * This function depends on the package \ref PkgBoxIntersectionD. * * @pre `CGAL::is_triangle_mesh(tm1)` * @pre `CGAL::is_triangle_mesh(tm2)` @@ -1257,7 +1257,7 @@ bool do_intersect(const TriangleMesh& tm1, /** * \ingroup PMP_predicates_grp * returns `true` if any face of `tm` and any segment of any polyline of `polylines` intersects, and `false` otherwise. - * This function depends on the package \ref PkgBoxIntersectionDSummary. + * This function depends on the package \ref PkgBoxIntersectionD. * @pre `CGAL::is_triangle_mesh(tm)` * * \tparam TriangleMesh a model of `FaceListGraph` @@ -1313,7 +1313,7 @@ bool do_intersect(const TriangleMesh& tm, /** * \ingroup PMP_predicates_grp * returns `true` if any face of `tm` and any segment of `polyline` intersects, and `false` otherwise. - * This function depends on the package \ref PkgBoxIntersectionDSummary. + * This function depends on the package \ref PkgBoxIntersectionD. * @pre `CGAL::is_triangle_mesh(tm)` * * \tparam TriangleMesh a model of `FaceListGraph` @@ -1529,7 +1529,7 @@ struct Mesh_callback * A pair of meshes intersecting is put in the output iterator `out` as a `std::pair`, * each index refering to the index of the triangle mesh in the input range. * If `do_overlap_test_of_bounded_sides` is `true`, the overlap of bounded sides are tested as well. In that case, the meshes must be closed. - * This function depends on the package \ref PkgBoxIntersectionDSummary. + * This function depends on the package \ref PkgBoxIntersectionD. * * \tparam TriangleMeshRange a model of `RandomAccessRange` of triangulated surface meshes model of `FaceListGraph`. * \tparam OutputIterator an output iterator in which `std::pair` can be put. diff --git a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/self_intersections.h b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/self_intersections.h index 230870511b8..9efc2527619 100644 --- a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/self_intersections.h +++ b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/self_intersections.h @@ -235,7 +235,7 @@ self_intersections( const FaceRange& face_range, /** * \ingroup PMP_intersection_grp * detects and records self-intersections of a triangulated surface mesh. - * This function depends on the package \ref PkgBoxIntersectionDSummary + * This function depends on the package \ref PkgBoxIntersectionD * @pre `CGAL::is_triangle_mesh(tmesh)` * * @tparam TriangleMesh a model of `FaceListGraph` @@ -391,7 +391,7 @@ OutputIterator self_intersections(const FaceRange& face_range, /** * \ingroup PMP_intersection_grp * tests if a triangulated surface mesh self-intersects. - * This function depends on the package \ref PkgBoxIntersectionDSummary + * This function depends on the package \ref PkgBoxIntersectionD * @pre `CGAL::is_triangle_mesh(tmesh)` * * @tparam TriangleMesh a model of `FaceListGraph` @@ -431,7 +431,7 @@ bool does_self_intersect(const TriangleMesh& tmesh /** * \ingroup PMP_intersection_grp * tests if a set of faces of a triangulated surface mesh self-intersects. - * This function depends on the package \ref PkgBoxIntersectionDSummary + * This function depends on the package \ref PkgBoxIntersectionD * @pre `CGAL::is_triangle_mesh(tmesh)` * * @tparam FaceRange a range of `face_descriptor` diff --git a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/triangulate_faces.h b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/triangulate_faces.h index be59a7eb69a..3c667639fca 100644 --- a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/triangulate_faces.h +++ b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/triangulate_faces.h @@ -400,7 +400,7 @@ public: /** * \ingroup PMP_meshing_grp -* triangulates a single face of a polygon mesh. This function depends on the package \ref PkgTriangulation2Summary +* triangulates a single face of a polygon mesh. This function depends on the package \ref PkgTriangulation2 * @tparam PolygonMesh a model of `FaceListGraph` and `MutableFaceGraph` * @tparam NamedParameters a sequence of \ref pmp_namedparameters "Named Parameters" * @@ -449,7 +449,7 @@ bool triangulate_face(typename boost::graph_traits::face_descriptor /** * \ingroup PMP_meshing_grp -* triangulates given faces of a polygon mesh. This function depends on the package \ref PkgTriangulation2Summary +* triangulates given faces of a polygon mesh. This function depends on the package \ref PkgTriangulation2 * * @tparam FaceRange range of `boost::graph_traits::%face_descriptor`, model of `Range`. @@ -501,7 +501,7 @@ bool triangulate_faces(FaceRange face_range, PolygonMesh& pmesh) /** * \ingroup PMP_meshing_grp -* triangulates all faces of a polygon mesh. This function depends on the package \ref PkgTriangulation2Summary +* triangulates all faces of a polygon mesh. This function depends on the package \ref PkgTriangulation2 * @tparam PolygonMesh a model of `FaceListGraph` and `MutableFaceGraph` * @tparam NamedParameters a sequence of \ref pmp_namedparameters "Named Parameters" * diff --git a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_slicer.h b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_slicer.h index f667edeb8fe..905aa354d3d 100644 --- a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_slicer.h +++ b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_slicer.h @@ -63,7 +63,7 @@ namespace CGAL { /// orthogonal to a frame axis, the non-null coefficient being 1 or -1. /// The default is `true`. /// -/// The implemenation of this class depends on the package \ref PkgAABB_treeSummary. +/// The implemenation of this class depends on the package \ref PkgAABB_tree. /// \todo Shall we document more in details what is required? /// `Traits` must provide: /// - `Plane_3` diff --git a/Polygon_mesh_processing/include/CGAL/Side_of_triangle_mesh.h b/Polygon_mesh_processing/include/CGAL/Side_of_triangle_mesh.h index ef47a19a190..6cf396088e3 100644 --- a/Polygon_mesh_processing/include/CGAL/Side_of_triangle_mesh.h +++ b/Polygon_mesh_processing/include/CGAL/Side_of_triangle_mesh.h @@ -55,7 +55,7 @@ namespace CGAL { * will return in turns `CGAL::ON_BOUNDED_SIDE` and `CGAL::ON_UNBOUNDED_SIDE`, * following the aforementioned parity criterion. * - * This class depends on the package \ref PkgAABB_treeSummary. + * This class depends on the package \ref PkgAABB_tree. * * @tparam TriangleMesh a triangulated surface mesh, model of `FaceListGraph` * @tparam GeomTraits a geometric traits class, model of `Kernel` diff --git a/Polyhedron/doc/Polyhedron/PackageDescription.txt b/Polyhedron/doc/Polyhedron/PackageDescription.txt index 95e0c5ddf88..e47e2e43341 100644 --- a/Polyhedron/doc/Polyhedron/PackageDescription.txt +++ b/Polyhedron/doc/Polyhedron/PackageDescription.txt @@ -16,7 +16,7 @@ /*! \addtogroup PkgPolyhedronRef \todo check generated documentation -\cgalPkgDescriptionBegin{3D Polyhedral Surface,PkgPolyhedronSummary} +\cgalPkgDescriptionBegin{3D Polyhedral Surface,PkgPolyhedron} \cgalPkgPicture{Polyhedron-teaser-small.png} \cgalPkgSummaryBegin \cgalPkgAuthor{Lutz Kettner} @@ -25,7 +25,7 @@ \cgalPkgSummaryEnd \cgalPkgShortInfoBegin \cgalPkgSince{1.0} -\cgalPkgDependsOn{\ref PkgHDSSummary} +\cgalPkgDependsOn{\ref PkgHDS} \cgalPkgBib{cgal:k-ps} \cgalPkgLicense{\ref licensesGPL "GPL"} \cgalPkgDemo{Polyhedron demo,polyhedron_3.zip} diff --git a/Polyline_simplification_2/doc/Polyline_simplification_2/PackageDescription.txt b/Polyline_simplification_2/doc/Polyline_simplification_2/PackageDescription.txt index 6e5b9fcca6a..6f5d14070e0 100644 --- a/Polyline_simplification_2/doc/Polyline_simplification_2/PackageDescription.txt +++ b/Polyline_simplification_2/doc/Polyline_simplification_2/PackageDescription.txt @@ -13,7 +13,7 @@ /*! \addtogroup PkgPolylineSimplification2Ref -\cgalPkgDescriptionBegin{2D Polyline Simplification,PkgPolylineSimplification2Summary} +\cgalPkgDescriptionBegin{2D Polyline Simplification,PkgPolylineSimplification2} \cgalPkgPicture{PolylineSimplification-small.png} \cgalPkgSummaryBegin \cgalPkgAuthor{Andreas Fabri} @@ -22,7 +22,7 @@ \cgalPkgSummaryEnd \cgalPkgShortInfoBegin \cgalPkgSince{4.6} -\cgalPkgDependsOn{\ref PkgTriangulation2Summary} +\cgalPkgDependsOn{\ref PkgTriangulation2} \cgalPkgBib{cgal:f-ps2} \cgalPkgLicense{\ref licensesGPL "GPL"} \cgalPkgDemo{Polyline Simplification,polyline_simplification_2.zip} diff --git a/Polyline_simplification_2/doc/Polyline_simplification_2/Polyline_simplification_2.txt b/Polyline_simplification_2/doc/Polyline_simplification_2/Polyline_simplification_2.txt index 2774b0b0db9..04d89c86104 100644 --- a/Polyline_simplification_2/doc/Polyline_simplification_2/Polyline_simplification_2.txt +++ b/Polyline_simplification_2/doc/Polyline_simplification_2/Polyline_simplification_2.txt @@ -46,7 +46,7 @@ true, for instance, upon reaching a desired number of vertices or reaching a maximum simplification error. The polyline simplification algorithm operates on a triangulation -class from Chapter \ref PkgTriangulation2Summary, namely +class from Chapter \ref PkgTriangulation2, namely `Constrained_triangulation_plus_2`. This data structure allows to remove vertices of a polyline constraint, while keeping the points of the removed vertices of the polyline constraint. The fact that it is a diff --git a/Polynomial/doc/Polynomial/PackageDescription.txt b/Polynomial/doc/Polynomial/PackageDescription.txt index d2036ebd27b..79f708e98e6 100644 --- a/Polynomial/doc/Polynomial/PackageDescription.txt +++ b/Polynomial/doc/Polynomial/PackageDescription.txt @@ -10,7 +10,7 @@ /*! \addtogroup PkgPolynomialRef \todo check generated documentation -\cgalPkgDescriptionBegin{Polynomial,PkgPolynomialSummary} +\cgalPkgDescriptionBegin{Polynomial,PkgPolynomial} \cgalPkgPicture{Polynomial.png} \cgalPkgSummaryBegin \cgalPkgAuthor{Michael Hemmer} diff --git a/Polytope_distance_d/doc/Polytope_distance_d/PackageDescription.txt b/Polytope_distance_d/doc/Polytope_distance_d/PackageDescription.txt index d7cdc6df200..25d43983640 100644 --- a/Polytope_distance_d/doc/Polytope_distance_d/PackageDescription.txt +++ b/Polytope_distance_d/doc/Polytope_distance_d/PackageDescription.txt @@ -5,7 +5,7 @@ /*! \addtogroup PkgOptimalDistancesRef \todo check generated documentation -\cgalPkgDescriptionBegin{Optimal Distances,PkgOptimalDistancesSummary} +\cgalPkgDescriptionBegin{Optimal Distances,PkgOptimalDistances} \cgalPkgPicture{dist.png} \cgalPkgSummaryBegin \cgalPkgAuthors{Kaspar Fischer, Bernd Gärtner, Thomas Herrmann, Michael Hoffmann, and Sven Schönherr} diff --git a/Principal_component_analysis/doc/Principal_component_analysis/PackageDescription.txt b/Principal_component_analysis/doc/Principal_component_analysis/PackageDescription.txt index 42816fa6162..1237c897a35 100644 --- a/Principal_component_analysis/doc/Principal_component_analysis/PackageDescription.txt +++ b/Principal_component_analysis/doc/Principal_component_analysis/PackageDescription.txt @@ -18,7 +18,7 @@ /*! \addtogroup PkgPrincipalComponentAnalysisDRef \todo check generated documentation -\cgalPkgDescriptionBegin{Principal Component Analysis,PkgPrincipalComponentAnalysisDSummary} +\cgalPkgDescriptionBegin{Principal Component Analysis,PkgPrincipalComponentAnalysisD} \cgalPkgPicture{teaserLeastSquaresFitting.png} \cgalPkgSummaryBegin \cgalPkgAuthors{Pierre Alliez, Sylvain Pion and Ankit Gupta} @@ -27,7 +27,7 @@ \cgalPkgSummaryEnd \cgalPkgShortInfoBegin \cgalPkgSince{3.2} -\cgalPkgDependsOn{\ref PkgSolverSummary} +\cgalPkgDependsOn{\ref PkgSolver} \cgalPkgBib{cgal:ap-pcad} \cgalPkgLicense{\ref licensesGPL "GPL"} \cgalPkgDemo{Principal Component Analysis,pca.zip,Operations on Polygons,polygon.zip,Polyhedron demo,polyhedron_3.zip} diff --git a/Property_map/doc/Property_map/PackageDescription.txt b/Property_map/doc/Property_map/PackageDescription.txt index 100328d94c8..eaf355f17dd 100644 --- a/Property_map/doc/Property_map/PackageDescription.txt +++ b/Property_map/doc/Property_map/PackageDescription.txt @@ -3,7 +3,7 @@ /*! \addtogroup PkgProperty_mapRef -\cgalPkgDescriptionBegin{CGAL and Boost Property Maps,PkgProperty_mapSummary} +\cgalPkgDescriptionBegin{CGAL and Boost Property Maps,PkgProperty_map} \cgalPkgPicture{property_map.png} \cgalPkgSummaryBegin \cgalPkgAuthors{Andreas Fabri and Laurent Saboret} diff --git a/QP_solver/doc/QP_solver/PackageDescription.txt b/QP_solver/doc/QP_solver/PackageDescription.txt index 5f136f6b41a..e1385de67d7 100644 --- a/QP_solver/doc/QP_solver/PackageDescription.txt +++ b/QP_solver/doc/QP_solver/PackageDescription.txt @@ -73,7 +73,7 @@ Programs can be written to an output stream in MPSFormat, using one of the follo /*! \addtogroup PkgQPSolverRef \todo check generated documentation -\cgalPkgDescriptionBegin{Linear and Quadratic Programming Solver,PkgQPSolverSummary} +\cgalPkgDescriptionBegin{Linear and Quadratic Programming Solver,PkgQPSolver} \cgalPkgPicture{qp.png} \cgalPkgSummaryBegin \cgalPkgAuthors{Kaspar Fischer, Bernd Gärtner, Sven Schönherr, and Frans Wessendorp} diff --git a/Ridges_3/doc/Ridges_3/PackageDescription.txt b/Ridges_3/doc/Ridges_3/PackageDescription.txt index 31774bc9931..d424d6cac85 100644 --- a/Ridges_3/doc/Ridges_3/PackageDescription.txt +++ b/Ridges_3/doc/Ridges_3/PackageDescription.txt @@ -6,7 +6,7 @@ /*! \addtogroup PkgRidges_3Ref \todo check generated documentation -\cgalPkgDescriptionBegin{Approximation of Ridges and Umbilics on Triangulated Surface Meshes,PkgRidges_3Summary} +\cgalPkgDescriptionBegin{Approximation of Ridges and Umbilics on Triangulated Surface Meshes,PkgRidges_3} \cgalPkgPicture{RidgesMechPartDetail.png} \cgalPkgSummaryBegin \cgalPkgAuthors{Marc Pouget and Frédéric Cazals} @@ -15,7 +15,7 @@ \cgalPkgSummaryEnd \cgalPkgShortInfoBegin \cgalPkgSince{3.3} -\cgalPkgDependsOn{\ref PkgSolverSummary} +\cgalPkgDependsOn{\ref PkgSolver} \cgalPkgBib{cgal:cp-arutsm} \cgalPkgLicense{\ref licensesGPL "GPL"} \cgalPkgShortInfoEnd diff --git a/Ridges_3/doc/Ridges_3/Ridges_3.txt b/Ridges_3/doc/Ridges_3/Ridges_3.txt index 440f0e25740..e30c67f6fc6 100644 --- a/Ridges_3/doc/Ridges_3/Ridges_3.txt +++ b/Ridges_3/doc/Ridges_3/Ridges_3.txt @@ -26,7 +26,7 @@ analysis. Based on the results of the article different parts of this singular ridge curve as well as umbilics on a surface given as a triangulated surface mesh. Differential quantities associated to the mesh vertices are assumed to be given for these -algorithms; such quantities may be computed by the package \ref PkgJet_fitting_3Summary. +algorithms; such quantities may be computed by the package \ref PkgJet_fitting_3. Note that this package needs the third party library \ref thirdpartyEigen for linear algebra operations. @@ -404,7 +404,7 @@ neighborhood. \subsection Ridges_3Exampleprogram Example Program The following program computes ridges and umbilics from an off -file.\cgalFootnote{Model data may be downloaded via ftp://ftp.mpi-sb.mpg.de/pub/outgoing/CGAL/Ridges_3_datafiles.tgz . The mechanical part model has been provided courtesy of Dassault System to produce \cgalFigureRef{figmechanical_crest_filteredintro}, due to copyright issues the available model is not the same, it is provided by the AIM\@SHAPE Shape Repository.} It uses the package \ref PkgJet_fitting_3Summary to estimate the differential +file.\cgalFootnote{Model data may be downloaded via ftp://ftp.mpi-sb.mpg.de/pub/outgoing/CGAL/Ridges_3_datafiles.tgz . The mechanical part model has been provided courtesy of Dassault System to produce \cgalFigureRef{figmechanical_crest_filteredintro}, due to copyright issues the available model is not the same, it is provided by the AIM\@SHAPE Shape Repository.} It uses the package \ref PkgJet_fitting_3 to estimate the differential quantities. The default output file gives rough data for visualization purpose, a verbose output file may also be asked for. Parameters are diff --git a/STL_Extension/doc/STL_Extension/PackageDescription.txt b/STL_Extension/doc/STL_Extension/PackageDescription.txt index 2717cce3dda..18af8772dde 100644 --- a/STL_Extension/doc/STL_Extension/PackageDescription.txt +++ b/STL_Extension/doc/STL_Extension/PackageDescription.txt @@ -12,7 +12,7 @@ /*! \addtogroup PkgStlExtensionRef -\cgalPkgDescriptionBegin{STL Extensions for CGAL,PkgStlExtensionSummary} +\cgalPkgDescriptionBegin{STL Extensions for CGAL,PkgStlExtension} \cgalPkgPicture{plusplus.png} \cgalPkgSummaryBegin \cgalPkgAuthors{Michael Hoffmann, Lutz Kettner, Sylvain Pion, and Ron Wein} diff --git a/Scale_space_reconstruction_3/doc/Scale_space_reconstruction_3/PackageDescription.txt b/Scale_space_reconstruction_3/doc/Scale_space_reconstruction_3/PackageDescription.txt index 959b2bd0a7d..ce3c2906a60 100644 --- a/Scale_space_reconstruction_3/doc/Scale_space_reconstruction_3/PackageDescription.txt +++ b/Scale_space_reconstruction_3/doc/Scale_space_reconstruction_3/PackageDescription.txt @@ -9,7 +9,7 @@ /*! \addtogroup PkgScaleSpaceReconstruction3Ref -\cgalPkgDescriptionBegin{Scale-Space Surface Reconstruction,PkgScaleSpaceReconstruction3Summary} +\cgalPkgDescriptionBegin{Scale-Space Surface Reconstruction,PkgScaleSpaceReconstruction3} \cgalPkgPicture{knot_thumb.png} \cgalPkgSummaryBegin \cgalPkgAuthors{Thijs van Lankveld} @@ -20,7 +20,7 @@ \cgalPkgSince{4.6} \cgalPkgBib{cgal:ssr3} \cgalPkgLicense{\ref licensesGPL "GPL" } -\cgalPkgDependsOn{\ref PkgAlphaShapes3Summary, \ref PkgSpatialSearchingDSummary, \ref PkgSolverSummary} +\cgalPkgDependsOn{\ref PkgAlphaShapes3, \ref PkgSpatialSearchingD, \ref PkgSolver} \cgalPkgShortInfoEnd \cgalPkgDescriptionEnd diff --git a/SearchStructures/doc/SearchStructures/PackageDescription.txt b/SearchStructures/doc/SearchStructures/PackageDescription.txt index 12b775c081e..aa3d3b6ab88 100644 --- a/SearchStructures/doc/SearchStructures/PackageDescription.txt +++ b/SearchStructures/doc/SearchStructures/PackageDescription.txt @@ -11,7 +11,7 @@ /*! \addtogroup PkgRangeSegmentTreesDRef \todo check generated documentation -\cgalPkgDescriptionBegin{dD Range and Segment Trees,PkgRangeSegmentTreesDSummary} +\cgalPkgDescriptionBegin{dD Range and Segment Trees,PkgRangeSegmentTreesD} \cgalPkgPicture{segment_tree.png} \cgalPkgSummaryBegin \cgalPkgAuthor{Gabriele Neyer} diff --git a/Segment_Delaunay_graph_2/doc/Segment_Delaunay_graph_2/PackageDescription.txt b/Segment_Delaunay_graph_2/doc/Segment_Delaunay_graph_2/PackageDescription.txt index 78913698102..7aa1920b67d 100644 --- a/Segment_Delaunay_graph_2/doc/Segment_Delaunay_graph_2/PackageDescription.txt +++ b/Segment_Delaunay_graph_2/doc/Segment_Delaunay_graph_2/PackageDescription.txt @@ -4,7 +4,7 @@ /*! \addtogroup PkgSegmentDelaunayGraph2Ref \todo check generated documentation -\cgalPkgDescriptionBegin{2D Segment Delaunay Graphs,PkgSegmentDelaunayGraph2Summary} +\cgalPkgDescriptionBegin{2D Segment Delaunay Graphs,PkgSegmentDelaunayGraph2} \cgalPkgPicture{svd.png} \cgalPkgSummaryBegin \cgalPkgAuthor{Menelaos Karavelas} @@ -13,7 +13,7 @@ \cgalPkgSummaryEnd \cgalPkgShortInfoBegin \cgalPkgSince{3.1} -\cgalPkgDependsOn{\ref PkgTDS2Summary} +\cgalPkgDependsOn{\ref PkgTDS2} \cgalPkgBib{cgal:k-sdg2} \cgalPkgLicense{\ref licensesGPL} \cgalPkgDemo{2D Segment Voronoi Diagram,segment_voronoi_diagram_2.zip} diff --git a/Segment_Delaunay_graph_Linf_2/doc/Segment_Delaunay_graph_Linf_2/PackageDescription.txt b/Segment_Delaunay_graph_Linf_2/doc/Segment_Delaunay_graph_Linf_2/PackageDescription.txt index 9218294b077..deae07a768a 100644 --- a/Segment_Delaunay_graph_Linf_2/doc/Segment_Delaunay_graph_Linf_2/PackageDescription.txt +++ b/Segment_Delaunay_graph_Linf_2/doc/Segment_Delaunay_graph_Linf_2/PackageDescription.txt @@ -6,7 +6,7 @@ \addtogroup PkgSDGLinfRef \todo check generated documentation -\cgalPkgDescriptionBegin{L Infinity Segment Delaunay Graphs,PkgSDGLinfSummary} +\cgalPkgDescriptionBegin{L Infinity Segment Delaunay Graphs,PkgSDGLinf} \cgalPkgPicture{sdglinf-small.png} \cgalPkgSummaryBegin @@ -19,7 +19,7 @@ the Voronoi diagram of a set of points and segments under the \cgalPkgShortInfoBegin \cgalPkgSince{4.7} -\cgalPkgDependsOn{\ref PkgSegmentDelaunayGraph2Summary} +\cgalPkgDependsOn{\ref PkgSegmentDelaunayGraph2} \cgalPkgBib{cgal:cdp-sdglinf2} \cgalPkgLicense{\ref licensesGPL "GPL"} \cgalPkgShortInfoEnd diff --git a/Segment_Delaunay_graph_Linf_2/doc/Segment_Delaunay_graph_Linf_2/Segment_Delaunay_graph_Linf_2.txt b/Segment_Delaunay_graph_Linf_2/doc/Segment_Delaunay_graph_Linf_2/Segment_Delaunay_graph_Linf_2.txt index 4750eb74287..40748ee0987 100644 --- a/Segment_Delaunay_graph_Linf_2/doc/Segment_Delaunay_graph_Linf_2/Segment_Delaunay_graph_Linf_2.txt +++ b/Segment_Delaunay_graph_Linf_2/doc/Segment_Delaunay_graph_Linf_2/Segment_Delaunay_graph_Linf_2.txt @@ -112,7 +112,7 @@ In general, the software design of the algorithms and traits for the corresponding algorithms and traits for the \f$ L_{2} \f$ Segment Delaunay graph. We implement the \f$ L_{\infty} \f$ classes as subclasses of corresponding \f$ L_{2} \f$ classes from the -package \ref PkgSegmentDelaunayGraph2Summary. +package \ref PkgSegmentDelaunayGraph2. The names of the \f$ L_{\infty} \f$ classes contain an additional `_Linf` after `graph`, in comparison with the corresponding \f$ L_{2} \f$ classes. For more details, see \cgalCite{cdgp-icms-2014}. diff --git a/Set_movable_separability_2/doc/Set_movable_separability_2/PackageDescription.txt b/Set_movable_separability_2/doc/Set_movable_separability_2/PackageDescription.txt index e5c495945f6..4375f343a6d 100644 --- a/Set_movable_separability_2/doc/Set_movable_separability_2/PackageDescription.txt +++ b/Set_movable_separability_2/doc/Set_movable_separability_2/PackageDescription.txt @@ -28,7 +28,7 @@ /*! \addtogroup PkgSetMovableSeparability2Ref -\cgalPkgDescriptionBegin{2D Movable Separability of Sets,PkgSetMovableSeparability2Summary} +\cgalPkgDescriptionBegin{2D Movable Separability of Sets,PkgSetMovableSeparability2} \cgalPkgPicture{Casting_2.png} \cgalPkgSummaryBegin \cgalPkgAuthors{Shahar Shamai, Efi Fogel} @@ -41,7 +41,7 @@ of separation.} \cgalPkgSummaryEnd \cgalPkgShortInfoBegin \cgalPkgSince{4.12} -\cgalPkgDependsOn{\ref PkgPolygon2Summary} +\cgalPkgDependsOn{\ref PkgPolygon2} \cgalPkgBib{cgal:sf-sms2} \cgalPkgLicense{\ref licensesGPL "GPL"} \cgalPkgShortInfoEnd diff --git a/Skin_surface_3/doc/Skin_surface_3/PackageDescription.txt b/Skin_surface_3/doc/Skin_surface_3/PackageDescription.txt index 911488ec95d..f6d3b35216b 100644 --- a/Skin_surface_3/doc/Skin_surface_3/PackageDescription.txt +++ b/Skin_surface_3/doc/Skin_surface_3/PackageDescription.txt @@ -5,7 +5,7 @@ /*! \addtogroup PkgSkinSurface3Ref -\cgalPkgDescriptionBegin{3D Skin Surface Meshing,PkgSkinSurface3Summary} +\cgalPkgDescriptionBegin{3D Skin Surface Meshing,PkgSkinSurface3} \cgalPkgPicture{small.png} \cgalPkgSummaryBegin \cgalPkgAuthor{Nico Kruithof} @@ -14,7 +14,7 @@ \cgalPkgSummaryEnd \cgalPkgShortInfoBegin \cgalPkgSince{3.3} -\cgalPkgDependsOn{\ref PkgTriangulation3Summary and \ref PkgPolyhedronSummary} +\cgalPkgDependsOn{\ref PkgTriangulation3 and \ref PkgPolyhedron} \cgalPkgBib{cgal:k-ssm3} \cgalPkgLicense{\ref licensesGPL "GPL"} \cgalPkgShortInfoEnd diff --git a/Snap_rounding_2/doc/Snap_rounding_2/PackageDescription.txt b/Snap_rounding_2/doc/Snap_rounding_2/PackageDescription.txt index ca292599232..6282cefaa19 100644 --- a/Snap_rounding_2/doc/Snap_rounding_2/PackageDescription.txt +++ b/Snap_rounding_2/doc/Snap_rounding_2/PackageDescription.txt @@ -4,7 +4,7 @@ /*! \addtogroup PkgSnapRounding2Ref \todo check generated documentation -\cgalPkgDescriptionBegin{2D Snap Rounding,PkgSnapRounding2Summary} +\cgalPkgDescriptionBegin{2D Snap Rounding,PkgSnapRounding2} \cgalPkgPicture{snap-detail.png} \cgalPkgSummaryBegin \cgalPkgAuthor{Eli Packer} @@ -13,7 +13,7 @@ \cgalPkgSummaryEnd \cgalPkgShortInfoBegin \cgalPkgSince{3.1} -\cgalPkgDependsOn{\ref PkgArrangement2Summary} +\cgalPkgDependsOn{\ref PkgArrangement2} \cgalPkgBib{cgal:p-sr2} \cgalPkgLicense{\ref licensesGPL "GPL"} \cgalPkgDemo{2D Snap Rounding,snap_rounding_2.zip} diff --git a/Solver_interface/doc/Solver_interface/PackageDescription.txt b/Solver_interface/doc/Solver_interface/PackageDescription.txt index d9156f46a6e..87ae83191dc 100644 --- a/Solver_interface/doc/Solver_interface/PackageDescription.txt +++ b/Solver_interface/doc/Solver_interface/PackageDescription.txt @@ -6,7 +6,7 @@ /*! \addtogroup PkgSolverRef -\cgalPkgDescriptionBegin{CGAL and Solvers,PkgSolverSummary} +\cgalPkgDescriptionBegin{CGAL and Solvers,PkgSolver} \cgalPkgPicture{solver.png} \cgalPkgSummaryBegin \cgalPkgAuthors{Simon Giraudot, Pierre Alliez, Frédéric Cazals, Gaël Guennebaud, Bruno Lévy, Marc Pouget, and Laurent Saboret} diff --git a/Solver_interface/doc/Solver_interface/Solver_interface.txt b/Solver_interface/doc/Solver_interface/Solver_interface.txt index d035a80dba0..fe32bfd5016 100644 --- a/Solver_interface/doc/Solver_interface/Solver_interface.txt +++ b/Solver_interface/doc/Solver_interface/Solver_interface.txt @@ -95,7 +95,7 @@ and \ref PkgJet_fitting_3Ref. At that time, these packages were relying on \sc{Taucs}, \sc{LAPACK}, \sc{BLAS} and \sc{OpenNL}. Gaël Guennebaud then introduced new models using the \ref thirdpartyEigen library that became the only supported models by \cgal. Later on the packages \ref -PkgMeanCurvatureSkeleton3Summary and \ref PkgSurfaceMeshDeformationSummary +PkgMeanCurvatureSkeleton3 and \ref PkgSurfaceMeshDeformation extended the existing concepts. Simon Giraudot was responsible for gathering all concepts and classes, and also wrote this user manual diff --git a/Spatial_searching/doc/Spatial_searching/PackageDescription.txt b/Spatial_searching/doc/Spatial_searching/PackageDescription.txt index 2b24bd24432..65541683150 100644 --- a/Spatial_searching/doc/Spatial_searching/PackageDescription.txt +++ b/Spatial_searching/doc/Spatial_searching/PackageDescription.txt @@ -26,7 +26,7 @@ /*! \addtogroup PkgSpatialSearchingDRef -\cgalPkgDescriptionBegin{dD Spatial Searching,PkgSpatialSearchingDSummary} +\cgalPkgDescriptionBegin{dD Spatial Searching,PkgSpatialSearchingD} \cgalPkgPicture{windowQuery.png} \cgalPkgSummaryBegin \cgalPkgAuthors{Hans Tangelder and Andreas Fabri} diff --git a/Spatial_sorting/doc/Spatial_sorting/PackageDescription.txt b/Spatial_sorting/doc/Spatial_sorting/PackageDescription.txt index 1745cfc582c..540c0f22950 100644 --- a/Spatial_sorting/doc/Spatial_sorting/PackageDescription.txt +++ b/Spatial_sorting/doc/Spatial_sorting/PackageDescription.txt @@ -18,7 +18,7 @@ /*! \addtogroup PkgSpatialSortingRef -\cgalPkgDescriptionBegin{Spatial Sorting,PkgSpatialSortingSummary} +\cgalPkgDescriptionBegin{Spatial Sorting,PkgSpatialSorting} \cgalPkgPicture{hilbert.png} \cgalPkgSummaryBegin \cgalPkgAuthors{Christophe Delage and Olivier Devillers} diff --git a/Straight_skeleton_2/doc/Straight_skeleton_2/PackageDescription.txt b/Straight_skeleton_2/doc/Straight_skeleton_2/PackageDescription.txt index 28b00669641..c059450e274 100644 --- a/Straight_skeleton_2/doc/Straight_skeleton_2/PackageDescription.txt +++ b/Straight_skeleton_2/doc/Straight_skeleton_2/PackageDescription.txt @@ -13,7 +13,7 @@ /*! \addtogroup PkgStraightSkeleton2Ref -\cgalPkgDescriptionBegin{2D Straight Skeleton and Polygon Offsetting,PkgStraightSkeleton2Summary} +\cgalPkgDescriptionBegin{2D Straight Skeleton and Polygon Offsetting,PkgStraightSkeleton2} \cgalPkgPicture{Straight_skeleton_2/fig/StraightSkeletonTeaser.png} \cgalPkgSummaryBegin \cgalPkgAuthor{Fernando Cacciola} @@ -22,7 +22,7 @@ \cgalPkgSummaryEnd \cgalPkgShortInfoBegin \cgalPkgSince{3.2} -\cgalPkgDependsOn{\ref PkgHDSSummary} +\cgalPkgDependsOn{\ref PkgHDS} \cgalPkgBib{cgal:c-sspo2} \cgalPkgLicense{\ref licensesGPL "GPL"} \cgalPkgDemo{2D Straight Skeleton,straight_skeleton_2.zip,Operations on Polygons,polygon.zip} diff --git a/Stream_lines_2/doc/Stream_lines_2/PackageDescription.txt b/Stream_lines_2/doc/Stream_lines_2/PackageDescription.txt index 17fe3667949..3f0f938158c 100644 --- a/Stream_lines_2/doc/Stream_lines_2/PackageDescription.txt +++ b/Stream_lines_2/doc/Stream_lines_2/PackageDescription.txt @@ -4,7 +4,7 @@ /*! \addtogroup PkgPlacementOfStreamlines2Ref -\cgalPkgDescriptionBegin{2D Placement of Streamlines,PkgPlacementOfStreamlines2Summary} +\cgalPkgDescriptionBegin{2D Placement of Streamlines,PkgPlacementOfStreamlines2} \cgalPkgPicture{streamlines-small.jpg} \cgalPkgSummaryBegin \cgalPkgAuthor{Abdelkrim Mebarki} @@ -13,7 +13,7 @@ \cgalPkgSummaryEnd \cgalPkgShortInfoBegin \cgalPkgSince{3.2} -\cgalPkgDependsOn{\ref PkgTriangulation2Summary} +\cgalPkgDependsOn{\ref PkgTriangulation2} \cgalPkgBib{cgal:m-ps} \cgalPkgLicense{\ref licensesGPL "GPL"} \cgalPkgDemo{2D Stream Lines,streamlines.zip} diff --git a/Stream_support/doc/Stream_support/PackageDescription.txt b/Stream_support/doc/Stream_support/PackageDescription.txt index 0ecad560998..b4dd4deda41 100644 --- a/Stream_support/doc/Stream_support/PackageDescription.txt +++ b/Stream_support/doc/Stream_support/PackageDescription.txt @@ -3,7 +3,7 @@ /// \ingroup PkgIOstreamsRef /*! \addtogroup PkgIOstreamsRef -\cgalPkgDescriptionBegin{IO Streams,PkgIOstreamsSummary} +\cgalPkgDescriptionBegin{IO Streams,PkgIOstreams} \cgalPkgPicture{io.png} \cgalPkgSummaryBegin \cgalPkgAuthors{Andreas Fabri, Geert-Jan Giezeman, and Lutz Kettner} diff --git a/Subdivision_method_3/doc/Subdivision_method_3/NamedParameters.txt b/Subdivision_method_3/doc/Subdivision_method_3/NamedParameters.txt index 4accfce3524..65b644e812d 100644 --- a/Subdivision_method_3/doc/Subdivision_method_3/NamedParameters.txt +++ b/Subdivision_method_3/doc/Subdivision_method_3/NamedParameters.txt @@ -13,7 +13,7 @@ that default values of optional named parameters must be used. In the following, we assume that the type `PolygonMesh` is passed as template parameters of the functions, and is a model of the concept `MutableFaceGraph`. -The following named parameter, offered by the package \ref PkgBGLSummary +The following named parameter, offered by the package \ref PkgBGL (see \ref bgl_namedparameters), is used in this package: \cgalNPTableBegin diff --git a/Subdivision_method_3/doc/Subdivision_method_3/PackageDescription.txt b/Subdivision_method_3/doc/Subdivision_method_3/PackageDescription.txt index 8236ca110b6..ec174d75527 100644 --- a/Subdivision_method_3/doc/Subdivision_method_3/PackageDescription.txt +++ b/Subdivision_method_3/doc/Subdivision_method_3/PackageDescription.txt @@ -9,7 +9,7 @@ /*! \addtogroup PkgSurfaceSubdivisionMethods3Ref -\cgalPkgDescriptionBegin{3D Surface Subdivision Methods,PkgSurfaceSubdivisionMethods3Summary} +\cgalPkgDescriptionBegin{3D Surface Subdivision Methods,PkgSurfaceSubdivisionMethods3} \cgalPkgPicture{twoheads-detail.png} \cgalPkgSummaryBegin \cgalPkgAuthor{Le-Jeng Andy Shiue} diff --git a/Surface_mesh/doc/Surface_mesh/PackageDescription.txt b/Surface_mesh/doc/Surface_mesh/PackageDescription.txt index 1707c8a7a3f..9e2d7ba88b5 100644 --- a/Surface_mesh/doc/Surface_mesh/PackageDescription.txt +++ b/Surface_mesh/doc/Surface_mesh/PackageDescription.txt @@ -11,13 +11,13 @@ /*! \addtogroup PkgSurface_mesh -\cgalPkgDescriptionBegin{Surface Mesh,PkgSurfaceMeshSummary} +\cgalPkgDescriptionBegin{Surface Mesh,PkgSurfaceMesh} \cgalPkgPicture{Surface_mesh_teaser.png} \cgalPkgSummaryBegin \cgalPkgAuthor{Mario Botsch, Daniel Sieger, Philipp Moeller, and Andreas Fabri} \cgalPkgDesc{The surface mesh class provided by this package is an implementation of the halfedge data structure allowing to represent polyhedral surfaces. It is -an alternative to the packages \ref PkgHDSSummary and \ref PkgPolyhedronSummary. +an alternative to the packages \ref PkgHDS and \ref PkgPolyhedron. The main differences are that it is indexed based and not pointer based, and that the mechanism for adding information to vertices, halfedges, edges, and faces is much simpler and can be used at runtime and not at compile time.} diff --git a/Surface_mesh/doc/Surface_mesh/Surface_mesh.txt b/Surface_mesh/doc/Surface_mesh/Surface_mesh.txt index b0dea9fa817..840e93a0f67 100644 --- a/Surface_mesh/doc/Surface_mesh/Surface_mesh.txt +++ b/Surface_mesh/doc/Surface_mesh/Surface_mesh.txt @@ -13,8 +13,8 @@ namespace CGAL { The class `Surface_mesh` is an implementation of a halfedge data structure and can be used to represent a polyhedral surface. -It is an alternative to the \cgal packages \ref PkgHDSSummary -and \ref PkgPolyhedronSummary. +It is an alternative to the \cgal packages \ref PkgHDS +and \ref PkgPolyhedron. The main difference is that it is indexed based and not pointer based. Additionally, the mechanism for adding information to vertices, halfedges, edges, and faces is much simpler and is done at runtime and not at compile time. @@ -29,11 +29,11 @@ When elements are removed, they are only marked as removed, and a garbage collection function must be called to really remove them. The class `Surface_mesh` can be used through its class member functions -as well as through the BGL API as described in the package \ref PkgBGLSummary, +as well as through the BGL API as described in the package \ref PkgBGL, as it is a model of the concepts `MutableFaceGraph` and `FaceListGraph`. Therefore it is possible to apply the algorithms of the packages -\ref PkgSurfaceMeshSimplificationSummary, -\ref PkgSurfaceSegmentationSummary, and \ref PkgSurfaceMeshDeformationSummary on a surface mesh. +\ref PkgSurfaceMeshSimplification, +\ref PkgSurfaceSegmentation, and \ref PkgSurfaceMeshDeformation on a surface mesh. \section sectionSurfaceMeshUsage Usage @@ -92,7 +92,7 @@ in a surface mesh: `Surface_mesh::opposite()`, `Surface_mesh::next()`, functions `Surface_mesh::halfedge()` allows to obtain the halfedge associated to a vertex and to a face. Alternatively, one may use the free functions with the same names -defined in the package \ref PkgBGLSummary. +defined in the package \ref PkgBGL. \cgalFigureBegin{FigSurfaceMeshConnectivity,connectivity.svg} Connectivity of halfedges and vertices in a surface mesh seen from outside. @@ -129,7 +129,7 @@ and alternatives for range-based loops. \section sectionSurfaceMesh_circulators Circulators Circulators around faces and around vertices are provided as class templates -in the package \ref PkgBGLSummary. +in the package \ref PkgBGL. Circulators around faces basically call `Surface_mesh::next()` in order to go from halfedge to halfedge counterclockwise around the face, and @@ -250,7 +250,7 @@ fall in the range `[0,num_vertices(g))` which is assumed in many of the algorithms. The class `Surface_mesh` is also a model of the concept `MutableFaceGraph` defined -in the package \ref PkgBGLSummary. This and similar concepts like `HalfedgeGraph` +in the package \ref PkgBGL. This and similar concepts like `HalfedgeGraph` refine the graph concepts of the BGL by introducing the notion of halfedges and faces, as well as cycles of halfedges around faces and around vertices. Again, there are similar types and functions, for example: @@ -268,7 +268,7 @@ Again, there are similar types and functions, for example: | etc. | | The BGL API described -in the package \ref PkgBGLSummary enables us to write geometric algorithms operating +in the package \ref PkgBGL enables us to write geometric algorithms operating on surface meshes, that work for any model of `FaceGraph`, or `MutableFaceGraph`. That is surface mesh simplification, deformation, or segmentation algorithms work for `Surface_mesh` and `Polyhedron_3`. @@ -380,12 +380,12 @@ This package is derived from an early version of Daniel Sieger and Mario Botsch %Surface_mesh \cgalCite{sieger2011design}, which is inspired from the design of OpenMesh and the \cgal package -\ref PkgPolyhedronSummary. +\ref PkgPolyhedron. Philipp Moeller and Andreas Fabri worked on the code so that iterators fulfill the requirements of the \stl iterator concepts, and changed the API so that it becomes a model of the concepts `MutableFaceGraph` -and `FaceListGraph` of the package \ref PkgBGLSummary. +and `FaceListGraph` of the package \ref PkgBGL. */ diff --git a/Surface_mesh/include/CGAL/Surface_mesh/Surface_mesh.h b/Surface_mesh/include/CGAL/Surface_mesh/Surface_mesh.h index 8ac55c3a311..836ddd637ef 100644 --- a/Surface_mesh/include/CGAL/Surface_mesh/Surface_mesh.h +++ b/Surface_mesh/include/CGAL/Surface_mesh/Surface_mesh.h @@ -269,7 +269,7 @@ namespace CGAL { /// \ingroup PkgSurface_mesh /// This class is a data structure that can be used as halfedge data structure or polyhedral /// surface. It is an alternative to the classes `HalfedgeDS` and `Polyhedron_3` - /// defined in the packages \ref PkgHDSSummary and \ref PkgPolyhedronSummary. + /// defined in the packages \ref PkgHDS and \ref PkgPolyhedron. /// The main difference is that it is indexed based and not pointer based, /// and that the mechanism for adding information to vertices, halfedges, edges, /// and faces is much simpler and done at runtime and not at compile time. diff --git a/Surface_mesh_deformation/doc/Surface_mesh_deformation/PackageDescription.txt b/Surface_mesh_deformation/doc/Surface_mesh_deformation/PackageDescription.txt index 8420fdd49d4..4e02411fe18 100644 --- a/Surface_mesh_deformation/doc/Surface_mesh_deformation/PackageDescription.txt +++ b/Surface_mesh_deformation/doc/Surface_mesh_deformation/PackageDescription.txt @@ -4,7 +4,7 @@ /*! \addtogroup PkgSurfaceMeshDeformationRef -\cgalPkgDescriptionBegin{Triangulated Surface Mesh Deformation,PkgSurfaceMeshDeformationSummary} +\cgalPkgDescriptionBegin{Triangulated Surface Mesh Deformation,PkgSurfaceMeshDeformation} \cgalPkgPicture{deform-ico.png} \cgalPkgSummaryBegin \cgalPkgAuthor{Sébastien Loriot, Olga Sorkine-Hornung, Yin Xu and Ilker %O. Yaz} @@ -14,7 +14,7 @@ under positional constraints of some of its vertices, without requiring any addi \cgalPkgSummaryEnd \cgalPkgShortInfoBegin \cgalPkgSince{4.5} -\cgalPkgDependsOn{\ref PkgSolverSummary and \ref thirdpartyEigen} +\cgalPkgDependsOn{\ref PkgSolver and \ref thirdpartyEigen} \cgalPkgBib{cgal:lsxy-tsmd} \cgalPkgLicense{\ref licensesGPL "GPL"} \cgalPkgDemo{Polyhedron demo,polyhedron_3.zip} diff --git a/Surface_mesh_parameterization/doc/Surface_mesh_parameterization/PackageDescription.txt b/Surface_mesh_parameterization/doc/Surface_mesh_parameterization/PackageDescription.txt index 03cb39c4d31..63dc4f130e4 100644 --- a/Surface_mesh_parameterization/doc/Surface_mesh_parameterization/PackageDescription.txt +++ b/Surface_mesh_parameterization/doc/Surface_mesh_parameterization/PackageDescription.txt @@ -3,7 +3,7 @@ /*! \addtogroup PkgSurfaceParameterizationRef -\cgalPkgDescriptionBegin{Triangulated Surface Mesh Parameterization,PkgSurfaceParameterizationSummary} +\cgalPkgDescriptionBegin{Triangulated Surface Mesh Parameterization,PkgSurfaceParameterization} \cgalPkgPicture{bimbaDetail.png} \cgalPkgSummaryBegin \cgalPkgAuthors{Laurent Saboret, Pierre Alliez, Bruno Lévy, Mael Rouxel-Labbé, and Andreas Fabri} @@ -19,7 +19,7 @@ The code is generic and works with any model of the `FaceGraph` concept.} \cgalPkgSummaryEnd \cgalPkgShortInfoBegin \cgalPkgSince{3.2} -\cgalPkgDependsOn{\ref PkgSolverSummary} +\cgalPkgDependsOn{\ref PkgSolver} \cgalPkgBib{cgal:salf-pptsm2} \cgalPkgLicense{\ref licensesGPL "GPL"} \cgalPkgDemo{Polyhedron demo,polyhedron_3.zip} diff --git a/Surface_mesh_parameterization/doc/Surface_mesh_parameterization/Surface_mesh_parameterization.txt b/Surface_mesh_parameterization/doc/Surface_mesh_parameterization/Surface_mesh_parameterization.txt index a94c5bcf38d..8e2cb7c33fa 100644 --- a/Surface_mesh_parameterization/doc/Surface_mesh_parameterization/Surface_mesh_parameterization.txt +++ b/Surface_mesh_parameterization/doc/Surface_mesh_parameterization/Surface_mesh_parameterization.txt @@ -52,7 +52,7 @@ disk-or-sphere topology requirement. Since parameterizing meshes requires an efficient representation of sparse matrices and efficient iterative or direct linear solvers, we provide a unified interface to linear solvers as described in Chapter -\ref PkgSolverSummary. +\ref PkgSolver. Note that linear solvers commonly use double precision floating point numbers. Therefore, this package is intended to be used with a \cgal %Cartesian kernel with doubles. @@ -90,7 +90,7 @@ and homeomorphic to a disc (possibly with holes). The last requirement is not hard and we will later show how to parameterize a mesh that is not a topological disk (Section \ref secCuttingaMesh). The result is stored in a property map (whose type is here VertexUVMap) -for the mesh vertices. See also Chapter \ref PkgProperty_mapSummary. +for the mesh vertices. See also Chapter \ref PkgProperty_map. \subsection Surface_mesh_parameterizationDefaultExample Default Parameterization Example In the following example, we apply the default parameterization (Floater Mean Value diff --git a/Surface_mesh_segmentation/doc/Surface_mesh_segmentation/PackageDescription.txt b/Surface_mesh_segmentation/doc/Surface_mesh_segmentation/PackageDescription.txt index f311d083dfe..702d07f6493 100644 --- a/Surface_mesh_segmentation/doc/Surface_mesh_segmentation/PackageDescription.txt +++ b/Surface_mesh_segmentation/doc/Surface_mesh_segmentation/PackageDescription.txt @@ -7,7 +7,7 @@ /*! \addtogroup PkgSurfaceSegmentationRef -\cgalPkgDescriptionBegin{Triangulated Surface Mesh Segmentation,PkgSurfaceSegmentationSummary} +\cgalPkgDescriptionBegin{Triangulated Surface Mesh Segmentation,PkgSurfaceSegmentation} \cgalPkgPicture{segmentation_ico.png} \cgalPkgSummaryBegin @@ -22,7 +22,7 @@ \cgalPkgShortInfoBegin \cgalPkgSince{4.4} -\cgalPkgDependsOn{\ref PkgAABB_treeSummary} +\cgalPkgDependsOn{\ref PkgAABB_tree} \cgalPkgBib{cgal:y-smsimpl} \cgalPkgLicense{\ref licensesGPL "GPL"} \cgalPkgDemo{Polyhedron demo,polyhedron_3.zip} diff --git a/Surface_mesh_segmentation/doc/Surface_mesh_segmentation/Surface_Mesh_Segmentation.txt b/Surface_mesh_segmentation/doc/Surface_mesh_segmentation/Surface_Mesh_Segmentation.txt index 4d91a642741..6bb766105b4 100644 --- a/Surface_mesh_segmentation/doc/Surface_mesh_segmentation/Surface_Mesh_Segmentation.txt +++ b/Surface_mesh_segmentation/doc/Surface_mesh_segmentation/Surface_Mesh_Segmentation.txt @@ -174,7 +174,7 @@ the following properties: \note The current implementation executes fine on meshes that do not match some of these properties but may produce unreliable or meaningless segmentations. -The current implementation of the computation of the SDF values relies on the \ref PkgAABB_treeSummary package. +The current implementation of the computation of the SDF values relies on the \ref PkgAABB_tree package. This operation is reliable when the `AABBTraits` model provided has exact predicates. `::CGAL::Exact_predicates_inexact_constructions_kernel` is recommended as geometric traits for this algorithm. diff --git a/Surface_mesh_shortest_path/doc/Surface_mesh_shortest_path/PackageDescription.txt b/Surface_mesh_shortest_path/doc/Surface_mesh_shortest_path/PackageDescription.txt index ecb84fd86d1..97fe67ef39b 100644 --- a/Surface_mesh_shortest_path/doc/Surface_mesh_shortest_path/PackageDescription.txt +++ b/Surface_mesh_shortest_path/doc/Surface_mesh_shortest_path/PackageDescription.txt @@ -15,7 +15,7 @@ \todo Add methods for computing the ridge tree using the output of the algorithm \todo Add methods for computing shortest paths from geodesic sources as well -\cgalPkgDescriptionBegin{Triangulated Surface Mesh Shortest Paths,PkgSurfaceMeshShortestPathSummary} +\cgalPkgDescriptionBegin{Triangulated Surface Mesh Shortest Paths,PkgSurfaceMeshShortestPath} \cgalPkgPicture{shortestpathspackage-ico.png} \cgalPkgSummaryBegin \cgalPkgAuthors{Stephen Kiazyk, Sébastien Loriot, Éric Colin de Verdière} diff --git a/Surface_mesh_simplification/doc/Surface_mesh_simplification/NamedParameters.txt b/Surface_mesh_simplification/doc/Surface_mesh_simplification/NamedParameters.txt index fd764a017fa..123c4dcfd03 100644 --- a/Surface_mesh_simplification/doc/Surface_mesh_simplification/NamedParameters.txt +++ b/Surface_mesh_simplification/doc/Surface_mesh_simplification/NamedParameters.txt @@ -26,7 +26,7 @@ designates the formal argument, the order of named parameters in the list is tot In the following, we assume that the type `TriangleMesh` is passed as template parameters of the functions, and is a model of the concept `MutableFaceGraph`. -The following named parameters, offered by the package \ref PkgBGLSummary +The following named parameters, offered by the package \ref PkgBGL (see \ref bgl_namedparameters), are used in this package: \cgalNPTableBegin diff --git a/Surface_mesh_simplification/doc/Surface_mesh_simplification/PackageDescription.txt b/Surface_mesh_simplification/doc/Surface_mesh_simplification/PackageDescription.txt index a288593c70a..4e7034f0578 100644 --- a/Surface_mesh_simplification/doc/Surface_mesh_simplification/PackageDescription.txt +++ b/Surface_mesh_simplification/doc/Surface_mesh_simplification/PackageDescription.txt @@ -4,7 +4,7 @@ /*! \addtogroup PkgSurfaceMeshSimplificationRef \todo check generated documentation -\cgalPkgDescriptionBegin{Triangulated Surface Mesh Simplification,PkgSurfaceMeshSimplificationSummary} +\cgalPkgDescriptionBegin{Triangulated Surface Mesh Simplification,PkgSurfaceMeshSimplification} \cgalPkgPicture{SMS-detail.png} \cgalPkgSummaryBegin \cgalPkgAuthor{Fernando Cacciola} diff --git a/Surface_mesh_skeletonization/doc/Surface_mesh_skeletonization/PackageDescription.txt b/Surface_mesh_skeletonization/doc/Surface_mesh_skeletonization/PackageDescription.txt index e563a161fa4..971513048cb 100644 --- a/Surface_mesh_skeletonization/doc/Surface_mesh_skeletonization/PackageDescription.txt +++ b/Surface_mesh_skeletonization/doc/Surface_mesh_skeletonization/PackageDescription.txt @@ -4,7 +4,7 @@ /*! \addtogroup PkgMeanCurvatureSkeleton3Ref -\cgalPkgDescriptionBegin{Triangulated Surface Mesh Skeletonization,PkgMeanCurvatureSkeleton3Summary} +\cgalPkgDescriptionBegin{Triangulated Surface Mesh Skeletonization,PkgMeanCurvatureSkeleton3} \cgalPkgPicture{mcfskel-small.png} \cgalPkgSummaryBegin \cgalPkgAuthor{Xiang Gao, Sébastien Loriot and Andrea Tagliasacchi} @@ -18,7 +18,7 @@ \cgalPkgSummaryEnd \cgalPkgShortInfoBegin \cgalPkgSince{4.7} -\cgalPkgDependsOn{ \ref PkgSolverSummary} +\cgalPkgDependsOn{ \ref PkgSolver} \cgalPkgBib{cgal:glt-tsms} \cgalPkgLicense{\ref licensesGPL "GPL"} \cgalPkgDemo{Polyhedron demo,polyhedron_3.zip} diff --git a/Surface_mesh_skeletonization/doc/Surface_mesh_skeletonization/Surface_mesh_skeletonization.txt b/Surface_mesh_skeletonization/doc/Surface_mesh_skeletonization/Surface_mesh_skeletonization.txt index db44b0a7723..6167dbc0e04 100644 --- a/Surface_mesh_skeletonization/doc/Surface_mesh_skeletonization/Surface_mesh_skeletonization.txt +++ b/Surface_mesh_skeletonization/doc/Surface_mesh_skeletonization/Surface_mesh_skeletonization.txt @@ -97,7 +97,7 @@ In this example, we show how to use the API of the class As a proof of concept, we show how to use the skeleton and the association of input vertices to skeleton to compute a segmentation of the input triangulated surface mesh using the package -\ref PkgSurfaceSegmentationSummary. +\ref PkgSurfaceSegmentation. The segmentation algorithm consists in computing a shape diameter function for each face of the input mesh, followed by solving a graph cut problem. Here we use the skeleton to define a new shape diameter function. diff --git a/Surface_mesher/doc/Surface_mesher/PackageDescription.txt b/Surface_mesher/doc/Surface_mesher/PackageDescription.txt index 1327a4e8006..ec3655b7dea 100644 --- a/Surface_mesher/doc/Surface_mesher/PackageDescription.txt +++ b/Surface_mesher/doc/Surface_mesher/PackageDescription.txt @@ -26,7 +26,7 @@ /*! \addtogroup PkgSurfaceMesher3Ref \todo check generated documentation -\cgalPkgDescriptionBegin{3D Surface Mesh Generation,PkgSurfaceMesher3Summary} +\cgalPkgDescriptionBegin{3D Surface Mesh Generation,PkgSurfaceMesher3} \cgalPkgPicture{segmented_head-small.png} \cgalPkgSummaryBegin \cgalPkgAuthors{Laurent Rineau and Mariette Yvinec} @@ -35,7 +35,7 @@ \cgalPkgSummaryEnd \cgalPkgShortInfoBegin \cgalPkgSince{3.2} -\cgalPkgDependsOn{\ref PkgTriangulation3Summary} +\cgalPkgDependsOn{\ref PkgTriangulation3} \cgalPkgBib{cgal:ry-smg} \cgalPkgLicense{\ref licensesGPL} \cgalPkgDemo{Surface Mesh Generator,surface_mesher.zip} diff --git a/Surface_sweep_2/doc/Surface_sweep_2/PackageDescription.txt b/Surface_sweep_2/doc/Surface_sweep_2/PackageDescription.txt index 028e5e2d45d..dc0a71a88a6 100644 --- a/Surface_sweep_2/doc/Surface_sweep_2/PackageDescription.txt +++ b/Surface_sweep_2/doc/Surface_sweep_2/PackageDescription.txt @@ -2,7 +2,7 @@ /*! \addtogroup PkgIntersectionOfCurves2Ref \todo check generated documentation -\cgalPkgDescriptionBegin{2D Intersection of Curves,PkgIntersectionOfCurves2Summary} +\cgalPkgDescriptionBegin{2D Intersection of Curves,PkgIntersectionOfCurves2} \cgalPkgPicture{Curve_intersections_2.png} \cgalPkgSummaryBegin \cgalPkgAuthors{Baruch Zukerman, Ron Wein, and Efi Fogel} @@ -11,7 +11,7 @@ \cgalPkgSummaryEnd \cgalPkgShortInfoBegin \cgalPkgSince{2.4} -\cgalPkgDependsOn{\ref PkgArrangement2Summary} +\cgalPkgDependsOn{\ref PkgArrangement2} \cgalPkgBib{cgal:wfz-ic2} \cgalPkgLicense{\ref licensesGPL "GPL"} \cgalPkgShortInfoEnd diff --git a/TDS_2/doc/TDS_2/PackageDescription.txt b/TDS_2/doc/TDS_2/PackageDescription.txt index b923cf39729..b5741586343 100644 --- a/TDS_2/doc/TDS_2/PackageDescription.txt +++ b/TDS_2/doc/TDS_2/PackageDescription.txt @@ -4,7 +4,7 @@ /*! \addtogroup PkgTDS2Ref \todo check generated documentation -\cgalPkgDescriptionBegin{2D Triangulation Data Structure,PkgTDS2Summary} +\cgalPkgDescriptionBegin{2D Triangulation Data Structure,PkgTDS2} \cgalPkgPicture{tds_small.png} \cgalPkgSummaryBegin \cgalPkgAuthors{Sylvain Pion and Mariette Yvinec} diff --git a/TDS_3/doc/TDS_3/PackageDescription.txt b/TDS_3/doc/TDS_3/PackageDescription.txt index e89ca7540e4..939d992cde2 100644 --- a/TDS_3/doc/TDS_3/PackageDescription.txt +++ b/TDS_3/doc/TDS_3/PackageDescription.txt @@ -9,7 +9,7 @@ /*! \addtogroup PkgTDS3Ref \todo check generated documentation -\cgalPkgDescriptionBegin{3D Triangulation Data Structure,PkgTDS3Summary} +\cgalPkgDescriptionBegin{3D Triangulation Data Structure,PkgTDS3} \cgalPkgPicture{tds3_small.png} \cgalPkgSummaryBegin \cgalPkgAuthors{Clément Jamin, Sylvain Pion and Monique Teillaud} diff --git a/Three/doc/Three/PackageDescription.txt b/Three/doc/Three/PackageDescription.txt index ee880d67e50..72012cfaaae 100644 --- a/Three/doc/Three/PackageDescription.txt +++ b/Three/doc/Three/PackageDescription.txt @@ -3,7 +3,7 @@ /*! \addtogroup PkgThreeRef -\cgalPkgDescriptionBegin{Three,PkgThreeSummary} +\cgalPkgDescriptionBegin{Three,PkgThree} \cgalPkgPicture{pkg-small.png} \cgalPkgSummaryBegin \cgalPkgAuthors{Laurent Rineau, Sebastien Loriot, Andreas Fabri, Maxime Gimeno} diff --git a/Triangulation/doc/Triangulation/PackageDescription.txt b/Triangulation/doc/Triangulation/PackageDescription.txt index a74336a10f8..bc863b04bc8 100644 --- a/Triangulation/doc/Triangulation/PackageDescription.txt +++ b/Triangulation/doc/Triangulation/PackageDescription.txt @@ -13,7 +13,7 @@ /*! \addtogroup PkgTriangulationsRef -\cgalPkgDescriptionBegin{dD Triangulations,PkgTriangulationsSummary} +\cgalPkgDescriptionBegin{dD Triangulations,PkgTriangulations} \cgalPkgPicture{Hypertriangle.png} \cgalPkgSummaryBegin \cgalPkgAuthors{Olivier Devillers, Samuel Hornus, and Clément Jamin} diff --git a/Triangulation_2/doc/Triangulation_2/PackageDescription.txt b/Triangulation_2/doc/Triangulation_2/PackageDescription.txt index 15544296896..da532e54375 100644 --- a/Triangulation_2/doc/Triangulation_2/PackageDescription.txt +++ b/Triangulation_2/doc/Triangulation_2/PackageDescription.txt @@ -27,7 +27,7 @@ /*! \addtogroup PkgTriangulation2Ref \todo check generated documentation -\cgalPkgDescriptionBegin{2D Triangulation,PkgTriangulation2Summary} +\cgalPkgDescriptionBegin{2D Triangulation,PkgTriangulation2} \cgalPkgPicture{cdt2d-small.png} \cgalPkgSummaryBegin \cgalPkgAuthor{Mariette Yvinec} @@ -36,7 +36,7 @@ \cgalPkgSummaryEnd \cgalPkgShortInfoBegin \cgalPkgSince{0.9} -\cgalPkgDependsOn{\ref PkgTDS2Summary} +\cgalPkgDependsOn{\ref PkgTDS2} \cgalPkgBib{cgal:y-t2} \cgalPkgLicense{\ref licensesGPL "GPL"} \cgalPkgDemo{Delaunay Triangulation,delaunay_triangulation_2.zip,Regular Triangulation,regular_triangulation_2.zip,Constrained Delaunay Triangulation,constrained_delaunay_triangulation_2.zip} diff --git a/Triangulation_3/doc/Triangulation_3/PackageDescription.txt b/Triangulation_3/doc/Triangulation_3/PackageDescription.txt index a3df66f26fa..e8d7828e926 100644 --- a/Triangulation_3/doc/Triangulation_3/PackageDescription.txt +++ b/Triangulation_3/doc/Triangulation_3/PackageDescription.txt @@ -23,7 +23,7 @@ /*! \addtogroup PkgTriangulation3Ref -\cgalPkgDescriptionBegin{3D Triangulations,PkgTriangulation3Summary} +\cgalPkgDescriptionBegin{3D Triangulations,PkgTriangulation3} \cgalPkgPicture{twotets.png} \cgalPkgSummaryBegin \cgalPkgAuthors{Clément Jamin, Sylvain Pion and Monique Teillaud} @@ -32,7 +32,7 @@ \cgalPkgSummaryEnd \cgalPkgShortInfoBegin \cgalPkgSince{2.1} -\cgalPkgDependsOn{\ref PkgTDS3Summary} +\cgalPkgDependsOn{\ref PkgTDS3} \cgalPkgBib{cgal:pt-t3} \cgalPkgLicense{\ref licensesGPL "GPL" } \cgalPkgDemo{3D Triangulations,triangulation_3.zip} diff --git a/Visibility_2/doc/Visibility_2/PackageDescription.txt b/Visibility_2/doc/Visibility_2/PackageDescription.txt index 4b822f96c03..d3e12dec665 100644 --- a/Visibility_2/doc/Visibility_2/PackageDescription.txt +++ b/Visibility_2/doc/Visibility_2/PackageDescription.txt @@ -8,7 +8,7 @@ /*! \addtogroup PkgVisibility_2Ref -\cgalPkgDescriptionBegin{2D Visibility Computation,PkgVisibility_2Summary} +\cgalPkgDescriptionBegin{2D Visibility Computation,PkgVisibility_2} \cgalPkgPicture{visibility-teaser-thumbnail.png} \cgalPkgSummaryBegin \cgalPkgAuthors{Michael Hemmer, Kan Huang, Francisc Bungiu, Ning Xu} @@ -18,8 +18,8 @@ the visibility area of a point within polygonal regions in two dimensions.} \cgalPkgSummaryEnd \cgalPkgShortInfoBegin \cgalPkgSince{4.7} -\cgalPkgDependsOn{\ref PkgArrangement2Summary} -\cgalPkgDependsOn{\ref PkgTriangulation2Summary} +\cgalPkgDependsOn{\ref PkgArrangement2} +\cgalPkgDependsOn{\ref PkgTriangulation2} \cgalPkgBib{hhb-visibility-2} \cgalPkgLicense{\ref licensesGPL "GPL"} \cgalPkgShortInfoEnd diff --git a/Visibility_2/doc/Visibility_2/visibility_2.txt b/Visibility_2/doc/Visibility_2/visibility_2.txt index 3f571caac98..3a6ce9b5050 100644 --- a/Visibility_2/doc/Visibility_2/visibility_2.txt +++ b/Visibility_2/doc/Visibility_2/visibility_2.txt @@ -12,7 +12,7 @@ namespace CGAL { \section visibility_2_introduction Introduction This package provides functionality to compute the visibility region within polygons in two dimensions. -The package is based on the package \ref PkgArrangement2Summary and uses CGAL::Arrangement_2 +The package is based on the package \ref PkgArrangement2 and uses CGAL::Arrangement_2 as the fundamental class to specify the input as well as the output. Hence, a polygon \f$ P \f$ is represented by a bounded arrangement face \f$ f \f$ that does not have any isolated vertices and any edge that is adjacent to \f$ f \f$ separates \f$ f \f$ from another face. @@ -45,12 +45,12 @@ Therefore, this package offers also functionality to compute the regularized visibility area \f$ \overline{V_q} = closure(interior(V_q)) = (V_q\setminus\partial V_q) \cup \partial (V_q\setminus\partial V_q)\f$, as shown in \cgalFigureRef{definition-fig} (2). -For more information about regularization, refer to Chapter \ref PkgBooleanSetOperations2Summary. +For more information about regularization, refer to Chapter \ref PkgBooleanSetOperations2. \section visibility_2_classes Classes and Algorithms Answering visibility queries is, in many ways, similar to answering point-location queries. -Thus, we use the same design used to implement \ref PkgArrangement2Summary point location. +Thus, we use the same design used to implement \ref PkgArrangement2 point location. Each of the various visibility class templates employs a different algorithm or \em strategy for answering queries\cgalFootnote{The term \em strategy is borrowed from the diff --git a/Voronoi_diagram_2/doc/Voronoi_diagram_2/PackageDescription.txt b/Voronoi_diagram_2/doc/Voronoi_diagram_2/PackageDescription.txt index a6f4523bccb..72e428b2f1a 100644 --- a/Voronoi_diagram_2/doc/Voronoi_diagram_2/PackageDescription.txt +++ b/Voronoi_diagram_2/doc/Voronoi_diagram_2/PackageDescription.txt @@ -15,7 +15,7 @@ /*! \addtogroup PkgVoronoiDiagramAdaptor2Ref \todo check generated documentation -\cgalPkgDescriptionBegin{2D Voronoi Diagram Adaptor,PkgVoronoiDiagramAdaptor2Summary} +\cgalPkgDescriptionBegin{2D Voronoi Diagram Adaptor,PkgVoronoiDiagramAdaptor2} \cgalPkgPicture{voronoi.png} \cgalPkgSummaryBegin \cgalPkgAuthor{Menelaos Karavelas} From 3dd0aa112d49e8ad4e08346924ccff9180fc1236 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Loriot?= Date: Tue, 4 Sep 2018 11:26:30 +0200 Subject: [PATCH 096/268] rename macro not following the convention --- .../doc/AABB_tree/Concepts/AABBGeomTraits.h | 2 +- .../doc/AABB_tree/Concepts/AABBPrimitive.h | 2 +- .../Concepts/AABBPrimitiveWithSharedData.h | 2 +- .../Concepts/AABBRayIntersectionGeomTraits.h | 2 +- .../Concepts/AABBRayIntersectionTraits.h | 2 +- AABB_tree/doc/AABB_tree/Concepts/AABBTraits.h | 2 +- .../doc/AABB_tree/PackageDescription.txt | 12 ++--- .../CGAL/AABB_face_graph_triangle_primitive.h | 2 +- .../AABB_halfedge_graph_segment_primitive.h | 2 +- .../CGAL/AABB_polyhedron_segment_primitive.h | 2 +- .../CGAL/AABB_polyhedron_triangle_primitive.h | 2 +- AABB_tree/include/CGAL/AABB_primitive.h | 2 +- .../include/CGAL/AABB_segment_primitive.h | 2 +- AABB_tree/include/CGAL/AABB_traits.h | 2 +- AABB_tree/include/CGAL/AABB_tree.h | 2 +- .../include/CGAL/AABB_triangle_primitive.h | 2 +- .../AABB_triangulation_3_triangle_primitive.h | 2 +- BGL/doc/BGL/BGL.txt | 2 +- .../Barycentric_coordinates_2.txt | 2 +- .../Concepts/BarycentricCoordinates_2.h | 2 +- .../Concepts/BarycentricTraits_2.h | 2 +- .../PackageDescription.txt | 12 ++--- .../Discrete_harmonic_2.h | 2 +- .../Generalized_barycentric_coordinates_2.h | 2 +- .../Barycentric_coordinates_2/Mean_value_2.h | 2 +- .../Segment_coordinates_2.h | 2 +- .../Triangle_coordinates_2.h | 2 +- .../Barycentric_coordinates_2/Wachspress_2.h | 2 +- .../barycentric_enum_2.h | 2 +- .../doc/Documentation/Installation.txt | 4 +- .../CGAL/Monge_via_jet_fitting.h | 4 +- .../doc/Jet_fitting_3/Concepts/DataKernel.h | 2 +- .../doc/Jet_fitting_3/Concepts/LocalKernel.h | 2 +- .../doc/Jet_fitting_3/PackageDescription.txt | 12 ++--- .../Mesh_3/CGAL/Compact_mesh_cell_base_3.h | 2 +- .../Mesh_3/CGAL/Gray_image_mesh_domain_3.h | 2 +- Mesh_3/doc/Mesh_3/CGAL/IO/File_medit.h | 2 +- .../IO/facets_in_complex_3_to_triangle_mesh.h | 2 +- Mesh_3/doc/Mesh_3/CGAL/Image_3.h | 2 +- .../doc/Mesh_3/CGAL/Implicit_mesh_domain_3.h | 2 +- .../Implicit_to_labeling_function_wrapper.h | 2 +- .../Mesh_3/CGAL/Labeled_image_mesh_domain_3.h | 2 +- .../doc/Mesh_3/CGAL/Labeled_mesh_domain_3.h | 2 +- Mesh_3/doc/Mesh_3/CGAL/Mesh_cell_base_3.h | 2 +- Mesh_3/doc/Mesh_3/CGAL/Mesh_cell_criteria_3.h | 2 +- .../CGAL/Mesh_complex_3_in_triangulation_3.h | 2 +- .../CGAL/Mesh_constant_domain_field_3.h | 2 +- Mesh_3/doc/Mesh_3/CGAL/Mesh_criteria_3.h | 2 +- Mesh_3/doc/Mesh_3/CGAL/Mesh_edge_criteria_3.h | 2 +- .../doc/Mesh_3/CGAL/Mesh_facet_criteria_3.h | 2 +- Mesh_3/doc/Mesh_3/CGAL/Mesh_facet_topology.h | 2 +- Mesh_3/doc/Mesh_3/CGAL/Mesh_polyhedron_3.h | 2 +- Mesh_3/doc/Mesh_3/CGAL/Mesh_triangulation_3.h | 2 +- Mesh_3/doc/Mesh_3/CGAL/Mesh_vertex_base_3.h | 2 +- .../Mesh_3/CGAL/Polyhedral_mesh_domain_3.h | 2 +- .../Polyhedral_mesh_domain_with_features_3.h | 2 +- Mesh_3/doc/Mesh_3/CGAL/Triangle_accessor_3.h | 2 +- Mesh_3/doc/Mesh_3/CGAL/exude_mesh_3.h | 2 +- .../doc/Mesh_3/CGAL/lloyd_optimize_mesh_3.h | 2 +- Mesh_3/doc/Mesh_3/CGAL/make_mesh_3.h | 2 +- Mesh_3/doc/Mesh_3/CGAL/odt_optimize_mesh_3.h | 2 +- Mesh_3/doc/Mesh_3/CGAL/perturb_mesh_3.h | 2 +- Mesh_3/doc/Mesh_3/CGAL/refine_mesh_3.h | 28 +++++------ .../Concepts/BisectionGeometricTraits_3.h | 2 +- .../Concepts/IntersectionGeometricTraits_3.h | 2 +- Mesh_3/doc/Mesh_3/Concepts/MeshCellBase_3.h | 2 +- .../doc/Mesh_3/Concepts/MeshCellCriteria_3.h | 2 +- ...shComplexWithFeatures_3InTriangulation_3.h | 2 +- .../Concepts/MeshComplex_3InTriangulation_3.h | 2 +- .../Concepts/MeshCriteriaWithFeatures_3.h | 2 +- Mesh_3/doc/Mesh_3/Concepts/MeshCriteria_3.h | 2 +- .../doc/Mesh_3/Concepts/MeshDomainField_3.h | 2 +- .../Concepts/MeshDomainWithFeatures_3.h | 2 +- Mesh_3/doc/Mesh_3/Concepts/MeshDomain_3.h | 2 +- .../doc/Mesh_3/Concepts/MeshEdgeCriteria_3.h | 2 +- .../doc/Mesh_3/Concepts/MeshFacetCriteria_3.h | 2 +- Mesh_3/doc/Mesh_3/Concepts/MeshPolyline_3.h | 2 +- .../Concepts/MeshTriangulationTraits_3.h | 2 +- Mesh_3/doc/Mesh_3/Concepts/MeshVertexBase_3.h | 2 +- .../doc/Mesh_3/Concepts/TriangleAccessor_3.h | 2 +- Mesh_3/doc/Mesh_3/PackageDescription.txt | 40 +++++++-------- .../IO/facets_in_complex_3_to_triangle_mesh.h | 2 +- .../Mesh_domain_with_polyline_features_3.h | 2 +- .../CGAL/Polyhedral_complex_mesh_domain_3.h | 2 +- .../Minkowski_sum_2/PackageDescription.txt | 2 +- .../Minkowski_sum_2/AABB_tree_with_join.h | 2 +- ...t_to_labeled_subdomains_function_wrapper.h | 2 +- .../CGAL/Periodic_3_function_wrapper.h | 2 +- .../CGAL/Periodic_3_mesh_3/IO/File_medit.h | 2 +- .../CGAL/Periodic_3_mesh_triangulation_3.h | 2 +- .../CGAL/make_periodic_3_mesh_3.h | 2 +- .../CGAL/optimize_periodic_3_mesh_3.h | 8 +-- .../CGAL/refine_periodic_3_mesh_3.h | 2 +- .../Periodic_3MeshDomainWithFeatures_3.h | 2 +- .../Concepts/Periodic_3MeshDomain_3.h | 2 +- .../Periodic_3_mesh_3/PackageDescription.txt | 50 +++++++++---------- .../Periodic_3_mesh_3/Periodic_3_mesh_3.txt | 20 ++++---- .../Point_set_processing_3.txt | 2 +- .../include/CGAL/Polygon_mesh_slicer.h | 2 +- .../include/CGAL/Side_of_triangle_mesh.h | 2 +- .../doc/Property_map/PackageDescription.txt | 8 +-- Property_map/include/CGAL/property_map.h | 32 ++++++------ Ridges_3/doc/Ridges_3/CGAL/Ridges.h | 14 +++--- Ridges_3/doc/Ridges_3/CGAL/Umbilics.h | 8 +-- Ridges_3/doc/Ridges_3/PackageDescription.txt | 12 ++--- Ridges_3/doc/Ridges_3/Ridges_3.txt | 4 +- .../doc/Solver_interface/Solver_interface.txt | 2 +- .../Surface_mesh_parameterization.txt | 2 +- .../PackageDescription.txt | 2 +- .../Surface_Mesh_Segmentation.txt | 2 +- .../CGAL/Rotational_sweep_visibility_2.h | 2 +- .../CGAL/Simple_polygon_visibility_2.h | 2 +- .../CGAL/Triangular_expansion_visibility_2.h | 2 +- .../doc/Visibility_2/Concepts/Visibility_2.h | 2 +- .../doc/Visibility_2/PackageDescription.txt | 16 +++--- 115 files changed, 240 insertions(+), 240 deletions(-) diff --git a/AABB_tree/doc/AABB_tree/Concepts/AABBGeomTraits.h b/AABB_tree/doc/AABB_tree/Concepts/AABBGeomTraits.h index ec017f1efe3..c5b4eb97f1b 100644 --- a/AABB_tree/doc/AABB_tree/Concepts/AABBGeomTraits.h +++ b/AABB_tree/doc/AABB_tree/Concepts/AABBGeomTraits.h @@ -1,6 +1,6 @@ /*! -\ingroup PkgAABB_treeConcepts +\ingroup PkgAABBTreeConcepts \cgalConcept The concept `AABBGeomTraits` defines the requirements for the first template parameter of the class `CGAL::AABB_traits`. It provides predicates and constructors to detect and compute intersections between query objects and the primitives stored in the AABB tree. In addition, it contains predicates and constructors to compute distances between a point query and the primitives stored in the AABB tree. diff --git a/AABB_tree/doc/AABB_tree/Concepts/AABBPrimitive.h b/AABB_tree/doc/AABB_tree/Concepts/AABBPrimitive.h index 93a4b42efee..64962d12741 100644 --- a/AABB_tree/doc/AABB_tree/Concepts/AABBPrimitive.h +++ b/AABB_tree/doc/AABB_tree/Concepts/AABBPrimitive.h @@ -1,6 +1,6 @@ /*! -\ingroup PkgAABB_treeConcepts +\ingroup PkgAABBTreeConcepts \cgalConcept The concept `AABBPrimitive` describes the requirements for the primitives stored in the AABB tree data structure. The concept encapsulates a type for the input datum (a geometric object) and an identifier (id) type through which those primitives are referred to. The concept `AABBPrimitive` also refines the concepts DefaultConstructible and Assignable. diff --git a/AABB_tree/doc/AABB_tree/Concepts/AABBPrimitiveWithSharedData.h b/AABB_tree/doc/AABB_tree/Concepts/AABBPrimitiveWithSharedData.h index 406c581c415..fb740edf212 100644 --- a/AABB_tree/doc/AABB_tree/Concepts/AABBPrimitiveWithSharedData.h +++ b/AABB_tree/doc/AABB_tree/Concepts/AABBPrimitiveWithSharedData.h @@ -1,5 +1,5 @@ /*! -\ingroup PkgAABB_treeConcepts +\ingroup PkgAABBTreeConcepts \cgalConcept The concept `AABBPrimitiveWithSharedData` describes the requirements for the primitives diff --git a/AABB_tree/doc/AABB_tree/Concepts/AABBRayIntersectionGeomTraits.h b/AABB_tree/doc/AABB_tree/Concepts/AABBRayIntersectionGeomTraits.h index 9cbf77a1183..22ce34118d3 100644 --- a/AABB_tree/doc/AABB_tree/Concepts/AABBRayIntersectionGeomTraits.h +++ b/AABB_tree/doc/AABB_tree/Concepts/AABBRayIntersectionGeomTraits.h @@ -1,5 +1,5 @@ /*! -\ingroup PkgAABB_treeConcepts +\ingroup PkgAABBTreeConcepts \cgalConcept The concept `AABBRayIntersectionGeomTraits` is a refinement of the diff --git a/AABB_tree/doc/AABB_tree/Concepts/AABBRayIntersectionTraits.h b/AABB_tree/doc/AABB_tree/Concepts/AABBRayIntersectionTraits.h index 68d3d4d3a68..dfe82f27d01 100644 --- a/AABB_tree/doc/AABB_tree/Concepts/AABBRayIntersectionTraits.h +++ b/AABB_tree/doc/AABB_tree/Concepts/AABBRayIntersectionTraits.h @@ -1,5 +1,5 @@ /*! -\ingroup PkgAABB_treeConcepts +\ingroup PkgAABBTreeConcepts \cgalConcept The concept `AABBRayIntersectionTraits` is a refinement of the concept diff --git a/AABB_tree/doc/AABB_tree/Concepts/AABBTraits.h b/AABB_tree/doc/AABB_tree/Concepts/AABBTraits.h index 123bda80c47..635c2a4d27a 100644 --- a/AABB_tree/doc/AABB_tree/Concepts/AABBTraits.h +++ b/AABB_tree/doc/AABB_tree/Concepts/AABBTraits.h @@ -1,6 +1,6 @@ /*! -\ingroup PkgAABB_treeConcepts +\ingroup PkgAABBTreeConcepts \cgalConcept The concept `AABBTraits` provides the geometric primitive types and methods for the class `CGAL::AABB_tree`. diff --git a/AABB_tree/doc/AABB_tree/PackageDescription.txt b/AABB_tree/doc/AABB_tree/PackageDescription.txt index a852060aa94..7df50a91fd1 100644 --- a/AABB_tree/doc/AABB_tree/PackageDescription.txt +++ b/AABB_tree/doc/AABB_tree/PackageDescription.txt @@ -1,16 +1,16 @@ -/// \defgroup PkgAABB_treeRef AABB Tree Reference +/// \defgroup PkgAABBTreeRef AABB Tree Reference -/// \defgroup PkgAABB_treeConcepts Concepts -/// \ingroup PkgAABB_treeRef +/// \defgroup PkgAABBTreeConcepts Concepts +/// \ingroup PkgAABBTreeRef /*! -\addtogroup PkgAABB_treeRef -\cgalPkgDescriptionBegin{3D Fast Intersection and Distance Computation,PkgAABB_tree} +\addtogroup PkgAABBTreeRef +\cgalPkgDescriptionBegin{3D Fast Intersection and Distance Computation,PkgAABBTree} \cgalPkgPicture{aabb-teaser-thumb.png} \cgalPkgSummaryBegin \cgalPkgAuthors{Pierre Alliez, Stéphane Tayeb, Camille Wormser} \cgalPkgDesc{The AABB (axis-aligned bounding box) tree component offers a static data structure and algorithms to perform efficient intersection and distance queries on sets of finite 3D geometric objects.} -\cgalPkgManuals{Chapter_3D_Fast_Intersection_and_Distance_Computation,PkgAABB_treeRef} +\cgalPkgManuals{Chapter_3D_Fast_Intersection_and_Distance_Computation,PkgAABBTreeRef} \cgalPkgSummaryEnd \cgalPkgShortInfoBegin \cgalPkgSince{3.5} diff --git a/AABB_tree/include/CGAL/AABB_face_graph_triangle_primitive.h b/AABB_tree/include/CGAL/AABB_face_graph_triangle_primitive.h index c5a2ce6fae2..ebb695c485e 100644 --- a/AABB_tree/include/CGAL/AABB_face_graph_triangle_primitive.h +++ b/AABB_tree/include/CGAL/AABB_face_graph_triangle_primitive.h @@ -34,7 +34,7 @@ namespace CGAL { /*! - * \ingroup PkgAABB_treeRef + * \ingroup PkgAABBTreeRef * Primitive type for a facet of a polyhedral surface. * It wraps a handle to a facet of a polyhedron to a 3D triangle. * The polyhedron from which the primitive is built should not be deleted diff --git a/AABB_tree/include/CGAL/AABB_halfedge_graph_segment_primitive.h b/AABB_tree/include/CGAL/AABB_halfedge_graph_segment_primitive.h index 5f64ce6ea49..99d1795d2c3 100644 --- a/AABB_tree/include/CGAL/AABB_halfedge_graph_segment_primitive.h +++ b/AABB_tree/include/CGAL/AABB_halfedge_graph_segment_primitive.h @@ -42,7 +42,7 @@ namespace CGAL { /*! - * \ingroup PkgAABB_treeRef + * \ingroup PkgAABBTreeRef * Primitive type for a edge of a polyhedral surface. * It wraps an `edge_descriptor` into a 3D segment. * The class model of `HalfedgeGraph` from which the primitive is built should not be deleted diff --git a/AABB_tree/include/CGAL/AABB_polyhedron_segment_primitive.h b/AABB_tree/include/CGAL/AABB_polyhedron_segment_primitive.h index dc407931a24..4db0f6eae75 100644 --- a/AABB_tree/include/CGAL/AABB_polyhedron_segment_primitive.h +++ b/AABB_tree/include/CGAL/AABB_polyhedron_segment_primitive.h @@ -40,7 +40,7 @@ namespace CGAL { -/// \addtogroup PkgAABB_treeRef +/// \addtogroup PkgAABBTreeRef /// @{ /// \deprecated This class is deprecated since \cgal 4.3, the class /// `AABB_halfedge_graph_segment_primitive` should be used instead. diff --git a/AABB_tree/include/CGAL/AABB_polyhedron_triangle_primitive.h b/AABB_tree/include/CGAL/AABB_polyhedron_triangle_primitive.h index 12c632640f9..92cc3e165ab 100644 --- a/AABB_tree/include/CGAL/AABB_polyhedron_triangle_primitive.h +++ b/AABB_tree/include/CGAL/AABB_polyhedron_triangle_primitive.h @@ -35,7 +35,7 @@ #include namespace CGAL { - /// \ingroup PkgAABB_treeRef + /// \ingroup PkgAABBTreeRef /// \deprecated This class is deprecated since \cgal 4.3, the class /// `AABB_face_graph_triangle_primitive` should be used instead. /// diff --git a/AABB_tree/include/CGAL/AABB_primitive.h b/AABB_tree/include/CGAL/AABB_primitive.h index 29cb908e32f..6e08c8800a2 100644 --- a/AABB_tree/include/CGAL/AABB_primitive.h +++ b/AABB_tree/include/CGAL/AABB_primitive.h @@ -57,7 +57,7 @@ public: #ifdef DOXYGEN_RUNNING /*! - * \ingroup PkgAABB_treeRef + * \ingroup PkgAABBTreeRef * Generic primitive type. * The two property maps which are template parameters of the class enable to get the datum and the reference point of * the primitive from the identifier. The last template parameter controls whether the primitive class holds a copy of the datum. diff --git a/AABB_tree/include/CGAL/AABB_segment_primitive.h b/AABB_tree/include/CGAL/AABB_segment_primitive.h index 2e9e483be53..872fa2f5b46 100644 --- a/AABB_tree/include/CGAL/AABB_segment_primitive.h +++ b/AABB_tree/include/CGAL/AABB_segment_primitive.h @@ -56,7 +56,7 @@ namespace internal { /*! - * \ingroup PkgAABB_treeRef + * \ingroup PkgAABBTreeRef * Primitive type that uses as identifier an iterator with a 3D segment as `value_type`. * The iterator from which the primitive is built should not be invalided * while the AABB tree holding the primitive is in use. diff --git a/AABB_tree/include/CGAL/AABB_traits.h b/AABB_tree/include/CGAL/AABB_traits.h index 26a457c4fda..9b5f3c43ea9 100644 --- a/AABB_tree/include/CGAL/AABB_traits.h +++ b/AABB_tree/include/CGAL/AABB_traits.h @@ -173,7 +173,7 @@ struct AABB_traits_base_2{ } } //end of namespace internal::AABB_tree -/// \addtogroup PkgAABB_treeRef +/// \addtogroup PkgAABBTreeRef /// @{ /// This traits class handles any type of 3D geometric diff --git a/AABB_tree/include/CGAL/AABB_tree.h b/AABB_tree/include/CGAL/AABB_tree.h index 078f3be02ee..2463a822191 100644 --- a/AABB_tree/include/CGAL/AABB_tree.h +++ b/AABB_tree/include/CGAL/AABB_tree.h @@ -44,7 +44,7 @@ namespace CGAL { -/// \addtogroup PkgAABB_treeRef +/// \addtogroup PkgAABBTreeRef /// @{ /** diff --git a/AABB_tree/include/CGAL/AABB_triangle_primitive.h b/AABB_tree/include/CGAL/AABB_triangle_primitive.h index 694d937830c..639a7dab307 100644 --- a/AABB_tree/include/CGAL/AABB_triangle_primitive.h +++ b/AABB_tree/include/CGAL/AABB_triangle_primitive.h @@ -56,7 +56,7 @@ namespace internal { /*! - * \ingroup PkgAABB_treeRef + * \ingroup PkgAABBTreeRef * Primitive type that uses as identifier an iterator with a 3D triangle as `value_type`. * The iterator from which the primitive is built should not be invalided * while the AABB tree holding the primitive is in use. diff --git a/AABB_tree/include/CGAL/AABB_triangulation_3_triangle_primitive.h b/AABB_tree/include/CGAL/AABB_triangulation_3_triangle_primitive.h index 7a09c780030..6cd04d5aca8 100644 --- a/AABB_tree/include/CGAL/AABB_triangulation_3_triangle_primitive.h +++ b/AABB_tree/include/CGAL/AABB_triangulation_3_triangle_primitive.h @@ -31,7 +31,7 @@ #include namespace CGAL { - // \ingroup PkgAABB_treeRef + // \ingroup PkgAABBTreeRef // Primitive type that wraps a facet handle of a CGAL::Triangulation_3, // which is used as id, and allows the construction of the datum on // the fly. Since only the facet handle is stored in this primitive, diff --git a/BGL/doc/BGL/BGL.txt b/BGL/doc/BGL/BGL.txt index 81bab2cecd3..4c80b3c2ec3 100644 --- a/BGL/doc/BGL/BGL.txt +++ b/BGL/doc/BGL/BGL.txt @@ -127,7 +127,7 @@ The data itself may be stored in the vertex or the edge, or it may be stored in an external data structure, or it may be computed on the fly. This is an implementation detail of a particular property map. -See also Chapter \ref PkgProperty_map. +See also Chapter \ref PkgPropertyMap. \subsection BGLVisitors Visitors diff --git a/Barycentric_coordinates_2/doc/Barycentric_coordinates_2/Barycentric_coordinates_2.txt b/Barycentric_coordinates_2/doc/Barycentric_coordinates_2/Barycentric_coordinates_2.txt index 1ab34f97b52..29e23c95690 100644 --- a/Barycentric_coordinates_2/doc/Barycentric_coordinates_2/Barycentric_coordinates_2.txt +++ b/Barycentric_coordinates_2/doc/Barycentric_coordinates_2/Barycentric_coordinates_2.txt @@ -26,7 +26,7 @@ Segment and triangle coordinates can be computed by using either a global functi Any point in the plane may be taken as a query point. However, we do not recommend to use Wachspress and discrete harmonic coordinates with query points outside the closure of a polygon because at some of those points these coordinates are not well-defined, as explained in the Section \ref gbc_degeneracies. -Once instantiated for some polygon, the coordinates can be computed multiple times for different query points with respect to all the vertices of the provided polygon. Use the \ref PkgBarycentric_coordinates_2Ref "Reference Manual" for the detailed interface. +Once instantiated for some polygon, the coordinates can be computed multiple times for different query points with respect to all the vertices of the provided polygon. Use the \ref PkgBarycentricCoordinates2Ref "Reference Manual" for the detailed interface. The output of the computation is a set of coordinate values at the current query point with respect to all the vertices of the polygon. This output can be stored in an arbitrary container providing an appropriate output iterator. In addition, all the classes return a pointer to the last stored element and a status of the computation (Boolean true or false). diff --git a/Barycentric_coordinates_2/doc/Barycentric_coordinates_2/Concepts/BarycentricCoordinates_2.h b/Barycentric_coordinates_2/doc/Barycentric_coordinates_2/Concepts/BarycentricCoordinates_2.h index 961c9de9c45..3d90dd14ef9 100644 --- a/Barycentric_coordinates_2/doc/Barycentric_coordinates_2/Concepts/BarycentricCoordinates_2.h +++ b/Barycentric_coordinates_2/doc/Barycentric_coordinates_2/Concepts/BarycentricCoordinates_2.h @@ -1,5 +1,5 @@ /*! -\ingroup PkgBarycentric_coordinates_2Concepts +\ingroup PkgBarycentricCoordinates2Concepts \cgalConcept Requirements of the template parameter `Coordinate_2` for the class `CGAL::Barycentric_coordinates::Generalized_barycentric_coordinates_2`. diff --git a/Barycentric_coordinates_2/doc/Barycentric_coordinates_2/Concepts/BarycentricTraits_2.h b/Barycentric_coordinates_2/doc/Barycentric_coordinates_2/Concepts/BarycentricTraits_2.h index b79617eea76..ae63a83a518 100644 --- a/Barycentric_coordinates_2/doc/Barycentric_coordinates_2/Concepts/BarycentricTraits_2.h +++ b/Barycentric_coordinates_2/doc/Barycentric_coordinates_2/Concepts/BarycentricTraits_2.h @@ -1,5 +1,5 @@ /*! -\ingroup PkgBarycentric_coordinates_2Concepts +\ingroup PkgBarycentricCoordinates2Concepts \cgalConcept Requirements of the template parameter `Traits` for all the classes with two-dimensional barycentric coordinates from the namespace `CGAL::Barycentric_coordinates`. diff --git a/Barycentric_coordinates_2/doc/Barycentric_coordinates_2/PackageDescription.txt b/Barycentric_coordinates_2/doc/Barycentric_coordinates_2/PackageDescription.txt index 11d81b173f2..73e02ea085b 100644 --- a/Barycentric_coordinates_2/doc/Barycentric_coordinates_2/PackageDescription.txt +++ b/Barycentric_coordinates_2/doc/Barycentric_coordinates_2/PackageDescription.txt @@ -1,17 +1,17 @@ -/// \defgroup PkgBarycentric_coordinates_2Ref 2D Generalized Barycentric Coordinates Reference +/// \defgroup PkgBarycentricCoordinates2Ref 2D Generalized Barycentric Coordinates Reference -/// \defgroup PkgBarycentric_coordinates_2Concepts Concepts -/// \ingroup PkgBarycentric_coordinates_2Ref +/// \defgroup PkgBarycentricCoordinates2Concepts Concepts +/// \ingroup PkgBarycentricCoordinates2Ref /*! -\addtogroup PkgBarycentric_coordinates_2Ref -\cgalPkgDescriptionBegin{2D Generalized Barycentric Coordinates, PkgBarycentric_coordinates_2} +\addtogroup PkgBarycentricCoordinates2Ref +\cgalPkgDescriptionBegin{2D Generalized Barycentric Coordinates, PkgBarycentricCoordinates2} \cgalPkgPicture{barcoord_thumb.png} \cgalPkgSummaryBegin \cgalPkgAuthors{Dmitry Anisimov, David Bommes, Kai Hormann, and Pierre Alliez} \cgalPkgDesc{The package 2D Generalized Barycentric Coordinates offers an efficient and robust implementation of two-dimensional closed-form generalized barycentric coordinates defined for simple two-dimensional polygons. If coordinates with respect to multivariate scattered points instead of a polygon are required, please refer to natural neighbor coordinates from the Package \ref PkgInterpolation2.} -\cgalPkgManuals{Chapter_2D_Generalized_Barycentric_Coordinates, PkgBarycentric_coordinates_2Ref} +\cgalPkgManuals{Chapter_2D_Generalized_Barycentric_Coordinates, PkgBarycentricCoordinates2Ref} \cgalPkgSummaryEnd \cgalPkgShortInfoBegin \cgalPkgSince{4.6} diff --git a/Barycentric_coordinates_2/include/CGAL/Barycentric_coordinates_2/Discrete_harmonic_2.h b/Barycentric_coordinates_2/include/CGAL/Barycentric_coordinates_2/Discrete_harmonic_2.h index 210ad73abd7..c906a697198 100644 --- a/Barycentric_coordinates_2/include/CGAL/Barycentric_coordinates_2/Discrete_harmonic_2.h +++ b/Barycentric_coordinates_2/include/CGAL/Barycentric_coordinates_2/Discrete_harmonic_2.h @@ -49,7 +49,7 @@ namespace Barycentric_coordinates { // [1] Reference: "M. S. Floater, K. Hormann, and G. Kos. A general construction of barycentric coordinates over convex polygons. Advances in Computational Mathematics, 24(1-4):311-331, 2006.". /*! - * \ingroup PkgBarycentric_coordinates_2Ref + * \ingroup PkgBarycentricCoordinates2Ref * The class `Discrete_harmonic_2` implements 2D discrete harmonic coordinates ( \cite cgal:bc:fhk-gcbcocp-06, \cite cgal:pp-cdmsc-93, \cite cgal:bc:eddhls-maam-95 ). * This class is parameterized by a traits class `Traits`, and it is used as a coordinate class to complete the class `Generalized_barycentric_coordinates_2`. * For a polygon with three vertices (triangle) it is better to use the class `Triangle_coordinates_2`. diff --git a/Barycentric_coordinates_2/include/CGAL/Barycentric_coordinates_2/Generalized_barycentric_coordinates_2.h b/Barycentric_coordinates_2/include/CGAL/Barycentric_coordinates_2/Generalized_barycentric_coordinates_2.h index d40da83df11..5a214236086 100644 --- a/Barycentric_coordinates_2/include/CGAL/Barycentric_coordinates_2/Generalized_barycentric_coordinates_2.h +++ b/Barycentric_coordinates_2/include/CGAL/Barycentric_coordinates_2/Generalized_barycentric_coordinates_2.h @@ -48,7 +48,7 @@ namespace Barycentric_coordinates { // Examples: see the User Manual here - https://doc.cgal.org/latest/Manual/index.html. /*! - * \ingroup PkgBarycentric_coordinates_2Ref + * \ingroup PkgBarycentricCoordinates2Ref * The class `Generalized_barycentric_coordinates_2` implements generalized barycentric coordinates along the polygon's boundary and provides a common interface for all coordinate classes. * This class is parameterized by a coordinate class `Coordinate_2`, and a traits class `Traits`. diff --git a/Barycentric_coordinates_2/include/CGAL/Barycentric_coordinates_2/Mean_value_2.h b/Barycentric_coordinates_2/include/CGAL/Barycentric_coordinates_2/Mean_value_2.h index ac512446eed..af15ec92ac8 100644 --- a/Barycentric_coordinates_2/include/CGAL/Barycentric_coordinates_2/Mean_value_2.h +++ b/Barycentric_coordinates_2/include/CGAL/Barycentric_coordinates_2/Mean_value_2.h @@ -101,7 +101,7 @@ public: // [2] Reference: "M. S. Floater, Wachspress and mean value coordinates, to appear in the Proceedings of the 14th International Conference on Approximation Theory, G. Fasshauer and L. L. Schumaker (eds.)." /*! - * \ingroup PkgBarycentric_coordinates_2Ref + * \ingroup PkgBarycentricCoordinates2Ref * The class `Mean_value_2` implements 2D mean value coordinates ( \cite cgal:bc:hf-mvcapp-06, \cite cgal:bc:fhk-gcbcocp-06, \cite cgal:f-mvc-03 ). * This class is parameterized by a traits class `Traits`, and it is used as a coordinate class to complete the class `Generalized_barycentric_coordinates_2`. * For a polygon with three vertices (triangle) it is better to use the class `Triangle_coordinates_2`. diff --git a/Barycentric_coordinates_2/include/CGAL/Barycentric_coordinates_2/Segment_coordinates_2.h b/Barycentric_coordinates_2/include/CGAL/Barycentric_coordinates_2/Segment_coordinates_2.h index fd81433a06e..cbd74d8fb21 100644 --- a/Barycentric_coordinates_2/include/CGAL/Barycentric_coordinates_2/Segment_coordinates_2.h +++ b/Barycentric_coordinates_2/include/CGAL/Barycentric_coordinates_2/Segment_coordinates_2.h @@ -48,7 +48,7 @@ namespace Barycentric_coordinates { // Examples: see the User Manual - https://doc.cgal.org/latest/Manual/index.html. /*! - * \ingroup PkgBarycentric_coordinates_2Ref + * \ingroup PkgBarycentricCoordinates2Ref * The class `Segment_coordinates_2` implements barycentric coordinates with respect to an arbitrary non-degenerate segment along an arbitrary line in the plane. * This class is parameterized by a traits class `Traits`. diff --git a/Barycentric_coordinates_2/include/CGAL/Barycentric_coordinates_2/Triangle_coordinates_2.h b/Barycentric_coordinates_2/include/CGAL/Barycentric_coordinates_2/Triangle_coordinates_2.h index 82086944b5d..8d8222db4aa 100644 --- a/Barycentric_coordinates_2/include/CGAL/Barycentric_coordinates_2/Triangle_coordinates_2.h +++ b/Barycentric_coordinates_2/include/CGAL/Barycentric_coordinates_2/Triangle_coordinates_2.h @@ -49,7 +49,7 @@ namespace Barycentric_coordinates { // [1] Reference: Weisstein, Eric W. "Barycentric Coordinates." From MathWorld--A Wolfram Web Resource. http://mathworld.wolfram.com/BarycentricCoordinates.html. /*! - * \ingroup PkgBarycentric_coordinates_2Ref + * \ingroup PkgBarycentricCoordinates2Ref * The class `Triangle_coordinates_2` implements barycentric coordinates ( [1], * [2] ) with respect to an arbitrary non-degenerate triangle in the plane. * This class is parameterized by a traits class `Traits`. diff --git a/Barycentric_coordinates_2/include/CGAL/Barycentric_coordinates_2/Wachspress_2.h b/Barycentric_coordinates_2/include/CGAL/Barycentric_coordinates_2/Wachspress_2.h index 2f0775655ae..0e9d42fa317 100644 --- a/Barycentric_coordinates_2/include/CGAL/Barycentric_coordinates_2/Wachspress_2.h +++ b/Barycentric_coordinates_2/include/CGAL/Barycentric_coordinates_2/Wachspress_2.h @@ -49,7 +49,7 @@ namespace Barycentric_coordinates { // [1] Reference: "M. S. Floater, K. Hormann, and G. Kos. A general construction of barycentric coordinates over convex polygons. Advances in Computational Mathematics, 24(1-4):311-331, 2006.". /*! - * \ingroup PkgBarycentric_coordinates_2Ref + * \ingroup PkgBarycentricCoordinates2Ref * The class `Wachspress_2` implements 2D Wachspress coordinates ( \cite cgal:bc:fhk-gcbcocp-06, \cite cgal:bc:mlbd-gbcip-02, \cite cgal:bc:w-rfeb-75 ). * This class is parameterized by a traits class `Traits`, and it is used as a coordinate class to complete the class `Generalized_barycentric_coordinates_2`. * For a polygon with three vertices it is better to use the class `Triangle_coordinates_2`. diff --git a/Barycentric_coordinates_2/include/CGAL/Barycentric_coordinates_2/barycentric_enum_2.h b/Barycentric_coordinates_2/include/CGAL/Barycentric_coordinates_2/barycentric_enum_2.h index eb8cad0a6af..9f79c0227bd 100644 --- a/Barycentric_coordinates_2/include/CGAL/Barycentric_coordinates_2/barycentric_enum_2.h +++ b/Barycentric_coordinates_2/include/CGAL/Barycentric_coordinates_2/barycentric_enum_2.h @@ -32,7 +32,7 @@ namespace CGAL { /*! - * \ingroup PkgBarycentric_coordinates_2Ref + * \ingroup PkgBarycentricCoordinates2Ref * The namespace Barycentric_coordinates contains implementations of all generalized barycentric coordinates: 2D, 3D, related enumerations, and so on. */ diff --git a/Documentation/doc/Documentation/Installation.txt b/Documentation/doc/Documentation/Installation.txt index d36d66446ce..5941259a161 100644 --- a/Documentation/doc/Documentation/Installation.txt +++ b/Documentation/doc/Documentation/Installation.txt @@ -546,8 +546,8 @@ matrix sizes, various matrix decomposition methods and sparse linear solvers. In \cgal, \sc{Eigen} provides sparse linear solvers in the \ref PkgPoissonSurfaceReconstructionRef and the \ref PkgSurfaceParameterizationRef packages. -In addition, \sc{Eigen} also provides singular value decomposition for the \ref PkgJet_fitting_3Ref -and the \ref PkgRidges_3Ref packages. +In addition, \sc{Eigen} also provides singular value decomposition for the \ref PkgJetFitting3Ref +and the \ref PkgRidges3Ref packages. The \sc{Eigen} web site is `http://eigen.tuxfamily.org`. diff --git a/Jet_fitting_3/doc/Jet_fitting_3/CGAL/Monge_via_jet_fitting.h b/Jet_fitting_3/doc/Jet_fitting_3/CGAL/Monge_via_jet_fitting.h index 1d142275ebc..2bfe86e437a 100644 --- a/Jet_fitting_3/doc/Jet_fitting_3/CGAL/Monge_via_jet_fitting.h +++ b/Jet_fitting_3/doc/Jet_fitting_3/CGAL/Monge_via_jet_fitting.h @@ -1,7 +1,7 @@ namespace CGAL { /*! -\ingroup PkgJet_fitting_3Ref +\ingroup PkgJetFitting3Ref The class `Monge_via_jet_fitting` is designed to perform the estimation of the local differential quantities at a given point. The point range is @@ -39,7 +39,7 @@ public: /// @{ /*! -\ingroup PkgJet_fitting_3Ref +\ingroup PkgJetFitting3Ref The class `Monge_form` stores the Monge representation, i.e., the Monge coordinate system and the coefficients of the Monge form in this diff --git a/Jet_fitting_3/doc/Jet_fitting_3/Concepts/DataKernel.h b/Jet_fitting_3/doc/Jet_fitting_3/Concepts/DataKernel.h index 52107e77128..23f4f36fce0 100644 --- a/Jet_fitting_3/doc/Jet_fitting_3/Concepts/DataKernel.h +++ b/Jet_fitting_3/doc/Jet_fitting_3/Concepts/DataKernel.h @@ -1,6 +1,6 @@ /*! -\ingroup PkgJet_fitting_3Concepts +\ingroup PkgJetFitting3Concepts \cgalConcept The concept `DataKernel` describes the set of requirements to be diff --git a/Jet_fitting_3/doc/Jet_fitting_3/Concepts/LocalKernel.h b/Jet_fitting_3/doc/Jet_fitting_3/Concepts/LocalKernel.h index 93e8c849938..bd830a31714 100644 --- a/Jet_fitting_3/doc/Jet_fitting_3/Concepts/LocalKernel.h +++ b/Jet_fitting_3/doc/Jet_fitting_3/Concepts/LocalKernel.h @@ -1,6 +1,6 @@ /*! -\ingroup PkgJet_fitting_3Concepts +\ingroup PkgJetFitting3Concepts \cgalConcept The concept `LocalKernel` describes the set of requirements to be diff --git a/Jet_fitting_3/doc/Jet_fitting_3/PackageDescription.txt b/Jet_fitting_3/doc/Jet_fitting_3/PackageDescription.txt index 0337db041c2..9a021c311da 100644 --- a/Jet_fitting_3/doc/Jet_fitting_3/PackageDescription.txt +++ b/Jet_fitting_3/doc/Jet_fitting_3/PackageDescription.txt @@ -1,15 +1,15 @@ -/// \defgroup PkgJet_fitting_3Ref Estimation of Local Differential Properties of Point-Sampled Surfaces Reference -/// \defgroup PkgJet_fitting_3Concepts Concepts -/// \ingroup PkgJet_fitting_3Ref +/// \defgroup PkgJetFitting3Ref Estimation of Local Differential Properties of Point-Sampled Surfaces Reference +/// \defgroup PkgJetFitting3Concepts Concepts +/// \ingroup PkgJetFitting3Ref /*! -\addtogroup PkgJet_fitting_3Ref +\addtogroup PkgJetFitting3Ref \todo check generated documentation -\cgalPkgDescriptionBegin{Estimation of Local Differential Properties of Point-Sampled Surfaces,PkgJet_fitting_3} +\cgalPkgDescriptionBegin{Estimation of Local Differential Properties of Point-Sampled Surfaces,PkgJetFitting3} \cgalPkgPicture{DavidDetail.png} \cgalPkgSummaryBegin \cgalPkgAuthors{Marc Pouget and Frédéric Cazals} \cgalPkgDesc{For a surface discretized as a point cloud or a mesh, it is desirable to estimate pointwise differential quantities. More precisely, first order properties correspond to the normal or the tangent plane; second order properties provide the principal curvatures and directions, third order properties provide the directional derivatives of the principal curvatures along the curvature lines, etc. This package allows the estimation of local differential quantities of a surface from a point sample.} -\cgalPkgManuals{Chapter_Estimation_of_Local_Differential_Properties_of_Point-Sampled_Surfaces,PkgJet_fitting_3Ref} +\cgalPkgManuals{Chapter_Estimation_of_Local_Differential_Properties_of_Point-Sampled_Surfaces,PkgJetFitting3Ref} \cgalPkgSummaryEnd \cgalPkgShortInfoBegin \cgalPkgSince{3.3} diff --git a/Mesh_3/doc/Mesh_3/CGAL/Compact_mesh_cell_base_3.h b/Mesh_3/doc/Mesh_3/CGAL/Compact_mesh_cell_base_3.h index d6ac28deb44..9de1c57ecc6 100644 --- a/Mesh_3/doc/Mesh_3/CGAL/Compact_mesh_cell_base_3.h +++ b/Mesh_3/doc/Mesh_3/CGAL/Compact_mesh_cell_base_3.h @@ -1,7 +1,7 @@ namespace CGAL { /*! -\ingroup PkgMesh_3MeshClasses +\ingroup PkgMesh3MeshClasses The class `Compact_mesh_cell_base_3` is a model of the concept `MeshCellBase_3`. It is designed to serve as cell base class for the 3D triangulation diff --git a/Mesh_3/doc/Mesh_3/CGAL/Gray_image_mesh_domain_3.h b/Mesh_3/doc/Mesh_3/CGAL/Gray_image_mesh_domain_3.h index cc6d2afdd75..d48567bd057 100644 --- a/Mesh_3/doc/Mesh_3/CGAL/Gray_image_mesh_domain_3.h +++ b/Mesh_3/doc/Mesh_3/CGAL/Gray_image_mesh_domain_3.h @@ -1,7 +1,7 @@ namespace CGAL { /*! -\ingroup PkgMesh_3Domains +\ingroup PkgMesh3Domains \deprecated The class template `Gray_image_mesh_domain_3` is deprecated since CGAL-4.13, in favor of the class template `Labeled_mesh_domain_3` and diff --git a/Mesh_3/doc/Mesh_3/CGAL/IO/File_medit.h b/Mesh_3/doc/Mesh_3/CGAL/IO/File_medit.h index e50566add7b..69966bf22b5 100644 --- a/Mesh_3/doc/Mesh_3/CGAL/IO/File_medit.h +++ b/Mesh_3/doc/Mesh_3/CGAL/IO/File_medit.h @@ -1,6 +1,6 @@ namespace CGAL { -/// \ingroup PkgMesh_3IOFunctions +/// \ingroup PkgMesh3IOFunctions /// /// \brief Outputs a mesh complex to the medit (`.mesh`) file format. /// See \cgalCite{frey:inria-00069921} for a comprehensive description of this file format. diff --git a/Mesh_3/doc/Mesh_3/CGAL/IO/facets_in_complex_3_to_triangle_mesh.h b/Mesh_3/doc/Mesh_3/CGAL/IO/facets_in_complex_3_to_triangle_mesh.h index 8864ad40203..b672d4d3273 100644 --- a/Mesh_3/doc/Mesh_3/CGAL/IO/facets_in_complex_3_to_triangle_mesh.h +++ b/Mesh_3/doc/Mesh_3/CGAL/IO/facets_in_complex_3_to_triangle_mesh.h @@ -1,5 +1,5 @@ namespace CGAL { -//! \ingroup PkgMesh_3Functions +//! \ingroup PkgMesh3Functions //! //! \brief builds a `TriangleMesh` from the surface facets, with a consistent orientation at the interface of two subdomains. //! diff --git a/Mesh_3/doc/Mesh_3/CGAL/Image_3.h b/Mesh_3/doc/Mesh_3/CGAL/Image_3.h index b973c7d2632..db38404cc9d 100644 --- a/Mesh_3/doc/Mesh_3/CGAL/Image_3.h +++ b/Mesh_3/doc/Mesh_3/CGAL/Image_3.h @@ -1,7 +1,7 @@ namespace CGAL { /*! -\ingroup PkgMesh_3Domains +\ingroup PkgMesh3Domains The class `Image_3` is a C++ wrapper around the InrImage library. It holds a diff --git a/Mesh_3/doc/Mesh_3/CGAL/Implicit_mesh_domain_3.h b/Mesh_3/doc/Mesh_3/CGAL/Implicit_mesh_domain_3.h index a8dc87d0ea6..904d18d0e97 100644 --- a/Mesh_3/doc/Mesh_3/CGAL/Implicit_mesh_domain_3.h +++ b/Mesh_3/doc/Mesh_3/CGAL/Implicit_mesh_domain_3.h @@ -1,7 +1,7 @@ namespace CGAL { /*! -\ingroup PkgMesh_3Domains +\ingroup PkgMesh3Domains \deprecated The class template `Implicit_mesh_domain_3` is deprecated since CGAL-4.13, in favor of the class template `Labeled_mesh_domain_3` and diff --git a/Mesh_3/doc/Mesh_3/CGAL/Implicit_to_labeling_function_wrapper.h b/Mesh_3/doc/Mesh_3/CGAL/Implicit_to_labeling_function_wrapper.h index f6b3601a71f..6446729e1c5 100644 --- a/Mesh_3/doc/Mesh_3/CGAL/Implicit_to_labeling_function_wrapper.h +++ b/Mesh_3/doc/Mesh_3/CGAL/Implicit_to_labeling_function_wrapper.h @@ -1,7 +1,7 @@ namespace CGAL { /*! -\ingroup PkgMesh_3Domains +\ingroup PkgMesh3Domains The class `Implicit_multi_domain_to_labeling_function_wrapper` is a helping class to get a function with integer values labeling the components of a multi-domain. The multidomain is described through a set of functions {fi(p), i=1, ...n}. diff --git a/Mesh_3/doc/Mesh_3/CGAL/Labeled_image_mesh_domain_3.h b/Mesh_3/doc/Mesh_3/CGAL/Labeled_image_mesh_domain_3.h index 0aa10bb88a8..d23791874ac 100644 --- a/Mesh_3/doc/Mesh_3/CGAL/Labeled_image_mesh_domain_3.h +++ b/Mesh_3/doc/Mesh_3/CGAL/Labeled_image_mesh_domain_3.h @@ -1,7 +1,7 @@ namespace CGAL { /*! -\ingroup PkgMesh_3Domains +\ingroup PkgMesh3Domains \deprecated The class template `Labeled_image_mesh_domain_3` is deprecated since CGAL-4.13, in favor of the class template `Labeled_mesh_domain_3` and diff --git a/Mesh_3/doc/Mesh_3/CGAL/Labeled_mesh_domain_3.h b/Mesh_3/doc/Mesh_3/CGAL/Labeled_mesh_domain_3.h index 26720eb2cc9..399abd9a027 100644 --- a/Mesh_3/doc/Mesh_3/CGAL/Labeled_mesh_domain_3.h +++ b/Mesh_3/doc/Mesh_3/CGAL/Labeled_mesh_domain_3.h @@ -1,7 +1,7 @@ namespace CGAL { /*! -\ingroup PkgMesh_3Domains +\ingroup PkgMesh3Domains \brief The class `Labeled_mesh_domain_3` implements indexed domains. diff --git a/Mesh_3/doc/Mesh_3/CGAL/Mesh_cell_base_3.h b/Mesh_3/doc/Mesh_3/CGAL/Mesh_cell_base_3.h index 6d4171492d2..f2166607f7d 100644 --- a/Mesh_3/doc/Mesh_3/CGAL/Mesh_cell_base_3.h +++ b/Mesh_3/doc/Mesh_3/CGAL/Mesh_cell_base_3.h @@ -3,7 +3,7 @@ namespace CGAL { /*! -\ingroup PkgMesh_3MeshClasses +\ingroup PkgMesh3MeshClasses