优化:户型中不同厚度的直线墙与圆弧墙延伸连接效果

pull/2122/head
ChenX 2 years ago
parent b0981998e2
commit af78e25b9f

@ -301,3 +301,13 @@ test('精度导致0.02线丢失导致区域丢失', () =>
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);
});

@ -614,6 +614,158 @@ Array [
]
`;
exports[`圆弧和直线更好的连接 1`] = `
Array [
-549.404296825361,
758.4561759352448,
0,
]
`;
exports[`圆弧和直线更好的连接 2`] = `
Array [
-278.4546336949927,
638.4561759352445,
0,
]
`;
exports[`圆弧和直线更好的连接 3`] = `
Array [
169.92856010460946,
-169.4824016255793,
0,
]
`;
exports[`圆弧和直线更好的连接 4`] = `
Array [
0,
778.2616418783487,
0,
]
`;
exports[`圆弧和直线更好的连接 5`] = `
Array [
0,
897.1824008694182,
0,
]
`;
exports[`圆弧和直线更好的连接 6`] = `
Array [
120,
0,
0,
]
`;
exports[`圆弧和直线更好的连接 7`] = `
Array [
-20.30000000000109,
0,
0,
]
`;
exports[`圆弧和直线更好的连接 8`] = `
Array [
2.6812339980917268e-14,
437.87874184760966,
0,
]
`;
exports[`圆弧和直线更好的连接 9`] = `
Array [
118.9207589910699,
338.1787418476109,
0,
]
`;
exports[`圆弧和直线更好的连接 10`] = `
Array [
79.39999999999964,
0,
0,
]
`;
exports[`圆弧和直线更好的连接 11`] = `
Array [
0,
2004.9128792454385,
0,
]
`;
exports[`圆弧和直线更好的连接 12`] = `
Array [
0,
2053.6418919774133,
0,
]
`;
exports[`圆弧和直线更好的连接 13`] = `
Array [
120,
0,
0,
]
`;
exports[`圆弧和直线更好的连接 14`] = `
Array [
296.4960364081234,
668.4635316520698,
0,
]
`;
exports[`圆弧和直线更好的连接 15`] = `
Array [
345.2250491400981,
548.4635316520698,
0,
]
`;
exports[`圆弧和直线更好的连接 16`] = `
Array [
80.60162736185703,
20.630503305065304,
0,
]
`;
exports[`圆弧和直线更好的连接 17`] = `
Array [
0,
1906.6437446721693,
0,
]
`;
exports[`圆弧和直线更好的连接 18`] = `
Array [
0,
2177.593407802538,
0,
]
`;
exports[`圆弧和直线更好的连接 19`] = `
Array [
120,
0,
0,
]
`;
exports[`墙厚度导致的破面 1`] = `
Array [
-2361.953972758025,
@ -1641,7 +1793,7 @@ Array [
exports[`直线与圆弧正确的删除盖子线 2`] = `
Array [
0,
778.2616418783487,
897.1824008694193,
0,
]
`;
@ -1655,14 +1807,6 @@ Array [
`;
exports[`直线与圆弧正确的删除盖子线 4`] = `
Array [
-20.299999999999272,
0,
0,
]
`;
exports[`直线与圆弧正确的删除盖子线 5`] = `
Array [
-20.30000000000109,
0,
@ -1670,7 +1814,7 @@ Array [
]
`;
exports[`直线与圆弧正确的删除盖子线 6`] = `
exports[`直线与圆弧正确的删除盖子线 5`] = `
Array [
2.6812339980917268e-14,
437.87874184760966,
@ -1678,15 +1822,15 @@ Array [
]
`;
exports[`直线与圆弧正确的删除盖子线 7`] = `
exports[`直线与圆弧正确的删除盖子线 6`] = `
Array [
2.1950492188302275e-14,
358.4787418476097,
118.92075899107067,
338.17874184761064,
0,
]
`;
exports[`直线与圆弧正确的删除盖子线 8`] = `
exports[`直线与圆弧正确的删除盖子线 7`] = `
Array [
79.39999999999964,
0,
@ -1705,7 +1849,7 @@ Array [
exports[`直线与圆弧正确的删除盖子线(盒子问题导致点不在线内) 2`] = `
Array [
0,
778.2616418783487,
897.182400869419,
0,
]
`;
@ -1719,14 +1863,6 @@ Array [
`;
exports[`直线与圆弧正确的删除盖子线(盒子问题导致点不在线内) 4`] = `
Array [
-20.299999999999102,
0,
0,
]
`;
exports[`直线与圆弧正确的删除盖子线(盒子问题导致点不在线内) 5`] = `
Array [
-20.30000000000092,
0,
@ -1734,7 +1870,7 @@ Array [
]
`;
exports[`直线与圆弧正确的删除盖子线(盒子问题导致点不在线内) 6`] = `
exports[`直线与圆弧正确的删除盖子线(盒子问题导致点不在线内) 5`] = `
Array [
2.6812339980917268e-14,
437.87874184760966,
@ -1742,15 +1878,15 @@ Array [
]
`;
exports[`直线与圆弧正确的删除盖子线(盒子问题导致点不在线内) 7`] = `
exports[`直线与圆弧正确的删除盖子线(盒子问题导致点不在线内) 6`] = `
Array [
2.1950492188302275e-14,
358.4787418476097,
118.92075899107037,
338.17874184761075,
0,
]
`;
exports[`直线与圆弧正确的删除盖子线(盒子问题导致点不在线内) 8`] = `
exports[`直线与圆弧正确的删除盖子线(盒子问题导致点不在线内) 7`] = `
Array [
79.40000000000009,
0,

@ -334,8 +334,8 @@ export class RoomWallParse
iPam[0] = iPam[1];
}
let isExtend = (preR.isReverse ? iPam[0].thisParam > 1 : iPam[0].thisParam < 0)
&& (nowR.isReverse ? iPam[0].argParam > 1 : iPam[0].argParam < 0);
let isExtend = (preR.isReverse ? iPam[0].thisParam > 0 : iPam[0].thisParam < 1)
&& (nowR.isReverse ? iPam[0].argParam > 0 : iPam[0].argParam < 1);
//tp 必须不能破坏圆弧,否则造成裁剪错误
if (!isExtend || p.distanceToSquared(v.position) > 500 * 500)

Loading…
Cancel
Save