X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;f=dali-scene3d%2Fpublic-api%2Fcontrols%2Fmodel%2Fmodel.h;h=f21887696560e661e1d30b1e5034e89e52be9280;hb=0ab2af8053436971758161fbf1c4ad73058ac5ce;hp=39e772334851bad03c1d1566a1c50fca670562de;hpb=36ace264481e080b8b7efcf924eb3cd960032277;p=platform%2Fcore%2Fuifw%2Fdali-toolkit.git diff --git a/dali-scene3d/public-api/controls/model/model.h b/dali-scene3d/public-api/controls/model/model.h index 39e7723..f218876 100644 --- a/dali-scene3d/public-api/controls/model/model.h +++ b/dali-scene3d/public-api/controls/model/model.h @@ -19,13 +19,18 @@ */ // EXTERNAL INCLUDES +#include + #include #include #include #include // INTERNAL INCLUDES +#include #include +#include +#include namespace Dali { @@ -69,16 +74,21 @@ class Model; class DALI_SCENE3D_API Model : public Dali::Toolkit::Control { public: + // Typedefs + using MeshHitSignalType = Signal; ///< Mesh hit signal type @SINCE_2_2.53 + using ColliderMeshPtr = std::unique_ptr; + /** * @brief Create an initialized Model. * * @SINCE_2_1.41 * @param[in] modelUrl model file path.(e.g., glTF, and DLI). * @param[in] resourceDirectoryUrl resource file path that includes binary, image etc. + * @note If modelUrl is empty, it will not load resouces. Only ModelRoot will be created. * @note If resourceDirectoryUrl is empty, the parent directory path of modelUrl is used for resource path. * @return A handle to a newly allocated Dali resource */ - static Model New(const std::string& modelUrl, const std::string& resourceDirectoryUrl = std::string()); + static Model New(const std::string& modelUrl = std::string(), const std::string& resourceDirectoryUrl = std::string()); /** * @brief Creates an uninitialized Model. @@ -113,7 +123,7 @@ public: * @SINCE_2_1.41 * @param[in] rhs A reference to the moved handle */ - Model(Model&& rhs); + Model(Model&& rhs) noexcept; /** * @brief Assignment operator. @@ -131,7 +141,7 @@ public: * @param[in] rhs A reference to the moved handle * @return A reference to this */ - Model& operator=(Model&& rhs); + Model& operator=(Model&& rhs) noexcept; /** * @brief Downcasts an Object handle to Model. @@ -146,12 +156,29 @@ public: static Model DownCast(BaseHandle handle); /** - * @brief Retrieves model root Actor. + * @brief Retrieves model root Node. * * @SINCE_2_1.41 - * @return Root Actor of the model. + * @return Root Node of the model. + */ + const ModelNode GetModelRoot() const; + + /** + * @brief Add new ModelNode to this Model. + * This modelNode will become child of ModelRoot. + * + * @SINCE_2_2.22 + * @param[in] modelNode the root of ModelNode tree to be added. + */ + void AddModelNode(ModelNode modelNode); + + /** + * @brief Remove ModelNode from this Model. + * + * @SINCE_2_2.22 + * @param[in] modelNode the root of ModelNode tree to be removed. */ - const Actor GetModelRoot() const; + void RemoveModelNode(ModelNode modelNode); /** * @brief Whether allow this model's children actor to use events. @@ -296,6 +323,73 @@ public: */ bool ApplyCamera(uint32_t index, Dali::CameraActor camera) const; + /** + * @brief Returns a child ModelNode object with a name that matches nodeName. + * + * @SINCE_2_2.34 + * @param[in] nodeName The name of the child ModelNode object you want to find. + * @return Returns a child ModelNode object with a name that matches nodeName. If there is no corresponding child ModelNode object, it returns an empty ModelNode object. + */ + ModelNode FindChildModelNodeByName(std::string_view nodeName); + + /** + * @brief Retrieve the list of blendshape name that current Model hold. + * The name will be appended end of input list. + * + * @SINCE_2_2.34 + * @param[in, out] blendShapeNames The name of blendShape list collected. + * @note This method should be called after Model load finished. + */ + void RetrieveBlendShapeNames(std::vector& blendShapeNames) const; + + /** + * @brief Retrieve the list of ModelNode that contains given blend shape name. + * The ModelNode will be appended end of input list. + * + * @SINCE_2_2.34 + * @param[in] blendShapeName The name of blendShape that want to collect. + * @param[in, out] modelNodes The ModelNode list collected. + * @note This method should be called after Model load finished. + */ + void RetrieveModelNodesByBlendShapeName(std::string_view blendShapeName, std::vector& modelNodes) const; + + /** + * @brief Generate specific animation of this Model by inputed MotionData. + * + * @SINCE_2_2.34 + * @param[in] motionData the data of motion animation. + * @return Animation that be generated by MotionData. Or empty handle if there is no valid animation generated. + * @note This method should be called after Model load finished. + */ + Dali::Animation GenerateMotionDataAnimation(MotionData motionData); + + /** + * @brief Set specific values of this Model by inputed MotionData. + * @note If MotionValue's ValueType is ValueType::KEY_FRAMES, the last value will be set. + * + * @SINCE_2_2.34 + * @param[in] motionData the data of motion to be set. + * @note This method should be called after Model load finished. + */ + void SetMotionData(Scene3D::MotionData motionData); + + /** + * @brief This signal is emitted when the collider mesh is touched/hit. + * + * A callback of the following type may be connected: + * @code + * bool YourCallbackName(Model model, ModelNode modelNode); + * @endcode + * Here the model is the model that is hit and the ModelNode containing the collider mesh + * was applied to. + * The return value of True, indicates that the hover event should be consumed. + * Otherwise the signal will be emitted on the next sensitive parent of the actor. + * + * @SINCE_2_2.53 + * @return The signal to connect to + */ + MeshHitSignalType& MeshHitSignal(); + public: // Not intended for application developers /// @cond internal /**