From fbcc70e8b7ae4b80d4ae40dae1a77a73b2387f97 Mon Sep 17 00:00:00 2001 From: xom9kxom9k Date: Tue, 6 Feb 2024 19:59:58 +0400 Subject: [PATCH] 5 --- Seaplane/DrawingSeaplane.cs | 64 ++++++++++++++++++++++++++++++++----- 1 file changed, 56 insertions(+), 8 deletions(-) diff --git a/Seaplane/DrawingSeaplane.cs b/Seaplane/DrawingSeaplane.cs index a876d72..d23be23 100644 --- a/Seaplane/DrawingSeaplane.cs +++ b/Seaplane/DrawingSeaplane.cs @@ -13,7 +13,7 @@ public class DrawingSeaplane /// /// Класс - сущность /// - public EntitySeaplane? EntitySeaplane { get; set; }; + public EntitySeaplane? EntitySeaplane { get; set; } /// /// Ширина окна /// @@ -23,21 +23,21 @@ public class DrawingSeaplane /// private int? _pictureHeight; /// - /// Левая координата прорисовки автомобиля + /// Левая координата прорисовки гидросамолета /// private int? _startPosX; /// - /// Верхняя координата прорисовки автомобиля + /// Верхняя координата прорисовки гидросамолета /// private int? _startPosY; /// - /// Ширина прорисовки автомобиля + /// Ширина прорисовки гидросамолета /// - private readonly int _drawningCarWidth = 0; + private readonly int _drawningPlaneWidth = 0; /// - /// Высота прорисовки автомобиля + /// Высота прорисовки гидросамолета /// - private readonly int _drawningCarHeight = 0; + private readonly int _drawningPlaneHeight = 0; /// /// Инициализация полей объекта-класса гидросамолета /// @@ -57,5 +57,53 @@ public class DrawingSeaplane _startPosX = null; _startPosY = null; } - + public bool SetPictureSize(int width, int height) + { + // TODO проверка, что объект "влезает" в размеры поля + // если влезает, сохраняем границы и корректируем позицию объекта,если она была уже установлена + if (width < _drawningPlaneWidth || height < _drawningPlaneHeight) return false; + _pictureWidth = width; + _pictureHeight = height; + if (_startPosX != null || _startPosY != null) + { + if (_startPosX + _drawningPlaneWidth > _pictureWidth) + { + _startPosX = _startPosX - (_startPosX + _drawningPlaneWidth - _pictureWidth); + } + else if (_startPosX < 0) _startPosX = 0; + if (_startPosY + _drawningPlaneHeight > _pictureHeight) + { + _startPosY = _startPosY - (_startPosY + _drawningPlaneHeight - _pictureHeight); + } + else if (_startPosY < 0) _startPosY = 0; + } + return true; + } + /// + /// Установка позиций + /// + /// + /// + public void SetPosition(int x, int y) + { + if (!_pictureHeight.HasValue || !_pictureWidth.HasValue) + { + return; + } + // TODO если при установке объекта в эти координаты, он будет "выходить" за границы формы + // то надо изменить координаты, чтобы он оставался в этих границах + if (x + _drawningPlaneWidth > _pictureWidth) + { + _startPosX = x - (x + _drawningPlaneWidth - _pictureWidth); + } + else if (x < 0) _startPosX = 0; + else _startPosX = x; + if (y + _drawningPlaneHeight > _pictureHeight) + { + _startPosY = y - (y + _drawningPlaneHeight - _pictureHeight); + } + else if (y < 0) _startPosY = 0; + else _startPosY = y; + } } +