实现自交多段线倒角

pull/198/MERGE
ChenX 6 years ago
parent 5be79e78ad
commit dd26da2ea3

@ -331,27 +331,56 @@ export class CommandFillet implements Command
let parF1 = Math.floor(param1);
let parF2 = Math.floor(param2);
//TODO:自交多段线倒角
//共线
if (parF1 === parF2)
return;
//是否相邻。
let c1 = pl.GetCurveAtParam(param1);
let c2 = pl.GetCurveAtParam(param2);
if (equalv3(c1.GetFistDeriv(1).normalize(), c2.GetFistDeriv(0).normalize()))
return;
let rem = parF2 - parF1;
if (rem === 1
|| (rem + 1 === pl.EndParam)
if (rem === 1 || (rem + 1 === pl.EndParam)//是否相邻
)
{
}
else
else//自交多段线
{
if (!(c1 instanceof Line && c2 instanceof Line))
return;
let c1 = pl.GetCurveAtParam(param1);
let c2 = pl.GetCurveAtParam(param2);
if (equalv3(c1.GetFistDeriv(1).normalize(), c2.GetFistDeriv(0).normalize()))
let interPts = c1.IntersectWith(c2, IntersectOption.OnBothOperands);
if (interPts.length === 0)
return;
let ipt = interPts[0];
let splitParam1 = Math.floor(param1) + c1.GetParamAtPoint(ipt);
let splitParam2 = Math.floor(param2) + c2.GetParamAtPoint(ipt);
let cus = pl.GetSplitCurves([splitParam1, splitParam2]);
if (cus.length >= 2)
{
cus.splice(1, 1);
let pl1 = cus[0];
for (let i = 1; i < cus.length; i++)
pl1.Join(cus[i]);
let es1 = new PromptEntityResult();
es1.Entity = pl1;
es1.Point = c1.GetPointAtParam(0.1);
let es2 = new PromptEntityResult();
es2.Entity = pl1;
es2.Point = c2.GetPointAtParam(0.9);
return this.FilletPolyLineSelf(es1, es2);
}
}
let es1 = new PromptEntityResult();
es1.Entity = c1;
es1.Point = enRes1.Point;

Loading…
Cancel
Save