/// <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(); }