|
|
|
@ -6,35 +6,41 @@ import { Arc } from "../DatabaseServices/Entity/Arc";
|
|
|
|
|
import { Board, BoardType } from "../DatabaseServices/Entity/Board";
|
|
|
|
|
import { Circle } from "../DatabaseServices/Entity/Circle";
|
|
|
|
|
import { Curve } from '../DatabaseServices/Entity/Curve';
|
|
|
|
|
import { ExtureSolid } from "../DatabaseServices/Entity/Extrude";
|
|
|
|
|
import { Line } from "../DatabaseServices/Entity/Line";
|
|
|
|
|
import { Polyline } from "../DatabaseServices/Entity/Polyline";
|
|
|
|
|
import { Command } from "../Editor/CommandMachine";
|
|
|
|
|
import { PromptStatus } from "../Editor/PromptResult";
|
|
|
|
|
import { FuzzDirection } from "../Geometry/FuzzVector";
|
|
|
|
|
import { ptToString, comparePoint } from "../Geometry/GeUtils";
|
|
|
|
|
import { comparePoint, ptToString } from "../Geometry/GeUtils";
|
|
|
|
|
import { PlaneExt } from "../Geometry/Plane";
|
|
|
|
|
|
|
|
|
|
export class Command_Join implements Command
|
|
|
|
|
{
|
|
|
|
|
async exec()
|
|
|
|
|
{
|
|
|
|
|
let exSsRes = await app.Editor.GetSelection({ Msg: "请选择对象<全部选择>:", UseSelect: true, Filter: { filterTypes: [Curve, Board] } });
|
|
|
|
|
let exSsRes = await app.Editor.GetSelection({ Msg: "请选择对象<全部选择>:", UseSelect: true, Filter: { filterTypes: [Curve, Board, ExtureSolid] } });
|
|
|
|
|
if (exSsRes.Status === PromptStatus.Cancel)
|
|
|
|
|
return;
|
|
|
|
|
|
|
|
|
|
let curveCol: Curve[] = [];
|
|
|
|
|
let brs: Board[] = [];
|
|
|
|
|
let exts: ExtureSolid[] = [];
|
|
|
|
|
for (let en of exSsRes.SelectSet.SelectEntityList)
|
|
|
|
|
{
|
|
|
|
|
if (en instanceof Curve)
|
|
|
|
|
curveCol.push(en)
|
|
|
|
|
curveCol.push(en);
|
|
|
|
|
else if (en instanceof Board)
|
|
|
|
|
brs.push(en)
|
|
|
|
|
brs.push(en);
|
|
|
|
|
else if (en instanceof ExtureSolid)
|
|
|
|
|
exts.push(en);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (brs.length > 1)
|
|
|
|
|
this.MergeBoards(brs);
|
|
|
|
|
|
|
|
|
|
this.JoinSameTypeBrs(exts);
|
|
|
|
|
|
|
|
|
|
let typeMap = new Map<string, Curve[]>();
|
|
|
|
|
for (let cu of curveCol)
|
|
|
|
|
{
|
|
|
|
@ -208,17 +214,15 @@ export class Command_Join implements Command
|
|
|
|
|
brMap.set(br.BoardType, [br]);
|
|
|
|
|
}
|
|
|
|
|
for (let [, bs] of brMap)
|
|
|
|
|
{
|
|
|
|
|
this.JoinSameTypeBrs(bs);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
private JoinSameTypeBrs(brs: Board[])
|
|
|
|
|
private JoinSameTypeBrs(brs: ExtureSolid[])
|
|
|
|
|
{
|
|
|
|
|
let sortFn = comparePoint("xyz");
|
|
|
|
|
//排序
|
|
|
|
|
brs.sort((a, b) =>
|
|
|
|
|
{
|
|
|
|
|
return sortFn(a.MinPoint, b.MinPoint);
|
|
|
|
|
return sortFn(a.Position, b.Position);
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
let flag = 0;//用于记录连续不可合并次数
|
|
|
|
|