简化选取合适的交点

pull/76/head
Zoe 6 years ago
parent 2c8ba1c588
commit 2510096fd5

@ -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`;

@ -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);

@ -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];
}
}

Loading…
Cancel
Save