diff --git a/__test__/Booloperate/BoardCutting.test.ts b/__test__/Booloperate/BoardCutting.test.ts index 0d6ea5e21..655609f18 100644 --- a/__test__/Booloperate/BoardCutting.test.ts +++ b/__test__/Booloperate/BoardCutting.test.ts @@ -33,3 +33,33 @@ test('板件与板件切割_分裂成多个', () => expect(b.Thickness).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.Width).toMatchNumberSnapshot(); + expect(b.Height).toMatchNumberSnapshot(); + expect(b.Thickness).toMatchNumberSnapshot(); + } + } + { + let [br1, br0] = LoadBoardsFromFileData(d) as Board[]; + let splitBrs = CuttingBoard(br0, [br1]); + splitBrs.push(br0); + for (let b of splitBrs) + { + expect(b.Width).toMatchNumberSnapshot(); + expect(b.Height).toMatchNumberSnapshot(); + expect(b.Thickness).toMatchNumberSnapshot(); + } + } +}); diff --git a/__test__/Booloperate/__snapshots__/BoardCutting.test.ts.snap b/__test__/Booloperate/__snapshots__/BoardCutting.test.ts.snap index 3cfdf82ed..d97ba9764 100644 --- a/__test__/Booloperate/__snapshots__/BoardCutting.test.ts.snap +++ b/__test__/Booloperate/__snapshots__/BoardCutting.test.ts.snap @@ -1,5 +1,29 @@ // Jest Snapshot v1, https://goo.gl/fbAQLP +exports[`斜切割 1`] = `"600.00000"`; + +exports[`斜切割 2`] = `"481.36498"`; + +exports[`斜切割 3`] = `"18.00000"`; + +exports[`斜切割 4`] = `"600.00000"`; + +exports[`斜切割 5`] = `"693.79059"`; + +exports[`斜切割 6`] = `"18.00000"`; + +exports[`斜切割 7`] = `"600.00000"`; + +exports[`斜切割 8`] = `"321.91319"`; + +exports[`斜切割 9`] = `"18.00000"`; + +exports[`斜切割 10`] = `"600.00000"`; + +exports[`斜切割 11`] = `"863.77964"`; + +exports[`斜切割 12`] = `"18.00000"`; + exports[`板件与板件切割_分裂成多个 1`] = `"600.00000"`; exports[`板件与板件切割_分裂成多个 2`] = `"435.90920"`; diff --git a/src/DatabaseServices/Extrude.ts b/src/DatabaseServices/Extrude.ts index e016fc716..58a240dc3 100644 --- a/src/DatabaseServices/Extrude.ts +++ b/src/DatabaseServices/Extrude.ts @@ -698,6 +698,7 @@ export class ExtureSolid extends Entity let yv = target.Normal; let zv = this.Normal; let xv = yv.clone().cross(zv); + yv.copy(zv).cross(xv); let m = new Matrix4().makeBasis(xv, yv, zv).copyPosition(this.OCS); let mi = new Matrix4().getInverse(m).multiply(this.OCS);