using Ban.Sdaid.Notation.Documents;
namespace Ban.Sdaid.Icd.Domain.Processing
{
/// <summary>
/// Область на кадре-источнике, из которой получено значение. Координаты — в процентах
/// от размера кадра, чтобы не зависеть от разрешения снимка.
/// </summary>
[DomainEntity(DomainEntityKind.ValueObject)]
public class SourceArea
{
/// <summary>Отступ слева, % ширины кадра.</summary>
public double X { get; init; }
/// <summary>Отступ сверху, % высоты кадра.</summary>
public double Y { get; init; }
/// <summary>Ширина области, % ширины кадра.</summary>
public double Width { get; init; }
/// <summary>Высота области, % высоты кадра.</summary>
public double Height { get; init; }
}
/// <summary>Описание доменной сущности <see cref="SourceArea"/>.</summary>
public class SourceAreaSpec : IDomainEntityDocument
{
public System.Type Entity => typeof(SourceArea);
public string Name => "Область-источник";
public string Description =>
@"Прямоугольник на кадре изображения, из которого получено значение поля. Задаётся в процентах от размера кадра.";
public string Version => "0.1";
public string Status => "draft";
public string[] Comments => new string[0];
public static string S1_Purpose = """
## Назначение
Позволяет показать пользователю, откуда взято значение: при проверке карты рядом
со значением предъявляется вырезанный по этой области фрагмент изображения. Без области
проверка вырождается в слепое редактирование — сверить значение с бумагой можно только
разыскивая его глазами по всему кадру.
""";
public static string S2_Invariants = """
## Инварианты
- Координаты и размеры задаются в **процентах** от размера кадра, а не в пикселях:
снимок может быть переснят в другом разрешении, доля кадра при этом сохраняется.
- Область не выходит за пределы кадра: сумма отступа и размера по каждой оси не превышает 100.
- Область принадлежит конкретному кадру и теряет смысл в отрыве от него.
""";
}
}