diff --git a/modules/ovis/include/opencv2/ovis.hpp b/modules/ovis/include/opencv2/ovis.hpp index b4063683e..5e5db358d 100644 --- a/modules/ovis/include/opencv2/ovis.hpp +++ b/modules/ovis/include/opencv2/ovis.hpp @@ -45,6 +45,7 @@ enum EntityProperty { ENTITY_MATERIAL, ENTITY_SCALE, + ENTITY_AABB_WORLD }; /** @@ -106,6 +107,14 @@ public: /// @overload CV_WRAP virtual void setEntityProperty(const String& name, int prop, const String& value) = 0; + /** + * get the property of an entity + * @param name entity name + * @param prop @ref EntityProperty + * @param value the value + */ + CV_WRAP virtual void getEntityProperty(const String& name, int prop, OutputArray value) = 0; + /** * convenience method to visualize a camera position * diff --git a/modules/ovis/src/ovis.cpp b/modules/ovis/src/ovis.cpp index ca1a34f25..58f67b848 100644 --- a/modules/ovis/src/ovis.cpp +++ b/modules/ovis/src/ovis.cpp @@ -43,8 +43,14 @@ void _createTexture(const String& name, Mat image) case CV_8UC1: format = PF_BYTE_L; break; + case CV_16UC1: + format = PF_L16; + break; + case CV_32FC1: + format = PF_FLOAT32_R; + break; default: - CV_Error(Error::StsBadArg, "currently only CV_8UC1, CV_8UC3, CV_8UC4 textures are supported"); + CV_Error(Error::StsBadArg, "currently supported formats are only CV_8UC1, CV_8UC3, CV_8UC4, CV_16UC1, CV_32FC1"); break; } @@ -388,18 +394,26 @@ public: int dst_type; switch(src_type) { + case PF_R8: + case PF_L8: + dst_type = CV_8U; + break; case PF_BYTE_RGB: dst_type = CV_8UC3; break; case PF_BYTE_RGBA: dst_type = CV_8UC4; break; + case PF_FLOAT32_R: + dst_type = CV_32F; + break; case PF_FLOAT32_RGB: dst_type = CV_32FC3; break; case PF_FLOAT32_RGBA: dst_type = CV_32FC4; break; + case PF_L16: case PF_DEPTH16: dst_type = CV_16U; break; @@ -549,6 +563,35 @@ public: node.setScale(value[0], value[1], value[2]); } + void getEntityProperty(const String& name, int prop, OutputArray value) + { + SceneNode& node = _getSceneNode(sceneMgr, name); + switch(prop) + { + case ENTITY_SCALE: + { + Vector3 s = node.getScale(); + Mat_(1, 3, s.ptr()).copyTo(value); + return; + } + case ENTITY_AABB_WORLD: + { + Entity* ent = dynamic_cast(node.getAttachedObject(name)); + CV_Assert(ent && "invalid entity"); + AxisAlignedBox aabb = ent->getWorldBoundingBox(true); + Vector3 mn = aabb.getMinimum(); + Vector3 mx = aabb.getMaximum(); + Mat_ ret(2, 3); + Mat_(1, 3, mn.ptr()).copyTo(ret.row(0)); + Mat_(1, 3, mx.ptr()).copyTo(ret.row(1)); + ret.copyTo(value); + return; + } + default: + CV_Error(Error::StsBadArg, "unsupported property"); + } + } + void _createBackground() { String name = "_" + sceneMgr->getName() + "_DefaultBackground";