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

93 lines
2.1 KiB
Java

var Util = require('../util/index');
var Shape = require('../core/shape');
var Arrow = require('./util/arrow');
var LineMath = require('./math/line');
var Line = function Line(cfg) {
Line.superclass.constructor.call(this, cfg);
};
Line.ATTRS = {
x1: 0,
y1: 0,
x2: 0,
y2: 0,
lineWidth: 1,
startArrow: false,
endArrow: false
};
Util.extend(Line, Shape);
Util.augment(Line, {
canStroke: true,
type: 'line',
getDefaultAttrs: function getDefaultAttrs() {
return {
lineWidth: 1,
startArrow: false,
endArrow: false
};
},
calculateBox: function calculateBox() {
var attrs = this._attrs;
var x1 = attrs.x1,
y1 = attrs.y1,
x2 = attrs.x2,
y2 = attrs.y2;
var lineWidth = this.getHitLineWidth();
return LineMath.box(x1, y1, x2, y2, lineWidth);
},
createPath: function createPath(context) {
var self = this;
var attrs = this._attrs;
var x1 = attrs.x1,
y1 = attrs.y1,
x2 = attrs.x2,
y2 = attrs.y2; // 如果定义了箭头,并且是自定义箭头,线条相应缩进
if (attrs.startArrow && attrs.startArrow.d) {
var dist = Arrow.getShortenOffset(x1, y1, x2, y2, attrs.startArrow.d);
x1 += dist.dx;
y1 += dist.dy;
}
if (attrs.endArrow && attrs.endArrow.d) {
var _dist = Arrow.getShortenOffset(x1, y1, x2, y2, attrs.endArrow.d);
x2 -= _dist.dx;
y2 -= _dist.dy;
}
context = context || self.get('context');
context.beginPath();
context.moveTo(x1, y1);
context.lineTo(x2, y2);
},
afterPath: function afterPath(context) {
var self = this;
var attrs = self._attrs;
var x1 = attrs.x1,
y1 = attrs.y1,
x2 = attrs.x2,
y2 = attrs.y2;
context = context || self.get('context');
if (attrs.startArrow) {
Arrow.addStartArrow(context, attrs, x2, y2, x1, y1);
}
if (attrs.endArrow) {
Arrow.addEndArrow(context, attrs, x1, y1, x2, y2);
}
},
getPoint: function getPoint(t) {
var attrs = this._attrs;
return {
x: LineMath.at(attrs.x1, attrs.x2, t),
y: LineMath.at(attrs.y1, attrs.y2, t)
};
}
});
module.exports = Line;