/// <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();
        }
Beispiel #2
0
        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);
            }
        }
Beispiel #4
0
        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);
            }
        }
Beispiel #7
0
        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;
            }
        }