mirror of
https://github.com/Pomax/BezierInfo-2.git
synced 2025-09-27 00:29:00 +02:00
44 lines
832 B
JavaScript
44 lines
832 B
JavaScript
/**
|
|
* A complex shape, represented as a collection of paths
|
|
* that can be either polygon, Catmull-Rom curves, or
|
|
* cubic Bezier curves.
|
|
*/
|
|
class Shape {
|
|
constructor(type, factor) {
|
|
this.first = false;
|
|
this.segments = [];
|
|
this.addSegment(type, factor);
|
|
}
|
|
addSegment(type, factor) {
|
|
this.currentSegment = new Segment(type, factor);
|
|
this.segments.push(this.currentSegment);
|
|
}
|
|
vertex(p) {
|
|
if (!this.first) this.first = p;
|
|
else this.currentSegment.add(p);
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Pathing type constants
|
|
*/
|
|
Shape.POLYGON = `Polygon`;
|
|
Shape.CURVE = `CatmullRom`;
|
|
Shape.BEZIER = `Bezier`;
|
|
|
|
/**
|
|
* A shape subpath
|
|
*/
|
|
class Segment {
|
|
constructor(type, factor) {
|
|
this.type = type;
|
|
this.factor = factor;
|
|
this.points = [];
|
|
}
|
|
add(p) {
|
|
this.points.push(p);
|
|
}
|
|
}
|
|
|
|
export { Shape, Segment };
|