优化:排钻干涉检查性能 增加进度条

pull/2536/MERGE
ChenX 9 months ago
parent 545b49b7ba
commit d1904eaddf

@ -1,4 +1,7 @@
import Flatbush from 'flatbush';
import { runInAction } from 'mobx';
import { app } from "../ApplicationServices/Application";
import { Sleep } from "../Common/Sleep";
import { Intent } from "../Common/Toaster";
import { CylinderHole, GangDrillType } from "../DatabaseServices/3DSolid/CylinderHole";
import { Hole } from "../DatabaseServices/3DSolid/Hole";
@ -9,6 +12,7 @@ import { PromptStatus } from "../Editor/PromptResult";
import { Box3Ext } from "../Geometry/Box";
import { ModalPosition } from "../UI/Components/Modal/ModalInterface";
import { AppToaster } from "../UI/Components/Toaster";
import { DownPanelStore } from "../UI/Store/DownPanelStore";
import { CollsionModal, ICollsionBrs } from "./DrawDrilling/CollisionModal";
import { DrawDrillingTool } from "./DrawDrilling/DrawDrillingTool";
@ -24,7 +28,7 @@ export class CheckHoles implements Command
if (brRes.Status === PromptStatus.OK)
{
let brs = brRes.SelectSet.SelectEntityList as Board[];
let res = InterferenceCheck(brs);
let res = await InterferenceCheck(brs);
if (res.length)
app.Editor.ModalManage.RenderModeless(CollsionModal, { faces: res }, { position: ModalPosition.Right, canMinimize: false });
@ -39,7 +43,7 @@ export class CheckHoles implements Command
}
//干涉检查
export function InterferenceCheck(brs: Board[])
export async function InterferenceCheck(brs: Board[])
{
const drillTool = DrawDrillingTool.GetInstance();
let b2boxMap = new Map<Board, ObjectId[][]>();
@ -110,9 +114,21 @@ export function InterferenceCheck(brs: Board[])
}
}
let brsBox = brs.map(br => br.BoundingBox);
let fb = new Flatbush(brsBox.length);
for (let box of brsBox)
{
fb.add(box.min.x, box.min.z, box.max.x, box.max.z);
}
fb.finish();
let process = DownPanelStore.GetInstance();
process.StartProgress("检查排钻干涉...");
for (let i = 0; i < brs.length; i++)
{
let box = brsBox[i];
let b1 = brs[i];
let drills = b2boxMap.get(b1);
if (!drills || drills.length === 0) continue;
@ -128,7 +144,9 @@ export function InterferenceCheck(brs: Board[])
tkHoleFidSet.add((ds[0].Object as CylinderHole).FId);
}
for (let j = i + 1; j < brs.length; j++)
let ids = fb.search(box.min.x - 500, box.min.z - 500, box.max.x + 500, box.max.z + 500);
for (let j of ids)
{
let b2 = brs[j];
let drills2 = b2boxMap.get(b2);
@ -153,7 +171,15 @@ export function InterferenceCheck(brs: Board[])
});
}
}
runInAction(() =>
{
process.progress = (i) / brs.length;
process.progressName = `排钻干涉检查 ${i}/${brs.length}`;
});
await Sleep(0);
}
process.EndProgress();
return res;
}

@ -148,7 +148,7 @@ async function ExecChaiDan(chaiDanRoute: ErpRoutes)
let minBoardCount = 0;
const boardList = GetSelectionBoards(selction.selectEntityList, selction.selectRelativeHardware);
const interference = InterferenceCheck(boardList);
const interference = await InterferenceCheck(boardList);
if (interference.length)
{
let res = await AppConfirm.show({

Loading…
Cancel
Save