Files
cut-abstractions/samples/moduleManager/module_autoCalcCutOrder.ts

131 lines
3.8 KiB
TypeScript
Raw Normal View History

2025-07-22 18:38:25 +08:00
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);
}
};