diff --git a/__test__/Interfere/interfere.test.ts b/__test__/Interfere/interfere.test.ts index f58fdc336..8de09162a 100644 --- a/__test__/Interfere/interfere.test.ts +++ b/__test__/Interfere/interfere.test.ts @@ -72,4 +72,10 @@ describe("干涉测试", () => 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); }); + + test('精度问题导致的干涉检查错误2', async () => + { + let d = { "file": [6, "Board", 8, 2, 102, false, 1, 2, 0, [0, 1, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 2122.090449307405, 53.524216164179364, 0, 1], 0, 0, true, [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 2122.090449307405, 53.524216164179364, 0, 1], 0, 3, 1166.67, 480, 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, [480, 0], 0, [480, 1166.67], 0, [0, 1166.67], 0, true, 2, 3, 1166.67, 9, 5.00333333399783, 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, 1166.67], 0, [0, 1166.67], 0, true, 0, 5, 6, 1, 1, 0, 0, [0, 1, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 2122.090449307405, 506.5242161641794, 0, 1], 3, 1166.67, 9, 5, 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, 1166.67], 0, [0, 1166.67], 0, true, 0, 5, 6, 1, 1, 0, 0, [0, 1, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 2135.090449307405, 506.5242161641794, 0, 1], 3, 0, 0, 0, 0, 0, 10, 1, "右侧板", "次卧2", "衣柜", "科技原木", "多层板", "科技原木", 0, 1, "三合一", 2, 0, "1", "1", "1", "1", "", "", "", 4, "三合一", "三合一", "三合一", "三合一", true, true, 0, 0, 0, 0, 0, 0, 0, 0, true, 0, 0, "Board", 8, 2, 103, false, 1, 2, 0, [0, 1, 0, 0, -1, 0, 0, 0, 0, 0, 1, 0, 2608.423782641403, 53.524216164179364, 1166.6671609740006, 1], 0, 0, true, [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 2608.423782641403, 53.524216164179364, 1166.6671609740006, 1], 0, 3, 1432, 480, 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, [480, 0], 0, [480, 1432], 0, [0, 1432], 0, true, 2, 3, 950.67, 9, 5.002839025999492, 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, 950.67], 0, [0, 950.67], 0, true, 0, 5, 6, 1, 1, 0, 0, [0, 1, 0, 0, -1, 0, 0, 0, 0, 0, 1, 0, 2127.093782641401, 506.5242161641794, 1166.6671609740006, 1], 3, 473.33333333399787, 9, 5.002839025999492, 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, 473.33333333399787], 0, [0, 473.33333333399787], 0, true, 0, 5, 6, 1, 1, 0, 0, [0, 1, 0, 0, -1, 0, 0, 0, 0, 0, 1, 0, 2608.423782641403, 506.5242161641794, 1166.6671609740006, 1], 3, 0, 0, 0, 0, 0, 10, 0, "顶板", "次卧2", "衣柜", "科技原木", "多层板", "科技原木", 0, 0, "三合一", 2, 0, "1", "1", "1", "1", "", "", "", 4, "三合一", "三合一", "三合一", "三合一", true, true, 0, 0, 0, 0, 0, 0, 0, 0, true, 0, 0, "Board", 8, 2, 104, false, 1, 2, 0, [0, 1, 0, 0, -1, 0, 0, 0, 0, 0, 1, 0, 5745.042300967834, 108.6197325287223, 0, 1], 0, 0, true, [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 5745.042300967834, 108.6197325287223, 0, 1], 0, 3, 782.33, 430, 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, [430, 0], 0, [430, 782.33], 0, [0, 782.33], 0, true, 1, 3, 769.3300000000017, 9, 5, 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, 769.3300000000017], 0, [0, 769.3300000000017], 0, true, 0, 5, 6, 1, 1, 0, 0, [0, 1, 0, 0, -1, 0, 0, 0, 0, 0, 1, 0, 5745.042300967834, 511.6197325287223, 13, 1], 3, 0, 0, 0, 0, 0, 10, 0, "底板", "电视柜", "电视柜", "科技原木", "多层板", "科技原木", 0, 1, "三合一", 2, 0, "1", "1", "1", "1", "", "", "", 4, "三合一", "三合一", "三合一", "三合一", true, true, 0, 0, 0, 0, 0, 0, 0, 0, true, 0, 0, "Board", 8, 2, 105, false, 1, 2, 0, [0, 1, 0, 0, -1, 0, 0, 0, 0, 0, 1, 0, 4962.715634300825, 108.6197325287223, 0, 1], 0, 0, true, [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 4962.715634300825, 108.6197325287223, 0, 1], 0, 3, 1602.67, 430, 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, [430, 0], 0, [430, 1602.67], 0, [0, 1602.67], 0, true, 2, 3, 803.33, 9, 5, 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, 803.33], 0, [0, 803.33], 0, true, 0, 5, 6, 1, 1, 0, 0, [0, 1, 0, 0, -1, 0, 0, 0, 0, 0, 1, 0, 4949.7089676348405, 511.6197325287223, 13, 1], 3, 778.3300000000019, 9, 5, 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, 778.3300000000019], 0, [0, 778.3300000000019], 0, true, 0, 5, 6, 1, 1, 0, 0, [0, 1, 0, 0, -1, 0, 0, 0, 0, 0, 1, 0, 4138.375634300828, 511.6197325287223, 13, 1], 3, 0, 0, 0, 0, 0, 10, 0, "底板", "电视柜", "电视柜", "科技原木", "多层板", "科技原木", 0, 1, "三合一", 2, 0, "1", "1", "1", "1", "", "", "", 4, "三合一", "三合一", "三合一", "三合一", true, true, 0, 0, 0, 0, 0, 0, 0, 0, true, 0, 0, "Board", 8, 2, 106, false, 1, 2, 0, [0, 1, 0, 0, -1, 0, 0, 0, 0, 0, 1, 0, 5413.910262958045, 1277.6057484616758, 0, 1], 0, 0, true, [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 5413.910262958045, 1277.6057484616758, 0, 1], 0, 3, 1602.67, 430, 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, [430, 0], 0, [430, 1602.67], 0, [0, 1602.67], 0, true, 2, 3, 803.33, 9, 5, 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, 803.33], 0, [0, 803.33], 0, true, 0, 5, 6, 1, 1, 0, 0, [0, 1, 0, 0, -1, 0, 0, 0, 0, 0, 1, 0, 5400.903596292061, 1680.6057484616758, 13, 1], 3, 778.3300000000019, 9, 5, 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, 778.3300000000019], 0, [0, 778.3300000000019], 0, true, 0, 5, 6, 1, 1, 0, 0, [0, 1, 0, 0, -1, 0, 0, 0, 0, 0, 1, 0, 4589.570262958048, 1680.6057484616758, 13, 1], 3, 0, 0, 0, 0, 0, 10, 0, "底板", "电视柜", "电视柜", "科技原木", "多层板", "科技原木", 0, 1, "三合一", 2, 0, "1", "1", "1", "1", "", "", "", 4, "三合一", "三合一", "三合一", "三合一", true, true, 0, 0, 0, 0, 0, 0, 0, 0, true, 0, 0, "Board", 8, 2, 107, false, 1, 2, 0, [0, 1, 0, 0, -1, 0, 0, 0, 0, 0, 1, 0, 6196.2369296250545, 1277.6057484616758, 0, 1], 0, 0, true, [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 6196.2369296250545, 1277.6057484616758, 0, 1], 0, 3, 782.33, 430, 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, [430, 0], 0, [430, 782.33], 0, [0, 782.33], 0, true, 1, 3, 769.3300000000017, 9, 5, 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, 769.3300000000017], 0, [0, 769.3300000000017], 0, true, 0, 5, 6, 1, 1, 0, 0, [0, 1, 0, 0, -1, 0, 0, 0, 0, 0, 1, 0, 6196.2369296250545, 1680.6057484616758, 13, 1], 3, 0, 0, 0, 0, 0, 10, 0, "底板", "电视柜", "电视柜", "科技原木", "多层板", "科技原木", 0, 1, "三合一", 2, 0, "1", "1", "1", "1", "", "", "", 4, "三合一", "三合一", "三合一", "三合一", true, true, 0, 0, 0, 0, 0, 0, 0, 0, true, 0, 0], "basePt": { "x": 1176.4237826414028, "y": 53.524216164179364, "z": 0 }, "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 27e2f661d..58719484a 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-3; +export const EPS = 5e-2; // Tag factory: we can request a unique tag through CSG.getTag() export let staticTag = 1;