mirror of
https://github.com/Pomax/BezierInfo-2.git
synced 2025-08-29 02:59:58 +02:00
71 lines
1.2 KiB
JavaScript
71 lines
1.2 KiB
JavaScript
import { utils } from "./utils.js";
|
|
|
|
/**
|
|
* Poly Bezier
|
|
* @param {[type]} curves [description]
|
|
*/
|
|
class PolyBezier {
|
|
constructor(curves) {
|
|
this.curves = [];
|
|
this._3d = false;
|
|
if (!!curves) {
|
|
this.curves = curves;
|
|
this._3d = this.curves[0]._3d;
|
|
}
|
|
}
|
|
|
|
valueOf() {
|
|
return this.toString();
|
|
}
|
|
|
|
toString() {
|
|
return (
|
|
"[" +
|
|
this.curves
|
|
.map(function (curve) {
|
|
return utils.pointsToString(curve.points);
|
|
})
|
|
.join(", ") +
|
|
"]"
|
|
);
|
|
}
|
|
|
|
addCurve(curve) {
|
|
this.curves.push(curve);
|
|
this._3d = this._3d || curve._3d;
|
|
}
|
|
|
|
length() {
|
|
return this.curves
|
|
.map(function (v) {
|
|
return v.length();
|
|
})
|
|
.reduce(function (a, b) {
|
|
return a + b;
|
|
});
|
|
}
|
|
|
|
curve(idx) {
|
|
return this.curves[idx];
|
|
}
|
|
|
|
bbox() {
|
|
const c = this.curves;
|
|
var bbox = c[0].bbox();
|
|
for (var i = 1; i < c.length; i++) {
|
|
utils.expandbox(bbox, c[i].bbox());
|
|
}
|
|
return bbox;
|
|
}
|
|
|
|
offset(d) {
|
|
const offset = [];
|
|
this.curves.forEach(function (v) {
|
|
offset = offset.concat(v.offset(d));
|
|
});
|
|
return new PolyBezier(offset);
|
|
}
|
|
}
|
|
|
|
export { PolyBezier };
|