Published - Added Mapping shortcut,

added leveled limits, container bug fix,
This commit is contained in:
2022-09-25 20:17:19 -07:00
parent d789f295c6
commit a145a89112
17 changed files with 416 additions and 262 deletions

View File

@ -66,12 +66,8 @@ public class Face : Properties.IFace
public void SetFaceParts(Dictionary<Stateless.FacePart, FacePoint[]> faceParts) => _FaceParts = faceParts;
public void ReleaseFaceDistance() => _FaceDistance = null;
public void SetMapping(Mapping mapping) => _Mapping = mapping;
public void SetFaceDistance(FaceDistance? faceDistance) => _FaceDistance = faceDistance;
public void ClearFaceDistance() => _FaceDistance = null;
}

View File

@ -10,15 +10,17 @@ public class MappingFromItem : Properties.IMappingFromItem
public FileHolder ImageFileHolder { init; get; }
public bool? IsWrongYear { init; get; }
public DateTime MinimumDateTime { init; get; }
public string RelativePath { init; get; }
public FileHolder ResizedFileHolder { init; get; }
[JsonConstructor]
public MappingFromItem(int id, FileHolder imageFileHolder, bool? isWrongYear, DateTime minimumDateTime, FileHolder resizedFileHolder)
public MappingFromItem(int id, FileHolder imageFileHolder, bool? isWrongYear, DateTime minimumDateTime, string relativePath, FileHolder resizedFileHolder)
{
Id = id;
ImageFileHolder = imageFileHolder;
IsWrongYear = isWrongYear;
MinimumDateTime = minimumDateTime;
RelativePath = relativePath;
ResizedFileHolder = resizedFileHolder;
}

View File

@ -7,6 +7,7 @@ public interface IMappingFromItem
public FileHolder ImageFileHolder { init; get; }
public bool? IsWrongYear { init; get; }
public DateTime MinimumDateTime { init; get; }
public string RelativePath { init; get; }
public FileHolder ResizedFileHolder { init; get; }
}

View File

@ -1,4 +1,3 @@
using System.Text.Json;
using System.Text.Json.Serialization;
namespace View_by_Distance.Shared.Models;
@ -18,7 +17,7 @@ public record class SortingContainer : Properties.ISortingContainer
public override string ToString()
{
string result = JsonSerializer.Serialize(this, new JsonSerializerOptions() { WriteIndented = true });
string result = string.Concat(Face.Mapping?.MappingFromItem.Id, '\t', Face.Mapping?.MappingFromLocation.NormalizedPixelPercentage, '\t', Sorting.Id, '\t', Sorting.NormalizedPixelPercentage, '\t', Sorting.Older, '\t', Sorting.WithinRange, '\t', Sorting.DistancePermyriad, '\t', Sorting.DaysDelta);
return result;
}

View File

@ -21,7 +21,7 @@ public interface IAge
char[] TestStatic_GetChars() =>
GetChars();
static char[] GetChars() =>
new char[] { '!', '^', '_', '~' };
new char[] { '!', '^', '_', '~', '+' };
int? TestStatic_GetApproximateYears(string personDisplayDirectoryName, char[] chars) =>
GetApproximateYears(personDisplayDirectoryName, chars);

View File

@ -3,7 +3,13 @@ namespace View_by_Distance.Shared.Models.Stateless.Methods;
public interface IItem
{ // ...
string TestStatic_GetWrongYearFlag(bool? isWrongYear);
string TestStatic_GetWrongYearFlag(bool? isWrongYear) =>
GetWrongYearFlag(isWrongYear);
static string GetWrongYearFlag(bool? isWrongYear) => isWrongYear is null ? "#" : isWrongYear.Value ? "~" : "=";
(List<Models.Item>, int) TestStatic_GetMerged(List<Models.Item> itemsA, List<Models.Item> itemsB) =>
GetMerged(itemsA, itemsB);
static (List<Models.Item>, int) GetMerged(List<Models.Item> itemsA, List<Models.Item> itemsB) =>
Item.GetMerged(itemsA, itemsB);
}

View File

@ -8,9 +8,9 @@ public interface ISorting
static Models.Sorting[] Sort(List<Models.Sorting> collection) =>
(from l in collection orderby l.WithinRange, l.DistancePermyriad, l.DaysDelta select l).ToArray();
Models.Sorting TestStatic_Get(int faceDistancePermyriad, double faceDistanceTolerance, Models.FaceDistance faceDistanceEncoding, Models.FaceDistance faceDistanceLength, bool anyLowerThanTolerance, List<(long lcl, long minimum, long maximum, long ucl)> personKeysRangesCollection) =>
Get(faceDistancePermyriad, faceDistanceTolerance, faceDistanceEncoding, faceDistanceLength, anyLowerThanTolerance, personKeysRangesCollection);
static Models.Sorting Get(int faceDistancePermyriad, double faceDistanceTolerance, Models.FaceDistance faceDistanceEncoding, Models.FaceDistance faceDistanceLength, bool anyLowerThanTolerance, List<(long lcl, long minimum, long maximum, long ucl)> personKeysRangesCollection) =>
Sorting.Get(faceDistancePermyriad, faceDistanceTolerance, faceDistanceEncoding, faceDistanceLength, anyLowerThanTolerance, personKeysRangesCollection);
Models.Sorting TestStatic_Get(int faceDistancePermyriad, double faceDistanceTolerance, Models.FaceDistance faceDistanceEncoding, Models.FaceDistance faceDistanceLength, List<(long lcl, long minimum, long maximum, long ucl)> personKeysRangesCollection) =>
Get(faceDistancePermyriad, faceDistanceTolerance, faceDistanceEncoding, faceDistanceLength, personKeysRangesCollection);
static Models.Sorting Get(int faceDistancePermyriad, double faceDistanceTolerance, Models.FaceDistance faceDistanceEncoding, Models.FaceDistance faceDistanceLength, List<(long lcl, long minimum, long maximum, long ucl)> personKeysRangesCollection) =>
Sorting.Get(faceDistancePermyriad, faceDistanceTolerance, faceDistanceEncoding, faceDistanceLength, personKeysRangesCollection);
}

