import { Board } from "../../src/DatabaseServices/Entity/Board"; import { Curve } from "../../src/DatabaseServices/Entity/Curve"; import { Polyline } from "../../src/DatabaseServices/Entity/Polyline"; import { CalcEdgeSealing, ParagraphCulist } from "../../src/GraphicsSystem/CalcEdgeSealing"; import { LoadBoardsFromFileData } from "../Utils/LoadEntity.util"; function testBrSealing(br: Board, sealingSize: number[]) { let originCurve = br.ContourCurve; let dir = Math.sign(originCurve.Area2) * -1; let calcCus = originCurve.Explode() as Curve[]; ParagraphCulist(calcCus); let offsetCus: Curve[] = []; for (let i = 0; i < calcCus.length; i++) { let cu = calcCus[i]; let cs = cu.GetOffsetCurves(sealingSize[i] * dir); for (let c of cs) { if (c instanceof Polyline) offsetCus.push(...c.Explode()); else offsetCus.push(c); } } CalcEdgeSealing(offsetCus); let pl = new Polyline(); for (let cu of offsetCus) { let res = pl.Join(cu); expect(res).toBeTruthy(); } pl.ApplyMatrix(br.OCS); expect(pl.IsClose).toBeTruthy(); expect(pl.Area).toMatchSnapshot(); } 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, 1, 1, 1]; testBrSealing(br, sealingSize); sealingSize = [3, 5, 3, 3, 3, 3]; testBrSealing(br, sealingSize); sealingSize = [10, 5, 5, 5, 10, 5]; 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); });