75 lines
1.5 KiB
JavaScript
75 lines
1.5 KiB
JavaScript
|
var Path = require("../Path");
|
||
|
|
||
|
var _subPixelOptimize = require("../helper/subPixelOptimize");
|
||
|
|
||
|
var subPixelOptimizeLine = _subPixelOptimize.subPixelOptimizeLine;
|
||
|
|
||
|
/**
|
||
|
* 直线
|
||
|
* @module zrender/graphic/shape/Line
|
||
|
*/
|
||
|
// Avoid create repeatly.
|
||
|
var subPixelOptimizeOutputShape = {};
|
||
|
|
||
|
var _default = Path.extend({
|
||
|
type: 'line',
|
||
|
shape: {
|
||
|
// Start point
|
||
|
x1: 0,
|
||
|
y1: 0,
|
||
|
// End point
|
||
|
x2: 0,
|
||
|
y2: 0,
|
||
|
percent: 1
|
||
|
},
|
||
|
style: {
|
||
|
stroke: '#000',
|
||
|
fill: null
|
||
|
},
|
||
|
buildPath: function (ctx, shape) {
|
||
|
var x1;
|
||
|
var y1;
|
||
|
var x2;
|
||
|
var y2;
|
||
|
|
||
|
if (this.subPixelOptimize) {
|
||
|
subPixelOptimizeLine(subPixelOptimizeOutputShape, shape, this.style);
|
||
|
x1 = subPixelOptimizeOutputShape.x1;
|
||
|
y1 = subPixelOptimizeOutputShape.y1;
|
||
|
x2 = subPixelOptimizeOutputShape.x2;
|
||
|
y2 = subPixelOptimizeOutputShape.y2;
|
||
|
} else {
|
||
|
x1 = shape.x1;
|
||
|
y1 = shape.y1;
|
||
|
x2 = shape.x2;
|
||
|
y2 = shape.y2;
|
||
|
}
|
||
|
|
||
|
var percent = shape.percent;
|
||
|
|
||
|
if (percent === 0) {
|
||
|
return;
|
||
|
}
|
||
|
|
||
|
ctx.moveTo(x1, y1);
|
||
|
|
||
|
if (percent < 1) {
|
||
|
x2 = x1 * (1 - percent) + x2 * percent;
|
||
|
y2 = y1 * (1 - percent) + y2 * percent;
|
||
|
}
|
||
|
|
||
|
ctx.lineTo(x2, y2);
|
||
|
},
|
||
|
|
||
|
/**
|
||
|
* Get point at percent
|
||
|
* @param {number} percent
|
||
|
* @return {Array.<number>}
|
||
|
*/
|
||
|
pointAt: function (p) {
|
||
|
var shape = this.shape;
|
||
|
return [shape.x1 * (1 - p) + shape.x2 * p, shape.y1 * (1 - p) + shape.y2 * p];
|
||
|
}
|
||
|
});
|
||
|
|
||
|
module.exports = _default;
|