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;