From 2c8ba1c588fb18adbc33fcc62a556ab3421d4fbf Mon Sep 17 00:00:00 2001 From: Zoe Date: Thu, 5 Jul 2018 09:27:05 +0800 Subject: [PATCH] =?UTF-8?q?=E7=AE=80=E5=8C=96=E6=9B=B2=E7=BA=BF=E4=BC=98?= =?UTF-8?q?=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../__snapshots__/offset.test.ts.snap | 10 ++--- .../__snapshots__/offsetbug.test.ts.snap | 6 +-- src/GraphicsSystem/OffsetPolyline.ts | 45 +++---------------- 3 files changed, 13 insertions(+), 48 deletions(-) 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--; } } }