Skip to content

Commit

Permalink
Fix polygon.cut error: issue #176.
Browse files Browse the repository at this point in the history
Add renumbering of intersection points after filter duplicated
  • Loading branch information
alexbol99 committed Jun 1, 2024
1 parent 350a554 commit 3b35fae
Show file tree
Hide file tree
Showing 6 changed files with 101 additions and 1 deletion.
3 changes: 3 additions & 0 deletions dist/main.cjs
Original file line number Diff line number Diff line change
Expand Up @@ -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)
Expand Down
3 changes: 3 additions & 0 deletions dist/main.mjs
Original file line number Diff line number Diff line change
Expand Up @@ -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)
Expand Down
3 changes: 3 additions & 0 deletions dist/main.umd.js
Original file line number Diff line number Diff line change
Expand Up @@ -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)
Expand Down
2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
@@ -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",
Expand Down
3 changes: 3 additions & 0 deletions src/classes/polygon.js
Original file line number Diff line number Diff line change
Expand Up @@ -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)
Expand Down
88 changes: 88 additions & 0 deletions test/classes/polygon.js
Original file line number Diff line number Diff line change
Expand Up @@ -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(
Expand Down

0 comments on commit 3b35fae

Please sign in to comment.