NuclearDispersionSystem/ant-design-vue-jeecg/node_modules/@antv/g/lib/shapes/rect.js

76 lines
2.0 KiB
Java
Raw Normal View History

2023-09-14 14:47:11 +08:00
var Util = require('../util/index');
var _require = require('../util/format'),
parseRadius = _require.parseRadius;
var Shape = require('../core/shape');
var Rect = function Rect(cfg) {
Rect.superclass.constructor.call(this, cfg);
};
Rect.ATTRS = {
x: 0,
y: 0,
width: 0,
height: 0,
radius: 0,
lineWidth: 1
};
Util.extend(Rect, Shape);
Util.augment(Rect, {
canFill: true,
canStroke: true,
type: 'rect',
getDefaultAttrs: function getDefaultAttrs() {
return {
lineWidth: 1,
radius: 0
};
},
calculateBox: function calculateBox() {
var self = this;
var attrs = self._attrs;
var x = attrs.x;
var y = attrs.y;
var width = attrs.width;
var height = attrs.height;
var lineWidth = this.getHitLineWidth();
var halfWidth = lineWidth / 2;
return {
minX: x - halfWidth,
minY: y - halfWidth,
maxX: x + width + halfWidth,
maxY: y + height + halfWidth
};
},
createPath: function createPath(context) {
var self = this;
var attrs = self._attrs;
var x = attrs.x;
var y = attrs.y;
var width = attrs.width;
var height = attrs.height;
var radius = attrs.radius;
context = context || self.get('context');
context.beginPath();
if (radius === 0) {
// 改成原生的rect方法
context.rect(x, y, width, height);
} else {
var r = parseRadius(radius);
context.moveTo(x + r.r1, y);
context.lineTo(x + width - r.r2, y);
r.r2 !== 0 && context.arc(x + width - r.r2, y + r.r2, r.r2, -Math.PI / 2, 0);
context.lineTo(x + width, y + height - r.r3);
r.r3 !== 0 && context.arc(x + width - r.r3, y + height - r.r3, r.r3, 0, Math.PI / 2);
context.lineTo(x + r.r4, y + height);
r.r4 !== 0 && context.arc(x + r.r4, y + height - r.r4, r.r4, Math.PI / 2, Math.PI);
context.lineTo(x, y + r.r1);
r.r1 !== 0 && context.arc(x + r.r1, y + r.r1, r.r1, Math.PI, Math.PI * 1.5);
context.closePath();
}
}
});
module.exports = Rect;