|
|
@ -318,7 +318,10 @@ export class PolyOffsetUtil
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
//#region 1.中间丢失线段的情况下且循环到尾部,补圆弧.
|
|
|
|
//#region 1.中间丢失线段的情况下且循环到尾部,补圆弧.
|
|
|
|
let isFillArc = FixIndex(startIndex + 1, this.m_PtCount) !== endIndex;
|
|
|
|
let isFillArc = !equal(
|
|
|
|
|
|
|
|
this.m_Polyline.GetPoint2dAt(FixIndex(startIndex + 1, this.m_PtCount)),
|
|
|
|
|
|
|
|
this.m_Polyline.GetPoint2dAt(endIndex)
|
|
|
|
|
|
|
|
);
|
|
|
|
|
|
|
|
|
|
|
|
if (isFillArc)
|
|
|
|
if (isFillArc)
|
|
|
|
{
|
|
|
|
{
|
|
|
@ -507,7 +510,8 @@ export class PolyOffsetUtil
|
|
|
|
|
|
|
|
|
|
|
|
//找到和frontline存在离源线段距离大于偏移距离的交点的圆,跳过这个圆前面的圆计算
|
|
|
|
//找到和frontline存在离源线段距离大于偏移距离的交点的圆,跳过这个圆前面的圆计算
|
|
|
|
let iPts: Vector3[];
|
|
|
|
let iPts: Vector3[];
|
|
|
|
for (let index = 1; index < cirs.length; index++)
|
|
|
|
let index = 1;
|
|
|
|
|
|
|
|
for (; index < cirs.length; index++)
|
|
|
|
{
|
|
|
|
{
|
|
|
|
let pts = frontLine.IntersectWith(cirs[index], 0).filter(p =>
|
|
|
|
let pts = frontLine.IntersectWith(cirs[index], 0).filter(p =>
|
|
|
|
{
|
|
|
|
{
|
|
|
@ -516,13 +520,14 @@ export class PolyOffsetUtil
|
|
|
|
});
|
|
|
|
});
|
|
|
|
if (pts.length === 0)
|
|
|
|
if (pts.length === 0)
|
|
|
|
{
|
|
|
|
{
|
|
|
|
cirs.splice(0, index - 1);
|
|
|
|
|
|
|
|
break;
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
else
|
|
|
|
else
|
|
|
|
iPts = pts;
|
|
|
|
iPts = pts;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
if (!iPts)
|
|
|
|
if (iPts)
|
|
|
|
|
|
|
|
cirs.splice(0, index - 1);
|
|
|
|
|
|
|
|
else
|
|
|
|
iPts = [frontLine.EndPoint];
|
|
|
|
iPts = [frontLine.EndPoint];
|
|
|
|
|
|
|
|
|
|
|
|
let iPt = this.selectFitInterPt(iPts, frontLine.EndPoint);
|
|
|
|
let iPt = this.selectFitInterPt(iPts, frontLine.EndPoint);
|
|
|
|