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__/Board/ArcBoardSubtract.test.ts

232 lines
40 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 { Board } from "../../src/DatabaseServices/Entity/Board";
import { LoadEntityFromFileData } from "../Utils/LoadEntity.util";
// 测试命令(用于复制)npm run test -- ArcBoardSubtract.test.ts
test("刀:普通板 肉:圆弧板 结果:切断", () =>
{
const d1 = { "file": [1, "Board", 10, 2, 100, 0, 1, 2, 71, [0, 1, 0, 0, -1, 0, 0, 0, 0, 0, 1, 0, 2844.615760812303, 714.0686896238476, 0, 1], 0, 0, 1, [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 2844.615760812303, 714.0686896238476, 0, 1], 0, 0, 1, 3, 600, 1200, 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, [1200, 0], 0, [1200, 600], 0, [0, 600], 0, true, 0, 3, 0, 0, 0, 0, 0, 20, 0, "层板", "", "", "", "", "", 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, "", 0], "basePt": { "x": 2244.615760812303, "y": 714.0686896238476, "z": 0 }, "ucs": [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 2376.0621081759596, -839.9555225862432, 600, 1] };
const d2 = { "file": [1, "Board", 10, 2, 970, 0, 1, 11, 71, [0, 1, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 2844.615760812303, 1314.068689623848, -582, 1], 969, 0, 1, [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 2844.615760812303, 1314.068689623848, -582, 1], 0, 0, 1, 3, 1200, 731.1016555542986, 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, [731.1016555542986, 0], 0, [731.1016555542986, 1200], 0, [0, 1200], 0, true, 0, 3, 0, 0, 0, 0, 0, 20, 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, "Polyline", 10, 2, 0, 0, 1, 7, 71, [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1], 0, 0, 1, [0, 1, 0, 0, 1, 0, 0, 0, 0, 0, -1, 0, -2108.7625671748674, -2844.615760812303, 0, 1], 0, 0, 1, 2, 2, [0, 0], -0.5052943970699916, [0, -600], 0, false, 0, 0, true, 2, -1, 0, 6, 6, 2, 0, 0, 0, 3, 0, 0, 731.10166, 6, 6, 2, 0, 0, 0, 3, 0, 0], "basePt": { "x": 2230.124977120897, "y": 1314.0686896238476, "z": -582 }, "ucs": [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 2376.0621081759596, -839.9555225862432, 600, 1] };
/** 普通板(高:600, 宽:1200, 厚:18 */
const br1 = LoadEntityFromFileData(d1)[0] as Board;
/** 圆弧板(高:1200, 宽:731.1, 厚:18 */
const br2 = LoadEntityFromFileData(d2)[0] as Board;
// 普通切圆弧,在中点处切割
br2.Subtract([br1]);
expect(br2.Height).toBe(582);
expect(br2.Grooves.length).toBe(0);
});
test("刀:普通板 肉:圆弧板 结果:局部挖穿", () =>
{
const d1 = { "file": [1, "Board", 10, 2, 1010, 0, 1, 2, 71, [0, 1, 0, 0, -1, 0, 0, 0, 0, 0, 1, 0, 2844.6157667616917, 2500.24935630908, 0, 1], 0, 0, 1, [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 2844.6157667616917, 2500.24935630908, 0, 1], 0, 0, 1, 3, 600, 1200, 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, [1200, 0], 0, [1200, 600], 0, [0, 600], 0, true, 0, 3, 0, 0, 0, 0, 0, 20, 0, "层板", "", "", "", "", "", 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, "", 0], "basePt": { "x": 2244.6157667616917, "y": 2500.24935630908, "z": 0 }, "ucs": [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1] };
const d2 = { "file": [1, "Board", 10, 2, 1011, 0, 1, 11, 71, [0, 1, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 2844.6157667616917, 2375.1560164326684, -582, 1], 0, 0, 1, [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 2844.6157667616917, 2375.1560164326684, -582, 1], 0, 0, 1, 3, 1200, 731.1016555542986, 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, [731.1016555542986, 0], 0, [731.1016555542986, 1200], 0, [0, 1200], 0, true, 0, 3, 0, 0, 0, 0, 0, 20, 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, "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, [0, 1, 0, 0, 1, 0, 0, 0, 0, 0, -1, 0, -2108.7625671748674, -2844.615760812303, 0, 1], 0, 0, 1, 2, 2, [0, 0], -0.5052943970699916, [0, -600], 0, false, 0, 0, true, 2, -1, 0, 6, 6, 2, 0, 0, 0, 3, 0, 0, 731.10166, 6, 6, 2, 0, 0, 0, 3, 0, 0], "basePt": { "x": 2230.1249830702855, "y": 2375.156016432668, "z": -582 }, "ucs": [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1] };
/** 普通板(高:600, 宽:1200, 厚:18 */
const br1 = LoadEntityFromFileData(d1)[0] as Board;
/** 圆弧板(高:1200, 宽:731.1, 厚:18 */
const br2 = LoadEntityFromFileData(d2)[0] as Board;
// 普通切圆弧,在中点处切割
br2.Subtract([br1]);
expect(br2.Height).toBe(1200);
expect(br2.Grooves.length).toBe(1);
expect(br2.Grooves[0].Width).toBeCloseTo(376, 0);
expect(br2.Grooves[0].Height).toBe(18);
expect(br2.Grooves[0].Thickness).toBe(18);
});
test("刀:普通板 肉:圆弧板 切了又切 结果:不变", () =>
{
const d1 = { "file": [1, "Board", 10, 2, 1010, 0, 1, 2, 71, [0, 1, 0, 0, -1, 0, 0, 0, 0, 0, 1, 0, 2844.6157667616917, 2500.24935630908, 0, 1], 0, 0, 1, [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 2844.6157667616917, 2500.24935630908, 0, 1], 0, 0, 1, 3, 600, 1200, 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, [1200, 0], 0, [1200, 600], 0, [0, 600], 0, true, 0, 3, 0, 0, 0, 0, 0, 20, 0, "层板", "", "", "", "", "", 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, "", 0], "basePt": { "x": 2244.6157667616917, "y": 2500.24935630908, "z": 0 }, "ucs": [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1] };
const d2 = { "file": [1, "Board", 10, 2, 1011, 0, 1, 11, 71, [0, 1, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 2844.6157667616917, 2375.1560164326684, -582, 1], 0, 0, 1, [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 2844.6157667616917, 2375.1560164326684, -582, 1], 0, 0, 1, 3, 1200, 731.1016555542986, 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, [731.1016555542986, 0], 0, [731.1016555542986, 1200], 0, [0, 1200], 0, true, 0, 3, 0, 0, 0, 0, 0, 20, 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, "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, [0, 1, 0, 0, 1, 0, 0, 0, 0, 0, -1, 0, -2108.7625671748674, -2844.615760812303, 0, 1], 0, 0, 1, 2, 2, [0, 0], -0.5052943970699916, [0, -600], 0, false, 0, 0, true, 2, -1, 0, 6, 6, 2, 0, 0, 0, 3, 0, 0, 731.10166, 6, 6, 2, 0, 0, 0, 3, 0, 0], "basePt": { "x": 2230.1249830702855, "y": 2375.156016432668, "z": -582 }, "ucs": [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1] };
/** 普通板(高:600, 宽:1200, 厚:18 */
const br1 = LoadEntityFromFileData(d1)[0] as Board;
/** 圆弧板(高:1200, 宽:731.1, 厚:18 */
const br2 = LoadEntityFromFileData(d2)[0] as Board;
// 普通切圆弧,在中点处切割
br2.Subtract([br1]);
expect(br2.Height).toBe(1200);
expect(br2.Grooves.length).toBe(1);
expect(br2.Grooves[0].Width).toBeCloseTo(376, 0);
expect(br2.Grooves[0].Height).toBe(18);
expect(br2.Grooves[0].Thickness).toBe(18);
br2.Subtract([br1]);
expect(br2.Height).toBe(1200);
expect(br2.Grooves.length).toBe(1);
expect(br2.Grooves[0].Width).toBeCloseTo(376, 0);
expect(br2.Grooves[0].Height).toBe(18);
expect(br2.Grooves[0].Thickness).toBe(18);
});
test("刀:圆弧板 肉:普通板 结果:切断", () =>
{
const d1 = { "file": [1, "Board", 10, 2, 100, 0, 1, 2, 71, [0, 1, 0, 0, -1, 0, 0, 0, 0, 0, 1, 0, 2844.615760812303, 714.0686896238476, 0, 1], 0, 0, 1, [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 2844.615760812303, 714.0686896238476, 0, 1], 0, 0, 1, 3, 600, 1200, 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, [1200, 0], 0, [1200, 600], 0, [0, 600], 0, true, 0, 3, 0, 0, 0, 0, 0, 20, 0, "层板", "", "", "", "", "", 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, "", 0], "basePt": { "x": 2244.615760812303, "y": 714.0686896238476, "z": 0 }, "ucs": [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 2376.0621081759596, -839.9555225862432, 600, 1] };
const d2 = { "file": [1, "Board", 10, 2, 970, 0, 1, 11, 71, [0, 1, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 2844.615760812303, 1314.068689623848, -582, 1], 969, 0, 1, [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 2844.615760812303, 1314.068689623848, -582, 1], 0, 0, 1, 3, 1200, 731.1016555542986, 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, [731.1016555542986, 0], 0, [731.1016555542986, 1200], 0, [0, 1200], 0, true, 0, 3, 0, 0, 0, 0, 0, 20, 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, "Polyline", 10, 2, 0, 0, 1, 7, 71, [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1], 0, 0, 1, [0, 1, 0, 0, 1, 0, 0, 0, 0, 0, -1, 0, -2108.7625671748674, -2844.615760812303, 0, 1], 0, 0, 1, 2, 2, [0, 0], -0.5052943970699916, [0, -600], 0, false, 0, 0, true, 2, -1, 0, 6, 6, 2, 0, 0, 0, 3, 0, 0, 731.10166, 6, 6, 2, 0, 0, 0, 3, 0, 0], "basePt": { "x": 2230.124977120897, "y": 1314.0686896238476, "z": -582 }, "ucs": [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 2376.0621081759596, -839.9555225862432, 600, 1] };
/** 普通板(高:600, 宽:1200, 厚:18 */
const br1 = LoadEntityFromFileData(d1)[0] as Board;
/** 圆弧板(高:1200, 宽:731.1, 厚:18 */
const br2 = LoadEntityFromFileData(d2)[0] as Board;
// 圆弧切普通,在中点处切割
br1.Subtract([br2]);
expect(br1.Width).toBeCloseTo(751.59, 0.01);
expect(br1.Grooves.length).toBe(0);
});
test("刀:圆弧板 肉:普通板 结果:挖槽", () =>
{
const d1 = { "file": [1, "Board", 10, 2, 1008, 0, 1, 2, 71, [0, 1, 0, 0, -1, 0, 0, 0, 0, 0, 1, 0, 3918.3533328726858, 854.8219012550192, 0, 1], 0, 0, 1, [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 3918.3533328726858, 854.8219012550192, 0, 1], 0, 0, 1, 3, 600, 1200, 18, true, "Polyline", 10, 2, 0, 0, 0, 7, 0, [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, [1200, 0], 0, [1200, 600], 0, [0, 600], 0, true, 1, 3, 600.0000000000002, 169.58831912099754, 9.680464072488007, false, "Polyline", 10, 2, 0, 0, 0, 7, 0, [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, -600.0000000000002, 1.7053025658242404e-13, 0, 1], 0, 0, 1, [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, -600.0000000000002, 1.7053025658242404e-13, 0, 1], 0, 0, 1, 2, 4, [600.0000000000005, 600], -0.5052943970699916, [600.0000000000005, 0], 0, [629.1535240575996, -5.684341886080802e-14], 0.4681159835446612, [629.1535240575993, 600], 0, true, 0, 3, 0, 0, 0, 0, 0, [0, 1, 0, 0, -1, 0, 0, 0, 0, 0, 1, 0, 3918.3533328726858, 1454.8219012550194, 8.319535927511993, 1], 3, 0, 0, 0, 0, 0, 20, 0, "层板", "", "", "", "", "", 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, "", 0], "basePt": { "x": 3318.3533328726858, "y": 854.8219012550192, "z": 0 }, "ucs": [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 2376.0621081759596, -839.9555225862432, 600, 1] };
const d2 = { "file": [1, "Board", 10, 2, 1009, 0, 1, 11, 71, [0, 1, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 3918.3533328726858, 1454.8219012550196, 8.319535927511993, 1], 0, 0, 1, [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 3918.3533328726858, 1454.8219012550196, 8.319535927511993, 1], 0, 0, 1, 3, 1200, 731.1016555542986, 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, [731.1016555542986, 0], 0, [731.1016555542986, 1200], 0, [0, 1200], 0, true, 0, 3, 0, 0, 0, 0, 0, 20, 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, "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, [0, 1, 0, 0, 1, 0, 0, 0, 0, 0, -1, 0, -2108.7625671748674, -2844.615760812303, 0, 1], 0, 0, 1, 2, 2, [0, 0], -0.5052943970699916, [0, -600], 0, false, 0, 0, true, 2, -1, 0, 6, 6, 2, 0, 0, 0, 3, 0, 0, 731.10166, 6, 6, 2, 0, 0, 0, 3, 0, 0], "basePt": { "x": 3303.8625491812795, "y": 1454.8219012550192, "z": 8.319535927511993 }, "ucs": [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 2376.0621081759596, -839.9555225862432, 600, 1] };
/** 普通板(高:600, 宽:1200, 厚:18 */
const br1 = LoadEntityFromFileData(d1)[0] as Board;
/** 圆弧板(高:1200, 宽:731.1, 厚:18 */
const br2 = LoadEntityFromFileData(d2)[0] as Board;
// 圆弧切普通,在中点处切割
br1.Subtract([br2]);
expect(br1.Width).toBe(1200);
expect(br1.Grooves.length).toBe(1);
expect(br1.Grooves[0].Width).toBeCloseTo(169.58, 0.01);
expect(br1.Grooves[0].Height).toBeCloseTo(600, 0.01);
expect(br1.Grooves[0].Thickness).toBeCloseTo(9.68, 0.01);
});
test("刀:圆弧板 肉:普通板 结果:局部挖槽", () =>
{
const d1 = { "file": [1, "Board", 10, 2, 1012, 0, 1, 2, 71, [0, 1, 0, 0, -1, 0, 0, 0, 0, 0, 1, 0, 3932.844116564092, -724.8340749354102, 0, 1], 0, 0, 1, [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 3932.844116564092, -724.8340749354102, 0, 1], 0, 0, 1, 3, 600, 1200, 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, [1200, 0], 0, [1200, 600], 0, [0, 600], 0, true, 0, 3, 0, 0, 0, 0, 0, 20, 0, "层板", "", "", "", "", "", 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, "", 0], "basePt": { "x": 3332.844116564092, "y": -724.8340749354102, "z": 0 }, "ucs": [0, 1, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 1] };
const d2 = { "file": [1, "Board", 10, 2, 1013, 0, 1, 11, 71, [0, 1, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 3932.844116564092, -124.83407493540972, 8.319535927511993, 1], 0, 0, 1, [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 3932.844116564092, -124.83407493540972, 8.319535927511993, 1], 0, 0, 1, 3, 1200.0000000000002, 731.1016555542988, 18, false, "Polyline", 10, 2, 0, 0, 0, 7, 71, [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 731.1016555542988, 1200.0000000000002, 0, 1], 0, 0, 1, [0, 0, 1, 0, 1, 0, 0, 0, 0, 1, 0, 0, -2416.101580598777, -1719.742665179213, 0, 1], 0, 0, 1, 2, 8, [-731.1016555542988, 0], 0, [-731.1016555542988, -1200.0000000000002], 0, [-554.9480555542982, -1200.0000000000002], 0, [-435.6008555542985, -958.6773333333331], 0, [-275.9336555542982, -958.6773333333331], 0, [-163.03765555429845, -1200.0000000000002], 0, [0, -1200.0000000000002], 0, [0, 0], 0, true, 0, 3, 0, 0, 0, 0, 0, 20, 1, "左侧板", "主卧", "下柜", "", "", "", 0, 0, "三合一", 2, 8, 1, 1, 1, 1, 1, 1, 1, 1, "1", "1", "1", "1", "", "", "", 8, "三合一", "三合一", "三合一", "三合一", "三合一", "三合一", "三合一", "三合一", true, true, 0, 0, 0, 0, 0, 0, 0, 0, true, 0, 0, null, 0, 0, "", "", "", "", 8, { "description": "" }, { "description": "" }, { "description": "" }, { "description": "" }, { "description": "" }, { "description": "" }, { "description": "" }, { "description": "" }, false, 0, "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, [0, 1, 0, 0, 1, 0, 0, 0, 0, 0, -1, 0, -2108.7625671748674, -2844.615760812303, 0, 1], 0, 0, 1, 2, 2, [0, 0], -0.5052943970699916, [0, -600], 0, false, 0, 0, true, 2, -1, 0, 6, 6, 2, 0, 0, 0, 3, 0, 0, 731.10166, 6, 6, 2, 0, 0, 0, 3, 0, 0], "basePt": { "x": 3318.3533328726858, "y": -124.83409721823728, "z": 8.319535927512192 }, "ucs": [0, 1, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 1] };
/** 普通板(高:600, 宽:1200, 厚:18 */
const br1 = LoadEntityFromFileData(d1)[0] as Board;
/** 圆弧异形版(高:1200, 宽:731.1, 厚:18 */
const br2 = LoadEntityFromFileData(d2)[0] as Board;
// 圆弧切普通,在中点处切割
br1.Subtract([br2]);
expect(br1.Width).toBe(1200);
expect(br1.Grooves.length).toBe(2);
expect(br1.Grooves[0].Width).toBeCloseTo(120.48, 0.01);
expect(br1.Grooves[0].Height).toBeCloseTo(119.12, 0.01);
expect(br1.Grooves[0].Thickness).toBeCloseTo(9.68, 0.01);
expect(br1.Grooves[1].Width).toBeCloseTo(126.77, 0.01);
expect(br1.Grooves[1].Height).toBeCloseTo(130.37, 0.01);
expect(br1.Grooves[1].Thickness).toBeCloseTo(9.68, 0.01);
});
test("刀:圆弧板 肉:普通板 切了又切 结果:不变", () =>
{
const d1 = { "file": [1, "Board", 10, 2, 1012, 0, 1, 2, 71, [0, 1, 0, 0, -1, 0, 0, 0, 0, 0, 1, 0, 3932.844116564092, -724.8340749354102, 0, 1], 0, 0, 1, [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 3932.844116564092, -724.8340749354102, 0, 1], 0, 0, 1, 3, 600, 1200, 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, [1200, 0], 0, [1200, 600], 0, [0, 600], 0, true, 0, 3, 0, 0, 0, 0, 0, 20, 0, "层板", "", "", "", "", "", 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, "", 0], "basePt": { "x": 3332.844116564092, "y": -724.8340749354102, "z": 0 }, "ucs": [0, 1, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 1] };
const d2 = { "file": [1, "Board", 10, 2, 1013, 0, 1, 11, 71, [0, 1, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 3932.844116564092, -124.83407493540972, 8.319535927511993, 1], 0, 0, 1, [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 3932.844116564092, -124.83407493540972, 8.319535927511993, 1], 0, 0, 1, 3, 1200.0000000000002, 731.1016555542988, 18, false, "Polyline", 10, 2, 0, 0, 0, 7, 71, [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 731.1016555542988, 1200.0000000000002, 0, 1], 0, 0, 1, [0, 0, 1, 0, 1, 0, 0, 0, 0, 1, 0, 0, -2416.101580598777, -1719.742665179213, 0, 1], 0, 0, 1, 2, 8, [-731.1016555542988, 0], 0, [-731.1016555542988, -1200.0000000000002], 0, [-554.9480555542982, -1200.0000000000002], 0, [-435.6008555542985, -958.6773333333331], 0, [-275.9336555542982, -958.6773333333331], 0, [-163.03765555429845, -1200.0000000000002], 0, [0, -1200.0000000000002], 0, [0, 0], 0, true, 0, 3, 0, 0, 0, 0, 0, 20, 1, "左侧板", "主卧", "下柜", "", "", "", 0, 0, "三合一", 2, 8, 1, 1, 1, 1, 1, 1, 1, 1, "1", "1", "1", "1", "", "", "", 8, "三合一", "三合一", "三合一", "三合一", "三合一", "三合一", "三合一", "三合一", true, true, 0, 0, 0, 0, 0, 0, 0, 0, true, 0, 0, null, 0, 0, "", "", "", "", 8, { "description": "" }, { "description": "" }, { "description": "" }, { "description": "" }, { "description": "" }, { "description": "" }, { "description": "" }, { "description": "" }, false, 0, "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, [0, 1, 0, 0, 1, 0, 0, 0, 0, 0, -1, 0, -2108.7625671748674, -2844.615760812303, 0, 1], 0, 0, 1, 2, 2, [0, 0], -0.5052943970699916, [0, -600], 0, false, 0, 0, true, 2, -1, 0, 6, 6, 2, 0, 0, 0, 3, 0, 0, 731.10166, 6, 6, 2, 0, 0, 0, 3, 0, 0], "basePt": { "x": 3318.3533328726858, "y": -124.83409721823728, "z": 8.319535927512192 }, "ucs": [0, 1, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 1] };
/** 普通板(高:600, 宽:1200, 厚:18 */
const br1 = LoadEntityFromFileData(d1)[0] as Board;
/** 圆弧异形版(高:1200, 宽:731.1, 厚:18 */
const br2 = LoadEntityFromFileData(d2)[0] as Board;
// 圆弧切普通,在中点处切割
br1.Subtract([br2]);
expect(br1.Width).toBe(1200);
expect(br1.Grooves.length).toBe(2);
expect(br1.Grooves[0].Width).toBeCloseTo(120.48, 0.01);
expect(br1.Grooves[0].Height).toBeCloseTo(119.12, 0.01);
expect(br1.Grooves[0].Thickness).toBeCloseTo(9.68, 0.01);
expect(br1.Grooves[1].Width).toBeCloseTo(126.77, 0.01);
expect(br1.Grooves[1].Height).toBeCloseTo(130.37, 0.01);
expect(br1.Grooves[1].Thickness).toBeCloseTo(9.68, 0.01);
br1.Subtract([br2]);
expect(br1.Width).toBe(1200);
expect(br1.Grooves.length).toBe(2);
expect(br1.Grooves[0].Width).toBeCloseTo(120.48, 0.01);
expect(br1.Grooves[0].Height).toBeCloseTo(119.12, 0.01);
expect(br1.Grooves[0].Thickness).toBeCloseTo(9.68, 0.01);
expect(br1.Grooves[1].Width).toBeCloseTo(126.77, 0.01);
expect(br1.Grooves[1].Height).toBeCloseTo(130.37, 0.01);
expect(br1.Grooves[1].Thickness).toBeCloseTo(9.68, 0.01);
});
test("刀:圆弧板 肉:普通板 斜切 结果:切断", () =>
{
const d1 = { "file": [1, "Board", 10, 2, 1515, 0, 1, 2, 71, [0, 1, 0, 0, -1, 0, 0, 0, 0, 0, 1, 0, 5079.387313671717, 782.5438387097381, 0, 1], 0, 0, 1, [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 5079.387313671717, 782.5438387097381, 0, 1], 0, 0, 1, 3, 600, 1200, 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, [1200, 0], 0, [1200, 600], 0, [0, 600], 0, true, 0, 3, 0, 0, 0, 0, 0, 20, 0, "层板", "", "", "", "", "", 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, "", 0], "basePt": { "x": 4479.387313671717, "y": 782.5438387097381, "z": 0 }, "ucs": [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1] };
const d2 = { "file": [1, "Board", 10, 2, 1516, 0, 1, 11, 71, [0, 0.9659258262890683, 0.25881904510252074, 0, 0, -0.25881904510252074, 0.9659258262890683, 0, 1, 0, 0, 0, 5079.387313671717, 1382.5438387097386, -582, 1], 0, 0, 1, [1, 0, 0, 0, 0, 0.9659258262890683, 0.25881904510252074, 0, 0, -0.25881904510252074, 0.9659258262890683, 0, 5079.387313671717, 1382.5438387097386, -582, 1], 0, 0, 1, 3, 1200, 731.1016555542986, 18, true, "Polyline", 10, 2, 0, 0, 0, 7, 0, [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, [731.1016555542986, 0], 0, [731.1016555542986, 1200], 0, [0, 1200], 0, true, 0, 3, 0, 0, 0, 0, 0, 20, 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, "Polyline", 10, 2, 0, 0, 0, 7, 0, [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1], 0, 0, 1, [0, 1, 0, 0, 1, 0, 0, 0, 0, 0, -1, 0, -2108.7625671748674, -2844.615760812303, 0, 1], 0, 0, 1, 2, 2, [0, 0], -0.5052943970699916, [0, -600], 0, false, 0, 0, true, 2, -1, 0, 6, 6, 2, 0, 0, 0, 3, 0, 0, 731.10166, 6, 6, 2, 0, 0, 0, 3, 0, 0], "basePt": { "x": 4464.89652998031, "y": 1071.9609845867133, "z": -582.0000000000001 }, "ucs": [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1] };
/** 普通板(高:600, 宽:1200, 厚:18 */
const br1 = LoadEntityFromFileData(d1)[0] as Board;
/** 圆弧板(高:1200, 宽:731.1, 厚:18 */
const br2 = LoadEntityFromFileData(d2)[0] as Board;
// 圆弧切普通二者比垂直多15°
br1.Subtract([br2]);
expect(br1.Width).toBeCloseTo(596, 0);
expect(br1.Grooves.length).toBe(0);
});
test("刀:圆弧板 肉:普通板 斜切 结果:切断", () =>
{
const d1 = { "file": [1, "Board", 10, 2, 102, 0, 1, 2, 71, [0, 1, 0, 0, -1, 0, 0, 0, 0, 0, 1, 0, 1723.1818533625922, -1442.355647612756, 582, 1], 0, 0, 1, [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 1723.1818533625922, -1442.355647612756, 582, 1], 0, 0, 1, 3, 600, 1200, 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, [1200, 0], 0, [1200, 600], 0, [0, 600], 0, true, 0, 3, 0, 0, 0, 0, 0, 20, 0, "层板", "", "", "", "", "", 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, "", 0], "basePt": { "x": 1123.1818533625922, "y": -1442.355647612756, "z": 582 }, "ucs": [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1] };
const d2 = { "file": [1, "Board", 10, 2, 103, 0, 1, 11, 71, [0, 0.788010753606722, 0.6156614753256583, 0, 0, -0.6156614753256583, 0.788010753606722, 0, 1, 0, 0, 0, 1723.1818533625922, -842.3556476127555, 5.684341886080802e-14, 1], 0, 0, 1, [1, 0, 0, 0, 0, 0.788010753606722, 0.6156614753256583, 0, 0, -0.6156614753256583, 0.788010753606722, 0, 1723.1818533625922, -842.3556476127555, 5.684341886080802e-14, 1], 0, 0, 1, 3, 1200, 731.1016555542986, 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, [731.1016555542986, 0], 0, [731.1016555542986, 1200], 0, [0, 1200], 0, true, 0, 3, 0, 0, 0, 0, 0, 20, 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, "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, [0, 1, 0, 0, 1, 0, 0, 0, 0, 0, -1, 0, -2108.7625671748674, -2844.615760812303, 0, 1], 0, 0, 1, 2, 2, [0, 0], -0.5052943970699916, [0, -600], 0, false, 0, 0, true, 2, -1, 0, 6, 6, 2, 0, 0, 0, 3, 0, 0, 731.10166, 6, 6, 2, 0, 0, 0, 3, 0, 0], "basePt": { "x": 1108.691069671186, "y": -1581.1494180035459, "z": -1.7063255140878815e-13 }, "ucs": [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1] };
/** 普通板(高:600, 宽:1200, 厚:18 */
const br1 = LoadEntityFromFileData(d1)[0] as Board;
/** 圆弧板(高:1200, 宽:731.1, 厚:18 */
const br2 = LoadEntityFromFileData(d2)[0] as Board;
// 圆弧切普通二者比垂直多38°
br1.Subtract([br2]);
expect(br1.Width).toBeCloseTo(324, 0);
expect(br1.Grooves.length).toBe(0);
});
test("刀:圆弧板 肉:普通板 平切 结果:切断", () =>
{
const d1 = { "file": [1, "Board", 10, 2, 1519, 0, 1, 2, 71, [0, 1, 0, 0, -1, 0, 0, 0, 0, 0, 1, 0, 2844.6157667616917, 3878.148959860686, 0, 1], 0, 0, 1, [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 2844.6157667616917, 3878.148959860686, 0, 1], 0, 0, 1, 3, 600, 1200, 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, [1200, 0], 0, [1200, 600], 0, [0, 600], 0, true, 0, 3, 0, 0, 0, 0, 0, 20, 0, "层板", "", "", "", "", "", 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, "", 0], "basePt": { "x": 2244.6157667616917, "y": 3878.148959860686, "z": 0 }, "ucs": [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1] };
const d2 = { "file": [1, "Board", 10, 2, 1520, 0, 1, 2, 71, [0, 1, 0, 0, -1, 0, 0, 0, 0, 0, 1, 0, 2844.6157667616917, 4397.2640276069515, -5.684341886080802e-14, 1], 0, 0, 1, [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 2844.6157667616917, 4397.2640276069515, -5.684341886080802e-14, 1], 0, 0, 1, 3, 600, 715.3786607514678, 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, [715.3786607514678, 0], 0, [715.3786607514678, 600], 0, [0, 600], 0, true, 0, 3, 0, 0, 0, 0, 0, 20, 0, "层板", "", "", "", "", "", 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, "Polyline", 10, 2, 0, 0, 1, 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, -2244.6157667616917, -5232.533515779765, 0, 1], 0, 0, 1, 2, 2, [0, 0], -0.4674291876096676, [600, 0], 0, false, 0, 0, true, 2, -1, 0, 6, 6, 2, 0, 0, 0, 3, 0, 0, 715.37866, 6, 6, 2, 0, 0, 0, 3, 0, 0], "basePt": { "x": 2244.6157667616917, "y": 4383.453943263995, "z": -4.263256414560601e-14 }, "ucs": [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1] };
/** 普通板(高:600, 宽:1200, 厚:18 */
const br1 = LoadEntityFromFileData(d1)[0] as Board;
/** 圆弧板(高:600, 宽:731.1, 厚:18 */
const br2 = LoadEntityFromFileData(d2)[0] as Board;
// 圆弧切普通,二者平行
br1.Subtract([br2]);
expect(br1.Width).toBeCloseTo(505, 0);
expect(br1.Grooves.length).toBe(0);
});
test("刀:圆弧异形板 肉:普通板 结果:局部挖槽", () =>
{
const d1 = { "file": [1, "Board", 10, 2, 1529, 0, 1, 2, 71, [0, 1, 0, 0, -1, 0, 0, 0, 0, 0, 1, 0, 5122.2705772876525, 3981.1323362110998, 18, 1], 0, 0, 1, [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 5122.2705772876525, 3981.1323362110998, 18, 1], 0, 0, 1, 3, 600, 1200, 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, [1200, 0], 0, [1200, 600], 0, [0, 600], 0, true, 0, 3, 0, 0, 0, 0, 0, 20, 0, "层板", "", "", "", "", "", 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, "", 0], "basePt": { "x": 4522.2705772876525, "y": 3981.1323362110998, "z": 18 }, "ucs": [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1] };
const d2 = { "file": [1, "Board", 10, 2, 1530, 0, 1, 11, 71, [0, 1, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 5122.2705772876525, 4581.132336211101, 26.319535927511993, 1], 0, 0, 1, [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 5122.2705772876525, 4581.132336211101, 26.319535927511993, 1], 0, 0, 1, 3, 1200.4834200687515, 731.1016555542983, 18, false, "Polyline", 10, 2, 0, 0, 0, 7, 0, [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 731.1016555542983, 1200.4834200687515, 0, 1], 0, 0, 1, [0, 0, 1, 0, 1, 0, 0, 0, 0, 1, 0, 0, -5468.647583582021, -111.55040157304632, 0, 1], 0, 0, 1, 2, 8, [-731.1016555542983, -1009.5238095238094], 0.43521583508822825, [-526.5628800440936, -1200], 0, [-365.5508277771496, -1200], 0.41421356237309503, [-185.48542533917862, -1019.9345975620581], -1.000000010997757, [-79.2812473910326, -1019.9345975620581], 0.9999999999999999, [0, -1019.9345975620581], 0, [0, 0], 0, [-731.1016555542983, 0], 0, true, 0, 3, 0, 0, 0, 0, 0, 20, 1, "左侧板", "主卧", "下柜", "", "", "", 0, 0, "三合一", 2, 3, 1, 1, 1, "1", "1", "1", "1", "", "", "", 8, "三合一", "三合一", "三合一", "三合一", "三合一", "三合一", "三合一", "三合一", true, true, 0, 0, 0, 0, 0, 0, 0, 0, true, 0, 0, null, 0, 0, "", "", "", "", 3, { "description": "" }, { "description": "" }, { "description": "" }, false, 0, "Polyline", 10, 2, 0, 0, 0, 7, 0, [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1], 0, 0, 1, [0, 1, 0, 0, 1, 0, 0, 0, 0, 0, -1, 0, -2108.7625671748674, -2844.615760812303, 0, 1], 0, 0, 1, 2, 2, [0, 0], -0.5052943970699916, [0, -600], 0, false, 0, 0, true, 2, -1, 0, 6, 6, 2, 0, 0, 0, 3, 0, 0, 731.10166, 6, 6, 2, 0, 0, 0, 3, 0, 0], "basePt": { "x": 4507.779793596246, "y": 4581.132313928273, "z": 26.522560493685546 }, "ucs": [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1] };
/** 普通板(高:600, 宽:1200, 厚:18 */
const br1 = LoadEntityFromFileData(d1)[0] as Board;
/** 圆弧板(高:1200.48, 宽:731.1, 厚:18 */
const br2 = LoadEntityFromFileData(d2)[0] as Board;
// 圆弧切普通,在中点处切割
br1.Subtract([br2]);
expect(br1.Width).toBe(1200);
expect(br1.Grooves.length).toBe(1);
expect(br1.Grooves[0].Width).toBeCloseTo(82.74, 0.01);
expect(br1.Grooves[0].Height).toBeCloseTo(275.55, 0.01);
expect(br1.Grooves[0].Thickness).toBeCloseTo(9.47, 0.01);
});
test("刀:圆弧异形板 肉:异形板 结果:局部挖槽", () =>
{
const d1 = { "file": [1, "Board", 10, 2, 1537, 0, 1, 2, 71, [0, 1, 0, 0, -1, 0, 0, 0, 0, 0, 1, 0, 6204.108299754569, 3981.1323362110998, 36, 1], 0, 0, 1, [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 6204.108299754569, 3981.1323362110998, 36, 1], 0, 0, 1, 3, 600, 1200.0001828615464, 18, false, "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, [0, -1, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, -3985.213968864163, 7389.822585468852, -36, 1], 0, 0, 1, 2, 7, [0, 0], 0, [1200, 0], 0, [1200, 103.40136054421782], 0, [1063.9455782312925, 174.149659863946], 0, [1063.9455782312925, 300], 0.9055783921271827, [1064.3809523809532, 600], 0, [0, 600], 0, true, 0, 3, 0, 0, 0, 0, 0, 20, 0, "层板", "", "", "", "", "", 0, 0, "三合一", 2, 7, 1, 1, 1, 1, 1, 1, 1, "1", "1", "1", "1", "", "", "", 7, "三合一", "三合一", "三合一", "三合一", "三合一", "三合一", "三合一", true, true, 0, 0, 0, 0, 0, 0, 0, 0, true, 0, 0, null, 0, 0, "", "", "", "", 7, { "description": "" }, { "description": "" }, { "description": "" }, { "description": "" }, { "description": "" }, { "description": "" }, { "description": "" }, false, 0, "", 0], "basePt": { "x": 5604.108299754569, "y": 3981.1323362110998, "z": 36 }, "ucs": [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 6204.108299754569, 3981.1323362110998, 36, 1] };
const d2 = { "file": [1, "Board", 10, 2, 1538, 0, 1, 11, 71, [0, 1, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 6204.108299754569, 4935.577903727245, 44.31953592751199, 1], 0, 0, 1, [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 6204.108299754569, 4935.577903727245, 44.31953592751199, 1], 0, 0, 1, 3, 1200.4834200687515, 731.1016555542983, 18, false, "Polyline", 10, 2, 0, 0, 0, 7, 0, [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 731.1016555542983, 1200.4834200687515, 0, 1], 0, 0, 1, [0, 0, 1, 0, 1, 0, 0, 0, 0, 1, 0, 0, -5468.647583582021, -111.55040157304632, 0, 1], 0, 0, 1, 2, 8, [-731.1016555542983, -1009.5238095238094], 0.43521583508822825, [-526.5628800440936, -1200], 0, [-365.5508277771496, -1200], 0.41421356237309503, [-185.48542533917862, -1019.9345975620581], -1.000000010997757, [-79.2812473910326, -1019.9345975620581], 0.9999999999999999, [0, -1019.9345975620581], 0, [0, 0], 0, [-731.1016555542983, 0], 0, true, 0, 3, 0, 0, 0, 0, 0, 20, 1, "左侧板", "主卧", "下柜", "", "", "", 0, 0, "三合一", 2, 3, 1, 1, 1, "1", "1", "1", "1", "", "", "", 8, "三合一", "三合一", "三合一", "三合一", "三合一", "三合一", "三合一", "三合一", true, true, 0, 0, 0, 0, 0, 0, 0, 0, true, 0, 0, null, 0, 0, "", "", "", "", 3, { "description": "" }, { "description": "" }, { "description": "" }, false, 0, "Polyline", 10, 2, 0, 0, 0, 7, 0, [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1], 0, 0, 1, [0, 1, 0, 0, 1, 0, 0, 0, 0, 0, -1, 0, -2108.7625671748674, -2844.615760812303, 0, 1], 0, 0, 1, 2, 2, [0, 0], -0.5052943970699916, [0, -600], 0, false, 0, 0, true, 2, -1, 0, 6, 6, 2, 0, 0, 0, 3, 0, 0, 731.10166, 6, 6, 2, 0, 0, 0, 3, 0, 0], "basePt": { "x": 5589.617516063163, "y": 4935.5778814444175, "z": 44.522560493685546 }, "ucs": [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 6204.108299754569, 3981.1323362110998, 36, 1] };
/** 普通板(高:600, 宽:1200, 厚:18 */
const br1 = LoadEntityFromFileData(d1)[0] as Board;
/** 圆弧板(高:1200.48, 宽:731.1, 厚:18 */
const br2 = LoadEntityFromFileData(d2)[0] as Board;
// 圆弧切普通,在中点处切割
br1.Subtract([br2]);
expect(br1.Width).toBeCloseTo(1200);
expect(br1.Grooves.length).toBe(2);
expect(br1.Grooves[0].Width).toBeCloseTo(55.62, 0.01);
expect(br1.Grooves[0].Height).toBeCloseTo(85.39, 0.01);
expect(br1.Grooves[0].Thickness).toBeCloseTo(8.46, 0.01);
expect(br1.Grooves[1].Width).toBeCloseTo(21.32, 0.01);
expect(br1.Grooves[1].Height).toBeCloseTo(44.80, 0.01);
expect(br1.Grooves[1].Thickness).toBeCloseTo(8.46, 0.01);
});
test("刀:圆弧板 肉:圆弧板 结果:切断", () =>
{
const d1 = { "file": [1, "Board", 11, 2, 1512, 0, 1, 11, 71, [0, 6.123233995736766e-17, 1, 0, 0, -1, 6.123233995736766e-17, 0, 1, 0, 0, 0, 6190.533374666166, 3776.6989303777405, 21.355782395544892, 1], 0, 0, 1, [1, 0, 0, 0, 0, 6.123233995736766e-17, 1, 0, 0, -1, 6.123233995736766e-17, 0, 6190.533374666166, 3776.6989303777405, 21.355782395544892, 1], 0, 0, 1, 0, 3, 1200, 731.1016555542986, 18, true, "Polyline", 11, 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, 0, 2, 4, [0, 0], 0, [731.1016555542986, 0], 0, [731.1016555542986, 1200], 0, [0, 1200], 0, true, 0, 3, 0, 0, 0, 0, 0, 22, 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, "Polyline", 11, 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, [0, 1, 0, 0, 1, 0, 0, 0, 0, 0, -1, 0, -2108.7625671748674, -2844.615760812303, 0, 1], 0, 0, 1, 0, 2, 2, [0, 0], -0.5052943970699916, [0, -600], 0, false, 0, 0, true, 2, -1, 0, 6, 6, 2, 0, 0, 0, 3, 0, 0, 731.10166, 6, 6, 2, 0, 0, 0, 3, 0, 0, 0], "basePt": { "x": 5576.04259097476, "y": 2576.6989303777405, "z": 21.355782395544523 }, "ucs": [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1] };
const d2 = { "file": [1, "Board", 11, 2, 1513, 0, 1, 3, 71, [1, 0, 0, 0, 0, 0, 1, 0, 0, -1, 0, 0, 5562.505561677293, 3188.562685125938, -567.9663264066833, 1], 0, 0, 1, [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 5562.505561677293, 3188.562685125938, -567.9663264066833, 1], 0, 0, 1, 0, 3, 1200, 742.5233768947737, 18, true, "Polyline", 11, 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, 0, 2, 4, [0, 0], 0, [742.5233768947737, 0], 0, [742.5233768947737, 1200], 0, [0, 1200], 0, true, 0, 3, 0, 0, 0, 0, 0, 22, 2, "背板", "", "", "", "", "", 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, "Polyline", 11, 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, -5562.505561677293, 3188.562685125938, 0, 1], 0, 0, 1, 0, 2, 2, [0, 0], 0.4532931428414304, [656.0556259777459, 4.547473508864641e-13], 0, false, 0, 1, true, 2, -1, 0, 6, 6, 2, 0, 0, 0, 3, 0, 0, 742.52338, 6, 6, 2, 0, 0, 0, 3, 0, 0, 0], "basePt": { "x": 5562.505561677293, "y": 3176.698930853477, "z": -567.9663264066833 }, "ucs": [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1] };
/** 肉-圆弧板(高:1200.48, 宽:731.1, 厚:18 */
const br1 = LoadEntityFromFileData(d1)[0] as Board;
/** 刀-圆弧板(高:1200.48, 宽:742.52, 厚:18 */
const br2 = LoadEntityFromFileData(d2)[0] as Board;
// 圆弧切圆弧,在中点处切割
br1.Subtract([br2]);
expect(br1.Height).toBeCloseTo(559.01);
expect(br1.Grooves.length).toBe(0);
});