protected override IEnumerable<IFigure> CreateFigures() { FreePoint[] points = new FreePoint[] { FoundDependencies[0] as FreePoint, FoundDependencies[1] as FreePoint, FoundDependencies[2] as FreePoint }; //We have two vectors in R^2. Tuple<double, double> v1 = new Tuple<double, double>(points[1].X - points[0].X, points[1].Y - points[0].Y); Tuple<double, double> v2 = new Tuple<double, double>(points[2].X - points[1].X, points[2].Y - points[1].Y); //Apply Gram-Schmidt to find part of v2 orthogonal to v1. double v2ParallelCoef = (v2.Item1 * v1.Item1 + v2.Item2 * v1.Item2) / (System.Math.Pow(v1.Item1, 2) + System.Math.Pow(v1.Item2, 2)); Tuple<double, double> v2Parallel = new Tuple<double, double>(v2ParallelCoef * v1.Item1, v2ParallelCoef * v1.Item2); Tuple<double, double> v2Perp = new Tuple<double, double>(v2.Item1 - v2Parallel.Item1, v2.Item2 - v2Parallel.Item2); //Translate the vector to the correct grid coordinate. points[2].X = v2Perp.Item1 + points[1].X; points[2].Y = v2Perp.Item2 + points[1].Y; yield return Factory.CreatePolygon(Drawing, points); for (int i = 0; i < points.Length; i++) { // get two consecutive vertices of the polygon int j = (i + 1) % points.Length; IPoint p1 = points[i] as IPoint; IPoint p2 = points[j] as IPoint; // try to find if there is already a line connecting them if (Drawing.Figures.FindLine(p1, p2) == null) { // if not, create a new segment var segment = Factory.CreateSegment(Drawing, new[] { p1, p2 }); yield return segment; } } }
public static FreePoint CreateFreePoint(Drawing drawing, Point coordinates) { var result = new FreePoint() { Drawing = drawing }; result.MoveTo(coordinates); return(result); }
public void DrawSection() { // Tạo 1 điểm BasePoint BasePoint = Factory.CreateFreePoint(Drawing, InsertPoint); BasePoint.Visible = false; this.Children.Add(BasePoint); this.Dependencies.Add(BasePoint); CreateBound(); CreateCells(); }
protected override void MouseDown(object sender, System.Windows.Input.MouseButtonEventArgs e) { var found = Drawing.Figures.HitTest(e.GetPosition(Drawing.Parent)); dragging = found as FreePoint; //var result = VisualTreeHelper.HitTest( // Parent, // e.GetPosition(Parent)); //FrameworkElement ell = result.VisualHit as FrameworkElement; //if (ell != null) //{ // dragging = ell; // return; //} }
protected override void MouseDown(object sender, System.Windows.Input.MouseButtonEventArgs e) { var found = Drawing.Figures.HitTest(e.GetPosition(Drawing.Parent)); dragging = found as FreePoint; //var result = VisualTreeHelper.HitTest( // Parent, // e.GetPosition(Parent)); //FrameworkElement ell = result.VisualHit as FrameworkElement; //if (ell != null) //{ // dragging = ell; // return; //} }
protected override IEnumerable <IFigure> CreateFigures() { FreePoint[] points = new FreePoint[] { FoundDependencies[0] as FreePoint, FoundDependencies[1] as FreePoint, FoundDependencies[2] as FreePoint }; //Do same process as right triangle, but then union with mirror image. //We have two vectors in R^2. Tuple <double, double> v1 = new Tuple <double, double>(points[1].X - points[0].X, points[1].Y - points[0].Y); Tuple <double, double> v2 = new Tuple <double, double>(points[2].X - points[1].X, points[2].Y - points[1].Y); //Apply Gram-Schmidt to find part of v2 orthogonal to v1. double v2ParallelCoef = (v2.Item1 * v1.Item1 + v2.Item2 * v1.Item2) / (System.Math.Pow(v1.Item1, 2) + System.Math.Pow(v1.Item2, 2)); Tuple <double, double> v2Parallel = new Tuple <double, double>(v2ParallelCoef * v1.Item1, v2ParallelCoef * v1.Item2); Tuple <double, double> v2Perp = new Tuple <double, double>(v2.Item1 - v2Parallel.Item1, v2.Item2 - v2Parallel.Item2); //Translate the vector to the correct grid coordinate. points[2].X = v2Perp.Item1 + points[1].X; points[2].Y = v2Perp.Item2 + points[1].Y; //Make this right triangle into an isosceles trinagle. points[1].X -= v2Perp.Item1; points[1].Y -= v2Perp.Item2; yield return(Factory.CreatePolygon(Drawing, points)); for (int i = 0; i < points.Length; i++) { // get two consecutive vertices of the polygon int j = (i + 1) % points.Length; IPoint p1 = points[i] as IPoint; IPoint p2 = points[j] as IPoint; // try to find if there is already a line connecting them if (Drawing.Figures.FindLine(p1, p2) == null) { // if not, create a new segment var segment = Factory.CreateSegment(Drawing, new[] { p1, p2 }); yield return(segment); } } }
protected override void MouseUp(object sender, System.Windows.Input.MouseButtonEventArgs e) { dragging = null; }
/// <summary> /// Assumes coordinates are logical already /// </summary> /// <param name="coordinates">Logical coordinates of the click point</param> protected override void MouseLeftButtonDown(object sender, System.Windows.Input.MouseButtonEventArgs e) { // 11-18-2010 Scott if (e.ClickCount == 2) { Drawing.SetDefaultBehavior(); return; } IEnumerable <IFigure> selectedFigures = Drawing.GetSelectedFigures(); PBPlayer player = null; if (selectedFigures != null && selectedFigures.Count() > 0) { player = selectedFigures.ElementAt(0) as PBPlayer; if (player == null) { return; } } else { return; } //Type expectedType = ExpectedDependency; System.Windows.Point coordinates = Coordinates(e); IFigure underMouse = null; underMouse = Drawing.Figures.HitTest(coordinates); if (underMouse == player) { Drawing.SetDefaultBehavior(); return; } IFigure endFigure = player.GetEndFigure(); if (endFigure is Game.Zone) { return; } player.ChangeLineType(CapType.Arrow); FreePoint pp = CreatePointAtCurrentPosition(coordinates, false); FigureList fl = new FigureList(); if (endFigure != null) { if (endFigure is Game.PBPlayer) { player.ClearEndPath(); endFigure = player.GetEndFigure(); if (endFigure != null) { fl.Add(endFigure); } else { fl.Add(player); } } else { fl.Add(endFigure); } } else { fl.Add(player); } fl.Add(pp); PBLine line = Factory.CreateArrowLine(Drawing, fl); if (!Drawing.DrawingMode) { line.StrokeColor = Webb.Playbook.Data.ColorSetting.Instance.RouteColor; } FigureList figureList = new FigureList(); figureList.Add(line); figureList.Add(pp); Drawing.Add(figureList as IEnumerable <IFigure>); Drawing.Figures.CheckConsistency(); Drawing.Figures.UpdateVisual(); //if (TempPoint != null) //{ // underMouse = Drawing.Figures.HitTest( // coordinates, // typeof(IPoint)); //} //else if (expectedType != null) //{ // underMouse = Drawing.Figures.HitTest(coordinates, expectedType); //} //else //{ // underMouse = Drawing.Figures.HitTest(coordinates); //} //if (underMouse != null // && underMouse != TempPoint // && ((FoundDependencies.Contains(underMouse) && !CanReuseDependency()) // || underMouse == TempResult)) //{ // return; //} //IFigure endPointFigure = player.GetEndFigure(); //if (TempPoint == null && underMouse != player && underMouse != endPointFigure) //{ // return; //} //if (ExpectingAPoint()) //{ // if (underMouse == null) // { // underMouse = CreatePointAtCurrentPosition(coordinates, true); // FigureList fl = new FigureList(); // fl.Add(player); // if (underMouse != null) // { // fl.Add(underMouse); // } // PBLine line = Factory.CreateArrowLine(Drawing, fl); // FigureList figureList = new FigureList(); // figureList.Add(line); // figureList.Add(underMouse); // Drawing.Add(figureList as IEnumerable<IFigure>); // return; // } // else // { // // one branch only // if (underMouse is Webb.Playbook.Geometry.Game.PBPlayer && underMouse.Dependents.Count > 0) // { // foreach (IFigure dep in underMouse.Dependents) // { // if (dep.Dependencies != null && dep.Dependencies.Count() > 1 && dep.Dependencies.ElementAt(0) == underMouse) // { // return; // } // } // if (underMouse != player) // { // return; // } // } // // at most two branch // else if (underMouse is IPoint && underMouse.Dependents.Count > 1) // { // return; // } // else if (underMouse is Zone) // { // return; // } // } //} //RemoveIntermediateFigureIfNecessary(); //if (TempPoint != null) //{ // //if (underMouse == TempPoint || underMouse == TempResult || underMouse == null) // //{ // underMouse = CreatePointAtCurrentPosition(coordinates, true); // //} // TempPoint.SubstituteWith(underMouse); // FoundDependencies.Remove(TempPoint); // Drawing.Figures.Remove(TempPoint); // TempPoint = null; //} //if (ExpectedDependency != null) //{ // AddFoundDependency(underMouse); //} //if (ExpectedDependency != null) //{ // if (ExpectingAPoint()) // { // player.ChangeLineType(CapType.Arrow); // 01-07-2010 Scott // TempPoint = CreateTempPoint(coordinates); // AddFoundDependency(TempPoint); // if (ExpectedDependency == null) // { // CreateAndAddFigure(); // Drawing.Figures.UpdateVisual(); // } // } // AddIntermediateFigureIfNecessary(); // AdvertiseNextDependency(); //} //else //{ // Finish(); // //07-22-2009 scott // if (IsMouseButtonDown) // {// click mode // IFigure endFigure = Drawing.Figures.HitTest(coordinates, typeof(Webb.Playbook.Geometry.Game.PBPlayer)); // if (endFigure is Webb.Playbook.Geometry.Game.PBPlayer) // { // Drawing.ActionManager.Undo(); // } // else // { // MouseLeftButtonDown(sender, e as System.Windows.Input.MouseButtonEventArgs); // } // } // else // {// drag mode // } //} //Drawing.Figures.CheckConsistency(); //Drawing.Figures.UpdateVisual(); }
/// <summary> /// Assumes coordinates are logical already /// </summary> /// <param name="coordinates">Logical coordinates of the click point</param> protected override void MouseLeftButtonDown(object sender, System.Windows.Input.MouseButtonEventArgs e) { if (e.ClickCount > 1) { Drawing.SetDefaultBehavior(); return; } IEnumerable <IFigure> selectedFigures = Drawing.GetSelectedFigures(); PBPlayer player = null; IFigure endFigure = null; if (selectedFigures != null && selectedFigures.Count() > 0) { player = selectedFigures.ElementAt(0) as PBPlayer; } //Type expectedType = ExpectedDependency; System.Windows.Point coordinates = Coordinates(e); IFigure underMouse = null; underMouse = Drawing.Figures.HitTest(coordinates); if (underMouse is Game.PBPlayer) { if (underMouse == player) { Drawing.SetDefaultBehavior(); return; } player = underMouse as Game.PBPlayer; Drawing.ClearSelectedFigures(); player.Selected = true; Drawing.Figures.UpdateVisual(); return; } else if (underMouse is IPoint && (underMouse as IPoint).Dependents.Count == 1) { Drawing.ClearSelectedFigures(); underMouse.Selected = true; Drawing.Figures.UpdateVisual(); return; } if (player == null) { if (selectedFigures != null && selectedFigures.Count() > 0) { IFigure figure = selectedFigures.ElementAt(0); if (figure is IPoint && (figure as IPoint).Dependents.Count == 1) { endFigure = figure; } else { return; } } else { return; } } else {// 09-26-2011 Scott endFigure = null; //endFigure = player.GetEndFigure(); //player.ChangeLineType(CapType.Arrow); //if (endFigure is Game.Zone) //{ // return; //} } FreePoint pp = CreatePointAtCurrentPosition(coordinates, false); FigureList fl = new FigureList(); if (endFigure != null) { if (endFigure is Game.PBPlayer) { player.ClearEndPath(); endFigure = player.GetEndFigure(); if (endFigure != null) { fl.Add(endFigure); } else { fl.Add(player); } } else { fl.Add(endFigure); } } else { fl.Add(player); } fl.Add(pp); PBLine line = Factory.CreateArrowLine(Drawing, fl); if (!Drawing.DrawingMode) { line.StrokeColor = Webb.Playbook.Data.ColorSetting.Instance.RouteColor; } FigureList figureList = new FigureList(); figureList.Add(line); figureList.Add(pp); Drawing.Add(figureList as IEnumerable <IFigure>); Drawing.ClearSelectedFigures(); pp.Selected = true; Drawing.Figures.CheckConsistency(); Drawing.Figures.UpdateVisual(); }
protected override void MouseUp(object sender, System.Windows.Input.MouseButtonEventArgs e) { dragging = null; }