three-csg-ts
Version:
CSG library for use with THREE.js
26 lines (25 loc) • 938 B
JavaScript
import { Plane } from './Plane';
/**
* Represents a convex polygon. The vertices used to initialize a polygon must
* be coplanar and form a convex loop. They do not have to be `Vertex`
* instances but they must behave similarly (duck typing can be used for
* customization).
*
* Each convex polygon has a `shared` property, which is shared between all
* polygons that are clones of each other or were split from the same polygon.
* This can be used to define per-polygon properties (such as surface color).
*/
export class Polygon {
constructor(vertices, shared) {
this.vertices = vertices;
this.shared = shared;
this.plane = Plane.fromPoints(vertices[0].pos, vertices[1].pos, vertices[2].pos);
}
clone() {
return new Polygon(this.vertices.map((v) => v.clone()), this.shared);
}
flip() {
this.vertices.reverse().map((v) => v.flip());
this.plane.flip();
}
}