Example #1
0
        /*public void sticky_bord(Figure near) // добавление наблюдателей при "касании" фигур липкого объекта
         * {
         *  bool iSstickObj = false; // этот объект уже липкий или нет
         *  for (int i = 0; i < _observers.Count; i++)
         *  {
         *      if (_observers[i] == near) // если эта фигура уже "прилипла" мы ее не проверяем
         *      {
         *          iSstickObj = true;
         *      }
         *  }
         *
         *  if (iSstickObj == false)
         *  {
         *      foreach (PointF point_near in near.GetPathF().PathPoints) // каждая точка контура фигуры сравнивается с кажой точкой контура липкого объекта
         *      {
         *          foreach (PointF point_sticky in sticky.GetPathF().PathPoints) // GetPathF возвращает контур фигуры
         *          {
         *              float dx = (Math.Abs(point_sticky.X - point_near.X));
         *              float dy = (Math.Abs(point_sticky.Y - point_near.Y));
         *              if ((int)Math.Sqrt(dx * dx + dy * dy) <= 3)
         *              {
         *                  addObservers(near);
         *                  iSstickObj = true;
         *                  break; // объект подписался, дальше не проверяем
         *              }
         *          }
         *          if (iSstickObj == true) // если объект уже подписался, то проверка закончена
         *              break;
         *      }
         *  }
         * }*/

        public void sticky_bord(Figure near) // добавление наблюдателей при "касании" фигур липкого объекта
        {
            bool iSstickObj = false;         // этот объект уже липкий или нет

            for (int i = 0; i < _observers.Count; i++)
            {
                if (_observers[i] == near) // если эта фигура уже "прилипла" мы ее не проверяем
                {
                    iSstickObj = true;
                }
            }

            if (iSstickObj == false)
            {
                foreach (PointF point_sticky in sticky.GetPathF().PathPoints) // точки контура липкого объекта отдаются в count_dist фигуры (вернет true, если попали точкой ы фигуру)
                {
                    if (near.countDist((int)point_sticky.X, (int)point_sticky.Y) == true)
                    {
                        addObservers(near);
                        break; // попав одной точкой, завершаем проверку
                    }
                }
            }
        }