NavisworksTransport/UnitTests/CoordinateSystem/ViewpointHelperTests.cs

81 lines
3.2 KiB
C#

using Microsoft.VisualStudio.TestTools.UnitTesting;
using NavisworksTransport.Utils;
using System.Numerics;
namespace NavisworksTransport.UnitTests.CoordinateSystem
{
[TestClass]
public class ViewpointHelperTests
{
[TestMethod]
public void ResolvePathViewpointProfile_ShouldReturnExpectedDefaults()
{
var ground = ViewpointHelper.ResolvePathViewpointProfile(ViewpointHelper.ViewpointStrategy.PathGroundSelection);
var hoisting = ViewpointHelper.ResolvePathViewpointProfile(ViewpointHelper.ViewpointStrategy.PathHoistingSelection);
var rail = ViewpointHelper.ResolvePathViewpointProfile(ViewpointHelper.ViewpointStrategy.PathRailSelection);
Assert.AreEqual(1.0, ground.DistanceScale, 1e-9);
Assert.AreEqual(12.0, ground.MinDistanceMeters, 1e-9);
Assert.AreEqual(1.2, hoisting.DistanceScale, 1e-9);
Assert.AreEqual(8.0, hoisting.MinDistanceMeters, 1e-9);
Assert.AreEqual(22.0, hoisting.ElevationDegrees, 1e-9);
Assert.AreEqual(0.9, rail.DistanceScale, 1e-9);
Assert.AreEqual(6.0, rail.MinDistanceMeters, 1e-9);
Assert.AreEqual(12.0, rail.ElevationDegrees, 1e-9);
}
[TestMethod]
public void ResolveCameraOffsetDirection_Hoisting_ShouldLookFromBehindAndAbove()
{
Vector3 hostUp = Vector3.UnitZ;
Vector3 forward = Vector3.UnitX;
Vector3 offset = ViewpointHelper.ResolveCameraOffsetDirection(PathType.Hoisting, hostUp, forward);
Assert.IsTrue(offset.X < -0.8f);
Assert.IsTrue(offset.Z > 0.3f);
}
[TestMethod]
public void ResolveCameraOffsetDirection_Rail_ShouldLookFromSideAndSlightlyAbove()
{
Vector3 hostUp = Vector3.UnitZ;
Vector3 forward = Vector3.UnitX;
Vector3 offset = ViewpointHelper.ResolveCameraOffsetDirection(PathType.Rail, hostUp, forward);
Assert.AreEqual(0.0f, offset.X, 1e-5f);
Assert.IsTrue(offset.Y > 0.9f);
Assert.IsTrue(offset.Z > 0.15f);
}
[TestMethod]
public void ResolveHorizontalPathForward_ShouldFallbackWhenPathIsVertical()
{
Vector3 hostUp = Vector3.UnitZ;
Vector3 rawVertical = Vector3.UnitZ;
Vector3 fallback = Vector3.UnitY;
Vector3 resolved = ViewpointHelper.ResolveHorizontalPathForward(rawVertical, hostUp, fallback);
Assert.AreEqual(0.0f, resolved.Z, 1e-5f);
Assert.AreEqual(1.0f, resolved.Y, 1e-5f);
}
[TestMethod]
public void ResolveFocusViewpointProfile_ShouldCentralizeNamedFocusStrategies()
{
var modelFocus = ViewpointHelper.ResolveFocusViewpointProfile(ViewpointHelper.ViewpointStrategy.ModelFocus);
var collision = ViewpointHelper.ResolveFocusViewpointProfile(ViewpointHelper.ViewpointStrategy.CollisionCloseUp);
Assert.AreEqual(60.0, modelFocus.ViewAngleDegrees, 1e-9);
Assert.AreEqual(0.25, modelFocus.TargetViewRatio, 1e-9);
Assert.AreEqual(60.0, collision.ViewAngleDegrees, 1e-9);
Assert.AreEqual(0.25, collision.TargetViewRatio, 1e-9);
}
}
}