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