/// <summary> /// Applies delta movement to items /// </summary> /// <param name="model"></param> /// <param name="modifiedList">List of items to be moved</param> private void ApplyMovement(ref CurveGraphModel model, ref List <Point> modifiedList) { for (int j = 0; j < 1; j++) { Point dest = movementQueue[j]; for (int i = 0; i < selectedItems.Count; i++) { double[] original = new double[2]; var curveNr = Convert.ToInt32(selectedItems[i].Item1); var pointNr = Convert.ToInt32(selectedItems[i].Item2); original[0] = model.Item.Curve[curveNr].Points[pointNr].X; original[1] = model.Item.Curve[curveNr].Points[pointNr].Y; CheckDirection(original, ref dest); Point dest2 = new Point(original[0] + dest.X, original[1] + dest.Y); modifiedList.Add(dest2); selectedPos[i] = dest2; model.Item.Curve[curveNr].Points[pointNr] = dest2; } } movementQueue.Clear(); }
public static GraphGrid Draw(CurveGraphModel model, Camera cam) { List <FrameworkElement> list = new List <FrameworkElement>(); List <FrameworkElement> numH = new List <FrameworkElement>(); List <FrameworkElement> numV = new List <FrameworkElement>(); double scale = cam.GetScale; int rounding; if (scale > 0.3) { rounding = 100; } else if (scale > 0.05) { rounding = 10; } else { rounding = 1; } Point origin = new Point(-cam.GetTransform(0, 0), -cam.GetTransform(0, 1)); Point offsetOrigin = new Point(origin.X - 2000, origin.Y - 2000); //Distance between pixels double spacingX = rounding / scale; double spacingY = rounding / scale; scale = 2000 / scale; int steps = (int)(4000 / rounding); for (int i = 0; i < steps; i++) { string xText = String.Format("{0:N0}", (i * rounding) - 2000); string yText = String.Format("{0:N0}", (i * rounding) - 2000); list.Add(DrawLines((spacingX * i) - scale, (spacingX * i) - scale, 0.3, true)); list.Add(DrawLines((spacingY * i) - scale, (spacingX * i) - scale, 0.3, false)); numH.Add(DrawNumbers(xText, (spacingX * i) - scale, -origin.Y, true)); numV.Add(DrawNumbers(yText, (spacingY * i) - scale, -origin.X, false)); } return(new GraphGrid(list, numH, numV)); }
public void Add(List <FrameworkElement> list) { if (Items != null) { Items.Clear(); } else { Items = new ObservableCollection <FrameworkElement>(); modelitems = new CurveGraphModel(); } foreach (FrameworkElement item in list) { Items.Add(item); } }
public void CreateGraphView() { List <System.Windows.Point> pList = new List <System.Windows.Point>(); List <System.Windows.Point> pList2 = new List <System.Windows.Point>(); GraphView_MainView _GraphView = new GraphView_MainView(); CurveGraphViewModel _GraphViewModel = new CurveGraphViewModel(); pList.Add(new System.Windows.Point(0, 0)); pList.Add(new System.Windows.Point(250, 400)); pList.Add(new System.Windows.Point(500, 200)); pList.Add(new System.Windows.Point(700, 400)); pList.Add(new System.Windows.Point(900, 350)); pList2.Add(new System.Windows.Point(0, 100)); pList2.Add(new System.Windows.Point(250, 500)); pList2.Add(new System.Windows.Point(500, 300)); pList2.Add(new System.Windows.Point(700, 500)); pList2.Add(new System.Windows.Point(900, 450)); // TODO: Replace Camera with Camera once integrated with GameEditor _GraphViewModel.Camera = new Camera(); _GraphViewModel.Camera.SetTransform(0, 0); BezierCurveModelItem item = new BezierCurveModelItem(new BezierCurve(pList)); item.Add(new BezierCurve(pList2)); CurveGraphModel model = new CurveGraphModel(); model.Item = item; _GraphViewModel.Add(model); Configure(_GraphView, _GraphViewModel); StartD2D(_GraphView.GraphView); }
/// <summary> /// Calculates delta movement /// </summary> /// <param name="model"></param> private void CalculatePosition(CurveGraphModel model) { Point dest; if (!MiddleMouseUsed) { dest = LerpMath.CalculateDelta(new Point(dragOrigin[0], dragOrigin[1]), new Point(dragEnd[0], dragEnd[1]), false, true); } else { dest = LerpMath.CalculateDelta(new Point(dragOrigin[2], dragOrigin[3]), new Point(dragEnd[0], dragEnd[1]), false, true); double offsetMultiplier = 0.55; dest = new Point( (dest.X * offsetMultiplier), (dest.Y * offsetMultiplier) ); MiddleMouseUsed = false; dragDirection = 0; } movementQueue.Add(new Point(dest.X, dest.Y)); }
public void Add(CurveGraphModel model) { if (Items != null) { Items.Clear(); modelitems = null; } else { Items = new ObservableCollection <FrameworkElement>(); modelitems = new CurveGraphModel(); } modelitems = model; GraphGrid grid = DrawGrid.RenderGrid(model, camera); model.Item.Grid = grid; if (UpdateRender != null) { UpdateRender(this, EventArgs.Empty); } }
public static GraphGrid RenderGrid(CurveGraphModel model, Camera cam = null) { GraphGrid grid = Draw(model, cam); return(grid); }
public void OnMouseUp(object sender, MouseButtonEventArgs e) { List <Point> modifiedList = new List <Point>(); switch (GraphView_ToolHandler.ActiveTool) { case 0: if (dragIndex < Items.Count && Items[dragIndex].Name == "dragArea") { Items.RemoveAt(dragIndex); } if (_DragSelection) { _dragDropped = true; _DragSelection = false; dragBox = null; } //Move if (draggedItem != null || MiddleMouseUsed || oldPosition.X != 0) { CurveGraphModel model = new CurveGraphModel(); model = modelitems; if (oldPosition.X != 0) { Point delta = LerpMath.CalculateDelta ( oldPosition, Mouse.GetPosition(Application.Current.MainWindow), true ); double x = camera.GetTransform(0, 0); double y = camera.GetTransform(0, 1); camera.SetTransform(x + delta.X, y + delta.Y); oldPosition.X = 0; } CalculatePosition(model); ApplyMovement(ref model, ref modifiedList); Add(model); draggedItem = null; } //Selection else { HandleSelection(sender, e); } modifiedList.Clear(); break; case 1: ClearItems(); break; default: break; } }
public override void OnMouseDown(object sender, MouseButtonEventArgs e) { CheckModifier(); switch (GraphView_ToolHandler.ActiveTool) { //Select tool case 0: //Toolhandle if (e.ChangedButton == MouseButton.Left && e.OriginalSource.GetType() == typeof(ToolAdorner)) { ToolAdorner rect = (ToolAdorner)e.OriginalSource; if (Regex.IsMatch(rect.Name, "(left)?(right)?(top)?(bottom)?")) { dragDirection = (rect.Name == "left" || rect.Name == "right") ? dragDirection = 1 : dragDirection = 2; if (selectedPos.Count > 1) { Point origin = LerpMath.CalculateAverage(selectedPos); dragOrigin[0] = origin.X; dragOrigin[1] = origin.Y; } else { dragOrigin[0] = e.GetPosition(_Canvas).X; dragOrigin[1] = e.GetPosition(_Canvas).Y; } draggedItem = rect; return; } return; } //Drag select if (e.ChangedButton == MouseButton.Left && !(e.OriginalSource.GetType() == typeof(Rectangle) && !(e.OriginalSource.GetType() == typeof(ToolAdorner)))) { _DragSelection = true; _time = DateTime.Now; dragOrigin[0] = e.GetPosition(_Canvas).X; dragOrigin[1] = e.GetPosition(_Canvas).Y; return; } //move camera if (_alt && e.ChangedButton == MouseButton.Middle) { _alt = false; oldPosition = Mouse.GetPosition(Application.Current.MainWindow); return; } //drag move if (e.ChangedButton == MouseButton.Middle && selectedItems.Count > 0) { dragOrigin[2] = Mouse.GetPosition(Application.Current.MainWindow).X; dragOrigin[3] = Mouse.GetPosition(Application.Current.MainWindow).Y; MiddleMouseUsed = true; return; } break; //Insert Point Tool case 1: if (e.ChangedButton == MouseButton.Left) { Point pos = camera.OffsetPosition(e.GetPosition(_Canvas)); CurveGraphModel model = ModelItems; // TODO: Need to find ways to separate curves from each other //BezierCurve curve = model.Item.Curve; //curve.InsertPoint(pos); //Add(model); } break; default: break; } }