import { Board } from "../../src/DatabaseServices/Entity/Board"; import { Polyline } from "../../src/DatabaseServices/Entity/Polyline"; import { GetSealedBoardContour, SetBoardTopDownLeftRightSealData } from "../../src/GraphicsSystem/CalcEdgeSealing"; import { ConverToPtsBul } from "../../src/Production/Convert2PtsBul"; import { Production } from "../../src/Production/Product"; import "../Utils/jest.util"; import { LoadBoardsFromFileData, LoadEntityFromFileData } from "../Utils/LoadEntity.util"; function testBrSealing(br: Board, sealingSize: number[]) { br.BoardProcessOption.highSealed = sealingSize.map(s => { return { size: s }; }); SetBoardTopDownLeftRightSealData(br, br.BoardProcessOption.highSealed); let sealData = GetSealedBoardContour(br); let pl = sealData.sealedContour; pl.ApplyMatrix(br.OCS); expect(pl.IsClose).toBeTruthy(); expect(pl.Area).toMatchNumberSnapshot(); } test("常规板件,常规坐标系", () => { let data = [1, "Board", 2, 1, 0, false, 7, 0, [0, 1, 0, 0, -1, 0, 0, 0, 0, 0, 1, 0, 145.29914529914527, -290.5982905982906, 0, 1], 0, 1, 1200, 600, 1, true, "Polyline", 2, 1, 0, false, 7, 0, [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1], 0, 2, 4, [0, 0], 0, [600, 0], 0, [600, 1200], 0, [0, 1200], 0, true, 0, null, null, 1, [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1], null, "", "{\"roomName\":\"\",\"cabinetName\":\"\",\"boardName\":\"\",\"material\":\"\",\"color\":\"\",\"lines\":0,\"bigHoleDir\":0,\"drillType\":\"three\",\"composingFace\":2,\"highSealed\":[],\"sealedUp\":\"1\",\"sealedDown\":\"1\",\"sealedLeft\":\"1\",\"sealedRight\":\"1\",\"knifeRad\":\"0\",\"grooveAddLength\":\"0\",\"grooveAddWidth\":\"0\",\"grooveAddDepth\":\"0\",\"spliteHeight\":\"\",\"spliteWidth\":\"\",\"spliteThickness\":\"\"}", 0]; let layerBr = LoadBoardsFromFileData(data)[0]; let sealingSize = [1, 1, 1, 1]; testBrSealing(layerBr, sealingSize); sealingSize = [3, 2, 3, 2]; testBrSealing(layerBr, sealingSize); data = [1, "Board", 2, 1, 0, false, 7, 0, [0, 1, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, -292.022792022792, -213.67521367521368, 0, 1], 0, 1, 1200, 600, 1, true, "Polyline", 2, 1, 0, false, 7, 0, [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1], 0, 2, 4, [0, 0], 0, [600, 0], 0, [600, 1200], 0, [0, 1200], 0, true, 0, null, null, 1, [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1], null, "", "{\"roomName\":\"\",\"cabinetName\":\"\",\"boardName\":\"\",\"material\":\"\",\"color\":\"\",\"lines\":0,\"bigHoleDir\":0,\"drillType\":\"three\",\"composingFace\":2,\"highSealed\":[],\"sealedUp\":\"1\",\"sealedDown\":\"1\",\"sealedLeft\":\"1\",\"sealedRight\":\"1\",\"knifeRad\":\"0\",\"grooveAddLength\":\"0\",\"grooveAddWidth\":\"0\",\"grooveAddDepth\":\"0\",\"spliteHeight\":\"\",\"spliteWidth\":\"\",\"spliteThickness\":\"\"}", 0]; let vBr = LoadBoardsFromFileData(data)[0]; sealingSize = [2, 2, 2, 2]; testBrSealing(vBr, sealingSize); }); test("异型板件,常规坐标系", () => { let data = [1, "Board", 2, 1, 0, false, 7, 0, [0, 1, 0, 0, -1, 0, 0, 0, 0, 0, 1, 0, 3681.8686077049847, -1396.263281011676, 0, 1], 0, 1, 1336.1737079222257, 2039.4230278812934, 1, false, "Polyline", 2, 1, 0, true, 7, 0, [6.123233995736766e-17, -1, 0, 0, 1, 6.123233995736766e-17, 0, 0, 0, 0, 1, 0, 1396.2632810116759, 3681.8686077049847, 0, 1], 0, 2, 5, [2345.694899782759, -1396.263281011676], 0, [3681.8686077049847, -1396.263281011676], 0, [3681.8686077049847, 443.1597468696174], 0.41421356237309503, [3481.8686077049847, 643.1597468696174], 0, [2345.694899782759, 643.1597468696174], 0, true, 0, null, null, 1, [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1], null, "", "{\"roomName\":\"\",\"cabinetName\":\"\",\"boardName\":\"\",\"material\":\"\",\"color\":\"\",\"lines\":0,\"bigHoleDir\":0,\"drillType\":\"three\",\"composingFace\":2,\"highSealed\":[],\"sealedUp\":\"1\",\"sealedDown\":\"1\",\"sealedLeft\":\"1\",\"sealedRight\":\"1\",\"knifeRad\":\"0\",\"grooveAddLength\":\"0\",\"grooveAddWidth\":\"0\",\"grooveAddDepth\":\"0\",\"spliteHeight\":\"\",\"spliteWidth\":\"\",\"spliteThickness\":\"\"}", 0]; //第三段为圆弧 let br = LoadBoardsFromFileData(data)[0]; let sealingSize = [1, 1, 1]; testBrSealing(br, sealingSize); sealingSize = [3, 3, 10]; testBrSealing(br, sealingSize); sealingSize = [10, 10, 5]; testBrSealing(br, sealingSize); // 2,4,6,8段为圆弧 data = [1, "Board", 2, 1, 0, false, 7, 0, [0, 1, 0, 0, -1, 0, 0, 0, 0, 0, 1, 0, 6239.212423224621, -1330.0896939146003, 0, 1], 0, 1, 1275.546950115211, 2125.911583525353, 1, false, "Polyline", 2, 1, 0, true, 7, 0, [6.123233995736766e-17, -1, 0, 0, 1, 6.123233995736766e-17, 0, 0, 0, 0, 1, 0, 1330.0896939146, 6239.212423224621, 0, 1], 0, 2, 8, [5263.6654731094095, -1330.0896939146003], 0, [5939.212423224621, -1330.0896939146003], 0.41421356237309503, [6239.212423224621, -1030.0896939146003], 0, [6239.212423224621, 495.8218896107525], 0.41421356237309503, [5939.212423224621, 795.8218896107526], 0, [5263.6654731094095, 795.8218896107526], 0.4142135623730949, [4963.6654731094095, 495.8218896107527], 0, [4963.6654731094095, -1030.0896939146003], 0.4142135623730949, true, 0, null, null, 1, [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1], null, "", "{\"roomName\":\"\",\"cabinetName\":\"\",\"boardName\":\"\",\"material\":\"\",\"color\":\"\",\"lines\":0,\"bigHoleDir\":0,\"drillType\":\"three\",\"composingFace\":2,\"highSealed\":[],\"sealedUp\":\"1\",\"sealedDown\":\"1\",\"sealedLeft\":\"1\",\"sealedRight\":\"1\",\"knifeRad\":\"0\",\"grooveAddLength\":\"0\",\"grooveAddWidth\":\"0\",\"grooveAddDepth\":\"0\",\"spliteHeight\":\"\",\"spliteWidth\":\"\",\"spliteThickness\":\"\"}", 0]; br = LoadBoardsFromFileData(data)[0]; sealingSize = [1]; testBrSealing(br, sealingSize); sealingSize = [5]; testBrSealing(br, sealingSize); }); test("异型板件,非常规坐标系", () => { let data = [1, "Board", 2, 1, 0, false, 7, 0, [0, 0, 1, 0, -1, 0, 0, 0, 0, -1, 0, 0, 15844.064994449893, 0, -2833.834144511985, 1], 0, 1, 10835.306755747779, 7823.377849356992, 1, false, "Polyline", 2, 1, 0, true, 7, 0, [6.123233995736766e-17, -1, 0, 0, 1, 6.123233995736766e-17, 0, 0, 0, 0, 1, 0, 2833.8341445119845, 15844.064994449893, 0, 1], 0, 2, 6, [5008.758238702114, -2833.834144511985], 0, [5008.758238702114, 2775.380162574158], -0.414213562373095, [7222.921780972962, 4989.543704845006], 0, [13759.976048629745, 4989.543704845006], -0.8565683416116343, [14392.594203564273, 919.700241432878], 0, [14076.28512609701, -2833.834144511985], 0, true, 0, null, null, 1, [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1], null, "", "{\"roomName\":\"\",\"cabinetName\":\"\",\"boardName\":\"\",\"material\":\"\",\"color\":\"\",\"lines\":0,\"bigHoleDir\":0,\"drillType\":\"three\",\"composingFace\":2,\"highSealed\":[],\"sealedUp\":\"1\",\"sealedDown\":\"1\",\"sealedLeft\":\"1\",\"sealedRight\":\"1\",\"knifeRad\":\"0\",\"grooveAddLength\":\"0\",\"grooveAddWidth\":\"0\",\"grooveAddDepth\":\"0\",\"spliteHeight\":\"\",\"spliteWidth\":\"\",\"spliteThickness\":\"\"}", 0]; //第2,4段为圆弧 let br = LoadBoardsFromFileData(data)[0]; let sealingSize = [1, 1, 1]; testBrSealing(br, sealingSize); sealingSize = [2, 1, 1]; testBrSealing(br, sealingSize); sealingSize = [2, 1, 2]; testBrSealing(br, sealingSize); }); test("异型板件,非相切圆弧", () => { let data = [1, "Board", 3, 2, 102, false, 1, 2, 0, [0, 1, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 112.87179487179475, -263.53276353276357, 0, 1], 2, 1200, 600.0000000000001, 18, false, "Polyline", 3, 2, 0, false, 0, 7, 0, [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1], 2, 5, [0, 0], 0, [600, 0], 0, [600, 1200], 0, [300, 1200], -0.563703247863248, [0, 900], 0, true, 0, 3, 0, 0, 0, 2, [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 112.87179487179475, -263.53276353276357, 0, 1], 1, "右侧板", "{\"roomName\":\"\",\"cabinetName\":\"\",\"boardName\":\"\",\"material\":\"\",\"color\":\"\",\"lines\":0,\"bigHoleDir\":0,\"drillType\":\"three\",\"composingFace\":2,\"highSealed\":[{\"size\":1},{\"size\":2},{\"size\":3},{\"size\":4},{\"size\":5}],\"sealedUp\":\"1\",\"sealedDown\":\"1\",\"sealedLeft\":\"1\",\"sealedRight\":\"1\",\"spliteHeight\":\"\",\"spliteWidth\":\"\",\"spliteThickness\":\"\"}", 0, 0]; //第3段为圆弧 let br = LoadBoardsFromFileData(data)[0]; let sealingSize = [1, 1, 1, 1, 1]; testBrSealing(br, sealingSize); sealingSize = [3, 5, 3, 3, 3]; testBrSealing(br, sealingSize); }); test("丢失线段板件", () => { let data = [1, "Board", 3, 2, 101, false, 1, 1, 0, [0, 1, 0, 0, -1, 0, 0, 0, 0, 0, 1, 0, 817.4143763202346, -26.547581507291397, -408.40778761079696, 1], 2, 1200.0000000000002, 600, 18, false, "Polyline", 3, 2, 0, false, 0, 7, 0, [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, -1025.70079227525, -1279.6056228760524, 0, 1], 2, 54, [1025.70079227525, 2058.576017106141], 0, [1325.865855638082, 2058.576017106141], 0.41421356237309503, [1345.865855638082, 2078.576017106141], 0, [1345.865855638082, 2097.321917106141], 0.41421356237309503, [1325.865855638082, 2117.321917106141], 0, [1025.70079227525, 2137.2691008583533], 0, [1025.70079227525, 2137.2691008583533], -0.41421356237309503, [1045.70079227525, 2157.2691008583533], 0, [1325.865855638082, 2157.2691008583533], 0.41421356237309503, [1345.865855638082, 2177.2691008583533], 0, [1345.865855638082, 2196.0150008583532], 0.41421356237309503, [1325.865855638082, 2216.0150008583532], 0, [1025.70079227525, 2216.0150008583532], 0, [1025.70079227525, 2248.912678628265], 0, [1325.865855638082, 2248.912678628265], 0.41421356237309503, [1345.865855638082, 2268.912678628265], 0, [1345.865855638082, 2287.658578628265], 0.41421356237309503, [1325.865855638082, 2307.658578628265], 0, [1045.70079227525, 2307.658578628265], -0.41421356237309503, [1025.70079227525, 2327.658578628265], 0, [1025.70079227525, 2479.6056228760526], 0, [1625.70079227525, 2479.6056228760526], 0, [1625.70079227525, 1279.6056228760524], 0, [1025.70079227525, 1279.6056228760524], 0, [1025.70079227525, 1375.9224547698577], -0.41421356237309503, [1045.70079227525, 1395.9224547698577], 0, [1345.865855638082, 1395.9224547698577], 0, [1345.865855638082, 1404.6683547698576], 0.41421356237309503, [1295.865855638082, 1454.6683547698576], 0, [1025.70079227525, 1454.6683547698576], 0, [1025.70079227525, 1522.813562451274], 0, [1325.865855638082, 1522.813562451274], 0.41421356237309503, [1345.865855638082, 1542.813562451274], 0, [1345.865855638082, 1561.559462451274], 0.41421356237309503, [1325.865855638082, 1581.559462451274], 0, [1045.70079227525, 1581.559462451274], -0.41421356237309503, [1025.70079227525, 1601.559462451274], 0, [1025.70079227525, 1652.6155645751674], -0.41421356237309503, [1045.70079227525, 1672.6155645751674], 0, [1345.865855638082, 1672.6155645751674], 0, [1345.865855638082, 1701.988514575167], 0, [1045.70079227525, 1731.3614645751672], -0.41421356237309503, [1025.70079227525, 1751.3614645751672], 0, [1025.70079227525, 1761.8829073008312], -0.41421356237309503, [1045.70079227525, 1781.8829073008312], 0, [1363.4896205938342, 1781.8829073008312], 0, [1363.4896205938342, 1840.628807300831], 0, [1025.70079227525, 1881.684909424725], 0, [1025.70079227525, 1881.684909424725], -0.41421356237309503, [1075.70079227525, 1931.684909424725], 0, [1345.865855638082, 1931.684909424725], 0, [1345.865855638082, 1990.4308094247249], 0, [1075.70079227525, 1990.4308094247249], -0.41421356237309503, [1025.70079227525, 2040.4308094247249], 0, true, 0, 3, 0, 0, 0, 2, [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, -401.8444990614662, -7520.408091226085, -408.40778761079696, 1], 0, "", "{\"roomName\":\"\",\"cabinetName\":\"\",\"boardName\":\"\",\"material\":\"\",\"color\":\"\",\"lines\":0,\"bigHoleDir\":0,\"drillType\":\"three\",\"composingFace\":2,\"highSealed\":[],\"sealedUp\":\"1\",\"sealedDown\":\"1\",\"sealedLeft\":\"1\",\"sealedRight\":\"1\",\"spliteHeight\":\"\",\"spliteWidth\":\"\",\"spliteThickness\":\"\",\"highDrill\":[]}", 0, 0]; //第3段为圆弧 let br = LoadBoardsFromFileData(data)[0]; let sealingSize = []; for (let i = 0; i < 20; i++) sealingSize.push(1); testBrSealing(br, sealingSize); data = [1, "Board", 3, 2, 103, false, 1, 1, 0, [0, 1, 0, 0, -1, 0, 0, 0, 0, 0, 1, 0, 475.1861812309362, -119.62672264222056, 591, 1], 2, 799.9999999999999, 600, 18, false, "Polyline", 3, 2, 0, false, 0, 7, 0, [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, -102.47516991969519, 1419.0110848098525, 0, 1], 2, 39, [122.47516991969519, -814.6847031918554], 0, [340.6340264789152, -814.6847031918554], 0.41421356237309503, [360.6340264789152, -794.6847031918554], 0, [360.63402647891513, -756.0122031918554], 0, [102.47516991969522, -756.0122031918554], 0, [102.47516991969522, -639.0110848098526], -0.41421356237309503, [122.47516991969522, -619.0110848098526], 0, [682.4751699196952, -619.0110848098526], -0.41421356237309503, [702.4751699196952, -639.0110848098526], 0, [702.4751699196952, -1399.0110848098525], -0.41421356237309503, [682.4751699196952, -1419.0110848098525], 0, [102.47516991969522, -1419.0110848098525], 0, [102.47516991969519, -1251.259221730597], -0.41421356237309503, [122.47516991969519, -1231.259221730597], 0, [360.63402647891513, -1231.259221730597], 0, [360.63402647891513, -1172.5867217305968], 0, [122.47516991969522, -1172.5867217305968], -0.41421356237309503, [102.47516991969522, -1152.5867217305968], 0, [102.4751699196952, -1137.3832738908804], 0, [340.63402647891513, -1137.3832738908804], 0.41421356237309503, [360.63402647891513, -1117.3832738908804], 0, [360.63402647891513, -1078.7107738908805], 0, [102.47516991969522, -1078.7107738908805], 0, [102.4751699196952, -1031.7728325711996], 0, [340.63402647891513, -1031.7728325711996], 0.41421356237309503, [360.63402647891513, -1011.7728325711997], 0, [360.63402647891513, -993.1003325711996], 0.41421356237309503, [340.63402647891513, -973.1003325711996], 0, [122.47516991969519, -973.1003325711996], -0.41421356237309503, [102.47516991969519, -953.1003325711996], 0, [102.47516991969519, -948.1181401648461], -0.41421356237309503, [122.47516991969519, -928.1181401648461], 0, [340.6340264789152, -928.1181401648461], 0.41421356237309503, [360.6340264789152, -908.1181401648461], 0, [360.6340264789152, -889.4456401648459], 0.41421356237309503, [340.6340264789152, -869.4456401648459], 0, [122.47516991969522, -869.4456401648459], -0.41421356237309503, [102.47516991969522, -849.4456401648459], 0, [102.47516991969519, -834.6847031918554], -0.41421356237309503, true, 0, 3, 0, 0, 0, 2, [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 475.1861812309362, -119.62672264222056, 591, 1], 0, "层板", "{\"roomName\":\"\",\"cabinetName\":\"\",\"boardName\":\"\",\"material\":\"\",\"color\":\"\",\"lines\":0,\"bigHoleDir\":0,\"drillType\":\"three\",\"composingFace\":2,\"highSealed\":[{\"size\":2,\"color\":2},{\"size\":2,\"color\":2},{\"size\":2,\"color\":2},{\"size\":1,\"color\":1},{\"size\":1,\"color\":1},{\"size\":1,\"color\":1},{\"size\":2,\"color\":2},{\"size\":3,\"color\":3},{\"size\":4,\"color\":4},{\"size\":5,\"color\":5},{\"size\":6,\"color\":6},{\"size\":8,\"color\":7},{\"size\":7,\"color\":8},{\"size\":9,\"color\":9},{\"size\":10,\"color\":10},{\"size\":11,\"color\":11},{\"size\":12,\"color\":12},{\"size\":13,\"color\":13},{\"size\":14,\"color\":14},{\"size\":15,\"color\":15},{\"size\":2,\"color\":2},{\"size\":2,\"color\":2},{\"size\":2,\"color\":2},{\"size\":1,\"color\":1}],\"sealedUp\":\"1\",\"sealedDown\":\"1\",\"sealedLeft\":\"1\",\"sealedRight\":\"1\",\"spliteHeight\":\"\",\"spliteWidth\":\"\",\"spliteThickness\":\"\",\"highDrill\":[]}", 0, 0]; br = LoadBoardsFromFileData(data)[0]; sealingSize = []; for (let i = 0; i < 9; i++) sealingSize.push(1); testBrSealing(br, sealingSize); }); test("椭圆弧封边", () => { let data = { "file": [1, "Board", 8, 2, 100, false, 1, 11, 0, [0, 1, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, -82.13690829474945, 114.75723174517043, 0, 1], 0, 0, true, [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, -82.13690829474945, 104.75723174517043, 18, 1], 0, 3, 200, 180, 18, false, "Polyline", 8, 2, 0, false, 0, 1, 0, [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, -258.46153846153857, -12964.69992987938, 0, 1], 0, 0, true, [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, -258.46153846153857, -12964.69992987938, 0, 1], 0, 2, 51, [288.46153846153857, 12964.69992987938], 0, [288.5704463785399, 12971.92684875419], 0, [288.9140739605454, 12979.410398465114], 0, [290.27885575504905, 12995.063291147017], 0, [292.9586758298214, 13009.891833820202], 0, [296.39553752213186, 13024.889048477557], 0, [300.282315654163, 13036.173202739328], 0, [303.66793686306085, 13044.361681942244], 0, [306.10873354854533, 13049.87315832882], 0, [308.8644717418342, 13054.990957830643], 0, [312.95871134329207, 13061.368523363684], 0, [316.1868617982876, 13065.93517522685], 0, [319.7188580568129, 13070.055638857499], 0, [327.18971912910087, 13076.905272038977], 0, [333.9023216122879, 13081.209838355366], 0, [342.54746600152004, 13084.32775928263], 0, [348.46153846153857, 13084.69992987938], 0, [352.02720538643393, 13084.69992987938], 0, [357.5386817730118, 13083.225464005316], 0, [361.9478628822741, 13081.682250617074], 0, [365.80589635287856, 13079.477660062443], 0, [367.4684750921103, 13078.507534398059], 0, [368.4284772766677, 13077.8389614481], 0, [369.3027649804613, 13077.206388580058], 0, [370.25076713771176, 13076.510386996253], 0, [372.8398519874499, 13074.326962635703], 0, [373.75992035441425, 13073.406894268739], 0, [374.5127035637492, 13072.654111059404], 0, [375.1330526899602, 13072.033761933193], 0, [376.9243979195813, 13070.242416703572], 0, [378.0326620888804, 13069.134152534272], 0, [379.05728367936507, 13067.886484066948], 0, [380.5349692384301, 13066.046347333018], 0, [381.3853354563827, 13064.98687466803], 0, [384.58640519997704, 13060.471908040156], 0, [387.6003992826533, 13055.568544532518], 0, [390.56940837902096, 13050.215331161793], 0, [393.08856761230254, 13044.817132804761], 0, [397.19119836364706, 13034.848459838773], 0, [399.5943477683716, 13027.63130423622], 0, [402.1233363096843, 13018.562546884497], 0, [403.70663926312574, 13011.517825493022], 0, [406.260171603461, 12997.187029301213], 0, [407.2678352967737, 12988.495929946394], 0, [408.0235830667582, 12979.23801976408], 0, [408.4163190634927, 12969.357947900617], 0, [408.46153846153857, 12964.69992987938], 0, [438.46153846153857, 12964.69992987938], 0, [438.46153846153857, 13164.69992987938], 0, [258.46153846153857, 13164.69992987938], 0, [258.46153846153857, 12964.69992987938], 0, true, 0, 3, 0, 0, 0, 0, 0, 9, 1, "右侧板", "", "标准柜", "", "", "", 0, 1, "三合一", 2, 0, "0.6", "0.6", "1.5", "0.6", "", "", "", 51, "三合一", "三合一", "三合一", "三合一", "三合一", "三合一", "三合一", "三合一", "三合一", "三合一", "三合一", "三合一", "三合一", "三合一", "三合一", "三合一", "三合一", "三合一", "三合一", "三合一", "三合一", "三合一", "三合一", "三合一", "三合一", "三合一", "三合一", "三合一", "三合一", "三合一", "三合一", "三合一", "三合一", "三合一", "三合一", "三合一", "三合一", "三合一", "三合一", "三合一", "三合一", "三合一", "三合一", "三合一", "三合一", "三合一", "三合一", "三合一", "三合一", "三合一", "三合一", true, true, 0, 0, 0, 0, 0, 0, 0, 0, true], "basePt": { "x": -82.13690829474945, "y": 114.75723174517043, "z": 0 }, "ucs": [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1] }; let br = LoadBoardsFromFileData(data)[0]; let sealData = GetSealedBoardContour(br); expect(!sealData).toBeTruthy(); }); test("封边错误板件", () => { let data = { "file": [1, "Board", 8, 2, 105, false, 1, 1, 0, [0, 1, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 1579.3258628151088, -574.3939551283838, 1.2729687070241198, 1], 0, 0, true, [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 1579.3258628151088, -604.3939551283838, 1.2729687070241198, 1], 0, 3, 332, 520, 18, false, "Polyline", 8, 2, 0, false, 0, 7, 0, [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, -1117581.920290453, -307708.965755141, 0, 1], 0, 0, true, [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, -1117581.920290453, -307708.965755141, 0, 1], 0, 2, 20, [1118030.85530438, 307708.9658], -0.435046896, [1118000.930043029, 307741.0821], 0, [1118000.340575397, 307769.2703], 0, [1117993.237938485, 307791.7833], 0, [1117976.799157559, 307806.2037], 0, [1117952.328366119, 307813.7577], 0, [1117921.347416826, 307815.8636], 0, [1117885.378162336, 307813.9399], 0, [1117804.5621484, 307803.677], 0, [1117722.055145579, 307794.3162], 0, [1117683.972154982, 307793.5201], 0, [1117650.031975138, 307797.2046], 0, [1117621.756458705, 307806.7882], 0, [1117600.667458342, 307823.6893], 0, [1117588.150725121, 307849.1923], 0, [1117581.920290453, 307880.9658], 0, [1117581.920290453, 308040.965755141], 0, [1118101.920290453, 308040.965755141], 0, [1118101.920290453, 307708.965755141], 0, [1118030.85530438, 307708.965755141], 0, true, 0, 3, 0, 0, 0, 0, 0, 9, 1, "左侧板", "次卧一书桌柜", "书桌", "蕙质兰心", "多层实木", "蕙质兰心", 0, 0, "三合一", 2, 0, "1", "1", "1", "1", "", "", "", 20, "三合一", "三合一", "三合一", "三合一", "三合一", "三合一", "三合一", "三合一", "三合一", "三合一", "三合一", "三合一", "三合一", "三合一", "三合一", "三合一", "三合一", "三合一", "三合一", "三合一", true, true, 0, 0, 0, 0, 0, 0, 0, 0, true], "basePt": { "x": 1579.3258628151088, "y": -574.3939551283838, "z": 1.2729687070241198 }, "ucs": [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1] }; let br = LoadBoardsFromFileData(data)[0]; let { sealedContour: con } = GetSealedBoardContour(br); expect(con.IsClose).toBeTruthy(); expect(con.Area2).toMatchNumberSnapshot(); }); test("封边错误板件2", () => { let data = { "file": [1, "Board", 8, 2, 321, false, 1, 3, 0, [1, 0, 0, 0, 0, 0, 1, 0, 0, -1, 0, 0, 8511.883548299666, -144.54126186296344, 0, 1], 0, 0, true, [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 8536.883548299666, -144.54126186296344, 0, 1], 0, 3, 400.2476503569924, 2300, 25, false, "Polyline", 8, 2, 0, false, 0, 7, 0, [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 406.2643066383516, 310.58952284495217, 0, 1], 0, 0, true, [1, 0, 0, 0, 0, 0, -1, 0, 0, 1, 0, 0, -9115.641761047009, -1933.6524071638414, 0, 1], 0, 2, 16, [-67.06912303135869, 78.84805159804773], 0, [0, 0], 0.2202439982667024, [22.874295099078154, -10.58952284995803], 0, [742.3473665786241, -10.589522844952171], 0.22024399852882928, [765.2216616957576, 5.275069270282984e-9], 0, [832.5014391616369, 79.0957019560442], -0.21993334211278368, [855.3527126344816, 89.6581275100466], 0, [1318.9838435386573, 89.65812751204021], -0.21993334237487636, [1341.8351170292226, 79.09570194591333], 0, [1409.1148944956167, 1.0472831490915269e-9], 0.18676524414106982, [1428.1424129374664, -10.341872493370829], 0, [1893.7356933616484, -10.34187248795979], 0, [1893.7356933616484, -310.58952284495217], 0, [-406.2643066383516, -310.58952284495217], 0, [-406.2643066383516, 89.41047715504783], 0, [-89.92039651338382, 89.41047715504783], -0.21993334237487636, true, 1, 3, 80.00000000199361, 243.63113088517912, 25, false, "Polyline", 8, 2, 0, false, 0, 7, 0, [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 203.6311308697916, 0, 0, 1], 0, 0, true, [1, 0, 0, 0, 0, 0, -1, 0, 0, 1, 0, 0, -10487.258780340819, -2173.90005751884, 0, 1], 0, 2, 4, [-163.63113088158752, 1.9936123862862587e-9], 0, [0, 0], 1.0000000002948966, [7.183189154602587e-9, 80], 0, [-163.63113088158752, 80.00000000199361], 0.9999999997051033, true, 0, 3, 0, 0, 0, 0, 0, [1, 0, 0, 0, 0, 0, 1, 0, 0, -1, 0, 0, 9883.500567593475, -144.54126186296344, 240.24765035499877, 1], 3, 0, 0, 0, 0, 0, 9, 2, "背板", "小孩房", "小孩房床", "25进口暖白无光麻LZ9202", "多层板", "进口暖白无光麻LZ9202", 1, 1, "三合一", 2, 0, "1", "1", "1", "1", "", "", "", 16, "三合一", "三合一", "三合一", "三合一", "三合一", "三合一", "三合一", "三合一", "三合一", "三合一", "三合一", "三合一", "三合一", "三合一", "三合一", "三合一", false, true, 0, 0, 0, 0, 0, 0, 0, 0, true], "basePt": { "x": 8511.883548299666, "y": -169.54126186296344, "z": 0 }, "ucs": [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1] }; let br = LoadBoardsFromFileData(data)[0]; let { sealedContour: con } = GetSealedBoardContour(br); expect(con.IsClose).toBeTruthy(); expect(con.Area2).toMatchNumberSnapshot(); }); test("封边错误板件3", () => { let data = { "file": [1, "Board", 8, 2, 100, false, 1, 3, 0, [1, 0, 0, 0, 0, 0, 1, 0, 0, -1, 0, 0, 668.6547958775191, 360.34483792621177, 0, 1], 0, 0, true, [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 668.6547958775191, 360.34483792621177, 0, 1], 0, 3, 430.00000000003945, 843.0000701800069, 18, true, "Polyline", 8, 2, 0, false, 0, 7, 0, [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 429.99984841118567, 0, 1], 0, 0, true, [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1], 0, 2, 6, [843, -429.99984841118567], 0, [843.0000701800067, 0.00015158885375399223], 0, [843.0000701800069, 0.00015158885375399223], 0, [843.0000000000002, 0.00015158881433308125], 0, [0, 0], 0, [0, -429.99984841118567], 0, true, 0, 3, 0, 0, 0, 0, 0, 9, 2, "背板", "", "父母房-衣柜", "兔宝宝洛萨暮影(杉木芯)", "兔宝宝洛萨暮影(杉木芯)", "兔宝宝洛萨暮影(杉木芯)", 0, 1, "三合一", 2, 5, 1, 1, 1, 1, 1, "1", "1", "1", "1", "", "", "", 6, "三合一", "三合一", "三合一", "三合一", "三合一", "三合一", false, true, 0, 0, 0, 0, 0, 0, 0, 0, true], "basePt": { "x": 668.6547958775191, "y": 342.34483792621177, "z": 0 }, "ucs": [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1] }; let br = LoadBoardsFromFileData(data)[0]; let { sealedContour: con } = GetSealedBoardContour(br); expect(con.IsClose).toBeTruthy(); expect(con.Area2).toMatchNumberSnapshot(); }); test("封边错误板件4", () => { let data = { "file": [1, "Board", 8, 2, 104, false, 1, 4, 0, [1, 0, 0, 0, 0, 0, 1, 0, 0, -1, 0, 0, 1791.2350208071002, 332.28157054709305, 0, 1], 0, 0, true, [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 1791.221632944289, 332.28157054709305, -1220.5383064692724, 1], 0, 3, 608.4984929746847, 54, 18, false, "Polyline", 8, 2, 0, false, 0, 7, 0, [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1], 0, 0, true, [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1], 0, 2, 5, [0, 0], 0, [53.986612137188786, 0], 0, [54, 0.8772342627713384], 0, [53.99999999999998, 578.4441943321467], 0, [0, 608.4984929746847], 0, true, 0, 3, 0, 0, 0, 0, 0, 9, 2, "左收口条", "主卧", "下柜左收口", "多层板", "多层板", "无语枫木", 0, 0, "三合一", 2, 0, "1", "1", "1", "1", "", "", "", 5, "三合一", "三合一", "三合一", "三合一", "三合一", true, true, 0, 0, 0, 0, 0, 0, 0, 0, true], "basePt": { "x": 1791.2350208071002, "y": 314.28157054709305, "z": 0 }, "ucs": [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1] }; let br = LoadBoardsFromFileData(data)[0]; let { sealedContour: con } = GetSealedBoardContour(br); expect(con.IsClose).toBeTruthy(); expect(con.Area2).toMatchNumberSnapshot(); }); test("切割残留一个封边厚度的凸角的板件封边", () => { let data = { "file": [2, "Board", 8, 2, 100, false, 1, 4, 0, [0, -1.8369701987210297e-16, -1, 0, 0, 1, -1.8369701987210297e-16, 0, 1, 0, 0, 0, 8353.923342626775, 3430.066255566897, 54.00000000000023, 1], 0, 0, true, [1, 0, 0, 0, 0, -1.8369701987210297e-16, -1, 0, 0, 1, -1.8369701987210297e-16, 0, 8353.923342626775, 3430.066255566897, 54.00000000000023, 1], 0, 3, 605, 54, 18, false, "Polyline", 8, 2, 0, false, 0, 7, 0, [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 605, 0, 1], 0, 0, true, [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1.3642420526593924e-12, 0, 1], 0, 2, 6, [1.999999999999659, -605], 0, [0, -605], 0, [0, 0], 0, [54, 0], 0, [54, -587], 0, [1.999999999999659, -587], 0, true, 0, 3, 0, 0, 0, 0, 0, 9, 1, "右收口条", "1", "主卧飘窗柜", "", "流金岁月零度实木多层板", "", 0, 0, "不排", 2, 0, "1", "1", "1", "1", "", "", "", 6, "不排", "不排", "不排", "不排", "不排", "不排", true, true, 0, 0, 0, 0, 0, 0, 0, 0, true, "Board", 8, 2, 119, false, 1, 4, 0, [0, -1.8369701987210297e-16, -1, 0, 0, 1, -1.8369701987210297e-16, 0, 1, 0, 0, 0, 8256.448416684603, 3420.712904620689, 54.000000000000114, 1], 0, 0, true, [1, 0, 0, 0, 0, -1.8369701987210297e-16, -1, 0, 0, 1, -1.8369701987210297e-16, 0, 8256.448416684603, 3420.712904620689, 54.000000000000114, 1], 0, 3, 605, 54, 18, false, "Polyline", 8, 2, 0, false, 0, 7, 0, [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 605, 0, 1], 0, 0, true, [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1.3642420526593924e-12, 0, 1], 0, 2, 6, [1.999999999999659, -605], 0, [1.999999999999659, -587], 0, [54, -587], 0, [54, 0], 0, [0, 0], 0, [0, -605], 0, true, 0, 3, 0, 0, 0, 0, 0, 9, 1, "右收口条", "1", "主卧飘窗柜", "", "流金岁月零度实木多层板", "", 0, 0, "不排", 2, 0, "1", "1", "1", "1", "", "", "", 6, "不排", "不排", "不排", "不排", "不排", "不排", true, true, 0, 0, 0, 0, 0, 0, 0, 0, true], "basePt": { "x": 8256.448416684603, "y": 3420.712904620689, "z": 0 }, "ucs": [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1] }; let brs = LoadBoardsFromFileData(data); let { sealedContour: con } = GetSealedBoardContour(brs[0]); expect(con.IsClose).toBeTruthy(); expect(con.Area2).toMatchNumberSnapshot(); expect(con.Length).toMatchNumberSnapshot(); con = GetSealedBoardContour(brs[1]).sealedContour; expect(con.IsClose).toBeTruthy(); expect(con.Area2).toMatchNumberSnapshot(); expect(con.Length).toMatchNumberSnapshot(); }); test("切割残留2个封边厚度的凸角的板件封边", () => { let data = { "file": [1, "Board", 8, 2, 194, false, 1, 3, 0, [0, -1.8369701987210297e-16, -1, 0, 0, 1, -1.8369701987210297e-16, 0, 1, 0, 0, 0, -1942.5790708477725, -1015.708335469244, 53.500000000000114, 1], 0, 0, true, [1, 0, 0, 0, 0, -1.8369701987210297e-16, -1, 0, 0, 1, -1.8369701987210297e-16, 0, -1942.5790708477725, -1015.708335469244, 54.000000000000114, 1], 0, 3, 623, 53.5, 18, false, "Polyline", 8, 2, 0, false, 0, 7, 0, [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1], 0, 0, true, [0, 0, 1, 0, -1.8369701987210297e-16, 1, 0, 0, -1, -1.8369701987210297e-16, 0, 0, -653.1428571428573, 743.924437164159, 0, 1], 0, 2, 8, [53.5, 605], 0, [53.49999999999999, 18], 0, [1.4999999999996518, 18], 0, [1.499999999999659, 0], 0, [0, 0], 0, [0, 623], 0, [1.5, 623], 0, [1.5, 605], 0, true, 0, 3, 0, 0, 0, 0, 0, 9, 1, "右收口条", "1", "主卧飘窗柜", "", "流金岁月零度实木多层板", "", 0, 0, "不排", 2, 0, "1", "1", "1", "1", "", "", "", 8, "不排", "不排", "不排", "不排", "不排", "不排", "不排", "不排", true, true, 0, 0, 0, 0, 0, 0, 0, 0, true], "basePt": { "x": -1942.5790708477725, "y": -1015.708335469244, "z": 0 }, "ucs": [0, -1.8369701987210297e-16, -1, 0, 0, 1, -1.8369701987210297e-16, 0, 1, 0, 0, 0, 0, 0, 0, 1] }; let brs = LoadBoardsFromFileData(data); for (let b of brs) { let { sealedContour: con } = GetSealedBoardContour(b); expect(con.IsClose).toBeTruthy(); expect(con.Area2).toMatchNumberSnapshot(); expect(con.Length).toMatchNumberSnapshot(); } }); test("切割残留一个小于封边厚度的凸角的板件封边", () => { let data = { "file": [2, "Board", 8, 2, 194, false, 1, 3, 0, [0, -1.8369701987210297e-16, -1, 0, 0, 1, -1.8369701987210297e-16, 0, 1, 0, 0, 0, -1942.5790708477725, -1015.708335469244, 53.500000000000114, 1], 0, 0, true, [1, 0, 0, 0, 0, -1.8369701987210297e-16, -1, 0, 0, 1, -1.8369701987210297e-16, 0, -1942.5790708477725, -1015.708335469244, 54.000000000000114, 1], 0, 3, 605, 53.5, 18, false, "Polyline", 8, 2, 0, false, 0, 7, 0, [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1], 0, 0, true, [0, 0, 1, 0, -1.8369701987210297e-16, 1, 0, 0, -1, -1.8369701987210297e-16, 0, 0, -298.0228087167077, 1161.398383895394, 0, 1], 0, 2, 6, [53.5, 605], 0, [53.49999999999999, 18], 0, [1.4999999999996518, 18], 0, [1.499999999999659, 0], 0, [0, 0], 0, [0, 605], 0, true, 0, 3, 0, 0, 0, 0, 0, 9, 1, "右收口条", "1", "主卧飘窗柜", "", "流金岁月零度实木多层板", "", 0, 0, "不排", 2, 0, "1", "1", "1", "1", "", "", "", 6, "不排", "不排", "不排", "不排", "不排", "不排", true, true, 0, 0, 0, 0, 0, 0, 0, 0, true, "Board", 8, 2, 187, false, 1, 3, 0, [0, -1.8369701987210297e-16, -1, 0, 0, 1, -1.8369701987210297e-16, 0, 1, 0, 0, 0, -2346.852039258465, -1029.4798626194247, 53.50000000000023, 1], 0, 0, true, [1, 0, 0, 0, 0, -1.8369701987210297e-16, -1, 0, 0, 1, -1.8369701987210297e-16, 0, -2346.852039258465, -1029.4798626194247, 54.00000000000023, 1], 0, 3, 605, 53.5, 18, false, "Polyline", 8, 2, 0, false, 0, 7, 0, [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, -0.5, 605, 0, 1], 0, 0, true, [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, -0.5, 1.3642420526593924e-12, 0, 1], 0, 2, 6, [1.999999999999659, -605], 0, [0.5, -605], 0, [0.5, 0], 0, [54, 0], 0, [54, -587], 0, [1.999999999999659, -587], 0, true, 0, 3, 0, 0, 0, 0, 0, 9, 1, "右收口条", "1", "主卧飘窗柜", "", "流金岁月零度实木多层板", "", 0, 0, "不排", 2, 0, "1", "1", "1", "1", "", "", "", 6, "不排", "不排", "不排", "不排", "不排", "不排", true, true, 0, 0, 0, 0, 0, 0, 0, 0, true], "basePt": { "x": -2346.852039258465, "y": -1029.4798626194247, "z": 0 }, "ucs": [0, -1.8369701987210297e-16, -1, 0, 0, 1, -1.8369701987210297e-16, 0, 1, 0, 0, 0, 0, 0, 0, 1] }; let brs = LoadBoardsFromFileData(data); for (let b of brs) { let { sealedContour: con } = GetSealedBoardContour(b); expect(con.IsClose).toBeTruthy(); expect(con.Area2).toMatchNumberSnapshot(); expect(con.Length).toMatchNumberSnapshot(); } }); test("获取封边错误案例", () => { let data = { "file": [3, "Board", 8, 2, 100, false, 1, 2, 0, [0, 1, 0, 0, -1, 0, 0, 0, 0, 0, 1, 0, 158.18450775789097, -88.04258177080192, 0, 1], 0, 0, true, [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, -20.81549224210903, 150.95741822919808, 0, 1], 0, 3, 426, 520, 18, false, "Polyline", 8, 2, 0, false, 0, 7, 0, [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 426, 0, 1], 0, 0, true, [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1], 0, 2, 8, [221, -426], 0, [221, -247], 0, [230, -247], 0, [230, -246], 0, [520, -162.60897861073317], 0, [520, 0], 0, [0, 0], 0, [0, -426], 0, true, 0, 3, 0, 0, 0, 0, 0, 9, 0, "底板", "厨房", "地柜3", "暖白", "18多层板", "暖白", 0, 1, "三合一", 2, 0, "1", "1", "1", "1", "", "", "", 8, "三合一", "三合一", "三合一", "三合一", "三合一", "三合一", "三合一", "三合一", true, true, 0, 0, 0, 0, 0, 0, 0, 0, true, "Board", 8, 2, 116, false, 1, 2, 0, [0, 1, 0, 0, -1, 0, 0, 0, 0, 0, 1, 0, -582.4375243070995, -82.23281127955624, 0, 1], 0, 0, true, [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, -761.4375243070995, 156.76718872044376, 0, 1], 0, 3, 426, 520, 18, false, "Polyline", 8, 2, 0, false, 0, 7, 0, [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 426, 0, 1], 0, 0, true, [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1], 0, 2, 8, [221, -426], 0, [221, -247], 0, [230, -247], 0, [230, -246], 0, [520, -246.00000000000003], 0, [520, 0], 0, [0, 0], 0, [0, -426], 0, true, 0, 3, 0, 0, 0, 0, 0, 9, 0, "底板", "厨房", "地柜3", "暖白", "18多层板", "暖白", 0, 1, "三合一", 2, 8, 2, 2, 2, 2, 2, 2, 2, 2, "1", "1", "1", "1", "", "", "", 8, "三合一", "三合一", "三合一", "三合一", "三合一", "三合一", "三合一", "三合一", true, true, 0, 0, 0, 0, 0, 0, 0, 0, true, "Board", 8, 2, 125, false, 1, 2, 0, [0, 1, 0, 0, -1, 0, 0, 0, 0, 0, 1, 0, -2044.8775109710668, -161.86694795795037, 0, 1], 0, 0, true, [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, -2223.877510971067, 77.13305204204963, 0, 1], 0, 3, 426, 520, 18, false, "Polyline", 8, 2, 0, false, 0, 7, 0, [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 426, 0, 1], 0, 0, true, [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, -4.547473508864641e-13, 0, 1], 0, 2, 8, [221, -426], 0, [0, -426], 0, [0, 0], 0, [520, 0], 0, [520, -246.00000000000003], 0, [230, -246], 0, [230, -247], 0, [221, -247], 0, true, 0, 3, 0, 0, 0, 0, 0, 9, 0, "底板", "厨房", "地柜3", "暖白", "18多层板", "暖白", 0, 1, "三合一", 2, 8, 1, 1, 1, 1, 1, 1, 1, 1, "1", "1", "1", "1", "", "", "", 8, "三合一", "三合一", "三合一", "三合一", "三合一", "三合一", "三合一", "三合一", true, true, 0, 0, 0, 0, 0, 0, 0, 0, true], "basePt": { "x": -2470.877510971067, "y": -161.86694795795037, "z": 0 }, "ucs": [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1] }; let brs = LoadBoardsFromFileData(data); for (let b of brs) { let { sealedContour: con } = GetSealedBoardContour(b); expect(con.IsClose).toBeTruthy(); expect(con.Area2).toMatchNumberSnapshot(); expect(con.Length).toMatchNumberSnapshot(); } }); test('封边数据个数不匹配', () => { let data = { "file": [2, "Board", 8, 2, 101, false, 1, 2, 0, [0, 1, 0, 0, -1, 0, 0, 0, 0, 0, 1, 0, 1692.3844709212972, 43.15983892617464, 0, 1], 0, 0, true, [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 1832.3844709212972, 26.159838926174643, 0, 1], 0, 3, 718, 388, 16, false, "Polyline", 8, 2, 0, false, 0, 7, 0, [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 718, 0, 1], 0, 0, true, [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1], 0, 2, 10, [388, -718], 0, [388, -409], 0, [188, -409], -0.41421356237309503, [138, -359], 0, [138, -359], -0.41421356237309515, [188.00000000000003, -309], 0, [388, -309.0000000000001], 0, [388, 0], 0, [0, 0], 0, [0, -718], 0, true, 0, 3, 0, 0, 0, 0, 0, 10, 0, "层板2", "B20813", "主柜", "萨米色", "多层板", "萨米色", 0, 1, "三合一", 2, 6, 1, 0, 1, 0, 1, 0, "0", "0", "1", "1", "", "", "", 10, "三合一", "三合一", "三合一", "三合一", "三合一", "三合一", "三合一", "三合一", "三合一", "三合一", true, true, 1, "1", "黄海玉", 0, 0, 0, 0, 0, 0, 0, true, 0, 0, "Board", 8, 2, 102, false, 1, 2, 0, [0, 1, 0, 0, -1, 0, 0, 0, 0, 0, 1, 0, 762.0444563758392, 43.15983892617464, 0, 1], 0, 0, true, [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 902.0444563758392, 26.159838926174643, 0, 1], 0, 3, 718, 388, 16, false, "Polyline", 8, 2, 0, false, 0, 7, 0, [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 718, 0, 1], 0, 0, true, [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1], 0, 2, 10, [388, -718], 0, [388, -409], 0, [188, -409], -0.41421356237309503, [138, -359], 0, [138, -359], -0.41421356237309515, [188.00000000000003, -309], 0, [388, -309.0000000000001], 0, [388, 0], 0, [0, 0], 0, [0, -718], 0, true, 0, 3, 0, 0, 0, 0, 0, 10, 0, "层板1", "B20813", "主柜", "萨米色", "多层板", "萨米色", 0, 1, "三合一", 2, 6, 1, 1, 1, 0, 1, 0, "0", "0", "1", "1", "", "", "", 10, "三合一", "三合一", "三合一", "三合一", "三合一", "三合一", "三合一", "三合一", "三合一", "三合一", true, true, 1, "1", "黄海玉", 0, 0, 0, 0, 0, 0, 0, true, 0, 0], "basePt": { "x": 44.04445637583922, "y": 43.15983892617464, "z": 0 }, "ucs": [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1] }; let brs = LoadBoardsFromFileData(data); for (let br of brs) { let sealData = GetSealedBoardContour(br); let { brContour: orgContour } = sealData; let orgPtsBul = ConverToPtsBul(orgContour); orgPtsBul.pts.pop(); orgPtsBul.buls.pop(); let seals = Production.ParseSealData(sealData); expect(orgPtsBul.pts.length === seals.length).toBeTruthy(); } }); test('封边数据个数不匹配2', () => { let data = { "file": [1, "Board", 8, 2, 100, false, 1, 8, 0, [0, 1, 0, 0, -1, 0, 0, 0, 0, 0, 1, 0, 847.9731543624166, 87.24832214765104, 0, 1], 0, 0, true, [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 847.9731543624166, 127.24832214765104, 0, 1], 0, 3, 740, 420, 18, false, "Polyline", 8, 2, 0, false, 0, 7, 0, [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 40, 0, 0, 1], 0, 0, true, [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 40, 0, 0, 1], 0, 2, 6, [-20, 0], 0, [380, 0], 0, [380, 740], 0, [-20, 740], 0.41421356237309503, [-40, 720], 0, [-40, 20.000000000000004], 0.41421356237309503, true, 2, 3, 9, 716, 6, true, "Polyline", 8, 2, 0, false, 0, 7, 0, [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1], 0, 0, true, [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1], 0, 2, 4, [0, 0], 0, [716, 0], 0, [716, 9], 0, [0, 9], 0, true, 0, 3, 6, 1, 1, 0, 0, [-1, 0, 0, 0, 0, -1, 0, 0, 0, 0, 1, 0, 835.9731543624166, 459.24832214765104, 0, 1], 3, 9, 716, 6, true, "Polyline", 8, 2, 0, false, 0, 7, 0, [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1], 0, 0, true, [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1], 0, 2, 4, [0, 0], 0, [716, 0], 0, [716, 9], 0, [0, 9], 0, true, 0, 3, 6, 1, 1, 0, 0, [-1, 0, 0, 0, 0, -1, 0, 0, 0, 0, 1, 0, 835.9731543624166, 489.24832214765104, 0, 1], 3, 0, 0, 0, 0, 0, 10, 0, "顶板", "大厅", "电视柜", "深咖布纹18厚", "多层板", "深咖布纹", 2, 1, "三合一", 2, 0, "1", "1", "1", "1", "", "", "", 6, "三合一", "三合一", "三合一", "三合一", "三合一", "三合一", true, true, 0, 0, 0, 0, 0, 0, 0, 0, true, 0, 0], "basePt": { "x": 107.97315436241661, "y": 87.24832214765104, "z": 0 }, "ucs": [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1] }; let brs = LoadBoardsFromFileData(data); for (let br of brs) { let sealData = GetSealedBoardContour(br); let { brContour: orgContour } = sealData; let orgPtsBul = ConverToPtsBul(orgContour); orgPtsBul.pts.pop(); orgPtsBul.buls.pop(); let seals = Production.ParseSealData(sealData); expect(orgPtsBul.pts.length === seals.length).toBeTruthy(); } }); test('封边编辑错误', () => { let d = { "file": [1, "Board", 8, 2, 100, false, 1, 2, 0, [6.123233995736766e-17, 0, 1, 0, -1, 0, 6.123233995736766e-17, 0, 0, -1, 0, 0, 1322.7570621468913, 18, -149.71751412407139, 1], 0, 0, true, [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, -659.2429378531087, 18, -1044.7176374870523, 1], 0, 3, 1964, 39.999976675015674, 18, true, "Polyline", 8, 2, 0, false, 0, 7, 0, [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 39.999976675014835, 803.6000000000058, 0, 1], 0, 0, true, [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 4.547473508864641e-13, 803.6000000000058, 0, 1], 0, 2, 6, [-0.00010003799802404929, 1160.3999999999942], 0, [8.384406944863992e-13, 1160.3999999999942], 0, [-0.00010003799801694413, 1160.3999999999942], 0, [-39.999976675013876, 1160.3999999999937], 0, [-39.999976675014835, -803.6000000000058], 0, [-4.547473508864641e-13, -803.6000000000058], 0, true, 0, 3, 0, 0, 0, 0, 0, 10, 2, "收口", "鞋柜", " 柜1", "兔宝宝烟熏橡木(灰)生态板", "生态板", "烟熏橡木(灰)", 0, 0, "不排", 2, 0, "1", "1", "1", "1", "", "", "", 6, "不排", "不排", "不排", "不排", "不排", "不排", false, false, 0, 0, 0, 0, 0, 0, 0, 0, true, 0, 0], "basePt": { "x": -641.2429378531087, "y": 0, "z": -149.71751412407139 }, "ucs": [1, 0, 0, 0, 0, 0, 1, 0, 0, -1, 0, 0, 0, 0, 0, 1] }; let brs = LoadBoardsFromFileData(d); for (let br of brs) { let orgContour = GetSealedBoardContour(br).brContour; expect(orgContour.Length).toMatchNumberSnapshot(); } }); test('镜像判断不足导致点表凸度错误', () => { let d = { "file": [4, "Polyline", 10, 2, 100, 0, 1, 7, 71, [-0.9999999999656061, 1.2246467991473532e-16, 0, 0, 1.2246467991052327e-16, 1, 1.836970198657849e-16, 0, -2.2496396739154126e-32, -0.000008293838842595351, 0.9999999999656061, 0, 200.34819277044215, 14.855421686746922, 0, 1], 0, 0, 1, [-0.9999999999656061, 1.2246467991473532e-16, 0, 0, -1.2246467991052327e-16, -1, -1.836970198657849e-16, 0, -2.2496396739154126e-32, -0.000008293838842595351, 0.9999999999656061, 0, 200.34819277044215, 14.855421686746922, 0, 1], 0, 0, 1, 2, 7, [-5.900000002308047, -3], 0, [-43.90000000230799, -3], -0.9999999997563863, [-43.90000000030756, 2.9999999999997726], 0, [-5.900000001151568, 3], -1.0000000002949003, [-5.900000002308047, -3], 0, [-5.900000002307912, -4.653657836759924e-15], 0, [-43.90000000230776, 0], 0, false, "Polyline", 10, 2, 101, 0, 1, 7, 71, [0.9999999999656061, 1.2246467991473532e-16, -1.2246467991052327e-16, 0, 1.2246467991052325e-16, -1, -1.8369701986578493e-16, 0, 1.224646799105233e-16, -0.000008293838842595351, 0.9999999999656061, 0, 322.34387027729207, 14.855421686746922, -7.43884581007662e-15, 1], 0, 0, 1, [0.9999999999656061, 1.2246467991473532e-16, -1.2246467991052327e-16, 0, 1.2246467991052325e-16, -1, -1.8369701986578493e-16, 0, 1.224646799105233e-16, -0.000008293838842595351, 0.9999999999656061, 0, 322.34387027729207, 14.855421686746922, -7.43884581007662e-15, 1], 0, 0, 1, 2, 7, [-43.90000000230782, -1.7763568394002505e-15], 0, [-5.900000002307991, 3.552713678800501e-15], 0, [-5.900000002308104, 2.9999999999999982], -1.0000000002949003, [-5.900000001151625, -3.0000000000000018], 0, [-43.900000000307614, -2.999999999999771], -0.9999999997563863, [-43.90000000230805, 2.9999999999999982], 0, [-5.900000002308104, 2.9999999999999982], 0, false, "Polyline", 10, 2, 102, 0, 1, 7, 71, [0.9999999999656061, 1.2246467991473532e-16, -1.2246467991052327e-16, 0, -1.224646799105233e-16, 1, -1.8369701986578488e-16, 0, -1.2246467991052325e-16, -0.000008293838842595351, -0.9999999999656061, 0, 487.598092036143, 14.855421686746922, -1.9424999332486008, 1], 0, 0, 1, [0.9999999999656061, 1.2246467991473532e-16, -1.2246467991052327e-16, 0, 1.224646799105233e-16, -1, 1.8369701986578488e-16, 0, -1.2246467991052325e-16, -0.000008293838842595351, -0.9999999999656061, 0, 487.598092036143, 14.855421686746922, -1.9424999332486008, 1], 0, 0, 1, 2, 7, [-5.900000002308047, -3], 0, [-43.90000000230799, -3], -0.9999999997563863, [-43.90000000030756, 2.9999999999997726], 0, [-5.900000001151568, 3], -1.0000000002949003, [-5.900000002308047, -3], 0, [-5.900000002307912, -4.653657836759924e-15], 0, [-43.90000000230776, 0], 0, false, "Polyline", 10, 2, 103, 0, 1, 7, 71, [-0.9999999999656061, 1.2246467991473532e-16, 2.4492935982104654e-16, 0, -1.2246467991052322e-16, -1, 1.8369701986578496e-16, 0, -2.4492935982104654e-16, -0.000008293838842595351, -0.9999999999656061, 0, 365.60241452929307, 14.855421686746922, -1.9424999332485784, 1], 0, 0, 1, [-0.9999999999656061, 1.2246467991473532e-16, 2.4492935982104654e-16, 0, -1.2246467991052322e-16, -1, 1.8369701986578496e-16, 0, -2.4492935982104654e-16, -0.000008293838842595351, -0.9999999999656061, 0, 365.60241452929307, 14.855421686746922, -1.9424999332485784, 1], 0, 0, 1, 2, 7, [-43.90000000230782, -1.7763568394002505e-15], 0, [-5.900000002307991, 3.552713678800501e-15], 0, [-5.900000002308104, 2.9999999999999982], -1.0000000002949003, [-5.900000001151625, -3.0000000000000018], 0, [-43.900000000307614, -2.999999999999771], -0.9999999997563863, [-43.90000000230805, 2.9999999999999982], 0, [-5.900000002308104, 2.9999999999999982], 0, false], "basePt": { "x": 203.24819277108432, "y": 11.855421686746917, "z": -1.9425248147651277 }, "ucs": [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1] }; let pls = LoadEntityFromFileData(d) as Polyline[]; for (let pl of pls) { let ptsbuls = ConverToPtsBul(pl, false); expect(ptsbuls).toMatchSnapshot(); } }); test('镜像判断不足导致点表凸度错误2', () => { let d = { "file": [2, "Polyline", 10, 2, 334, 0, 1, 1, 71, [-0.9999999999656061, 1.2246467991473532e-16, 0, 0, 1.2246467991052327e-16, 1, -1.836970198657849e-16, 0, -2.2496396739154126e-32, 0.000008293838842227955, -0.9999999999656061, 0, 14.099999999652617, 1801.9929776066522, 0, 1], 0, 0, 1, [-0.9999999999656061, 1.2246467991473532e-16, 0, 0, -1.2246467991052327e-16, -1, 1.836970198657849e-16, 0, -2.2496396739154126e-32, 0.000008293838842227955, -0.9999999999656061, 0, 14.099999999652617, 1801.9929776066522, 0, 1], 0, 0, 1, 2, 7, [-5.900000002308138, -2.9999999999995453], 1.0000000002948952, [-5.900000001151641, 3.0000000000004547], 0, [-43.90000000030762, 3.0000000000004547], 0.9999999997563894, [-43.90000000230811, -2.9999999999995453], 0, [-5.900000002308138, -2.9999999999995453], 0, [-5.90000000230814, 9.048410439361683e-13], 0, [-43.9000000023081, 9.094947017729282e-13], 0, false, "Polyline", 10, 2, 335, 0, 1, 1, 71, [-0.9999999999656061, 1.2246467991473532e-16, 0, 0, 1.2246467991052327e-16, 1, -1.836970198657849e-16, 0, -2.2496396739154126e-32, 0.000008293838842227955, -0.9999999999656061, 0, 2768.980476434901, 333.88495492131983, 0, 1], 0, 0, 1, [-0.9999999999656061, 1.2246467991473532e-16, 0, 0, -1.2246467991052327e-16, -1, 1.836970198657849e-16, 0, -2.2496396739154126e-32, 0.000008293838842227955, -0.9999999999656061, 0, 2768.980476434901, 333.88495492131983, 0, 1], 0, 0, 1, 2, 7, [2737.030476527089, 1478.0672999923568], 0.9999999993630507, [2737.0304765289998, 1484.0672999999997], 0, [2724.930476529, 1484.0672999999997], 0.9999999993630501, [2724.930476529, 1478.0672999999997], 0, [2737.030476527089, 1478.0672999923568], 0, [2737.0304765289998, 1481.0672999999997], 0, [2724.930476529, 1481.0672999999997], 0, false], "basePt": { "x": 17.000000000294897, "y": 1798.9929776066524, "z": -0.00002488151683044617 }, "ucs": [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1] }; let pls = LoadEntityFromFileData(d) as Polyline[]; for (let pl of pls) { let ptsbuls = ConverToPtsBul(pl, false); expect(ptsbuls).toMatchSnapshot(); } }); //测试代码 /** let enRes = await app.Editor.GetEntity({ Filter: { filterTypes: [Polyline] } }); if (enRes.Status !== PromptStatus.OK) return; let pl = enRes.Entity as Polyline; let ptsbuls = ConverToPtsBul(pl, false); let newpl = new Polyline( ptsbuls.pts.map((p, i) => { return { pt: p, bul: ptsbuls.buls[i] }; }) ); TestDraw(newpl, 1); */