pull/68/head
Zoe 6 years ago
parent f777e98db0
commit 59551723dd

@ -4,7 +4,7 @@ import { Curve } from "../../DatabaseServices/Curve";
import { Polyline } from "../../DatabaseServices/Polyline"; import { Polyline } from "../../DatabaseServices/Polyline";
import { Command } from "../../Editor/CommandMachine"; import { Command } from "../../Editor/CommandMachine";
import { PromptStatus } from "../../Editor/PromptResult"; import { PromptStatus } from "../../Editor/PromptResult";
import { isTargetCurInSourceCur, isTargetCurOutOrOnSourceCur } from "../../GraphicsSystem/BoolOperateUtils"; import { isTargetCurInOrOnSourceCur, isTargetCurOutOrOnSourceCur } from "../../GraphicsSystem/BoolOperateUtils";
export class TestTargeOnCurve implements Command export class TestTargeOnCurve implements Command
{ {

@ -1,7 +1,7 @@
import * as THREE from "three"; import * as THREE from "three";
import { CreateBoardUtil } from "../ApplicationServices/mesh/createBoard"; import { CreateBoardUtil } from "../ApplicationServices/mesh/createBoard";
import { Vec2DTo3D, Vec3DTo2D, curveLinkGroup, equalCurveAndCurve } from "../Common/CurveUtils"; import { Vec2DTo3D, Vec3DTo2D, curveLinkGroup, equalCurveAndCurve } from "../Common/CurveUtils";
import { isTargetCurInSourceCur } from "../GraphicsSystem/BoolOperateUtils"; import { isTargetCurInOrOnSourceCur } from "../GraphicsSystem/BoolOperateUtils";
import { IntersectOption } from "../GraphicsSystem/IntersectWith"; import { IntersectOption } from "../GraphicsSystem/IntersectWith";
import { Arc } from "./Arc"; import { Arc } from "./Arc";
import { Circle } from "./Circle"; import { Circle } from "./Circle";
@ -238,7 +238,7 @@ export class Contour
} }
CuInOutline(targetCur: Curve) CuInOutline(targetCur: Curve)
{ {
return isTargetCurInSourceCur(this.m_Outline, targetCur); return isTargetCurInOrOnSourceCur(this.m_Outline, targetCur);
} }
Equal(tar: Contour) Equal(tar: Contour)
{ {

@ -16,7 +16,7 @@ export enum BoolOpeartionType
} }
//判断曲线是否在源封闭曲线内 //判断曲线是否在源封闭曲线内
export function isTargetCurInSourceCur(sourceCur: Polyline | Circle | Ellipse, targetCur: Curve) export function isTargetCurInOrOnSourceCur(sourceCur: Polyline | Circle | Ellipse, targetCur: Curve)
{ {
let pts = []; let pts = [];
getIntPtContextPts(sourceCur, targetCur, pts); getIntPtContextPts(sourceCur, targetCur, pts);
@ -49,7 +49,7 @@ function IsPtsAllInOrOnReg(sourceReg: Polyline | Circle | Ellipse, pts: Vector3[
return pts.every(pt => return pts.every(pt =>
{ {
//是否点在封闭曲线内 //是否点在封闭曲线内
return sourceReg.PtInCurve(pt) || sourceReg.PtOnCurve(pt); return sourceReg.PtOnCurve(pt) || sourceReg.PtInCurve(pt);
}) })
} }
//TODO:把线 on in out三种状态分开写 //TODO:把线 on in out三种状态分开写
@ -70,7 +70,7 @@ function IsPtsAllOutOrOnReg(sourceReg: Polyline | Circle | Ellipse, pts: Vector3
return pts.every(pt => return pts.every(pt =>
{ {
//是否点在封闭曲线内 //是否点在封闭曲线内
return !sourceReg.PtInCurve(pt) || sourceReg.PtOnCurve(pt); return sourceReg.PtOnCurve(pt) || !sourceReg.PtInCurve(pt);
}) })
} }
@ -99,7 +99,3 @@ export function isTargetCurOnSourceCur(sourceCur: Polyline | Circle | Ellipse, t
} else return false; } else return false;
}) })
} }
export function isTargetCurOutSourceCur(sourceCur: Polyline | Circle | Ellipse, targetCur: Curve)
{
}

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

Loading…
Cancel
Save