From f519caaa1eab68e58bafc95addc2788f7d0e97cb Mon Sep 17 00:00:00 2001 From: Andrew Poor Date: Wed, 24 Aug 2016 15:20:04 +0100 Subject: [PATCH] Fixed interaction between scale dimensions and bevel percentage properties of primitive visual. Change-Id: I3bfc5de454947101e1ff2fda754e6e0fe1d33b91 --- .../src/dali-toolkit/utc-Dali-VisualFactory.cpp | 180 +++++++++++++++++++++ .../visuals/primitive/primitive-visual.cpp | 26 ++- 2 files changed, 199 insertions(+), 7 deletions(-) diff --git a/automated-tests/src/dali-toolkit/utc-Dali-VisualFactory.cpp b/automated-tests/src/dali-toolkit/utc-Dali-VisualFactory.cpp index 79b2f69..37843da 100644 --- a/automated-tests/src/dali-toolkit/utc-Dali-VisualFactory.cpp +++ b/automated-tests/src/dali-toolkit/utc-Dali-VisualFactory.cpp @@ -1679,6 +1679,186 @@ int UtcDaliVisualFactoryGetPrimitiveVisual8(void) END_TEST; } +//Test if primitive shape loads correctly when told to use too many slices. +int UtcDaliVisualFactoryGetPrimitiveVisual9(void) +{ + //Set up test application first, so everything else can be handled. + ToolkitTestApplication application; + + tet_infoline( "UtcDaliVisualFactoryGetPrimitiveVisual9: Request primitive visual with above-cap slices." ); + + //Set up visual properties. + Property::Map propertyMap; + propertyMap.Insert( Visual::Property::TYPE, Visual::PRIMITIVE ); + propertyMap.Insert( PrimitiveVisual::Property::SHAPE, PrimitiveVisual::Shape::SPHERE ); + propertyMap.Insert( PrimitiveVisual::Property::SLICES, Property::Value( 1000000 ) ); + + //Test to see if shape loads correctly. + TestPrimitiveVisualWithProperties( propertyMap, application ); + + END_TEST; +} + +//Test if primitive shape loads correctly when told to use too few slices. (2 slices or less.) +int UtcDaliVisualFactoryGetPrimitiveVisual10(void) +{ + //Set up test application first, so everything else can be handled. + ToolkitTestApplication application; + + tet_infoline( "UtcDaliVisualFactoryGetPrimitiveVisual10: Request primitive visual with too few slices." ); + + //Set up visual properties. + Property::Map propertyMap; + propertyMap.Insert( Visual::Property::TYPE, Visual::PRIMITIVE ); + propertyMap.Insert( PrimitiveVisual::Property::SHAPE, PrimitiveVisual::Shape::SPHERE ); + propertyMap.Insert( PrimitiveVisual::Property::SLICES, Property::Value( 2 ) ); + + //Test to see if shape loads correctly. + TestPrimitiveVisualWithProperties( propertyMap, application ); + + END_TEST; +} + +//Test if primitive shape loads correctly when told to use too many stacks. +int UtcDaliVisualFactoryGetPrimitiveVisual11(void) +{ + //Set up test application first, so everything else can be handled. + ToolkitTestApplication application; + + tet_infoline( "UtcDaliVisualFactoryGetPrimitiveVisual11: Request primitive visual with too many stacks." ); + + //Set up visual properties. + Property::Map propertyMap; + propertyMap.Insert( Visual::Property::TYPE, Visual::PRIMITIVE ); + propertyMap.Insert( PrimitiveVisual::Property::SHAPE, PrimitiveVisual::Shape::SPHERE ); + propertyMap.Insert( PrimitiveVisual::Property::STACKS, Property::Value( 1000000 ) ); + + //Test to see if shape loads correctly. + TestPrimitiveVisualWithProperties( propertyMap, application ); + + END_TEST; +} + +//Test if primitive shape loads correctly when told to use too few stacks. (1 stack or less.) +int UtcDaliVisualFactoryGetPrimitiveVisual12(void) +{ + //Set up test application first, so everything else can be handled. + ToolkitTestApplication application; + + tet_infoline( "UtcDaliVisualFactoryGetPrimitiveVisual12: Request primitive visual with too few stacks." ); + + //Set up visual properties. + Property::Map propertyMap; + propertyMap.Insert( Visual::Property::TYPE, Visual::PRIMITIVE ); + propertyMap.Insert( PrimitiveVisual::Property::SHAPE, PrimitiveVisual::Shape::SPHERE ); + propertyMap.Insert( PrimitiveVisual::Property::STACKS, Property::Value( 1 ) ); + + //Test to see if shape loads correctly. + TestPrimitiveVisualWithProperties( propertyMap, application ); + + END_TEST; +} + +//Test if primitive shape loads correctly when told to use invalid (zero or negative) dimensions. +int UtcDaliVisualFactoryGetPrimitiveVisual13(void) +{ + //Set up test application first, so everything else can be handled. + ToolkitTestApplication application; + + tet_infoline( "UtcDaliVisualFactoryGetPrimitiveVisual13: Request primitive visual with invalid scale dimensions." ); + + //Set up visual properties. + Property::Map propertyMap; + propertyMap.Insert( Visual::Property::TYPE, Visual::PRIMITIVE ); + propertyMap.Insert( PrimitiveVisual::Property::SHAPE, PrimitiveVisual::Shape::SPHERE ); + propertyMap.Insert( PrimitiveVisual::Property::SCALE_DIMENSIONS, Vector3::ZERO ); + + //Test to see if shape loads correctly. + TestPrimitiveVisualWithProperties( propertyMap, application ); + + END_TEST; +} + +//Test if primitive shape loads correctly when told to use too low a bevel percentage. +int UtcDaliVisualFactoryGetPrimitiveVisual14(void) +{ + //Set up test application first, so everything else can be handled. + ToolkitTestApplication application; + + tet_infoline( "UtcDaliVisualFactoryGetPrimitiveVisual14: Request primitive visual with too low a bevel percentage." ); + + //Set up visual properties. + Property::Map propertyMap; + propertyMap.Insert( Visual::Property::TYPE, Visual::PRIMITIVE ); + propertyMap.Insert( PrimitiveVisual::Property::SHAPE, PrimitiveVisual::Shape::SPHERE ); + propertyMap.Insert( PrimitiveVisual::Property::BEVEL_PERCENTAGE, Property::Value( -1.0f ) ); + + //Test to see if shape loads correctly. + TestPrimitiveVisualWithProperties( propertyMap, application ); + + END_TEST; +} + +//Test if primitive shape loads correctly when told to use too high a bevel percentage. +int UtcDaliVisualFactoryGetPrimitiveVisual15(void) +{ + //Set up test application first, so everything else can be handled. + ToolkitTestApplication application; + + tet_infoline( "UtcDaliVisualFactoryGetPrimitiveVisual15: Request primitive visual with too high a bevel percentage." ); + + //Set up visual properties. + Property::Map propertyMap; + propertyMap.Insert( Visual::Property::TYPE, Visual::PRIMITIVE ); + propertyMap.Insert( PrimitiveVisual::Property::SHAPE, PrimitiveVisual::Shape::SPHERE ); + propertyMap.Insert( PrimitiveVisual::Property::BEVEL_PERCENTAGE, Property::Value( 2.0f ) ); + + //Test to see if shape loads correctly. + TestPrimitiveVisualWithProperties( propertyMap, application ); + + END_TEST; +} + +//Test if primitive shape loads correctly when told to use too low a bevel smoothness. +int UtcDaliVisualFactoryGetPrimitiveVisual16(void) +{ + //Set up test application first, so everything else can be handled. + ToolkitTestApplication application; + + tet_infoline( "UtcDaliVisualFactoryGetPrimitiveVisual16: Request primitive visual with too low a bevel smoothness." ); + + //Set up visual properties. + Property::Map propertyMap; + propertyMap.Insert( Visual::Property::TYPE, Visual::PRIMITIVE ); + propertyMap.Insert( PrimitiveVisual::Property::SHAPE, PrimitiveVisual::Shape::SPHERE ); + propertyMap.Insert( PrimitiveVisual::Property::BEVEL_SMOOTHNESS, Property::Value( -1.0f ) ); + + //Test to see if shape loads correctly. + TestPrimitiveVisualWithProperties( propertyMap, application ); + + END_TEST; +} + +//Test if primitive shape loads correctly when told to use too high a bevel smoothness. +int UtcDaliVisualFactoryGetPrimitiveVisual17(void) +{ + //Set up test application first, so everything else can be handled. + ToolkitTestApplication application; + + tet_infoline( "UtcDaliVisualFactoryGetPrimitiveVisual17: Request primitive visual with too high a bevel smoothness." ); + + //Set up visual properties. + Property::Map propertyMap; + propertyMap.Insert( Visual::Property::TYPE, Visual::PRIMITIVE ); + propertyMap.Insert( PrimitiveVisual::Property::SHAPE, PrimitiveVisual::Shape::SPHERE ); + propertyMap.Insert( PrimitiveVisual::Property::BEVEL_SMOOTHNESS, Property::Value( 2.0f ) ); + + //Test to see if shape loads correctly. + TestPrimitiveVisualWithProperties( propertyMap, application ); + + END_TEST; +} + //Test if primitive shape visual handles the case of not being passed a specific shape to use. int UtcDaliVisualFactoryGetPrimitiveVisualN1(void) { diff --git a/dali-toolkit/internal/visuals/primitive/primitive-visual.cpp b/dali-toolkit/internal/visuals/primitive/primitive-visual.cpp index 1955db5..5de9c61 100644 --- a/dali-toolkit/internal/visuals/primitive/primitive-visual.cpp +++ b/dali-toolkit/internal/visuals/primitive/primitive-visual.cpp @@ -77,8 +77,8 @@ const float DEFAULT_BEVEL_SMOOTHNESS = 0.0; ///< For bevelled cubes const Vector4 DEFAULT_COLOR = Vector4( 0.5, 0.5, 0.5, 0.0 ); ///< Grey, for all. //Property limits -const int MIN_SLICES = 1; ///< Minimum number of slices for spheres and conics -const int MIN_STACKS = 1; ///< Minimum number of stacks for spheres and conics +const int MIN_SLICES = 3; ///< Minimum number of slices for spheres and conics +const int MIN_STACKS = 2; ///< Minimum number of stacks for spheres and conics const int MAX_PARTITIONS = 255; ///< Maximum number of slices or stacks for spheres and conics const float MIN_BEVEL_PERCENTAGE = 0.0; ///< Minimum bevel percentage for bevelled cubes const float MAX_BEVEL_PERCENTAGE = 1.0; ///< Maximum bevel percentage for bevelled cubes @@ -210,10 +210,12 @@ void PrimitiveVisual::DoInitialize( Actor& actor, const Property::Map& propertyM if( mSlices > MAX_PARTITIONS ) { mSlices = MAX_PARTITIONS; + DALI_LOG_WARNING( "Value for slices clamped.\n" ); } else if ( mSlices < MIN_SLICES ) { mSlices = MIN_SLICES; + DALI_LOG_WARNING( "Value for slices clamped.\n" ); } } else @@ -231,10 +233,12 @@ void PrimitiveVisual::DoInitialize( Actor& actor, const Property::Map& propertyM if( mStacks > MAX_PARTITIONS ) { mStacks = MAX_PARTITIONS; + DALI_LOG_WARNING( "Value for stacks clamped.\n" ); } else if ( mStacks < MIN_STACKS ) { mStacks = MIN_STACKS; + DALI_LOG_WARNING( "Value for stacks clamped.\n" ); } } else @@ -276,14 +280,17 @@ void PrimitiveVisual::DoInitialize( Actor& actor, const Property::Map& propertyM if( mScaleDimensions.x <= 0.0 ) { mScaleDimensions.x = 1.0; + DALI_LOG_WARNING( "Value for scale dimensions clamped. Must be greater than zero.\n" ); } if( mScaleDimensions.y <= 0.0 ) { mScaleDimensions.y = 1.0; + DALI_LOG_WARNING( "Value for scale dimensions clamped. Must be greater than zero.\n" ); } if( mScaleDimensions.z <= 0.0 ) { mScaleDimensions.z = 1.0; + DALI_LOG_WARNING( "Value for scale dimensions clamped. Must be greater than zero.\n" ); } } else @@ -301,10 +308,12 @@ void PrimitiveVisual::DoInitialize( Actor& actor, const Property::Map& propertyM if( mBevelPercentage < MIN_BEVEL_PERCENTAGE ) { mBevelPercentage = MIN_BEVEL_PERCENTAGE; + DALI_LOG_WARNING( "Value for bevel percentage clamped.\n" ); } else if( mBevelPercentage > MAX_BEVEL_PERCENTAGE ) { mBevelPercentage = MAX_BEVEL_PERCENTAGE; + DALI_LOG_WARNING( "Value for bevel percentage clamped.\n" ); } } else @@ -322,10 +331,12 @@ void PrimitiveVisual::DoInitialize( Actor& actor, const Property::Map& propertyM if( mBevelSmoothness < MIN_SMOOTHNESS ) { mBevelSmoothness = MIN_SMOOTHNESS; + DALI_LOG_WARNING( "Value for bevel smoothness clamped.\n" ); } else if( mBevelSmoothness > MAX_SMOOTHNESS ) { mBevelSmoothness = MAX_SMOOTHNESS; + DALI_LOG_WARNING( "Value for bevel smoothness clamped.\n" ); } } else @@ -1129,16 +1140,17 @@ void PrimitiveVisual::ComputeBevelledCubeVertices( Vector& vertices, Vec int normalIndex = 0; //Track progress through normals, as vertices are calculated per face. float minDimension = std::min( std::min( dimensions.x, dimensions.y ), dimensions.z ); - float bevelScale = 1.0 - bevelPercentage; - float bevelAmount = 0.5 * bevelScale * minDimension; + float bevelAmount = 0.5 * std::min( bevelPercentage, minDimension ); //Cap bevel amount if necessary. + //Distances from centre to outer edge points. float outerX = 0.5 * dimensions.x; float outerY = 0.5 * dimensions.y; float outerZ = 0.5 * dimensions.z; - float bevelX = outerX - ( 0.5 * minDimension - bevelAmount ); - float bevelY = outerY - ( 0.5 * minDimension - bevelAmount ); - float bevelZ = outerZ - ( 0.5 * minDimension - bevelAmount ); + //Distances from centre to bevelled points. + float bevelX = outerX - bevelAmount; + float bevelY = outerY - bevelAmount; + float bevelZ = outerZ - bevelAmount; Vector positions; //Holds object points, to be shared between vertexes. positions.Resize( numPositions ); -- 2.7.4