diff --git a/__test__/Polyline/__snapshots__/offset.test.ts.snap b/__test__/Polyline/__snapshots__/offset.test.ts.snap index 6393ff35f..832e9df22 100644 --- a/__test__/Polyline/__snapshots__/offset.test.ts.snap +++ b/__test__/Polyline/__snapshots__/offset.test.ts.snap @@ -32,6 +32,18 @@ exports[`圆求交错误导致的线丢失 7`] = `3783.7370117939813`; exports[`圆求交错误导致的线丢失 8`] = `4971.998320028233`; +exports[`圆求交错误导致的线丢失 9`] = `1148.6589057383728`; + +exports[`圆求交错误导致的线丢失 10`] = `5979.860045322116`; + +exports[`圆求交错误导致的线丢失 11`] = `1049.9556072438302`; + +exports[`圆求交错误导致的线丢失 12`] = `6051.204453232351`; + +exports[`圆求交错误导致的线丢失 13`] = `722.4723063967795`; + +exports[`圆求交错误导致的线丢失 14`] = `6316.957052295357`; + exports[`多段线存在0长度线段导致偏移错误 1`] = `1`; exports[`多段线存在0长度线段导致偏移错误 2`] = `81933.49238918608`; diff --git a/__test__/Polyline/offset.test.ts b/__test__/Polyline/offset.test.ts index cff5afc6b..4afe44d31 100644 --- a/__test__/Polyline/offset.test.ts +++ b/__test__/Polyline/offset.test.ts @@ -827,7 +827,7 @@ test('圆求交错误导致的线丢失', () => f.Read(); let pl = f.ReadObject() as Polyline; - for (let d of [10, 20, 30, 40]) + for (let d of [10, 20, 30, 40, 269, 280, 320]) { let cus = pl.GetOffsetCurves(d); diff --git a/src/GraphicsSystem/OffsetPolyline.ts b/src/GraphicsSystem/OffsetPolyline.ts index f822c43b8..f0cc1c4fd 100644 --- a/src/GraphicsSystem/OffsetPolyline.ts +++ b/src/GraphicsSystem/OffsetPolyline.ts @@ -662,8 +662,6 @@ export class PolyOffsetUtil /** * 选择合适的交点 - * 优先选择交点在偏移方向上同一侧的 - * 其次选择交点距离源线段为偏移距离的,若都是或者都不是,选择离传入点近的 * @private * @param {Vector3[]} pts * @param {Vector3} refPt @@ -674,34 +672,10 @@ export class PolyOffsetUtil { if (pts.length > 1) { - let rad2 = Math.pow(this.m_OffsetDist, 2); - - //优先选择交点在偏移方向上同一侧的 - let pt1Dir = this.CheckPointDir(pts[0]); - let pt2Dir = this.CheckPointDir(pts[1]); - if (pt1Dir !== pt2Dir) - { - return pt1Dir ? pts[0] : pts[1]; - } - - //计算到曲线的距离大于偏移距离 - let [ptGtRad1, ptGtRad2] = pts.map(p => - { - let dis = this.m_Polyline.GetClosestPointTo(p, false).distanceToSquared(p); - return dis + 1e-3 > rad2; - }); - - //都大于或者都小于`偏移距离` - if (ptGtRad1 === ptGtRad2) - { - let dist1 = refPt.distanceToSquared(pts[0]); - let dist2 = refPt.distanceToSquared(pts[1]); - return dist1 <= dist2 ? pts[0] : pts[1]; - } - else - return ptGtRad1 ? pts[0] : pts[1]; + let dist1 = refPt.distanceToSquared(pts[0]); + let dist2 = refPt.distanceToSquared(pts[1]); + return dist1 <= dist2 ? pts[0] : pts[1]; } - return pts[0]; } }