From 9c6a68b80644d97cc6e50f2f367692166cd762d9 Mon Sep 17 00:00:00 2001 From: cx Date: Sat, 16 Jun 2018 23:40:55 +0800 Subject: [PATCH] =?UTF-8?q?=E5=AF=B9=E4=BA=8E=E5=8F=82=E6=95=B0=E5=9C=A8?= =?UTF-8?q?=E6=9B=B2=E7=BA=BF=E4=B8=8A,=E7=BB=99=E5=AE=9A=E6=8C=87?= =?UTF-8?q?=E5=AE=9A=E7=9A=84=E5=AE=B9=E5=B7=AE.=201e-6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- __test__/Polyline/polyline.test.ts | 17 +++++++++++++++++ src/DatabaseServices/Curve.ts | 2 +- 2 files changed, 18 insertions(+), 1 deletion(-) diff --git a/__test__/Polyline/polyline.test.ts b/__test__/Polyline/polyline.test.ts index 6672628c7..3c9225e3d 100644 --- a/__test__/Polyline/polyline.test.ts +++ b/__test__/Polyline/polyline.test.ts @@ -2,6 +2,7 @@ import { Vector2, Vector3 } from 'three'; import { Polyline } from '../../src/DatabaseServices/Polyline'; import { equal, equaln } from '../../src/Geometry/GeUtils'; +import { CADFile } from '../../src/DatabaseServices/CADFile'; test("多段线点获取参数", () => { @@ -470,3 +471,19 @@ describe('多段线', () => expect(pl.StartPoint).toEqual(new Vector3(0, 10, 0)) }) }) + +test('最近点参数刚好在端点上', () => +{ + let f = new CADFile(); + f.Data = [1, ["Polyline", 1, 1, 11, false, 7, -1, [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 15.725529745042493, -3.9968028886505635e-15, 0, 1], 2, 3, [13.07875354107649, 3.8181303116147296], 0, [18.159206798866855, 3.8181303116147296], 0.664293193717279, [18.159206798866855, -1.4844192634560907], -0.10977222864644352, false]]; + f.Read(); + + let pl = f.ReadObject() as Polyline; + let p = new Vector3(33.88473654390935, 3.8181303116147256, 0); + + let cp = pl.GetClosestPointTo(p, false); + + let param = pl.GetParamAtPoint(cp); + + expect(equaln(param, 1)).toBeTruthy(); +}); diff --git a/src/DatabaseServices/Curve.ts b/src/DatabaseServices/Curve.ts index 7080c32ff..11d329525 100644 --- a/src/DatabaseServices/Curve.ts +++ b/src/DatabaseServices/Curve.ts @@ -117,7 +117,7 @@ export abstract class Curve extends Entity } //参数在曲线上 - ParamOnCurve(param: number): boolean { return !isNaN(param) && param >= 0 && param <= this.EndParam; } + ParamOnCurve(param: number): boolean { return !isNaN(param) && param >= -1e-8 && param <= this.EndParam + 1e-8; } GetOffsetCurves(offsetDist: number): Array { return; } GetClosestPointTo(pt: Vector3, extend: boolean): Vector3 { return; }