|
|
|
@ -11,7 +11,7 @@ import { Polyline } from "../DatabaseServices/Polyline";
|
|
|
|
|
import { Command } from "../Editor/CommandMachine";
|
|
|
|
|
import { PromptStatus } from "../Editor/PromptResult";
|
|
|
|
|
import { FuzzDirection } from "../Geometry/FuzzVector";
|
|
|
|
|
import { ptToString } from "../Geometry/GeUtils";
|
|
|
|
|
import { ptToString, comparePoint } from "../Geometry/GeUtils";
|
|
|
|
|
import { PlaneExt } from "../Geometry/Plane";
|
|
|
|
|
|
|
|
|
|
export class Command_Join implements Command
|
|
|
|
@ -214,29 +214,30 @@ export class Command_Join implements Command
|
|
|
|
|
}
|
|
|
|
|
private JoinSameTypeBrs(brs: Board[])
|
|
|
|
|
{
|
|
|
|
|
while (brs.length > 0)
|
|
|
|
|
let sortFn = comparePoint("xyz");
|
|
|
|
|
//排序 使横向合并优先
|
|
|
|
|
brs.sort((a, b) =>
|
|
|
|
|
{
|
|
|
|
|
return sortFn(a.MinPoint, b.MinPoint);
|
|
|
|
|
});
|
|
|
|
|
while (brs.length > 1)
|
|
|
|
|
{
|
|
|
|
|
let br = brs.shift();//取第一个
|
|
|
|
|
|
|
|
|
|
while (brs.length > 0)
|
|
|
|
|
//剩余的 无法合并的板件
|
|
|
|
|
let remBrs = brs.filter(b =>
|
|
|
|
|
{
|
|
|
|
|
//剩余的 无法合并的板件
|
|
|
|
|
let remBrs = brs.filter(b =>
|
|
|
|
|
let isSuccess = br.Join(b);
|
|
|
|
|
if (isSuccess)
|
|
|
|
|
{
|
|
|
|
|
let isSuccess = br.Join(b);
|
|
|
|
|
if (isSuccess)
|
|
|
|
|
{
|
|
|
|
|
b.Erase();
|
|
|
|
|
return false;
|
|
|
|
|
}
|
|
|
|
|
return true;
|
|
|
|
|
});
|
|
|
|
|
b.Erase();
|
|
|
|
|
return false;
|
|
|
|
|
}
|
|
|
|
|
return true;
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
if (remBrs.length === brs.length)
|
|
|
|
|
break;//退出循环.下一个
|
|
|
|
|
else
|
|
|
|
|
brs = remBrs; //更新为剩下的板件列表
|
|
|
|
|
}
|
|
|
|
|
if (remBrs.length !== brs.length)
|
|
|
|
|
remBrs.push(br);//将合并成功的板件推回尾部
|
|
|
|
|
brs = remBrs;//更新
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|