Initial commit
This commit is contained in:
159
node_modules/konva/cmj/shapes/Line.js
generated
vendored
Normal file
159
node_modules/konva/cmj/shapes/Line.js
generated
vendored
Normal file
@@ -0,0 +1,159 @@
|
||||
"use strict";
|
||||
Object.defineProperty(exports, "__esModule", { value: true });
|
||||
exports.Line = void 0;
|
||||
const Factory_1 = require("../Factory");
|
||||
const Shape_1 = require("../Shape");
|
||||
const Validators_1 = require("../Validators");
|
||||
const Global_1 = require("../Global");
|
||||
function getControlPoints(x0, y0, x1, y1, x2, y2, t) {
|
||||
var d01 = Math.sqrt(Math.pow(x1 - x0, 2) + Math.pow(y1 - y0, 2)), d12 = Math.sqrt(Math.pow(x2 - x1, 2) + Math.pow(y2 - y1, 2)), fa = (t * d01) / (d01 + d12), fb = (t * d12) / (d01 + d12), p1x = x1 - fa * (x2 - x0), p1y = y1 - fa * (y2 - y0), p2x = x1 + fb * (x2 - x0), p2y = y1 + fb * (y2 - y0);
|
||||
return [p1x, p1y, p2x, p2y];
|
||||
}
|
||||
function expandPoints(p, tension) {
|
||||
var len = p.length, allPoints = [], n, cp;
|
||||
for (n = 2; n < len - 2; n += 2) {
|
||||
cp = getControlPoints(p[n - 2], p[n - 1], p[n], p[n + 1], p[n + 2], p[n + 3], tension);
|
||||
if (isNaN(cp[0])) {
|
||||
continue;
|
||||
}
|
||||
allPoints.push(cp[0]);
|
||||
allPoints.push(cp[1]);
|
||||
allPoints.push(p[n]);
|
||||
allPoints.push(p[n + 1]);
|
||||
allPoints.push(cp[2]);
|
||||
allPoints.push(cp[3]);
|
||||
}
|
||||
return allPoints;
|
||||
}
|
||||
class Line extends Shape_1.Shape {
|
||||
constructor(config) {
|
||||
super(config);
|
||||
this.on('pointsChange.konva tensionChange.konva closedChange.konva bezierChange.konva', function () {
|
||||
this._clearCache('tensionPoints');
|
||||
});
|
||||
}
|
||||
_sceneFunc(context) {
|
||||
var points = this.points(), length = points.length, tension = this.tension(), closed = this.closed(), bezier = this.bezier(), tp, len, n;
|
||||
if (!length) {
|
||||
return;
|
||||
}
|
||||
context.beginPath();
|
||||
context.moveTo(points[0], points[1]);
|
||||
if (tension !== 0 && length > 4) {
|
||||
tp = this.getTensionPoints();
|
||||
len = tp.length;
|
||||
n = closed ? 0 : 4;
|
||||
if (!closed) {
|
||||
context.quadraticCurveTo(tp[0], tp[1], tp[2], tp[3]);
|
||||
}
|
||||
while (n < len - 2) {
|
||||
context.bezierCurveTo(tp[n++], tp[n++], tp[n++], tp[n++], tp[n++], tp[n++]);
|
||||
}
|
||||
if (!closed) {
|
||||
context.quadraticCurveTo(tp[len - 2], tp[len - 1], points[length - 2], points[length - 1]);
|
||||
}
|
||||
}
|
||||
else if (bezier) {
|
||||
n = 2;
|
||||
while (n < length) {
|
||||
context.bezierCurveTo(points[n++], points[n++], points[n++], points[n++], points[n++], points[n++]);
|
||||
}
|
||||
}
|
||||
else {
|
||||
for (n = 2; n < length; n += 2) {
|
||||
context.lineTo(points[n], points[n + 1]);
|
||||
}
|
||||
}
|
||||
if (closed) {
|
||||
context.closePath();
|
||||
context.fillStrokeShape(this);
|
||||
}
|
||||
else {
|
||||
context.strokeShape(this);
|
||||
}
|
||||
}
|
||||
getTensionPoints() {
|
||||
return this._getCache('tensionPoints', this._getTensionPoints);
|
||||
}
|
||||
_getTensionPoints() {
|
||||
if (this.closed()) {
|
||||
return this._getTensionPointsClosed();
|
||||
}
|
||||
else {
|
||||
return expandPoints(this.points(), this.tension());
|
||||
}
|
||||
}
|
||||
_getTensionPointsClosed() {
|
||||
var p = this.points(), len = p.length, tension = this.tension(), firstControlPoints = getControlPoints(p[len - 2], p[len - 1], p[0], p[1], p[2], p[3], tension), lastControlPoints = getControlPoints(p[len - 4], p[len - 3], p[len - 2], p[len - 1], p[0], p[1], tension), middle = expandPoints(p, tension), tp = [firstControlPoints[2], firstControlPoints[3]]
|
||||
.concat(middle)
|
||||
.concat([
|
||||
lastControlPoints[0],
|
||||
lastControlPoints[1],
|
||||
p[len - 2],
|
||||
p[len - 1],
|
||||
lastControlPoints[2],
|
||||
lastControlPoints[3],
|
||||
firstControlPoints[0],
|
||||
firstControlPoints[1],
|
||||
p[0],
|
||||
p[1],
|
||||
]);
|
||||
return tp;
|
||||
}
|
||||
getWidth() {
|
||||
return this.getSelfRect().width;
|
||||
}
|
||||
getHeight() {
|
||||
return this.getSelfRect().height;
|
||||
}
|
||||
getSelfRect() {
|
||||
var points = this.points();
|
||||
if (points.length < 4) {
|
||||
return {
|
||||
x: points[0] || 0,
|
||||
y: points[1] || 0,
|
||||
width: 0,
|
||||
height: 0,
|
||||
};
|
||||
}
|
||||
if (this.tension() !== 0) {
|
||||
points = [
|
||||
points[0],
|
||||
points[1],
|
||||
...this._getTensionPoints(),
|
||||
points[points.length - 2],
|
||||
points[points.length - 1],
|
||||
];
|
||||
}
|
||||
else {
|
||||
points = this.points();
|
||||
}
|
||||
var minX = points[0];
|
||||
var maxX = points[0];
|
||||
var minY = points[1];
|
||||
var maxY = points[1];
|
||||
var x, y;
|
||||
for (var i = 0; i < points.length / 2; i++) {
|
||||
x = points[i * 2];
|
||||
y = points[i * 2 + 1];
|
||||
minX = Math.min(minX, x);
|
||||
maxX = Math.max(maxX, x);
|
||||
minY = Math.min(minY, y);
|
||||
maxY = Math.max(maxY, y);
|
||||
}
|
||||
return {
|
||||
x: minX,
|
||||
y: minY,
|
||||
width: maxX - minX,
|
||||
height: maxY - minY,
|
||||
};
|
||||
}
|
||||
}
|
||||
exports.Line = Line;
|
||||
Line.prototype.className = 'Line';
|
||||
Line.prototype._attrsAffectingSize = ['points', 'bezier', 'tension'];
|
||||
(0, Global_1._registerNode)(Line);
|
||||
Factory_1.Factory.addGetterSetter(Line, 'closed', false);
|
||||
Factory_1.Factory.addGetterSetter(Line, 'bezier', false);
|
||||
Factory_1.Factory.addGetterSetter(Line, 'tension', 0, (0, Validators_1.getNumberValidator)());
|
||||
Factory_1.Factory.addGetterSetter(Line, 'points', [], (0, Validators_1.getNumberArrayValidator)());
|
||||
Reference in New Issue
Block a user