mirror of https://gitee.com/cf-fz/WebCAD.git
parent
2ebad079a4
commit
5e9308a959
@ -0,0 +1,89 @@
|
||||
import { Vector3 } from "../../node_modules/@types/three";
|
||||
import { app } from "../ApplicationServices/Application";
|
||||
import { Circle } from "../DatabaseServices/Circle";
|
||||
import { Curve } from "../DatabaseServices/Curve";
|
||||
import { Command } from "../Editor/CommandMachine";
|
||||
import { PromptStatus } from "../Editor/PromptResult";
|
||||
export class Command_Break implements Command
|
||||
{
|
||||
async exec()
|
||||
{
|
||||
let cuRes = await app.m_Editor.GetEntity({
|
||||
Msg: "请选择被打断的曲线:"
|
||||
});
|
||||
if (cuRes.Status !== PromptStatus.OK)
|
||||
return;
|
||||
|
||||
let cu = cuRes.Entity as Curve;
|
||||
if (!cu) return;
|
||||
|
||||
let breakPts: Vector3[] = [];
|
||||
|
||||
while (true)
|
||||
{
|
||||
let ptRes = await app.m_Editor.GetPoint({
|
||||
Msg: "请点击被打断的点:"
|
||||
, KeyWordList: breakPts.length === 0 ? [{ key: "D", msg: "等分打断" }, { key: "S", msg: "等分打断" }] : []
|
||||
});
|
||||
|
||||
if (ptRes.Status === PromptStatus.OK)
|
||||
{
|
||||
breakPts.push(ptRes.Value);
|
||||
continue;
|
||||
}
|
||||
//用户输入关键字
|
||||
else if (ptRes.Status === PromptStatus.Keyword)
|
||||
{
|
||||
if (ptRes.StringResult === "D")
|
||||
{
|
||||
let divRes = await app.m_Editor.GetDistance({ Msg: "请输入等分个数:" });
|
||||
if (divRes.Status !== PromptStatus.OK)
|
||||
return;
|
||||
|
||||
if (divRes.Value === 0)
|
||||
{
|
||||
app.m_Editor.Prompt("个数不能为0!");
|
||||
continue;
|
||||
}
|
||||
let lenDiv = cu.Length / divRes.Value;
|
||||
for (let i = 1; i < divRes.Value; i++)
|
||||
breakPts.push(cu.GetPointAtDistance(lenDiv * i));
|
||||
}
|
||||
else if (ptRes.StringResult === "S")
|
||||
{
|
||||
let divRes = await app.m_Editor.GetDistance({ Msg: "请输入等分距离:" });
|
||||
if (divRes.Status !== PromptStatus.OK)
|
||||
return;
|
||||
|
||||
if (divRes.Value === 0)
|
||||
{
|
||||
app.m_Editor.Prompt("个数不能为0!");
|
||||
return;
|
||||
}
|
||||
let divCount = cu.Length / divRes.Value;
|
||||
for (let i = 1; i < divCount; i++)
|
||||
breakPts.push(cu.GetPointAtDistance(divRes.Value * i));
|
||||
}
|
||||
else
|
||||
{
|
||||
app.m_Editor.Prompt("未知输入!");
|
||||
continue;
|
||||
}
|
||||
|
||||
if (cu instanceof Circle)
|
||||
breakPts.push(cu.StartPoint);
|
||||
}
|
||||
|
||||
break;
|
||||
}
|
||||
if (breakPts.length > 0)
|
||||
{
|
||||
let cus = cu.GetSplitCurvesByPts(breakPts);
|
||||
cu.Erase();
|
||||
cus.forEach(c =>
|
||||
{
|
||||
app.m_Database.ModelSpace.Append(c);
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
Loading…
Reference in new issue