public void Configure(UserControl view, CurveGraphViewModel viewModel) { base.Configure(view, viewModel); ToolHandler = new GraphView_ToolHandler(); ((GraphView_MainView)view).ResizeEnd += View_SizeChanged; viewModel.UpdateRender += ResumeRender; SetContext(); }
/// <summary> /// Draws rectangles on control points /// </summary> /// <param name="vm"></param> /// <returns></returns> public static List <FrameworkElement> DrawRectangles(CurveGraphViewModel vm, List <Point> list, int curveNr) { var curveList = vm.ModelItems.Item.Curve; List <FrameworkElement> elementList = new List <FrameworkElement>(); int originalPos = 0; int smoothPos = 0; for (int j = 0; j < curveList.Count; j++) { var curve = curveList[j]; //Draws point rectangles for (int i = 0; i < curveList[j].Points.Count - 1; i++) { Rectangle rect = new Rectangle(); rect.Height = 5; rect.Width = 5; rect.Fill = Brushes.DarkBlue; if (i == originalPos && smoothPos < curve.Smoothness.Count || i == curve.Points.Count - 1) { //_Curve.Original[smoothPos] = _Curve.Points[i]; if (smoothPos < curve.Smoothness.Count) { originalPos += curve.Smoothness[smoothPos] + 1; } smoothPos++; rect.Fill = Brushes.Yellow; } string name = String.Format("curve{1} point{0}", i, curveNr); rect.Tag = name; elementList.Add(rect); try { var pos = vm.Camera.OffsetPosition(new Point(list[i].X + vm.Camera.GetTransform(0, 0) - 2.5f, list[i].Y + vm.Camera.GetTransform(0, 1) - 2.5f)); var camera = vm.Camera; Canvas.SetTop(rect, pos.Y); Canvas.SetLeft(rect, pos.X); } catch (IndexOutOfRangeException) { throw; } } } return(elementList); }
public void sodoff(object sender, MouseEventArgs e) { GraphView_StateManager manager = ProjectStateManager.Instance.StateManagers.OfType <GraphView_StateManager>().First(); CurveGraphViewModel vm = ((CurveGraphViewModel)manager.ViewModel); if (vm == null) { return; } Point pos = e.GetPosition(sender as Canvas); pos.X -= vm.Camera.GetTransform(0, 0); pos.Y -= vm.Camera.GetTransform(0, 1); double value = 0; for (int x = 0; x < vm.ModelItems.Item.Curve.Count; x++) { var curve = vm.ModelItems.Item.Curve[x].Points; for (int i = 0; i < curve.Count; i++) { if (i != 0 && pos.X < curve[i].X) { Point point1 = curve[i - 1]; Point point2 = curve[i]; value = LerpMath.Lerp(point1, point2, pos.X / point2.X).Y; break; } } } double[] camCoords = new double[] { vm.Camera.GetTransform(0, 0), vm.Camera.GetTransform(0, 1) }; double scale = vm.Camera.GetScale; xLabel.Content = String.Format("Mouse: {0:N2} {1:N2} | Camera: {2:N2} {3:N2} | Scale: {4:N2} | Curve value: {5:N2}", (e.GetPosition(_View.GraphView).X - camCoords[0]) * scale, (e.GetPosition(_View.GraphView).Y - camCoords[1]) * scale, camCoords[0], camCoords[1], scale, value ); }
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); }