+ Dali::Property::Value property(Property::MAP);
+ if( SetPropertyFromNode( *image, Property::MAP, property, constant ) )
+ {
+ Property::Map* map = property.GetMap();
+
+ if( map )
+ {
+ (*map)[ KEYNAME_TYPE ] = Property::Value(std::string("FrameBufferImage") );
+ ret = FrameBufferImage::DownCast( Dali::Scripting::NewImage( property ) );
+ mFrameBufferImageLut[ name ] = ret;
+ }
+ }
+ }
+ }
+ }
+
+ return ret;
+}
+
+Path Builder::GetPath( const std::string& name )
+{
+ DALI_ASSERT_ALWAYS(mParser.GetRoot() && "Builder script not loaded");
+
+ Path ret;
+
+ PathLut::const_iterator iter( mPathLut.find( name ) );
+ if( iter != mPathLut.end() )
+ {
+ ret = iter->second;
+ }
+ else
+ {
+ if( OptionalChild paths = IsChild( *mParser.GetRoot(), "paths") )
+ {
+ if( OptionalChild path = IsChild( *paths, name ) )
+ {
+ //points property
+ if( OptionalChild pointsProperty = IsChild( *path, "points") )
+ {
+ Dali::Property::Value points(Property::ARRAY);
+ if( SetPropertyFromNode( *pointsProperty, Property::ARRAY, points ) )
+ {
+ ret = Path::New();
+ ret.SetProperty( Path::Property::POINTS, points);
+
+ //controlPoints property
+ if( OptionalChild pointsProperty = IsChild( *path, "controlPoints") )
+ {
+ Dali::Property::Value points(Property::ARRAY);
+ if( SetPropertyFromNode( *pointsProperty, Property::ARRAY, points ) )
+ {
+ ret.SetProperty( Path::Property::CONTROL_POINTS, points);
+ }
+ }
+ else
+ {
+ //Curvature
+ float curvature(0.25f);
+ if( OptionalFloat pointsProperty = IsFloat( *path, "curvature") )
+ {
+ curvature = *pointsProperty;
+ }
+ ret.GenerateControlPoints(curvature);
+ }
+
+ //Add the new path to the hash table for paths
+ mPathLut[ name ] = ret;
+ }
+ }
+ else
+ {
+ //Interpolation points not specified
+ DALI_SCRIPT_WARNING("Interpolation points not specified for path '%s'\n", name.c_str() );
+ }
+ }
+
+ }
+ }
+
+ return ret;
+}
+
+PathConstrainer Builder::GetPathConstrainer( const std::string& name )
+{
+ DALI_ASSERT_ALWAYS(mParser.GetRoot() && "Builder script not loaded");
+
+ //Search the pathConstrainer in the LUT
+ size_t count( mPathConstrainerLut.size() );
+ for( size_t i(0); i!=count; ++i )
+ {
+ if( mPathConstrainerLut[i].name == name )
+ {
+ //PathConstrainer has already been created
+ return mPathConstrainerLut[i].pathConstrainer;
+ }
+ }
+
+ //Create a new PathConstrainer
+ PathConstrainer ret;
+ if( OptionalChild constrainers = IsChild( *mParser.GetRoot(), "constrainers") )
+ {
+ if( OptionalChild pathConstrainer = IsChild( *constrainers, name ) )
+ {
+ OptionalString constrainerType(IsString(IsChild(*pathConstrainer, "type")));
+ if(!constrainerType)
+ {
+ DALI_SCRIPT_WARNING("Constrainer type not specified for constrainer '%s'\n", name.c_str() );
+ }
+ else if( *constrainerType == "PathConstrainer")
+ {
+ //points property
+ if( OptionalChild pointsProperty = IsChild( *pathConstrainer, "points") )
+ {
+ Dali::Property::Value points(Property::ARRAY);
+ if( SetPropertyFromNode( *pointsProperty, Property::ARRAY, points ) )
+ {
+ ret = PathConstrainer::New();
+ ret.SetProperty( PathConstrainer::Property::POINTS, points);
+
+ //controlPoints property
+ if( OptionalChild pointsProperty = IsChild( *pathConstrainer, "controlPoints") )
+ {
+ Dali::Property::Value points(Property::ARRAY);
+ if( SetPropertyFromNode( *pointsProperty, Property::ARRAY, points ) )
+ {
+ ret.SetProperty( PathConstrainer::Property::CONTROL_POINTS, points);
+ }
+
+ //Forward vector
+ OptionalVector3 forward( IsVector3( IsChild(*pathConstrainer, "forward" ) ) );
+ if( forward )
+ {
+ ret.SetProperty( PathConstrainer::Property::FORWARD, *forward);
+ }
+
+ //Add the new constrainer to the vector of PathConstrainer
+ PathConstrainerEntry entry = {name,ret};
+ mPathConstrainerLut.push_back( entry );
+ }
+ else
+ {
+ //Control points not specified
+ DALI_SCRIPT_WARNING("Control points not specified for pathConstrainer '%s'\n", name.c_str() );
+ }
+ }
+ }
+ else