Files
PDFPatcher/App/Model/DistanceInfo.cs
T
2022-01-06 09:08:16 +08:00

48 lines
1.7 KiB
C#

using System;
using System.Collections.Generic;
using System.Text;
namespace PDFPatcher.Model
{
[System.Diagnostics.DebuggerDisplay("{Location}={Distance}")]
sealed class DistanceInfo
{
[Flags]
internal enum Placement
{
Unknown = 0,
Overlapping = 1,
Left = 2,
Right = 4,
Up = 8,
Down = 16
}
internal Placement Location { get; private set; }
internal float DistanceX { get; private set; }
internal float DistanceY { get; private set; }
internal bool IsOverlapping => (Location & Placement.Overlapping) != Placement.Unknown;
internal bool IsLeft => (Location & Placement.Left) != Placement.Unknown;
internal bool IsRight => (Location & Placement.Right) != Placement.Unknown;
internal bool IsAbove => (Location & Placement.Up) != Placement.Unknown;
internal bool IsBelow => (Location & Placement.Down) != Placement.Unknown;
internal bool IsVerticallyAligned => (Location & (Placement.Up | Placement.Down)) != Placement.Unknown;
internal bool IsHorizontallyAligned => (Location & (Placement.Left | Placement.Right)) != Placement.Unknown;
internal float MinDistance => (Location & Placement.Left) != Placement.Unknown || (Location & Placement.Right) != Placement.Unknown
? DistanceX
: (Location & Placement.Down) != Placement.Unknown || (Location & Placement.Up) != Placement.Unknown
? DistanceY : DistanceRadial;
internal float DistanceRadial => DistanceX == Single.MaxValue || DistanceY == Single.MaxValue
? Single.MaxValue
: (float)Math.Sqrt(DistanceX * DistanceX + DistanceY * DistanceY);
internal DistanceInfo(Placement location, float distanceX, float distanceY) {
Location = location;
DistanceX = distanceX;
DistanceY = distanceY;
}
}
}