Example #1
0
 /// <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);
     }
 }
Example #2
0
        /// <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();
        }
Example #3
0
 /// <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();
 }
Example #4
0
 public override void Remove(int i)
 {
     Rectangles[i] = new MyRectangle();
 }
Example #5
0
 public override void TempDefault()
 {
     TempRectangle = new MyRectangle();
     step_rect     = 0;
 }
Example #6
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;
            }
        }