Files
cut-abstractions/tests/dev1/dataHandle/common/LayoutEngine/PlaceBase.ts

95 lines
2.8 KiB
TypeScript
Raw Normal View History

2025-07-22 18:22:31 +08:00
import { ArrayExt } from '../../common/base/ArrayExt.js';
import { PlaceBoard,PlaceMaterial } from '../../confClass.js';
import { hasModelInBoardBorder } from './DisposeModelInBoardBorder.js';
import { CutOrder } from '../cutorder/CutOrder.js';
// import { PlaceStore } from './PlaceStore.js';
/**
*
* @param pm
* @param bid
*/
export function getPlaceBoard(pm: PlaceMaterial, bid: number): PlaceBoard
{
if (bid < pm.minBoardId) return null;
if (bid > pm.maxBoardId) return null;
let pb = pm.boardList.find(t => t.boardId == bid);
if (pb == null)
{
pb = new PlaceBoard(bid, pm.width, pm.length);
pb.blockList = pm.blockList.filter(t => t.boardId == bid);
resetPlaceBoard(pm, pb);
pm.boardList.push(pb);
}
return pb;
}
/**重设大板汇总 */
export function resetPlaceBoard(pm: PlaceMaterial, pb: PlaceBoard, blocks = null)
{
if (pm == null) return;
if (pb == null) return;
if (blocks != null)
{
pb.blockList = blocks;
}
pb.blockCount = pb.blockList.length;
pb.blockArea = ArrayExt.sum(pb.blockList, t => t.area);
pb.usageRate = 100 * pb.blockArea / pb.area;
//判断 有造型出现在无法加工的区域
// const sys = PlaceStore.sysConfig;
// if(sys && sys.boardBorderModelRange > 1 && sys.modelNearBoardBorder == false)
// {
// hasModelInBoardBorder(pb, sys.boardBorderModelRange, sys.boardBorderModelModeToFace, sys.boardBorderModelByMachine);
// }
// CutOrder.autoCalcCutOrder(pm, pb);
}
/**
* ,
* @param pm
* @param sortBoard
*/
export function resetPlaceMaterial(pm: PlaceMaterial, sortBoard = false)
{
if (pm.boardCount == 0)
{
pm.blockCount = 0;
pm.blockArea = 0;
pm.avgUsageRateAll = 0;
pm.avgUsageRateExcludeLastBoard = 0;
pm.usageRateLastBoard = 0;
pm.boardCountFlipFace = 0;
return;
}
pm.blockCount = pm.blockList.length;
pm.blockArea = ArrayExt.sum(pm.blockList, t => t.area);
if (pm.boardCount == 1)
{
pm.avgUsageRateAll = pm.blockArea;
pm.avgUsageRateExcludeLastBoard = pm.blockArea;
pm.usageRateLastBoard = pm.blockArea;
}
else
{
const size_last = getPlaceBoard(pm, pm.maxBoardId).blockArea;
pm.avgUsageRateAll = pm.blockArea / pm.boardCount;
pm.avgUsageRateExcludeLastBoard = (pm.blockArea - size_last) / (pm.boardCount - 1);
pm.usageRateLastBoard = size_last;
if (sortBoard) sortBoardPlace(pm);
}
pm.boardCountFlipFace = ArrayExt.count(pm.boardList, t => t.isTwoFaceProcessing);
}
/**
*
* @param pm
*/
export function sortBoardPlace(pm: PlaceMaterial)
{
pm.boardList = ArrayExt.sortBy(pm.boardList, t => t.boardId);
}