|
|
|
@ -9,7 +9,7 @@ import { Curve } from "../DatabaseServices/Curve";
|
|
|
|
|
import { Line } from "../DatabaseServices/Line";
|
|
|
|
|
import { Polyline } from '../DatabaseServices/Polyline';
|
|
|
|
|
import { equal, equaln } from "../Geometry/GeUtils";
|
|
|
|
|
import { isTargetCurInSourceCur, isTargetCurOutOrOnSourceCur } from "./BoolOperateUtils";
|
|
|
|
|
import { isTargetCurInOrOnSourceCur, isTargetCurOutOrOnSourceCur } from "./BoolOperateUtils";
|
|
|
|
|
import { IntersectOption } from "./IntersectWith";
|
|
|
|
|
import { LinkSelf } from "./LinkSelft";
|
|
|
|
|
interface offestRes
|
|
|
|
@ -66,15 +66,12 @@ export class PolyOffestUtil
|
|
|
|
|
let cus = this.trimByContours(newPls, contours);
|
|
|
|
|
// console.timeEnd("con");
|
|
|
|
|
|
|
|
|
|
// return cus;
|
|
|
|
|
// console.time("link");
|
|
|
|
|
let rets = this.linkSelfingCurves2(cus);
|
|
|
|
|
// console.timeEnd('link');
|
|
|
|
|
if (!this.IsKeepAllCurves)
|
|
|
|
|
{
|
|
|
|
|
// console.time("op");
|
|
|
|
|
rets = this.optimizeCus(rets);
|
|
|
|
|
// console.timeEnd("op");
|
|
|
|
|
}
|
|
|
|
|
return rets;
|
|
|
|
|
}
|
|
|
|
@ -405,11 +402,10 @@ export class PolyOffestUtil
|
|
|
|
|
// 通过构建的轮廓对偏移曲线进行裁剪
|
|
|
|
|
private trimByContours(needCutCus: Curve[], cons: Contour[]): Curve[]
|
|
|
|
|
{
|
|
|
|
|
for (let c of cons)
|
|
|
|
|
cons.forEach(c =>
|
|
|
|
|
{
|
|
|
|
|
let tmpCus: Curve[] = [];
|
|
|
|
|
let outline = c.Outline;
|
|
|
|
|
|
|
|
|
|
needCutCus.forEach(l =>
|
|
|
|
|
{
|
|
|
|
|
//在上面或者在外面
|
|
|
|
@ -417,7 +413,7 @@ export class PolyOffestUtil
|
|
|
|
|
{
|
|
|
|
|
tmpCus.push(l);
|
|
|
|
|
}
|
|
|
|
|
else if (!isTargetCurInSourceCur(outline, l))
|
|
|
|
|
else if (!isTargetCurInOrOnSourceCur(outline, l))
|
|
|
|
|
{
|
|
|
|
|
let pts = l.IntersectWith(outline, IntersectOption.OnBothOperands);
|
|
|
|
|
if (pts.length > 0)
|
|
|
|
@ -426,7 +422,7 @@ export class PolyOffestUtil
|
|
|
|
|
let cus = l.GetSplitCurves(par);
|
|
|
|
|
|
|
|
|
|
if (cus.length > 0)
|
|
|
|
|
tmpCus.push(...cus.filter(cu => !equaln(cu.Length, 0, 1e-6) && !isTargetCurInSourceCur(outline, cu)));
|
|
|
|
|
tmpCus.push(...cus.filter(cu => !equaln(cu.Length, 0, 1e-6) && !isTargetCurInOrOnSourceCur(outline, cu)));
|
|
|
|
|
else
|
|
|
|
|
tmpCus.push(l);
|
|
|
|
|
|
|
|
|
@ -434,7 +430,7 @@ export class PolyOffestUtil
|
|
|
|
|
}
|
|
|
|
|
})
|
|
|
|
|
needCutCus = tmpCus;
|
|
|
|
|
}
|
|
|
|
|
})
|
|
|
|
|
return needCutCus;
|
|
|
|
|
}
|
|
|
|
|
/**
|
|
|
|
|