Esempio n. 1
0
        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;
                }
            }
        }
Esempio n. 2
0
        public static FreePoint CreateFreePoint(Drawing drawing, Point coordinates)
        {
            var result = new FreePoint()
            {
                Drawing = drawing
            };

            result.MoveTo(coordinates);
            return(result);
        }
Esempio n. 3
0
        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();
        }
Esempio n. 4
0
        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;
            //}
        }
Esempio n. 5
0
        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);
                }
            }
        }
Esempio n. 7
0
 protected override void MouseUp(object sender, System.Windows.Input.MouseButtonEventArgs e)
 {
     dragging = null;
 }
Esempio n. 8
0
        /// <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();
        }
Esempio n. 9
0
        /// <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();
        }
Esempio n. 10
0
 protected override void MouseUp(object sender, System.Windows.Input.MouseButtonEventArgs e)
 {
     dragging = null;
 }