"use strict"; var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } return new (P || (P = Promise))(function (resolve, reject) { function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } step((generator = generator.apply(thisArg, _arguments || [])).next()); }); }; var __generator = (this && this.__generator) || function (thisArg, body) { var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g = Object.create((typeof Iterator === "function" ? Iterator : Object).prototype); return g.next = verb(0), g["throw"] = verb(1), g["return"] = verb(2), typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g; function verb(n) { return function (v) { return step([n, v]); }; } function step(op) { if (f) throw new TypeError("Generator is already executing."); while (g && (g = 0, op[0] && (_ = 0)), _) try { if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t; if (y = 0, t) op = [op[0] & 2, t.value]; switch (op[0]) { case 0: case 1: t = op; break; case 4: _.label++; return { value: op[1], done: false }; case 5: _.label++; y = op[1]; op = [0]; continue; case 7: op = _.ops.pop(); _.trys.pop(); continue; default: if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; } if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; } if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; } if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; } if (t[2]) _.ops.pop(); _.trys.pop(); continue; } op = body.call(thisArg, _); } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; } if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true }; } }; Object.defineProperty(exports, "__esModule", { value: true }); exports.RectOptimizeMachine = void 0; var bang_1 = require("./bang"); var RectOptimizeMachine = /** @class */ (function () { function RectOptimizeMachine() { this._Stop = false; } RectOptimizeMachine.prototype.Stop = function (d) { console.log('优化 stop=》RectOptimizeMachine', d); this._Stop = true; }; /** * @param xbangs 小板 * @param bigBang 大板(N个元素,前N-1个元素表示余料板且余料板须为矩形,第N个元素表示大板) * @param bigBangSL 余料板数量(bigBang中前N-1个元素对应的数量,如果bigBang中只有一个元素即只有大板没有余料板,则为空数组) * @param xyhcs 新优化次数 * @param isdtwosided 双面加工的小板是否优先排入 * @param gap 排版缝隙 = 开料刀直径 + 缝隙 * @param hssf 规则排版 * @param YuLiaoBoardDo2FaceBlock 余料板是否排入双面加工的小板 */ RectOptimizeMachine.prototype.Start = function (xbangs, bigBang, bigBangSL, xyhcs, isdtwosided, gap, hssf, YuLiaoBoardDo2FaceBlock) { return __awaiter(this, void 0, void 0, function () { var bestFit, bestInv, i, inv, re_ylb, fit, qfsh, tempArr, info; return __generator(this, function (_a) { switch (_a.label) { case 0: this._Stop = false; bestFit = Number.POSITIVE_INFINITY // 最佳的利用率 35*10 + 最后一张板 ; i = 0; fit = null; _a.label = 1; case 1: if (!!this._Stop) return [3 /*break*/, 3]; qfsh = hssf ? false : i % 2 === 0 // 电子锯算法, 永远不合并空间 ; tempArr = SnameYH(xbangs.slice(), bigBang, bigBangSL, xyhcs, qfsh, isdtwosided, gap, YuLiaoBoardDo2FaceBlock); inv = tempArr[0]; re_ylb = tempArr[1]; if (xbangs.length > 1000) { // debugger } fit = GetInvFit(inv); info = { times: i, type: 'loop' }; if (fit < bestFit) { bestFit = fit; bestInv = inv; this.CallBack(inv, re_ylb, fit, info); } /** 优化次数限制 逻辑 */ // if (xyhcs == i) { // await this.Stop(info); // info.type = 'stop' // this.CallBack(inv, re_ylb, fit, info) // } return [4 /*yield*/, Sleep(Math.max(5, 20 - Math.floor(xbangs.length / 10000)))]; case 2: /** 优化次数限制 逻辑 */ // if (xyhcs == i) { // await this.Stop(info); // info.type = 'stop' // this.CallBack(inv, re_ylb, fit, info) // } _a.sent(); i++; return [3 /*break*/, 1]; case 3: return [2 /*return*/]; } }); }); }; return RectOptimizeMachine; }()); exports.RectOptimizeMachine = RectOptimizeMachine; // 优化所有余料 function YLYH_all(xbangs, yuliao_bang, ylzs, xyhcs, qfsh, isdtwosided, gap, YuLiaoBoardDo2FaceBlock) { var get_regelt = []; var temp_yan_bang = []; var re_Bigbang = []; temp_yan_bang = []; // console.log('余料总数:', ylzs) for (var i = 0; i < ylzs.length; i++) { if (xbangs.length == 0) { break; } else { temp_yan_bang = []; for (var sl = 0; sl < ylzs[i]; sl++) { temp_yan_bang.push(yuliao_bang[i]); } var temp = []; temp = ylyh(xbangs, temp_yan_bang, xyhcs, qfsh, isdtwosided, gap, YuLiaoBoardDo2FaceBlock); for (var yhsl = 0; yhsl < temp[0].length; yhsl++) { get_regelt.push(temp[0][yhsl]); } for (var ylsl = 0; ylsl < temp[2].length; ylsl++) { re_Bigbang.push(temp[2][ylsl]); } xbangs = temp[1].slice(); // re_Bigbang.push(temp[2].slice()); } } return [get_regelt, xbangs, re_Bigbang]; } // 优化余料中的一个尺寸的小板 function ylyh(xbangs, yuliao_bang, xyhcs, qfsh, isdtwosided, gap, YuLiaoBoardDo2FaceBlock) { var finbang; var yh_result = []; var l; var w; var ylzs; // 余料张数 var temp_yan_bang = []; var re_yan_bang = []; var temp_max_YH = []; temp_yan_bang = []; temp_yan_bang.push(yuliao_bang[0]); l = yuliao_bang[0].l; w = yuliao_bang[0].w; if (YuLiaoBoardDo2FaceBlock) // 余料板允许加入双面小板 { finbang = find_bang_k_g(l, w, xbangs, false).slice(); } else { finbang = find_bang_k_g(l, w, xbangs, true).slice(); } if (finbang.length > 0) { if (YuLiaoBoardDo2FaceBlock) // 余料板允许加入双面小板 { temp_max_YH = YHJS(finbang, temp_yan_bang, xyhcs, qfsh, isdtwosided, gap); // 余料板 不优先 双面加工板 } else { temp_max_YH = YHJS(finbang, temp_yan_bang, xyhcs, qfsh, false, gap); } if (yuliao_bang.length > temp_max_YH.length) { ylzs = temp_max_YH.length; } else { ylzs = yuliao_bang.length; } for (var i = 0; i < ylzs; i++) { yh_result.push(temp_max_YH[i]); re_yan_bang.push(yuliao_bang[0]); for (var n = 0; n < temp_max_YH[i].length; n++) { for (var bsl = xbangs.length - 1; bsl >= 0; bsl--) if (temp_max_YH[i][n].bangid == xbangs[bsl].id) { xbangs.splice(bsl, 1); } } } } return [yh_result, xbangs, re_yan_bang]; } // 相同板材优化 function SnameYH(xbangs, B_bang, ylsl, xyhcs, qfsh, isdtwosided, gap, YuLiaoBoardDo2FaceBlock) { var same_yh_bang = []; var temp_max_YH = []; var ylbang_max_yh = []; var temp_same_yh; var isend = false; var Bigbang = []; Bigbang.push(B_bang[B_bang.length - 1]); var ylbang = B_bang.slice(); ylbang.pop(); var tempresult = []; tempresult = YLYH_all(xbangs, ylbang, ylsl, xyhcs, qfsh, isdtwosided, gap, YuLiaoBoardDo2FaceBlock); // 余料优化 for (var i = 0; i < tempresult[0].length; i++) { same_yh_bang.push(tempresult[0][i]); } xbangs = tempresult[1].slice(); ylbang_max_yh = tempresult[2].slice(); while (isend === false) { if (xbangs.length == 0) { break; } temp_max_YH = YHJS(xbangs, Bigbang, xyhcs, qfsh, isdtwosided, gap); temp_same_yh = Get_bs_bang(temp_max_YH, xbangs, isdtwosided); for (var i = 0; i < temp_same_yh[0].length; i++) { same_yh_bang.push(temp_same_yh[0][i]); xbangs = temp_same_yh[1].slice(); } } return [same_yh_bang, ylbang_max_yh]; } // 优化计算. function YHJS(xbangs, B_bang, cs, qfsh, isdtwosided, gap) { var xbangs_bak = xbangs.slice(); var bestFit = Number.POSITIVE_INFINITY; // let bestFit = Infinity; var bestInv; for (var i = 0; i < cs; i++) { xbangs = xbangs_bak.slice(); var result_yh = void 0; if (qfsh) result_yh = CBJS(xbangs, B_bang, gap, isdtwosided); else result_yh = CBJS1(xbangs, B_bang, gap, isdtwosided); var fit_1 = GetInvFit(result_yh); if (fit_1 < bestFit) { bestFit = fit_1; bestInv = result_yh; } } return bestInv; } // 得到利用率最高板材,及返回倍数板及剩下的小板 function Get_bs_bang(inv, listbang, isdtwosided) { var bestCon = arrayMax(inv, GetConFit)[0]; // 最优大板 var temp_yh_bang = []; var temp_list_yh_bang = []; var isfindend = false; while (isfindend == false) { if (listbang.length == 0) { break; } var unPlacelist = listbang.slice(); for (var _i = 0, bestCon_1 = bestCon; _i < bestCon_1.length; _i++) { var br = bestCon_1[_i]; var temp_result = find_same_bang(br.pbg, br.pbk, unPlacelist, isdtwosided); if (temp_result.findid > -1) // 找到合适的板 { temp_yh_bang.push({ bangid: temp_result.id, line: temp_result.line, x: br.x, y: br.y, pbg: temp_result.pbg, pbk: temp_result.pbk, }); unPlacelist.splice(temp_result.findid, 1); // 这里不会错误的原因是 必然会有一次成功 并且下面会备份这个数组 } else // 没找到 合适的板 退出 { isfindend = true; break; } } if (isfindend == false) // 找到合适的 { temp_list_yh_bang.push(temp_yh_bang); temp_yh_bang = []; listbang = unPlacelist.slice(); // 备份数组 } } return [temp_list_yh_bang, listbang]; } function GetInvFit(inv) { var fit = (inv.length - 1) * 10; fit += GetConFit(arrayLast(inv)); return fit; } function GetConFit(con) { var fit = 0; for (var _i = 0, con_1 = con; _i < con_1.length; _i++) { var p = con_1[_i]; fit += p.pbg * p.pbk * 1e-6; } return fit; } // 初步优化计算 横竖算法,无空间合并 function CBJS1(Listbang, yanbang, dt, isdtwosided) { var yanbang_bk = yanbang.slice(); // let zfkj: Big_bang[] = []; // let list_zfkj: (Big_bang[])[] = []; var list_yh_bng = []; // let list_yang_bang: (Big_bang[])[] = []; var result_yh = []; while (Listbang.length > 0) { // zfkj = []; yanbang = yanbang_bk.slice(); result_yh = []; while (yanbang.length > 0) { var lx = Math.floor(Math.random() * 3); // lx:0 面积最大 1 最高 2 最宽 var fs = void 0; // fs:留板方式,0:左右 1:上下 if (Math.floor(Math.random() * 2) == 0) { fs = false; } else { fs = true; } var get_result = []; get_result = jsyb(yanbang[0], lx, fs, dt, Listbang, isdtwosided); // lx:0面积最大 1最高 2最宽 fs:取板方式,false:左右(取同宽) true:上下(取同高) dt:刀头间隙 yanbang.shift(); if (get_result[0] > 0) { for (var i = 0; i < get_result[0]; i++) yanbang.push(get_result[2][i]); } if (get_result[1] > 0) { for (var i = 0; i < get_result[1]; i++) result_yh.push(get_result[3][i]); } Listbang = get_result[4].slice(); if (Listbang.length == 0) { break; } } // list_zfkj.push(zfkj); list_yh_bng.push(result_yh); // list_yang_bang.push(yanbang); // list_zfkj.push(zfkj); // Draw_Yan_bang(yanbang, 3, 0); // Draw_Yan_bang(zfkj, 5, 0); } // return [list_yh_bng, list_zfkj, list_yang_bang]; return list_yh_bng; } // 初步优化计算 交叉算法,有空间合并 function CBJS(Listbang, yanbang, dt, isdtwosided) { var yanbang_bk = yanbang.slice(); // let zfkj: Big_bang[] = []; // let list_zfkj: (Big_bang[])[] = []; var list_yh_bng = []; // let list_yang_bang: (Big_bang[])[] = []; var result_yh = []; // let temp: number = 0; while (Listbang.length > 0) // while (temp < 2)// { // temp++; // zfkj = []; yanbang = yanbang_bk.slice(); result_yh = []; while (yanbang.length > 0) { var lx = Math.floor(Math.random() * 3); // lx:0 面积最大 1 最高 2 最宽 var fs = void 0; // fs:留板方式,0:左右 1:上下 if (Math.floor(Math.random() * 2) == 0) { fs = false; } else { fs = true; } var get_result = []; var temp_yanbang = []; temp_yanbang = HBKJ(yanbang, Listbang, dt); yanbang = temp_yanbang[0]; get_result = jsyb1(yanbang[temp_yanbang[1]], lx, fs, dt, Listbang, isdtwosided); // lx:0面积最大 1最高 2最宽 fs:取板方式,false:取同宽) true:取同高) dt:刀头间隙 yanbang.splice(temp_yanbang[1], 1); if (get_result[0] > 0) { for (var i = 0; i < get_result[0]; i++) yanbang.push(get_result[2][i]); } if (get_result[1] > 0) { for (var i = 0; i < get_result[1]; i++) result_yh.push(get_result[3][i]); } Listbang = get_result[4].slice(); if (Listbang.length == 0) { break; } } // list_zfkj.push(zfkj); list_yh_bng.push(result_yh); // list_yang_bang.push(yanbang); // list_zfkj.push(zfkj); // Draw_Yan_bang(yanbang, 3, 0); // Draw_Yan_bang(zfkj, 5, 0); } // return [list_yh_bng, list_zfkj, list_yang_bang]; return list_yh_bng; } // 空间合并(相加) function hb(yanbang, dt) { var i = -1; yanbang.sort(function (a1, a2) { return a1.x - a2.x; }); while (true) { i++; if (yanbang.length < 2 || i === yanbang.length - 1) break; if (yanbang[i].y === yanbang[i + 1].y && yanbang[i].x + yanbang[i].w + dt === yanbang[i + 1].x && yanbang[i].l === yanbang[i + 1].l) { yanbang[i].w = yanbang[i].w + yanbang[i + 1].w + dt; yanbang.splice(i + 1, 1); i = -1; } } return yanbang; } // 整理空间 function zlkj(yanbang, listbang, dt) { var k; var g; var isjshb = true; // false 继续合并 ture 不在合并 var minY = 100000; var yanindex; if (listbang.length == 0) return [yanbang, true]; for (var i = 0; i < yanbang.length; i++) { if (yanbang[i].y < minY) { minY = yanbang[i].y; yanindex = i; } } k = yanbang[yanindex].w; g = yanbang[yanindex].l; if (yanindex == 0 && yanbang.length > 1) { if (yanbang[yanindex].x + yanbang[yanindex].w + dt == yanbang[yanindex + 1].x) // && yanbang[i].y + yanbang[i].l == yanbang[i + 1].y + yanbang[i + 1].l) { if (find_max_mz(g, k, listbang, false).findid == -1) { yanbang[yanindex].y = yanbang[yanindex + 1].y; yanbang[yanindex].l = yanbang[yanindex + 1].l; isjshb = false; } } } else if (yanindex == yanbang.length - 1 && yanbang.length > 1) { if (yanbang[yanindex - 1].x + yanbang[yanindex - 1].w + dt == yanbang[yanindex].x && yanbang.length > 1) // && yanbang[i].y + yanbang[i].l == yanbang[i - 1].y + yanbang[i - 1].l && (yanbang[i - 1].x + yanbang[i - 1].w + dt == yanbang[i].x)) { if (find_max_mz(g, k, listbang, false).findid == -1) { yanbang[yanindex].y = yanbang[yanindex - 1].y; yanbang[yanindex].l = yanbang[yanindex - 1].l; isjshb = false; } } } else if (yanbang.length > 1) { if (yanbang[yanindex - 1].y > yanbang[yanindex + 1].y) { if (yanbang[yanindex].x + yanbang[yanindex].w + dt == yanbang[yanindex + 1].x) // && yanbang[i].y + yanbang[i].l == yanbang[i + 1].y + yanbang[i + 1].l) { if (find_max_mz(g, k, listbang, false).findid == -1) { yanbang[yanindex].y = yanbang[yanindex + 1].y; yanbang[yanindex].l = yanbang[yanindex + 1].l; isjshb = false; } } } else { if (yanbang[yanindex - 1].x + yanbang[yanindex - 1].w + dt == yanbang[yanindex].x) // && yanbang.length > 1 && yanbang[i].y + yanbang[i].l == yanbang[i - 1].y + yanbang[i - 1].l && (yanbang[i - 1].x + yanbang[i - 1].w + dt == yanbang[i].x)) { if (find_max_mz(g, k, listbang, false).findid == -1) { yanbang[yanindex].y = yanbang[yanindex - 1].y; yanbang[yanindex].l = yanbang[yanindex - 1].l; isjshb = false; } } } } // console.log("zlkj"); // console.log(g, k); // console.log(yanbang); // console.log(listbang); // Sleep(0); return [yanbang, isjshb]; } // 合并空间 function HBKJ(yanbang, listbang, dt) { var get_result; var minY = 10000; var yanindex; get_result = hb(yanbang, dt); yanbang = get_result; var isend = false; while (isend == false) { if (yanbang.length == 1) { break; } for (var i = 0; i < yanbang.length; i++) { var temp_result = []; temp_result = zlkj(yanbang, listbang, dt); if (temp_result[1] == false) { yanbang = temp_result[0]; get_result = hb(yanbang, dt); yanbang = get_result; } else isend = true; } } for (var i = 0; i < yanbang.length; i++) { if (yanbang[i].y < minY) { minY = yanbang[i].y; yanindex = i; } } return [yanbang, yanindex]; } // 寻找符合面积的板 function find_bang_k_g(g, k, Listbang, oneFaceBlock) { var finbang = []; if (oneFaceBlock == true) { for (var i = 0; i < Listbang.length; i++) { if (Listbang[i].line == 0) { if (Listbang[i].l <= g && Listbang[i].w <= k && Listbang[i].isdtwosided == false) { finbang.push(Listbang[i]); } } else if (Listbang[i].line == 1) { if (Listbang[i].l <= k && Listbang[i].w <= g && Listbang[i].isdtwosided == false) { finbang.push(Listbang[i]); } } else { if (Listbang[i].l <= g && Listbang[i].w <= k && Listbang[i].isdtwosided == false) { finbang.push(Listbang[i]); } else if (Listbang[i].l <= k && Listbang[i].w <= g && Listbang[i].isdtwosided == false) { finbang.push(Listbang[i]); } } } } else { for (var i = 0; i < Listbang.length; i++) { if (Listbang[i].line == 0) { if (Listbang[i].l <= g && Listbang[i].w <= k) { finbang.push(Listbang[i]); } } else if (Listbang[i].line == 1) { if (Listbang[i].l <= k && Listbang[i].w <= g) { finbang.push(Listbang[i]); } } else { if (Listbang[i].l <= g && Listbang[i].w <= k) { finbang.push(Listbang[i]); } else if (Listbang[i].l <= k && Listbang[i].w <= g) { finbang.push(Listbang[i]); } } } } return finbang; } // 寻找面积最的板 // 寻找面积最大的板 function find_max_mz(g, k, Listbang, isdtwosided) { var max = 0; var bangindex = -1; var line = bang_1.LineType.Positive; var pbg = 0; var pbk = 0; var bangid = 0; var temp_max; if (isdtwosided == true) { for (var i = 0; i < Listbang.length; i++) { temp_max = Listbang[i].l * Listbang[i].w / 1000000; if (Listbang[i].line == 0) { if (Listbang[i].l <= g && Listbang[i].w <= k && max < temp_max && Listbang[i].isdtwosided == true) { max = temp_max; bangindex = i; line = 0; pbg = Listbang[i].l; pbk = Listbang[i].w; bangid = Listbang[i].id; } } else if (Listbang[i].line == 1) { if (Listbang[i].l <= k && Listbang[i].w <= g && max < temp_max && Listbang[i].isdtwosided == true) { max = temp_max; bangindex = i; line = 1; pbg = Listbang[i].w; pbk = Listbang[i].l; bangid = Listbang[i].id; } } else { if (Listbang[i].l <= g && Listbang[i].w <= k && max < temp_max && Listbang[i].isdtwosided == true) { max = temp_max; bangindex = i; line = 0; pbg = Listbang[i].l; pbk = Listbang[i].w; bangid = Listbang[i].id; } else if (Listbang[i].l <= k && Listbang[i].w <= g && max < temp_max && Listbang[i].isdtwosided == true) { max = temp_max; bangindex = i; line = 1; pbg = Listbang[i].w; pbk = Listbang[i].l; bangid = Listbang[i].id; } } } if (bangindex == -1) { for (var i = 0; i < Listbang.length; i++) { temp_max = Listbang[i].l * Listbang[i].w / 1000000; if (Listbang[i].line == 0) { if (Listbang[i].l <= g && Listbang[i].w <= k && max < temp_max) { max = temp_max; bangindex = i; line = 0; pbg = Listbang[i].l; pbk = Listbang[i].w; bangid = Listbang[i].id; } } else if (Listbang[i].line == 1) { if (Listbang[i].l <= k && Listbang[i].w <= g && max < temp_max) { max = temp_max; bangindex = i; line = 1; pbg = Listbang[i].w; pbk = Listbang[i].l; bangid = Listbang[i].id; } } else { if (Listbang[i].l <= g && Listbang[i].w <= k && max < temp_max) { max = temp_max; bangindex = i; line = 0; pbg = Listbang[i].l; pbk = Listbang[i].w; bangid = Listbang[i].id; } else if (Listbang[i].l <= k && Listbang[i].w <= g && max < temp_max) { max = temp_max; bangindex = i; line = 1; pbg = Listbang[i].w; pbk = Listbang[i].l; bangid = Listbang[i].id; } } } } } else { for (var i = 0; i < Listbang.length; i++) { temp_max = Listbang[i].l * Listbang[i].w / 1000000; if (Listbang[i].line == 0) { if (Listbang[i].l <= g && Listbang[i].w <= k && max < temp_max) { max = temp_max; bangindex = i; line = 0; pbg = Listbang[i].l; pbk = Listbang[i].w; bangid = Listbang[i].id; } } else if (Listbang[i].line == 1) { if (Listbang[i].l <= k && Listbang[i].w <= g && max < temp_max) { max = temp_max; bangindex = i; line = 1; pbg = Listbang[i].w; pbk = Listbang[i].l; bangid = Listbang[i].id; } } else { if (Listbang[i].l <= g && Listbang[i].w <= k && max < temp_max) { max = temp_max; bangindex = i; line = 0; pbg = Listbang[i].l; pbk = Listbang[i].w; bangid = Listbang[i].id; } else if (Listbang[i].l <= k && Listbang[i].w <= g && max < temp_max) { max = temp_max; bangindex = i; line = 1; pbg = Listbang[i].w; pbk = Listbang[i].l; bangid = Listbang[i].id; } } } } return { findid: bangindex, line: line, pbg: pbg, pbk: pbk, id: bangid, }; } // 寻找面积最的板 // 寻找最高的板 function find_max_g(g, k, Listbang, isdtwosided) { var max = 0; var bangindex = -1; var line = bang_1.LineType.Positive; var pbg = 0; var pbk = 0; var bangid = 0; if (isdtwosided == true) { for (var i = 0; i < Listbang.length; i++) { if (Listbang[i].line == 0) { if (Listbang[i].l <= g && Listbang[i].w <= k && max < Listbang[i].l && Listbang[i].isdtwosided == true) { max = Listbang[i].l; bangindex = i; line = 0; pbg = Listbang[i].l; pbk = Listbang[i].w; bangid = Listbang[i].id; } } else if (Listbang[i].line == 1) { if (Listbang[i].l <= k && Listbang[i].w <= g && max < Listbang[i].w && Listbang[i].isdtwosided == true) { max = Listbang[i].w; bangindex = i; line = 1; pbg = Listbang[i].w; pbk = Listbang[i].l; bangid = Listbang[i].id; } } else { if (Listbang[i].l <= g && Listbang[i].w <= k && max < Listbang[i].l && Listbang[i].isdtwosided == true) { max = Listbang[i].l; bangindex = i; line = 0; pbg = Listbang[i].l; pbk = Listbang[i].w; bangid = Listbang[i].id; } else if (Listbang[i].l <= k && Listbang[i].w <= g && max < Listbang[i].w && Listbang[i].isdtwosided == true) { max = Listbang[i].w; bangindex = i; line = 1; pbg = Listbang[i].w; pbk = Listbang[i].l; bangid = Listbang[i].id; } } } if (bangindex == -1) { for (var i = 0; i < Listbang.length; i++) { if (Listbang[i].line == 0) { if (Listbang[i].l <= g && Listbang[i].w <= k && max < Listbang[i].l) { max = Listbang[i].l; bangindex = i; line = 0; pbg = Listbang[i].l; pbk = Listbang[i].w; bangid = Listbang[i].id; } } else if (Listbang[i].line == 1) { if (Listbang[i].l <= k && Listbang[i].w <= g && max < Listbang[i].w) { max = Listbang[i].w; bangindex = i; line = 1; pbg = Listbang[i].w; pbk = Listbang[i].l; bangid = Listbang[i].id; } } else { if (Listbang[i].l <= g && Listbang[i].w <= k && max < Listbang[i].l) { max = Listbang[i].l; bangindex = i; line = 0; pbg = Listbang[i].l; pbk = Listbang[i].w; bangid = Listbang[i].id; } else if (Listbang[i].l <= k && Listbang[i].w <= g && max < Listbang[i].w) { max = Listbang[i].w; bangindex = i; line = 1; pbg = Listbang[i].w; pbk = Listbang[i].l; bangid = Listbang[i].id; } } } } } else { for (var i = 0; i < Listbang.length; i++) { if (Listbang[i].line == 0) { if (Listbang[i].l <= g && Listbang[i].w <= k && max < Listbang[i].l) { max = Listbang[i].l; bangindex = i; line = 0; pbg = Listbang[i].l; pbk = Listbang[i].w; bangid = Listbang[i].id; } } else if (Listbang[i].line == 1) { if (Listbang[i].l <= k && Listbang[i].w <= g && max < Listbang[i].w) { max = Listbang[i].w; bangindex = i; line = 1; pbg = Listbang[i].w; pbk = Listbang[i].l; bangid = Listbang[i].id; } } else { if (Listbang[i].l <= g && Listbang[i].w <= k && max < Listbang[i].l) { max = Listbang[i].l; bangindex = i; line = 0; pbg = Listbang[i].l; pbk = Listbang[i].w; bangid = Listbang[i].id; } else if (Listbang[i].l <= k && Listbang[i].w <= g && max < Listbang[i].w) { max = Listbang[i].w; bangindex = i; line = 1; pbg = Listbang[i].w; pbk = Listbang[i].l; bangid = Listbang[i].id; } } } } return { findid: bangindex, line: line, pbg: pbg, pbk: pbk, id: bangid, }; } // 寻找同高的板 function find_same_g(g, k, Listbang, isdtwosided) { var max = g; var bangindex = -1; var line = bang_1.LineType.Positive; var pbg = 0; var pbk = 0; var bangid = 0; if (isdtwosided == true) { for (var i = 0; i < Listbang.length; i++) { if (Listbang[i].line == 0) { if (Listbang[i].l <= g && Listbang[i].w <= k && max == Listbang[i].l && Listbang[i].isdtwosided == true) { bangindex = i; line = 0; pbg = Listbang[i].l; pbk = Listbang[i].w; bangid = Listbang[i].id; break; } } else if (Listbang[i].line == 1) { if (Listbang[i].l <= k && Listbang[i].w <= g && max == Listbang[i].w && Listbang[i].isdtwosided == true) { bangindex = i; line = 1; pbg = Listbang[i].w; pbk = Listbang[i].l; bangid = Listbang[i].id; break; } } else { if (Listbang[i].l <= g && Listbang[i].w <= k && max == Listbang[i].l && Listbang[i].isdtwosided == true) { bangindex = i; line = 0; pbg = Listbang[i].l; pbk = Listbang[i].w; bangid = Listbang[i].id; break; } else if (Listbang[i].l <= k && Listbang[i].w <= g && max == Listbang[i].w && Listbang[i].isdtwosided == true) { bangindex = i; line = 1; pbg = Listbang[i].w; pbk = Listbang[i].l; bangid = Listbang[i].id; break; } } } if (bangindex == -1) { for (var i = 0; i < Listbang.length; i++) { if (Listbang[i].line == 0) { if (Listbang[i].l <= g && Listbang[i].w <= k && max == Listbang[i].l) { bangindex = i; line = 0; pbg = Listbang[i].l; pbk = Listbang[i].w; bangid = Listbang[i].id; break; } } else if (Listbang[i].line == 1) { if (Listbang[i].l <= k && Listbang[i].w <= g && max == Listbang[i].w) { bangindex = i; line = 1; pbg = Listbang[i].w; pbk = Listbang[i].l; bangid = Listbang[i].id; break; } } else { if (Listbang[i].l <= g && Listbang[i].w <= k && max == Listbang[i].l) { bangindex = i; line = 0; pbg = Listbang[i].l; pbk = Listbang[i].w; bangid = Listbang[i].id; break; } else if (Listbang[i].l <= k && Listbang[i].w <= g && max == Listbang[i].w) { bangindex = i; line = 1; pbg = Listbang[i].w; pbk = Listbang[i].l; bangid = Listbang[i].id; break; } } } } } else { for (var i = 0; i < Listbang.length; i++) { if (Listbang[i].line == 0) { if (Listbang[i].l <= g && Listbang[i].w <= k && max == Listbang[i].l) { bangindex = i; line = 0; pbg = Listbang[i].l; pbk = Listbang[i].w; bangid = Listbang[i].id; break; } } else if (Listbang[i].line == 1) { if (Listbang[i].l <= k && Listbang[i].w <= g && max == Listbang[i].w) { bangindex = i; line = 1; pbg = Listbang[i].w; pbk = Listbang[i].l; bangid = Listbang[i].id; break; } } else { if (Listbang[i].l <= g && Listbang[i].w <= k && max == Listbang[i].l) { bangindex = i; line = 0; pbg = Listbang[i].l; pbk = Listbang[i].w; bangid = Listbang[i].id; break; } else if (Listbang[i].l <= k && Listbang[i].w <= g && max == Listbang[i].w) { bangindex = i; line = 1; pbg = Listbang[i].w; pbk = Listbang[i].l; bangid = Listbang[i].id; break; } } } } return { findid: bangindex, line: line, pbg: pbg, pbk: pbk, id: bangid, }; } // 寻找同高的板 // 寻找最宽的板 function find_max_k(g, k, Listbang, isdtwosided) { var max = 0; var bangindex = -1; var line = bang_1.LineType.Positive; var pbg = 0; var pbk = 0; var bangid = 0; if (isdtwosided == true) { for (var i = 0; i < Listbang.length; i++) { if (Listbang[i].line == 0) { if (Listbang[i].l <= g && Listbang[i].w <= k && max < Listbang[i].w && Listbang[i].isdtwosided == true) { max = Listbang[i].w; bangindex = i; line = 0; pbg = Listbang[i].l; pbk = Listbang[i].w; bangid = Listbang[i].id; } } else if (Listbang[i].line == 1) { if (Listbang[i].l <= k && Listbang[i].w <= g && max < Listbang[i].l && Listbang[i].isdtwosided == true) { max = Listbang[i].l; bangindex = i; line = 1; pbg = Listbang[i].w; pbk = Listbang[i].l; bangid = Listbang[i].id; } } else { if (Listbang[i].l <= g && Listbang[i].w <= k && max < Listbang[i].w && Listbang[i].isdtwosided == true) { max = Listbang[i].w; bangindex = i; line = 0; pbg = Listbang[i].l; pbk = Listbang[i].w; bangid = Listbang[i].id; } else if (Listbang[i].l <= k && Listbang[i].w <= g && max < Listbang[i].l && Listbang[i].isdtwosided == true) { max = Listbang[i].l; bangindex = i; line = 1; pbg = Listbang[i].w; pbk = Listbang[i].l; bangid = Listbang[i].id; } } } if (bangindex == -1) { for (var i = 0; i < Listbang.length; i++) { if (Listbang[i].line == 0) { if (Listbang[i].l <= g && Listbang[i].w <= k && max < Listbang[i].w) { max = Listbang[i].w; bangindex = i; line = 0; pbg = Listbang[i].l; pbk = Listbang[i].w; bangid = Listbang[i].id; } } else if (Listbang[i].line == 1) { if (Listbang[i].l <= k && Listbang[i].w <= g && max < Listbang[i].l) { max = Listbang[i].l; bangindex = i; line = 1; pbg = Listbang[i].w; pbk = Listbang[i].l; bangid = Listbang[i].id; } } else { if (Listbang[i].l <= g && Listbang[i].w <= k && max < Listbang[i].w) { max = Listbang[i].w; bangindex = i; line = 0; pbg = Listbang[i].l; pbk = Listbang[i].w; bangid = Listbang[i].id; } else if (Listbang[i].l <= k && Listbang[i].w <= g && max < Listbang[i].l) { max = Listbang[i].l; bangindex = i; line = 1; pbg = Listbang[i].w; pbk = Listbang[i].l; bangid = Listbang[i].id; } } } } } else { for (var i = 0; i < Listbang.length; i++) { if (Listbang[i].line == 0) { if (Listbang[i].l <= g && Listbang[i].w <= k && max < Listbang[i].w) { max = Listbang[i].w; bangindex = i; line = 0; pbg = Listbang[i].l; pbk = Listbang[i].w; bangid = Listbang[i].id; } } else if (Listbang[i].line == 1) { if (Listbang[i].l <= k && Listbang[i].w <= g && max < Listbang[i].l) { max = Listbang[i].l; bangindex = i; line = 1; pbg = Listbang[i].w; pbk = Listbang[i].l; bangid = Listbang[i].id; } } else { if (Listbang[i].l <= g && Listbang[i].w <= k && max < Listbang[i].w) { max = Listbang[i].w; bangindex = i; line = 0; pbg = Listbang[i].l; pbk = Listbang[i].w; bangid = Listbang[i].id; } else if (Listbang[i].l <= k && Listbang[i].w <= g && max < Listbang[i].l) { max = Listbang[i].l; bangindex = i; line = 1; pbg = Listbang[i].w; pbk = Listbang[i].l; bangid = Listbang[i].id; } } } } return { findid: bangindex, line: line, pbg: pbg, pbk: pbk, id: bangid, }; } // 寻找最高的板 // 寻同宽的板 function find_same_k(g, k, Listbang, isdtwosided) { var max = k; var bangindex = -1; var line = bang_1.LineType.Positive; var pbg = 0; var pbk = 0; var bangid = 0; if (isdtwosided == true) { for (var i = 0; i < Listbang.length; i++) { if (Listbang[i].line == 0) { if (Listbang[i].l <= g && Listbang[i].w <= k && max == Listbang[i].w && Listbang[i].isdtwosided == true) { bangindex = i; line = 0; pbg = Listbang[i].l; pbk = Listbang[i].w; bangid = Listbang[i].id; break; } } else if (Listbang[i].line == 1) { if (Listbang[i].l <= k && Listbang[i].w <= g && max == Listbang[i].l && Listbang[i].isdtwosided == true) { bangindex = i; line = 1; pbg = Listbang[i].w; pbk = Listbang[i].l; bangid = Listbang[i].id; break; } } else { if (Listbang[i].l <= g && Listbang[i].w <= k && max == Listbang[i].w && Listbang[i].isdtwosided == true) { bangindex = i; line = 0; pbg = Listbang[i].l; pbk = Listbang[i].w; bangid = Listbang[i].id; break; } else if (Listbang[i].l <= k && Listbang[i].w <= g && max == Listbang[i].l && Listbang[i].isdtwosided == true) { bangindex = i; line = 1; pbg = Listbang[i].w; pbk = Listbang[i].l; bangid = Listbang[i].id; break; } } } if (bangindex == -1) { for (var i = 0; i < Listbang.length; i++) { if (Listbang[i].line == 0) { if (Listbang[i].l <= g && Listbang[i].w <= k && max == Listbang[i].w) { bangindex = i; line = 0; pbg = Listbang[i].l; pbk = Listbang[i].w; bangid = Listbang[i].id; break; } } else if (Listbang[i].line == 1) { if (Listbang[i].l <= k && Listbang[i].w <= g && max == Listbang[i].l) { bangindex = i; line = 1; pbg = Listbang[i].w; pbk = Listbang[i].l; bangid = Listbang[i].id; break; } } else { if (Listbang[i].l <= g && Listbang[i].w <= k && max == Listbang[i].w) { bangindex = i; line = 0; pbg = Listbang[i].l; pbk = Listbang[i].w; bangid = Listbang[i].id; break; } else if (Listbang[i].l <= k && Listbang[i].w <= g && max == Listbang[i].l) { bangindex = i; line = 1; pbg = Listbang[i].w; pbk = Listbang[i].l; bangid = Listbang[i].id; break; } } } } } else { for (var i = 0; i < Listbang.length; i++) { if (Listbang[i].line == 0) { if (Listbang[i].l <= g && Listbang[i].w <= k && max == Listbang[i].w) { bangindex = i; line = 0; pbg = Listbang[i].l; pbk = Listbang[i].w; bangid = Listbang[i].id; break; } } else if (Listbang[i].line == 1) { if (Listbang[i].l <= k && Listbang[i].w <= g && max == Listbang[i].l) { bangindex = i; line = 1; pbg = Listbang[i].w; pbk = Listbang[i].l; bangid = Listbang[i].id; break; } } else { if (Listbang[i].l <= g && Listbang[i].w <= k && max == Listbang[i].w) { bangindex = i; line = 0; pbg = Listbang[i].l; pbk = Listbang[i].w; bangid = Listbang[i].id; break; } else if (Listbang[i].l <= k && Listbang[i].w <= g && max == Listbang[i].l) { bangindex = i; line = 1; pbg = Listbang[i].w; pbk = Listbang[i].l; bangid = Listbang[i].id; break; } } } } return { findid: bangindex, line: line, pbg: pbg, pbk: pbk, id: bangid, }; } // 寻同宽的板 // 找到同样大小尺寸的板材 && Listbang[i].isdtwosided == true) function find_same_bang(g, k, Listbang, isdtwosided) { var bangindex = -1; var line = bang_1.LineType.Positive; var pbg = 0; var pbk = 0; var bangid = 0; if (isdtwosided == true) { for (var i = 0; i < Listbang.length; i++) { if (Listbang[i].line == 0) { if (Listbang[i].l == g && Listbang[i].w == k && Listbang[i].isdtwosided == true) { bangindex = i; line = 0; pbg = Listbang[i].l; pbk = Listbang[i].w; bangid = Listbang[i].id; break; } } else if (Listbang[i].line == 1) { if (Listbang[i].l == k && Listbang[i].w == g && Listbang[i].isdtwosided == true) { bangindex = i; line = 1; pbg = Listbang[i].w; pbk = Listbang[i].l; bangid = Listbang[i].id; break; } } else { if (Listbang[i].l == g && Listbang[i].w == k && Listbang[i].isdtwosided == true) { bangindex = i; line = 0; pbg = Listbang[i].l; pbk = Listbang[i].w; bangid = Listbang[i].id; break; } else if (Listbang[i].l == k && Listbang[i].w == g && Listbang[i].isdtwosided == true) { bangindex = i; line = 1; pbg = Listbang[i].w; pbk = Listbang[i].l; bangid = Listbang[i].id; break; } } } if (bangindex == -1) { for (var i = 0; i < Listbang.length; i++) { if (Listbang[i].line == 0) { if (Listbang[i].l == g && Listbang[i].w == k) { bangindex = i; line = 0; pbg = Listbang[i].l; pbk = Listbang[i].w; bangid = Listbang[i].id; break; } } else if (Listbang[i].line == 1) { if (Listbang[i].l == k && Listbang[i].w == g) { bangindex = i; line = 1; pbg = Listbang[i].w; pbk = Listbang[i].l; bangid = Listbang[i].id; break; } } else { if (Listbang[i].l == g && Listbang[i].w == k) { bangindex = i; line = 0; pbg = Listbang[i].l; pbk = Listbang[i].w; bangid = Listbang[i].id; break; } else if (Listbang[i].l == k && Listbang[i].w == g) { bangindex = i; line = 1; pbg = Listbang[i].w; pbk = Listbang[i].l; bangid = Listbang[i].id; break; } } } } } else { for (var i = 0; i < Listbang.length; i++) { if (Listbang[i].line == 0) { if (Listbang[i].l == g && Listbang[i].w == k) { bangindex = i; line = 0; pbg = Listbang[i].l; pbk = Listbang[i].w; bangid = Listbang[i].id; break; } } else if (Listbang[i].line == 1) { if (Listbang[i].l == k && Listbang[i].w == g) { bangindex = i; line = 1; pbg = Listbang[i].w; pbk = Listbang[i].l; bangid = Listbang[i].id; break; } } else { if (Listbang[i].l == g && Listbang[i].w == k) { bangindex = i; line = 0; pbg = Listbang[i].l; pbk = Listbang[i].w; bangid = Listbang[i].id; break; } else if (Listbang[i].l == k && Listbang[i].w == g) { bangindex = i; line = 1; pbg = Listbang[i].w; pbk = Listbang[i].l; bangid = Listbang[i].id; break; } } } } return { findid: bangindex, line: line, pbg: pbg, pbk: pbk, id: bangid, }; } // 寻找同高或同宽的板 // 计算生成的余板 返回 余板数组,连带的板 小板数组 // lx:0面积最大 1最高 2最宽 fs:取板方式,false:左右(取同宽) true:上下(取同高) dt:刀头间隙 function jsyb(bigbang, lx, fs, dt, listbang, isdtwosided) { var x = bigbang.x; var y = bigbang.y; var k = bigbang.w; var g = bigbang.l; var isend = false; var ybg = g; var ybk = k; var x1 = x; var y1 = y; var yb = []; // #余板 坐标跟高宽; var yhxbang = []; // #连带小板的Id,及坐标 var zfkj = []; // 作废的空间 var l; var w; var get_result; var temp_get; if (lx === 0) { // get_result = find_max_mz(g, k, listbang); get_result = find_max_mz(g, k, listbang, isdtwosided); } else if (lx == 1) { // get_result = find_max_g(g, k, listbang); get_result = find_max_g(g, k, listbang, isdtwosided); } else { // get_result = find_max_k(g, k, listbang); get_result = find_max_k(g, k, listbang, isdtwosided); } if (get_result.findid > -1) { yhxbang.push({ bangid: get_result.id, line: get_result.line, x: x, y: y, pbg: get_result.pbg, pbk: get_result.pbk, }); listbang.splice(get_result.findid, 1); l = get_result.pbg; w = get_result.pbk; if (fs == false) // false:左右(取同宽) true:上下(取同高) { ybg = g - l - dt; y1 = y + l + dt; while (isend == false) { // temp_get = find_same_k(ybg, w, listbang); temp_get = find_same_k(ybg, w, listbang, isdtwosided); if (temp_get.findid > -1) { yhxbang.push({ bangid: temp_get.id, line: temp_get.line, x: x, y: y1, pbg: temp_get.pbg, pbk: temp_get.pbk, }); y1 = y1 + temp_get.pbg + dt; ybg = ybg - temp_get.pbg - dt; listbang.splice(temp_get.findid, 1); } else { if (ybg > 0) { yb.push({ l: ybg, w: w, x: x, y: y1, }); } if (k - w - dt > 0) { yb.push({ l: g, w: k - w - dt, x: x + w + dt, y: y, }); } break; } } } else // true:上下(取同高) { ybk = k - w - dt; x1 = x + w + dt; while (isend == false) { temp_get = find_same_g(l, ybk, listbang, isdtwosided); if (temp_get.findid > -1) { yhxbang.push({ bangid: temp_get.id, line: temp_get.line, x: x1, y: y, pbg: temp_get.pbg, pbk: temp_get.pbk, }); x1 = x1 + temp_get.pbk + dt; ybk = ybk - temp_get.pbk - dt; listbang.splice(temp_get.findid, 1); } else { if (ybk > 0) { yb.push({ l: l, w: ybk, x: x1, y: y, }); } if (g - l - dt > 0) { yb.push({ l: g - l - dt, w: k, x: x, y: y + l + dt, }); } break; } } } // false:左右(取同宽) true:上下(取同高) var ybsl = 0; var yhsl = 0; if (yb.length > 0) { ybsl = yb.length; } if (yhxbang.length > 0) { yhsl = yhxbang.length; } return [ybsl, yhsl, yb, yhxbang, listbang, 0, zfkj]; } else { zfkj.push({ l: g, w: k, x: x, y: y, }); var ybsl = 0; var yhsl = 0; if (yb.length > 0) { ybsl = yb.length; } if (yhxbang.length > 0) { yhsl = yhxbang.length; } return [ybsl, yhsl, yb, yhxbang, listbang, 1, zfkj]; } } // 计算生成的余板 返回 余板数组,连带的板 小板数组 都是左右分隔空间,后面再来空间合并 // lx:0面积最大 1最高 2最宽 fs:取板方式,false:取同宽 true:取同高 dt:刀头间隙 function jsyb1(bigbang, lx, fs, dt, listbang, isdtwosided) { var x = bigbang.x; var y = bigbang.y; var k = bigbang.w; var g = bigbang.l; var isend = false; var ybg = g; var ybk = k; var x1 = x; var y1 = y; var yb = []; // #余板 坐标跟高宽; var yhxbang = []; // #连带小板的Id,及坐标 var zfkj = []; // 作废的空间 var l; var w; var get_result; var temp_get; if (lx == 0) { // get_result = find_max_mz(g, k, listbang); get_result = find_max_mz(g, k, listbang, isdtwosided); } else if (lx == 1) { // get_result = find_max_g(g, k, listbang); get_result = find_max_g(g, k, listbang, isdtwosided); } else { // get_result = find_max_k(g, k, listbang); get_result = find_max_k(g, k, listbang, isdtwosided); } if (get_result.findid > -1) { yhxbang.push({ bangid: get_result.id, line: get_result.line, x: x, y: y, pbg: get_result.pbg, pbk: get_result.pbk, }); listbang.splice(get_result.findid, 1); ////////////// l = get_result.pbg; w = get_result.pbk; if (fs == false) // false:左右(取同宽) true:上下(取同高) { ybg = g - l - dt; y1 = y + l + dt; while (isend == false) { temp_get = find_same_k(ybg, w, listbang, isdtwosided); if (temp_get.findid > -1) { yhxbang.push({ bangid: temp_get.id, line: temp_get.line, x: x, y: y1, pbg: temp_get.pbg, pbk: temp_get.pbk, }); y1 = y1 + temp_get.pbg + dt; ybg = ybg - temp_get.pbg - dt; listbang.splice(temp_get.findid, 1); } else { if (ybg > 0) { yb.push({ l: ybg, w: w, x: x, y: y1, }); } if (k - w - dt > 0) { yb.push({ l: g, w: k - w - dt, x: x + w + dt, y: y, }); } break; } } } else // true:上下(取同高) { ybk = k - w - dt; x1 = x + w + dt; while (isend == false) { temp_get = find_same_g(l, ybk, listbang, isdtwosided); if (temp_get.findid > -1) { yhxbang.push({ bangid: temp_get.id, line: temp_get.line, x: x1, y: y, pbg: temp_get.pbg, pbk: temp_get.pbk, }); x1 = x1 + temp_get.pbk + dt; ybk = ybk - temp_get.pbk - dt; listbang.splice(temp_get.findid, 1); } else { if (ybk > 0) { yb.push({ l: g, w: ybk, x: x1, y: y, }); } if (g - l - dt > 0) { yb.push({ l: g - l - dt, w: k - ybk - dt, x: x, y: y + l + dt, }); } break; } } } // false:左右(取同宽) true:上下(取同高) //////////////////////////////////////////////////////////////////////////// var ybsl = 0; var yhsl = 0; if (yb.length > 0) { ybsl = yb.length; } if (yhxbang.length > 0) { yhsl = yhxbang.length; } return [ybsl, yhsl, yb, yhxbang, listbang, 0, zfkj]; } else { zfkj.push({ l: g, w: k, x: x, y: y, }); var ybsl = 0; var yhsl = 0; if (yb.length > 0) { ybsl = yb.length; } if (yhxbang.length > 0) { yhsl = yhxbang.length; } return [ybsl, yhsl, yb, yhxbang, listbang, 1, zfkj]; } } /** 获取数组最后一个元素 */ function arrayLast(arr) { return arr[arr.length - 1]; } /** 查找数组中最大的元素 */ function arrayMax(arr, f) { if (f === void 0) { f = function (a) { return a; }; } var max = Number.NEGATIVE_INFINITY; var maxIndex = -1; for (var i = 0; i < arr.length; i++) { var item = arr[i]; var v = f(item); if (v > max) { maxIndex = i; max = v; } } return [arr[maxIndex], maxIndex]; } function Sleep(time) { return __awaiter(this, void 0, void 0, function () { return __generator(this, function (_a) { return [2 /*return*/, new Promise(function (res) { setTimeout(res, time); })]; }); }); }