147 lines
5.7 KiB
C#
147 lines
5.7 KiB
C#
using Autodesk.Navisworks.Api;
|
|
using Microsoft.VisualStudio.TestTools.UnitTesting;
|
|
using NavisworksTransport.Utils.CoordinateSystem;
|
|
using System.Numerics;
|
|
|
|
namespace NavisworksTransport.UnitTests.CoordinateSystem
|
|
{
|
|
[TestClass]
|
|
public class HoistingCoordinateHelperTests
|
|
{
|
|
[TestMethod]
|
|
public void OffsetAlongUp_YUp_ShouldChangeHostYOnly()
|
|
{
|
|
var adapter = new HostCoordinateAdapter(CoordinateSystemType.YUp);
|
|
var startPoint = new Vector3(1.0f, 2.0f, 3.0f);
|
|
|
|
Vector3 liftedPoint = HoistingCoordinateHelper.OffsetAlongUp3(startPoint, 10.0, adapter);
|
|
|
|
AssertPoint(liftedPoint, 1.0, 12.0, 3.0);
|
|
}
|
|
|
|
[TestMethod]
|
|
public void ProjectToAerialElevation_YUp_ShouldKeepGroundHorizontalCoords()
|
|
{
|
|
var adapter = new HostCoordinateAdapter(CoordinateSystemType.YUp);
|
|
var groundPoint = new Vector3(4.0f, 5.0f, 6.0f);
|
|
var aerialReferencePoint = new Vector3(1.0f, 12.0f, 3.0f);
|
|
|
|
Vector3 projectedPoint = HoistingCoordinateHelper.ProjectToAerialElevation3(groundPoint, aerialReferencePoint, adapter);
|
|
|
|
AssertPoint(projectedPoint, 4.0, 12.0, 6.0);
|
|
}
|
|
|
|
[TestMethod]
|
|
public void RelativeHeight_YUp_ShouldUseHostYDifference()
|
|
{
|
|
var adapter = new HostCoordinateAdapter(CoordinateSystemType.YUp);
|
|
var groundPoint = new Vector3(-10.0f, -30.0f, 8.0f);
|
|
var aerialPoint = new Vector3(-10.0f, 35.0f, 8.0f);
|
|
|
|
double relativeHeight = HoistingCoordinateHelper.GetRelativeHeight3(groundPoint, aerialPoint, adapter);
|
|
|
|
Assert.AreEqual(65.0, relativeHeight, 1e-9);
|
|
}
|
|
|
|
[TestMethod]
|
|
public void SetElevation_YUp_ShouldRestoreClickedGroundElevationWithoutChangingHorizontalProjection()
|
|
{
|
|
var adapter = new HostCoordinateAdapter(CoordinateSystemType.YUp);
|
|
var aerialPoint = new Vector3(-180.50f, 28.17f, 14.83f);
|
|
var clickedGroundPoint = new Vector3(-180.50f, -12.40f, 14.83f);
|
|
|
|
Vector3 landingPoint = HoistingCoordinateHelper.SetElevation3(
|
|
aerialPoint,
|
|
HoistingCoordinateHelper.GetElevation(clickedGroundPoint, adapter),
|
|
adapter);
|
|
|
|
AssertPoint(landingPoint, -180.50, -12.40, 14.83);
|
|
}
|
|
|
|
[TestMethod]
|
|
public void CreateHorizontalTurnPoint_YUp_ShouldOperateInHostXZPlane()
|
|
{
|
|
var adapter = new HostCoordinateAdapter(CoordinateSystemType.YUp);
|
|
var currentPoint = new Vector3(-168.70f, 28.17f, -30.01f);
|
|
var nextPoint = new Vector3(-180.50f, 28.17f, 14.83f);
|
|
|
|
Vector3 turnPointKeepCurrentX = HoistingCoordinateHelper.CreateHorizontalTurnPoint3(
|
|
currentPoint,
|
|
nextPoint,
|
|
keepCurrentFirstHorizontalAxis: true,
|
|
adapter: adapter);
|
|
Vector3 turnPointKeepCurrentZ = HoistingCoordinateHelper.CreateHorizontalTurnPoint3(
|
|
currentPoint,
|
|
nextPoint,
|
|
keepCurrentFirstHorizontalAxis: false,
|
|
adapter: adapter);
|
|
|
|
AssertPoint(turnPointKeepCurrentX, -168.70, 28.17, 14.83);
|
|
AssertPoint(turnPointKeepCurrentZ, -180.50, 28.17, -30.01);
|
|
}
|
|
|
|
[TestMethod]
|
|
public void GetHorizontalDirection_YUp_ShouldProjectToHostXZPlane()
|
|
{
|
|
var adapter = new HostCoordinateAdapter(CoordinateSystemType.YUp);
|
|
var fromPoint = new Vector3(-164.81f, 45.45f, 74.69f);
|
|
var toPoint = new Vector3(-176.90f, 45.45f, 40.48f);
|
|
|
|
Vector3 horizontalDirection = HoistingCoordinateHelper.GetHorizontalDirection3(fromPoint, toPoint, adapter);
|
|
|
|
Assert.AreEqual(0.0, horizontalDirection.Y, 1e-5);
|
|
Assert.AreEqual(1.0, horizontalDirection.Length(), 1e-5);
|
|
Assert.IsTrue(horizontalDirection.X < 0.0f);
|
|
Assert.IsTrue(horizontalDirection.Z < 0.0f);
|
|
}
|
|
|
|
[TestMethod]
|
|
public void ExtendVerticalTransitionForObjectSpace_YUp_ShouldMoveLowerPointAlongHostY()
|
|
{
|
|
var adapter = new HostCoordinateAdapter(CoordinateSystemType.YUp);
|
|
var lowerPoint = new Vector3(-191.56f, 29.05f, -2.63f);
|
|
|
|
Vector3 extendedPoint = HoistingCoordinateHelper.ExtendVerticalTransitionForObjectSpace3(
|
|
lowerPoint,
|
|
4.0,
|
|
isLowerPoint: true,
|
|
adapter: adapter);
|
|
|
|
AssertPoint(extendedPoint, -191.56, 25.05, -2.63);
|
|
}
|
|
|
|
[TestMethod]
|
|
public void ExtendVerticalTransitionForObjectSpace_YUp_ShouldNotChangeHigherPoint()
|
|
{
|
|
var adapter = new HostCoordinateAdapter(CoordinateSystemType.YUp);
|
|
var higherPoint = new Vector3(-191.56f, 45.45f, -2.63f);
|
|
|
|
Vector3 unchangedPoint = HoistingCoordinateHelper.ExtendVerticalTransitionForObjectSpace3(
|
|
higherPoint,
|
|
4.0,
|
|
isLowerPoint: false,
|
|
adapter: adapter);
|
|
|
|
AssertPoint(unchangedPoint, -191.56, 45.45, -2.63);
|
|
}
|
|
|
|
[TestMethod]
|
|
public void OffsetAlongUp_ZUp_ShouldChangeHostZOnly()
|
|
{
|
|
var adapter = new HostCoordinateAdapter(CoordinateSystemType.ZUp);
|
|
var startPoint = new Vector3(1.0f, 2.0f, 3.0f);
|
|
|
|
Vector3 liftedPoint = HoistingCoordinateHelper.OffsetAlongUp3(startPoint, 10.0, adapter);
|
|
|
|
AssertPoint(liftedPoint, 1.0, 2.0, 13.0);
|
|
}
|
|
|
|
private static void AssertPoint(Vector3 actual, double x, double y, double z)
|
|
{
|
|
Assert.AreEqual(x, actual.X, 1e-5);
|
|
Assert.AreEqual(y, actual.Y, 1e-5);
|
|
Assert.AreEqual(z, actual.Z, 1e-5);
|
|
}
|
|
}
|
|
}
|