diff --git a/src/python/magnum/scenegraph.cpp b/src/python/magnum/scenegraph.cpp index 786bbf5..8535970 100644 --- a/src/python/magnum/scenegraph.cpp +++ b/src/python/magnum/scenegraph.cpp @@ -78,8 +78,10 @@ template void f }, "Remove a feature from the group"); } -template void feature(py::class_, SceneGraph::PyFeatureHolder>>& c) { +template void feature(py::class_, SceneGraph::PyFeature>, SceneGraph::PyFeatureHolder>>& c) { c + .def(py::init_alias&>(), + "Constructor", py::arg("object")) .def_property_readonly("object", [](SceneGraph::AbstractFeature& self) -> SceneGraph::AbstractObject& { return self.object(); }, "Object holding this feature"); @@ -146,8 +148,8 @@ void scenegraph(py::module& m) { py::class_ drawableGroup2D{m, "DrawableGroup2D", "Group of drawables for two-dimensional float scenes"}; py::class_ drawableGroup3D{m, "DrawableGroup3D", "Group of drawables for three-dimensional float scenes"}; - py::class_> feature2D{m, "AbstractFeature2D", "Base for two-dimensional float features"}; - py::class_> feature3D{m, "AbstractFeature3D", "Base for three-dimensional float features"}; + py::class_, SceneGraph::PyFeatureHolder> feature2D{m, "AbstractFeature2D", "Base for two-dimensional float features"}; + py::class_, SceneGraph::PyFeatureHolder> feature3D{m, "AbstractFeature3D", "Base for three-dimensional float features"}; feature(feature2D); feature(feature3D); diff --git a/src/python/magnum/test/test_scenegraph.py b/src/python/magnum/test/test_scenegraph.py index fa8423c..5072c2c 100644 --- a/src/python/magnum/test/test_scenegraph.py +++ b/src/python/magnum/test/test_scenegraph.py @@ -242,3 +242,13 @@ class Object(unittest.TestCase): self.assertEqual(deleted, "yes :(") self.assertIsNone(camera.object) self.assertIs(len(drawables), 0) + +class Feature(unittest.TestCase): + def test(self): + class MyFeature(scenegraph.AbstractFeature3D): + def __init__(self, object: Object3D): + scenegraph.AbstractFeature3D.__init__(self, object) + + object = Object3D() + feature = MyFeature(object) + self.assertIs(feature.object, object)