From 40ac746be712b849388e387ab2d12deeddb276e7 Mon Sep 17 00:00:00 2001 From: Andreas Fabri Date: Thu, 27 Nov 2025 13:54:50 +0000 Subject: [PATCH 1/4] CDT3: Fix face_constraint_index() --- .../ccdt_3_from_soup.cpp | 15 +++++++++++++++ ...forming_constrained_Delaunay_triangulation_3.h | 2 +- ...nstrained_Delaunay_triangulation_cell_base_3.h | 2 +- 3 files changed, 17 insertions(+), 2 deletions(-) diff --git a/Constrained_triangulation_3/examples/Constrained_triangulation_3/ccdt_3_from_soup.cpp b/Constrained_triangulation_3/examples/Constrained_triangulation_3/ccdt_3_from_soup.cpp index cbe716e5efd..3447ecf729d 100644 --- a/Constrained_triangulation_3/examples/Constrained_triangulation_3/ccdt_3_from_soup.cpp +++ b/Constrained_triangulation_3/examples/Constrained_triangulation_3/ccdt_3_from_soup.cpp @@ -5,6 +5,8 @@ #include #include +#include +#include using K = CGAL::Exact_predicates_inexact_constructions_kernel; @@ -29,6 +31,19 @@ int main(int argc, char* argv[]) << "Number of constrained facets in the CDT: " << ccdt.number_of_constrained_facets() << '\n'; + // Collect constrained facets per polygon + using Facet = typename decltype(ccdt)::Triangulation::Facet; + std::vector> constrained_facets(polygons.size()); + for(auto facet : ccdt.constrained_facets()) + { + int i = ccdt.face_constraint_index(facet); + constrained_facets[i].push_back(facet); + } + auto it = std::max_element(constrained_facets.begin(), constrained_facets.end()); + + std::cout << "The polygon with the most constrained facets has index " + << (it - constrained_facets.begin()) << " and " << it->size() << " facets.\n"; + std::ofstream ofs(argc > 2 ? argv[2] : "out.mesh"); ofs.precision(17); CGAL::IO::write_MEDIT(ofs, ccdt); diff --git a/Constrained_triangulation_3/include/CGAL/Conforming_constrained_Delaunay_triangulation_3.h b/Constrained_triangulation_3/include/CGAL/Conforming_constrained_Delaunay_triangulation_3.h index 6f3207a5852..785ea3cd50b 100644 --- a/Constrained_triangulation_3/include/CGAL/Conforming_constrained_Delaunay_triangulation_3.h +++ b/Constrained_triangulation_3/include/CGAL/Conforming_constrained_Delaunay_triangulation_3.h @@ -1034,7 +1034,7 @@ public: */ CDT_3_signed_index face_constraint_index(typename Triangulation::Cell_handle ch, int i) const { - return ch->face_id[static_cast(i)]; + return ch->ccdt_3_data().face_constraint_index(i); } /*! diff --git a/Constrained_triangulation_3/include/CGAL/Conforming_constrained_Delaunay_triangulation_cell_base_3.h b/Constrained_triangulation_3/include/CGAL/Conforming_constrained_Delaunay_triangulation_cell_base_3.h index 7371ee1c888..9581696cafe 100644 --- a/Constrained_triangulation_3/include/CGAL/Conforming_constrained_Delaunay_triangulation_cell_base_3.h +++ b/Constrained_triangulation_3/include/CGAL/Conforming_constrained_Delaunay_triangulation_cell_base_3.h @@ -98,7 +98,7 @@ public: CGAL::read(is, i); } if(!is) return is; - c.face_id[li] = i; + c->ccdt_3_data().set_face_constraint_index(li, i); } return is; } From 8e3a59a27b55ca58ec34e5941cb7df85f709e017 Mon Sep 17 00:00:00 2001 From: Laurent Rineau Date: Fri, 28 Nov 2025 14:41:18 +0100 Subject: [PATCH 2/4] simplify the code --- .../Constrained_triangulation_3/ccdt_3_from_soup.cpp | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/Constrained_triangulation_3/examples/Constrained_triangulation_3/ccdt_3_from_soup.cpp b/Constrained_triangulation_3/examples/Constrained_triangulation_3/ccdt_3_from_soup.cpp index 3447ecf729d..8ba8a825e2d 100644 --- a/Constrained_triangulation_3/examples/Constrained_triangulation_3/ccdt_3_from_soup.cpp +++ b/Constrained_triangulation_3/examples/Constrained_triangulation_3/ccdt_3_from_soup.cpp @@ -6,7 +6,6 @@ #include #include -#include using K = CGAL::Exact_predicates_inexact_constructions_kernel; @@ -32,17 +31,16 @@ int main(int argc, char* argv[]) << ccdt.number_of_constrained_facets() << '\n'; // Collect constrained facets per polygon - using Facet = typename decltype(ccdt)::Triangulation::Facet; - std::vector> constrained_facets(polygons.size()); + std::vector constrained_facets(polygons.size()); for(auto facet : ccdt.constrained_facets()) { int i = ccdt.face_constraint_index(facet); - constrained_facets[i].push_back(facet); + ++constrained_facets[i]; } auto it = std::max_element(constrained_facets.begin(), constrained_facets.end()); std::cout << "The polygon with the most constrained facets has index " - << (it - constrained_facets.begin()) << " and " << it->size() << " facets.\n"; + << (it - constrained_facets.begin()) << " and " << *it << " facets.\n"; std::ofstream ofs(argc > 2 ? argv[2] : "out.mesh"); ofs.precision(17); From 543d424f584f6d4a61cba0ce6c2ea6d7343e44bb Mon Sep 17 00:00:00 2001 From: Andreas Fabri Date: Fri, 21 Nov 2025 10:50:25 +0000 Subject: [PATCH 3/4] Periodic_triangulation_3: Fix warning in demo --- .../demo/Periodic_3_triangulation_3/MainWindow.h | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/Periodic_3_triangulation_3/demo/Periodic_3_triangulation_3/MainWindow.h b/Periodic_3_triangulation_3/demo/Periodic_3_triangulation_3/MainWindow.h index ca9bf07e116..28daeb7dd24 100644 --- a/Periodic_3_triangulation_3/demo/Periodic_3_triangulation_3/MainWindow.h +++ b/Periodic_3_triangulation_3/demo/Periodic_3_triangulation_3/MainWindow.h @@ -138,7 +138,12 @@ public Q_SLOTS: private: void showFileBox(QString title, QString fileName) { QFile textFile(fileName); - textFile.open(QIODevice::ReadOnly); + bool b = textFile.open(QIODevice::ReadOnly); + if(!b){ + QMessageBox::critical(this, tr("Error"), + tr("Could not open file %1.").arg(fileName)); + return; + } QMessageBox mb(QMessageBox::NoIcon, title, QTextStream(&textFile).readAll(), From f503ce9359d31a784e873cff6216e7bc6c8d5bb5 Mon Sep 17 00:00:00 2001 From: Andreas Fabri Date: Thu, 27 Nov 2025 14:10:34 +0000 Subject: [PATCH 4/4] Lab: use results --- Lab/demo/Lab/MainWindow.cpp | 8 +-- .../Camera_position/Camera_positions_list.cpp | 53 +++++++++++-------- 2 files changed, 34 insertions(+), 27 deletions(-) diff --git a/Lab/demo/Lab/MainWindow.cpp b/Lab/demo/Lab/MainWindow.cpp index a8367b24402..484f929b195 100644 --- a/Lab/demo/Lab/MainWindow.cpp +++ b/Lab/demo/Lab/MainWindow.cpp @@ -1795,8 +1795,8 @@ bool MainWindow::loadScript(QFileInfo info) QString program; QString filename = info.absoluteFilePath(); QFile script_file(filename); - script_file.open(QIODevice::ReadOnly); - if(!script_file.isReadable()) { + bool success = script_file.open(QIODevice::ReadOnly); + if((! success) || (!script_file.isReadable())) { throw std::ios_base::failure(script_file.errorString().toStdString()); } program = script_file.readAll(); @@ -2747,9 +2747,9 @@ void MainWindow::exportStatistics() if(filename.isEmpty()) return; QFile output(filename); - output.open(QIODevice::WriteOnly | QIODevice::Text); + bool success = output.open(QIODevice::WriteOnly | QIODevice::Text); - if(!output.isOpen()){ + if((! success) || (!output.isOpen())){ qDebug() << "- Error, unable to open" << "outputFilename" << "for output"; } QTextStream outStream(&output); diff --git a/Lab/demo/Lab/Plugins/Camera_position/Camera_positions_list.cpp b/Lab/demo/Lab/Plugins/Camera_position/Camera_positions_list.cpp index 016aaa796ad..c2c32a8f1b0 100644 --- a/Lab/demo/Lab/Plugins/Camera_position/Camera_positions_list.cpp +++ b/Lab/demo/Lab/Plugins/Camera_position/Camera_positions_list.cpp @@ -93,18 +93,20 @@ bool Camera_positions_list::save(QString filename) { if(m_model->rowCount() <1) return false; QFile file(filename); - file.open(QIODevice::WriteOnly); - QTextStream out(&file); - for(int i = 0; i < m_model->rowCount(); ++i) - { - QStandardItem* item = m_model->item(i); - out << item->data(Qt::DisplayRole).toString() - << "\n" - << item->data(Qt::UserRole).toString() - << "\n"; + if(file.open(QIODevice::WriteOnly)){ + QTextStream out(&file); + for(int i = 0; i < m_model->rowCount(); ++i) + { + QStandardItem* item = m_model->item(i); + out << item->data(Qt::DisplayRole).toString() + << "\n" + << item->data(Qt::UserRole).toString() + << "\n"; + } + file.close(); + return true; } - file.close(); - return true; + return false; } void Camera_positions_list::on_saveButton_pressed() @@ -129,19 +131,24 @@ void Camera_positions_list::on_openButton_pressed() void Camera_positions_list::load(QString filename) { QFile file(filename); - std::clog << "Loading camera positions " << qPrintable(filename) << std::endl; - file.open(QIODevice::ReadOnly); - QTextStream input(&file); - while(!input.atEnd()) { - QString text = input.readLine(1000); - QString coord = input.readLine(1000); - if(text.isNull() || coord.isNull()) return; - CGAL::qglviewer::Frame frame; - if(Three::activeViewer()->readFrame(coord, frame)) - { - addItem(text, - Three::activeViewer()->dumpFrame(frame)); + + if(file.open(QIODevice::ReadOnly)){ + std::clog << "Loading camera positions " << qPrintable(filename) << std::endl; + + QTextStream input(&file); + while(!input.atEnd()) { + QString text = input.readLine(1000); + QString coord = input.readLine(1000); + if(text.isNull() || coord.isNull()) return; + CGAL::qglviewer::Frame frame; + if(Three::activeViewer()->readFrame(coord, frame)) + { + addItem(text, + Three::activeViewer()->dumpFrame(frame)); + } } + }else { + std::clog << "Loading camera positions " << qPrintable(filename) << " failed" << std::endl; } }