|
|
@ -5,25 +5,21 @@ import { Polyline } from '../DatabaseServices/Entity/Polyline';
|
|
|
|
import { Command } from '../Editor/CommandMachine';
|
|
|
|
import { Command } from '../Editor/CommandMachine';
|
|
|
|
import { PromptStatus } from '../Editor/PromptResult';
|
|
|
|
import { PromptStatus } from '../Editor/PromptResult';
|
|
|
|
import { Vector3 } from 'three';
|
|
|
|
import { Vector3 } from 'three';
|
|
|
|
|
|
|
|
import { Circle } from './../DatabaseServices/Entity/Circle';
|
|
|
|
|
|
|
|
import { ConverCircleToPolyline, MergeCurvelist } from '../Common/CurveUtils';
|
|
|
|
|
|
|
|
|
|
|
|
export class Sweep implements Command
|
|
|
|
export class Sweep implements Command
|
|
|
|
{
|
|
|
|
{
|
|
|
|
async exec()
|
|
|
|
async exec()
|
|
|
|
{
|
|
|
|
{
|
|
|
|
let enRes = await app.Editor.GetEntity({ Msg: "请选择扫描轮廓(封闭多段线):" });
|
|
|
|
let enRes = await app.Editor.GetEntity({ Msg: "请选择扫描轮廓(封闭多段线):", Filter: { filterTypes: [Polyline, Circle] } });
|
|
|
|
if (enRes.Status !== PromptStatus.OK)
|
|
|
|
if (enRes.Status !== PromptStatus.OK)
|
|
|
|
return;
|
|
|
|
return;
|
|
|
|
else
|
|
|
|
|
|
|
|
{
|
|
|
|
let originContour = GetCloseContour(enRes.Entity as Circle | Polyline);
|
|
|
|
if (!(enRes.Entity instanceof Polyline))
|
|
|
|
|
|
|
|
return;
|
|
|
|
if (!originContour) return;
|
|
|
|
if (!enRes.Entity.IsClose)
|
|
|
|
|
|
|
|
{
|
|
|
|
|
|
|
|
app.Editor.Prompt("您选择的多段线没有闭合!");
|
|
|
|
|
|
|
|
return;
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
let originContour = enRes.Entity;
|
|
|
|
|
|
|
|
let contour = originContour.Clone().ApplyMatrix(originContour.OCSInv);
|
|
|
|
let contour = originContour.Clone().ApplyMatrix(originContour.OCSInv);
|
|
|
|
let box = contour.BoundingBox;
|
|
|
|
let box = contour.BoundingBox;
|
|
|
|
contour.Position = contour.Position.add(box.getCenter(new Vector3).negate());
|
|
|
|
contour.Position = contour.Position.add(box.getCenter(new Vector3).negate());
|
|
|
@ -46,3 +42,29 @@ export class Sweep implements Command
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
export function GetCloseContour(originContour: Polyline | Circle)
|
|
|
|
|
|
|
|
{
|
|
|
|
|
|
|
|
if (originContour instanceof Circle)
|
|
|
|
|
|
|
|
{
|
|
|
|
|
|
|
|
originContour = ConverCircleToPolyline(originContour);
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
else
|
|
|
|
|
|
|
|
{
|
|
|
|
|
|
|
|
if (!originContour.IsClose)
|
|
|
|
|
|
|
|
{
|
|
|
|
|
|
|
|
let cus = MergeCurvelist(originContour.Explode());
|
|
|
|
|
|
|
|
originContour = new Polyline();
|
|
|
|
|
|
|
|
for (let c of cus)
|
|
|
|
|
|
|
|
{
|
|
|
|
|
|
|
|
originContour.Join(c);
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
if (!originContour.IsClose)
|
|
|
|
|
|
|
|
{
|
|
|
|
|
|
|
|
app.Editor.Prompt("您选择的多段线没有闭合!");
|
|
|
|
|
|
|
|
return;
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
return originContour;
|
|
|
|
|
|
|
|
}
|
|
|
|