import { LinearCuttingForSweep, ViewManager, ViewType } from "../../src/Add-on/BoardCutting/LinearCuttingForSweep"; import { Polyline } from "../../src/DatabaseServices/Entity/Polyline"; import { LoadBoardsFromFileData, LoadEntityFromFileData } from "../Utils/LoadEntity.util"; import "../Utils/jest.util"; // 测试命令(用于复制):npm run test -- ArcBoardCutting.test.ts /** 批量测试 */ function TestAll() { /** 测试集 */ const testSet = new Set([ { question: { brData: { "file": [1, "Board", 10, 2, 101, 0, 1, 2, 71, [-1, 6.123233995736766e-17, 0, 0, -6.123233995736766e-17, -1, 2.4492935982947064e-16, 0, 1.4997597826618576e-32, 2.4492935982947064e-16, 1, 0, 3131.3906173705936, 1538.653029628393, -1000, 1], 0, 0, 1, [6.123233995736766e-17, 1, -2.4492935982947064e-16, 0, -1, 6.123233995736766e-17, 0, 0, 1.4997597826618576e-32, 2.4492935982947064e-16, 1, 0, 3131.3906173705936, 1538.653029628393, -1000, 1], 0, 0, 1, 3, 600, 1400, 18, true, "Polyline", 10, 2, 0, 0, 0, 7, 71, [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1], 0, 0, 1, [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1], 0, 0, 1, 2, 4, [0, 0], 0, [1400, 0], 0, [1400, 600], 0, [0, 600], 0, true, 0, 3, 0, 0, 0, 0, 0, 19, 0, "层板", "", "", "", "", "", 0, 0, "三合一", 2, 0, "1", "1", "1", "1", "", "", "", 4, "三合一", "三合一", "三合一", "三合一", true, true, 0, 0, 0, 0, 0, 0, 0, 0, true, 0, 0, null, 0, 0, "", "", "", "", 0, false, 0, "Polyline", 10, 2, 0, 0, 0, 8, 71, [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1], 0, 0, 1, [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, -1829.130340136119, -3186.5844897958577, 0, 1], 0, 0, 1, 2, 4, [0, 0], 0, [600.0000000000002, 0], -0.9999999999999999, [600.0000000000002, -400], 0, [484.8671984825753, -400], 0, false, 0, 0, true, 2, -1, 0, 6, 6, 2, 0, 0, 0, 3, 0, 1, 628.31853, 6, 6, 2, 0, 0, 0, 3, 0], "basePt": { "x": 2313.3906173705936, "y": 938.6530296283928, "z": -1418 }, "ucs": [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1] }, plData: { "file": [1, "Polyline", 10, 2, 273, 0, 1, 1, 0, [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1], 0, 0, 1, [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1], 0, 0, 1, 2, 2, [2008.0513946721885, 1238.653029628393], 0, [3469.88022397831, 1238.653029628393], 0, false], "basePt": { "x": 2008.0513946721885, "y": 1238.653029628393, "z": 0 }, "ucs": [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1] }, viewStr: ViewType.Down }, answer: { count: 2, areas: [420000, 420000], lengths: [1343.4513322353837, 1343.4513322353837] } }, { question: { brData: { "file": [1, "Board", 10, 2, 101, 0, 1, 2, 71, [-1, 6.123233995736766e-17, 0, 0, -6.123233995736766e-17, -1, 2.4492935982947064e-16, 0, 1.4997597826618576e-32, 2.4492935982947064e-16, 1, 0, 3131.3906173705936, 1538.653029628393, -1000, 1], 0, 0, 1, [6.123233995736766e-17, 1, -2.4492935982947064e-16, 0, -1, 6.123233995736766e-17, 0, 0, 1.4997597826618576e-32, 2.4492935982947064e-16, 1, 0, 3131.3906173705936, 1538.653029628393, -1000, 1], 0, 0, 1, 3, 600, 1400, 18, true, "Polyline", 10, 2, 0, 0, 0, 7, 71, [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1], 0, 0, 1, [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1], 0, 0, 1, 2, 4, [0, 0], 0, [1400, 0], 0, [1400, 600], 0, [0, 600], 0, true, 0, 3, 0, 0, 0, 0, 0, 19, 0, "层板", "", "", "", "", "", 0, 0, "三合一", 2, 0, "1", "1", "1", "1", "", "", "", 4, "三合一", "三合一", "三合一", "三合一", true, true, 0, 0, 0, 0, 0, 0, 0, 0, true, 0, 0, null, 0, 0, "", "", "", "", 0, false, 0, "Polyline", 10, 2, 0, 0, 0, 8, 71, [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1], 0, 0, 1, [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, -1829.130340136119, -3186.5844897958577, 0, 1], 0, 0, 1, 2, 4, [0, 0], 0, [600.0000000000002, 0], -0.9999999999999999, [600.0000000000002, -400], 0, [484.8671984825753, -400], 0, false, 0, 0, true, 2, -1, 0, 6, 6, 2, 0, 0, 0, 3, 0, 1, 628.31853, 6, 6, 2, 0, 0, 0, 3, 0], "basePt": { "x": 2313.3906173705936, "y": 938.6530296283928, "z": -1418 }, "ucs": [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1] }, plData: { "file": [1, "Polyline", 10, 2, 226, 0, 1, 7, 0, [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1], 0, 0, 1, [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1], 0, 0, 1, 2, 2, [2980.2949542257415, 1785.8711020734017], 0, [2779.229252050603, 693.9296733376492], 0, false], "basePt": { "x": 2779.229252050603, "y": 693.9296733376492, "z": 0 }, "ucs": [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1] }, viewStr: ViewType.Down }, answer: { count: 2, areas: [151114.91863862606, 688885.0813613739], lengths: [307.09899093217655, 1146.8339277054733] } }, { question: { brData: { "file": [1, "Board", 10, 2, 101, 0, 1, 2, 71, [-1, 6.123233995736766e-17, 0, 0, -6.123233995736766e-17, -1, 2.4492935982947064e-16, 0, 1.4997597826618576e-32, 2.4492935982947064e-16, 1, 0, 3131.3906173705936, 1538.653029628393, -1000, 1], 0, 0, 1, [6.123233995736766e-17, 1, -2.4492935982947064e-16, 0, -1, 6.123233995736766e-17, 0, 0, 1.4997597826618576e-32, 2.4492935982947064e-16, 1, 0, 3131.3906173705936, 1538.653029628393, -1000, 1], 0, 0, 1, 3, 600, 1400, 18, true, "Polyline", 10, 2, 0, 0, 0, 7, 71, [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1], 0, 0, 1, [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1], 0, 0, 1, 2, 4, [0, 0], 0, [1400, 0], 0, [1400, 600], 0, [0, 600], 0, true, 0, 3, 0, 0, 0, 0, 0, 19, 0, "层板", "", "", "", "", "", 0, 0, "三合一", 2, 0, "1", "1", "1", "1", "", "", "", 4, "三合一", "三合一", "三合一", "三合一", true, true, 0, 0, 0, 0, 0, 0, 0, 0, true, 0, 0, null, 0, 0, "", "", "", "", 0, false, 0, "Polyline", 10, 2, 0, 0, 0, 8, 71, [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1], 0, 0, 1, [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, -1829.130340136119, -3186.5844897958577, 0, 1], 0, 0, 1, 2, 4, [0, 0], 0, [600.0000000000002, 0], -0.9999999999999999, [600.0000000000002, -400], 0, [484.8671984825753, -400], 0, false, 0, 0, true, 2, -1, 0, 6, 6, 2, 0, 0, 0, 3, 0, 1, 628.31853, 6, 6, 2, 0, 0, 0, 3, 0], "basePt": { "x": 2313.3906173705936, "y": 938.6530296283928, "z": -1418 }, "ucs": [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1] }, plData: { "file": [1, "Polyline", 10, 2, 229, 0, 1, 7, 0, [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1], 0, 0, 1, [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1], 0, 0, 1, 2, 2, [2423.497625125358, 1699.2581842133418], 0, [2494.643950510407, 734.1428137726766], 0, false], "basePt": { "x": 2423.497625125358, "y": 734.1428137726766, "z": 0 }, "ucs": [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1] }, viewStr: ViewType.Down }, answer: { count: 3, areas: [405352.90503024973, 320214.5090290456, 114432.58594070456], lengths: [691.2561564438456, 532.3117909155627, 206.38895796127028] } }, { question: { brData: { "file": [1, "Board", 10, 2, 101, 0, 1, 2, 71, [-1, 6.123233995736766e-17, 0, 0, -6.123233995736766e-17, -1, 2.4492935982947064e-16, 0, 1.4997597826618576e-32, 2.4492935982947064e-16, 1, 0, 3131.3906173705936, 1538.653029628393, -1000, 1], 0, 0, 1, [6.123233995736766e-17, 1, -2.4492935982947064e-16, 0, -1, 6.123233995736766e-17, 0, 0, 1.4997597826618576e-32, 2.4492935982947064e-16, 1, 0, 3131.3906173705936, 1538.653029628393, -1000, 1], 0, 0, 1, 3, 600, 1400, 18, true, "Polyline", 10, 2, 0, 0, 0, 7, 71, [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1], 0, 0, 1, [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1], 0, 0, 1, 2, 4, [0, 0], 0, [1400, 0], 0, [1400, 600], 0, [0, 600], 0, true, 0, 3, 0, 0, 0, 0, 0, 19, 0, "层板", "", "", "", "", "", 0, 0, "三合一", 2, 0, "1", "1", "1", "1", "", "", "", 4, "三合一", "三合一", "三合一", "三合一", true, true, 0, 0, 0, 0, 0, 0, 0, 0, true, 0, 0, null, 0, 0, "", "", "", "", 0, false, 0, "Polyline", 10, 2, 0, 0, 0, 8, 71, [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1], 0, 0, 1, [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, -1829.130340136119, -3186.5844897958577, 0, 1], 0, 0, 1, 2, 4, [0, 0], 0, [600.0000000000002, 0], -0.9999999999999999, [600.0000000000002, -400], 0, [484.8671984825753, -400], 0, false, 0, 0, true, 2, -1, 0, 6, 6, 2, 0, 0, 0, 3, 0, 1, 628.31853, 6, 6, 2, 0, 0, 0, 3, 0], "basePt": { "x": 2313.3906173705936, "y": 938.6530296283928, "z": -1418 }, "ucs": [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1] }, plData: { "file": [1, "Polyline", 10, 2, 232, 0, 1, 7, 71, [0, -1, 0, 0, 0, 0, 1, 0, -1, 0, 0, 0, 0, 0, 0, 1], 0, 0, 1, [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1], 0, 0, 1, 2, 2, [-1287.5623052437588, -738.1797530758489], 0, [-1129.9916386341743, -1642.7520984271673], 0, false], "basePt": { "x": 0, "y": 1129.9916386341743, "z": -1642.7520984271673 }, "ucs": [0, -1, 0, 0, 0, 0, 1, 0, -1, 0, 0, 0, 0, 0, 0, 1] }, viewStr: ViewType.Left }, answer: { count: 2, areas: [440498.50473467575, 399501.49526532437], lengths: [1343.4513322353837, 1343.4513322353837] } }, { question: { brData: { "file": [1, "Board", 10, 2, 101, 0, 1, 2, 71, [-1, 6.123233995736766e-17, 0, 0, -6.123233995736766e-17, -1, 2.4492935982947064e-16, 0, 1.4997597826618576e-32, 2.4492935982947064e-16, 1, 0, 3131.3906173705936, 1538.653029628393, -1000, 1], 0, 0, 1, [6.123233995736766e-17, 1, -2.4492935982947064e-16, 0, -1, 6.123233995736766e-17, 0, 0, 1.4997597826618576e-32, 2.4492935982947064e-16, 1, 0, 3131.3906173705936, 1538.653029628393, -1000, 1], 0, 0, 1, 3, 600, 1400, 18, true, "Polyline", 10, 2, 0, 0, 0, 7, 71, [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1], 0, 0, 1, [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1], 0, 0, 1, 2, 4, [0, 0], 0, [1400, 0], 0, [1400, 600], 0, [0, 600], 0, true, 0, 3, 0, 0, 0, 0, 0, 19, 0, "层板", "", "", "", "", "", 0, 0, "三合一", 2, 0, "1", "1", "1", "1", "", "", "", 4, "三合一", "三合一", "三合一", "三合一", true, true, 0, 0, 0, 0, 0, 0, 0, 0, true, 0, 0, null, 0, 0, "", "", "", "", 0, false, 0, "Polyline", 10, 2, 0, 0, 0, 8, 71, [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1], 0, 0, 1, [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, -1829.130340136119, -3186.5844897958577, 0, 1], 0, 0, 1, 2, 4, [0, 0], 0, [600.0000000000002, 0], -0.9999999999999999, [600.0000000000002, -400], 0, [484.8671984825753, -400], 0, false, 0, 0, true, 2, -1, 0, 6, 6, 2, 0, 0, 0, 3, 0, 1, 628.31853, 6, 6, 2, 0, 0, 0, 3, 0], "basePt": { "x": 2313.3906173705936, "y": 938.6530296283928, "z": -1418 }, "ucs": [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1] }, plData: { "file": [1, "Polyline", 10, 2, 262, 0, 1, 7, 0, [1, 0, 0, 0, 0, 0, 1, 0, 0, -1, 0, 0, 0, 0, 0, 1], 0, 0, 1, [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1], 0, 0, 1, 2, 2, [2431.3906173705936, -832.5194311579985], 0, [2431.3906173705936, -1547.4552636415062], 0, false], "basePt": { "x": 2431.3906173705936, "y": 0, "z": -1547.4552636415062 }, "ucs": [1, 0, 0, 0, 0, 0, 1, 0, 0, -1, 0, 0, 0, 0, 0, 1] }, viewStr: ViewType.Front }, answer: { count: 3, areas: [422332.63627688476, 286255.04653577565, 131412.31718733965], lengths: [695.3098414019644, 437.6988479140293, 210.44264291938927] } } ]); // 遍历测试集 testSet.forEach(e => { TestOne(e.question.brData, e.question.plData, e.question.viewStr, e.answer.count, e.answer.areas, e.answer.lengths); }); } TestAll(); /** 测试单个案例 * @param brData 板数据 * @param plData 刀数据 * @param viewStr 视图类型 * @param count 切割后的数量 * @param areas 板轮廓面积 * @param lengths 放样路径长度 */ function TestOne(brData: Record, plData: Record, viewType: ViewType, count: number, areas: number[], lengths: number[]) { /** 视图 */ const viewMatrix = ViewManager.GetViewMatrix(viewType); /** 肉 */ const br = LoadBoardsFromFileData(brData)[0]; br.ArcBuild.ParseSweepCurves(); /** 刀 */ const splitPl = LoadEntityFromFileData(plData)[0] as Polyline; /** 切割器 */ const linearCuttingForSweep = new LinearCuttingForSweep(br, splitPl); // 单元测试 test(`切割圆弧板-${viewType}`, () => { const [cus, sweepPaths] = linearCuttingForSweep.Split(viewMatrix); // 板轮廓 expect(cus.length).toBe(count); for (let i = 0; i < cus.length; i++) { const cu = cus[i]; expect(cu.Area).toBeCloseTo(areas[i], 0.1); } // 放样路径 expect(sweepPaths.length).toBe(count); for (let i = 0; i < sweepPaths.length; i++) { const sweepPath = sweepPaths[i]; expect(sweepPath.Length).toBeCloseTo(lengths[i], 0.1); } }); }