/// <summary> /// Проверка на вхождение точки в границы внутри здания /// </summary> /// <param name="x">Координата Х</param> /// <param name="y">Координата У</param> /// <param name="mainRectangle">Прямоугольник</param> public void CheckIWInBuild(int x, int y, MyRectangle mainRectangle) { if (mainRectangle.Search(x, y) != -1) { SetTempPointInBuild(x, y); } }
/// <summary> /// Генерация прямоугольника, отображаемого внутри здания /// </summary> private void GenLocalRect() { LocalRectangle = new MyRectangle(); _MainRectangle = new MyRectangle(); //Считаем угол наклона в зависимости от длин сторон double distance = CalcAB(MainRectangle.Points[0], MainRectangle.Points[1]); double _distance = CalcAB(MainRectangle.Points[1], MainRectangle.Points[3]); if (distance >= _distance) { p1 = 0; p2 = 1; alfa = CalcAlfa(MainRectangle.Points[0], MainRectangle.Points[1]); LocalRectangle.Points.Add(MainRectangle.Points[0]); LocalRectangle.Points.Add(new Point()); LocalRectangle.Points.Add(new Point()); LocalRectangle.Points.Add(RotatePoint(-alfa, MainRectangle.Points[0], MainRectangle.Points[3])); LocalRectangle.Points[2] = new Point(LocalRectangle.Points[0].X, LocalRectangle.Points[3].Y); LocalRectangle.Points[1] = new Point(LocalRectangle.Points[3].X, LocalRectangle.Points[0].Y); } else { p1 = 1; p2 = 3; alfa = CalcAlfa(MainRectangle.Points[1], MainRectangle.Points[3]); LocalRectangle.Points.Add(MainRectangle.Points[0]); LocalRectangle.Points.Add(new Point()); LocalRectangle.Points.Add(new Point()); LocalRectangle.Points.Add(RotatePoint(-alfa, MainRectangle.Points[0], MainRectangle.Points[3])); LocalRectangle.Points[2] = new Point(LocalRectangle.Points[3].X, LocalRectangle.Points[0].Y); LocalRectangle.Points[1] = new Point(LocalRectangle.Points[0].X, LocalRectangle.Points[3].Y); } _MainRectangle.Points.Add(LocalRectangle.Points[0]); _MainRectangle.Points.Add(LocalRectangle.Points[1]); _MainRectangle.Points.Add(LocalRectangle.Points[2]); _MainRectangle.Points.Add(LocalRectangle.Points[3]); MP = MainRectangle.Points[0]; _MainRectangle.CalcMaxMin(out int maxx, out int minx, out int maxy, out int miny); CalcRederingArea(maxx, minx, maxy, miny); for (int i = 0; i < 4; i++) { double x = LocalRectangle.Points[i].X - Ox; double y = LocalRectangle.Points[i].Y - Oy; x *= koef; y *= koef; LocalRectangle.Points[i] = new Point((int)x, (int)y); } LocalRectangle.DL = LocalDL; LocalRectangle.delete = false; MainRectangle.CalcCenterPointWOZ(); TempRectangle = (MyRectangle)MainRectangle.Clone(); }
/// <summary> /// Конструктор для прямоугольников /// </summary> /// <param name="_Name">Имя</param> /// <param name="_loft">Чердак</param> /// <param name="_basement">Подвал</param> /// <param name="floors_count">Количество этажей</param> /// <param name="_rect">Прямоугольник</param> /// <param name="index">Идентификатор</param> /// <param name="width">Ширина</param> public Building(string _Name, bool _loft, bool _basement, int floors_count, MyRectangle _rect, int index, int width) { sizeRenderingArea = new SizeRenderingArea(Name, (int)((double)width / pk), width); Name = _Name; loft = _loft; basement = _basement; this.floors_count = floors_count; RefreshFloors(); MainRectangle = _rect; type = 2; delete = false; MainMapDL.Level = -1; MainMapDL.Floor = -1; LocalDL.Level = index; LocalDL.Floor = 0; MainRectangle.DL = MainMapDL; GenLocalRect(); GenText(); }
public override void Remove(int i) { Rectangles[i] = new MyRectangle(); }
public override void TempDefault() { TempRectangle = new MyRectangle(); step_rect = 0; }
/// <summary> /// Поиск ближайшей точки на прямоугольнике при перемещении входа в здание или входа провода /// </summary> /// <param name="x">Координата мыши X</param> /// <param name="y">Координата мыши Y</param> /// <param name="rect">Передаваемый прямоугольник</param> public void NearestPoints(int x, int y, MyRectangle rect) { double d = double.MaxValue; int _d = 0; double d1 = CalcPointToLine(x, y, rect.Points[0], rect.Points[1]); if (d1 < d) { d = d1; _d = 1; } double d2 = CalcPointToLine(x, y, rect.Points[1], rect.Points[3]); if (d2 < d) { d = d2; _d = 2; } double d3 = CalcPointToLine(x, y, rect.Points[3], rect.Points[2]); if (d3 < d) { d = d3; _d = 3; } double d4 = CalcPointToLine(x, y, rect.Points[2], rect.Points[0]); if (d4 < d) { d = d4; _d = 4; } switch (_d) { case 1: if (CheckInterval(x, y, rect.Points[0], rect.Points[1])) { Enterances.TempCircle.MainCenterPoint = CalcNearestPoint(x, y, rect.Points[0], rect.Points[1]); } break; case 2: if (CheckInterval(x, y, rect.Points[1], rect.Points[3])) { Enterances.TempCircle.MainCenterPoint = CalcNearestPoint(x, y, rect.Points[1], rect.Points[3]); } break; case 3: if (CheckInterval(x, y, rect.Points[3], rect.Points[2])) { Enterances.TempCircle.MainCenterPoint = CalcNearestPoint(x, y, rect.Points[3], rect.Points[2]); } break; case 4: if (CheckInterval(x, y, rect.Points[2], rect.Points[0])) { Enterances.TempCircle.MainCenterPoint = CalcNearestPoint(x, y, rect.Points[2], rect.Points[0]); } break; } }