From 8d2c93fd6b99dcec599794e3cb22467da09a1a90 Mon Sep 17 00:00:00 2001 From: chunibyo-wly Date: Wed, 24 Dec 2025 22:31:37 +0800 Subject: [PATCH 1/3] [fix] Improve error handling --- surface/src/on_nurbs/fitting_surface_pdm.cpp | 32 +++++--------------- 1 file changed, 8 insertions(+), 24 deletions(-) diff --git a/surface/src/on_nurbs/fitting_surface_pdm.cpp b/surface/src/on_nurbs/fitting_surface_pdm.cpp index fbbbe42dc45..95e52ca410d 100644 --- a/surface/src/on_nurbs/fitting_surface_pdm.cpp +++ b/surface/src/on_nurbs/fitting_surface_pdm.cpp @@ -481,33 +481,17 @@ FittingSurface::initNurbsPCABoundingBox (int order, NurbsDataSurface *m_data, Ei Eigen::Vector3d p (eigenvectors_inv * (m_data->interior[i] - mean)); m_data->interior_param.emplace_back (p (0), p (1)); - if (p (0) > v_max (0)) - v_max (0) = p (0); - if (p (1) > v_max (1)) - v_max (1) = p (1); - if (p (2) > v_max (2)) - v_max (2) = p (2); - - if (p (0) < v_min (0)) - v_min (0) = p (0); - if (p (1) < v_min (1)) - v_min (1) = p (1); - if (p (2) < v_min (2)) - v_min (2) = p (2); + v_max = v_max.cwiseMax (p); + v_min = v_min.cwiseMin (p); } - for (unsigned i = 0; i < s; i++) + if (v_max (0) < v_min (0) || v_max (1) < v_min (1)) + throw std::runtime_error ("[NurbsTools::initNurbsPCABoundingBox] Error: v_max < v_min"); + + for (auto &p : m_data->interior_param) { - if (v_max (0) > v_min (0) && v_max (0) > v_min (0)) - { - Eigen::Vector2d &p = m_data->interior_param[i]; - p (0) = (p (0) - v_min (0)) / (v_max (0) - v_min (0)); - p (1) = (p (1) - v_min (1)) / (v_max (1) - v_min (1)); - } - else - { - throw std::runtime_error ("[NurbsTools::initNurbsPCABoundingBox] Error: v_max <= v_min"); - } + p (0) = (p (0) - v_min (0)) / (v_max (0) - v_min (0)); + p (1) = (p (1) - v_min (1)) / (v_max (1) - v_min (1)); } ON_NurbsSurface nurbs (3, false, order, order, order, order); From 2e2c3aee85ed84d93273ac9ee5866ad3098712ad Mon Sep 17 00:00:00 2001 From: chunibyo-wly Date: Thu, 25 Dec 2025 23:29:21 +0800 Subject: [PATCH 2/3] [fix] equal condition --- surface/src/on_nurbs/fitting_surface_pdm.cpp | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/surface/src/on_nurbs/fitting_surface_pdm.cpp b/surface/src/on_nurbs/fitting_surface_pdm.cpp index 95e52ca410d..ce6a73028bb 100644 --- a/surface/src/on_nurbs/fitting_surface_pdm.cpp +++ b/surface/src/on_nurbs/fitting_surface_pdm.cpp @@ -485,8 +485,10 @@ FittingSurface::initNurbsPCABoundingBox (int order, NurbsDataSurface *m_data, Ei v_min = v_min.cwiseMin (p); } - if (v_max (0) < v_min (0) || v_max (1) < v_min (1)) - throw std::runtime_error ("[NurbsTools::initNurbsPCABoundingBox] Error: v_max < v_min"); + if (v_max(0) - v_min(0) < std::numeric_limits::epsilon() || + v_max(1) - v_min(1) < std::numeric_limits::epsilon()) + throw std::runtime_error( + "[NurbsTools::initNurbsPCABoundingBox] Error: v_max <= v_min"); for (auto &p : m_data->interior_param) { From b769311ef6dfa2bc125c05df8d0ba6870c106d4a Mon Sep 17 00:00:00 2001 From: chunibyo-wly Date: Fri, 26 Dec 2025 18:40:43 +0800 Subject: [PATCH 3/3] [fix] Improve readability --- surface/src/on_nurbs/fitting_surface_pdm.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/surface/src/on_nurbs/fitting_surface_pdm.cpp b/surface/src/on_nurbs/fitting_surface_pdm.cpp index ce6a73028bb..14a03d06a6f 100644 --- a/surface/src/on_nurbs/fitting_surface_pdm.cpp +++ b/surface/src/on_nurbs/fitting_surface_pdm.cpp @@ -485,8 +485,8 @@ FittingSurface::initNurbsPCABoundingBox (int order, NurbsDataSurface *m_data, Ei v_min = v_min.cwiseMin (p); } - if (v_max(0) - v_min(0) < std::numeric_limits::epsilon() || - v_max(1) - v_min(1) < std::numeric_limits::epsilon()) + if ((v_max(0) - v_min(0)) < std::numeric_limits::epsilon() || + (v_max(1) - v_min(1)) < std::numeric_limits::epsilon()) throw std::runtime_error( "[NurbsTools::initNurbsPCABoundingBox] Error: v_max <= v_min");