修正点在多段线方向,在点在圆弦上的时候,判断错误的问题.

pull/68/head
ChenX 6 years ago
parent a3bd5cac32
commit dfb96f2c3d

@ -182,3 +182,16 @@ test('首尾点相等', () =>
expect(isR).toBeFalsy();
});
test('点在圆弧的弦中心上', () =>
{
let f = new CADFile();
f.Data =
[1, ["Polyline", 1, 1, 264, false, 7, -1, [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1], 2, 6, [0, 0], 0, [5, 0], 0.9999999999999999, [5, 5], -0.9999999999999999, [5, 10], 0, [0, 10], 0, [0, 0], 0, false]]
f.Read();
let pl = f.ReadObject() as Polyline;
let pt = new Vector3().fromArray([4.999999999999999, 2.5, 0]);
let isR = GetPointAtCurveDir(pl, pt);
expect(isR).toBeFalsy();
});

@ -331,7 +331,7 @@ function PointInPolylineArc(pl: Polyline, index: number, pt: Vector3): number
let arc = pl.GetCurveAtIndex(index) as Arc;
if (IsPointInBowArc(arc, pt))
if (IsPointInBowArc(arc, pt, true))
return Math.sign(bul);
return 0;

@ -31,15 +31,19 @@ function IsPointInCircularSector(arc: Arc, pt: Vector3): boolean
*
* @param {Arc} arc
* @param {Vector3} pt
* @param {boolean} isInChrodIsTrue
* @returns {boolean}
*/
export function IsPointInBowArc(arc: Arc, pt: Vector3): boolean
export function IsPointInBowArc(arc: Arc, pt: Vector3, isInChrodIsTrue = false): boolean
{
let pv = pt.clone().sub(arc.StartPoint);
let av = arc.EndPoint.sub(arc.StartPoint);
pv.cross(av);
if (isInChrodIsTrue && equaln(pv.z, 0))
return true;
//未优化的代码
// if (pv.z > 0 && arc.IsClockWise)
// return false;

Loading…
Cancel
Save