|
|
|
@ -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)
|
|
|
|
|
{
|
|
|
|
|
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);
|
|
|
|
|
if (!equaln(p.z, 0, 1e-3)) return false;
|
|
|
|
|
if (!equaln(p.z, 0, zFuzz)) return false;
|
|
|
|
|
return true;
|
|
|
|
|
}
|
|
|
|
|
else if (curve instanceof Arc)
|
|
|
|
|
{
|
|
|
|
|
return matrixIsCoplane(curve.OCS, Ocs, 1e-3);
|
|
|
|
|
return matrixIsCoplane(curve.OCS, Ocs, zFuzz);
|
|
|
|
|
}
|
|
|
|
|
else if (curve instanceof Polyline)
|
|
|
|
|
{
|
|
|
|
|
if (matrixIsCoplane(curve.OCS, Ocs, 1e-3))
|
|
|
|
|
if (matrixIsCoplane(curve.OCS, Ocs, zFuzz))
|
|
|
|
|
return true;
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
let cus = curve.Explode();
|
|
|
|
|
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;
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
if (cus.length === 0)
|
|
|
|
|
throw "对曲线分组失败,请勾选强制使用(当前或前视图)坐标系,或对二维图形进行Z轴归0(Z0)后重新操作!";
|
|
|
|
|
|
|
|
|
|
curveGroup.push({ ocs, cus });
|
|
|
|
|
}
|
|
|
|
|
return curveGroup;
|
|
|
|
|