简化曲线优化

pull/76/head
Zoe 6 years ago
parent 9e9f824409
commit 2c8ba1c588

@ -16,21 +16,21 @@ exports[`中间区域需要圆裁剪 1`] = `1`;
exports[`中间区域需要圆裁剪 2`] = `24.711300177432392`;
exports[`圆求交错误导致的线丢失 1`] = `4148.643109243218`;
exports[`圆求交错误导致的线丢失 1`] = `4148.643077512141`;
exports[`圆求交错误导致的线丢失 2`] = `4425.268216257021`;
exports[`圆求交错误导致的线丢失 2`] = `4425.2680383915285`;
exports[`圆求交错误导致的线丢失 3`] = `4021.8883370297244`;
exports[`圆求交错误导致的线丢失 4`] = `4581.211434067452`;
exports[`圆求交错误导致的线丢失 4`] = `4581.211144290334`;
exports[`圆求交错误导致的线丢失 5`] = `3900.596094685299`;
exports[`圆求交错误导致的线丢失 6`] = `4757.455448859379`;
exports[`圆求交错误导致的线丢失 6`] = `4757.455003004337`;
exports[`圆求交错误导致的线丢失 7`] = `3783.7370117939813`;
exports[`圆求交错误导致的线丢失 8`] = `4971.999047743349`;
exports[`圆求交错误导致的线丢失 8`] = `4971.998320028233`;
exports[`多段线存在0长度线段导致偏移错误 1`] = `1`;

@ -2,7 +2,7 @@
exports[`补充bug测试#IKWGF 1`] = `1.1376402440608806`;
exports[`补充bug测试#IKWGF 2`] = `0.44573896329246554`;
exports[`补充bug测试#IKWGF 2`] = `0.44573816538516137`;
exports[`补充bug测试#IKWGF 3`] = `10.73282822209507`;
@ -16,10 +16,10 @@ exports[`补充bug测试#IKWGF 7`] = `14.066950838248612`;
exports[`补充bug测试#IKWGF 8`] = `2.168984971098264`;
exports[`补充bug测试#IKWGF 9`] = `11.89085508498112`;
exports[`补充bug测试#IKWGF 9`] = `11.890848111457423`;
exports[`补充bug测试#IKWGF 10`] = `1.0803373815793473`;
exports[`补充bug测试#IKWGF 11`] = `0.3947454693903588`;
exports[`补充bug测试#IKWGF 11`] = `0.39474205429703246`;
exports[`补充bug测试#IKWGF 12`] = `10.698715561269278`;

@ -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))
{
this.m_RetCurves.splice(i, 1);
i--;
break;
}
else if (c1.PtOnCurve(c2StartPt) && c1.PtOnCurve(c2EndPt))
{
// c2完全在c1内
this.m_RetCurves.splice(j, 1);
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)
if (c1.Join(c2))
{
let isJoin = c1.Join(c2);
if (isJoin)
{
boxCurves.set(c1, c1.BoundingBox);
this.m_RetCurves.splice(j, 1);
j--;
continue;
}
this.m_RetCurves.splice(j, 1);
c1b = c1.BoundingBox;
boxCurves.set(c1, c1b);
j--;
}
}
}

Loading…
Cancel
Save