131 lines
3.8 KiB
TypeScript
131 lines
3.8 KiB
TypeScript
|
import { Processor, ProcessorModule } from "../../src/device";
|
||
|
|
||
|
import { ErrorInfo } from "../../src/device";
|
||
|
import { KLSC, YH_bang } from "./RectOptimizeWorker/bang";
|
||
|
|
||
|
/** 模块 开料顺序
|
||
|
*
|
||
|
* input 入参
|
||
|
|
||
|
*/
|
||
|
|
||
|
/** 开料顺序 */
|
||
|
export const AutoCalcCutOrder: ProcessorModule<any, any> = {
|
||
|
moduleName: "AutoCalcCutOrder",
|
||
|
moduleVersion: '20250714',
|
||
|
config: {
|
||
|
boardWidth: 0,
|
||
|
boardLength: 0,
|
||
|
placeStyle: 1,
|
||
|
},
|
||
|
setConfig(config) {
|
||
|
this.config = { ...this.config, ...config };
|
||
|
},
|
||
|
|
||
|
// 会在处理器自动执行
|
||
|
/**
|
||
|
*
|
||
|
* @param input 输入数据
|
||
|
* @param next 下一个流程的函数
|
||
|
* @param context 上下文
|
||
|
* @returns
|
||
|
*/
|
||
|
|
||
|
process(input, next, context) {
|
||
|
const { materialList } = input
|
||
|
|
||
|
for (const pm of materialList) {
|
||
|
for (const pb of pm.boardList) {
|
||
|
let selectBs = pb.blockList;
|
||
|
let beginId = 0;
|
||
|
const has0 = pb.blockList.filter(t => t.cutOrder == 0);
|
||
|
const has1 = pb.blockList.filter(t => t.cutOrder > 0);
|
||
|
const has2 = pb.blockList.filter(t => t.cutOrder < 0);
|
||
|
//有手动指定开料顺序的
|
||
|
if (has0.length > 0 && (has1.length + has2.length) > 0) {
|
||
|
selectBs = has0;
|
||
|
if (has1.length > 0) //开头的
|
||
|
{
|
||
|
const bs = has1.sort((a, b) => a.cutOrder - b.cutOrder);
|
||
|
for (const b of bs) {
|
||
|
beginId++;
|
||
|
b.cutOrder = beginId;
|
||
|
}
|
||
|
}
|
||
|
if (has2.length > 0) //结尾的
|
||
|
{
|
||
|
const bs = has2.sort((a, b) => a.cutOrder - b.cutOrder);
|
||
|
let endId = has0.length + has1.length;
|
||
|
for (const b of bs) {
|
||
|
endId++;
|
||
|
b.cutOrder = endId;
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
let bangs: YH_bang[] = [];
|
||
|
let blocks = new Array();
|
||
|
for (let i = 0; i < selectBs.length; i++) {
|
||
|
let block = selectBs[i];
|
||
|
let bangid = i + 1;
|
||
|
let x = block.placeX;
|
||
|
let y = block.placeY;
|
||
|
let pbg = block.placeLength;
|
||
|
let pbk = block.placeWidth;
|
||
|
blocks[bangid] = block;
|
||
|
|
||
|
bangs.push({
|
||
|
bangid,
|
||
|
line: 0,
|
||
|
pbg,
|
||
|
pbk,
|
||
|
x,
|
||
|
y,
|
||
|
ishb: false,
|
||
|
hb: [],
|
||
|
isbig: false,
|
||
|
isqg: false,
|
||
|
isgr: false,
|
||
|
gr: [],
|
||
|
grid: -1
|
||
|
});
|
||
|
}
|
||
|
let dt = pm.diameter + pm.cutKnifeGap;
|
||
|
let k = pb.width;
|
||
|
let g = pb.length;
|
||
|
|
||
|
let xdsc: KLSC = new KLSC(bangs, k, g, dt, 0, 0, 1);
|
||
|
// try {
|
||
|
// xdsc
|
||
|
// } catch (error) {
|
||
|
// console.log(error);
|
||
|
// }
|
||
|
let rt = xdsc.SCid;
|
||
|
// let rt = JSXDSC(bangs, dt, k, g);
|
||
|
|
||
|
if (rt.length < selectBs.length) return;
|
||
|
for (let i = 0; i < rt.length; i++) {
|
||
|
let bid = rt[i];
|
||
|
beginId++;
|
||
|
blocks[bid].cutOrder = beginId;
|
||
|
}
|
||
|
|
||
|
}
|
||
|
}
|
||
|
|
||
|
|
||
|
return next ? next(input) : input;
|
||
|
},
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
onError(error) {
|
||
|
|
||
|
console.error('出错了哦', error);
|
||
|
|
||
|
}
|
||
|
};
|
||
|
|