!2417 优化:拆单提交生产时检查排钻干涉,给出提示信息

pull/2510/MERGE
黄诗津 10 months ago committed by ChenX
parent 6259c16c13
commit 04beadad73

@ -16,8 +16,6 @@ export class CheckHoles implements Command
{
async exec()
{
const drillTool = DrawDrillingTool.GetInstance();
let brRes = await app.Editor.GetSelection({
Msg: "选择要检查排钻碰撞的板件",
Filter: { filterTypes: [Board] }
@ -26,7 +24,24 @@ export class CheckHoles implements Command
if (brRes.Status === PromptStatus.OK)
{
let brs = brRes.SelectSet.SelectEntityList as Board[];
let res = InterferenceCheck(brs);
if (res.length)
app.Editor.ModalManage.RenderModeless(CollsionModal, { faces: res }, { position: ModalPosition.Right, canMinimize: false });
else
AppToaster.show({
message: "排钻没有干涉!",
timeout: 5000,
intent: Intent.SUCCESS,
});
}
}
}
//干涉检查
export function InterferenceCheck(brs: Board[])
{
const drillTool = DrawDrillingTool.GetInstance();
let b2boxMap = new Map<Board, ObjectId[][]>();
for (let b of brs)
@ -74,12 +89,12 @@ export class CheckHoles implements Command
{
let ds2 = dss[j];
if ((ds1[0].Object as Hole).MId.Object !== (ds2[0].Object as Hole).MId.Object //如果是同一个板上的排钻(就不可能是通孔了)
&& this.IsThough(ds1)
&& this.IsThough(ds2))
&& IsThough(ds1)
&& IsThough(ds2))
continue;
let boxes2 = drillTool.GetDrillsBox(ds2, ocsInv);
if (this.IsCollsion([boxes1], [boxes2]))
if (IsCollsion([boxes1], [boxes2]))
{
let h = ds1[0].Object as Hole;
if (h.FId.Object && h.MId.Object)
@ -109,7 +124,7 @@ export class CheckHoles implements Command
for (let ds of drills)
{
boxlist.push(drillTool.GetDrillsBox(ds, ocsInv));
if (this.IsThough(ds))
if (IsThough(ds))
tkHoleFidSet.add((ds[0].Object as CylinderHole).FId);
}
@ -125,12 +140,12 @@ export class CheckHoles implements Command
{
let h1 = ds[0].Object as CylinderHole;
//同一穿孔板件的通孔不参与碰撞计算
if (this.IsThough(ds) && tkHoleFidSet.has(h1.FId))
if (IsThough(ds) && tkHoleFidSet.has(h1.FId))
continue;
boxlist2.push(drillTool.GetDrillsBox(ds, ocsInv));
}
if (this.IsCollsion(boxlist, boxlist2))
if (IsCollsion(boxlist, boxlist2))
{
res.push({
InterBoard: b1,
@ -139,26 +154,17 @@ export class CheckHoles implements Command
}
}
}
if (res.length)
app.Editor.ModalManage.RenderModeless(CollsionModal, { faces: res }, { position: ModalPosition.Right, canMinimize: false });
else
AppToaster.show({
message: "排钻没有干涉!",
timeout: 5000,
intent: Intent.SUCCESS,
});
}
return res;
}
/**
*
*/
private IsThough(ds: ObjectId[]): boolean
function IsThough(ds: ObjectId[]): boolean
{
return ds.some(d => (d.Object as CylinderHole).Type === GangDrillType.TK);
}
private IsCollsion(boxlist: Box3Ext[][], boxlist2: Box3Ext[][])
function IsCollsion(boxlist: Box3Ext[][], boxlist2: Box3Ext[][])
{
const drillTool = DrawDrillingTool.GetInstance();
@ -174,4 +180,3 @@ export class CheckHoles implements Command
}
return false;
}
}

@ -21,8 +21,11 @@ import { SelectSetBase } from "../../Editor/SelectBase";
import { userConfig } from "../../Editor/UserConfig";
import { IHardwareType } from "../../Production/Product";
import { AppConfirm } from "../../UI/Components/Common/Confirm";
import { ModalPosition } from "../../UI/Components/Modal/ModalInterface";
import { AppToaster } from "../../UI/Components/Toaster";
import { BoardStore } from "../../UI/Store/BoardStore";
import { InterferenceCheck } from "../CheckHoles";
import { CollsionModal } from "../DrawDrilling/CollisionModal";
import { Purge } from "../Purge";
import { blockBuilder, objectBuilder } from './CheckBuilder';
import { ErpGroupBy } from "./ErpGroupBy";
@ -139,9 +142,25 @@ async function ExecChaiDan(chaiDanRoute: ErpRoutes)
{
let selction = await GetProductsEntitys();
if (!selction) return;
let intSelfBoards = new Set<Board>();
let minBoardCount = 0;
const boardList = GetSelectionBoards(selction.selectEntityList, selction.selectRelativeHardware);
const interference = InterferenceCheck(boardList);
if (interference.length)
{
let res = await AppConfirm.show({
intent: Intent.WARNING,
message: "存在排钻碰撞,是否先排查?"
});
if (res)
{
app.Editor.ModalManage.RenderModeless(CollsionModal, { faces: interference }, { position: ModalPosition.Right, canMinimize: false });
return;
}
}
for (let br of boardList)
{
let b = br.__OriginalEnt__ ?? br;

Loading…
Cancel
Save