#

API Docs for: 3.10.3
Show: Inherited Protected Private Deprecated

# File: graphics/js/ShapeGroup.js

    /**
     * The graphics-group submodule allows from drawing a shape multiple times within a single instance.
     *
     * @module graphics
     * @submodule graphics-group
     */
    var ShapeGroup,
        CircleGroup,
        RectGroup,
        EllipseGroup,
        DiamondGroup,
        Y_Lang = Y.Lang;

    /**
     * Abstract class for creating groups of shapes with the same styles and dimensions.
     *
     * @class ShapeGroup
     * @constructor
     * @submodule graphics-group
     */

     ShapeGroup = function()
     {
        ShapeGroup.superclass.constructor.apply(this, arguments);
     };

     ShapeGroup.NAME = "shapeGroup";

     Y.extend(ShapeGroup, Y.Path, {
        /**
         * Updates the shape.
         *
         * @method _draw
         * @private
         */
        _draw: function()
        {
            var xvalues = this.get("xvalues"),
                yvalues = this.get("yvalues"),
                x,
                y,
                xRad,
                yRad,
                i = 0,
                len,
                dimensions = this.get("dimensions"),
                width = dimensions.width,
                height = dimensions.height,
                radius = dimensions.radius,
                yRadius = dimensions.yRadius,
                widthIsArray = Y_Lang.isArray(width),
                heightIsArray = Y_Lang.isArray(height),
                radiusIsArray = Y_Lang.isArray(radius),
                yRadiusIsArray = Y_Lang.isArray(yRadius);
            if(xvalues && yvalues && xvalues.length > 0)
            {
                this.clear();

                len = xvalues.length;
                for(; i < len; ++i)
                {
                    x = xvalues[i];
                    y = yvalues[i];
                    xRad = radiusIsArray ? radius[i] : radius;
                    yRad = yRadiusIsArray ? yRadius[i] : yRadius;
                    if(!isNaN(x) && !isNaN(y) && !isNaN(xRad))
                    {
                        this.drawShape({
                            x: x,
                            y: y,
                            width: widthIsArray ? width[i] : width,
                            height: heightIsArray ? height[i] : height,
                            radius: xRad,
                            yRadius: yRad
                        });
                        this.closePath();
                    }
                }
                this._closePath();
            }
        },

        /**
         * Parses and array of lengths into radii
         *
         * @method _getRadiusCollection
         * @param {Array} val Array of lengths
         * @return Array
         * @private
         */
        _getRadiusCollection: function(val)
        {
            var i = 0,
                len = val.length,
                radii = [];
            for(; i < len; ++i)
            {
                radii[i] = val[i] * 0.5;
            }
            return radii;
        }
     });

    ShapeGroup.ATTRS = Y.merge(Y.Path.ATTRS, {
        dimensions: {
            getter: function()
            {
                var dimensions = this._dimensions,
                    radius,
                    yRadius,
                    width,
                    height;
                if(dimensions.hasOwnProperty("radius"))
                {
                    return dimensions;
                }
                else
                {
                    width = dimensions.width;
                    height = dimensions.height;
                    radius = Y_Lang.isArray(width) ? this._getRadiusCollection(width) : (width * 0.5);
                    yRadius = Y_Lang.isArray(height) ? this._getRadiusCollection(height) : (height * 0.5);
                    return {
                        width: width,
                        height: height,
                        radius: radius,
                        yRadius: yRadius
                    };
                }
            },

            setter: function(val)
            {
                this._dimensions = val;
                return val;
            }
        },
        xvalues: {
            getter: function()
            {
                return this._xvalues;
            },
            setter: function(val)
            {
                this._xvalues = val;
            }
        },
        yvalues: {
            getter: function()
            {
                return this._yvalues;
            },
            setter: function(val)
            {
                this._yvalues = val;
            }
        }
    });
    Y.ShapeGroup = ShapeGroup;