diff --git a/cpp/open3d/geometry/TriangleMesh.cpp b/cpp/open3d/geometry/TriangleMesh.cpp index bb5f9571e09..4930b655a24 100644 --- a/cpp/open3d/geometry/TriangleMesh.cpp +++ b/cpp/open3d/geometry/TriangleMesh.cpp @@ -113,6 +113,21 @@ TriangleMesh TriangleMesh::operator+(const TriangleMesh &mesh) const { return (TriangleMesh(*this) += mesh); } +bool TriangleMesh::operator==(const TriangleMesh &mesh) const { + if (vertices_.size() != mesh.vertices_.size()) return false; + if (triangles_.size() != mesh.triangles_.size()) return false; + + for (unsigned long i = 0; i < vertices_.size(); ++i) { + if (!vertices_[i].isApprox(mesh.vertices_[i])) return false; + } + + for (unsigned long i = 0; i < triangles_.size(); ++i) { + if (triangles_[i] != mesh.triangles_[i]) return false; + } + + return true; +} + TriangleMesh &TriangleMesh::ComputeTriangleNormals( bool normalized /* = true*/) { triangle_normals_.resize(triangles_.size()); diff --git a/cpp/open3d/geometry/TriangleMesh.h b/cpp/open3d/geometry/TriangleMesh.h index 7f0b05c6ca5..a80bbdff82d 100644 --- a/cpp/open3d/geometry/TriangleMesh.h +++ b/cpp/open3d/geometry/TriangleMesh.h @@ -44,6 +44,21 @@ class TriangleMesh : public MeshBase { const std::vector &triangles) : MeshBase(Geometry::GeometryType::TriangleMesh, vertices), triangles_(triangles) {} + /// \brief Copy Constructor. + /// + /// \param mesh other mesh to copy. + TriangleMesh(const TriangleMesh &mesh) + : MeshBase(Geometry::GeometryType::TriangleMesh, mesh.vertices_), + // vertex_normals_(mesh.vertex_normals_), + // vertex_colors_(mesh.vertex_colors_), + triangles_(mesh.triangles_), + triangle_normals_(mesh.triangle_normals_), + adjacency_list_(mesh.adjacency_list_), + triangle_uvs_(mesh.triangle_uvs_), + materials_(mesh.materials_), + triangle_material_ids_(mesh.triangle_material_ids_), + textures_(mesh.textures_) {} + TriangleMesh &operator=(const TriangleMesh &) = default; ~TriangleMesh() override {} public: @@ -56,6 +71,7 @@ class TriangleMesh : public MeshBase { public: TriangleMesh &operator+=(const TriangleMesh &mesh); TriangleMesh operator+(const TriangleMesh &mesh) const; + bool operator==(const TriangleMesh &mesh) const; /// Returns `true` if the mesh contains triangles. bool HasTriangles() const { diff --git a/cpp/pybind/geometry/trianglemesh.cpp b/cpp/pybind/geometry/trianglemesh.cpp index 818630e9542..6b848166792 100644 --- a/cpp/pybind/geometry/trianglemesh.cpp +++ b/cpp/pybind/geometry/trianglemesh.cpp @@ -57,6 +57,7 @@ void pybind_trianglemesh_definitions(py::module &m) { }) .def(py::self + py::self) .def(py::self += py::self) + .def(py::self == py::self) .def("compute_triangle_normals", &TriangleMesh::ComputeTriangleNormals, "Function to compute triangle normals, usually called before "