diff --git a/modules/ovis/include/opencv2/ovis.hpp b/modules/ovis/include/opencv2/ovis.hpp index 0cc2b9f94fb..f99165c6549 100644 --- a/modules/ovis/include/opencv2/ovis.hpp +++ b/modules/ovis/include/opencv2/ovis.hpp @@ -109,7 +109,8 @@ class CV_EXPORTS_W WindowScene { CV_WRAP virtual void setEntityProperty(const String& name, int prop, const Scalar& value) = 0; /// @overload - CV_WRAP virtual void setEntityProperty(const String& name, int prop, const String& value) = 0; + CV_WRAP virtual void setEntityProperty(const String& name, int prop, const String& value, + int subEntityIdx = -1) = 0; /** * get the property of an entity diff --git a/modules/ovis/src/ovis.cpp b/modules/ovis/src/ovis.cpp index d846fd1a48c..6befbe68f53 100644 --- a/modules/ovis/src/ovis.cpp +++ b/modules/ovis/src/ovis.cpp @@ -687,7 +687,7 @@ class WindowSceneImpl : public WindowScene frameCtrlrs.erase(animstate); } - void setEntityProperty(const String& name, int prop, const String& value) CV_OVERRIDE + void setEntityProperty(const String& name, int prop, const String& value, int subEntityIdx) CV_OVERRIDE { CV_Assert(prop == ENTITY_MATERIAL); SceneNode& node = _getSceneNode(sceneMgr, name); @@ -698,13 +698,18 @@ class WindowSceneImpl : public WindowScene Camera* cam = dynamic_cast(node.getAttachedObject(name)); if(cam) { + CV_Assert(subEntityIdx == -1 && "Camera Entities do not have SubEntities"); cam->setMaterial(mat); return; } Entity* ent = dynamic_cast(node.getAttachedObject(name)); CV_Assert(ent && "invalid entity"); - ent->setMaterial(mat); + + if (subEntityIdx < 0) + ent->setMaterial(mat); + else + ent->getSubEntities()[subEntityIdx]->setMaterial(mat); } void setEntityProperty(const String& name, int prop, const Scalar& value) CV_OVERRIDE