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); }