!770 优化扫描实体闭合轮廓选取

pull/770/MERGE
ZoeLeeFZ 5 years ago committed by ChenX
parent 656f440535
commit 42def145a7

@ -5,25 +5,21 @@ import { Polyline } from '../DatabaseServices/Entity/Polyline';
import { Command } from '../Editor/CommandMachine';
import { PromptStatus } from '../Editor/PromptResult';
import { Vector3 } from 'three';
import { Circle } from './../DatabaseServices/Entity/Circle';
import { ConverCircleToPolyline, MergeCurvelist } from '../Common/CurveUtils';
export class Sweep implements Command
{
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)
return;
else
{
if (!(enRes.Entity instanceof Polyline))
return;
if (!enRes.Entity.IsClose)
{
app.Editor.Prompt("您选择的多段线没有闭合!");
return;
}
}
let originContour = enRes.Entity;
let originContour = GetCloseContour(enRes.Entity as Circle | Polyline);
if (!originContour) return;
let contour = originContour.Clone().ApplyMatrix(originContour.OCSInv);
let box = contour.BoundingBox;
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;
}

@ -18,6 +18,8 @@ import { HandleDirComponent } from '../SourceManage/HandleDirComponent';
import { AppToaster } from '../Toaster';
import { GetRoomCabName } from './GetRoomCabName';
import { ToplineList } from './ToplineList';
import { Circle } from './../../../DatabaseServices/Entity/Circle';
import { GetCloseContour } from '../../../Add-on/Sweep';
interface ITopllineManageProps
{
@ -88,8 +90,7 @@ export class TopllineManage extends React.Component<ITopllineManageProps, ITopll
AllowNone: false,
Msg: "选择闭合多段线",
Filter: {
filterTypes: [Polyline],
filterFunction: (obj, ent: Polyline) => ent.IsClose
filterTypes: [Polyline, Circle],
},
});
if (plRes.Status !== PromptStatus.OK)
@ -98,7 +99,12 @@ export class TopllineManage extends React.Component<ITopllineManageProps, ITopll
return;
};
let pl = plRes.SelectSet.SelectEntityList[0] as Polyline;
let pl = GetCloseContour(plRes.SelectSet.SelectEntityList[0] as Polyline as Circle | Polyline);
if (!pl)
{
reset();
return;
}
let ptRes = await app.Editor.GetPoint({
Msg: "指定基点"

Loading…
Cancel
Save