polygon-tools
Version:
155 lines (115 loc) • 3.34 kB
JavaScript
import fs from 'fs';
import expect from 'expect.js';
import * as tess from '../src/tesselator';
import * as poly from '../src/polygon';
let POLYGONS = [[[136.5,-55.5],[976.5,-55.5],[976.5,630.5],[136.5,630.5]]];
let HOLES = [[[462,321],[563,321],[563,226],[462,226]]];
let SPLIT_WALL = [[
[],
[],
[],
[],
[]]];
let L_SHAPE = [[
[],
[],
[],
[],
[],
[]]];
let FAILED = JSON.parse(fs.readFileSync('test/data/fail02.json').toString());
function cycle_polygon (p, i=0) {
let res = p.slice(i);
for (let j = 0; j < i; ++j) {
res.push(p[j]);
}
return res;
}
describe('tesselator', () => {
it ('options.autoWinding + filter out zero area polygons', () => {
let options = {
polygons: FAILED.polygons.slice(),
holes: FAILED.holes.slice()
};
let triangles = tess.run(options);
expect(triangles[0].length).to.be(60);
});
it ('options.autoWinding', () => {
let options = {
polygons: POLYGONS.slice(),
holes: HOLES.slice()
};
let triangles = tess.run(options);
expect(triangles[0].length).to.be(8);
options.polygons = POLYGONS.map(p => {
p.reverse();
return p;
});
triangles = tess.run(options);
expect(triangles[0].length).to.be(8);
});
it ('should output triangles for the split wall case', () => {
let options = {
polygons: SPLIT_WALL
};
let triangles = tess.run(options);
expect(triangles[0].length).to.be(3);
});
it ('should output triangles for the L-shape case', () => {
let options = {
polygons: L_SHAPE
};
let triangles = tess.run(options);
expect(triangles[0].length).to.be(4);
});
it ('should output triangles for another L-shape case', () => {
let poly = [
[],
[],
[],
[],
[],
[],
[]
];
for (let i = 0; i < poly.length; ++i) {
let p = cycle_polygon(poly, i);
let options = {
polygons: [poly]
};
let triangles = tess.run(options);
expect(triangles[0].length).to.be(5);
}
poly.reverse();
for (let i = 0; i < poly.length; ++i) {
let p = cycle_polygon(poly, i);
let options = {
polygons: [poly]
};
let triangles = tess.run(options);
expect(triangles[0].length).to.be(5);
}
});
it ('should handle combine callback', () => {
let options = JSON.parse(fs.readFileSync('test/data/fail01.json').toString());
let triangles = tess.run(options);
expect(triangles[0].length).to.be(24);
});
it ('should handle combine callback', () => {
let options = {
polygons: [[
[],
[],
[],
[]
]],
holes: [[
[],
[],
[],
[]
]]
};
let triangles = tess.run(options);
});
});