using JetBrains.Annotations; using OpenCvSharp; namespace StitchATon.DTO; public class GenerateInput { public required string CanvasRect { get; [UsedImplicitly] init; } public required float[] CropOffset { get; [UsedImplicitly] init; } public required float[] CropSize { get; [UsedImplicitly] init; } public required float OutputScale { get; [UsedImplicitly] init; } public Rect ParsedCanvasRect() { var corners = CanvasRect.Split( ":" ); var c1 = ParseCanvasCoord( corners[0] ); var c2 = ParseCanvasCoord( corners[1] ); return new Rect( int.Min( c1.X, c2.X ), int.Min( c1.Y, c2.Y ), int.Abs( c1.X - c2.X ) + 1, // Inclusive bbox int.Abs( c1.Y - c2.Y ) + 1 // Inclusive bbox ); } private Point ParseCanvasCoord(string labwareCoord) { int y = 0; int x = 0; foreach( var c in labwareCoord ) { if( 'A' <= c && c <= 'Z' ) y = ( y * 26 ) + ( c - 'A' + 1); else x = ( x * 10 ) + ( c - '0' ); } y--; x--; return new(x, y); } public Point2f ParsedCropOffset() => new( CropOffset[0], CropOffset[1] ); public Point2f ParsedCropSize() => new( CropSize[0], CropSize[1] ); }