diff --git a/__test__/Interfere/interfere.test.ts b/__test__/Interfere/interfere.test.ts index 57b822254..f58fdc336 100644 --- a/__test__/Interfere/interfere.test.ts +++ b/__test__/Interfere/interfere.test.ts @@ -66,4 +66,10 @@ describe("干涉测试", () => let data = { "file": [4, "Board", 8, 2, 100, false, 1, 2, 0, [0, 0.9831300494835278, 0.18290791618329785, 0, -1, 0, 0, 0, 0, -0.18290791618329785, 0.9831300494835278, 0, 1108.4743411927875, 128.72923569518287, 1025.1786752030148, 1], 0, 0, true, [1, 0, 0, 0, 0, 0.9831300494835278, 0.18290791618329785, 0, 0, -0.18290791618329785, 0.9831300494835278, 0, 1108.6443411927876, 126.76297559621582, 1024.8128593706488, 1], 0, 3, 750, 430.6086591386313, 18, true, "Polyline", 8, 2, 0, false, 0, 7, 0, [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, -2, -0.17000000000007276, 0, 1], 0, 0, true, [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, -2, -0.17000000000007276, 0, 1], 0, 2, 4, [2, 0.17000000000007276], 0, [432.6086591386313, 0.17000000000007276], 0, [432.6086591386313, 750.1700000000001], 0, [2, 750.1700000000001], 0, true, 0, 3, 0, 0, 0, 0, 0, 10, 0, "顶板", "", "讲桌", "18颗粒蓝色", "颗粒板", "蓝色", 0, 1, "**多种**", 2, 0, "1.5", "1.5", "1.5", "1.5", "", "", "", 4, "三合一", "不排", "三合一", "三合一", true, true, 0, 0, 0, 0, 0, 0, 0, 0, true, 0, 0, "Board", 8, 2, 101, false, 1, 3, 0, [1, 0, 0, 0, 0, 0, 1, 0, 0, -1, 0, 0, 483.4743411927875, 559.6438564782645, 0, 1], 0, 0, true, [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 483.4743411927875, 559.6438564782645, 0, 1], 0, 3, 1160, 500, 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, 6, [0, 0], 0, [500, 0], 0, [500, 1130], 0.41421356237309503, [470, 1160], 0, [30, 1160], 0.41421356237309503, [0, 1130], 0, true, 0, 3, 0, 0, 0, 0, 0, 10, 2, "封板", "", "讲桌", "18颗粒蓝色", "颗粒板", "蓝色", 0, 1, "不排", 2, 0, "0.6", "0.6", "0.6", "0.6", "", "", "", 6, "不排", "不排", "不排", "不排", "不排", "不排", true, true, 0, 0, 0, 0, 0, 0, 0, 0, true, 0, 0, "Board", 8, 2, 113, false, 1, 2, 0, [0, 0.9831300494835278, 0.18290791618329785, 0, -1, 0, 0, 0, 0, -0.18290791618329785, 0.9831300494835278, 0, 1108.4743411927875, 637.6961828178574, 1044.0516874415487, 1], 0, 0, true, [1, 0, 0, 0, 0, 0.9831300494835278, 0.18290791618329785, 0, 0, -0.18290791618329785, 0.9831300494835278, 0, 1108.6443411927876, 635.7299227188904, 1043.6858716091826, 1], 0, 3, 750, 430.6086591386313, 18, true, "Polyline", 8, 2, 0, false, 0, 7, 0, [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, -2, -0.17000000000007276, 0, 1], 0, 0, true, [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, -2, -0.17000000000007276, 0, 1], 0, 2, 4, [2, 0.17000000000007276], 0, [432.6086591386313, 0.17000000000007276], 0, [432.6086591386313, 750.1700000000001], 0, [2, 750.1700000000001], 0, true, 0, 3, 0, 0, 0, 0, 0, 10, 0, "顶板", "", "讲桌", "18颗粒蓝色", "颗粒板", "蓝色", 0, 1, "**多种**", 2, 0, "1.5", "1.5", "1.5", "1.5", "", "", "", 4, "三合一", "不排", "三合一", "三合一", true, true, 0, 0, 0, 0, 0, 0, 0, 0, true, 0, 0, "Board", 8, 2, 114, false, 1, 3, 0, [1, 0, 0, 0, 0, 0, 1, 0, 0, -1, 0, 0, 483.4743411927875, 1075.7481526935562, 18.873012238533875, 1], 0, 0, true, [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 483.4743411927875, 1075.7481526935562, 18.873012238533875, 1], 0, 3, 1160, 500, 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, 6, [0, 0], 0, [500, 0], 0, [500, 1130], 0.41421356237309503, [470, 1160], 0, [30, 1160], 0.41421356237309503, [0, 1130], 0, true, 0, 3, 0, 0, 0, 0, 0, 10, 2, "封板", "", "讲桌", "18颗粒蓝色", "颗粒板", "蓝色", 0, 1, "不排", 2, 0, "0.6", "0.6", "0.6", "0.6", "", "", "", 6, "不排", "不排", "不排", "不排", "不排", "不排", true, true, 0, 0, 0, 0, 0, 0, 0, 0, true, 0, 0], "basePt": { "x": 358.4743411927875, "y": 125.4368932038835, "z": 0 }, "ucs": [0, 1, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 1] }; await Check(data, 2); }); + + test('精度问题导致的干涉检查错误', async () => + { + let d = { "file": [2, "Board", 8, 2, 104, false, 1, 11, 0, [0, 1, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, -762.4275697786074, 100, 2800.6163080949336, 1], 0, 0, true, [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, -762.4275697786074, 100, 2800.6163080949336, 1], 0, 3, 172, 300, 18, 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, [300, 0], 0, [300, 172], 0, [0, 172], 0, true, 1, 3, 159, 9, 4.996599999996761, 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, [9, 0], 0, [9, 159], 0, [0, 159], 0, true, 0, 3, 0, 0, 0, 0, 0, [0, 1, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, -762.4275697786074, 371, 2813.6163080949336, 1], 3, 0, 0, 0, 0, 0, 10, 1, "立板", "", "1", "", "", "", 0, 0, "三合一", 2, 0, "1", "1", "1", "1", "", "", "", 4, "三合一", "三合一", "三合一", "三合一", true, true, 0, 3, 103, 2, 3, 148, 149, 150, 3, 151, 152, 153, 105, 2, 3, 156, 157, 158, 3, 159, 160, 161, 107, 2, 3, 164, 165, 166, 3, 167, 168, 169, 0, 0, 0, 0, 0, 0, true, 0, 0, "Board", 8, 2, 193, false, 1, 3, 0, [1, 0, 0, 0, 0, 0, 1, 0, 0, -1, 0, 0, -1301.7609697786106, 380, 2813.6163080949336, 1], 192, 0, true, [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, -1301.7609697786106, 380, 2813.6163080949336, 1], 0, 3, 164, 544.3299999999999, 9, 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, [544.3299999999999, 0], 0, [544.3299999999999, 164], 0, [0, 164], 0, true, 0, 3, 0, 0, 0, 0, 0, 10, 2, "背板", "", "1", "", "", "", 0, 1, "三合一", 2, 0, "1", "1", "1", "1", "", "", "", 4, "三合一", "三合一", "三合一", "三合一", false, true, 0, 0, 0, 0, 0, 0, 0, 0, true, 0, 0], "basePt": { "x": -1301.7609697786106, "y": 100, "z": 2800.6163080949336 }, "ucs": [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1] }; + await Check(d, 0); + }); }); diff --git a/src/csg/core/constants.ts b/src/csg/core/constants.ts index 269b0a965..27e2f661d 100644 --- a/src/csg/core/constants.ts +++ b/src/csg/core/constants.ts @@ -3,7 +3,7 @@ export const _CSGDEBUG = false; /** Epsilon used during determination of near zero distances. * @default */ -export const EPS = 1e-5; +export const EPS = 1e-3; // Tag factory: we can request a unique tag through CSG.getTag() export let staticTag = 1;