X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;f=dali-scene3d%2Fpublic-api%2Fcontrols%2Fmodel%2Fmodel.h;h=88bc524df189f775424881652a19f0b1c365fd0a;hb=HEAD;hp=8025c64dc21a7abbda955008502d4d1baa80b4c3;hpb=5feee171a62b20f7d7b8cd1bcfdf5abb79bdd524;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 8025c64..88bc524 100644 --- a/dali-scene3d/public-api/controls/model/model.h +++ b/dali-scene3d/public-api/controls/model/model.h @@ -2,7 +2,7 @@ #define DALI_SCENE3D_MODEL_H /* - * Copyright (c) 2023 Samsung Electronics Co., Ltd. + * Copyright (c) 2024 Samsung Electronics Co., Ltd. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -19,14 +19,18 @@ */ // EXTERNAL INCLUDES +#include + #include #include #include #include // INTERNAL INCLUDES +#include #include #include +#include namespace Dali { @@ -52,6 +56,8 @@ class Model; * * By default, The loaded model has its own position and size which are defined in vertex buffer regardless of the Control size. * + * @note We support to render model well only if glsl version is higher than 300. + * * @SINCE_2_1.41 * @code * @@ -70,6 +76,10 @@ 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. * @@ -159,7 +169,7 @@ public: * @brief Add new ModelNode to this Model. * This modelNode will become child of ModelRoot. * - * @SINCE_2_2.99 + * @SINCE_2_2.22 * @param[in] modelNode the root of ModelNode tree to be added. */ void AddModelNode(ModelNode modelNode); @@ -167,7 +177,7 @@ public: /** * @brief Remove ModelNode from this Model. * - * @SINCE_2_2.99 + * @SINCE_2_2.22 * @param[in] modelNode the root of ModelNode tree to be removed. */ void RemoveModelNode(ModelNode modelNode); @@ -318,11 +328,109 @@ public: /** * @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 Retrieves 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 Retrieves 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 Generates 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 Sets 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 Sets whether this Model casts shadow or not. + * If it is true, this model is drawn on Shadow Map. + * + * @SINCE_2_3.99 + * @param[in] castShadow Whether this Model casts shadow or not. + * @note This method affects all of the child ModelNode. + * However, same property of each child ModelNode can be changed respectively and it not changes parent's property. + */ + void CastShadow(bool castShadow); + + /** + * @brief Retrieves whether the Model casts shadow or not for Light. + * + * @SINCE_2_3.99 + * @return True if this model casts shadow. + * @note IBL does not cast any shadow. + */ + bool IsShadowCasting() const; + + /** + * @brief Sets whether this Model receives shadow or not. + * If it is true, shadows are drawn on this model. + * + * @SINCE_2_3.99 + * @param[in] receiveShadow Whether this Model receives shadow or not. + * @note This method affects all of the child ModelNode. + * However, same property of each child ModelNode can be changed respectively and it not changes parent's property. + */ + void ReceiveShadow(bool receiveShadow); + + /** + * @brief Retrieves whether the Model receives shadow or not for Light. + * + * @SINCE_2_3.99 + * @return True if this model receives shadow. + */ + bool IsShadowReceiving() const; + + /** + * @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 /**