Exemplo n.º 1
0
 /// <summary>
 /// Функция инициации движения выбранного объекта
 /// </summary>
 /// <param name="vector">Вектор движения</param>
 private void ForceMove(CustVector vector)
 {
     if (CurrentSettings.Mode != ECanvasMode.Hand)
     {
         return;
     }
     _isMove = true;
     IsSelectedItems.ForEach(c => c.Move(vector));
     CurrentSettings.MoveDelegate?.Invoke();
 }
 /// <summary>
 /// Функция "движения" объекта
 /// </summary>
 /// <param name="vector">Вектор движения</param>
 public void Move(CustVector vector)
 {
     for (int i = 0; i < 2; i++)
     {
         _points[i].ChangePoint(new Point(
                                    _points[i].Point.X - vector.Delta.X,
                                    _points[i].Point.Y - vector.Delta.Y));
     }
     InvalidateVisual();
 }
        /// <summary>
        /// Функция "движения" объекта
        /// </summary>
        /// <param name="vector">Вектор движения</param>
        public void Move(CustVector vector)
        {
            var _changePoints = new Dictionary <int, CustPoint>(_points.Count());

            for (int i = 0; i < _points.Count(); i++)
            {
                var localPointChange = Math.Pow(_points[i].Point.X - vector.PrevusePoint.X, 2.0) +
                                       Math.Pow(_points[i].Point.Y - vector.PrevusePoint.Y, 2.0) <
                                       Math.Pow(10d, 2.0);
                if (localPointChange)
                {
                    _changePoints.Add(i, _points[i]);
                }
            }

            if (_changePoints.Count() > 0)
            {
                var tmpSelectedCount = _changePoints
                                       .Where(c => c.Value.IsSelected)
                                       .ToList();
                var changeIndex = _changePoints.FirstOrDefault().Key;
                if (tmpSelectedCount.Count() == 1 && _changePoints.Count() > 1)
                {
                    changeIndex = tmpSelectedCount.FirstOrDefault().Key;
                }
                else if (tmpSelectedCount.Count() == 0 && _changePoints.Count() > 1)
                {
                    changeIndex = _changePoints.FirstOrDefault().Key;

                    var tmpPointX = Math.Abs(vector.PrevusePoint.X);
                    var tmpPointY = Math.Abs(vector.PrevusePoint.Y);
                    var absPrevPX = tmpPointX;
                    var absPrevPY = tmpPointY;

                    foreach (var a in _changePoints)
                    {
                        var absPointAX = Math.Abs(a.Value.Point.X);
                        var absPointAY = Math.Abs(a.Value.Point.Y);
                        var tmpResX    = Math.Abs(absPointAX - absPrevPX);
                        var tmpResY    = Math.Abs(absPointAY - absPrevPY);
                        if (tmpResX < tmpPointX && tmpResY < tmpPointY)
                        {
                            tmpPointX   = tmpResX;
                            tmpPointY   = tmpResY;
                            changeIndex = a.Key;
                        }
                    }
                }
                _points[changeIndex].Select();
                _points[changeIndex].ChangePoint(new Point(
                                                     _points[changeIndex].Point.X - vector.Delta.X,
                                                     _points[changeIndex].Point.Y - vector.Delta.Y));
            }
            else
            {
                for (int i = 0; i < _points.Count(); i++)
                {
                    _points[i].ChangePoint(new Point(
                                               _points[i].Point.X - vector.Delta.X,
                                               _points[i].Point.Y - vector.Delta.Y));
                }
            }
            InvalidateVisual();
        }