polygon-tools
Polygon tools.
install
npm i polygon-tools
browser
The minified code is availabe through S3:
https://fpcdn.s3.amazonaws.com/apps/polygon-tools/0.4.6/polygon-tools.min.js
build
Build minified javascript for use in browser:
npm run build
The library is exposed as PolygonTools
.
var polygon = 0 0 100 0 100 100 0 100; var area = PolygonToolspolygon;
documentation
Documentation is available here.
examples
polygon
Summary of polygon methods:
area(pts)
normal(pts)
centroid(pts)
winding(pts)
is_cw(pts)
is_ccw(pts)
; const POLYGON = 0 0 100 0 100 100 0 100; // Signed area - 2D onlylet area = polygon; // Polygon normal - both 2D and 3D polygonslet normal = polygon; // Polygon centroid - 2D onlylet centroid = polygon; // Polygon winding - 2D onlylet winding = polygon;// result is one of:const WINDING_CW WINDING_CCW WINDING_UNKNOWN = polygon; // test for WINDING_CWpolygon; // test for WINDING_CCWpolygon;
boolean operations
union (...polygons)
subtract (...polygons)
intersection (a, b)
; const POLY_A = 0 0 100 0 100 100 0 100; const POLY_B = 50 50 150 50 150 150 50 150; // union(polyA, polyB, polyN, ...)let union = polygon; // subtract(polyA, polyB, polyN, ...)// NOTE: poly B..N are subtracted from Alet subtract = polygon; // intersection(polyA, polyB)let intersection = polygon;
triangulation
triangulate(polygon, holes)
; const POLYGON = 0 0 100 0 100 100 0 100; const HOLE = 30 30 30 70 70 70 70 30; // returns an array of triangleslet triangles = polygon;
using the tesselator
Instead of the convenience methods above, the tesselator can also be used directly. Different vertex sizes can be used so vertex attributes like UVs and normals are correctly interpolated.
; const POLYGON = 0 0 100 0 100 100 0 100; const HOLE = 30 30 30 70 70 70 70 30; let options = polygons: POLYGON holes: HOLE vertexSize: 2 windingRule: tesselatorGLU_TESS_WINDING_POSITIVE boundaryOnly: false normal: null autoWinding: true; let triangles = tesselator;
use with PIXI
Suppose we want a textured polygon with holes. In such cases we cannot
use polygon.subtract
because any interior hole is returned as another
polygon. To create polygons with holes we need use triangulation.
Assuming we have the triangles (see above) and some texture:
let sprite = texture;let mask = ; // create pathslet paths = triangles; paths; spritemask = mask;sprite;