From 58e1b3c5d937d7b670f01dada76fef436ebdda40 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Vladim=C3=ADr=20Vondru=C5=A1?= Date: Thu, 27 Jun 2019 19:36:53 +0200 Subject: [PATCH] python: make scenegraph features actually instantiable from python. --- src/python/magnum/scenegraph.cpp | 8 +++++--- src/python/magnum/test/test_scenegraph.py | 10 ++++++++++ 2 files changed, 15 insertions(+), 3 deletions(-) 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)