You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
WebCAD/__test__/Booloperate/bool6.test.ts

57 lines
8.6 KiB

import { CuttingBoard } from "../../src/Add-on/BoardCutting/CuttingUtils";
import { Board } from "../../src/DatabaseServices/Entity/Board";
import { Region } from "../../src/DatabaseServices/Entity/Region";
import { BoolOpeartionType } from "../../src/GraphicsSystem/BoolOperateUtils";
import { LoadBoardsFromFileData, LoadEntityFromFileData, LoadRegionsFromFileData } from "../Utils/LoadEntity.util";
import "../Utils/jest.util";
test('无法求到交集', () =>
{
let d = { "file": [2, "Region", 8, 2, 138, false, 1, 1, 0, [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 402.7349980402736, 0, 0, 1], 0, 0, true, [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 402.7349980402736, 0, 0, 1], 0, 1, 1, 1, 1, "Polyline", 8, 2, 0, false, 0, 7, 0, [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 402.7349980402736, 0, 0, 1], 0, 0, true, [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 402.7349980402736, 0, 0, 1], 0, 2, 4, [0, 0], 0, [387, 0], 0, [387, 18], 0, [0, 18], 0, true, 0, "Region", 8, 2, 139, false, 1, 2, 0, [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, -1, 0, 377.7349980402736, -38.99960000002761, 0, 1], 0, 0, true, [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, -1, 0, 377.7349980402736, -38.99960000002761, 0, 1], 0, 1, 1, 1, 1, "Polyline", 8, 2, 0, false, 0, 7, 0, [1, 0, 0, 0, 0, -1, 0, 0, 0, 0, -1, 0, 377.7349980402736, -38.99960000002761, 0, 1], 0, 0, true, [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, -1, 0, 377.7349980402736, -764.0012000002525, 0, 1], 0, 2, 6, [412, 725.0016000002249], 0, [0, 725.0016000002249], 0, [0, 0], 0, [25, 0], 0, [25, -56.998399999775074], 0, [412, -56.998399999775074], 0, true, 0], "basePt": { "x": 377.7349980402736, "y": -764.0012000002525, "z": 0 }, "ucs": [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1] };
let [reg1, reg2] = LoadRegionsFromFileData(d);
let reg = reg1.Clone();
reg.BooleanOper(reg2.Clone(), BoolOpeartionType.Intersection);
expect(reg.Area).toMatchSnapshot();
});
test('精度不一致导致的板件显示错误', () =>
{
let d =
{ "file": [1, "Board", 10, 2, 100, 0, 1, 3, 71, [1, 0, 0, 0, 0, 0, 1, 0, 0, -1, 0, 0, 2663.0341099632205, -6829.664801153471, 0, 1], 0, 0, 1, [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 2251.110228408969, -7614.664801153471, 15, 1], 0, 0, 1, 3, 699.9999999999995, 1158.0761184457501, 15, true, "Polyline", 10, 2, 0, 0, 0, 7, 0, [1, 0, 0, 0, 0, 1, -1.6240976817373723e-16, 0, 0, 1.6240976817373723e-16, 1, 0, 0, 699.9999999999995, 0, 1], 0, 0, 1, [1, 0, 0, 0, 0, 0, -1, 0, 0, 1, 0, 0, -2931.1851045401936, -1380.525407665506, 735.0000000000001, 1], 0, 0, 1, 2, 4, [0, -699.9999999999995], 0, [1158.0761184457501, -699.9999999999995], 0, [1158.0761184457501, 0], 0, [0, 0], 0, true, 1, 3, 15, 1158.0761000000002, 2, true, "Polyline", 10, 2, 0, 0, 0, 7, 0, [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 15, 0, 1], 0, 0, 1, [1, 0, 0, 0, 0, 0, -1, 0, 0, 1, 0, 0, -2931.1851045401936, -1723.0254076655056, 735, 1], 0, 0, 1, 2, 4, [0, -15], 0, [1158.0761000000002, -15], 0, [1158.0761000000002, 0], 0, [0, 0], 0, true, 0, 3, 0, 0, 0, 0, 0, [1, 0, 0, 0, 0, 0, 1, 0, 0, -1, 0, 0, 2663.0341099632205, -6829.664801153471, 342.49999999999955, 1], 1.5, 0, 0, 0, 0, 0, 13, 2, "背板", "主卧", "下柜", "法国黄橡", "密度", "黄", 0, 0, "三合一", 2, 0, "0", "0", "0", "0", "", "", "", 4, "三合一", "三合一", "三合一", "三合一", true, true, 0, 0, 0, 0, 0, 0, 0, 0, true, 0, 0, null, 0, 0], "basePt": { "x": 2663.0341099632205, "y": -6844.664801153471, "z": 0 }, "ucs": [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1] };
let br = LoadEntityFromFileData(d)[0] as Board;
expect(br.MeshGeometry.getAttribute("position").count).toMatchNumberSnapshot(0);
});
test('并集错误', () =>
{
//原因: 两条线 已经相似(fastEqualCurve) 在判断方向相同时,因为精度问题,我们错误的认为它不同向,将判断同向的精度改成0.01后解决
let d = { "file": [2, "Region", 10, 2, 106, 0, 1, 7, 71, [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 863.9694986599663, 458.07124371859294, 0, 1], 0, 0, 1, [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 863.9694986599663, 458.07124371859294, 0, 1], 0, 0, 1, 1, 1, 1, 1, "Polyline", 10, 2, 0, 0, 0, 7, 71, [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 863.9694986599663, 458.07124371859294, 0, 1], 0, 0, 1, [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 863.9694986599663, 458.07124371859294, 0, 1], 0, 0, 1, 2, 11, [487.3242, 322.0844], 0, [498.26980000000003, 538.7396], 0, [499.17220000000003, 755.6124], 0, [490.02970000000005, 972.3511000000001], 0, [455.53470000000004, 1303.1193], 0, [-2.5761000000000003, 1238.6734000000001], 0, [30.600900000000003, 881.4381000000001], 0, [36.0287, 647.2415000000001], 0, [28.446, 413.1016], 0, [-8.023100000000001, 56.1227], 0, [450.08520000000004, -8.3225], 0, true, 0, "Region", 10, 2, 107, 0, 1, 7, 71, [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 863.9694986599663, 458.07124371859294, 0, 1], 0, 0, 1, [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 863.9694986599663, 458.07124371859294, 0, 1], 0, 0, 1, 1, 1, 1, 1, "Polyline", 10, 2, 0, 0, 0, 7, 71, [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 863.9694986599663, 458.07124371859294, 0, 1], 0, 0, 1, [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 863.9694986599663, 458.07124371859294, 0, 1], 0, 0, 1, 2, 14, [431.2735, 107.0175], 0, [452.0221, 322.5664], 0, [462.70520000000005, 538.8478], 0, [463.2995, 755.3922], 0, [453.80260000000004, 971.7552000000001], 0, [419.08840000000004, 1297.9876000000002], 0, [405.99760000000003, 1296.1904], 0, [439.3514, 970.7397000000001], 0, [448.81690000000003, 755.0946], 0, [448.2244, 539.224], 0, [437.57460000000003, 323.6175], 0, [416.8883, 108.7181], 0, [402.36, -1.6169], 0, [415.41150000000005, -3.4817], 0, true, 0], "basePt": { "x": 855.9463986599663, "y": 449.74874371859295, "z": 0 }, "ucs": [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1] };
let regs = LoadEntityFromFileData(d) as Region[];
let ok = regs[0].BooleanOper(regs[1], BoolOpeartionType.Union);
expect(ok).toBeTruthy();
expect(regs[0].Area).toMatchNumberSnapshot();
expect(regs[0].ShapeManager.ShapeList.length).toMatchSnapshot();
});
test('同深度造型槽并集错误', () =>
{
let d = { "file": [2, "Board", 10, 2, 100, 0, 1, 3, 71, [1, 0, 0, 0, 0, 0, 1, 0, 0, -1, 0, 0, 0, 78, 0, 1], 0, 0, 1, [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 78, 0, 1], 0, 0, 1, 3, 600, 600.0000000000001, 18, true, "Polyline", 10, 2, 0, 0, 0, 7, 71, [1, 0, 0, 0, 0, 1, -2.1316282072803007e-16, 0, 0, 2.1316282072803007e-16, 1, 0, 0, 600, 0, 1], 0, 0, 1, [1, 0, 0, 0, 0, 0, -1, 0, 0, 1, 0, 0, -930.925507900677, 2.257336342893268, 78.00000000000013, 1], 0, 0, 1, 2, 4, [0, -600], 0, [600.0000000000001, -600], 0, [600.0000000000001, 0], 0, [0, 0], 0, true, 1, 3, 220, 120, 10, true, "Polyline", 10, 2, 0, 0, 0, 7, 71, [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 220, 0, 1], 0, 0, 1, [1, 0, 0, 0, 0, 0, -1, 0, 0, 1, 0, 0, -1102.8668171557558, -172.16704288961245, 78, 1], 0, 0, 1, 2, 4, [0, -220], 0, [120, -220], 0, [120, 0], 0, [0, 0], 0, true, 1, 3, 200, 100, 10, true, "Polyline", 10, 2, 0, 0, 0, 7, 71, [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 200, 0, 1], 0, 0, 1, [1, 0, 0, 0, 0, 0, -1, 0, 0, 1, 0, 0, -1112.8668171557558, -182.16704288961245, 78, 1], 0, 0, 1, 2, 4, [0, -200], 0, [100, -200], 0, [100, 0], 0, [0, 0], 0, true, 0, 3, 0, 0, 0, 0, 0, [1, 0, 0, 0, 0, 0, 1, 0, 0, -1, 0, 0, 181.94130925507886, 69.99999999999987, 184.42437923250571, 1], 3, 0, 0, 0, 0, 0, [1, 0, 0, 0, 0, 0, 1, 0, 0, -1, 0, 0, 171.94130925507886, 69.99999999999987, 174.42437923250571, 1], 3, 0, 0, 0, 0, 0, 19, 2, "18背板", "", "", "", "", "", 0, 1, "三合一", 2, 0, "0.8", "0.8", "0.8", "0.8", "", "", "", 4, "三合一", "三合一", "三合一", "三合一", false, true, 0, 0, 0, 0, 0, 0, 0, 0, true, 0, 0, null, 0, 0, "", "", "", "", 0, false, 0, "", "Board", 10, 2, 101, 0, 1, 11, 71, [0, 1, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 227.65808219178084, 4.999999999999872, 20.290716803898704, 1], 0, 0, 1, [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, -1643.7419178082207, 4.999999999999872, -3034.849283196101, 1], 0, 0, 1, 3, 300, 65, 18.4, true, "Polyline", 10, 2, 0, 0, 0, 7, 0, [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 321.05999999999995, 0, 1], 0, 0, 1, [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, -3055.14, 0, 1], 0, 0, 1, 2, 4, [65, -321.05999999999995], 0, [65, -21.059999999999945], 0, [0, -21.059999999999945], 0, [0, -321.05999999999995], 0, true, 0, 3, 0, 0, 0, 0, 0, 19, 1, "格栅条", "", "", "", "", "", 0, 0, "三合一", 2, 0, "0.8", "0.8", "0.8", "0.8", "", "", "", 4, "三合一", "三合一", "三合一", "三合一", true, true, 0, 0, 0, 0, 0, 0, 0, 0, true, 0, 0, null, 0, 0, "", "", "", "", 0, false, 0, ""], "basePt": { "x": 0, "y": 4.999999999999872, "z": 0 }, "ucs": [1, 0, 0, 0, 0, 0, 1, 0, 0, -1, 0, 0, 0, 0, 0, 1] };
let brs = LoadBoardsFromFileData(d);
let br = brs.shift();
CuttingBoard(br, brs);
expect(br.Volume).toMatchNumberSnapshot();
});