|
|
@ -583,26 +583,64 @@ export class Command_DrawHole implements Command
|
|
|
|
if (!equalv3(wall.StartPoint, route.from.position, 1e-3))
|
|
|
|
if (!equalv3(wall.StartPoint, route.from.position, 1e-3))
|
|
|
|
wall.Reverse();
|
|
|
|
wall.Reverse();
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
let needRevrse = false;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
let length1 = wall1.Length;
|
|
|
|
|
|
|
|
let length2 = wall2.Length;
|
|
|
|
|
|
|
|
|
|
|
|
if (!equalv3(wall1.EndPoint, route.from.position, 1e-3))
|
|
|
|
if (!equalv3(wall1.EndPoint, route.from.position, 1e-3))
|
|
|
|
|
|
|
|
{
|
|
|
|
wall1.Reverse();
|
|
|
|
wall1.Reverse();
|
|
|
|
|
|
|
|
let wall1Range = ParseWallRange(orgWalls[0])[0];
|
|
|
|
|
|
|
|
length1 *= wall1Range[1];
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
//需要翻转洞的方向
|
|
|
|
|
|
|
|
if (wall1Range.left !== WallFaceType.Inside)
|
|
|
|
|
|
|
|
needRevrse = true;
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
else
|
|
|
|
|
|
|
|
{
|
|
|
|
|
|
|
|
let wall1Range = arrayLast(ParseWallRange(orgWalls[0]));
|
|
|
|
|
|
|
|
length1 *= 1 - wall1Range[0];
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
//需要翻转洞的方向
|
|
|
|
|
|
|
|
if (wall1Range.right !== WallFaceType.Inside)
|
|
|
|
|
|
|
|
needRevrse = true;
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
if (!equalv3(wall2.StartPoint, route.to.position, 1e-3))
|
|
|
|
if (!equalv3(wall2.StartPoint, route.to.position, 1e-3))
|
|
|
|
|
|
|
|
{
|
|
|
|
wall2.Reverse();
|
|
|
|
wall2.Reverse();
|
|
|
|
|
|
|
|
let wall2Range = arrayLast(ParseWallRange(orgWalls[2]));
|
|
|
|
|
|
|
|
length2 *= 1 - wall2Range[0];
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
else
|
|
|
|
|
|
|
|
{
|
|
|
|
|
|
|
|
let wall2Range = ParseWallRange(orgWalls[2])[0];
|
|
|
|
|
|
|
|
length2 *= wall2Range[1];
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
if (r1.length > 600)
|
|
|
|
if (length1 > 600)
|
|
|
|
wall1.StartPoint = wall1.GetPointAtDistance(wall1.Length - 600);
|
|
|
|
wall1.StartPoint = wall1.GetPointAtDistance(wall1.Length - 600);
|
|
|
|
else
|
|
|
|
else
|
|
|
|
wall1.StartPoint = r1.to.position;
|
|
|
|
wall1.StartPoint = wall1.GetPointAtDistance(wall1.Length - length1);
|
|
|
|
|
|
|
|
|
|
|
|
if (r2.length > 600)
|
|
|
|
if (length2 > 600)
|
|
|
|
wall2.EndPoint = wall2.GetPointAtDistance(600);
|
|
|
|
wall2.EndPoint = wall2.GetPointAtDistance(600);
|
|
|
|
else
|
|
|
|
else
|
|
|
|
wall2.EndPoint = r2.to.position;
|
|
|
|
wall2.EndPoint = wall2.GetPointAtDistance(length2);
|
|
|
|
|
|
|
|
|
|
|
|
fakerWalls = [wall1, wall, wall2];
|
|
|
|
fakerWalls = [wall1, wall, wall2];
|
|
|
|
|
|
|
|
|
|
|
|
preWalls = orgWalls;
|
|
|
|
preWalls = orgWalls;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if (needRevrse)
|
|
|
|
|
|
|
|
{
|
|
|
|
|
|
|
|
fakerWalls.reverse();
|
|
|
|
|
|
|
|
orgWalls.reverse();
|
|
|
|
|
|
|
|
for (let w of fakerWalls) w.Reverse();
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
let lowestwall = orgWalls.reduce((pre, cur) => //高度最低的墙
|
|
|
|
let lowestwall = orgWalls.reduce((pre, cur) => //高度最低的墙
|
|
|
|
{
|
|
|
|
{
|
|
|
|
return pre.Height < cur.Height ? pre : cur;
|
|
|
|
return pre.Height < cur.Height ? pre : cur;
|
|
|
|