简化选取合适的交点

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

@ -32,6 +32,18 @@ exports[`圆求交错误导致的线丢失 7`] = `3783.7370117939813`;
exports[`圆求交错误导致的线丢失 8`] = `4971.998320028233`; 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长度线段导致偏移错误 1`] = `1`;
exports[`多段线存在0长度线段导致偏移错误 2`] = `81933.49238918608`; exports[`多段线存在0长度线段导致偏移错误 2`] = `81933.49238918608`;

@ -827,7 +827,7 @@ test('圆求交错误导致的线丢失', () =>
f.Read(); f.Read();
let pl = f.ReadObject() as Polyline; 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); let cus = pl.GetOffsetCurves(d);

@ -662,8 +662,6 @@ export class PolyOffsetUtil
/** /**
* *
*
* 线,,
* @private * @private
* @param {Vector3[]} pts * @param {Vector3[]} pts
* @param {Vector3} refPt * @param {Vector3} refPt
@ -674,34 +672,10 @@ export class PolyOffsetUtil
{ {
if (pts.length > 1) if (pts.length > 1)
{ {
let rad2 = Math.pow(this.m_OffsetDist, 2); let dist1 = refPt.distanceToSquared(pts[0]);
let dist2 = refPt.distanceToSquared(pts[1]);
//优先选择交点在偏移方向上同一侧的 return dist1 <= dist2 ? pts[0] : pts[1];
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];
} }
return pts[0]; return pts[0];
} }
} }

Loading…
Cancel
Save