Этап 4, движение рисунка

This commit is contained in:
Artem 2025-02-04 23:49:50 +04:00
parent 520f30955f
commit 077feaab14

View File

@ -88,6 +88,22 @@ public class DrawningDiselLoko
return;
}
if (x < 0)
{
x = 1;
}
if (y < 0) { y = 1; }
if (x + _drawingCarWidth > _pictureWidth.Value) {
x = _pictureWidth.Value - _drawingCarWidth - 1;
}
if (y + _drawingCarHeight > _pictureHeight.Value)
{
y = _pictureHeight.Value - _drawingCarHeight - 1;
}
// TODO если при установке объекта в эти координаты, он будет "выходить" за границы формы
// то надо изменить координаты, чтобы он оставался в этих границах
_startPosX = x;
@ -110,7 +126,7 @@ public class DrawningDiselLoko
{
//влево
case Direction.Left:
if (_startPosX.Value - DiselLoko.Step > 0)
if (_startPosX.Value - DiselLoko.Step - 10 > 0)
{
_startPosX -= (int)DiselLoko.Step;
}
@ -124,14 +140,14 @@ public class DrawningDiselLoko
return true;
// вправо
case Direction.Right:
if (_startPosX.Value - DiselLoko.Step > 0)
if (_startPosX.Value + DiselLoko.Step + _drawingCarWidth/2 < _pictureWidth.Value - _drawingCarWidth)
{
_startPosX += (int)DiselLoko.Step;
}
return true;
//вниз
case Direction.Down:
if (_startPosX.Value - DiselLoko.Step > 0)
if (_startPosY.Value + DiselLoko.Step + _drawingCarWidth / 4 < _pictureHeight.Value - _drawingCarHeight)
{
_startPosY += (int)DiselLoko.Step;
}
@ -155,6 +171,7 @@ public class DrawningDiselLoko
Pen pen = new(Color.Black);
Brush additionalBrush = new SolidBrush(DiselLoko.ColorBody);
Brush blueBrush = Brushes.Blue;
Brush grayBrush = Brushes.Gray;
Pen blackPen = new Pen(Color.Black, 2);
@ -257,16 +274,31 @@ public class DrawningDiselLoko
// труба
if (DiselLoko.IsTube)
{
// **Труба (полигон)**
Point[] chimney = {
new Point(_startPosX.Value + 20, _startPosY.Value - 20),
new Point(_startPosX.Value + 35, _startPosY.Value - 20),
new Point(_startPosX.Value + 35, _startPosY.Value),
new Point(_startPosX.Value + 20, _startPosY.Value)
};
g.FillPolygon(blackBrush, chimney);
}
// отсек
if (DiselLoko.IsComportament)
{
/*g.FillRectangle(additionalBrush, _startPosX.Value + 75, _startPosY.Value + 23, 25, 15);
g.FillRectangle(additionalBrush, _startPosX.Value + 35, _startPosY.Value + 23, 35, 15);
g.FillRectangle(additionalBrush, _startPosX.Value + 10, _startPosY.Value + 23, 20, 15);*/
//Топливный отсек(полигон)
Point[] fuelTank = {
new Point(_startPosX.Value + 110, _startPosY.Value + _drawingCarHeight-20), // Верхний левый угол
new Point(_startPosX.Value + 130, _startPosY.Value + _drawingCarHeight -20), // Верхний правый угол
new Point(_startPosX.Value +130 , _startPosY.Value + _drawingCarHeight-5), // Нижний правый угол
new Point(_startPosX.Value + 110, _startPosY.Value + _drawingCarHeight-5) // Нижний левый угол
};
g.FillPolygon(grayBrush, fuelTank);
g.DrawPolygon(blackPen, fuelTank);
}
}
}