diff --git a/dist/main.cjs.js b/dist/main.cjs.js index d2b70a2..bb4289e 100644 --- a/dist/main.cjs.js +++ b/dist/main.cjs.js @@ -725,6 +725,12 @@ function arcStartSweep(center, start, sweep, counterClockwise) { endAngle += 2*Math.PI; counterClockwise = true; } + else if (core.Utils.GT(endAngle, 2*Math.PI)) { + endAngle -= 2*Math.PI; + } + else if (core.Utils.LT(endAngle, -2*Math.PI)) { + endAngle += 2*Math.PI; + } let r = core.vector(center, start).length; return new core.Arc(center, r, startAngle, endAngle, counterClockwise); @@ -734,9 +740,16 @@ function arcEndSweep(center, end, sweep, counterClockwise) { let endAngle = core.vector(center,end).slope; let startAngle = endAngle - sweep; if (core.Utils.EQ(startAngle, endAngle)) { - endAngle += 2*Math.PI; + startAngle += 2*Math.PI; counterClockwise = true; } + else if (core.Utils.GT(startAngle, 2*Math.PI)) { + startAngle -= 2*Math.PI; + } + else if (core.Utils.LT(startAngle, -2*Math.PI)) { + startAngle += 2*Math.PI; + } + let r = core.vector(center, end).length; return new core.Arc(center, r, startAngle, endAngle, counterClockwise); diff --git a/dist/main.esm.js b/dist/main.esm.js index b9dc350..28abe19 100644 --- a/dist/main.esm.js +++ b/dist/main.esm.js @@ -721,6 +721,12 @@ function arcStartSweep(center, start, sweep, counterClockwise) { endAngle += 2*Math.PI; counterClockwise = true; } + else if (Utils.GT(endAngle, 2*Math.PI)) { + endAngle -= 2*Math.PI; + } + else if (Utils.LT(endAngle, -2*Math.PI)) { + endAngle += 2*Math.PI; + } let r = vector(center, start).length; return new Arc(center, r, startAngle, endAngle, counterClockwise); @@ -730,9 +736,16 @@ function arcEndSweep(center, end, sweep, counterClockwise) { let endAngle = vector(center,end).slope; let startAngle = endAngle - sweep; if (Utils.EQ(startAngle, endAngle)) { - endAngle += 2*Math.PI; + startAngle += 2*Math.PI; counterClockwise = true; } + else if (Utils.GT(startAngle, 2*Math.PI)) { + startAngle -= 2*Math.PI; + } + else if (Utils.LT(startAngle, -2*Math.PI)) { + startAngle += 2*Math.PI; + } + let r = vector(center, end).length; return new Arc(center, r, startAngle, endAngle, counterClockwise); diff --git a/dist/main.umd.js b/dist/main.umd.js index 8584f96..7530249 100644 --- a/dist/main.umd.js +++ b/dist/main.umd.js @@ -725,6 +725,12 @@ endAngle += 2*Math.PI; counterClockwise = true; } + else if (core.Utils.GT(endAngle, 2*Math.PI)) { + endAngle -= 2*Math.PI; + } + else if (core.Utils.LT(endAngle, -2*Math.PI)) { + endAngle += 2*Math.PI; + } let r = core.vector(center, start).length; return new core.Arc(center, r, startAngle, endAngle, counterClockwise); @@ -734,9 +740,16 @@ let endAngle = core.vector(center,end).slope; let startAngle = endAngle - sweep; if (core.Utils.EQ(startAngle, endAngle)) { - endAngle += 2*Math.PI; + startAngle += 2*Math.PI; counterClockwise = true; } + else if (core.Utils.GT(startAngle, 2*Math.PI)) { + startAngle -= 2*Math.PI; + } + else if (core.Utils.LT(startAngle, -2*Math.PI)) { + startAngle += 2*Math.PI; + } + let r = core.vector(center, end).length; return new core.Arc(center, r, startAngle, endAngle, counterClockwise); diff --git a/package.json b/package.json index 81e15b5..263d2e9 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@flatten-js/polygon-offset", - "version": "1.0.3", + "version": "1.0.4", "description": "Polygon equidistant offset", "main": "dist/main.cjs.js", "umd:main": "dist/main.umd.js", diff --git a/src/createArcs.js b/src/createArcs.js index a8942bf..77eb631 100644 --- a/src/createArcs.js +++ b/src/createArcs.js @@ -19,6 +19,12 @@ export function arcStartSweep(center, start, sweep, counterClockwise) { endAngle += 2*Math.PI; counterClockwise = true; } + else if (Utils.GT(endAngle, 2*Math.PI)) { + endAngle -= 2*Math.PI; + } + else if (Utils.LT(endAngle, -2*Math.PI)) { + endAngle += 2*Math.PI; + } let r = vector(center, start).length; return new Arc(center, r, startAngle, endAngle, counterClockwise); @@ -28,9 +34,16 @@ export function arcEndSweep(center, end, sweep, counterClockwise) { let endAngle = vector(center,end).slope; let startAngle = endAngle - sweep; if (Utils.EQ(startAngle, endAngle)) { - endAngle += 2*Math.PI; + startAngle += 2*Math.PI; counterClockwise = true; } + else if (Utils.GT(startAngle, 2*Math.PI)) { + startAngle -= 2*Math.PI; + } + else if (Utils.LT(startAngle, -2*Math.PI)) { + startAngle += 2*Math.PI; + } + let r = vector(center, end).length; return new Arc(center, r, startAngle, endAngle, counterClockwise); diff --git a/src/polygonOffset.js b/src/polygonOffset.js index 05ed96f..c986923 100644 --- a/src/polygonOffset.js +++ b/src/polygonOffset.js @@ -56,7 +56,7 @@ export function offset(polygon, value) { return offsetPolygon; } -function offsetArc(arc, value) { +export function offsetArc(arc, value) { let edges = []; let w = Math.abs(value); @@ -160,7 +160,7 @@ function offsetArc(arc, value) { return polygon; } -function offsetSegment(seg, value) { +export function offsetSegment(seg, value) { let w = Math.abs(value); let polygon = new Polygon(); diff --git a/test/test.js b/test/test.js index bf4297b..74f9d31 100644 --- a/test/test.js +++ b/test/test.js @@ -6,6 +6,7 @@ import {point, segment, arc, circle, CW, CCW} from "@flatten-js/core"; import {offset} from "../index.js"; import {arcSE} from "../src/createArcs"; +import {offsetArc} from "../src/polygonOffset"; describe('#Algorithms.Offset Polygon', function () { it('Function offset defined', function () { @@ -201,4 +202,10 @@ describe('#Algorithms.Offset Polygon', function () { expect([...offsetPolygon.faces][0].size).to.be.equal(5); expect([...offsetPolygon.faces][1].size).to.be.equal(11); }); + + it('Method offset arc can create legal polygon. Simple case', function () { + let testArc = arc(point(133434061, 124903644), 400000, 0, 4.71238898038469, CW ); + let testOffsetArc = offsetArc(testArc, 20); + expect(testOffsetArc.faces.size).to.be.equal(1); + }); });