diff --git a/dist/main.cjs b/dist/main.cjs index 741c310..c3b6b61 100644 --- a/dist/main.cjs +++ b/dist/main.cjs @@ -7828,6 +7828,9 @@ class Polygon { } intersections.int_points1 = intersections.int_points1.filter( int_point => int_point.id >= 0); intersections.int_points2 = intersections.int_points2.filter( int_point => int_point.id >= 0); + intersections.int_points1.forEach((int_point, index) => { int_point.id = index; }); + intersections.int_points2.forEach((int_point, index) => { int_point.id = index; }); + // No intersections left after filtering - return a copy of the original polygon if (intersections.int_points1.length === 0) diff --git a/dist/main.mjs b/dist/main.mjs index a30c8a8..19402c2 100644 --- a/dist/main.mjs +++ b/dist/main.mjs @@ -7824,6 +7824,9 @@ class Polygon { } intersections.int_points1 = intersections.int_points1.filter( int_point => int_point.id >= 0); intersections.int_points2 = intersections.int_points2.filter( int_point => int_point.id >= 0); + intersections.int_points1.forEach((int_point, index) => { int_point.id = index; }); + intersections.int_points2.forEach((int_point, index) => { int_point.id = index; }); + // No intersections left after filtering - return a copy of the original polygon if (intersections.int_points1.length === 0) diff --git a/dist/main.umd.js b/dist/main.umd.js index 841cedd..fb43d19 100644 --- a/dist/main.umd.js +++ b/dist/main.umd.js @@ -7830,6 +7830,9 @@ } intersections.int_points1 = intersections.int_points1.filter( int_point => int_point.id >= 0); intersections.int_points2 = intersections.int_points2.filter( int_point => int_point.id >= 0); + intersections.int_points1.forEach((int_point, index) => { int_point.id = index; }); + intersections.int_points2.forEach((int_point, index) => { int_point.id = index; }); + // No intersections left after filtering - return a copy of the original polygon if (intersections.int_points1.length === 0) diff --git a/package.json b/package.json index 424715c..bc0cd96 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@flatten-js/core", - "version": "1.5.3", + "version": "1.5.4", "description": "Javascript library for 2d geometry", "main": "dist/main.cjs", "umd:main": "dist/main.umd.js", diff --git a/src/classes/polygon.js b/src/classes/polygon.js index 1187f3a..df48452 100644 --- a/src/classes/polygon.js +++ b/src/classes/polygon.js @@ -354,6 +354,9 @@ export class Polygon { } intersections.int_points1 = intersections.int_points1.filter( int_point => int_point.id >= 0); intersections.int_points2 = intersections.int_points2.filter( int_point => int_point.id >= 0); + intersections.int_points1.forEach((int_point, index) => { int_point.id = index }); + intersections.int_points2.forEach((int_point, index) => { int_point.id = index }); + // No intersections left after filtering - return a copy of the original polygon if (intersections.int_points1.length === 0) diff --git a/test/classes/polygon.js b/test/classes/polygon.js index 9e41e3a..7e41ebb 100644 --- a/test/classes/polygon.js +++ b/test/classes/polygon.js @@ -981,6 +981,94 @@ describe('#Flatten.Polygon', function() { expect(newPoly.faces.size).to.equal(2); expect(newPoly.edges.size).to.equal(8) }) + it("Polygon cut error #176", () => { + let polygon = new Polygon([ + [ + { + ps: {x: 310.1, y: 423.82, name: "point",}, + pe: {x: 310.1, y: 460.66, name: "point",}, + name: "segment", + }, + { + ps: {x: 310.1, y: 460.66, name: "point",}, + pe: {x: 189.98, y: 460.66, name: "point",}, + name: "segment", + }, + { + ps: {x: 189.98, y: 460.66, name: "point",}, + pe: {x: 189.98, y: 423.94, name: "point",}, + name: "segment", + }, + { + ps: {x: 189.98, y: 423.94, name: "point",}, + pe: {x: 210.5, y: 423.94, name: "point",}, + name: "segment", + }, + { + ps: {x: 210.5, y: 423.94, name: "point",}, + pe: {x: 210.5, y: 313.75, name: "point",}, + name: "segment", + }, + { + ps: {x: 210.5, y: 313.75, name: "point",}, + pe: {x: 272.66, y: 313.75, name: "point",}, + name: "segment", + }, + { + ps: {x: 272.66, y: 313.75, name: "point",}, + pe: {x: 272.66, y: 325.99, name: "point",}, + name: "segment", + }, + { + ps: {x: 272.66, y: 325.99, name: "point",}, + pe: {x: 291.38, y: 325.99, name: "point",}, + name: "segment", + }, + { + ps: {x: 291.38, y: 325.99, name: "point",}, + pe: {x: 291.38, y: 423.94, name: "point",}, + name: "segment", + }, + { + ps: {x: 291.38, y: 423.94, name: "point",}, + pe: {x: 310.1, y: 423.82, name: "point",}, + name: "segment", + }, + ]]) + + let ml = new Multiline([ + { + ps: {x: 210.5, y: 460.66, name: "point"}, + pe: {x: 210.5, y: 423.94, name: "point"}, + name: "segment", + }, { + ps: {x: 210.5, y: 423.94, name: "point",}, + pe: {x: 253.94, y: 423.94, name: "point",}, + name: "segment", + }, + { + ps: {x: 253.94, y: 423.94, name: "point",}, + pe: {x: 253.94, y: 442.3, name: "point",}, + name: "segment", + }, + { + ps: {x: 253.94, y: 442.3, name: "point",}, + pe: {x: 272.66, y: 442.3, name: "point",}, + name: "segment", + }, + { + ps: {x: 272.66, y: 442.3, name: "point",}, + pe: {x: 272.66, y: 460.66, name: "point",}, + name: "segment", + }, + ].map(l => segment(l))) + + let slices = polygon.cut(ml) + + if (slices.toArray().length != 3) { + console.error('Cut fail.') + } + }) describe('#Intersections', function () { it('Can perform intersection between polygons', function () { const poly1 = new Polygon(