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__/Room/RoomParse.test.ts

323 lines
38 KiB

import { Curve } from "../../src/DatabaseServices/Entity/Curve";
import { RoomWallArc } from "../../src/DatabaseServices/Room/Entity/Wall/RoomWallArc";
import { CURVE_FACE_TYPE_KEY, RoomWallBase } from "../../src/DatabaseServices/Room/Entity/Wall/RoomWallBase";
import { RoomWallLine } from "../../src/DatabaseServices/Room/Entity/Wall/RoomWallLine";
import { RoomWallParse } from "../../src/DatabaseServices/Room/ParseService/RoomWallParse";
import "../Utils/jest.util";
import { LoadEntityFromFileData } from "../Utils/LoadEntity.util";
test('重叠墙分析丢失墙体', () =>
{
let d =
{ "file": [4, "RoomWallLine", 1, 1, 8, 2, 100, false, 1, 7, 0, [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, -9500.07421875, 47272.1015625, 0, 1], 0, 0, true, [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, -9500.07421875, 47272.1015625, 0, 1], 0, 120, 11479.683451519304, -47272.101782153084, 0, 11479.683451519304, -39836.997769404195, 0, "RoomWallLine", 1, 1, 8, 2, 101, false, 1, 7, 0, [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, -9500.07421875, 47272.1015625, 0, 1], 0, 0, true, [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, -9500.07421875, 47272.1015625, 0, 1], 0, 120, 9500.074180410125, -41581.82367907638, 0, 11479.683480410125, -41581.82367907638, 0, "RoomWallLine", 1, 1, 8, 2, 102, false, 1, 7, 0, [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, -9500.07421875, 47272.1015625, 0, 1], 0, 0, true, [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, -9500.07421875, 47272.1015625, 0, 1], 0, 120, 11479.683480410125, -41581.82367907638, 0, 11479.683480410125, -42901.357179076374, 0, "RoomWallLine", 1, 1, 8, 2, 103, false, 1, 7, 0, [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, -9500.07421875, 47272.1015625, 0, 1], 0, 0, true, [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, -9500.07421875, 47272.1015625, 0, 1], 0, 120, 11479.683480410125, -42901.357179076374, 0, 9500.074180410125, -42901.357179076374, 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 walls: RoomWallLine[] = LoadEntityFromFileData<RoomWallLine>(d);
expect(walls.length).toBe(4);
});
function TestLidDir(w: RoomWallBase)
{
for (let lid of w.LidCurves)
{
let derv = lid.GetFirstDeriv(0);
expect(derv.toArray()).toMatchSnapshot();
}
}
test('测试盖子方向正确性', () =>
{
//不平行
let d =
{ "file": [2, "RoomWallLine", 1, 1, 8, 2, 100, false, 1, 7, 0, [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, -20241.894007114373, 57552.042087966605, 0, 1], 0, 0, true, [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, -20241.894007114373, 57552.042087966605, 0, 1], 0, 120, 21224.356887185626, -57668.76017210251, 0, 21618.3863261508, -57904.6071385469, 0, "RoomWallLine", 1, 1, 8, 2, 101, false, 1, 7, 0, [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, -20241.894007114373, 57552.042087966605, 0, 1], 0, 0, true, [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, -20241.894007114373, 57552.042087966605, 0, 1], 0, 120, 21599.55303362729, -57913.3327693207, 0, 21618.3863261508, -57904.6071385469, 0], "basePt": { "x": 951.6479796048297, "y": -415.73151488509757, "z": 0 }, "ucs": [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1] };
let walls = LoadEntityFromFileData<RoomWallLine>(d);
new RoomWallParse(true, undefined, false).Parse(walls);
for (let wall of walls)
TestLidDir(wall);
for (let wall of walls) wall.Reverse();
new RoomWallParse(true, undefined, false).Parse(walls);
for (let wall of walls)
TestLidDir(wall);
});
test('共线墙盖子方向正确性', () =>
{
let d =
{ "file": [2, "RoomWallLine", 1, 1, 8, 2, 100, false, 1, 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, 240, 1768.518614765101, 1636.7103570469787, 0, 4569.534883221476, 1636.7103570469787, 0, "RoomWallLine", 1, 1, 8, 2, 104, false, 1, 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, 120, 4569.534883221476, 1636.7103570469787, 0, 5993.144135570469, 1636.7103570469787, 0], "basePt": { "x": 1768.518614765101, "y": 1516.7103570469787, "z": 0 }, "ucs": [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1] };
let walls = LoadEntityFromFileData<RoomWallLine>(d);
new RoomWallParse(true, undefined, false).Parse(walls);
for (let wall of walls)
TestLidDir(wall);
for (let wall of walls) wall.Reverse();
new RoomWallParse(true, undefined, false).Parse(walls);
for (let wall of walls)
TestLidDir(wall);
new RoomWallParse(true, undefined, false).Parse([walls[0]]);
});
function TestCurveDerv(c: Curve)
{
let derv = c.GetFirstDeriv(0);
expect(derv.toArray()).toMatchSnapshot();
}
function TestWallCurveParse(walls: RoomWallBase[])
{
new RoomWallParse(true, undefined, false).Parse(walls);
for (let w of walls)
{
w.LeftCurves.forEach(TestCurveDerv);
w.RightCurves.forEach(TestCurveDerv);
w.LidCurves.forEach(TestCurveDerv);
}
}
test('测试重叠墙裁剪共面墙', () =>
{
let d =
{ "file": [9, "RoomWallLine", 1, 1, 8, 2, 102, false, 1, 1, 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, 120, 7582.936440680016, 4072.8217140340644, 0, 11404.772886843615, 4072.8217140340644, 0, "RoomWallLine", 1, 1, 8, 2, 104, false, 1, 3, 0, [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 344.67866612827356, 0, 1], 0, 0, true, [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 344.67866612827356, 0, 1], 0, 120, 8317.832194362007, 2405.5987617151795, 0, 8948.8726815918, 3591.519677371171, 0, "RoomWallLine", 1, 1, 8, 2, 105, false, 1, 2, 0, [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 344.67866612827356, 0, 1], 0, 0, true, [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 344.67866612827356, 0, 1], 0, 120, 8948.8726815918, 3591.519677371171, 0, 10363.27377365858, 1720.1582324828173, 0, "RoomWallLine", 1, 1, 8, 2, 120, false, 1, 2, 0, [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, -768.0628669331354, 38.73618487825024, 0, 1], 0, 0, true, [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, -768.0628669331354, 38.73618487825024, 0, 1], 0, 120, 7712.618614009485, 5843.207171574814, 0, 6464.123975442953, 5843.207171574814, 0, "RoomWallLine", 1, 1, 8, 2, 121, false, 1, 3, 0, [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 33.27857761626092, 1189.278029150868, 0, 1], 0, 0, true, [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 33.27857761626092, 1189.278029150868, 0, 1], 0, 120, 5662.782530893557, 4692.665327302197, 0, 5662.782530893557, 4315.6736278761255, 0, "RoomWallLine", 1, 1, 8, 2, 122, false, 1, 1, 0, [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, -768.0628669331354, 38.73618487825024, 0, 1], 0, 0, true, [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, -768.0628669331354, 38.73618487825024, 0, 1], 0, 120, 6464.123975442953, 5963.207171574814, 0, 7536.78656169138, 5963.207171574814, 0, "RoomWallLine", 1, 1, 8, 2, 123, false, 1, 7, 0, [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 33.27857761626092, 1189.278029150868, 0, 1], 0, 0, true, [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 33.27857761626092, 1189.278029150868, 0, 1], 0, 120, 5662.782530893557, 4812.665327302197, 0, 5662.782530893557, 5140.162418546004, 0, "RoomWallLine", 1, 1, 8, 2, 124, false, 1, 7, 0, [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 1013.3654121365089, 0, 0, 1], 0, 0, true, [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 1013.3654121365089, 0, 0, 1], 0, 120, 8556.896201417756, 6120.087165973126, 0, 11068.716186983665, 6120.087165973126, 0, "RoomWallLine", 1, 1, 8, 2, 125, false, 1, 7, 0, [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 1013.3654121365089, 120, 0, 1], 0, 0, true, [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 1013.3654121365089, 120, 0, 1], 0, 360, 11068.716186983665, 6120.087165973126, 0, 8556.896201417756, 6120.087165973126, 0], "basePt": { "x": 5636.061108509818, "y": 2028.6590400585872, "z": 0 }, "ucs": [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1] };
let walls = LoadEntityFromFileData<RoomWallLine>(d);
TestWallCurveParse(walls);
});
test('月牙', () =>
{
let d =
{ "file": [2, "RoomWallArc", 1, 8, 2, 100, false, 1, 7, 0, [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 4496.077612614482, -741.9233039201708, 0, 1], 0, 0, true, [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 1620.5085099927596, 2464.3397133082917, 0, 1], 0, 120, 2, 1756.2993543878508, 2.8629180296730343, 5.25597253402777, false, "RoomWallArc", 1, 8, 2, 106, false, 1, 7, 0, [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 5234.303124908539, -226.36979470591615, 0, 1], 0, 0, true, [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 5234.303124908539, -226.36979470591615, 0, 1], 0, 120, 2, 2426.985013452408, 4.347491344276138, 3.1549543991895943, true], "basePt": { "x": 2747.5401166365295, "y": -2549.6124485068253, "z": 0 }, "ucs": [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1] };
let walls = LoadEntityFromFileData<RoomWallArc>(d);
TestWallCurveParse(walls);
});
test('双圆弧', () =>
{
let d =
{ "file": [2, "RoomWallArc", 1, 8, 2, 112, false, 1, 7, 0, [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 4660.422705930473, -1880.3542100014474, 0, 1], 0, 0, true, [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 1784.8536033087516, 1325.9088072270151, 0, 1], 0, 120, 2, 1883.3093734998954, 4.864938171508393, 4.013217893950692, true, "RoomWallLine", 1, 1, 8, 2, 113, false, 1, 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, 120, 3448.3559093243402, -3321.793864262949, 0, 4946.607028421562, -3741.792559738791, 0], "basePt": { "x": 3409.7409432351606, "y": -3823.6618271889474, "z": 0 }, "ucs": [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1] };
let walls = LoadEntityFromFileData<RoomWallArc>(d);
TestWallCurveParse(walls);
});
test('直线与圆弧', () =>
{
let d =
{ "file": [2, "RoomWallLine", 1, 1, 8, 2, 100, false, 1, 7, 0, [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, -2785.659239074769, 3884.0137369765353, 0, 1], 0, 0, true, [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, -2785.659239074769, 3884.0137369765353, 0, 1], 0, 120, 3448.3559093243402, -3321.793864262949, 0, 4946.607028421562, -3741.792559738791, 0, "RoomWallArc", 1, 8, 2, 101, false, 1, 7, 0, [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 1874.7634668557039, 2003.6595269750878, 0, 1], 0, 0, true, [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, -1000.8056357660175, 5209.92254420355, 0, 1], 0, 120, 2, 1883.3093734998954, 4.864938171508393, 4.71238898038469, true], "basePt": { "x": 646.5014124189006, "y": 60.35020080321283, "z": 0 }, "ucs": [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1] };
let walls = LoadEntityFromFileData<RoomWallArc>(d);
TestWallCurveParse(walls);
});
test('大圆弧月牙', () =>
{
let d =
{ "file": [2, "RoomWallArc", 1, 8, 2, 100, false, 1, 7, 0, [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 4496.077612614482, -741.9233039201708, 0, 1], 0, 0, true, [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 1620.5085099927596, 2464.3397133082917, 0, 1], 0, 120, 2, 1756.2993543878508, 2.8629180296730343, 5.25597253402777, false, "RoomWallArc", 1, 8, 2, 101, false, 1, 7, 0, [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 5234.303124908539, -226.36979470591615, 0, 1], 0, 0, true, [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 5234.303124908539, -226.36979470591615, 0, 1], 0, 120, 2, 2426.985013452408, 1.7374695740175634, 3.1549543991895943, true], "basePt": { "x": 2679.834448551982, "y": -2713.3158396277913, "z": 0 }, "ucs": [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1] };
let walls = LoadEntityFromFileData<RoomWallArc>(d);
new RoomWallParse(true, undefined, false).Parse(walls);
TestWallCurveParse(walls);
});
test('直线圆弧2', () =>
{
let d =
{ "file": [2, "RoomWallArc", 1, 8, 2, 102, false, 1, 7, 0, [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 2875.5691026217214, -3206.2630172284626, 0, 1], 0, 0, true, [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1], 0, 120, 2, 1427.019691385767, 1.5707963267948963, 5.12541940334308, true, "RoomWallLine", 1, 1, 8, 2, 103, false, 1, 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, 120, 3448.3559093243402, -4513.28270861423, 0, 7698.725050158591, -4513.28270861423, 0], "basePt": { "x": 2875.569102621722, "y": -4573.28270861423, "z": 0 }, "ucs": [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1] };
let walls = LoadEntityFromFileData<RoomWallArc>(d);
TestWallCurveParse(walls);
});
test('圆弧合集', () =>
{
let d =
{ "file": [13, "RoomWallArc", 1, 8, 2, 101, false, 1, 7, 0, [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 3273.134178277299, 22.22889305816022, 0, 1], 0, 0, true, [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1], 0, 120, 2, 3208.9540657069424, 3.141592653589793, 5.860668587224866, false, "RoomWallArc", 1, 8, 2, 102, false, 1, 7, 0, [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, -153834.6562900735, 70657.03856141093, 0, 1], 0, 0, true, [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1], 0, 120, 2, 175464.96749551911, 5.860668584027313, 5.9015881771505905, false, "RoomWallLine", 1, 1, 8, 2, 104, false, 1, 7, 0, [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, -5117.587994574248, 2909.5915097320253, 0, 1], 0, 0, true, [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, -5117.587994574248, 2909.5915097320253, 0, 1], 0, 120, 145.77861163227016, 40.337711069418376, 0, 145.77861163227016, 477.0821207414635, 0, "RoomWallArc", 1, 8, 2, 105, false, 1, 7, 0, [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, -4133.260559126531, 2722.8716166185686, 0, 1], 0, 0, true, [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, -4133.260559126531, 2722.8716166185686, 0, 1], 0, 120, 2, 1069.4845690892962, 2.4719897315318122, 0.5686610065010442, true, "RoomWallArc", 1, 8, 2, 106, false, 1, 7, 0, [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, -4099.228441804868, 2986.994611133005, 0, 1], 0, 0, true, [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, -4099.228441804868, 2986.994611133005, 0, 1], 0, 120, 2, 921.4935215205645, 0.3451763911001317, 4.671890489892434, true, "RoomWallLine", 1, 1, 8, 2, 107, false, 1, 7, 0, [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, -5117.587994574248, 2909.5915097320253, 0, 1], 0, 0, true, [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, -5117.587994574248, 2909.5915097320253, 0, 1], 0, 120, 1019.1053511858331, -844.0901183185651, 0, 145.77861163227016, 40.337711069418376, 0, "RoomWallArc", 1, 8, 2, 108, false, 1, 7, 0, [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, -2782.6526365978343, 7002.460485070904, 0, 1], 0, 0, true, [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, -2782.6526365978343, 7002.460485070904, 0, 1], 0, 120, 2, 794.5988200686626, 1.5707963267948963, 4.71238898038469, true, "RoomWallArc", 1, 8, 2, 109, false, 1, 7, 0, [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 704.2992204705515, 9466.551689638944, 0, 1], 0, 0, true, [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 704.2992204705515, 9466.551689638944, 0, 1], 0, 120, 2, 4772.619189730038, 3.893165308104889, 3.960816325869575, true, "RoomWallLine", 1, 1, 8, 2, 110, false, 1, 7, 0, [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, -4641.808251081815, 4974.121468393569, 0, 1], 0, 0, true, [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, -4641.808251081815, 4974.121468393569, 0, 1], 0, 120, 1249.787120056879, 2043.3378366867016, 0, 2653.61286333557, 2043.3378366867016, 0, "RoomWallArc", 1, 8, 2, 111, false, 1, 7, 0, [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, -2373.4954382415426, -5587.564576348388, 0, 1], 0, 0, true, [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, -4000.68872570825, 1299.0397338150337, 0, 1], 0, 120, 2, 8813.306206135465, 1.5707963267948963, 1.2534662695404197, true, "RoomWallArc", 1, 8, 2, 112, false, 1, 7, 0, [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, -187.62600866054163, 1067.9697248107154, 0, 1], 0, 0, true, [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, -4000.68872570825, 1299.0397338150337, 0, 1], 0, 120, 2, 1808.0109234880485, 1.2534662891282422, 6.057904386991714, true, "RoomWallArc", 1, 8, 2, 113, false, 1, 7, 0, [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 4942.634589029126, 2882.3293089550984, 0, 1], 0, 0, true, [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 2067.065486407403, 6088.592326183561, 0, 1], 0, 120, 2, 1756.2993543878508, 2.8629180296730343, 5.25597253402777, false, "RoomWallArc", 1, 8, 2, 114, false, 1, 7, 0, [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 3446.4440117252116, 5262.329681061835, 0, 1], 0, 0, true, [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 3446.4440117252116, 5262.329681061835, 0, 1], 0, 120, 2, 1906.6024366926247, 0.28109438368498346, 4.611329589522175, true], "basePt": { "x": -5031.809387251531, "y": -3246.3409311605897, "z": 0 }, "ucs": [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1] };
let walls = LoadEntityFromFileData<RoomWallArc>(d);
new RoomWallParse(true, undefined, false).Parse(walls);
TestWallCurveParse(walls);
});
test('圆弧变大', () =>
{
let d =
{ "file": [3, "RoomWallLine", 1, 1, 8, 2, 132, false, 1, 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, 120, 3867.7013058450952, -3385.5303107163154, 0, 4324.820559176989, -2489.8530633416094, 0, "RoomWallLine", 1, 1, 8, 2, 138, false, 1, 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, 120, 4368.224610814555, -2493.5628308074615, 0, 5377.444078714081, -3344.9072268953387, 0, "RoomWallArc", 1, 8, 2, 136, false, 1, 7, 0, [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 4496.077612614482, -741.9233039201708, 0, 1], 0, 0, true, [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 1620.5085099927596, 2464.3397133082917, 0, 1], 0, 120, 2, 1756.2993543878508, 4.614723617787329, 4.639527713792698, false], "basePt": { "x": 3814.2590014776024, "y": -3412.8052095042535, "z": 0 }, "ucs": [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1] };
let walls = LoadEntityFromFileData<RoomWallArc>(d);
TestWallCurveParse(walls);
});
test('圆弧与直线延伸连接错误', () =>
{
let d =
{ "file": [2, "RoomWallArc", 1, 8, 2, 100, false, 1, 7, 0, [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 2831.24102051533, 476.8924187725631, 0, 1], 0, 0, true, [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 2831.24102051533, 476.8924187725631, 0, 1], 0, 120, 2, 1231.4251427066417, 1.9644787303181133, 4.318706576861472, true, "RoomWallLine", 1, 1, 8, 2, 101, false, 1, 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, 120, 2358.8765342960287, 1614.1169675090252, 0, 2358.8765342960282, -660.3321299638985, 0], "basePt": { "x": 2298.876518562205, "y": -814.1042853289994, "z": 0 }, "ucs": [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1] };
let walls = LoadEntityFromFileData<RoomWallArc>(d);
TestWallCurveParse(walls);
});
function TestCurveType(c: Curve)
{
expect(c[CURVE_FACE_TYPE_KEY]).toMatchSnapshot();
}
test('因为面域分析导致的墙类型不对', () =>
{
let d =
{ "file": [2, "RoomWallLine", 1, 1, 8, 2, 146, false, 1, 7, 0, [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 25294.194645009495, -1243.0158909486802, 0, 1], 0, 0, true, [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 25294.194645009495, -1243.0158909486802, 0, 1], 0, 120, 4540.8123335336095, 1690.993449999878, 0, 8037.34909787654, 3003.6781037037035, 0, "RoomWallArc", 1, 8, 2, 147, false, 1, 7, 0, [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 33875.59985973879, -98.25468714960243, 0, 1], 0, 0, true, [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 33875.59985973879, -98.25468714960243, 0, 1], 0, 120, 2, 1936.89677036127, 1.8555182812506865, 4.681440295344441, true], "basePt": { "x": 29813.9186811755, "y": -2094.4402340246024, "z": 0 }, "ucs": [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1] };
let walls = LoadEntityFromFileData<RoomWallBase>(d);
new RoomWallParse(true, undefined, false).Parse(walls);
for (let w of walls)
{
w.LeftCurves.forEach(TestCurveType);
w.RightCurves.forEach(TestCurveType);
w.LidCurves.forEach(TestCurveType);
}
});
test('墙厚度导致的破面', () =>
{
let d =
{ "file": [5, "RoomWallLine", 1, 1, 8, 2, 182, false, 1, 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, 240, 11267.149565616683, 3556.463141871858, 0, 6209.54639995897, 1648.7027338926612, 0, "RoomWallLine", 1, 1, 8, 2, 226, false, 1, 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, 120, 13215.079750883982, 2493.2410833026615, 0, 4095.0486089909755, 2493.2410833026615, 0, "RoomWallLine", 1, 1, 8, 2, 348, false, 1, 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, 120, 6209.54639995897, 1648.7027338926612, 0, 13215.079750883982, 2493.2410833026615, 0, "RoomWallLine", 1, 1, 8, 2, 350, false, 1, 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, 240, 19704.739930166426, 2493.2410833026615, 0, 14776.045214490798, 1417.472659820908, 0, "RoomWallLine", 1, 1, 8, 2, 351, false, 1, 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, 120, 14776.045214490798, 1417.472659820908, 0, 14890.795870036949, -473.79760778945183, 0], "basePt": { "x": 4095.0486089909755, "y": -477.4313566665644, "z": 0 }, "ucs": [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1] };
let walls = LoadEntityFromFileData<RoomWallBase>(d);
TestWallCurveParse(walls);
//
let d2 =
{ "file": [3, "RoomWallLine", 1, 1, 8, 2, 182, false, 1, 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, 240, 6727.498057253742, 3560.1172669223483, 0, 6209.54639995897, 1648.7027338926612, 0, "RoomWallLine", 1, 1, 8, 2, 226, false, 1, 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, 120, 13215.079750883982, 2493.2410833026615, 0, 4095.0486089909755, 2493.2410833026615, 0, "RoomWallLine", 1, 1, 8, 2, 348, false, 1, 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, 120, 6209.54639995897, 1648.7027338926612, 0, 13215.079750883982, 2493.2410833026615, 0], "basePt": { "x": 4095.0486089909755, "y": 1589.1340295891598, "z": 0 }, "ucs": [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1] };
walls = LoadEntityFromFileData<RoomWallBase>(d2);
TestWallCurveParse(walls);
});
test('不同厚度的墙合理的延伸', () =>
{
let d =
{ "file": [4, "RoomWallLine", 1, 1, 8, 2, 100, false, 1, 7, 0, [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, -4214.193942419408, -1440.0043542405433, 0, 1], 0, 0, true, [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, -4214.193942419408, -1440.0043542405433, 0, 1], 0, 240, 7967.554880617505, 3146.8334229914917, 0, 6209.54639995897, 1648.7027338926612, 0, "RoomWallLine", 1, 1, 8, 2, 101, false, 1, 7, 0, [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, -4214.193942419408, -1440.0043542405433, 0, 1], 0, 0, true, [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, -4214.193942419408, -1440.0043542405433, 0, 1], 0, 120, 6209.54639995897, 1648.7027338926612, 0, 4161.649025909495, 2005.5816431119943, 0, "RoomWallLine", 1, 1, 8, 2, 102, false, 1, 7, 0, [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, -3647.4661029658027, -2776.6553702892907, 0, 1], 0, 0, true, [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, -3647.4661029658027, -2776.6553702892907, 0, 1], 0, 240, 4095.0486089909755, 2493.2410833026615, 0, 6075.834594752296, 1322.2148703338619, 0, "RoomWallLine", 1, 1, 8, 2, 103, false, 1, 7, 0, [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, -3647.4661029658027, -2776.6553702892907, 0, 1], 0, 0, true, [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, -3647.4661029658027, -2776.6553702892907, 0, 1], 0, 120, 6075.834594752296, 1322.2148703338619, 0, 7901.571915130223, 1858.040227258869, 0], "basePt": { "x": -62.84563758389231, "y": -1557.7388499328842, "z": 0 }, "ucs": [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1] };
let walls = LoadEntityFromFileData<RoomWallBase>(d);
TestWallCurveParse(walls);
});
test('分裂的曲线必须保持顺序', () =>
{
let d =
{ "file": [3, "RoomWallLine", 1, 1, 8, 2, 102, false, 1, 7, 108, [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, 120, 4905.698242144638, -91.6907730673316, 0, 4905.698242144638, 8703.733026932669, 0, "RoomWallLine", 1, 1, 8, 2, 127, false, 1, 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, 120, 3004.7210505533426, 4709.805358965871, 0, 7874.296850553343, 4709.805358965871, 0, "RoomWallLine", 1, 1, 8, 2, 137, false, 1, 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, 120, 3901.0439746724787, 2360.5634076145334, 0, 5645.054974672479, 2360.5634076145334, 0], "basePt": { "x": 3004.7210505533426, "y": -91.6907730673316, "z": 0 }, "ucs": [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1] };
let walls = LoadEntityFromFileData<RoomWallBase>(d);
new RoomWallParse(true, undefined, false).Parse(walls);
for (let c of walls[0].LeftCurves)
expect(c.Length).toMatchNumberSnapshot();
});
test('删除共面(同向)墙线', () =>
{
let d =
{ "file": [3, "RoomWallLine", 1, 3, 8, 2, 107, false, 1, 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, 120, 0, 2700, 5651.575210577166, 5517.021087841073, 0, 4448.422258703592, 5517.021087841073, 0, "RoomWallLine", 1, 3, 8, 2, 108, false, 1, 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, 120, 0, 2700, 4448.422258703592, 4477.491540022665, 0, 5651.575210577166, 5517.021087841073, 0, "RoomWallLine", 1, 3, 8, 2, 102, false, 1, 7, 0, [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, -3964.6797074899305, 60, 0, 1], 0, 0, true, [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, -3964.6797074899305, 60, 0, 1], 0, 120, 0, 2700, 8413.101966193522, 4417.491540022665, 0, 8413.101966193522, 5517.021087841073, 0], "basePt": { "x": 4388.422258703592, "y": 4432.090428143906, "z": 0 }, "ucs": [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1] };
let walls = LoadEntityFromFileData<RoomWallBase>(d);
new RoomWallParse(true, undefined, false).Parse(walls);
for (let c of walls[0].LeftCurves)
expect(c.Length).toMatchNumberSnapshot();
for (let c of walls[0].RightCurves)
expect(c.Length).toMatchNumberSnapshot();
for (let c of walls[0].LidCurves)
expect(c.Length).toMatchNumberSnapshot();
});
test('z不为0时分析错误', () =>
{
let d =
{ "file": [2, "RoomWallLine", 1, 3, 8, 2, 124, false, 1, 7, 0, [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, -13710.71648240625, 1], 0, 0, true, [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, -13710.71648240625, 1], 0, 120, 0, 2700, 7598.467587478741, -303.5140527181652, 0, 5724.050903378557, -303.5140527181652, 0, "RoomWallLine", 1, 3, 8, 2, 126, false, 1, 7, 0, [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, -13710.71648240625, 1], 0, 0, true, [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, -13710.71648240625, 1], 0, 120, 0, 2700, 5776.923628395063, -1966.0055000000004, 0, 5776.923628395063, -303.5140527181652, 0], "basePt": { "x": 5716.923628395063, "y": -1966.0055000000004, "z": -13710.71648240625 }, "ucs": [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1] };
let walls = LoadEntityFromFileData<RoomWallBase>(d);
new RoomWallParse(true, undefined, false).Parse(walls);
for (let c of walls[0].LeftCurves)
expect(c.Length).toMatchNumberSnapshot();
for (let c of walls[0].RightCurves)
expect(c.Length).toMatchNumberSnapshot();
for (let c of walls[0].LidCurves)
expect(c.Length).toMatchNumberSnapshot();
});
test('直线与圆弧正确的删除盖子线', () =>
{
let d =
{ "file": [2, "RoomWallLine", 1, 3, 8, 2, 321, false, 1, 7, 0, [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 5814.300457333236, -2014.354128653851, 0, 1], 0, 0, true, [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 5814.300457333236, -2014.354128653851, 0, 1], 0, 120, 0, 2700, 4062.232098765433, -1342.7555592592594, 0, 4062.232098765433, -564.4939173809105, 0, "RoomWallArc", 3, 8, 2, 329, false, 1, 7, 0, [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 10274.71129794628, -2578.8480460347614, 0, 1], 0, 0, true, [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1], 0, 79.4, 0, 2700, 2, 398.1787418476097, 3.141592653589793, 0, true], "basePt": { "x": 9816.53255609867, "y": -3357.10968791311, "z": 0 }, "ucs": [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1] };
let walls = LoadEntityFromFileData<RoomWallLine>(d);
TestWallCurveParse(walls);
});
test("直线与圆弧正确的删除盖子线(盒子问题导致点不在线内)", () =>
{
let d =
{ "file": [2, "RoomWallLine", 1, 3, 8, 2, 100, false, 1, 7, 0, [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, -4002.9032397050305, 1355.3730089236885, 0, 1], 0, 0, true, [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, -4002.9032397050305, 1355.3730089236885, 0, 1], 0, 120, 0, 2700, 4062.232098765433, -1342.7555592592594, 0, 4062.232098765433, -564.4939173809105, 0, "RoomWallArc", 3, 8, 2, 101, false, 1, 7, 0, [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 457.50760090801305, 790.879091542778, 0, 1], 0, 0, true, [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, -9817.203697038267, 3369.7271375775395, 0, 1], 0, 79.4, 0, 2700, 2, 398.1787418476097, 3.141592653589793, 0, true], "basePt": { "x": -0.6711409395975352, "y": 12.61744966442916, "z": 0 }, "ucs": [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1] };
let walls = LoadEntityFromFileData<RoomWallLine>(d);
TestWallCurveParse(walls);
});
test('当墙线无法连接时,如何正确的构造补盖子', () =>
{
let d =
{ "file": [9, "RoomWallLine", 1, 3, 8, 2, 339, false, 1, 7, 0, [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 7217.456664648465, -1894.8615838193816, 0, 1], 0, 0, true, [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 7217.456664648465, -1894.8615838193816, 0, 1], 0, 120, 0, 2700, 4062.232098765433, -1342.7555592592594, 0, 4062.232098765433, -564.4939173809105, 0, "RoomWallLine", 1, 3, 8, 2, 340, false, 1, 7, 0, [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 8013.814148343685, -1894.8615838193816, 0, 1], 0, 0, true, [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 8013.814148343685, -1894.8615838193816, 0, 1], 0, 120, 0, 2700, 4062.232098765433, -1342.7555592592594, 0, 4062.232098765433, -564.4939173809105, 0, "RoomWallArc", 3, 8, 2, 341, false, 1, 7, 0, [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 11677.867505261509, -2193.9002477543822, 0, 1], 0, 0, true, [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 1403.156207315229, 384.9477982803792, 0, 1], 0, 79.4, 0, 2700, 2, 478.5528205343455, 3.7296000539487326, 5.695177906820645, false, "RoomWallArc", 3, 8, 2, 351, false, 1, 7, 0, [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 12389.102624216875, -4664.875489893385, 0, 1], 0, 0, true, [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 12389.102624216875, -4664.875489893385, 0, 1], 0, 120, 0, 2700, 2, 650.9555889330982, 3.5047861266781557, 1.933989799883259, true, "RoomWallArc", 3, 8, 2, 352, false, 1, 7, 0, [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 11630.198920513172, -5382.7623047082, 0, 1], 0, 0, true, [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 11630.198920513172, -5382.7623047082, 0, 1], 0, 120, 0, 2700, 2, 509.34281481481474, 4.71238898038469, 1.2710208225794375, true, "RoomWallArc", 3, 8, 2, 353, false, 1, 7, 0, [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 13594.136530602049, -5164.386835115858, 0, 1], 0, 0, true, [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 13594.136530602049, -5164.386835115858, 0, 1], 0, 120, 0, 2700, 2, 1161.464210626378, 4.257793586605462, 3.0072263466808797, true, "RoomWallArc", 3, 8, 2, 354, false, 1, 7, 0, [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 13594.136530602049, -5164.386835115861, 0, 1], 0, 0, true, [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 13594.136530602049, -5164.386835115861, 0, 1], 0, 60, 0, 2700, 2, 1161.4642106263777, 3.007226346680878, 1.8127952409032286, true, "RoomWallLine", 1, 3, 8, 2, 267, false, 1, 7, 0, [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 5903.979246945206, 0, 0, 1], 0, 0, true, [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 5903.979246945206, 0, 0, 1], 0, 120, 0, 2700, 4062.232098765433, -1342.7555592592594, 0, 4062.232098765433, -564.4939173809105, 0, "RoomWallArc", 3, 8, 2, 263, false, 1, 7, 0, [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 10845.59552118646, -564.4939173809105, 0, 1], 0, 0, true, [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 10845.59552118646, -564.4939173809105, 0, 1], 0, 80, 0, 2700, 2, 879.3841754758232, 0, 3.141592653589793, true], "basePt": { "x": 9906.211345710639, "y": -6261.797630578768, "z": 0 }, "ucs": [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1] };
let walls = LoadEntityFromFileData<RoomWallLine>(d);
TestWallCurveParse(walls);
});
test('精度导致0.02线丢失导致区域丢失', () =>
{
let d =
{ "file": [7, "RoomWallLine", 1, 3, 8, 2, 113, false, 1, 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, 120, 0, 2700, 36684.65714498695, 6147.320275722739, 0, 36684.65714498695, -51.88108393827861, 0, "RoomWallLine", 1, 3, 8, 2, 118, false, 1, 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, 120, 0, 2700, 42738.506121433034, 6087.320275722739, 0, 36625.65714498695, 6087.320275722739, 0, "RoomWallLine", 1, 3, 8, 2, 117, false, 1, 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, 120, 0, 2700, 42738.506121433034, 3309.5257186513045, 0, 42738.506121433034, 6087.320275722739, 0, "RoomWallLine", 1, 3, 8, 2, 122, false, 1, 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, 120, 0, 2700, 36684.65714498695, 43.94864216606105, 0, 42738.506121433034, 3309.5257186513045, 0, "RoomWallLine", 1, 3, 8, 2, 116, false, 1, 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, 120, 0, 2700, 47479.48970448707, 3309.5257186513045, 0, 42738.506121433034, 3309.5257186513045, 0, "RoomWallLine", 1, 3, 8, 2, 115, false, 1, 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, 120, 0, 2700, 47479.48970448707, -51.88108393827906, 0, 47479.48970448707, 3309.5257186513045, 0, "RoomWallLine", 1, 3, 8, 2, 114, false, 1, 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, 120, 0, 2700, 36684.65714498695, -51.88108393827861, 0, 47479.48970448707, -51.88108393827906, 0], "basePt": { "x": 36624.65714498695, "y": -111.88108393827906, "z": 0 }, "ucs": [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1] };
let walls = LoadEntityFromFileData<RoomWallLine>(d);
TestWallCurveParse(walls);
});
test('圆弧和直线更好的连接', () =>
{
let d =
{ "file": [6, "RoomWallArc", 3, 10, 2, 120, 0, 1, 7, 102, [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 1998.616862023093, 2332.495323420249, 0, 1], 0, 0, 1, [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 1998.616862023093, 2332.495323420249, 0, 1], 0, 0, 1, 240, 0, 2700, 2, 816.5366261842003, 3.686088264078142, 5.499101651185726, true, "RoomWallLine", 1, 3, 10, 2, 131, 0, 1, 7, 102, [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, -849.9399805162709, 2490.400450694376, 0, 1], 0, 0, 1, [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, -849.9399805162709, 2490.400450694376, 0, 1], 0, 0, 1, 120, 0, 2700, 4062.232098765433, -1342.7555592592594, 0, 4062.232098765433, -564.4939173809105, 0, "RoomWallArc", 3, 10, 2, 132, 0, 1, 7, 102, [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 3610.4708600967724, 1925.9065333134654, 0, 1], 0, 0, 1, [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, -6664.2404378495075, 4504.754579348227, 0, 1], 0, 0, 1, 79.4, 0, 2700, 2, 398.1787418476097, 3.141592653589793, 0, true, "RoomWallLine", 1, 3, 10, 2, 133, 0, 1, 7, 102, [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 3121.85890514528, 904.3843908214958, 0, 1], 0, 0, 1, [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 3121.85890514528, 904.3843908214958, 0, 1], 0, 0, 1, 120, 0, 2700, 1163.98988034188, -740.0590769230768, 0, 1163.98988034188, 1293.0338461538458, 0, "RoomWallArc", 3, 10, 2, 134, 0, 1, 7, 102, [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 4894.31231713923, 1872.7421567357342, 0, 1], 0, 0, 1, [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 4894.31231713923, 1872.7421567357342, 0, 1], 0, 0, 1, 83.19999999999999, 0, 2700, 2, 689.6683452430339, 2.651427814942449, 0.25057679314182574, true, "RoomWallLine", 1, 3, 10, 2, 119, 0, 1, 7, 102, [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 136.17080574596844, 616.5063588457942, 0, 1], 0, 0, 1, [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 136.17080574596844, 616.5063588457942, 0, 1], 0, 0, 1, 120, 0, 2700, 1163.98988034188, -740.0590769230768, 0, 1163.98988034188, 1293.0338461538458, 0], "basePt": { "x": 1062.2654215934056, "y": -123.55271807728252, "z": 0 }, "ucs": [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1] };
let walls = LoadEntityFromFileData<RoomWallLine>(d);
TestWallCurveParse(walls);
});
test('墙体厚度导致左侧线长度为0', () =>
{
let d =
{ "file": [7, "RoomWallLine", 1, 3, 10, 2, 622, 0, 1, 7, 498, [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, 200, 0, 2700, 18168.522308571442, 15251.502132819674, 0, 20009.303680586454, 15251.502132819674, 0, "RoomWallLine", 1, 3, 10, 2, 623, 0, 1, 7, 498, [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, 200, 0, 2700, 20009.303680586454, 15251.502132819674, 0, 20009.303680586454, 15051.502131717672, 0, "RoomWallLine", 1, 3, 10, 2, 624, 0, 1, 7, 498, [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, 200, 0, 2700, 20009.303680586454, 15051.502131717672, 0, 20209.303680586454, 15051.502129513668, 0, "RoomWallLine", 1, 3, 10, 2, 625, 0, 1, 7, 498, [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, 200, 0, 2700, 20209.303680586454, 15051.502129513668, 0, 20209.303680586454, 15251.502132819674, 0, "RoomWallLine", 1, 3, 10, 2, 626, 0, 1, 7, 498, [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, 200, 0, 2700, 20209.303680586454, 15251.502132819674, 0, 21537.951376377354, 15251.502132819674, 0, "RoomWallLine", 1, 3, 10, 2, 627, 0, 1, 7, 498, [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, 200, 0, 2700, 21537.951376377354, 15251.502132819674, 0, 21537.951376377354, 13456.26600336619, 0, "RoomWallLine", 1, 3, 10, 2, 628, 0, 1, 7, 498, [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, 200, 0, 2700, 21537.951376377354, 13456.26600336619, 0, 18168.522308571442, 15251.502132819674, 0], "basePt": { "x": 18121.50004652788, "y": 13368.011219516779, "z": 0 }, "ucs": [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1] };
let walls = LoadEntityFromFileData<RoomWallLine>(d);
TestWallCurveParse(walls);
});