From f3a37b28175998bea6405668472ae3203bbb8fc3 Mon Sep 17 00:00:00 2001 From: Saurabh Khanduja Date: Sun, 22 Oct 2023 22:51:41 +0200 Subject: [PATCH] Fix #6436 - add bound check for axis aligned bounding box --- cpp/open3d/geometry/BoundingVolume.cpp | 17 +++++++++++++++++ cpp/open3d/geometry/BoundingVolume.h | 6 +----- 2 files changed, 18 insertions(+), 5 deletions(-) diff --git a/cpp/open3d/geometry/BoundingVolume.cpp b/cpp/open3d/geometry/BoundingVolume.cpp index 1bac823f524..dfeb4db11fb 100644 --- a/cpp/open3d/geometry/BoundingVolume.cpp +++ b/cpp/open3d/geometry/BoundingVolume.cpp @@ -256,6 +256,23 @@ OrientedBoundingBox AxisAlignedBoundingBox::GetMinimalOrientedBoundingBox( return OrientedBoundingBox::CreateFromAxisAlignedBoundingBox(*this); } +AxisAlignedBoundingBox::AxisAlignedBoundingBox(const Eigen::Vector3d& min_bound, + const Eigen::Vector3d& max_bound) + : Geometry3D(Geometry::GeometryType::AxisAlignedBoundingBox), + min_bound_(min_bound), + max_bound_(max_bound), + color_(1, 1, 1) { + if ((max_bound_.array() < min_bound_.array()).any()) { + open3d::utility::LogWarning( + "max_bound {} of bounding box is smaller than min_bound {} in " + "one or more dimensions. Fix input values to remove this " + "warning.", + max_bound_, min_bound_); + max_bound_ = max_bound.cwiseMax(min_bound); + min_bound_ = max_bound.cwiseMin(min_bound); + } +} + AxisAlignedBoundingBox& AxisAlignedBoundingBox::Transform( const Eigen::Matrix4d& transformation) { utility::LogError( diff --git a/cpp/open3d/geometry/BoundingVolume.h b/cpp/open3d/geometry/BoundingVolume.h index e808b232612..76cdca5977d 100644 --- a/cpp/open3d/geometry/BoundingVolume.h +++ b/cpp/open3d/geometry/BoundingVolume.h @@ -171,11 +171,7 @@ class AxisAlignedBoundingBox : public Geometry3D { /// \param min_bound Lower bounds of the bounding box for all axes. /// \param max_bound Upper bounds of the bounding box for all axes. AxisAlignedBoundingBox(const Eigen::Vector3d& min_bound, - const Eigen::Vector3d& max_bound) - : Geometry3D(Geometry::GeometryType::AxisAlignedBoundingBox), - min_bound_(min_bound), - max_bound_(max_bound), - color_(1, 1, 1) {} + const Eigen::Vector3d& max_bound); ~AxisAlignedBoundingBox() override {} public: