diff --git a/__test__/Polyline/__snapshots__/offset.test.ts.snap b/__test__/Polyline/__snapshots__/offset.test.ts.snap index 46a71b6dc..6393ff35f 100644 --- a/__test__/Polyline/__snapshots__/offset.test.ts.snap +++ b/__test__/Polyline/__snapshots__/offset.test.ts.snap @@ -16,21 +16,21 @@ exports[`中间区域需要圆裁剪 1`] = `1`; exports[`中间区域需要圆裁剪 2`] = `24.711300177432392`; -exports[`圆求交错误导致的线丢失 1`] = `4148.643109243218`; +exports[`圆求交错误导致的线丢失 1`] = `4148.643077512141`; -exports[`圆求交错误导致的线丢失 2`] = `4425.268216257021`; +exports[`圆求交错误导致的线丢失 2`] = `4425.2680383915285`; exports[`圆求交错误导致的线丢失 3`] = `4021.8883370297244`; -exports[`圆求交错误导致的线丢失 4`] = `4581.211434067452`; +exports[`圆求交错误导致的线丢失 4`] = `4581.211144290334`; exports[`圆求交错误导致的线丢失 5`] = `3900.596094685299`; -exports[`圆求交错误导致的线丢失 6`] = `4757.455448859379`; +exports[`圆求交错误导致的线丢失 6`] = `4757.455003004337`; exports[`圆求交错误导致的线丢失 7`] = `3783.7370117939813`; -exports[`圆求交错误导致的线丢失 8`] = `4971.999047743349`; +exports[`圆求交错误导致的线丢失 8`] = `4971.998320028233`; exports[`多段线存在0长度线段导致偏移错误 1`] = `1`; diff --git a/__test__/Polyline/__snapshots__/offsetbug.test.ts.snap b/__test__/Polyline/__snapshots__/offsetbug.test.ts.snap index 3269b40c6..efcab8e0c 100644 --- a/__test__/Polyline/__snapshots__/offsetbug.test.ts.snap +++ b/__test__/Polyline/__snapshots__/offsetbug.test.ts.snap @@ -2,7 +2,7 @@ exports[`补充bug测试#IKWGF 1`] = `1.1376402440608806`; -exports[`补充bug测试#IKWGF 2`] = `0.44573896329246554`; +exports[`补充bug测试#IKWGF 2`] = `0.44573816538516137`; exports[`补充bug测试#IKWGF 3`] = `10.73282822209507`; @@ -16,10 +16,10 @@ exports[`补充bug测试#IKWGF 7`] = `14.066950838248612`; exports[`补充bug测试#IKWGF 8`] = `2.168984971098264`; -exports[`补充bug测试#IKWGF 9`] = `11.89085508498112`; +exports[`补充bug测试#IKWGF 9`] = `11.890848111457423`; exports[`补充bug测试#IKWGF 10`] = `1.0803373815793473`; -exports[`补充bug测试#IKWGF 11`] = `0.3947454693903588`; +exports[`补充bug测试#IKWGF 11`] = `0.39474205429703246`; exports[`补充bug测试#IKWGF 12`] = `10.698715561269278`; diff --git a/src/GraphicsSystem/OffsetPolyline.ts b/src/GraphicsSystem/OffsetPolyline.ts index 9c1375f27..f822c43b8 100644 --- a/src/GraphicsSystem/OffsetPolyline.ts +++ b/src/GraphicsSystem/OffsetPolyline.ts @@ -122,47 +122,12 @@ export class PolyOffsetUtil if (c2b.min.y - 1e-6 > c1b.max.y) continue; - let c1StartPt = c1.StartPoint; - let c1EndPt = c1.EndPoint; - let c2StartPt = c2.StartPoint; - let c2EndPt = c2.EndPoint; - - //同心圆弧 - let equalArc = c1 instanceof Arc && c2 instanceof Arc && equalv3(c1.Center, c2.Center); - - //被包含的直线删掉 - if ((c1 instanceof Line && c2 instanceof Line) || equalArc) - { - //c1完全在c2内 - if (c2.PtOnCurve(c1StartPt) && c2.PtOnCurve(c1EndPt)) - { - this.m_RetCurves.splice(i, 1); - i--; - break; - } - else if (c1.PtOnCurve(c2StartPt) && c1.PtOnCurve(c2EndPt)) - { - // c2完全在c1内 - this.m_RetCurves.splice(j, 1); - j--; - continue; - } - } - - //如果线段端点相连,跳过 - let isLink = [c1StartPt, c1EndPt].some(p => equalv3(p, c2StartPt) || equalv3(p, c2EndPt)); - if (isLink) continue; - - if (equalArc || c1.IntersectWith(c2, IntersectOption.OnBothOperands).length > 0) + if (c1.Join(c2)) { - let isJoin = c1.Join(c2); - if (isJoin) - { - boxCurves.set(c1, c1.BoundingBox); - this.m_RetCurves.splice(j, 1); - j--; - continue; - } + this.m_RetCurves.splice(j, 1); + c1b = c1.BoundingBox; + boxCurves.set(c1, c1b); + j--; } } }