Version 3.18.1
Show:

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;