*/
// EXTERNAL INCLUDES
+#include <memory>
+
#include <dali-toolkit/public-api/controls/control.h>
#include <dali/public-api/actors/camera-actor.h>
#include <dali/public-api/common/dali-common.h>
#include <dali/public-api/rendering/texture.h>
// INTERNAL INCLUDES
+#include <dali-scene3d/public-api/algorithm/navigation-mesh.h>
#include <dali-scene3d/public-api/api.h>
#include <dali-scene3d/public-api/model-components/model-node.h>
+#include <dali-scene3d/public-api/model-motion/motion-data.h>
namespace Dali
{
class DALI_SCENE3D_API Model : public Dali::Toolkit::Control
{
public:
+ // Typedefs
+ using MeshHitSignalType = Signal<bool(Model, Scene3D::ModelNode)>; ///< Mesh hit signal type @SINCE_2_2.53
+ using ColliderMeshPtr = std::unique_ptr<Algorithm::NavigationMesh>;
+
/**
* @brief Create an initialized Model.
*
* @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);
/**
* @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);
/**
* @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<std::string>& 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<ModelNode>& 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
/**