|
|
@ -342,9 +342,70 @@ export class CommandFillet implements Command
|
|
|
|
return;
|
|
|
|
return;
|
|
|
|
|
|
|
|
|
|
|
|
let rem = parF2 - parF1;
|
|
|
|
let rem = parF2 - parF1;
|
|
|
|
if (rem === 1 || (rem + 1 === pl.EndParam)//是否相邻
|
|
|
|
if (rem === 1 || (rem + 1 === pl.EndParam))//相邻线段倒角
|
|
|
|
)
|
|
|
|
|
|
|
|
{
|
|
|
|
{
|
|
|
|
|
|
|
|
let es1 = new PromptEntityResult();
|
|
|
|
|
|
|
|
es1.Entity = c1;
|
|
|
|
|
|
|
|
es1.Point = enRes1.Point;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
let es2 = new PromptEntityResult();
|
|
|
|
|
|
|
|
es2.Entity = c2;
|
|
|
|
|
|
|
|
es2.Point = enRes2.Point;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
let res = this.Fillet(es1, es2);
|
|
|
|
|
|
|
|
if (res && res.arc)
|
|
|
|
|
|
|
|
{
|
|
|
|
|
|
|
|
let pln = pl.Clone();
|
|
|
|
|
|
|
|
//修正凸度
|
|
|
|
|
|
|
|
if (res.cu1 instanceof Arc)
|
|
|
|
|
|
|
|
pln.SetBulgeAt(parF1, res.cu1.Bul);
|
|
|
|
|
|
|
|
if (res.cu2 instanceof Arc)
|
|
|
|
|
|
|
|
pln.SetBulgeAt(parF2, res.cu2.Bul);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
let sp2d = Vec3DTo2D(res.arc.StartPoint.applyMatrix4(pln.OCSInv));
|
|
|
|
|
|
|
|
let ep2d = Vec3DTo2D(res.arc.EndPoint.applyMatrix4(pln.OCSInv));
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
let isNeighbor = rem === 1;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
//#IOX26
|
|
|
|
|
|
|
|
if (isNeighbor && res.cu1 instanceof Arc && res.cu2 instanceof Arc)
|
|
|
|
|
|
|
|
{
|
|
|
|
|
|
|
|
let ins = res.cu1.IntersectWith(res.cu2, IntersectOption.OnBothOperands);
|
|
|
|
|
|
|
|
if (ins.length === 1 && !equalv3(pln.StartPoint, ins[0]))
|
|
|
|
|
|
|
|
isNeighbor = false;
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if (isNeighbor)
|
|
|
|
|
|
|
|
{
|
|
|
|
|
|
|
|
pln.SetPointAt(parF2, ep2d);
|
|
|
|
|
|
|
|
pln.AddVertexAt(parF2, sp2d);
|
|
|
|
|
|
|
|
pln.SetBulgeAt(parF2, res.arc.Bul);
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
else//首尾
|
|
|
|
|
|
|
|
{
|
|
|
|
|
|
|
|
pln.SetPointAt(0, sp2d);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
let plPtCount = pln.NumberOfVertices;
|
|
|
|
|
|
|
|
if (pln.EndParam === plPtCount)//CloseMark
|
|
|
|
|
|
|
|
{
|
|
|
|
|
|
|
|
pln.AddVertexAt(plPtCount, ep2d);
|
|
|
|
|
|
|
|
pln.SetBulgeAt(plPtCount, -res.arc.Bul);
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
else
|
|
|
|
|
|
|
|
{
|
|
|
|
|
|
|
|
pln.SetPointAt(plPtCount - 1, ep2d);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
pln.SetBulgeAt(plPtCount - 1, -res.arc.Bul);
|
|
|
|
|
|
|
|
pln.AddVertexAt(plPtCount, sp2d);
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
return {
|
|
|
|
|
|
|
|
cu1: pln,
|
|
|
|
|
|
|
|
cu2: undefined,
|
|
|
|
|
|
|
|
arc: undefined
|
|
|
|
|
|
|
|
};
|
|
|
|
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
else//自交多段线
|
|
|
|
else//自交多段线
|
|
|
|
{
|
|
|
|
{
|
|
|
@ -379,70 +440,6 @@ export class CommandFillet implements Command
|
|
|
|
return this.FilletPolyLineSelf(es1, es2);
|
|
|
|
return this.FilletPolyLineSelf(es1, es2);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
let es1 = new PromptEntityResult();
|
|
|
|
|
|
|
|
es1.Entity = c1;
|
|
|
|
|
|
|
|
es1.Point = enRes1.Point;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
let es2 = new PromptEntityResult();
|
|
|
|
|
|
|
|
es2.Entity = c2;
|
|
|
|
|
|
|
|
es2.Point = enRes2.Point;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
let res = this.Fillet(es1, es2);
|
|
|
|
|
|
|
|
if (res && res.arc)
|
|
|
|
|
|
|
|
{
|
|
|
|
|
|
|
|
let pln = pl.Clone();
|
|
|
|
|
|
|
|
//修正凸度
|
|
|
|
|
|
|
|
if (res.cu1 instanceof Arc)
|
|
|
|
|
|
|
|
pln.SetBulgeAt(parF1, res.cu1.Bul);
|
|
|
|
|
|
|
|
if (res.cu2 instanceof Arc)
|
|
|
|
|
|
|
|
pln.SetBulgeAt(parF2, res.cu2.Bul);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
let sp2d = Vec3DTo2D(res.arc.StartPoint.applyMatrix4(pln.OCSInv));
|
|
|
|
|
|
|
|
let ep2d = Vec3DTo2D(res.arc.EndPoint.applyMatrix4(pln.OCSInv));
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
let isNeighbor = rem === 1;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
//#IOX26
|
|
|
|
|
|
|
|
if (isNeighbor && res.cu1 instanceof Arc && res.cu2 instanceof Arc)
|
|
|
|
|
|
|
|
{
|
|
|
|
|
|
|
|
let ins = res.cu1.IntersectWith(res.cu2, IntersectOption.OnBothOperands);
|
|
|
|
|
|
|
|
if (ins.length === 1 && !equalv3(pln.StartPoint, ins[0]))
|
|
|
|
|
|
|
|
isNeighbor = false;
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if (isNeighbor)
|
|
|
|
|
|
|
|
{
|
|
|
|
|
|
|
|
pln.SetPointAt(parF2, ep2d);
|
|
|
|
|
|
|
|
pln.AddVertexAt(parF2, sp2d);
|
|
|
|
|
|
|
|
pln.SetBulgeAt(parF2, res.arc.Bul);
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
else//首尾
|
|
|
|
|
|
|
|
{
|
|
|
|
|
|
|
|
pln.SetPointAt(0, sp2d);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
let plPtCount = pln.NumberOfVertices;
|
|
|
|
|
|
|
|
if (pln.EndParam === plPtCount)//CloseMark
|
|
|
|
|
|
|
|
{
|
|
|
|
|
|
|
|
pln.AddVertexAt(plPtCount, ep2d);
|
|
|
|
|
|
|
|
pln.SetBulgeAt(plPtCount, -res.arc.Bul);
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
else
|
|
|
|
|
|
|
|
{
|
|
|
|
|
|
|
|
pln.SetPointAt(plPtCount - 1, ep2d);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
pln.SetBulgeAt(plPtCount - 1, -res.arc.Bul);
|
|
|
|
|
|
|
|
pln.AddVertexAt(plPtCount, sp2d);
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
return {
|
|
|
|
|
|
|
|
cu1: pln,
|
|
|
|
|
|
|
|
cu2: undefined,
|
|
|
|
|
|
|
|
arc: undefined
|
|
|
|
|
|
|
|
};
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
FilletPolylineAndCurve(enRes1: PromptEntityResult, enRes2: PromptEntityResult): FilletRes
|
|
|
|
FilletPolylineAndCurve(enRes1: PromptEntityResult, enRes2: PromptEntityResult): FilletRes
|
|
|
|