diff --git a/ProjectExcavator/ProjectExcavator/DrawningExcavator.cs b/ProjectExcavator/ProjectExcavator/DrawningExcavator.cs index 7fbcc3f..102e984 100644 --- a/ProjectExcavator/ProjectExcavator/DrawningExcavator.cs +++ b/ProjectExcavator/ProjectExcavator/DrawningExcavator.cs @@ -70,21 +70,24 @@ public class DrawningExcavator { //TODO проверка, что объект "влезает" в размеры поля //если влезает, сохраняем границы и корректируем позицию объекта, если она уже была установлена - _pictureWidth = width; - _pictureHeight = height; - if (_pictureWidth <= _drawingExcWidth || _pictureHeight <= _drawingExcHeight) - { - _pictureHeight = null; - _pictureWidth = null; + if(_drawingExcWidth > width || _drawingExcHeight > height) { return false; } - if (_startPosX + _drawingExcWidth > _pictureWidth) + + _pictureWidth = width; + _pictureHeight = height; + if (_startPosX.HasValue || _startPosY.HasValue) { - _startPosX = _pictureWidth.Value - _drawingExcWidth; - } - if (_startPosY + _drawingExcHeight > _pictureHeight) - { - _startPosY = _pictureHeight.Value - _drawingExcHeight; + if (_startPosX + _drawingExcWidth > _pictureWidth) + { + _startPosX = _pictureWidth - _drawingExcWidth; + } + else if (_startPosX < 0) _startPosX = 0; + if (_startPosY + _drawingExcHeight > _pictureHeight) + { + _startPosY = _pictureHeight - _drawingExcHeight; + } + else if (_startPosY < 0) _startPosY = 0; } return true; } @@ -96,15 +99,26 @@ public class DrawningExcavator /// Координата Y public void SetPosition(int x, int y, int width, int height) { + if (!_pictureWidth.HasValue || !_pictureHeight.HasValue) + { + return; + } + //TODO если при установке объекта в эти координаты, он будет "выходить" за границы формы //то надо изменить координаты, чтобы он оставался в этих границах - if (x >= 0 && x + _drawingExcWidth <= width && y >= 0 && y + _drawingExcWidth <= height) + if (x + _drawingExcWidth > _pictureWidth) { - _startPosX = x; - _startPosY = y; - _pictureWidth = width; - _pictureHeight = height; + _startPosX = _pictureWidth - _drawingExcWidth; } + else if (x < 0) _startPosX = 0; + else _startPosX = x; + + if (y + _drawingExcHeight > _pictureHeight) + { + _startPosY = _pictureHeight - _drawingExcHeight; + } + else if (y < 0) _startPosY = 0; + else _startPosY = y; } ///