Published - Added Mapping shortcut,
added leveled limits, container bug fix,
This commit is contained in:
@ -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;
|
||||
|
||||
}
|
@ -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;
|
||||
}
|
||||
|
||||
|
@ -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; }
|
||||
|
||||
}
|
||||
|
@ -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;
|
||||
}
|
||||
|
||||
|
@ -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);
|
||||
|
@ -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);
|
||||
|
||||
}
|
@ -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);
|
||||
|
||||
}
|
@ -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);
|
||||
}
|
||||
|
||||
}
|
@ -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;
|
||||
}
|
||||
|
Reference in New Issue
Block a user