View File

@ -3,6 +3,28 @@ namespace View_by_Distance.Shared.Models.Stateless.Methods;
internal abstract class Item
{
internal static double GetDefaultValue() => throw new Exception();
internal static (List<Models.Item>, int) GetMerged(List<Models.Item> itemsA, List<Models.Item> itemsB)
{
int result = 0;
List<Models.Item> results = new();
List<string> collection = new();
foreach (Models.Item item in itemsA)
{
if (item.ImageFileHolder is null)
continue;
results.Add(item);
collection.Add(item.ImageFileHolder.FullName);
}
foreach (Models.Item item in itemsB)
{
if (item.ImageFileHolder is null)
continue;
if (collection.Contains(item.ImageFileHolder.FullName))
continue;
result++;
results.Add(item);
}
return new(results, result);
}
}

View File

@ -3,45 +3,31 @@ namespace View_by_Distance.Shared.Models.Stateless.Methods;
internal abstract class Sorting
{
internal static Models.Sorting Get(int faceDistancePermyriad, double faceDistanceTolerance, Models.FaceDistance faceDistanceEncoding, Models.FaceDistance faceDistanceLength, bool anyLowerThanTolerance, List<(long lcl, long minimum, long maximum, long ucl)> personKeysRangesCollection)
internal static Models.Sorting Get(int faceDistancePermyriad, double faceDistanceTolerance, Models.FaceDistance faceDistanceEncoding, Models.FaceDistance faceDistanceLength, List<(long lcl, long minimum, long maximum, long ucl)> personKeysRangesCollection)
{
Models.Sorting result;
if (faceDistanceLength.Length is null)
throw new NotSupportedException();
if (faceDistanceLength.NormalizedPixelPercentage is null)
throw new NotSupportedException();
bool older;
int daysDelta;
int withinRange;
int distancePermyriad;
if (faceDistanceLength.Length.Value == 0 || (anyLowerThanTolerance && faceDistanceLength.Length.Value >= faceDistanceTolerance))
if (faceDistanceEncoding.MinimumDateTime is null || faceDistanceLength.MinimumDateTime is null)
throw new NotSupportedException();
List<int> withinRanges = new();
long ticks = faceDistanceEncoding.MinimumDateTime.Value.Ticks;
TimeSpan timeSpan = new(faceDistanceLength.MinimumDateTime.Value.Ticks - ticks);
bool older = timeSpan.TotalMilliseconds < 0;
int daysDelta = (int)Math.Round(Math.Abs(timeSpan.TotalDays), 0);
int distancePermyriad = (int)(faceDistanceLength.Length.Value / faceDistanceTolerance * faceDistancePermyriad);
foreach ((long lcl, long minimum, long maximum, long ucl) in personKeysRangesCollection)
{
older = false;
daysDelta = 0;
withinRange = 0;
distancePermyriad = 0;
}
else
{
if (faceDistanceEncoding.MinimumDateTime is null || faceDistanceLength.MinimumDateTime is null)
throw new NotSupportedException();
List<int> withinRanges = new();
long ticks = faceDistanceEncoding.MinimumDateTime.Value.Ticks;
TimeSpan timeSpan = new(faceDistanceLength.MinimumDateTime.Value.Ticks - ticks);
older = timeSpan.TotalMilliseconds < 0;
daysDelta = (int)Math.Round(Math.Abs(timeSpan.TotalDays), 0);
distancePermyriad = (int)(faceDistanceLength.Length.Value / faceDistanceTolerance * faceDistancePermyriad);
foreach ((long lcl, long minimum, long maximum, long ucl) in personKeysRangesCollection)
{
if (ticks > minimum && ticks < maximum)
withinRanges.Add(0);
else if (ticks > lcl && ticks < ucl)
withinRanges.Add(1);
else
withinRanges.Add(2);
}
withinRange = withinRanges.Max();
if (ticks > minimum && ticks < maximum)
withinRanges.Add(0);
else if (ticks > lcl && ticks < ucl)
withinRanges.Add(1);
else
withinRanges.Add(2);
}
int withinRange = withinRanges.Max();
result = new(daysDelta, distancePermyriad, faceDistanceLength.Id, faceDistanceLength.NormalizedPixelPercentage.Value, older, withinRange);
return result;
}