You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
60 lines
1.3 KiB
60 lines
1.3 KiB
1 year ago
|
export default function PathString() {
|
||
|
this._string = [];
|
||
|
}
|
||
|
|
||
|
PathString.prototype = {
|
||
|
_radius: 4.5,
|
||
|
_circle: circle(4.5),
|
||
|
pointRadius: function(_) {
|
||
|
if ((_ = +_) !== this._radius) this._radius = _, this._circle = null;
|
||
|
return this;
|
||
|
},
|
||
|
polygonStart: function() {
|
||
|
this._line = 0;
|
||
|
},
|
||
|
polygonEnd: function() {
|
||
|
this._line = NaN;
|
||
|
},
|
||
|
lineStart: function() {
|
||
|
this._point = 0;
|
||
|
},
|
||
|
lineEnd: function() {
|
||
|
if (this._line === 0) this._string.push("Z");
|
||
|
this._point = NaN;
|
||
|
},
|
||
|
point: function(x, y) {
|
||
|
switch (this._point) {
|
||
|
case 0: {
|
||
|
this._string.push("M", x, ",", y);
|
||
|
this._point = 1;
|
||
|
break;
|
||
|
}
|
||
|
case 1: {
|
||
|
this._string.push("L", x, ",", y);
|
||
|
break;
|
||
|
}
|
||
|
default: {
|
||
|
if (this._circle == null) this._circle = circle(this._radius);
|
||
|
this._string.push("M", x, ",", y, this._circle);
|
||
|
break;
|
||
|
}
|
||
|
}
|
||
|
},
|
||
|
result: function() {
|
||
|
if (this._string.length) {
|
||
|
var result = this._string.join("");
|
||
|
this._string = [];
|
||
|
return result;
|
||
|
} else {
|
||
|
return null;
|
||
|
}
|
||
|
}
|
||
|
};
|
||
|
|
||
|
function circle(radius) {
|
||
|
return "m0," + radius
|
||
|
+ "a" + radius + "," + radius + " 0 1,1 0," + -2 * radius
|
||
|
+ "a" + radius + "," + radius + " 0 1,1 0," + 2 * radius
|
||
|
+ "z";
|
||
|
}
|