From af78e25b9f4cde0408764e3ad4e3059bd98e67cf Mon Sep 17 00:00:00 2001 From: ChenX Date: Sat, 25 Feb 2023 15:42:38 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BC=98=E5=8C=96:=E6=88=B7=E5=9E=8B=E4=B8=AD?= =?UTF-8?q?=E4=B8=8D=E5=90=8C=E5=8E=9A=E5=BA=A6=E7=9A=84=E7=9B=B4=E7=BA=BF?= =?UTF-8?q?=E5=A2=99=E4=B8=8E=E5=9C=86=E5=BC=A7=E5=A2=99=E5=BB=B6=E4=BC=B8?= =?UTF-8?q?=E8=BF=9E=E6=8E=A5=E6=95=88=E6=9E=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- __test__/Room/RoomParse.test.ts | 10 + .../Room/__snapshots__/RoomParse.test.ts.snap | 192 +++++++++++++++--- .../Room/ParseService/RoomWallParse.ts | 4 +- 3 files changed, 176 insertions(+), 30 deletions(-) diff --git a/__test__/Room/RoomParse.test.ts b/__test__/Room/RoomParse.test.ts index 1ae78d71c..e770f28ee 100644 --- a/__test__/Room/RoomParse.test.ts +++ b/__test__/Room/RoomParse.test.ts @@ -301,3 +301,13 @@ test('精度导致0.02线丢失导致区域丢失', () => TestWallCurveParse(walls); }); + +test('圆弧和直线更好的连接', () => +{ + let d = + { "file": [6, "RoomWallArc", 3, 10, 2, 120, 0, 1, 7, 102, [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 1998.616862023093, 2332.495323420249, 0, 1], 0, 0, 1, [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 1998.616862023093, 2332.495323420249, 0, 1], 0, 0, 1, 240, 0, 2700, 2, 816.5366261842003, 3.686088264078142, 5.499101651185726, true, "RoomWallLine", 1, 3, 10, 2, 131, 0, 1, 7, 102, [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, -849.9399805162709, 2490.400450694376, 0, 1], 0, 0, 1, [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, -849.9399805162709, 2490.400450694376, 0, 1], 0, 0, 1, 120, 0, 2700, 4062.232098765433, -1342.7555592592594, 0, 4062.232098765433, -564.4939173809105, 0, "RoomWallArc", 3, 10, 2, 132, 0, 1, 7, 102, [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 3610.4708600967724, 1925.9065333134654, 0, 1], 0, 0, 1, [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, -6664.2404378495075, 4504.754579348227, 0, 1], 0, 0, 1, 79.4, 0, 2700, 2, 398.1787418476097, 3.141592653589793, 0, true, "RoomWallLine", 1, 3, 10, 2, 133, 0, 1, 7, 102, [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 3121.85890514528, 904.3843908214958, 0, 1], 0, 0, 1, [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 3121.85890514528, 904.3843908214958, 0, 1], 0, 0, 1, 120, 0, 2700, 1163.98988034188, -740.0590769230768, 0, 1163.98988034188, 1293.0338461538458, 0, "RoomWallArc", 3, 10, 2, 134, 0, 1, 7, 102, [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 4894.31231713923, 1872.7421567357342, 0, 1], 0, 0, 1, [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 4894.31231713923, 1872.7421567357342, 0, 1], 0, 0, 1, 83.19999999999999, 0, 2700, 2, 689.6683452430339, 2.651427814942449, 0.25057679314182574, true, "RoomWallLine", 1, 3, 10, 2, 119, 0, 1, 7, 102, [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 136.17080574596844, 616.5063588457942, 0, 1], 0, 0, 1, [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 136.17080574596844, 616.5063588457942, 0, 1], 0, 0, 1, 120, 0, 2700, 1163.98988034188, -740.0590769230768, 0, 1163.98988034188, 1293.0338461538458, 0], "basePt": { "x": 1062.2654215934056, "y": -123.55271807728252, "z": 0 }, "ucs": [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1] }; + + let walls = LoadEntityFromFileData(d); + + TestWallCurveParse(walls); +}); diff --git a/__test__/Room/__snapshots__/RoomParse.test.ts.snap b/__test__/Room/__snapshots__/RoomParse.test.ts.snap index 53a4351f0..50d36372d 100644 --- a/__test__/Room/__snapshots__/RoomParse.test.ts.snap +++ b/__test__/Room/__snapshots__/RoomParse.test.ts.snap @@ -614,6 +614,158 @@ Array [ ] `; +exports[`圆弧和直线更好的连接 1`] = ` +Array [ + -549.404296825361, + 758.4561759352448, + 0, +] +`; + +exports[`圆弧和直线更好的连接 2`] = ` +Array [ + -278.4546336949927, + 638.4561759352445, + 0, +] +`; + +exports[`圆弧和直线更好的连接 3`] = ` +Array [ + 169.92856010460946, + -169.4824016255793, + 0, +] +`; + +exports[`圆弧和直线更好的连接 4`] = ` +Array [ + 0, + 778.2616418783487, + 0, +] +`; + +exports[`圆弧和直线更好的连接 5`] = ` +Array [ + 0, + 897.1824008694182, + 0, +] +`; + +exports[`圆弧和直线更好的连接 6`] = ` +Array [ + 120, + 0, + 0, +] +`; + +exports[`圆弧和直线更好的连接 7`] = ` +Array [ + -20.30000000000109, + 0, + 0, +] +`; + +exports[`圆弧和直线更好的连接 8`] = ` +Array [ + 2.6812339980917268e-14, + 437.87874184760966, + 0, +] +`; + +exports[`圆弧和直线更好的连接 9`] = ` +Array [ + 118.9207589910699, + 338.1787418476109, + 0, +] +`; + +exports[`圆弧和直线更好的连接 10`] = ` +Array [ + 79.39999999999964, + 0, + 0, +] +`; + +exports[`圆弧和直线更好的连接 11`] = ` +Array [ + 0, + 2004.9128792454385, + 0, +] +`; + +exports[`圆弧和直线更好的连接 12`] = ` +Array [ + 0, + 2053.6418919774133, + 0, +] +`; + +exports[`圆弧和直线更好的连接 13`] = ` +Array [ + 120, + 0, + 0, +] +`; + +exports[`圆弧和直线更好的连接 14`] = ` +Array [ + 296.4960364081234, + 668.4635316520698, + 0, +] +`; + +exports[`圆弧和直线更好的连接 15`] = ` +Array [ + 345.2250491400981, + 548.4635316520698, + 0, +] +`; + +exports[`圆弧和直线更好的连接 16`] = ` +Array [ + 80.60162736185703, + 20.630503305065304, + 0, +] +`; + +exports[`圆弧和直线更好的连接 17`] = ` +Array [ + 0, + 1906.6437446721693, + 0, +] +`; + +exports[`圆弧和直线更好的连接 18`] = ` +Array [ + 0, + 2177.593407802538, + 0, +] +`; + +exports[`圆弧和直线更好的连接 19`] = ` +Array [ + 120, + 0, + 0, +] +`; + exports[`墙厚度导致的破面 1`] = ` Array [ -2361.953972758025, @@ -1641,7 +1793,7 @@ Array [ exports[`直线与圆弧正确的删除盖子线 2`] = ` Array [ 0, - 778.2616418783487, + 897.1824008694193, 0, ] `; @@ -1655,14 +1807,6 @@ Array [ `; exports[`直线与圆弧正确的删除盖子线 4`] = ` -Array [ - -20.299999999999272, - 0, - 0, -] -`; - -exports[`直线与圆弧正确的删除盖子线 5`] = ` Array [ -20.30000000000109, 0, @@ -1670,7 +1814,7 @@ Array [ ] `; -exports[`直线与圆弧正确的删除盖子线 6`] = ` +exports[`直线与圆弧正确的删除盖子线 5`] = ` Array [ 2.6812339980917268e-14, 437.87874184760966, @@ -1678,15 +1822,15 @@ Array [ ] `; -exports[`直线与圆弧正确的删除盖子线 7`] = ` +exports[`直线与圆弧正确的删除盖子线 6`] = ` Array [ - 2.1950492188302275e-14, - 358.4787418476097, + 118.92075899107067, + 338.17874184761064, 0, ] `; -exports[`直线与圆弧正确的删除盖子线 8`] = ` +exports[`直线与圆弧正确的删除盖子线 7`] = ` Array [ 79.39999999999964, 0, @@ -1705,7 +1849,7 @@ Array [ exports[`直线与圆弧正确的删除盖子线(盒子问题导致点不在线内) 2`] = ` Array [ 0, - 778.2616418783487, + 897.182400869419, 0, ] `; @@ -1719,14 +1863,6 @@ Array [ `; exports[`直线与圆弧正确的删除盖子线(盒子问题导致点不在线内) 4`] = ` -Array [ - -20.299999999999102, - 0, - 0, -] -`; - -exports[`直线与圆弧正确的删除盖子线(盒子问题导致点不在线内) 5`] = ` Array [ -20.30000000000092, 0, @@ -1734,7 +1870,7 @@ Array [ ] `; -exports[`直线与圆弧正确的删除盖子线(盒子问题导致点不在线内) 6`] = ` +exports[`直线与圆弧正确的删除盖子线(盒子问题导致点不在线内) 5`] = ` Array [ 2.6812339980917268e-14, 437.87874184760966, @@ -1742,15 +1878,15 @@ Array [ ] `; -exports[`直线与圆弧正确的删除盖子线(盒子问题导致点不在线内) 7`] = ` +exports[`直线与圆弧正确的删除盖子线(盒子问题导致点不在线内) 6`] = ` Array [ - 2.1950492188302275e-14, - 358.4787418476097, + 118.92075899107037, + 338.17874184761075, 0, ] `; -exports[`直线与圆弧正确的删除盖子线(盒子问题导致点不在线内) 8`] = ` +exports[`直线与圆弧正确的删除盖子线(盒子问题导致点不在线内) 7`] = ` Array [ 79.40000000000009, 0, diff --git a/src/DatabaseServices/Room/ParseService/RoomWallParse.ts b/src/DatabaseServices/Room/ParseService/RoomWallParse.ts index acbe9817f..d4e2b36ce 100644 --- a/src/DatabaseServices/Room/ParseService/RoomWallParse.ts +++ b/src/DatabaseServices/Room/ParseService/RoomWallParse.ts @@ -334,8 +334,8 @@ export class RoomWallParse iPam[0] = iPam[1]; } - let isExtend = (preR.isReverse ? iPam[0].thisParam > 1 : iPam[0].thisParam < 0) - && (nowR.isReverse ? iPam[0].argParam > 1 : iPam[0].argParam < 0); + let isExtend = (preR.isReverse ? iPam[0].thisParam > 0 : iPam[0].thisParam < 1) + && (nowR.isReverse ? iPam[0].argParam > 0 : iPam[0].argParam < 1); //tp 必须不能破坏圆弧,否则造成裁剪错误 if (!isExtend || p.distanceToSquared(v.position) > 500 * 500)