переделал поля-опции сущности и подогнал под это рисунок для удобства в лабе 2

This commit is contained in:
tyxz0 2024-02-29 23:33:09 +04:00
parent 005c3818e2
commit 21a467a473
3 changed files with 86 additions and 76 deletions

View File

@ -18,10 +18,10 @@ public class DrawingDoubleDeckerBus
private readonly int _DrawingBusHight = 60; private readonly int _DrawingBusHight = 60;
public void Init(int speed, double weight, Color bodyColor, Color additionalColor, bool sideMirrors, bool topSection, bool stripes, bool stairs) public void Init(int speed, double weight, Color bodyColor, Color additionalColor,bool secondFloor, bool stripes)
{ {
EntityDoubleDeckerBus = new EntityDoubleDeckerBus(); EntityDoubleDeckerBus = new EntityDoubleDeckerBus();
EntityDoubleDeckerBus.Init(speed, weight, bodyColor, additionalColor, sideMirrors, topSection, stripes, stairs); EntityDoubleDeckerBus.Init(speed, weight, bodyColor, additionalColor, secondFloor, stripes);
_pictureWidth = null; _pictureWidth = null;
_pictureHeight = null; _pictureHeight = null;
_startPosX = null; _startPosX = null;
@ -144,32 +144,20 @@ public class DrawingDoubleDeckerBus
return; return;
} }
Pen pen = new(Color.Black, 2); Pen pen = new(Color.Black);
Brush additionalBrush = new SolidBrush(EntityDoubleDeckerBus.AdditionalColor); Brush additionalBrush = new SolidBrush(EntityDoubleDeckerBus.AdditionalColor);
Brush mainBrush = new SolidBrush(EntityDoubleDeckerBus.BodyColor); Brush mainBrush = new SolidBrush(EntityDoubleDeckerBus.BodyColor);
Brush blueBr = new SolidBrush(Color.LightBlue);
//зеркала
if (EntityDoubleDeckerBus.SideMirrors) //кузов 1го этажа
{ PointF[] bus = { new PointF((float)_startPosX + 5, (float)_startPosY + 20),
g.DrawRectangle(pen, _startPosX.Value + 95, _startPosY.Value + 5, 20, 5); new PointF((float)_startPosX + 5, (float)_startPosY + 45),
g.DrawRectangle(pen, _startPosX.Value + 110, _startPosY.Value + 10, 5, 5); new PointF((float)_startPosX + 105, (float)_startPosY + 45),
g.FillRectangle(mainBrush, _startPosX.Value + 95, _startPosY.Value + 5, 20, 5); new PointF((float)_startPosX + 105, (float)_startPosY + 25),
g.FillRectangle(additionalBrush, _startPosX.Value + 110, _startPosY.Value + 10, 5, 5); new PointF((float)_startPosX + 102, (float)_startPosY + 20) };
}
//кузов
PointF[] bus = { new PointF((float)_startPosX + 5, (float)_startPosY + 5), new PointF((float)_startPosX + 5, (float)_startPosY + 45), new PointF((float)_startPosX + 105, (float)_startPosY + 45), new PointF((float)_startPosX + 105, (float)_startPosY + 25), new PointF((float)_startPosX + 95, (float)_startPosY + 5) };
g.DrawPolygon(pen, bus);
g.FillPolygon(mainBrush, bus); g.FillPolygon(mainBrush, bus);
g.DrawPolygon(pen, bus);
//вехний отсек
if (EntityDoubleDeckerBus.TopSection)
{
PointF[] section = { new PointF((float)_startPosX + 27, (float)_startPosY + 5), new PointF((float)_startPosX + 37, (float)_startPosY + 1), new PointF((float)_startPosX + 65, (float)_startPosY + 1), new PointF((float)_startPosX + 75, (float)_startPosY + 5) };
g.DrawPolygon(pen, section);
g.FillPolygon(additionalBrush, section);
}
//полоски //полоски
if (EntityDoubleDeckerBus.Stripes) if (EntityDoubleDeckerBus.Stripes)
@ -179,63 +167,95 @@ public class DrawingDoubleDeckerBus
g.FillPolygon(additionalBrush, stripe); g.FillPolygon(additionalBrush, stripe);
} }
//окна 2ой этаж
Brush blueBr = new SolidBrush(Color.LightBlue);
g.DrawRectangle(pen, _startPosX.Value + 7, _startPosY.Value + 10, 12, 10);
g.DrawRectangle(pen, _startPosX.Value + 21, _startPosY.Value + 10, 12, 10);
g.DrawRectangle(pen, _startPosX.Value + 35, _startPosY.Value + 10, 10, 10);
g.DrawRectangle(pen, _startPosX.Value + 47, _startPosY.Value + 10, 6, 10);
g.DrawRectangle(pen, _startPosX.Value + 55, _startPosY.Value + 10, 13, 10);
g.DrawRectangle(pen, _startPosX.Value + 71, _startPosY.Value + 10, 14, 10);
g.FillRectangle(blueBr, _startPosX.Value + 7, _startPosY.Value + 10, 12, 10);
g.FillRectangle(blueBr, _startPosX.Value + 21, _startPosY.Value + 10, 12, 10);
g.FillRectangle(blueBr, _startPosX.Value + 35, _startPosY.Value + 10, 10, 10);
g.FillRectangle(blueBr, _startPosX.Value + 47, _startPosY.Value + 10, 6, 10);
g.FillRectangle(blueBr, _startPosX.Value + 55, _startPosY.Value + 10, 13, 10);
g.FillRectangle(blueBr, _startPosX.Value + 71, _startPosY.Value + 10, 14, 10);
//окна 1ый этаж //окна 1ый этаж
g.DrawRectangle(pen, _startPosX.Value + 7, _startPosY.Value + 25, 12, 10);
g.DrawRectangle(pen, _startPosX.Value + 21, _startPosY.Value + 25, 12, 10);
g.DrawRectangle(pen, _startPosX.Value + 47, _startPosY.Value + 25, 6, 10);
g.DrawRectangle(pen, _startPosX.Value + 55, _startPosY.Value + 25, 13, 10);
g.DrawRectangle(pen, _startPosX.Value + 71, _startPosY.Value + 25, 14, 10);
g.FillRectangle(blueBr, _startPosX.Value + 7, _startPosY.Value + 25, 12, 10); g.FillRectangle(blueBr, _startPosX.Value + 7, _startPosY.Value + 25, 12, 10);
g.FillRectangle(blueBr, _startPosX.Value + 21, _startPosY.Value + 25, 12, 10); g.FillRectangle(blueBr, _startPosX.Value + 21, _startPosY.Value + 25, 12, 10);
g.FillRectangle(blueBr, _startPosX.Value + 47, _startPosY.Value + 25, 6, 10); g.FillRectangle(blueBr, _startPosX.Value + 47, _startPosY.Value + 25, 6, 10);
g.FillRectangle(blueBr, _startPosX.Value + 55, _startPosY.Value + 25, 13, 10); g.FillRectangle(blueBr, _startPosX.Value + 55, _startPosY.Value + 25, 13, 10);
g.FillRectangle(blueBr, _startPosX.Value + 71, _startPosY.Value + 25, 14, 10); g.FillRectangle(blueBr, _startPosX.Value + 71, _startPosY.Value + 25, 14, 10);
//два передних окна g.DrawRectangle(pen, _startPosX.Value + 7, _startPosY.Value + 25, 12, 10);
PointF[] window1 = { new PointF((float)_startPosX + 90, (float)_startPosY + 10), new PointF((float)_startPosX + 97, (float)_startPosY + 10), new PointF((float)_startPosX + 102, (float)_startPosY + 20), new PointF((float)_startPosX + 90, (float)_startPosY + 20) }; g.DrawRectangle(pen, _startPosX.Value + 21, _startPosY.Value + 25, 12, 10);
PointF[] window2 = { new PointF((float)_startPosX + 90, (float)_startPosY + 25), new PointF((float)_startPosX + 105, (float)_startPosY + 25), new PointF((float)_startPosX + 105, (float)_startPosY + 40), new PointF((float)_startPosX + 90, (float)_startPosY + 35) }; g.DrawRectangle(pen, _startPosX.Value + 47, _startPosY.Value + 25, 6, 10);
g.DrawPolygon(pen, window1); g.DrawRectangle(pen, _startPosX.Value + 55, _startPosY.Value + 25, 13, 10);
g.DrawPolygon(pen, window2); g.DrawRectangle(pen, _startPosX.Value + 71, _startPosY.Value + 25, 14, 10);
g.FillPolygon(blueBr, window1);
//переднее окно первый этаж
PointF[] window2 = { new PointF((float)_startPosX + 90, (float)_startPosY + 25),
new PointF((float)_startPosX + 105, (float)_startPosY + 25),
new PointF((float)_startPosX + 105, (float)_startPosY + 40),
new PointF((float)_startPosX + 90, (float)_startPosY + 35) };
g.FillPolygon(blueBr, window2); g.FillPolygon(blueBr, window2);
g.DrawPolygon(pen, window2);
//дверь //дверь
Brush brownBr = new SolidBrush(Color.Brown); Brush brownBr = new SolidBrush(Color.Brown);
g.DrawRectangle(pen, _startPosX.Value + 35, _startPosY.Value + 25, 10, 15);
g.DrawRectangle(pen, _startPosX.Value + 35, _startPosY.Value + 40, 10, 5);
g.FillRectangle(blueBr, _startPosX.Value + 35, _startPosY.Value + 25, 10, 15); g.FillRectangle(blueBr, _startPosX.Value + 35, _startPosY.Value + 25, 10, 15);
g.FillRectangle(brownBr, _startPosX.Value + 35, _startPosY.Value + 40, 10, 5); g.FillRectangle(brownBr, _startPosX.Value + 35, _startPosY.Value + 40, 10, 5);
g.DrawRectangle(pen, _startPosX.Value + 35, _startPosY.Value + 25, 10, 15);
g.DrawRectangle(pen, _startPosX.Value + 35, _startPosY.Value + 40, 10, 5);
//колёса //колёса
g.DrawEllipse(pen, _startPosX.Value + 11, _startPosY.Value + 37, 16, 16);
g.DrawEllipse(pen, _startPosX.Value + 83, _startPosY.Value + 37, 16, 16);
g.FillEllipse(brownBr, _startPosX.Value + 11, _startPosY.Value + 37, 16, 16); g.FillEllipse(brownBr, _startPosX.Value + 11, _startPosY.Value + 37, 16, 16);
g.FillEllipse(brownBr, _startPosX.Value + 83, _startPosY.Value + 37, 16, 16); g.FillEllipse(brownBr, _startPosX.Value + 83, _startPosY.Value + 37, 16, 16);
//лестница g.DrawEllipse(pen, _startPosX.Value + 11, _startPosY.Value + 37, 16, 16);
if (EntityDoubleDeckerBus.Stairs) g.DrawEllipse(pen, _startPosX.Value + 83, _startPosY.Value + 37, 16, 16);
{
g.DrawLine(pen, new Point(_startPosX.Value + 1, _startPosY.Value + 45), new Point(_startPosX.Value + 1, _startPosY.Value + 3));
//второй этаж с всякими зафуфрючками
if (EntityDoubleDeckerBus.SecondFloor)
{
//верх кузова
PointF[] bus_second_floor = { new PointF((float)_startPosX + 5, (float)_startPosY + 5),
new PointF((float)_startPosX + 5, (float)_startPosY + 20),
new PointF((float)_startPosX + 102, (float)_startPosY + 20),
new PointF((float)_startPosX + 95, (float)_startPosY + 5)};
g.FillPolygon(mainBrush, bus_second_floor);
g.DrawPolygon(pen, bus_second_floor);
//окна 2ой этаж
g.FillRectangle(blueBr, _startPosX.Value + 7, _startPosY.Value + 10, 12, 10);
g.FillRectangle(blueBr, _startPosX.Value + 21, _startPosY.Value + 10, 12, 10);
g.FillRectangle(blueBr, _startPosX.Value + 35, _startPosY.Value + 10, 10, 10);
g.FillRectangle(blueBr, _startPosX.Value + 47, _startPosY.Value + 10, 6, 10);
g.FillRectangle(blueBr, _startPosX.Value + 55, _startPosY.Value + 10, 13, 10);
g.FillRectangle(blueBr, _startPosX.Value + 71, _startPosY.Value + 10, 14, 10);
g.DrawRectangle(pen, _startPosX.Value + 7, _startPosY.Value + 10, 12, 10);
g.DrawRectangle(pen, _startPosX.Value + 21, _startPosY.Value + 10, 12, 10);
g.DrawRectangle(pen, _startPosX.Value + 35, _startPosY.Value + 10, 10, 10);
g.DrawRectangle(pen, _startPosX.Value + 47, _startPosY.Value + 10, 6, 10);
g.DrawRectangle(pen, _startPosX.Value + 55, _startPosY.Value + 10, 13, 10);
g.DrawRectangle(pen, _startPosX.Value + 71, _startPosY.Value + 10, 14, 10);
//верхний отсек
PointF[] section = { new PointF((float)_startPosX + 27, (float)_startPosY + 5),
new PointF((float)_startPosX + 37, (float)_startPosY + 1),
new PointF((float)_startPosX + 65, (float)_startPosY + 1),
new PointF((float)_startPosX + 75, (float)_startPosY + 5) };
g.FillPolygon(additionalBrush, section);
g.DrawPolygon(pen, section);
//переднее окно 2ой этаж
PointF[] window1 = { new PointF((float)_startPosX + 90, (float)_startPosY + 10),
new PointF((float)_startPosX + 97, (float)_startPosY + 10),
new PointF((float)_startPosX + 102, (float)_startPosY + 20),
new PointF((float)_startPosX + 90, (float)_startPosY + 20) };
g.FillPolygon(blueBr, window1);
g.DrawPolygon(pen, window1);
//зеркала
g.FillRectangle(mainBrush, _startPosX.Value + 95, _startPosY.Value + 5, 20, 5);
g.FillRectangle(additionalBrush, _startPosX.Value + 110, _startPosY.Value + 10, 5, 5);
g.DrawRectangle(pen, _startPosX.Value + 95, _startPosY.Value + 5, 20, 5);
g.DrawRectangle(pen, _startPosX.Value + 110, _startPosY.Value + 10, 5, 5);
//лестница
g.DrawLine(pen, new Point(_startPosX.Value + 1, _startPosY.Value + 45), new Point(_startPosX.Value + 1, _startPosY.Value + 3));
g.DrawLine(pen, new Point(_startPosX.Value + 1, _startPosY.Value + 45), new Point(_startPosX.Value + 5, _startPosY.Value + 43)); g.DrawLine(pen, new Point(_startPosX.Value + 1, _startPosY.Value + 45), new Point(_startPosX.Value + 5, _startPosY.Value + 43));
g.DrawLine(pen, new Point(_startPosX.Value + 1, _startPosY.Value + 39), new Point(_startPosX.Value + 5, _startPosY.Value + 37)); g.DrawLine(pen, new Point(_startPosX.Value + 1, _startPosY.Value + 39), new Point(_startPosX.Value + 5, _startPosY.Value + 37));
g.DrawLine(pen, new Point(_startPosX.Value + 1, _startPosY.Value + 31), new Point(_startPosX.Value + 5, _startPosY.Value + 29)); g.DrawLine(pen, new Point(_startPosX.Value + 1, _startPosY.Value + 31), new Point(_startPosX.Value + 5, _startPosY.Value + 29));

View File

@ -13,22 +13,14 @@
/// </summary> /// </summary>
public Color AdditionalColor { get; private set; } public Color AdditionalColor { get; private set; }
/// <summary> /// <summary>
/// Признак (опция) наличия боковых зеркал /// Признак (опция) наличия второго этажа
/// </summary> /// </summary>
public bool SideMirrors { get; private set; } public bool SecondFloor { get; private set; }
/// <summary>
/// Признак (опция) наличия верхней панели
/// </summary>
public bool TopSection { get; private set; }
/// <summary> /// <summary>
/// Признак (опция) наличия полосок на автобусе /// Признак (опция) наличия полосок на автобусе
/// </summary> /// </summary>
public bool Stripes { get; private set; } public bool Stripes { get; private set; }
/// <summary> /// <summary>
/// Признак (опция) наличия лестницы
/// </summary>
public bool Stairs { get; private set; }
/// <summary>
/// Шаг перемещения автобуса /// Шаг перемещения автобуса
/// </summary> /// </summary>
public double Step => Speed * 100 / Weight; public double Step => Speed * 100 / Weight;
@ -42,15 +34,13 @@
/// <param name="sideMirrors"></param> /// <param name="sideMirrors"></param>
/// <param name="topSection"></param> /// <param name="topSection"></param>
/// <param name="stripes"></param> /// <param name="stripes"></param>
public void Init(int speed, double weight, Color bodyColor, Color additionalColor, bool sideMirrors, bool topSection, bool stripes, bool stairs) public void Init(int speed, double weight, Color bodyColor, Color additionalColor, bool secondFloor, bool stripes)
{ {
Speed = speed; Speed = speed;
Weight = weight; Weight = weight;
BodyColor = bodyColor; BodyColor = bodyColor;
AdditionalColor = additionalColor; AdditionalColor = additionalColor;
SideMirrors = sideMirrors; SecondFloor = secondFloor;
TopSection = topSection;
Stripes = stripes; Stripes = stripes;
Stairs = stairs;
} }
} }

