|
|
|
@ -122,47 +122,12 @@ export class PolyOffsetUtil
|
|
|
|
|
if (c2b.min.y - 1e-6 > c1b.max.y)
|
|
|
|
|
continue;
|
|
|
|
|
|
|
|
|
|
let c1StartPt = c1.StartPoint;
|
|
|
|
|
let c1EndPt = c1.EndPoint;
|
|
|
|
|
let c2StartPt = c2.StartPoint;
|
|
|
|
|
let c2EndPt = c2.EndPoint;
|
|
|
|
|
|
|
|
|
|
//同心圆弧
|
|
|
|
|
let equalArc = c1 instanceof Arc && c2 instanceof Arc && equalv3(c1.Center, c2.Center);
|
|
|
|
|
|
|
|
|
|
//被包含的直线删掉
|
|
|
|
|
if ((c1 instanceof Line && c2 instanceof Line) || equalArc)
|
|
|
|
|
{
|
|
|
|
|
//c1完全在c2内
|
|
|
|
|
if (c2.PtOnCurve(c1StartPt) && c2.PtOnCurve(c1EndPt))
|
|
|
|
|
if (c1.Join(c2))
|
|
|
|
|
{
|
|
|
|
|
this.m_RetCurves.splice(i, 1);
|
|
|
|
|
i--;
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
else if (c1.PtOnCurve(c2StartPt) && c1.PtOnCurve(c2EndPt))
|
|
|
|
|
{
|
|
|
|
|
// c2完全在c1内
|
|
|
|
|
this.m_RetCurves.splice(j, 1);
|
|
|
|
|
c1b = c1.BoundingBox;
|
|
|
|
|
boxCurves.set(c1, c1b);
|
|
|
|
|
j--;
|
|
|
|
|
continue;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
//如果线段端点相连,跳过
|
|
|
|
|
let isLink = [c1StartPt, c1EndPt].some(p => equalv3(p, c2StartPt) || equalv3(p, c2EndPt));
|
|
|
|
|
if (isLink) continue;
|
|
|
|
|
|
|
|
|
|
if (equalArc || c1.IntersectWith(c2, IntersectOption.OnBothOperands).length > 0)
|
|
|
|
|
{
|
|
|
|
|
let isJoin = c1.Join(c2);
|
|
|
|
|
if (isJoin)
|
|
|
|
|
{
|
|
|
|
|
boxCurves.set(c1, c1.BoundingBox);
|
|
|
|
|
this.m_RetCurves.splice(j, 1);
|
|
|
|
|
j--;
|
|
|
|
|
continue;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|