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__/Geometry/EdgeGeometry.test.ts

149 lines
33 KiB

import { Line } from "three";
import { ExtrudeGeometryBuilder } from "../../src/Geometry/ExtrudeMeshGeomBuilder/ExtrudeEdgeGeometry2";
import { RenderType } from "../../src/GraphicsSystem/RenderType";
import { LoadBoardsFromFileData } from "../Utils/LoadEntity.util";
test('EdgeGeometry生成', () =>
{
let d = [3, "Board", 3, 2, 101, false, 1, 11, 0, [0, 1, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 842.2974778978387, -349.77794462809106, 5.207248635008, 1], 2, 1200, 1287.9139521874604, 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, [1287.9139521874604, 0], 0, [1287.9139521874604, 1200], 0, [0, 1200], 0, true, 1, 2, 650.3947318524762, 368.7144637049523, 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, [2196.6813616549975, 289.76232632197764], 0, [2196.6813616549975, 755.7998263219777], 0.9999999999999999, true, 0, 3, 0, 0, 0, [0, 1, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 842.2974778978387, -132.52737566129053, 492.2690189409713, 1], 3, 0, 0, 0, 2, [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, -331.4882673815591, 22.964750159997493, 5.207248635008, 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, 211, false, 1, 2, 0, [0, 1, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 1743.9852053204086, 1058.889397823259, -54.29958601640169, 1], 2, 1230.761278665225, 896.6684244728249, 18, false, "Polyline", 3, 2, 0, false, 0, 7, 0, [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 5.684341886080802e-14, 30.761278665225063, 0, 1], 2, 6, [0, 0], 0, [300, 0], 1.44245572325029, [315.9503077287227, 816.1221829065471], 0, [600, 1200], 0, [300, 1200], 0.41421356237309503, [0, 900], 0, true, 1, 2, 385.96920000000006, 177.84615384615404, 10, false, "Polyline", 3, 2, 0, false, 0, 7, 0, [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, -422.15384615384596, -402.0513128205126, 0, 1], 2, 5, [597.7122651988514, 788.0205128205126], 0, [422.15384615384596, 788.0205128205126], 0, [422.15384615384596, 402.05131282051263], 0, [600, 402.0513128205126], 0, [599.9999999999998, 786.9320348416215], 0.0014989901540299988, true, 0, 3, 0, 0, 0, [0, 1, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 1751.9852053204086, 1481.043243977105, 378.51300546933595, 1], 3, 0, 0, 0, 2, [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, -17.633213176275603, 262.61914493865333, 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\":[]}", 0, 0, "Board", 3, 2, 212, false, 1, 2, 0, [0, 1, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 1111.9162051636208, 2117.9319139518834, -423.9845986472139, 1], 2, 484.63826594239083, 642.7439363026181, 18, false, "Polyline", 3, 2, 0, false, 0, 7, 0, [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 54.03714224287984, -40.88462318428341, 0, 1], 2, 6, [226.89796571085776, 338.3121692475904], 0, [248.97426264670497, 525.5228891266743], 0, [-54.03714224287984, 287.9783168893773], 0, [141.82369879876416, 40.88462318428341], 0, [588.7067940597382, 306.7620304373949], 0, [320.72013691164284, 378.99785818408446], 0, true, 1, 2, 63.40599363597872, 232.13273756151398, 18, false, "Polyline", 3, 2, 0, false, 0, 7, 0, [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, -58.35238007400439, -234.55749771884788, 0, 1], 2, 4, [236.13305395456487, 234.55749771884788], 0, [83.25375055383591, 272.608758187791], 0, [58.35238007400439, 297.9634913548266], 0, [290.48511763551835, 268.97109344254164], 0, true, 0, 3, 0, 0, 0, [0, 1, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 1111.9162051636208, 2230.3214362687672, -230.31172411264944, 1], 3, 0, 0, 0, 2, [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, -776.2476068199197, 3557.665244594688, -46.81305616698228, 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\":[]}", 0, 0];
let brs = LoadBoardsFromFileData(d);
for (let br of brs)
{
let line = br.GetDrawObjectFromRenderType(RenderType.Wireframe) as Line;
//@ts-ignore
expect(line.geometry.attributes.position.count).toMatchSnapshot();
}
});
test('EdgeGeometry生成2', () =>
{
let d = { "file": [1, "Board", 5, 2, 101, false, 1, 11, 0, [0, 1, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 3652.4820542036323, 5394.829497889616, 0, 1], 0, 0, 2, 577.5, 600, 18, true, "Polyline", 5, 2, 0, false, 0, 7, 0, [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 200, 0, 1], 0, 0, 2, 4, [0, -200], 0, [600, -200], 0, [600, 377.49999999999994], 0, [0, 377.5], 0, true, 1, 2, 9, 577.5, 10.759448803828036, true, "Polyline", 5, 2, 0, false, 0, 7, 0, [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1], 0, 0, 2, 4, [0, 0], 0, [577.5, 0], 0, [577.5, 9], 0, [0, 9], 0, true, 0, 3, 0, 0, 0, [0, 0, 1, 0, 0, -1, 0, 0, 1, 0, 0, 0, 3652.4820542036323, 5974.829497889616, 0, 1], 3, 0, 0, 0, 5, [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 3652.4820542036323, 5394.829497889616, 200, 1], 1, "立板", "主卧", "下柜", "", "", "", 0, 0, "三合一", 2, 0, "1", "1", "1", "1", "", "", "", 4, "三合一", "三合一", "三合一", "三合一", true, true, 0, 0, 0, 0, 0], "basePt": { "x": 3652.4820542036323, "y": 5394.829497889616, "z": 0 } };
let brs = LoadBoardsFromFileData(d);
for (let br of brs)
{
let line = br.GetDrawObjectFromRenderType(RenderType.Wireframe) as Line;
//@ts-ignore
expect(line.geometry.attributes.position.count).toMatchSnapshot();
}
});
test('Geometry构建测试', () =>
{
let d = require("./edgebuilderData.json");
let brs = LoadBoardsFromFileData(d);
for (let br of brs)
{
let builder = new ExtrudeGeometryBuilder(br);
expect(builder.verticesArray.length).toMatchSnapshot();
expect(builder.edgeAndLidBuilder.lineVerticesArray.length).toMatchSnapshot();
}
});
test('极限共线', () =>
{
let d =
{ "file": [1, "Board", 8, 2, 100, false, 1, 11, 0, [0, 1, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 99.18801430379972, -19.70604624960106, 0, 1], 0, 0, true, [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 99.18801430379972, -19.70604624960106, 0, 1], 0, 2, 2164, 304, 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, [304, 0], 0, [304, 2164], 0, [0, 2164], 0, true, 3, 2, 2164.0000000000005, 18, 5, true, "Polyline", 8, 2, 0, false, 0, 2, 0, [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, -285.9999999999998, 0, 0, 1], 0, 0, true, [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, -285.9999999999998, 0, 0, 1], 0, 2, 6, [285.9999999999998, 0], 0, [291.9999999999998, 0], 0, [303.9999999999998, 0], 0, [303.9999999999998, 2164], 0, [291.99999999999983, 2164], 0, [285.9999999999998, 2164.0000000000005], 0, true, 0, 3, 0, 0, 0, [0, 1, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 99.18801430379972, 266.2939537503987, 0, 1], 2, 829, 12, 9, true, "Polyline", 8, 2, 0, false, 0, 1, 0, [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, -291.9999999999998, 0, 0, 1], 0, 0, true, [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, -291.9999999999998, 0, 0, 1], 0, 2, 4, [291.9999999999998, 0], 0, [303.9999999999998, 0], 0, [303.9999999999998, 829], 0, [291.9999999999998, 829], 0, true, 0, 3, 0, 0, 0, [0, 1, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 108.18801430379972, 272.2939537503987, 0, 1], 2, 928.9999999999998, 12, 9, true, "Polyline", 8, 2, 0, false, 0, 1, 0, [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, -291.9999999999998, -1234.9999999999993, 0, 1], 0, 0, true, [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, -291.9999999999998, -1234.9999999999993, 0, 1], 0, 2, 4, [303.9999999999998, 1234.9999999999993], 0, [303.9999999999998, 2163.999999999999], 0, [291.9999999999998, 2163.999999999999], 0, [291.9999999999998, 1234.9999999999993], 0, true, 0, 3, 0, 0, 0, [0, 1, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 108.18801430379972, 272.2939537503987, 1234.9999999999993, 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], "basePt": { "x": 99.18801430379972, "y": -19.70604624960106, "z": 0 } };
let brs = LoadBoardsFromFileData(d);
for (let br of brs)
{
let builder = new ExtrudeGeometryBuilder(br);
expect(builder.verticesArray.length).toMatchSnapshot();
expect(builder.edgeAndLidBuilder.lineVerticesArray.length).toMatchSnapshot();
}
});
test('盖子构建失败', () =>
{
//原因是因为交点太多
let d =
{ "file": [1, "Board", 8, 2, 110, false, 1, 11, 0, [0, 1, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 4300.009279073407, 2076.9410852395504, 0, 1], 0, 0, true, [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 4300.009279073407, 2076.9410852395504, -500.99609312660925, 1], 0, 3, 555.6884165302121, 564, 18, true, "Polyline", 8, 2, 0, false, 0, 7, 0, [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, -500.99609312660925, 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, 500.99609312660925], 0, [564, 500.9960931266093], 0, [564, 1056.6845096568213], 0, [0, 1056.6845096568213], 0, true, 1, 3, 2.650032406101512, 711.383779232115, 2.7331290961030845, 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, [711.383779232115, 0], 0, [711.383779232115, 2.650032406101512], 0, [0, 2.650032406101512], 0, true, 0, 3, 0, 0, 0, 0, 0, [0, 0.7928210010759529, 0, 0, 0, 0, 0.7928210010759529, 0, 1, 0, 0, 0, 4315.276149977304, 2076.9410852395504, 6.233907470232225e-7, 1], 3, 0, 0, 0, 0, 0, 9, 1, "立板", "1", "1", "", "", "", 0, 0, "三合一", 2, 0, "1", "1", "1", "1", "", "", "", 4, "三合一", "三合一", "三合一", "三合一", true, true, 0, 0, 0, 0, 0, 0, 0, 0, true], "basePt": { "x": 4300.009279073407, "y": 2076.9410852395504, "z": 0 }, "ucs": [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1] };
let brs = LoadBoardsFromFileData(d);
for (let br of brs)
{
let builder = new ExtrudeGeometryBuilder(br);
expect(builder.verticesArray.length).toMatchSnapshot();
expect(builder.edgeAndLidBuilder.lineVerticesArray.length).toMatchSnapshot();
}
});
test('构建盖子失败2', () =>
{
//因为修改RegionParse精度降低到2个小数点就没问题了
let d =
{ "file": [1, "Board", 8, 2, 100, false, 1, 6, 0, [1, 0, 0, 0, 0, 0, 1, 0, 0, -1, 0, 0, 97.11678151856177, -50.86622139217798, 0, 1], 0, 0, true, [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 97.11678151856177, -50.86622139217798, 0, 1], 0, 3, 633, 361.5, 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, [361.5, 0], 0, [361.5, 633], 0, [0, 633], 0, true, 2, 3, 100, 10, 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, [10, 0], 0, [10, 100], 0, [0, 100], 0, true, 0, 3, 0, 0, 0, 0, 0, [1, 0, 0, 0, 0, 0, 1, 0, 0, -1, 0, 0, 448.61678151856177, -63.86622139217798, 266.5, 1], 3, 100, 20, 2.001107831095416, 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, [20, 0], 0, [20, 100], 0, [0, 100], 0, true, 0, 3, 0, 0, 0, 0, 0, [1, 0, 0, 0, 0, 0, 1, 0, 0, -1, 0, 0, 438.61678151856177, -50.86622139217798, 266.49751214702076, 1], 3, 0, 0, 0, 0, 0, 9, 2, "左开门板", "主卧", "衣柜", "", "", "", 0, 0, "不排", 2, 0, "1.5", "1.5", "1.5", "1.5", "", "", "", 4, "不排", "不排", "不排", "不排", true, true, 0, 0, 0, 0, 0, 0, 0, 1, true], "basePt": { "x": 97.11678151856177, "y": -68.86622139217798, "z": 0 }, "ucs": [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1] };
let brs = LoadBoardsFromFileData(d);
for (let br of brs)
{
let builder = new ExtrudeGeometryBuilder(br);
expect(builder.verticesArray.length).toMatchSnapshot();
expect(builder.edgeAndLidBuilder.lineVerticesArray.length).toMatchSnapshot();
}
});
test('板件轮廓错误导致的崩溃', () =>
{
let d =
{ "file": [1, "Board", 8, 2, 82700, false, 1, 2, 0, [-1.8369701987210297e-16, 0, -1, 0, 1, 0, -1.8369701987210297e-16, 0, 0, -1, 0, 0, 75366.82649228878, -20, 61444.81332130321, 1], 82701, 0, true, [6.123233995736766e-17, 0, -1, 0, 0, 1, 0, 0, 1, 0, 6.123233995736766e-17, 0, 75366.82649228878, -20, 61414.70998797221, 1], 0, 3, 0, 30.10333333100425, 18, true, "Polyline", 8, 2, 0, false, 0, 7, 0, [1, 2.4492935982947064e-16, 0, 0, -2.4492935982947064e-16, 1, 0, 0, 0, 0, 1, 0, 30.10333333100425, 400, 0, 1], 0, 0, true, [1, 2.4492935982947064e-16, 0, 0, 0, 0, -1, 0, -2.4492935982947064e-16, 1, 0, 0, -573.8645894921335, -4.9261083746064855, 0, 1], 0, 2, 4, [0, -400], 0, [0, -400], 0, [-30.10333333100425, -400], 0, [-30.10333333100425, -400], 0, true, 1, 3, 400, 9.900000000000189, 14.2, true, "Polyline", 8, 2, 0, false, 0, 7, 0, [1, 2.4492935982947064e-16, 0, 0, -2.4492935982947064e-16, 1, 0, 0, 0, 0, 1, 0, 0, 400, 0, 1], 0, 0, true, [1, 2.4492935982947064e-16, 0, 0, 0, 0, -1, 0, -2.4492935982947064e-16, 1, 0, 0, -863.9645894921334, -4.926108374606542, 0, 1], 0, 2, 4, [0, -400], 0, [0, -400], 0, [9.900000000000091, -400], 0, [9.900000000000091, -400], 0, true, 0, 3, 0, 0, 0, 0, 0, [-1.8369701987210297e-16, 0, -1, 0, 1, 0, -1.8369701987210297e-16, 0, 0, -1, 0, 0, 75366.82649228878, -20, 61454.713321303214, 1], 3, 0, 0, 0, 0, 0, 10, 2, "左开门板", "户外鞋柜", "标准柜", "", "", "", 0, 0, "不排", 2, 4, 1.2, 1.2, 0, 1.2, "1.2", "1.2", "1.2", "0", "", "", "", 4, "不排", "不排", "不排", "不排", true, true, 1, "1", "装母拉手", 0, 0, 0, 0, 0, 0, 1, true, 0, 0], "basePt": { "x": 75366.82649228878, "y": -38, "z": 61414.70998797221 }, "ucs": [1, 0, 0, 0, 0, 0, 1, 0, 0, -1, 0, 0, 0, 0, 0, 1] };
let brs = LoadBoardsFromFileData(d);
brs[0].MeshGeometry;
expect(0).toBe(0);
});
test('有全深槽时,构建的Mesh错误', () =>
{
let d =
{ "file": [1, "Board", 10, 2, 166, 0, 1, 3, 71, [1, 0, 0, 0, 0, 0, 1, 0, 0, -1, 0, 0, 364.0480727123586, 13.689025306123199, 0, 1], 0, 0, 1, [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, -417.95192728764096, -284.3109746938768, 0, 1], 0, 0, 1, 3, 121.24601483164042, 97.90045944671004, 18, true, "Polyline", 10, 2, 0, 0, 0, 7, 71, [1, 0, 2.041594288559738e-30, 0, 4.486662901208865e-46, 1, -2.1976270830841832e-16, 0, -2.041594288559738e-30, 2.1976270830841832e-16, 1, 0, 7.389644451905042e-13, 121.24601483163951, 0, 1], 0, 0, 1, [1, 0, 0, 0, 0, 0, -1, 0, 0, 1, 0, 0, -356.4667286639439, -141.79931580960192, 13.689025306142893, 1], 0, 0, 1, 2, 4, [97.90045944670862, -121.24601483163951], 0, [97.9004594467093, 9.094947017729282e-13], 0, [0, 0], 0, [-7.389644451905042e-13, -121.24601483163951], 0, true, 2, 3, 17.53791742793169, 17.53791742793169, 5, false, "Circle", 10, 2, 0, 0, 0, 1, 71, [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 8.768958713965844, 8.768958713965844, 0, 1], 0, 0, 1, [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, -2258.032522816819, -816.6695956959303, 1.9667822925839573e-11, 1], 0, 0, 1, 1, 8.768958713965844, 0, 3, 0, 0, 0, 0, 0, [1, 0, 0, 0, 0, 0, 1, 0, 0, -1, 0, 0, 399.16807867565024, 0.6890253061235665, 48.76970415382982, 1], 3, 9.304557173422609, 9.304557173422609, 18, false, "Circle", 10, 2, 0, 0, 1, 2, 71, [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 4.652278586711304, 4.652278586711304, 0, 1], 0, 0, 1, [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, -2262.1492029440737, -820.7862758231848, 1.9667822925839573e-11, 1], 0, 0, 1, 1, 4.652278586711304, 0, 3, 0, 0, 0, 0, 0, [1, 0, 0, 0, 0, 0, 1, 0, 0, -1, 0, 0, 403.2847588029048, 13.689025306123566, 52.88638428108436, 1], 3, 0, 0, 0, 0, 0, 11, 2, "背板", "", "", "", "多层板", "盛橡木多层板", 0, 1, "无效配置", 2, 0, "1", "0", "1", "1", "", "", "", 4, "无效配置", "无效配置", "无效配置", "无效配置", true, true, 0, 0, 0, 0, 0, 0, 0, 0, true, 0, 0, null], "basePt": { "x": 364.0480727123586, "y": -4.310974693876801, "z": 0 }, "ucs": [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1] };
let brs = LoadBoardsFromFileData(d);
for (let br of brs)
{
let builder = new ExtrudeGeometryBuilder(br);
expect(builder.verticesArray.length).toMatchSnapshot();
expect(builder.edgeAndLidBuilder.lineVerticesArray.length).toMatchSnapshot();
}
});
test('无法构造盖子轮廓导致的丢面', () =>
{
let d = { "file": [2, "Board", 10, 2, 100, 0, 1, 3, 71, [1, 0, -1.2246467991473532e-16, 0, 1.2246467991473532e-16, 0, 1, 0, 0, -1, 0, 0, 1675.9490669798106, 683.6371884319233, 0, 1], 0, 0, 1, [1, 0, -1.2246467991473532e-16, 0, 0, 1, 0, 0, 1.2246467991473532e-16, 0, 1, 0, 1675.9490669798106, 683.6371884319233, 0, 1], 0, 0, 1, 3, 569.9929777020586, 490.0000517826351, 15, false, "Polyline", 10, 2, 0, 0, 0, 7, 71, [1, 1.2246467991473532e-16, 0, 0, -1.2246467991473532e-16, 1, -2.220446049250313e-16, 0, -2.719262146893782e-32, 2.220446049250313e-16, 1, 0, 190.4823711806855, 7.142033879214081, 1.1368683772161603e-13, 1], 0, 0, 1, [1, 1.2246467991473532e-16, 0, 0, 0, 0, -1, 0, -1.2246467991473532e-16, 1, 0, 0, -2287.9582749241536, -2.4908761850252636, 0, 1], 0, 0, 1, 2, 21, [144.0261797895132, 12.555436608414283], 0.08011078511393217, [207.27263027470008, 55.032482468419346], 0.0982278058270917, [256.9461285267498, 117.30823842371012], 0.06775510447730201, [288.63296623659744, 193.84923026347673], 0.0647980226628085, [299.5176288193147, 277.85445497521323], 0.06479802265712192, [288.6329662376306, 361.859679676214], 0.06775510448103572, [256.94612852637283, 438.4006715205693], 0.0732779390707143, [207.27263027469644, 500.6764274752113], 0.1316419462812356, [144.02617978909393, 543.153473335407], 0.0856790655630335, [72.82650174805212, 562.0575371684445], 0.0870034131258293, [-1.103217073250562e-9, 555.7089099433348], 0.08325628049116582, [-67.98237118071438, 524.6716950503633], 0.12798400088101122, [-125.08007977898069, 471.7036852365421], 0.07024618739620479, [-166.21974381648897, 401.5113206210226], 0.06591861334955554, [-187.74592360575434, 320.33150083270266], 0.06442179580720458, [-187.74592360570568, 235.37740911055315], 0.06591861335117337, [-166.2197438157159, 154.19758932073094], 0.07024618739620714, [-125.08007977902116, 84.00522470714174], 0.10232213230648506, [-67.98237118067982, 31.037214893246784], 0.08325628049113849, [0, 0], 0.08700341312423608, [72.82650174792207, -6.348627224827737], 0.08567906556383452, true, 1, 3, 545.9929777020898, 466.00005178263865, 10, false, "Polyline", 10, 2, 0, 0, 0, 7, 71, [1, 1.2246467991473532e-16, 0, 0, -1.2246467991473532e-16, 1, -2.220446049250313e-16, 0, -2.719262146893782e-32, 2.220446049250313e-16, 1, 0, 181.58287289248648, 6.734574177560361, 1.1973941916310722e-13, 1], 0, 0, 1, [1, 1.2246467991473532e-16, 0, 0, 0, 0, -1, 0, -1.2246467991473532e-16, 1, 0, 0, -2299.958274924153, -14.490876185025378, 3.3501945573104424e-14, 1], 0, 0, 1, 2, 29, [135.9123374770461, 11.86548591672539], 0.08043407828426154, [196.1990843335152, 52.4134796294602], 0.09901078129578515, [243.32560796746748, 111.49714674730416], 0.068013547046301, [273.92719303295644, 185.30917642712424], -0.00026712818237134686, [273.9304605006946, 185.32157212024862], 0.0647980183842718, [284.41712900395896, 266.25516822382787], -0.0002808124006845637, [284.4171289961341, 266.26864721080875], 0.06479803403565723, [273.9304590200377, 347.20226283165914], -0.0002668168576174963, [273.92719458550846, 347.21464701715684], 0.0677551067608682, [243.47866528917575, 420.7644478477435], -0.00020058996243736764, [243.473819418301, 420.77276782515224], 0.07387323917265796, [195.52922359360673, 480.7352011324947], 0.13391453680572887, [136.4719395068464, 520.4003860414467], 0.0864153704242974, [68.67618142396987, 538.5110005480366], 0.08697620507063054, [-1.3369572116062045e-10, 532.5238293469014], 0.08396386538041598, [-64.86843409540597, 502.79444595504174], 0.13014089641183157, [-118.39256641804968, 453.1401769916505], 0.07080364164236372, [-158.22076157423726, 385.35791900558644], -0.00024346238291989534, [-158.2252084283282, 385.3471119455371], 0.06591862381518118, [-178.94391512302172, 307.21244454396157], -0.00027751621514940134, [-178.94561683151187, 307.1992341370387], 0.0644218028849186, [-178.94561737268532, 225.3245993926798], -0.0002778372045540743, [-178.94391417667794, 225.31137742419753], 0.06591861515385573, [-158.2252096405282, 147.17672034329962], -0.00024375597105471888, [-158.22075924929595, 147.16590468328843], 0.07052570403317236, [-118.58470801313888, 79.62515231000549], 0.103175543422196, [-64.61393771901567, 29.556557908310424], 0.08360189215941188, [0, 0], 0.0869762050689328, [68.67618142376296, -5.987171201118258], 0.08565659930789392, true, 1, 3, 469.99297770208534, 390.0000517826353, 10, false, "Polyline", 10, 2, 0, 0, 0, 7, 71, [1, 1.2246467991473532e-16, 0, 0, -1.2246467991473532e-16, 1, -2.220446049250313e-16, 0, -2.719262146893782e-32, 2.220446049250313e-16, 1, 0, 153.40097560645722, 5.444330074295479, 1.0315052093097017e-13, 1], 0, 0, 1, [1, 1.2246467991473532e-16, 0, 0, 0, 0, -1, 0, -1.2246467991473532e-16, 1, 0, 0, -2337.958274924151, -52.49087618502535, 2.614689584998015e-14, 1], 0, 0, 1, 2, 29, [110.21879368091322, 9.680662134613044], 0.08174351132767049, [161.13911101721988, 44.13020359789809], 0.10223259988512705, [200.17887332295504, 93.07431544609238], 0.06901645673018138, [227.3590680160778, 158.26564320192475], -0.0002670246170908244, [227.37268042960068, 158.31728415114858], 0.06479800567123836, [236.5990322888333, 229.52406021983046], -0.00028088901416883493, [236.59903227797986, 229.58023801823185], 0.06479803522304703, [227.37267699999302, 300.78704638495515], -0.00026688376335610265, [227.35907176625278, 300.83866009374185], 0.06775511893236374, [200.831851966449, 364.916359741371], -0.00020064237542476236, [200.81165556392807, 364.951035374288], 0.07630642233769051, [158.25166398954798, 417.65424137274863], 0.14434331063358835, [112.61564961575323, 448.30038836858677], 0.08956858247646343, [55.53372099827766, 463.94691106066597], 0.08686375226077815, [-6.912159733474255e-11, 459.10431755344865], 0.08694700141612968, [-55.05934677390178, 433.46223246304356], 0.13982643693840377, [-97.14042663413011, 394.430644013061], 0.07304538978543654, [-132.89049219644858, 334.20545078396884], -0.00024359646056284153, [-132.9090309607568, 334.160396557084], 0.06591865053405431, [-151.07073516153787, 265.66872440670784], -0.0002775091247403727, [-151.07782607743866, 265.6136774326532], 0.0644218096781353, [-151.07783100682718, 193.4906782207235], -0.0002778839957473598, [-151.0707306256154, 193.4355577793704], 0.0659185987756616, [-132.9090385725808, 124.94393946959434], -0.00024378015029462822, [-132.89048874751097, 124.89885837603106], 0.07162496515022647, [-97.99550647211936, 65.73386758381439], 0.10675513653596827, [-53.95583075602917, 24.878199595806933], 0.08502605048728297, [0, 0], 0.08686375225910427, [55.53372099813532, -4.8425935072120865], 0.08556422233596478, true, 0, 3, 0, 0, 0, 0, 0, [1, 0, -1.2246467991473532e-16, 0, 1.2246467991473532e-16, 0, 1, 0, 0, -1, 0, 0, 1725.9490669798076, 678.6371884319233, 50.00000000000008, 1], 3, 0, 0, 0, 0, 0, [1, 0, -1.2246467991473532e-16, 0, 1.2246467991473532e-16, 0, 1, 0, 0, -1, 0, 0, 1687.9490669798104, 678.6371884319233, 12.000000000000112, 1], 4, 0, 0, 0, 0, 0, 11, 2, "背板", "", "", "", "", "", 2, 1, "不排", 2, 1, 0, "0", "0", "0", "0", "", "", "", 21, "不排", "不排", "不排", "不排", "不排", "不排", "不排", "不排", "不排", "不排", "不排", "不排", "不排", "不排", "不排", "不排", "不排", "不排", "不排", "不排", "不排", true, true, 0, 0, 0, 0, 0, 0, 0, 0, true, 0, 0, null, "Board", 10, 2, 110, 0, 1, 3, 71, [1, 0, -1.2246467991473532e-16, 0, 1.2246467991473532e-16, 0, 1, 0, 0, -1, 0, 0, 1708.0205267681058, 683.6371884319233, 769.7150349190862, 1], 0, 0, 1, [1, 0, -1.2246467991473532e-16, 0, 0, 1, 0, 0, 1.2246467991473532e-16, 0, 1, 0, 1708.0205267681058, 683.6371884319233, 769.7150349190862, 1], 0, 0, 1, 3, 569.9929777020591, 490.000051782635, 15, false, "Polyline", 10, 2, 0, 0, 0, 7, 71, [1, 1.2246467991473532e-16, 0, 0, -1.2246467991473532e-16, 1, -2.220446049250313e-16, 0, -2.719262146893782e-32, 2.220446049250313e-16, 1, 0, 65.40229140166412, 91.14725858635617, 1.0632510852108873e-13, 1], 0, 0, 1, [1, 1.2246467991473532e-16, 0, 0, 0, 0, -1, 0, -1.2246467991473532e-16, 1, 0, 0, -2368.9841607353337, -618.0850760348707, 683.6371884319234, 1], 0, 0, 1, 2, 21, [57.097708598337704, -52.96800981389288], 0.08325628049102245, [125.08007977891657, -84.00522470711383], 0.08700341312437994, [197.90658152694277, -90.35385193196953], 0.08567906556387278, [269.10625956853437, -71.44978809872748], 0.08011078511393217, [332.3527100537208, -28.972742238722617], 0.09822780582708991, [382.02620830577007, 33.303013716566966], 0.06775510447719918, [413.7130460155863, 109.84400555621175], 0.06479802266312067, [424.5977085983359, 193.84923026807144], 0.06479802265696405, [413.7130460167041, 277.8544549688728], 0.06775510448110313, [382.0262083054563, 354.39544681332075], 0.07327793907082757, [332.35271005371806, 416.67120276806907], 0.13164194628124032, [269.1062595681151, 459.1482486282654], 0.0856790655630095, [197.90658152709375, 478.0523124613011], 0.08700341312585026, [125.08007977792067, 471.7036852361938], 0.08325628049116934, [57.09770859830678, 440.6664703432217], 0.12798400088101236, [4.0472514228895307e-11, 387.69846052940045], 0.07024618739642213, [-41.13966403746781, 317.50609591388104], 0.06591861334946322, [-62.665843826718174, 236.3262761256774], 0.06442179580719845, [-62.66584382670044, 151.37218440353604], 0.06591861335155773, [-41.13966403669474, 70.19236461358923], 0.07024618739620803, [0, 0], 0.10232213230647921, true, 1, 3, 545.9929777020914, 466.00005178263933, 10, false, "Polyline", 10, 2, 0, 0, 0, 7, 71, [1, 1.2246467991473532e-16, 0, 0, -1.2246467991473532e-16, 1, -2.220446049250313e-16, 0, -2.719262146893782e-32, 2.220446049250313e-16, 1, 0, 2.6372548286226447, 232.05917891245332, 6.970730632485946e-14, 1], 0, 0, 1, [1, 1.2246467991473532e-16, 0, 0, 0, 0, -1, 0, -1.2246467991473532e-16, 1, 0, 0, -2380.984160735333, -630.0850760348696, 683.6371884319235, 1], 0, 0, 1, 2, 29, [0.0017038871865224792, -0.013227310693764593], 0.06591861523197126, [20.720408459830196, -78.14788448015952], -0.00024376672782599893, [20.724858814568506, -78.15870005160286], 0.07052570403317404, [60.36091005072558, -145.69945242488586], 0.10317554342219891, [114.33168034484879, -195.76804682658098], 0.08360189215938908, [178.9456180638458, -225.3246047348864], 0.08697620506901826, [247.6217994876274, -231.31177593600967], 0.08565659930778746, [314.8579555408319, -213.45911881820223], 0.08043407828435897, [375.1447023973792, -172.91112510543132], 0.09901078129578202, [422.27122603133057, -113.82745798758947], 0.068013546222605, [452.8728108506625, -40.01542924363832], -0.00026712646030806523, [452.8760782962945, -40.00303363014905], 0.0647980192209501, [463.3627470678216, 40.930563492352576], -0.00028081240612732146, [463.3627470599986, 40.944042475917286], 0.06479803384082848, [452.87607714657315, 121.8776578595282], -0.0002668219671821873, [452.87281264940293, 121.89004228215038], 0.06775510546687495, [422.4242841187702, 195.43984179936683], -0.00020073403111704822, [422.41943748216545, 195.448163090261], 0.07387323917265493, [374.47484165747346, 255.41059639760124], 0.13391453680574134, [315.41755757071087, 295.0757813065554], 0.086415370424299, [247.62179948783432, 313.1863958131453], 0.08697620507062316, [178.94561806373622, 307.1992246120117], 0.08396386538042436, [114.07718396845848, 277.46984122015056], 0.13014089641183046, [60.55305164581523, 227.81557225675965], 0.07080364119604711, [20.72485667798037, 160.0333147290786], -0.0002434727331083268, [20.72040963553627, 160.0225072106458], 0.06591862385205992, [0.0017029350897246331, 81.88783976421382], -0.0002774630919401427, [0.0000015537020772171672, 81.87463188590243], 0.06442180061703948, [0, 0], -0.0002779758860190706, true, 0, 3, 0, 0, 0, 0, 0, [1, 0, -1.2246467991473532e-16, 0, 1.2246467991473532e-16, 0, 1, 0, 0, -1, 0, 0, 1720.020526768105, 678.6371884319234, 781.715034919085, 1], 4, 0, 0, 0, 0, 0, 11, 2, "背板", "", "", "", "", "", 2, 1, "不排", 2, 1, 0, "0", "0", "0", "0", "", "", "", 21, "不排", "不排", "不排", "不排", "不排", "不排", "不排", "不排", "不排", "不排", "不排", "不排", "不排", "不排", "不排", "不排", "不排", "不排", "不排", "不排", "不排", true, true, 0, 0, 0, 0, 0, 0, 0, 0, true, 0, 0, null], "basePt": { "x": 1675.9490669798106, "y": 668.6371884319233, "z": -6.000769949976414e-14 }, "ucs": [1, 0, 0, 0, 0, 0, 1, 0, 0, -1, 0, 0, 0, 0, 0, 1] };
let brs = LoadBoardsFromFileData(d);
for (let br of brs)
{
let builder = new ExtrudeGeometryBuilder(br);
expect(builder.verticesArray.length).toMatchSnapshot();
}
});
//
//{"file":[1,"Board",10,2,186,0,1,3,71,[1,0,0,0,0,0,1,0,0,-1,0,0,483.14082719043313,13.689025306123199,0,1],0,0,1,[1,0,0,0,0,1,0,0,0,0,1,0,-298.8591728095664,-284.3109746938768,0,1],0,0,1,3,121.24601483164042,97.9004594467101,18,true,"Polyline",10,2,0,0,0,7,71,[1,0,2.030561952816011e-30,0,4.5087532658883125e-46,1,-2.220446049250313e-16,0,-2.030561952816011e-30,2.220446049250313e-16,1,0,0,0,2.6645352591003757e-14,1],0,0,1,[1,0,0,0,0,0,-1,0,0,1,0,0,-616.8365854462929,4.729723383396163,2.6645352591003757e-14,1],0,0,1,2,4,[97.9004594467101,121.24601483164042],0,[7.958078640513122e-13,121.24601483163951],0,[0,0],0,[97.90045944670942,0],0,true,2,3,17.53791742793169,17.53791742793169,5,false,"Circle",10,2,0,0,0,1,71,[1,0,0,0,0,1,0,0,0,0,1,0,8.768958713965844,8.768958713965844,0,1],0,0,1,[1,0,0,0,0,1,0,0,0,0,1,0,-2258.0325228168194,-816.6695956959304,1.9667822925839573e-11,1],0,0,1,1,8.768958713965844,0,3,0,0,0,0,0,[1,0,0,0,0,0,1,0,0,-1,0,0,518.2608331537249,0.6890253061231988,48.76970415382985,1],3,11.527154383958326,21.24289879329467,18,true,"Polyline",10,2,0,0,0,7,71,[1,0,0,0,0,1,0,0,0,0,1,0,0,11.527154383958326,0,1],0,0,1,[1,0,0,0,0,0,-1,0,0,1,0,0,-650.2917132537983,-47.319343025706445,0,1],0,0,1,2,4,[21.24289879329467,-11.527154383958326],0,[21.24289879329467,0],0,[0,0],0,[0,-11.527154383958326],0,true,0,3,0,0,0,0,0,[1,0,0,0,0,0,1,0,0,-1,0,0,516.5959549979385,13.689025306123172,52.04906640910261,1],3,0,0,0,0,0,11,2,"背板","","","","多层板","盛橡木多层板",0,1,"无效配置",2,0,"1","0","1","1","","","",4,"无效配置","无效配置","无效配置","无效配置",true,true,0,0,0,0,0,0,0,0,true,0,0,null],"basePt":{"x":483.14082719043313,"y":-4.310974693876801,"z":0},"ucs":[1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1]}
test('EdgeGeometry生成和Geometry构建测试', () =>
{
let d = { "file": [1, "Board", 10, 2, 100, 0, 1, 4, 71, [0, 1, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 83.1168831168834, 0, 6.49350649373082, 1], 0, 0, 1, [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, -866.8831168831166, 20, 6.49350649373082, 1], 0, 0, 1, 3, 2591, 600, 50, 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, 2591], 0, [0, 2591], 0, true, 0, 3, 0, 0, 0, 0, 0, 13, 1, "见光板", "", "", "", "", "", 0, 0, "不排", 2, 0, "1", "1", "1", "1", "", "", "", 4, "不排", "不排", "不排", "不排", false, false, 0, 0, 0, 0, 0, 0, 0, 0, true, 1, "Polyline", 10, 2, 0, 0, 0, 1, 71, [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, -5, 0, 0, 1], 0, 0, 1, [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, -5, 0, 0, 1], 0, 0, 1, 2, 2, [0, 2591], 0, [0, 0], 0, false, 1, 1, 50, 0, "27007", 3, 0.7853981633974483, "50圆弧刀", 0, null, 1, "27007", "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, 33677.4052763473, -6494.096237586119, 0, 1], 0, 0, 1, 2, 10, [50, 50], 0.41421356237309503, [0, 0], 0.41421356237309503, [-50, 50], 0, [-50, 60], 0, [-5, 60], 0, [-5, 80], 0, [5, 80], 0, [5.000000000000007, 60.00000000000001], 0, [50.00000000000001, 60], 0, [50, 49.99999999999909], 0, false, 0], "basePt": { "x": 83.1168831168834, "y": 0, "z": 6.49350649373082 }, "ucs": [1, 0, 0, 0, 0, 0, 1, 0, 0, -1, 0, 0, 0, 0, 0, 1] };
let brs = LoadBoardsFromFileData(d);
for (let br of brs)
{
let line = br.GetDrawObjectFromRenderType(RenderType.Wireframe) as Line;
//@ts-ignore
expect(line.geometry.attributes.position.count).toMatchSnapshot();
let builder = new ExtrudeGeometryBuilder(br);
expect(builder.verticesArray.length).toMatchSnapshot();
expect(builder.edgeAndLidBuilder.lineVerticesArray.length).toMatchSnapshot();
}
});