View File

@ -38,7 +38,7 @@ namespace DoubleDeckerBus
_drawingDoubleDeckerBus.Init(random.Next(100, 300), random.Next(1000, 3000), _drawingDoubleDeckerBus.Init(random.Next(100, 300), random.Next(1000, 3000),
Color.FromArgb(random.Next(0, 256), random.Next(0, 256), random.Next(0, 256)), Color.FromArgb(random.Next(0, 256), random.Next(0, 256), random.Next(0, 256)),
Color.FromArgb(random.Next(0, 256), random.Next(0, 256), random.Next(0, 256)), Color.FromArgb(random.Next(0, 256), random.Next(0, 256), random.Next(0, 256)),
Convert.ToBoolean(random.Next(0, 2)), Convert.ToBoolean(random.Next(0, 2)), Convert.ToBoolean(random.Next(0, 2)), Convert.ToBoolean(random.Next(0, 2))); Convert.ToBoolean(random.Next(0, 2)), Convert.ToBoolean(random.Next(0, 2)));
_drawingDoubleDeckerBus.SetPictureSize(pictureBoxDoubleDeckerBus.Width, pictureBoxDoubleDeckerBus.Height); _drawingDoubleDeckerBus.SetPictureSize(pictureBoxDoubleDeckerBus.Width, pictureBoxDoubleDeckerBus.Height);
_drawingDoubleDeckerBus.SetPosition(random.Next(10, 100), random.Next(10, 100)); _drawingDoubleDeckerBus.SetPosition(random.Next(10, 100), random.Next(10, 100));