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/BoardCutting.test.ts

226 lines
37 KiB

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

import { CuttingBoard } from "../../src/Add-on/BoardCutting/CuttingUtils";
import { Board } from "../../src/DatabaseServices/Entity/Board";
import "../Utils/jest.util";
import { LoadBoardsFromFileData } from "../Utils/LoadEntity.util";
test('板件与板件切割_分裂成多个', () =>
{
let d =
[3, "Board", 3, 2, 101, false, 1, 11, 0, [0, 1, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, -331.4882673815591, 22.964750159997493, 0, 1], 2, 1200, 600, 18, true, "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, 4, [0, 0], 0, [600, 0], 0, [600, 1200], 0, [0, 1200], 0, true, 1, 2, 560.6466, 189.21820000000014, 18, false, "Polyline", 3, 2, 0, false, 0, 1, 0, [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, -1827.9668979500452, -289.76232632197764, 0, 1], 2, 4, [1827.9668979500452, 755.7998263219777], 0, [1827.9668979500452, 289.76232632197764], 0, [2017.1850979500452, 289.76232632197764], 0, [2017.1850979500452, 755.7998263219777], 0.9999999999999999, true, 0, 3, 0, 0, 0, [0, 1, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, -331.4882673815591, 240.21531912679802, 487.0617703059633, 1], 3, 0, 0, 0, 2, [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, -331.4882673815591, 22.964750159997493, 0, 1], 1, "左侧板", "{\"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\":[\"three\",\"three\",\"three\",\"three\",\"three\",\"three\"]}", 0, 0, "Board", 3, 2, 103, false, 1, 2, 0, [0, 0.7071067811865476, 0.7071067811865475, 0, -1, 0, 0, 0, 0, -0.7071067811865475, 0.7071067811865476, 0, 150.8430102636048, -52.19811424968327, 170.47952541755785, 1], 2, 783.3533043634961, 1175.1597867537462, 18, true, "Polyline", 3, 2, 0, false, 0, 7, 0, [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 376.7045899568675, -325.59238647697345, 0, 1], 2, 4, [-376.7045899568675, 325.59238647697345], 0, [798.4551967968786, 325.59238647697345], 0, [798.4551967968786, 1108.9456908404695], 0, [-376.7045899568675, 1108.9456908404695], 0, true, 0, 3, 0, 0, 0, 2, [1, 0, 0, 0, 0, 0.7071067811865476, 0.7071067811865475, 0, 0, -0.7071067811865475, 0.7071067811865476, 0, 476.43539674057826, 214.17225581291558, 436.84989548015665, 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, "Board", 3, 2, 105, false, 1, 2, 0, [0, 1, 0, 0, -1, 0, 0, 0, 0, 0, 1, 0, 150.8430102636048, -84.04268340053818, 746.0908003894185, 1], 2, 1200, 1446.4691198791304, 18, true, "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, 4, [0, 0], 0, [1446.4691198791304, 0], 0, [1446.4691198791304, 1200], 0, [0, 1200], 0, true, 0, 3, 0, 0, 0, 2, [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 150.8430102636048, -84.04268340053818, 746.0908003894185, 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];
let brs = LoadBoardsFromFileData(d);
let br = brs.shift();
let splitBrs = CuttingBoard(br, brs);
splitBrs.push(br);
expect(splitBrs.length).toBe(5);
for (let b of splitBrs)
{
expect(b.Volume).toMatchNumberSnapshot();
}
});
test('斜切割', () =>
{
let d =
{ "file": [2, "Board", 3, 2, 101, false, 1, 11, 0, [0, 1, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, -2215.328823760792, 499.71410406375077, -2294.099214285263, 1], 2, 1200, 600, 18, true, "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, 4, [0, 0], 0, [600, 0], 0, [600, 1200], 0, [0, 1200], 0, true, 0, 3, 0, 0, 0, 2, [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, -205.28537176904496, 177.69146652013302, 0, 1], 1, "左侧板", { "roomName": "", "cabinetName": "", "boardName": "", "material": "", "color": "", "lines": 0, "bigHoleDir": 0, "composingFace": 2, "highSealed": [], "sealedUp": "1", "sealedDown": "1", "sealedLeft": "1", "sealedRight": "1", "spliteHeight": "", "spliteWidth": "", "spliteThickness": "", "highDrill": ["三合一", "三合一", "三合一", "三合一"], "frontDrill": true, "backDrill": true, "drillType": "三合一" }, 0, 0, "Board", 3, 2, 102, false, 1, 2, 0, [0, 1, 0, 0, -0.9502295409734979, 0, -0.31155066917163815, 0, -0.31155066917163815, 0, 0.9502295409734979, 0, -1370.93197964564, 499.71410406375077, -1535.8828067472384, 1], 2, 1210.53726169844, 600, 18, true, "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, 4, [0, 0], 0, [600, 0], 0, [600, 1210.53726169844], 0, [0, 1210.53726169844], 0, true, 0, 3, 0, 0, 0, 2, [0.9502295409734979, 0, 0.31155066917163815, 0, 0, 1, 0, 0, -0.31155066917163815, 0, 0.9502295409734979, 0, 639.1114723461071, 177.69146652013302, 758.2164075380244, 1], 0, "层板", { "roomName": "", "cabinetName": "", "boardName": "", "material": "", "color": "", "lines": 0, "bigHoleDir": 0, "composingFace": 2, "highSealed": [], "sealedUp": "1", "sealedDown": "1", "sealedLeft": "1", "sealedRight": "1", "spliteHeight": "", "spliteWidth": "", "spliteThickness": "", "highDrill": ["三合一", "三合一", "三合一", "三合一"], "frontDrill": true, "backDrill": true, "drillType": "三合一" }, 0, 0], "basePt": { "x": -1847.3471649178755, "y": -8951.992136339191, "z": 0 } };
{
let [br0, br1] = LoadBoardsFromFileData(d) as Board[];
let splitBrs = CuttingBoard(br0, [br1]);
splitBrs.push(br0);
for (let b of splitBrs)
{
expect(b.Volume).toMatchNumberSnapshot();
}
}
{
let [br1, br0] = LoadBoardsFromFileData(d) as Board[];
let splitBrs = CuttingBoard(br0, [br1]);
splitBrs.push(br0);
for (let b of splitBrs)
{
expect(b.Volume).toMatchNumberSnapshot();
}
}
});
test("板件切割测试2", () =>
{
let d =
{ "file": [2, "Board", 7, 2, 101, false, 1, 11, 0, [0, 1, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 58.11138014527837, -95.6416464891041, 0, 1], 100, 0, true, [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 58.11138014527837, -95.6416464891041, 0, 1], 2, 2000, 600, 18, false, "Polyline", 7, 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, -4826.750873683377, -162.89849415409662, 174.3341404358351, 1], 2, 8, [77.4818401937041, 2000], 0, [0, 2000], 0, [0, 0], 0, [600, 0], 0, [600, 2000], 0, [479.4188861985467, 2000], 0, [479.4188861985467, 518.1598062953994], 0, [77.4818401937041, 518.1598062953994], 0, true, 2, 2, 1043.0992736077485, 77.4818401937041, 5, true, "Polyline", 7, 2, 0, false, 0, 7, 0, [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, -742.8571428571431, 0, 1], 0, 0, true, [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, -200.48426150121168, 0, 0, 1], 2, 4, [0, 1785.9564164648916], 0, [0, 742.8571428571431], 0, [77.4818401937041, 742.8571428571433], 0, [77.4818401937041, 1785.9564164648914], 0, true, 0, 3, 0, 0, 0, [0, 1, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 58.11138014527837, -95.64164648910412, 742.8571428571431, 1], 2, 892.2196473551638, 120.58111380145328, 5, true, "Polyline", 7, 2, 0, false, 0, 1, 0, [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, -479.4188861985467, -851.4740554156175, 0, 1], 0, 0, true, [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, -601.4325065106937, -851.4740554156172, -13, 1], 2, 4, [600, 851.4740554156175], 0, [600, 1743.6937027707813], 0, [479.4188861985467, 1743.6937027707806], 0, [479.4188861985467, 851.4740554156178], 0, true, 0, 3, 0, 0, 0, [0, 1, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 71.11138014527836, 383.7772397094426, 851.4740554156175, 1], 3, 0, 0, 0, 6, 1, "左侧板", "主卧", "下柜", "", "", "", 0, 0, "三合一", 2, 0, "1", "1", "1", "1", "", "", "", 8, "三合一", "三合一", "三合一", "三合一", "三合一", "三合一", "三合一", "三合一", true, true, 0, 0, 0, 0, 0, "Board", 7, 2, 104, false, 1, 2, 0, [0, 1, 0, 0, -1, 0, 0, 0, 0, 0, 1, 0, 976.5468710543694, -95.6416464891041, 991, 1], 103, 0, true, [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 976.5468710543694, -95.6416464891041, 991, 1], 2, 1164, 600, 18, true, "Polyline", 7, 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], 2, 4, [0, 0], 0, [600, 0], 0, [600, 1164], 0, [0, 1164], 0, true, 0, 3, 0, 0, 0, 6, 0, "层板", "主卧", "下柜", "", "", "", 0, 1, "三合一", 2, 0, "1", "1", "1", "1", "", "", "", 4, "三合一", "三合一", "三合一", "三合一", true, true, 0, 0, 0, 0, 0], "basePt": { "x": -187.45312894563062, "y": -95.6416464891041, "z": 0 } };
{
let [br0, br1] = LoadBoardsFromFileData(d) as Board[];
let splitBrs = CuttingBoard(br0, [br1]);
splitBrs.push(br0);
for (let b of splitBrs)
{
expect(b.Volume).toMatchNumberSnapshot();
}
}
{
let [br1, br0] = LoadBoardsFromFileData(d) as Board[];
let splitBrs = CuttingBoard(br0, [br1]);
splitBrs.push(br0);
for (let b of splitBrs)
{
expect(b.Volume).toMatchNumberSnapshot();
}
}
});
test("板件切割测试3", () =>
{
let d =
{ "file": [2, "Board", 7, 2, 117, false, 1, 11, 0, [0, 1, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, -187.63269733656165, 859.2801162227601, 0, 1], 0, 0, true, [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, -187.63269733656165, 859.2801162227601, 0, 1], 2, 2000, 600, 18, false, "Polyline", 7, 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, -6845.879202981199, -24.883966309060042, 232.44552058111347, 1], 2, 8, [77.4818401937041, 2000], 0, [0, 2000], 0, [0, 0], 0, [600, 0], 0, [600, 2000], 0, [479.4188861985467, 2000], 0, [479.4188861985467, 518.1598062953994], 0, [77.4818401937041, 518.1598062953994], 0, true, 3, 2, 753.1234866828088, 59.27360774818362, 15, true, "Polyline", 7, 2, 0, false, 0, 3, 0, [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, -2432.929782082325, -796.2227602905568, 0, 1], 0, 0, true, [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, -509.443099273607, -934.2372881355934, 0, 1], 2, 4, [2432.929782082325, 796.2227602905568], 0, [2492.2033898305085, 796.2227602905568], 0, [2492.2033898305085, 1549.3462469733656], 0, [2432.929782082325, 1549.3462469733656], 0, true, 0, 3, 0, 0, 0, [0, 1, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, -187.63269733656165, 1368.7232154963667, 934.2372881355934, 1], 2, 892.2196473551638, 120.58111380145328, 5, true, "Polyline", 7, 2, 0, false, 0, 2, 0, [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, -479.4188861985467, -851.4740554156175, 0, 1], 0, 0, true, [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, -1080.8513927092404, -1702.9481108312348, -25.999999999999993, 1], 2, 4, [600, 851.4740554156175], 0, [600, 1743.6937027707813], 0, [479.4188861985467, 1743.6937027707806], 0, [479.4188861985467, 851.4740554156178], 0, true, 0, 3, 0, 0, 0, [0, 1, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, -174.6326973365616, 1338.6990024213064, 851.4740554156175, 1], 2, 1043.0992736077485, 77.4818401937041, 5, true, "Polyline", 7, 2, 0, false, 0, 1, 0, [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, -742.8571428571431, 0, 1], 0, 0, true, [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, -200.48426150121168, -742.8571428571431, 0, 1], 2, 4, [0, 1785.9564164648916], 0, [0, 742.8571428571431], 0, [77.4818401937041, 742.8571428571433], 0, [77.4818401937041, 1785.9564164648914], 0, true, 0, 3, 0, 0, 0, [0, 1, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, -187.63269733656165, 859.2801162227601, 742.8571428571431, 1], 3, 0, 0, 0, 6, 1, "左侧板", "主卧", "下柜", "", "", "", 0, 0, "三合一", 2, 0, "1", "1", "1", "1", "", "", "", 8, "三合一", "三合一", "三合一", "三合一", "三合一", "三合一", "三合一", "三合一", true, true, 0, 0, 0, 0, 0, "Board", 7, 2, 118, false, 1, 2, 0, [0, 1, 0, 0, -1, 0, 0, 0, 0, 0, 1, 0, 730.8027935725294, 859.2801162227601, 991, 1], 0, 0, true, [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 730.8027935725294, 859.2801162227601, 991, 1], 2, 1164, 600, 18, true, "Polyline", 7, 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], 2, 4, [0, 0], 0, [600, 0], 0, [600, 1164], 0, [0, 1164], 0, true, 0, 3, 0, 0, 0, 6, 0, "层板", "主卧", "下柜", "", "", "", 0, 1, "三合一", 2, 0, "1", "1", "1", "1", "", "", "", 4, "三合一", "三合一", "三合一", "三合一", true, true, 0, 0, 0, 0, 0], "basePt": { "x": -433.19720642747063, "y": 859.2801162227601, "z": 0 } };
{
let [br0, br1] = LoadBoardsFromFileData(d) as Board[];
let splitBrs = CuttingBoard(br0, [br1]);
splitBrs.push(br0);
for (let b of splitBrs)
{
expect(b.Volume).toMatchNumberSnapshot();
}
}
{
let [br1, br0] = LoadBoardsFromFileData(d) as Board[];
let splitBrs = CuttingBoard(br0, [br1]);
splitBrs.push(br0);
for (let b of splitBrs)
{
expect(b.Volume).toMatchNumberSnapshot();
}
}
});
test("切圆环", () =>
{
let d =
{ "file": [4, "Board", 7, 2, 107, false, 1, 7, 0, [0, 1, 0, 0, -1, 0, 0, 0, 0, 0, 1, 0, 2545.8169491525423, -211.4460048426149, 1345.2784503631965, 1], 0, 0, true, [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 2545.8169491525423, -211.4460048426149, 1345.2784503631965, 1], 2, 1977.2745762711866, 1977.2745762711866, 18, false, "Circle", 7, 2, 0, false, 0, 7, 0, [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 988.6372881355933, 988.6372881355933, 0, 1], 0, 0, true, [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 434.9005129888785, 2508.6683465342476, 0, 1], 1, 988.6372881355933, 1, 2, 1393.2550112821252, 1393.2550112821252, 18, false, "Circle", 7, 2, 0, false, 1, 1, 0, [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 696.6275056410626, 696.6275056410626, 0, 1], 0, 0, true, [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, -292.00978249453067, -292.00978249453067, 0, 1], 1, 696.6275056410626, 0, 3, 0, 0, 0, [0, 1, 0, 0, -1, 0, 0, 0, 0, 0, 1, 0, 2253.8071666580117, 80.56377765191576, 1345.2784503631965, 1], 3, 0, 0, 0, 6, 0, "", "", "", "", "", "", 0, 0, "3", 2, 0, "1", "1", "1", "1", "", "", "", 1, "3", true, true, 0, 0, 0, 0, 0, "Board", 7, 2, 114, false, 1, 11, 0, [-0.8065356455357975, 0.5911854636915175, 0, 0, 0, 0, 1, 0, 0.5911854636915175, 0.8065356455357975, 0, 0, 1172.829921560505, 1147.9956519058364, 0, 1], 0, 0, true, [0.5911854636915175, 0.8065356455357975, 0, 0, -0.8065356455357975, 0.5911854636915175, 0, 0, 0, 0, 1, 0, 1172.829921560505, 1147.9956519058364, 0, 1], 2, 2000, 600, 18, true, "Polyline", 7, 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], 2, 4, [0, 0], 0, [600, 0], 0, [600, 2000], 0, [0, 2000], 0, true, 0, 3, 0, 0, 0, 6, 1, "左侧板", "主卧", "下柜", "", "", "", 0, 0, "三合一", 2, 0, "1", "1", "1", "1", "", "", "", 6, "三合一", "三合一", "三合一", "三合一", "三合一", "三合一", true, true, 0, 0, 0, 0, 0, "Board", 7, 2, 115, false, 1, 11, 0, [-0.7071067811865476, -0.7071067811865475, 0, 0, 0, 0, 1, 0, -0.7071067811865475, 0.7071067811865476, 0, 0, 1132.9171192837023, 357.27673712009073, 0, 1], 0, 0, true, [-0.7071067811865475, 0.7071067811865476, 0, 0, -0.7071067811865476, -0.7071067811865475, 0, 0, 0, 0, 1, 0, 1132.9171192837023, 357.27673712009073, 0, 1], 2, 2000, 600, 18, true, "Polyline", 7, 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], 2, 4, [0, 0], 0, [600, 0], 0, [600, 2000], 0, [0, 2000], 0, true, 0, 3, 0, 0, 0, 6, 1, "左侧板", "主卧", "下柜", "", "", "", 0, 0, "三合一", 2, 0, "1", "1", "1", "1", "", "", "", 6, "三合一", "三合一", "三合一", "三合一", "三合一", "三合一", true, true, 0, 0, 0, 0, 0, "Board", 7, 2, 113, false, 1, 11, 0, [0, 1, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 1916.2025276390448, 1180.3425932283467, 0, 1], 0, 0, true, [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 1916.2025276390448, 1180.3425932283467, 0, 1], 2, 2000, 600, 18, true, "Polyline", 7, 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], 2, 4, [0, 0], 0, [600, 0], 0, [600, 2000], 0, [0, 2000], 0, true, 0, 3, 0, 0, 0, 6, 1, "左侧板", "主卧", "下柜", "", "", "", 0, 0, "三合一", 2, 0, "1", "1", "1", "1", "", "", "", 6, "三合一", "三合一", "三合一", "三合一", "三合一", "三合一", true, true, 0, 0, 0, 0, 0], "basePt": { "x": 568.5423728813557, "y": -211.4460048426149, "z": 0 } };
{
let [br0, ...brs] = LoadBoardsFromFileData(d) as Board[];
let splitBrs = CuttingBoard(br0, brs);
splitBrs.push(br0);
for (let b of splitBrs)
{
expect(b.Volume).toMatchNumberSnapshot();
}
}
});
test("切割", () =>
{
let d =
{ "file": [2, "Board", 7, 2, 100, false, 1, 11, 0, [0, 1, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 1624.6499120550416, 1030.3324374148244, 0, 1], 0, 0, true, [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 1624.6499120550416, 1030.3324374148244, 0, 1], 2, 2000, 600, 18, true, "Polyline", 7, 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], 2, 4, [0, 0], 0, [600, 0], 0, [600, 2000], 0, [0, 2000], 0, true, 0, 3, 0, 0, 0, 6, 1, "左侧板", "主卧", "下柜", "", "", "", 0, 0, "三合一", 2, 0, "1", "1", "1", "1", "", "", "", 4, "三合一", "三合一", "三合一", "三合一", true, true, 0, 0, 0, 0, 0, "Board", 7, 2, 101, false, 1, 2, 0, [0.3355187862897868, 0.9420335153520963, 0, 0, -0.9420335153520963, 0.3355187862897868, 0, 0, 0, 0, 1, 0, 2660.789609274726, 831.017630464863, 991, 1], 0, 0, true, [0.9420335153520963, -0.3355187862897868, 0, 0, 0.3355187862897868, 0.9420335153520963, 0, 0, 0, 0, 1, 0, 2660.789609274726, 831.017630464863, 991, 1], 2, 1164, 600, 18, true, "Polyline", 7, 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], 2, 4, [0, 0], 0, [600, 0], 0, [600, 1164], 0, [0, 1164], 0, true, 0, 3, 0, 0, 0, 6, 0, "层板", "主卧", "下柜", "", "", "", 0, 1, "三合一", 2, 0, "1", "1", "1", "1", "", "", "", 4, "三合一", "三合一", "三合一", "三合一", true, true, 0, 0, 0, 0, 0], "basePt": { "x": 1564.2625974048858, "y": 831.017630464863, "z": 0 } };
{
let [br0, br1] = LoadBoardsFromFileData(d) as Board[];
let splitBrs = CuttingBoard(br0, [br1]);
splitBrs.push(br0);
for (let b of splitBrs)
{
expect(b.Volume).toMatchNumberSnapshot();
}
}
{
let [br1, br0] = LoadBoardsFromFileData(d) as Board[];
let splitBrs = CuttingBoard(br0, [br1]);
splitBrs.push(br0);
for (let b of splitBrs)
{
expect(b.Volume).toMatchNumberSnapshot();
}
}
});
test("板件分裂后槽需要在正确的位置", () =>
{
let d =
{ "file": [2, "Board", 8, 2, 101, false, 1, 11, 0, [0, 1, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, -151.11600608984008, 205.95532868849114, 0, 1], 100, 0, true, [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, -151.11600608984008, 205.95532868849114, 0, 1], 0, 2, 2000, 600, 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, [600, 0], 0, [600, 2000], 0, [0, 2000], 0, true, 2, 2, 244.77611940298527, 116.41791044776096, 18, true, "Polyline", 8, 2, 0, false, 1, 1, 0, [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, -1823.3682640118734, -735.3233830845768, 0, 1], 0, 0, true, [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, -1823.3682640118734, -735.3233830845768, 0, 1], 0, 2, 4, [1823.3682640118734, 735.3233830845768], 0, [1939.7861744596344, 735.3233830845768], 0, [1939.7861744596344, 980.0995024875621], 0, [1823.3682640118734, 980.0995024875621], 0, true, 0, 3, 0, 0, 0, [0, 1, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, -151.11600608984008, 627.845875952172, 705.47263681592, 1], 2, 271.64179104477626, 116.41791044776141, 18, true, "Polyline", 8, 2, 0, false, 1, 1, 0, [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, -1480.0846819223211, -1186.069651741293, 0, 1], 0, 0, true, [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, -1480.0846819223211, -1186.069651741293, 0, 1], 0, 2, 4, [1480.0846819223211, 1186.0696517412932], 0, [1596.5025923700825, 1186.0696517412932], 0, [1596.5025923700825, 1457.7114427860695], 0, [1480.0846819223211, 1457.7114427860695], 0, true, 0, 3, 0, 0, 0, [0, 1, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, -151.11600608984008, 284.56229386261975, 1156.2189054726364, 1], 3, 0, 0, 0, 9, 1, "左侧板", "主卧", "下柜", "", "", "", 0, 0, "三合一", 2, 0, "1", "1", "1", "1", "", "", "", 4, "三合一", "三合一", "三合一", "三合一", true, true, 0, 0, 0, 0, 0, 0, 0, 0, true, "Board", 8, 2, 104, false, 1, 3, 0, [1, 0, 0, 0, 0, 0, 1, 0, 0, -1, 0, 0, -397.8891404181982, 618.1463734646105, -6, 1], 103, 0, true, [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, -397.8891404181982, 618.1463734646105, -6, 1], 0, 2, 2012, 1174, 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, [1174, 0], 0, [1174, 2012], 0, [0, 2012], 0, true, 0, 3, 0, 0, 0, 9, 2, "背板", "主卧", "下柜", "", "", "", 0, 1, "三合一", 2, 0, "1", "1", "1", "1", "", "", "", 4, "三合一", "三合一", "三合一", "三合一", false, true, 0, 0, 0, 0, 0, 0, 0, 0, true], "basePt": { "x": -397.8891404181982, "y": 205.95532868849114, "z": -6 } };
let [br0, br1] = LoadBoardsFromFileData(d) as Board[];
let splitBrs = CuttingBoard(br0, [br1]);
for (let b of splitBrs)
{
expect(b.Volume).toMatchNumberSnapshot();
}
});
test('布尔运算导致的切割错误', () =>
{
let d =
{ "file": [2, "Board", 8, 2, 101, false, 1, 11, 0, [0, 1, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 145.70588235294053, 55.24369747899152, 0, 1], 0, 0, true, [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 145.70588235294053, 55.24369747899152, 0, 1], 0, 3, 2000, 600, 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, [600, 0], 0, [600, 2000], 0, [0, 2000], 0, true, 2, 3, 2000, 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, 2000], 0, [0, 2000], 0, true, 0, 3, 6, 1, 1, 0, 0, [0, 1, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 158.70588235294053, 628.2436974789915, 0, 1], 3, 18, 588.3901659112175, 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, [588.3901659112175, 0], 0, [588.3901659112175, 18], 0, [0, 18], 0, true, 0, 3, 0, 0, 0, 0, 0, [0, 0.9659258262890683, -0.25881904510252074, 0, 0, 0.25881904510252074, 0.9659258262890683, 0, 1, 0, 0, 0, 145.7058823529403, 55.24369747899152, 990.9999999999998, 1], 3, 0, 0, 0, 0, 0, 10, 1, "左侧板", "主卧", "下柜", "", "", "", 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, 100, false, 1, 2, 0, [0, 0.9659258262890683, -0.25881904510252074, 0, -1, 0, 0, 0, 0, 0.25881904510252074, 0.9659258262890683, 0, 1327.7058823529405, 55.24369747899152, 990.9999999999998, 1], 0, 0, true, [1, 0, 0, 0, 0, 0.9659258262890683, -0.25881904510252074, 0, 0, 0.25881904510252074, 0.9659258262890683, 0, 163.70588235294053, -201.24597621760648, 33.76750614753291, 1], 0, 3, 1364, 588.3901659112173, 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, [588.3901659112173, 0], 0, [588.3901659112173, 1364], 0, [0, 1364], 0, true, 0, 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": -36.294117647059466, "y": 55.24369747899152, "z": 0 }, "ucs": [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1] };
let [br0, br1] = LoadBoardsFromFileData(d) as Board[];
let splitBrs = CuttingBoard(br0, [br1]);
splitBrs.push(br0);
for (let b of splitBrs)
{
expect(b.Volume).toMatchNumberSnapshot();
}
});
test('板件切割因为csg计算错误导致的切割错误', () =>
{
let d =
{ "file": [2, "Board", 8, 2, 103, false, 1, 2, 0, [0, 0.9999999999999999, 0, 0, -0.8860509631594647, 0, -0.4635878457036862, 0, -0.46358784570377454, 0, 0.8860509631594184, 0, 1762.4153704413025, 0, 1040.0002246857875, 1], 0, 0, true, [0.8860509631594647, 0, 0.4635878457036862, 0, 0, 0.9999999999999999, 0, 0, -0.46358784570377454, 0, 0.8860509631594184, 0, 1762.4153704413025, -18, 1040.0002246857875, 1], 0, 3, 1979.65, 882.0000000000001, 18, true, "Polyline", 8, 2, 0, false, 0, 7, 0, [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, -18, 0, 0, 1], 0, 0, true, [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, -18, 0, 0, 1], 0, 2, 4, [18, 0], 0, [900.0000000000001, 0], 0, [900.0000000000001, 1979.65], 0, [18, 1979.65], 0, true, 0, 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, 102, false, 1, 11, 0, [0, 1, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 1166.6250332856093, 2, 0, 1], 0, 0, true, [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 1166.6250332856093, -18, 0, 1], 0, 3, 738.2, 880, 18, true, "Polyline", 8, 2, 0, false, 0, 7, 0, [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, -20, 0, 0, 1], 0, 0, true, [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, -20, 0, 0, 1], 0, 2, 4, [20, 0], 0, [900, 0], 0, [900, 738.2], 0, [20, 738.2], 0, true, 2, 3, 7, 738.2, 5.250000000116415, true, "Polyline", 8, 2, 0, false, 0, 7, 0, [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, -5.25, 0, 0, 1], 0, 0, true, [0, -1, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 881.5, 0, 1], 0, 2, 4, [743.4499999999998, 7], 0, [5.25, 7], 0, [5.25, 0], 0, [743.45, 0], 0, true, 0, 3, 6, 1, 0.15, 0, 0, [0, 0, 1, 0, 0, -1, 0, 0, 1, 0, 0, 0, 1179.375033285493, 863.5, 0, 1], 3, 7, 737.7971530380617, 5.2500000000001705, true, "Polyline", 8, 2, 0, false, 0, 7, 0, [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, -5.250000000059116, 0, 0, 1], 0, 0, true, [0, -1, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 8.881784197001252e-16, 881.5, 0, 1], 0, 2, 4, [5.250000000059116, 0], 0, [743.0471530381208, 0], 0, [743.0471530381208, 7], 0, [5.250000000059117, 7], 0, true, 0, 3, 6, 1, 0.15, 0, 0, [0, 0, 1, 0, 0, -1, 0, 0, 1, 0, 0, 0, 1166.6250332856093, 863.5, 0, 1], 3, 0, 0, 0, 0, 0, 10, 1, "立板", "", "", "", "", "", 0, 1, "三合一", 2, 0, "1", "1", "1", "1", "", "", "", 4, "三合一", "三合一", "三合一", "三合一", true, true, 0, 0, 0, 0, 0, 0, 0, 0, true, 0, 0], "basePt": { "x": 0, "y": 0, "z": 0 }, "ucs": [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1] };
let [br0, br1] = LoadBoardsFromFileData(d) as Board[];
let splitBrs = CuttingBoard(br0, [br1]);
splitBrs.push(br0);
for (let b of splitBrs)
{
expect(b.Volume).toMatchNumberSnapshot();
}
});
test('因为csg盒子缓存导致切割失败', () =>
{
let d =
{ "file": [3, "Board", 8, 2, 102, false, 1, 3, 0, [1, 0, 0, 0, 0, -7.320510347335801e-8, -0.9999999999999973, 0, 0, 0.9999999999999973, -7.320510347335801e-8, 0, 409.24927297668046, 407.2280547332194, 1479.0000010248652, 1], 0, 0, true, [1, 0, 0, 0, 0, -7.320510347335801e-8, -0.9999999999999973, 0, 0, 0.9999999999999973, -7.320510347335801e-8, 0, 409.24927297668046, 407.2280547332194, 1479.0000010248652, 1], 0, 3, 697, 772, 10, 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, [0, 697], 0, [772, 697], 0, [772, 0], 0, true, 0, 3, 1, 1, 1, 0, 0, 10, 2, "9mm背板竖纹", "未命名", "通用-标准柜", "", "紫竹金丝-颗粒", "", 0, 0, "无效配置", 2, 4, 0, 0, 0, 0, "0", "0", "0", "0", "", "", "", 4, null, null, null, null, true, true, 0, 0, 0, 0, 0, 0, 0, 0, true, 0, 0, "Board", 8, 2, 100, false, 1, 11, 0, [-7.320510347335801e-8, -0.9999999999999973, 0, 0, -7.320510347335781e-8, 5.358987174545053e-15, -0.9999999999999973, 0, 0.9999999999999947, -7.320510347335781e-8, -7.320510347335801e-8, 0, 1177.2493689766807, 437.2280244986586, 2200.000001317686, 1], 0, 0, true, [-7.320510347335801e-8, -0.9999999999999973, 0, 0, -7.320510347335781e-8, 5.358987174545053e-15, -0.9999999999999973, 0, 0.9999999999999947, -7.320510347335781e-8, -7.320510347335801e-8, 0, 1177.2493689766807, 437.2280244986586, 2200.000001317686, 1], 0, 3, 2200, 475.70001220703125, 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, [0, 2200], 0, [475.70001220703125, 2200], 0, [475.70001220703125, 0], 0, true, 0, 3, 1, 1, 1, 0, 0, 10, 1, "侧板(侧包顶底)", "未命名", "通用-标准柜", "", "紫竹金丝-颗粒", "", 0, 0, "无效配置", 2, 4, 1, 1, 1, 1, "1", "1", "1", "1", "", "", "", 4, "不排", "不排", "不排", "不排", true, true, 0, 0, 0, 0, 0, 0, 0, 0, true, 0, 0, "Board", 8, 2, 101, false, 1, 2, 0, [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 413.24927297668046, -36.471975766780574, 768.0000006588398, 1], 0, 0, true, [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 413.24927297668046, -36.471975766780574, 768.0000006588398, 1], 0, 3, 473.70001220703125, 764, 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, [0, 473.70001220703125], 0, [764, 473.70001220703125], 0, [764, 0], 0, true, 0, 3, 1, 1, 1, 0, 0, 10, 0, "层板", "未命名", "通用-标准柜", "", "紫竹金丝-颗粒", "", 1, 1, "**多种**", 2, 4, 1, 1, 1, 1, "1", "1", "1", "1", "", "", "", 4, "三合一", "不排", "三合一", "不排", true, true, 0, 0, 0, 0, 0, 0, 0, 0, true, 0, 0], "basePt": { "x": 409.24927297668046, "y": -38.47198902606323, "z": 0 }, "ucs": [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1] };
let [br0, br1, br2] = LoadBoardsFromFileData(d) as Board[];
br1.Subtract([br0]);
br2.Subtract([br0]);
expect(br2.Grooves.length).toBe(1);
});
test('全深槽切割问题', () =>
{
let d = { "file": [2, "Board", 10, 2, 100, 0, 1, 1, 71, [1, 0, 0, 0, 0, 1.0000000000000098, 3.084338340286763e-14, 0, 0, -3.084338340286763e-14, 1.0000000000000098, 0, 596.6794582391158, 102.99999999756074, 75.6207674946636, 1], 0, 0, 1, [1, 0, 0, 0, 0, 6.123233995736766e-17, -1, 0, 0, 1, 6.123233995736766e-17, 0, 596.6794582391158, 103, 75.62076749454718, 1], 0, 0, 1, 3, 393.9999999999998, 797, 18, true, "Polyline", 10, 2, 0, 0, 0, 7, 71, [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 8.881784197001252e-16, -1.936228954946273e-13, 0, 1], 0, 0, 1, [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 8.881784197001252e-16, -1.936228954946273e-13, 0, 1], 0, 0, 1, 2, 4, [-8.881784197001252e-16, 1.936228954946273e-13], 0, [797, 1.936228954946273e-13], 0, [797, 394], 0, [-8.881784197001252e-16, 394], 0, true, 1, 3, 93.00000000001455, 17.00000000001819, 18, true, "Polyline", 10, 2, 0, 0, 0, 7, 71, [1.0000000000001201, -1.7525442562582856e-13, 1.673163309997577e-13, 0, 1.7753038282631092e-13, 1.0000000000001235, -1.5365486660814098e-13, 0, -1.650403737992705e-13, 1.5593082380861732e-13, 1.0000000000000882, 0, -13190.258353589701, -1158.6326927115874, -1.097593506199756e-9, 1], 0, 0, 1, [1.0000000000001201, -1.7525442562582856e-13, 1.673163309997577e-13, 0, 1.7753038282631092e-13, 1.0000000000001235, -1.5365486660814098e-13, 0, -1.650403737992705e-13, 1.5593082380861732e-13, 1.0000000000000882, 0, -13190.258353589701, -1158.6326927115874, -1.097593506199756e-9, 1], 0, 0, 1, 2, 4, [13190.258353590443, 1158.6326927115442], 0, [13207.258353590443, 1158.6326927115442], 0, [13207.258353590443, 1251.6326927115442], 0, [13190.258353590443, 1251.6326927115442], 0, true, 0, 3, 0, 0, 0, 0, 0, [6.123233995736766e-17, -1, -6.123233995736766e-17, 0, 0.9999999999999998, 6.123233995736765e-17, 3.749399456654643e-33, 0, 0, -6.123233995736765e-17, 0.9999999999999998, 0, 947.1794582391158, 455.49999999848706, 75.62076749559492, 1], 3, 0, 0, 0, 0, 0, 19, 2, "下开门板", "一楼", "榻榻米", "8001木纹-49尺", "颗粒板", "8001木纹", 0, 0, "不排", 2, 0, "1.1", "1.1", "1.1", "1.1", "", "", "", 4, "不排", "不排", "不排", "不排", false, false, 0, 0, 0, 0, 0, 0, 0, 4, true, 0, 0, null, 0, 0, "", "", "", "", 0, false, 0, "", "Board", 10, 2, 102, 0, 1, 2, 71, [1, 0, 0, 0, 0, 1, 6.123233995736766e-17, 0, 0, -6.123233995736766e-17, 1, 0, 93.67945823923219, 0, 75.62076749454718, 1], 0, 0, 1, [1, 0, 0, 0, 0, 6.123233995736766e-17, -1, 0, 0, 1, 6.123233995736766e-17, 0, 136.67945823911577, 464.49999999988404, 75.62076749454718, 1], 0, 0, 1, 3, 820, 1710, 18, true, "Polyline", 10, 2, 0, 0, 0, 7, 71, [1, 0, 0, 0, 0, 1, -6.123233995736766e-17, 0, 0, 6.123233995736766e-17, 1, 0, 0, 820, 0, 1], 0, 0, 1, [1, 0, 0, 0, 0, 1, -6.123233995736766e-17, 0, 0, 6.123233995736766e-17, 1, 0, -698125.606380914, 2305.459016393378, 527368.1919552165, 1], 0, 0, 1, 2, 4, [0, -820], 0, [1710, -820], 0, [1710, 0], 0, [0, 0], 0, true, 1, 3, 400.00008626629364, 803.0000003199303, 18, false, "Polyline", 10, 2, 0, 0, 0, 7, 71, [1, 0, 0, 0, 0, 1, -6.123233995736766e-17, 0, 0, 6.123233995736766e-17, 1, 0, 3.0000003222945804, 397.00008626629364, 1.8369701987210297e-16, 1], 0, 0, 1, [1, 0, 0, 0, 0, 1, -6.123233995736766e-17, 0, 0, 6.123233995736766e-17, 1, 0, -698625.6063805915, 2205.4591026621074, 527368.1919552165, 1], 0, 0, 1, 2, 4, [-3.0000003222945804, -397.00000000000404], 0, [799.9885837696728, -397.00008626629364], 0, [799.9999999976358, 2.999913733709931], 0, [-2.9999999999999982, 3], 0, true, 0, 3, 0, 0, 0, 0, 0, [1, 0, 0, 0, 0, 1, 6.123233995736766e-17, 0, 0, -6.123233995736766e-17, 1, 0, 593.6794579167617, 99.99991373127068, 75.62076749454718, 1], 3, 0, 0, 0, 0, 0, 19, 2, "封板-封边", "一楼", "榻榻米", "8001木纹-49尺", "颗粒板", "8001木纹", 1, 1, "三合一", 2, 0, "1.1", "1.1", "1.1", "1.1", "", "", "", 4, "三合一", "三合一", "三合一", "三合一", false, true, 0, 0, 0, 0, 0, 0, 0, 0, true, 0, 0, null, 0, 0, "", "", "", "", 0, false, 0, ""], "basePt": { "x": 93.67945823923219, "y": -1.102182119232618e-15, "z": 75.62076749454718 }, "ucs": [0, 1, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 1] };
let brs = LoadBoardsFromFileData(d);
let br = brs.shift();
let splitBrs = CuttingBoard(br, brs);
splitBrs.push(br);
expect(splitBrs.length).toBe(1);
for (let b of splitBrs)
{
expect(b.Grooves.length).toMatchNumberSnapshot();
expect(b.Volume).toMatchNumberSnapshot();
}
});
test('关联全深槽切割', () =>
{
let d = { "file": [2, "Board", 10, 2, 109, 0, 1, 11, 71, [0, 1, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 6677.789053314925, -148.15757410553215, 0, 1], 108, 0, 1, [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 6677.789053314925, -148.15757410553215, 0, 1], 0, 0, 1, 3, 2000, 600, 18, true, "Polyline", 10, 2, 0, 0, 0, 7, 71, [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1], 0, 0, 1, [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1], 0, 0, 1, 2, 4, [0, 0], 0, [600, 0], 0, [600, 2000], 0, [0, 2000], 0, true, 0, 3, 0, 0, 0, 0, 1, 112, 19, 1, "左侧板", "主卧", "下柜", "", "", "", 0, 0, "三合一", 2, 0, "1", "1", "1", "1", "", "", "", 4, "三合一", "三合一", "三合一", "三合一", true, true, 0, 0, 0, 0, 0, 0, 0, 0, true, 0, 0, null, 0, 0, "", "", "", "", 0, false, 0, "", "Board", 10, 2, 112, 0, 1, 3, 71, [1, 0, 0, 0, 0, 0, 1, 0, 0, -1, 0, 0, 6690.789053314925, 433.84242589446785, -5, 1], 111, 0, 1, [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 6695.789053314925, -148.15757410553215, 0, 1], 0, 0, 1, 3, 2010, 1174, 9, true, "Polyline", 10, 2, 0, 0, 0, 7, 71, [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1], 0, 0, 1, [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1], 0, 0, 1, 2, 4, [0, 0], 0, [1174, 0], 0, [1174, 2010], 0, [0, 2010], 0, true, 0, 3, 6, 1, 1, 2, 109, 110, 0, 19, 2, "薄背板", "主卧", "下柜", "", "", "", 0, 1, "不排", 2, 0, "0", "0", "0", "0", "", "", "", 4, "不排", "不排", "不排", "不排", false, false, 1, "11", "11", 0, 0, 0, 0, 0, 0, 0, true, 0, 0, null, 0, 0, "", "", "", "", 0, false, 0, ""], "basePt": { "x": 6677.789053314925, "y": -148.15757410553215, "z": -5 }, "ucs": [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1] };
let brs = LoadBoardsFromFileData(d);
let br = brs.shift();
let splitBrs = CuttingBoard(br, brs);
splitBrs.push(br);
expect(splitBrs.length).toBe(1);
for (let b of splitBrs)
{
expect(b.Grooves.length).toMatchNumberSnapshot();
expect(b.Volume).toMatchNumberSnapshot();
}
});