/
docNemo
/
clothes-graph
Обзор
Документация
Войти
/
docNemo
/
clothes-graph
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
main
src/ClothesGraph.App/UnderlayLoader.cs
75 строк
3 KB
docNemo
Запрос на слияние 'interface-to-spec' (
#1
) из interface-to-spec в main
09 авг 2026, 20:28
Верифицирован
09 авг 2026, 20:28
1bbc436
Код
Авторство
О чём код?
using System; using System.IO; using Avalonia.Media.Imaging; using ClothesGraph.Geometry; using ClothesGraph.Model; using ClothesGraph.Model.Underlay; namespace ClothesGraph.App; /// <summary>Загрузка изображения в качестве подложки.</summary> public static class UnderlayLoader { /// <summary> /// Читает файл изображения и добавляет его в документ. /// </summary> /// <remarks> /// Размер в точках берётся из самого изображения: без него неизвестно, /// какую площадь подложка займёт на чертеже после калибровки. /// Масштаб не задаётся — его выставляет пользователь по известному /// отрезку, иначе снятые с образца размеры будут произвольными. /// </remarks> public static UnderlayImage? Add(PatternDocument document, string path) { if (!File.Exists(path)) return null; byte[] content; int width; int height; try { content = File.ReadAllBytes(path); using var stream = new MemoryStream(content); using var bitmap = new Bitmap(stream); width = bitmap.PixelSize.Width; height = bitmap.PixelSize.Height; } catch (Exception) { return null; } var image = new UnderlayImage( UnderlayId.New(), Path.GetFileNameWithoutExtension(path), content, width, height) { Order = document.Underlays.Count, Opacity = 0.5 }; document.Underlays.Add(image); return image; } /// <summary> /// Подкладывает изображение так, чтобы оно накрыло указанную ширину чертежа. /// </summary> /// <remarks> /// Только предварительная прикидка при первом размещении, чтобы изображение /// было видно. Калибровкой не является и признака калибровки не ставит: /// соотнести подложку с натурой может лишь пользователь, а прикидка взята /// из ниоткуда. /// </remarks> public static void FitToWidth(UnderlayImage image, Point2 origin, Length width) { image.Origin = origin; image.SetPreviewScale((double)width.Units / image.PixelWidth); } }