From ad42f6a590907a6e59cc55210fee0ffa56de56c2 Mon Sep 17 00:00:00 2001 From: luiscuenca Date: Sat, 1 Dec 2018 12:32:29 -0700 Subject: [PATCH 1/2] Add method to check entities joint hierarchy --- .../entities-renderer/src/RenderableModelEntityItem.cpp | 8 ++++++++ .../entities-renderer/src/RenderableModelEntityItem.h | 1 + libraries/entities/src/EntityItem.h | 1 + libraries/entities/src/EntityScriptingInterface.cpp | 9 +++++++++ libraries/entities/src/EntityScriptingInterface.h | 2 +- libraries/shared/src/SpatiallyNestable.h | 2 ++ 6 files changed, 22 insertions(+), 1 deletion(-) diff --git a/libraries/entities-renderer/src/RenderableModelEntityItem.cpp b/libraries/entities-renderer/src/RenderableModelEntityItem.cpp index f60bf20e3d..5ed45aa1e7 100644 --- a/libraries/entities-renderer/src/RenderableModelEntityItem.cpp +++ b/libraries/entities-renderer/src/RenderableModelEntityItem.cpp @@ -774,6 +774,14 @@ bool RenderableModelEntityItem::shouldBePhysical() const { } } +int RenderableModelEntityItem::getJointParent(int index) const { + auto model = getModel(); + if (model) { + return model->getRig().getJointParentIndex(index); + } + return -1; +} + glm::quat RenderableModelEntityItem::getAbsoluteJointRotationInObjectFrame(int index) const { auto model = getModel(); if (model) { diff --git a/libraries/entities-renderer/src/RenderableModelEntityItem.h b/libraries/entities-renderer/src/RenderableModelEntityItem.h index 79e56d7a76..ba185dee96 100644 --- a/libraries/entities-renderer/src/RenderableModelEntityItem.h +++ b/libraries/entities-renderer/src/RenderableModelEntityItem.h @@ -94,6 +94,7 @@ public: // these are in the frame of this object (model space) virtual glm::quat getAbsoluteJointRotationInObjectFrame(int index) const override; virtual glm::vec3 getAbsoluteJointTranslationInObjectFrame(int index) const override; + virtual int getJointParent(int index) const override; virtual bool setAbsoluteJointRotationInObjectFrame(int index, const glm::quat& rotation) override; virtual bool setAbsoluteJointTranslationInObjectFrame(int index, const glm::vec3& translation) override; diff --git a/libraries/entities/src/EntityItem.h b/libraries/entities/src/EntityItem.h index c49017b2e0..954a2740ac 100644 --- a/libraries/entities/src/EntityItem.h +++ b/libraries/entities/src/EntityItem.h @@ -455,6 +455,7 @@ public: // these are in the frame of this object virtual glm::quat getAbsoluteJointRotationInObjectFrame(int index) const override { return glm::quat(); } virtual glm::vec3 getAbsoluteJointTranslationInObjectFrame(int index) const override { return glm::vec3(0.0f); } + virtual int getJointParent(int index) const override { return -1; } virtual bool setLocalJointRotation(int index, const glm::quat& rotation) override { return false; } virtual bool setLocalJointTranslation(int index, const glm::vec3& translation) override { return false; } diff --git a/libraries/entities/src/EntityScriptingInterface.cpp b/libraries/entities/src/EntityScriptingInterface.cpp index 3491688588..aae03789e0 100644 --- a/libraries/entities/src/EntityScriptingInterface.cpp +++ b/libraries/entities/src/EntityScriptingInterface.cpp @@ -1806,6 +1806,15 @@ glm::vec3 EntityScriptingInterface::localCoordsToVoxelCoords(const QUuid& entity } } +int EntityScriptingInterface::getJointParent(const QUuid& entityID, int index) { + if (auto entity = checkForTreeEntityAndTypeMatch(entityID, EntityTypes::Model)) { + auto modelEntity = std::dynamic_pointer_cast(entity); + return modelEntity->getJointParent(index); + } else { + return -1; + } +} + glm::vec3 EntityScriptingInterface::getAbsoluteJointTranslationInObjectFrame(const QUuid& entityID, int jointIndex) { if (auto entity = checkForTreeEntityAndTypeMatch(entityID, EntityTypes::Model)) { auto modelEntity = std::dynamic_pointer_cast(entity); diff --git a/libraries/entities/src/EntityScriptingInterface.h b/libraries/entities/src/EntityScriptingInterface.h index df7b0df9a1..ad1c11ba41 100644 --- a/libraries/entities/src/EntityScriptingInterface.h +++ b/libraries/entities/src/EntityScriptingInterface.h @@ -980,7 +980,7 @@ public slots: */ // FIXME move to a renderable entity interface Q_INVOKABLE glm::vec3 getAbsoluteJointTranslationInObjectFrame(const QUuid& entityID, int jointIndex); - + Q_INVOKABLE int getJointParent(const QUuid& entityID, int index); /**jsdoc * Get the translation of a joint in a {@link Entities.EntityType|Model} entity relative to the entity's position and * orientation. diff --git a/libraries/shared/src/SpatiallyNestable.h b/libraries/shared/src/SpatiallyNestable.h index 03ed97afbd..f8658f73d4 100644 --- a/libraries/shared/src/SpatiallyNestable.h +++ b/libraries/shared/src/SpatiallyNestable.h @@ -163,6 +163,8 @@ public: virtual glm::vec3 getAbsoluteJointScaleInObjectFrame(int index) const { return glm::vec3(1.0f); } virtual glm::quat getAbsoluteJointRotationInObjectFrame(int index) const { return glm::quat(); } virtual glm::vec3 getAbsoluteJointTranslationInObjectFrame(int index) const { return glm::vec3(); } + virtual int getJointParent(int index) const { return -1; } + virtual bool setAbsoluteJointRotationInObjectFrame(int index, const glm::quat& rotation) { return false; } virtual bool setAbsoluteJointTranslationInObjectFrame(int index, const glm::vec3& translation) {return false; } From 37854ab05eb061961d83e5d10f5b4d71a2dd5c4a Mon Sep 17 00:00:00 2001 From: Luis Cuenca Date: Thu, 6 Dec 2018 11:58:48 -0800 Subject: [PATCH 2/2] Add jsdoc information --- libraries/entities/src/EntityScriptingInterface.h | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/libraries/entities/src/EntityScriptingInterface.h b/libraries/entities/src/EntityScriptingInterface.h index ad1c11ba41..4b06d2d16b 100644 --- a/libraries/entities/src/EntityScriptingInterface.h +++ b/libraries/entities/src/EntityScriptingInterface.h @@ -980,7 +980,16 @@ public slots: */ // FIXME move to a renderable entity interface Q_INVOKABLE glm::vec3 getAbsoluteJointTranslationInObjectFrame(const QUuid& entityID, int jointIndex); + + /**jsdoc + * Get the index of the parent joint. + * @function Entities.getJointParent + * @param {Uuid} entityID - The ID of the entity. + * @param {number} index - The integer index of the joint. + * @returns {number} The index of the parent joint. + */ Q_INVOKABLE int getJointParent(const QUuid& entityID, int index); + /**jsdoc * Get the translation of a joint in a {@link Entities.EntityType|Model} entity relative to the entity's position and * orientation.