X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;f=automated-tests%2Fsrc%2Fdali-scene3d%2Futc-Dali-Model.cpp;h=30b755d89a6c2a17acc58154bfb87fd2a1e832ee;hb=2116ad7b1ce51093a891ca6b3e83419b0b5b79dd;hp=c219f9379c6dd16722aec08eed97e586caf094d2;hpb=0d1a321056df3120e1896035e4a4f9617cc8a1a5;p=platform%2Fcore%2Fuifw%2Fdali-toolkit.git diff --git a/automated-tests/src/dali-scene3d/utc-Dali-Model.cpp b/automated-tests/src/dali-scene3d/utc-Dali-Model.cpp index c219f93..30b755d 100644 --- a/automated-tests/src/dali-scene3d/utc-Dali-Model.cpp +++ b/automated-tests/src/dali-scene3d/utc-Dali-Model.cpp @@ -17,6 +17,7 @@ #include #include +#include #include #include @@ -27,6 +28,10 @@ #include #include +#include +#include +#include + #include using namespace Dali; @@ -53,7 +58,9 @@ const bool DEFAULT_MODEL_CHILDREN_FOCUSABLE = false; */ const char* TEST_GLTF_FILE_NAME = TEST_RESOURCE_DIR "/AnimatedCube.gltf"; const char* TEST_GLTF_ANIMATION_TEST_FILE_NAME = TEST_RESOURCE_DIR "/animationTest.gltf"; +const char* TEST_GLTF_EXTRAS_FILE_NAME = TEST_RESOURCE_DIR "/AnimatedMorphCubeAnimateNonZeroFrame.gltf"; const char* TEST_GLTF_MULTIPLE_PRIMITIVE_FILE_NAME = TEST_RESOURCE_DIR "/simpleMultiplePrimitiveTest.gltf"; +const char* TEST_GLTF_MORPH_FILE_NAME = TEST_RESOURCE_DIR "/AnimatedMorphCube.gltf"; const char* TEST_DLI_FILE_NAME = TEST_RESOURCE_DIR "/arc.dli"; const char* TEST_DLI_EXERCISE_FILE_NAME = TEST_RESOURCE_DIR "/exercise.dli"; @@ -1135,8 +1142,7 @@ int UtcDaliModelCameraGenerate02(void) CameraActor appliedCamera; DALI_TEST_EQUALS(model.ApplyCamera(0u, appliedCamera), false, TEST_LOCATION); // Cannot apply into empty camera. - auto CompareCameraProperties = [](CameraActor lhs, CameraActor rhs, const char* location) - { + auto CompareCameraProperties = [](CameraActor lhs, CameraActor rhs, const char* location) { DALI_TEST_EQUALS(lhs.GetProperty(Dali::CameraActor::Property::PROJECTION_MODE), rhs.GetProperty(Dali::CameraActor::Property::PROJECTION_MODE), TEST_LOCATION); DALI_TEST_EQUALS(lhs.GetProperty(Dali::CameraActor::Property::NEAR_PLANE_DISTANCE), rhs.GetProperty(Dali::CameraActor::Property::NEAR_PLANE_DISTANCE), TEST_LOCATION); @@ -1488,3 +1494,196 @@ int UtcDaliModelSizeChange2(void) END_TEST; } + +int UtcDaliModelRetrieveBlendShapeNames(void) +{ + tet_infoline(" UtcDaliModelRetrieveBlendShapeByName."); + + ToolkitTestApplication application; + + Scene3D::Model model = Scene3D::Model::New(TEST_GLTF_EXTRAS_FILE_NAME); + model.SetProperty(Dali::Actor::Property::SIZE, Vector3(300, 300, 300)); + application.GetScene().Add(model); + + application.SendNotification(); + application.Render(); + + DALI_TEST_EQUALS(Test::WaitForEventThreadTrigger(1), true, TEST_LOCATION); + application.SendNotification(); + application.Render(); + + DALI_TEST_EQUALS(model.GetChildCount(), 1u, TEST_LOCATION); + + // Get target ModelNode that has extras + Scene3D::ModelNode expectNode = model.FindChildModelNodeByName("AnimatedMorphCube"); + + // Pair of expected blend shape index from expectNode. + std::map expectBlendShapeNames = { + {"Target_0", 0u}, + {"Target_1", 1u}, + }; + + std::vector blendShapeNameList; + model.RetrieveBlendShapeNames(blendShapeNameList); + + DALI_TEST_EQUALS(blendShapeNameList.size(), expectBlendShapeNames.size(), TEST_LOCATION); + for(auto i = 0u; i < blendShapeNameList.size(); ++i) + { + const auto& name = blendShapeNameList[i]; + tet_printf("Check retrieved blendshape name : %s\n", name.c_str()); + + const auto& iter = expectBlendShapeNames.find(name); + DALI_TEST_CHECK(iter != expectBlendShapeNames.end()); + + std::vector nodeList; + model.RetrieveModelNodesByBlendShapeName(name, nodeList); + DALI_TEST_EQUALS(nodeList.size(), 1u, TEST_LOCATION); + DALI_TEST_EQUALS(nodeList[0], expectNode, TEST_LOCATION); + DALI_TEST_EQUALS(nodeList[0].GetBlendShapeIndexByName(name), iter->second, TEST_LOCATION); + } + + END_TEST; +} + +int UtcDaliModelGenerateMotionDataAnimation01(void) +{ + ToolkitTestApplication application; + + Scene3D::Model model = Scene3D::Model::New(TEST_GLTF_MORPH_FILE_NAME); + model.SetProperty(Dali::Actor::Property::SIZE, Vector2(50, 50)); + application.GetScene().Add(model); + + gResourceReadyCalled = false; + model.ResourceReadySignal().Connect(&OnResourceReady); + DALI_TEST_EQUALS(gResourceReadyCalled, false, TEST_LOCATION); + + application.SendNotification(); + application.Render(); + + DALI_TEST_EQUALS(Test::WaitForEventThreadTrigger(1), true, TEST_LOCATION); + application.SendNotification(); + application.Render(); + + DALI_TEST_EQUALS(gResourceReadyCalled, true, TEST_LOCATION); + + KeyFrames floatKeyFrames = KeyFrames::New(); + floatKeyFrames.Add(0.0f, 1.0f); + floatKeyFrames.Add(1.0f, 0.5f); + + float duration = 3.0f; + Scene3D::MotionData motionData = Scene3D::MotionData::New(duration); + motionData.Add(Scene3D::MotionTransformIndex::New("AnimatedMorphCube", Scene3D::MotionTransformIndex::TransformType::SCALE_Y), Scene3D::MotionValue::New(2.0f)); + motionData.Add(Scene3D::MotionTransformIndex::New("AnimatedMorphCube", Scene3D::MotionTransformIndex::TransformType::SCALE_Z), Scene3D::MotionValue::New(floatKeyFrames)); + motionData.Add(Scene3D::BlendShapeIndex::New("AnimatedMorphCube", 0), Scene3D::MotionValue::New(0.5f)); + motionData.Add(Scene3D::BlendShapeIndex::New("AnimatedMorphCube", 1), Scene3D::MotionValue::New(floatKeyFrames)); + + Animation generatedAnimation = model.GenerateMotionDataAnimation(motionData); + DALI_TEST_CHECK(generatedAnimation); + DALI_TEST_EQUALS(generatedAnimation.GetDuration(), duration, TEST_LOCATION); + + Scene3D::MotionData invalidMotionData = Scene3D::MotionData::New(duration); + invalidMotionData.Add(Scene3D::MotionTransformIndex::New("NotAnimatedMorphCube", Scene3D::MotionTransformIndex::TransformType::SCALE_Y), Scene3D::MotionValue::New(2.0f)); + invalidMotionData.Add(Scene3D::MotionTransformIndex::New("NotAnimatedMorphCube", Scene3D::MotionTransformIndex::TransformType::SCALE_Z), Scene3D::MotionValue::New(floatKeyFrames)); + invalidMotionData.Add(Scene3D::BlendShapeIndex::New("NotAnimatedMorphCube", 0), Scene3D::MotionValue::New(0.5f)); + invalidMotionData.Add(Scene3D::BlendShapeIndex::New("NotAnimatedMorphCube", 1), Scene3D::MotionValue::New(floatKeyFrames)); + + generatedAnimation = model.GenerateMotionDataAnimation(invalidMotionData); + DALI_TEST_CHECK(!generatedAnimation); // Animation should be empty if motion data have invalid index. + + END_TEST; +} + +int UtcDaliModelSetMotionData(void) +{ + ToolkitTestApplication application; + + Scene3D::Model model = Scene3D::Model::New(TEST_GLTF_MORPH_FILE_NAME); + model.SetProperty(Dali::Actor::Property::SIZE, Vector2(50, 50)); + application.GetScene().Add(model); + + gResourceReadyCalled = false; + model.ResourceReadySignal().Connect(&OnResourceReady); + DALI_TEST_EQUALS(gResourceReadyCalled, false, TEST_LOCATION); + + application.SendNotification(); + application.Render(); + + DALI_TEST_EQUALS(Test::WaitForEventThreadTrigger(1), true, TEST_LOCATION); + application.SendNotification(); + application.Render(); + + DALI_TEST_EQUALS(gResourceReadyCalled, true, TEST_LOCATION); + + KeyFrames floatKeyFrames = KeyFrames::New(); + floatKeyFrames.Add(0.0f, 1.0f); + floatKeyFrames.Add(1.0f, 0.5f); + + float duration = 3.0f; + Scene3D::MotionData motionData = Scene3D::MotionData::New(duration); + motionData.Add(Scene3D::MotionTransformIndex::New("AnimatedMorphCube", Scene3D::MotionTransformIndex::TransformType::SCALE_Y), Scene3D::MotionValue::New(2.0f)); + motionData.Add(Scene3D::MotionTransformIndex::New("AnimatedMorphCube", Scene3D::MotionTransformIndex::TransformType::SCALE_Z), Scene3D::MotionValue::New(floatKeyFrames)); + motionData.Add(Scene3D::BlendShapeIndex::New("AnimatedMorphCube", 0), Scene3D::MotionValue::New(0.5f)); + motionData.Add(Scene3D::BlendShapeIndex::New("AnimatedMorphCube", 1), Scene3D::MotionValue::New(floatKeyFrames)); + + auto cubeModelNode = model.FindChildModelNodeByName("AnimatedMorphCube"); + + float expectScaleX = cubeModelNode.GetProperty(Actor::Property::SCALE_X); + + model.SetMotionData(motionData); + + DALI_TEST_EQUALS(cubeModelNode.GetProperty(Actor::Property::SCALE_X), expectScaleX, TEST_LOCATION); + DALI_TEST_EQUALS(cubeModelNode.GetProperty(Actor::Property::SCALE_Y), 2.0f, TEST_LOCATION); + DALI_TEST_EQUALS(cubeModelNode.GetProperty(Actor::Property::SCALE_Z), 0.5f, TEST_LOCATION); ///< Last value of keyframes + + END_TEST; +} + +int UtcDaliModelBlendShapeMotionDataByName(void) +{ + ToolkitTestApplication application; + + Scene3D::Model model = Scene3D::Model::New(TEST_GLTF_EXTRAS_FILE_NAME); + model.SetProperty(Dali::Actor::Property::SIZE, Vector2(50, 50)); + application.GetScene().Add(model); + + gResourceReadyCalled = false; + model.ResourceReadySignal().Connect(&OnResourceReady); + DALI_TEST_EQUALS(gResourceReadyCalled, false, TEST_LOCATION); + + application.SendNotification(); + application.Render(); + + DALI_TEST_EQUALS(Test::WaitForEventThreadTrigger(1), true, TEST_LOCATION); + application.SendNotification(); + application.Render(); + + DALI_TEST_EQUALS(gResourceReadyCalled, true, TEST_LOCATION); + + KeyFrames floatKeyFrames = KeyFrames::New(); + floatKeyFrames.Add(0.0f, 0.5f); + floatKeyFrames.Add(1.0f, 1.0f); + + float duration = 3.0f; + Scene3D::MotionData motionData = Scene3D::MotionData::New(duration); + motionData.Add(Scene3D::BlendShapeIndex::New("Target_0"), Scene3D::MotionValue::New(0.5f)); + motionData.Add(Scene3D::BlendShapeIndex::New("Target_1"), Scene3D::MotionValue::New(floatKeyFrames)); + + Animation generatedAnimation = model.GenerateMotionDataAnimation(motionData); + DALI_TEST_CHECK(generatedAnimation); + DALI_TEST_EQUALS(generatedAnimation.GetDuration(), duration, TEST_LOCATION); + + model.SetMotionData(motionData); + + // Get target ModelNode that has extras + Scene3D::ModelNode expectNode = model.FindChildModelNodeByName("AnimatedMorphCube"); + auto propertyIndex = expectNode.GetPropertyIndex(motionData.GetIndex(0u).GetPropertyName(expectNode)); + + DALI_TEST_CHECK(propertyIndex != Property::INVALID_INDEX); + DALI_TEST_EQUALS(expectNode.GetProperty(propertyIndex), 0.5f, TEST_LOCATION); + + propertyIndex = expectNode.GetPropertyIndex(motionData.GetIndex(1u).GetPropertyName(expectNode)); + DALI_TEST_CHECK(propertyIndex != Property::INVALID_INDEX); + DALI_TEST_EQUALS(expectNode.GetProperty(propertyIndex), 1.0f, TEST_LOCATION); + + END_TEST; +}