153 lines
5.1 KiB
TypeScript
153 lines
5.1 KiB
TypeScript
import { Processor, ProcessorModule } from "../../src/device";
|
|
|
|
import { ErrorInfo } from "../../src/device";
|
|
import { BlockPlaceResult, BoardPlaceResult, BoardPosition, MaterialPlaceResult, PlaceStyle } from "../confClass";
|
|
|
|
/** 模块 处理优化源数据 数据处理 将优化数据转 为 MaterialPlaceResult
|
|
*
|
|
* input 入参
|
|
|
|
*/
|
|
|
|
export const HandleMaterialPlaceResult: ProcessorModule<any, any> = {
|
|
moduleName: "HandleMaterialPlaceResult",
|
|
moduleVersion: '20250714',
|
|
config: {
|
|
cutBoardBorder:3,
|
|
// 是否跟随大板定位
|
|
placeOriginByBoardLocation: true,
|
|
boardLocation: 0
|
|
},
|
|
setConfig(config) {
|
|
this.config = { ...this.config, ...config };
|
|
},
|
|
|
|
// 会在处理器自动执行
|
|
/**
|
|
*
|
|
* @param input 输入数据
|
|
* @param next 下一个流程的函数
|
|
* @param context 上下文
|
|
* @returns
|
|
*/
|
|
|
|
process(input, next, context) {
|
|
|
|
let {
|
|
bList, best, yl, pm, width, length
|
|
} = context.MaterialPlaceSource
|
|
let blocks = bList
|
|
let retData = new MaterialPlaceResult()
|
|
let boardCount = 0
|
|
let remainCount = 0
|
|
let border = this.config.cutBoardBorder
|
|
let borderOff = (pm.diameter + pm.cutKnifeGap) / 2
|
|
|
|
|
|
// 所有大板上的小板面积
|
|
let size_all = 0
|
|
|
|
for (let i = 0; i < best.length; i++) {
|
|
let bd = best[i]
|
|
let isRemainBoard = false
|
|
boardCount = retData.boards.length + 1
|
|
if (i < yl.length) // 余料板
|
|
{
|
|
width = yl[i].w + border * 2 - borderOff * 2
|
|
length = yl[i].l + border * 2 - borderOff * 2
|
|
isRemainBoard = true
|
|
remainCount++
|
|
}
|
|
|
|
let boardResult = new BoardPlaceResult()
|
|
boardResult.boardId = boardCount
|
|
boardResult.width = width
|
|
boardResult.length = length
|
|
boardResult.isRemainBoard = isRemainBoard
|
|
|
|
let pid = 0
|
|
for (let b of bd) {
|
|
pid++
|
|
let block = blocks[b.bangid]
|
|
let placeStyle = PlaceStyle.FRONT
|
|
if (!block) {
|
|
return
|
|
}
|
|
let faceF = block.isTurnFaceToPlace || false
|
|
let isTurnFaceToPlace = this.config.placeOriginByBoardLocation && (
|
|
this.config.boardLocation == BoardPosition.RIGHT_BOTTOM || this.boardLocation == BoardPosition.LEFT_TOP)
|
|
if (isTurnFaceToPlace)
|
|
faceF = !faceF
|
|
if (faceF) // 翻面开料
|
|
{
|
|
if (block.texture == 0) {
|
|
placeStyle = PlaceStyle.BACK
|
|
}
|
|
else if (block.texture == 2) {
|
|
placeStyle = PlaceStyle.BACK_TURN_LEFT
|
|
}
|
|
else {
|
|
placeStyle = (b.pbg == block.placeFullLength ? PlaceStyle.BACK : PlaceStyle.BACK_TURN_LEFT)
|
|
}
|
|
}
|
|
else {
|
|
if (block.texture == 0) {
|
|
placeStyle = PlaceStyle.FRONT
|
|
}
|
|
else if (block.texture == 2) {
|
|
placeStyle = PlaceStyle.FRONT_TURN_RIGHT
|
|
}
|
|
else {
|
|
placeStyle = (b.pbg == block.placeFullLength ? PlaceStyle.FRONT : PlaceStyle.FRONT_TURN_RIGHT)
|
|
}
|
|
}
|
|
|
|
let br: any = null
|
|
br = new BlockPlaceResult(block.blockNo, boardCount, pid, b.x, b.y, b.pbk, b.pbg, placeStyle, block.area)
|
|
boardResult.blocks.push(br)
|
|
boardResult.area += block.area
|
|
}
|
|
retData.boards.push(boardResult)
|
|
size_all += boardResult.area
|
|
|
|
let val = (size_all - boardResult.area) / (retData.boards.length - 1)
|
|
retData.avgUsageRateAll = size_all / retData.boards.length
|
|
retData.avgUsageRateExcludeLastBoard = Number.isNaN(val) ? boardResult.area : val
|
|
retData.usageRateLastBoard = boardResult.area
|
|
retData.boardCount = retData.boards.length
|
|
}
|
|
retData.boardCount = retData.boards.length // 大板数
|
|
let remainBoardCount = retData.boards.filter(t => t.remainNo != '').length // 异形大板数
|
|
let remianCount = 0
|
|
|
|
if (Array.isArray(pm.remainBoardList)) {
|
|
pm.remainBoardList.forEach(e => {
|
|
if (e?.placeBoardJSON) {
|
|
let str = e?.placeBoardJSON
|
|
e.placeBoardList = JSON.parse(str)
|
|
remianCount += e.placeBoardList.length
|
|
}
|
|
})
|
|
}
|
|
|
|
retData.remainBoardCount = pm?.remainBoardList ? remianCount : yl.length + remainBoardCount
|
|
|
|
console.log({ placeResult: retData, pm } )
|
|
let res = { module:this.moduleName, placeResult: retData, pm }
|
|
|
|
Reflect.set(context,'MaterialPlaceResult',res)
|
|
return next ? next(input) : input;
|
|
},
|
|
|
|
|
|
|
|
|
|
|
|
onError(error) {
|
|
|
|
console.error('出错了哦', error);
|
|
|
|
}
|
|
};
|
|
|