NuclearDispersionSystem/ant-design-vue-jeecg/node_modules/@antv/g/lib/shapes/ellipse.js
2023-09-14 14:47:11 +08:00

63 lines
1.5 KiB
Java

var Util = require('../util/index');
var Shape = require('../core/shape');
var Ellipse = function Ellipse(cfg) {
Ellipse.superclass.constructor.call(this, cfg);
};
Ellipse.ATTRS = {
x: 0,
y: 0,
rx: 1,
ry: 1,
lineWidth: 1
};
Util.extend(Ellipse, Shape);
Util.augment(Ellipse, {
canFill: true,
canStroke: true,
type: 'ellipse',
getDefaultAttrs: function getDefaultAttrs() {
return {
lineWidth: 1
};
},
calculateBox: function calculateBox() {
var attrs = this._attrs;
var cx = attrs.x;
var cy = attrs.y;
var rx = attrs.rx;
var ry = attrs.ry;
var lineWidth = this.getHitLineWidth();
var halfXWidth = rx + lineWidth / 2;
var halfYWidth = ry + lineWidth / 2;
return {
minX: cx - halfXWidth,
minY: cy - halfYWidth,
maxX: cx + halfXWidth,
maxY: cy + halfYWidth
};
},
createPath: function createPath(context) {
var attrs = this._attrs;
var cx = attrs.x;
var cy = attrs.y;
var rx = attrs.rx;
var ry = attrs.ry;
context = context || self.get('context');
var r = rx > ry ? rx : ry;
var scaleX = rx > ry ? 1 : rx / ry;
var scaleY = rx > ry ? ry / rx : 1;
var m = [1, 0, 0, 0, 1, 0, 0, 0, 1];
Util.mat3.scale(m, m, [scaleX, scaleY]);
Util.mat3.translate(m, m, [cx, cy]);
context.beginPath();
context.save();
context.transform(m[0], m[1], m[3], m[4], m[6], m[7]);
context.arc(0, 0, r, 0, Math.PI * 2);
context.restore();
context.closePath();
}
});
module.exports = Ellipse;