From fd5bd843b0103979593453a0b15528b1e5610bf1 Mon Sep 17 00:00:00 2001 From: Alexander Dielen <alexander.dielen@rwth-aachen.de> Date: Mon, 29 Jan 2018 07:57:36 +0100 Subject: [PATCH] use py::none instead of py::object as the property type --- src/Bindings.cc | 8 ++-- src/Mesh.hh | 90 +++++++++++++++++++++--------------------- src/Miscellaneous.cc | 22 +++++------ src/PropertyManager.hh | 6 +-- tests/test_python.py | 4 +- 5 files changed, 65 insertions(+), 65 deletions(-) diff --git a/src/Bindings.cc b/src/Bindings.cc index db78297..4f5e3f4 100644 --- a/src/Bindings.cc +++ b/src/Bindings.cc @@ -51,10 +51,10 @@ PYBIND11_MODULE(openmesh, m) { typedef IteratorWrapperT<OM::PolyConnectivity::EdgeIter, &OM::ArrayKernel::n_edges> EdgeIterWrapper; typedef IteratorWrapperT<OM::PolyConnectivity::FaceIter, &OM::ArrayKernel::n_faces> FaceIterWrapper; - expose_property_manager<OM::VPropHandleT<py::object>, OM::VertexHandle, VertexIterWrapper>(m, "VPropertyManager"); - expose_property_manager<OM::HPropHandleT<py::object>, OM::HalfedgeHandle, HalfedgeIterWrapper>(m, "HPropertyManager"); - expose_property_manager<OM::EPropHandleT<py::object>, OM::EdgeHandle, EdgeIterWrapper>(m, "EPropertyManager"); - expose_property_manager<OM::FPropHandleT<py::object>, OM::FaceHandle, FaceIterWrapper>(m, "FPropertyManager"); + expose_property_manager<OM::VPropHandleT<py::none>, OM::VertexHandle, VertexIterWrapper>(m, "VPropertyManager"); + expose_property_manager<OM::HPropHandleT<py::none>, OM::HalfedgeHandle, HalfedgeIterWrapper>(m, "HPropertyManager"); + expose_property_manager<OM::EPropHandleT<py::none>, OM::EdgeHandle, EdgeIterWrapper>(m, "EPropertyManager"); + expose_property_manager<OM::FPropHandleT<py::none>, OM::FaceHandle, FaceIterWrapper>(m, "FPropertyManager"); expose_io(m); diff --git a/src/Mesh.hh b/src/Mesh.hh index 1e5d04e..62180e0 100644 --- a/src/Mesh.hh +++ b/src/Mesh.hh @@ -621,39 +621,39 @@ void expose_mesh(py::module& m, const char *_name) { void (*set_status_fh)(Mesh&, OM::FaceHandle, const StatusInfo&) = &set_status; // Property management - add property - void (Mesh::*add_property_vph)(OM::VPropHandleT<py::object>&, const std::string&) = &Mesh::add_property; - void (Mesh::*add_property_eph)(OM::EPropHandleT<py::object>&, const std::string&) = &Mesh::add_property; - void (Mesh::*add_property_hph)(OM::HPropHandleT<py::object>&, const std::string&) = &Mesh::add_property; - void (Mesh::*add_property_fph)(OM::FPropHandleT<py::object>&, const std::string&) = &Mesh::add_property; - void (Mesh::*add_property_mph)(OM::MPropHandleT<py::object>&, const std::string&) = &Mesh::add_property; + void (Mesh::*add_property_vph)(OM::VPropHandleT<py::none>&, const std::string&) = &Mesh::add_property; + void (Mesh::*add_property_eph)(OM::EPropHandleT<py::none>&, const std::string&) = &Mesh::add_property; + void (Mesh::*add_property_hph)(OM::HPropHandleT<py::none>&, const std::string&) = &Mesh::add_property; + void (Mesh::*add_property_fph)(OM::FPropHandleT<py::none>&, const std::string&) = &Mesh::add_property; + void (Mesh::*add_property_mph)(OM::MPropHandleT<py::none>&, const std::string&) = &Mesh::add_property; // Property management - remove property - void (Mesh::*remove_property_vph)(OM::VPropHandleT<py::object>&) = &Mesh::remove_property; - void (Mesh::*remove_property_eph)(OM::EPropHandleT<py::object>&) = &Mesh::remove_property; - void (Mesh::*remove_property_hph)(OM::HPropHandleT<py::object>&) = &Mesh::remove_property; - void (Mesh::*remove_property_fph)(OM::FPropHandleT<py::object>&) = &Mesh::remove_property; - void (Mesh::*remove_property_mph)(OM::MPropHandleT<py::object>&) = &Mesh::remove_property; + void (Mesh::*remove_property_vph)(OM::VPropHandleT<py::none>&) = &Mesh::remove_property; + void (Mesh::*remove_property_eph)(OM::EPropHandleT<py::none>&) = &Mesh::remove_property; + void (Mesh::*remove_property_hph)(OM::HPropHandleT<py::none>&) = &Mesh::remove_property; + void (Mesh::*remove_property_fph)(OM::FPropHandleT<py::none>&) = &Mesh::remove_property; + void (Mesh::*remove_property_mph)(OM::MPropHandleT<py::none>&) = &Mesh::remove_property; // Property management - get property by name - bool (Mesh::*get_property_handle_vph)(OM::VPropHandleT<py::object>&, const std::string&) const = &Mesh::get_property_handle; - bool (Mesh::*get_property_handle_eph)(OM::EPropHandleT<py::object>&, const std::string&) const = &Mesh::get_property_handle; - bool (Mesh::*get_property_handle_hph)(OM::HPropHandleT<py::object>&, const std::string&) const = &Mesh::get_property_handle; - bool (Mesh::*get_property_handle_fph)(OM::FPropHandleT<py::object>&, const std::string&) const = &Mesh::get_property_handle; - bool (Mesh::*get_property_handle_mph)(OM::MPropHandleT<py::object>&, const std::string&) const = &Mesh::get_property_handle; + bool (Mesh::*get_property_handle_vph)(OM::VPropHandleT<py::none>&, const std::string&) const = &Mesh::get_property_handle; + bool (Mesh::*get_property_handle_eph)(OM::EPropHandleT<py::none>&, const std::string&) const = &Mesh::get_property_handle; + bool (Mesh::*get_property_handle_hph)(OM::HPropHandleT<py::none>&, const std::string&) const = &Mesh::get_property_handle; + bool (Mesh::*get_property_handle_fph)(OM::FPropHandleT<py::none>&, const std::string&) const = &Mesh::get_property_handle; + bool (Mesh::*get_property_handle_mph)(OM::MPropHandleT<py::none>&, const std::string&) const = &Mesh::get_property_handle; // Property management - get property value for an item - const py::object& (Mesh::*property_vertex )(OM::VPropHandleT<py::object>, OM::VertexHandle ) const = &Mesh::property; - const py::object& (Mesh::*property_edge )(OM::EPropHandleT<py::object>, OM::EdgeHandle ) const = &Mesh::property; - const py::object& (Mesh::*property_halfedge)(OM::HPropHandleT<py::object>, OM::HalfedgeHandle) const = &Mesh::property; - const py::object& (Mesh::*property_face )(OM::FPropHandleT<py::object>, OM::FaceHandle ) const = &Mesh::property; - const py::object& (Mesh::*property_mesh )(OM::MPropHandleT<py::object> ) const = &Mesh::property; + const py::none& (Mesh::*property_vertex )(OM::VPropHandleT<py::none>, OM::VertexHandle ) const = &Mesh::property; + const py::none& (Mesh::*property_edge )(OM::EPropHandleT<py::none>, OM::EdgeHandle ) const = &Mesh::property; + const py::none& (Mesh::*property_halfedge)(OM::HPropHandleT<py::none>, OM::HalfedgeHandle) const = &Mesh::property; + const py::none& (Mesh::*property_face )(OM::FPropHandleT<py::none>, OM::FaceHandle ) const = &Mesh::property; + const py::none& (Mesh::*property_mesh )(OM::MPropHandleT<py::none> ) const = &Mesh::property; // Property management - set property value for an item - void (*set_property_vertex )(Mesh&, OM::VPropHandleT<py::object>, OM::VertexHandle, const py::object&) = &set_property; - void (*set_property_edge )(Mesh&, OM::EPropHandleT<py::object>, OM::EdgeHandle, const py::object&) = &set_property; - void (*set_property_halfedge)(Mesh&, OM::HPropHandleT<py::object>, OM::HalfedgeHandle, const py::object&) = &set_property; - void (*set_property_face )(Mesh&, OM::FPropHandleT<py::object>, OM::FaceHandle, const py::object&) = &set_property; - void (*set_property_mesh )(Mesh&, OM::MPropHandleT<py::object>, const py::object&) = &set_property; + void (*set_property_vertex )(Mesh&, OM::VPropHandleT<py::none>, OM::VertexHandle, const py::object&) = &set_property; + void (*set_property_edge )(Mesh&, OM::EPropHandleT<py::none>, OM::EdgeHandle, const py::object&) = &set_property; + void (*set_property_halfedge)(Mesh&, OM::HPropHandleT<py::none>, OM::HalfedgeHandle, const py::object&) = &set_property; + void (*set_property_face )(Mesh&, OM::FPropHandleT<py::none>, OM::FaceHandle, const py::object&) = &set_property; + void (*set_property_mesh )(Mesh&, OM::MPropHandleT<py::none>, const py::object&) = &set_property; // Low-level adding new items OM::VertexHandle (Mesh::*new_vertex_void )(void ) = &Mesh::new_vertex; @@ -677,10 +677,10 @@ void expose_mesh(py::module& m, const char *_name) { //====================================================================== // Copy property - void (Mesh::*copy_property_vprop)(OM::VPropHandleT<py::object>&, OM::VertexHandle, OM::VertexHandle ) = &Mesh::copy_property; - void (Mesh::*copy_property_hprop)(OM::HPropHandleT<py::object>, OM::HalfedgeHandle, OM::HalfedgeHandle) = &Mesh::copy_property; - void (Mesh::*copy_property_eprop)(OM::EPropHandleT<py::object>, OM::EdgeHandle, OM::EdgeHandle ) = &Mesh::copy_property; - void (Mesh::*copy_property_fprop)(OM::FPropHandleT<py::object>, OM::FaceHandle, OM::FaceHandle ) = &Mesh::copy_property; + void (Mesh::*copy_property_vprop)(OM::VPropHandleT<py::none>&, OM::VertexHandle, OM::VertexHandle ) = &Mesh::copy_property; + void (Mesh::*copy_property_hprop)(OM::HPropHandleT<py::none>, OM::HalfedgeHandle, OM::HalfedgeHandle) = &Mesh::copy_property; + void (Mesh::*copy_property_eprop)(OM::EPropHandleT<py::none>, OM::EdgeHandle, OM::EdgeHandle ) = &Mesh::copy_property; + void (Mesh::*copy_property_fprop)(OM::FPropHandleT<py::none>, OM::FaceHandle, OM::FaceHandle ) = &Mesh::copy_property; // Copy all properties void (Mesh::*copy_all_properties_vh_vh_bool)(OM::VertexHandle, OM::VertexHandle, bool) = &Mesh::copy_all_properties; @@ -1193,34 +1193,34 @@ void expose_mesh(py::module& m, const char *_name) { // property_array //====================================================================== - .def("property_array", [] (Mesh& _self, OM::VPropHandleT<py::object> _ph) { - return property_array<Mesh, OM::VPropHandleT<py::object>, OM::VertexHandle>(_self, _ph, _self.n_vertices()); + .def("property_array", [] (Mesh& _self, OM::VPropHandleT<py::none> _ph) { + return property_array<Mesh, OM::VPropHandleT<py::none>, OM::VertexHandle>(_self, _ph, _self.n_vertices()); }) - .def("property_array", [] (Mesh& _self, OM::HPropHandleT<py::object> _ph) { - return property_array<Mesh, OM::HPropHandleT<py::object>, OM::HalfedgeHandle>(_self, _ph, _self.n_halfedges()); + .def("property_array", [] (Mesh& _self, OM::HPropHandleT<py::none> _ph) { + return property_array<Mesh, OM::HPropHandleT<py::none>, OM::HalfedgeHandle>(_self, _ph, _self.n_halfedges()); }) - .def("property_array", [] (Mesh& _self, OM::EPropHandleT<py::object> _ph) { - return property_array<Mesh, OM::EPropHandleT<py::object>, OM::EdgeHandle>(_self, _ph, _self.n_edges()); + .def("property_array", [] (Mesh& _self, OM::EPropHandleT<py::none> _ph) { + return property_array<Mesh, OM::EPropHandleT<py::none>, OM::EdgeHandle>(_self, _ph, _self.n_edges()); }) - .def("property_array", [] (Mesh& _self, OM::FPropHandleT<py::object> _ph) { - return property_array<Mesh, OM::FPropHandleT<py::object>, OM::FaceHandle>(_self, _ph, _self.n_faces()); + .def("property_array", [] (Mesh& _self, OM::FPropHandleT<py::none> _ph) { + return property_array<Mesh, OM::FPropHandleT<py::none>, OM::FaceHandle>(_self, _ph, _self.n_faces()); }) //====================================================================== // set_property_array //====================================================================== - .def("set_property_array", [] (Mesh& _self, OM::VPropHandleT<py::object> _ph, py::array_t<double> _arr) { - return set_property_array<Mesh, OM::VPropHandleT<py::object>, OM::VertexHandle>(_self, _ph, _arr, _self.n_vertices()); + .def("set_property_array", [] (Mesh& _self, OM::VPropHandleT<py::none> _ph, py::array_t<double> _arr) { + return set_property_array<Mesh, OM::VPropHandleT<py::none>, OM::VertexHandle>(_self, _ph, _arr, _self.n_vertices()); }) - .def("set_property_array", [] (Mesh& _self, OM::HPropHandleT<py::object> _ph, py::array_t<double> _arr) { - return set_property_array<Mesh, OM::HPropHandleT<py::object>, OM::HalfedgeHandle>(_self, _ph, _arr, _self.n_halfedges()); + .def("set_property_array", [] (Mesh& _self, OM::HPropHandleT<py::none> _ph, py::array_t<double> _arr) { + return set_property_array<Mesh, OM::HPropHandleT<py::none>, OM::HalfedgeHandle>(_self, _ph, _arr, _self.n_halfedges()); }) - .def("set_property_array", [] (Mesh& _self, OM::EPropHandleT<py::object> _ph, py::array_t<double> _arr) { - return set_property_array<Mesh, OM::EPropHandleT<py::object>, OM::EdgeHandle>(_self, _ph, _arr, _self.n_edges()); + .def("set_property_array", [] (Mesh& _self, OM::EPropHandleT<py::none> _ph, py::array_t<double> _arr) { + return set_property_array<Mesh, OM::EPropHandleT<py::none>, OM::EdgeHandle>(_self, _ph, _arr, _self.n_edges()); }) - .def("set_property_array", [] (Mesh& _self, OM::FPropHandleT<py::object> _ph, py::array_t<double> _arr) { - return set_property_array<Mesh, OM::FPropHandleT<py::object>, OM::FaceHandle>(_self, _ph, _arr, _self.n_faces()); + .def("set_property_array", [] (Mesh& _self, OM::FPropHandleT<py::none> _ph, py::array_t<double> _arr) { + return set_property_array<Mesh, OM::FPropHandleT<py::none>, OM::FaceHandle>(_self, _ph, _arr, _self.n_faces()); }) ; diff --git a/src/Miscellaneous.cc b/src/Miscellaneous.cc index adc5d1c..21b066c 100644 --- a/src/Miscellaneous.cc +++ b/src/Miscellaneous.cc @@ -50,35 +50,35 @@ void expose_handles(py::module& m) { .def(py::init<int>()) ; - py::class_<OM::BasePropHandleT<py::object>, OM::BaseHandle>(m, "BasePropHandle") + py::class_<OM::BasePropHandleT<py::none>, OM::BaseHandle>(m, "BasePropHandle") .def(py::init<>()) .def(py::init<int>()) ; - py::class_<OM::VPropHandleT<py::object>, OM::BasePropHandleT<py::object> >(m, "VPropHandle") + py::class_<OM::VPropHandleT<py::none>, OM::BasePropHandleT<py::none> >(m, "VPropHandle") .def(py::init<>()) .def(py::init<int>()) - .def(py::init<const OM::BasePropHandleT<py::object>&>()) + .def(py::init<const OM::BasePropHandleT<py::none>&>()) ; - py::class_<OM::HPropHandleT<py::object>, OM::BasePropHandleT<py::object> >(m, "HPropHandle") + py::class_<OM::HPropHandleT<py::none>, OM::BasePropHandleT<py::none> >(m, "HPropHandle") .def(py::init<>()) .def(py::init<int>()) - .def(py::init<const OM::BasePropHandleT<py::object>&>()) + .def(py::init<const OM::BasePropHandleT<py::none>&>()) ; - py::class_<OM::EPropHandleT<py::object>, OM::BasePropHandleT<py::object> >(m, "EPropHandle") + py::class_<OM::EPropHandleT<py::none>, OM::BasePropHandleT<py::none> >(m, "EPropHandle") .def(py::init<>()) .def(py::init<int>()) - .def(py::init<const OM::BasePropHandleT<py::object>&>()) + .def(py::init<const OM::BasePropHandleT<py::none>&>()) ; - py::class_<OM::FPropHandleT<py::object>, OM::BasePropHandleT<py::object> >(m, "FPropHandle") + py::class_<OM::FPropHandleT<py::none>, OM::BasePropHandleT<py::none> >(m, "FPropHandle") .def(py::init<>()) .def(py::init<int>()) - .def(py::init<const OM::BasePropHandleT<py::object>&>()) + .def(py::init<const OM::BasePropHandleT<py::none>&>()) ; - py::class_<OM::MPropHandleT<py::object>, OM::BasePropHandleT<py::object> >(m, "MPropHandle") + py::class_<OM::MPropHandleT<py::none>, OM::BasePropHandleT<py::none> >(m, "MPropHandle") .def(py::init<>()) .def(py::init<int>()) - .def(py::init<const OM::BasePropHandleT<py::object>&>()) + .def(py::init<const OM::BasePropHandleT<py::none>&>()) ; } diff --git a/src/PropertyManager.hh b/src/PropertyManager.hh index 33c8d25..fe921ee 100644 --- a/src/PropertyManager.hh +++ b/src/PropertyManager.hh @@ -22,7 +22,7 @@ namespace OM = OpenMesh; * @return The requested property value. */ template <class PropertyManager, class IndexHandle> -py::object propman_get_item(PropertyManager& _self, IndexHandle _handle) { +py::none propman_get_item(PropertyManager& _self, IndexHandle _handle) { return _self[_handle]; } @@ -100,8 +100,8 @@ void expose_property_manager(py::module& m, const char *_name) { typedef OM::PropertyManager<PropHandle, OM::PolyConnectivity> PropertyManager; // Function pointers - py::object (*getitem)(PropertyManager&, IndexHandle ) = &propman_get_item; - void (*setitem)(PropertyManager&, IndexHandle, py::object) = &propman_set_item; + py::none (*getitem)(PropertyManager&, IndexHandle ) = &propman_get_item; + void (*setitem)(PropertyManager&, IndexHandle, py::object) = &propman_set_item; void (*set_range)(PropertyManager&, Iterator, py::object) = &propman_set_range; diff --git a/tests/test_python.py b/tests/test_python.py index 7dbfde0..af55519 100644 --- a/tests/test_python.py +++ b/tests/test_python.py @@ -57,8 +57,8 @@ class Python(unittest.TestCase): self.assertTrue(propman.property_exists(self.mesh, "prop")) # Check initial property values - # for v in self.mesh.vertices(): - # self.assertEqual(propman[v], None) + for v in self.mesh.vertices(): + self.assertEqual(propman[v], None) # Set property values propman.set_range(self.mesh.vertices(), 0.0) -- GitLab