优化:避免c2r出现死循环导致程序崩溃 fix #I4CVCB

pull/1653/MERGE
ChenX 3 years ago
parent 708a258439
commit 0c800ed830

@ -280,30 +280,30 @@ export class Command_Curve2Polyline implements Command
} }
} }
export function CurveInOCS(curve: Curve, Ocs: Matrix4, OcsInv: Matrix4): boolean export function CurveInOCS(curve: Curve, Ocs: Matrix4, OcsInv: Matrix4, zFuzz = 1e-3): boolean
{ {
if (curve instanceof Line) if (curve instanceof Line)
{ {
let p = curve.StartPoint.applyMatrix4(OcsInv); let p = curve.StartPoint.applyMatrix4(OcsInv);
if (!equaln(p.z, 0, 1e-3)) return false; if (!equaln(p.z, 0, zFuzz)) return false;
p = curve.EndPoint.applyMatrix4(OcsInv); p = curve.EndPoint.applyMatrix4(OcsInv);
if (!equaln(p.z, 0, 1e-3)) return false; if (!equaln(p.z, 0, zFuzz)) return false;
return true; return true;
} }
else if (curve instanceof Arc) else if (curve instanceof Arc)
{ {
return matrixIsCoplane(curve.OCS, Ocs, 1e-3); return matrixIsCoplane(curve.OCS, Ocs, zFuzz);
} }
else if (curve instanceof Polyline) else if (curve instanceof Polyline)
{ {
if (matrixIsCoplane(curve.OCS, Ocs, 1e-3)) if (matrixIsCoplane(curve.OCS, Ocs, zFuzz))
return true; return true;
else else
{ {
let cus = curve.Explode(); let cus = curve.Explode();
return cus.every(c => return cus.every(c =>
{ {
return CurveInOCS(c, Ocs, OcsInv); return CurveInOCS(c, Ocs, OcsInv, zFuzz);
}); });
} }
} }
@ -367,6 +367,10 @@ export function GroupCurves(curs: Curve[]): { ocs: Matrix4, cus: Curve[]; }[]
} }
return true; return true;
}); });
if (cus.length === 0)
throw "对曲线分组失败,请勾选强制使用(当前或前视图)坐标系,或对二维图形进行Z轴归0(Z0)后重新操作!";
curveGroup.push({ ocs, cus }); curveGroup.push({ ocs, cus });
} }
return curveGroup; return curveGroup;

Loading…
Cancel
Save