예제 #1
0
 public override void Started()
 {
     this.ConstructionComplete = true;
     Transaction          = Transaction.Create(Drawing.ActionManager, false);
     ExpectedDependencies = InitExpectedDependencies();
     FoundDependencies.Clear();
 }
예제 #2
0
 protected override void AddFoundDependency(IFigure figure)
 {
     if (figure != null)
     {
         FoundDependencies.Add(figure);
     }
 }
예제 #3
0
 private void RemoveTempPoint()
 {
     if (TempPoint != null)
     {
         Drawing.Figures.Remove(TempPoint);
         FoundDependencies.Remove(TempPoint);
     }
 }
예제 #4
0
        public override void MouseDown(object sender, System.Windows.Input.MouseButtonEventArgs e)
        {
            var underMouse = Drawing.Figures.HitTest(Coordinates(e));

            if (underMouse != null &&
                (underMouse is AngleArc || underMouse is AngleMeasurement))
            {
                FoundDependencies.AddRange(underMouse.Dependencies);
            }
            base.MouseDown(sender, e);
        }
예제 #5
0
 protected void RemoveTempPointIfNecessary()
 {
     if (TempPoint != null)
     {
         FoundDependencies.Remove(TempPoint);
         Drawing.ActionManager.ExecuteImmediatelyWithoutRecording = true;
         Actions.Remove(TempPoint);
         Drawing.ActionManager.ExecuteImmediatelyWithoutRecording = false;
         TempPoint = null;
     }
 }
예제 #6
0
        public override void MouseDown(object sender, System.Windows.Input.MouseButtonEventArgs e)
        {
            var underMouse = Drawing.Figures.HitTest <Segment>(Coordinates(e));

            if (underMouse != null &&
                underMouse.Dependencies.Count() == 2 &&
                Drawing.Figures.HitTest <IPoint>(Coordinates(e)) == null)
            {
                FoundDependencies.AddRange(underMouse.Dependencies);
            }
            base.MouseDown(sender, e);
        }
예제 #7
0
 protected override IFigure CreateIntermediateFigure()
 {
     if (!FoundDependencies.All(f => f is IPoint))
     {
         return(null);
     }
     if (FoundDependencies.Count == 2)
     {
         return(Factory.CreateSegment(Drawing, FoundDependencies));
     }
     return(null);
 }
 protected override IFigure CreateIntermediateFigure()
 {
     if (!FoundDependencies.All(f => f is IPoint))
     {
         return(null);
     }
     else if (FoundDependencies.Count >= 3)
     {
         var result = Factory.CreateAreaMeasurement(Drawing, FoundDependencies);
         return(result);
     }
     return(null);
 }
예제 #9
0
 public void Register(string uniqueName, string originalId, T resource)
 {
     if (resource == null)
     {
         MissingDependencyNames.Add(uniqueName);
     }
     else
     {
         if (!FoundDependencies.ContainsKey(originalId))
         {
             FoundDependencies.Add(originalId, resource);
         }
     }
 }
예제 #10
0
        protected int FoundDependenciesMinimum = 3; // Includes TempPoint
        protected override void Click(Point coordinates)
        {
            var point = Drawing.Figures.HitTest <IPoint>(coordinates);

            if (point != null &&
                FoundDependencies.Count >= FoundDependenciesMinimum + 1 && // Add 1 for TempPoint
                FoundDependencies.Contains(point))
            {
                RemoveIntermediateFigureIfNecessary();
                RemoveTempPointIfNecessary();
                AddFiguresAndRestart();
                return;
            }
            base.Click(coordinates);
        }
        public override void MouseDown(object sender, System.Windows.Input.MouseButtonEventArgs e)
        {
            var underMouse = Drawing.Figures.HitTest(Coordinates(e), f => f is ILengthProvider && !f.DependsOn(TempPoint));

            if (underMouse != null &&
                Drawing.Figures.HitTest <IPoint>(Coordinates(e)) == null)
            {
                FoundDependencies.Clear();
                FoundDependencies.Add(underMouse);
                RemoveIntermediateFigureIfNecessary();
                RemoveTempPointIfNecessary();
                AddFiguresAndRestart();
                return;
            }
            base.MouseDown(sender, e);
        }
예제 #12
0
        protected override IEnumerable <IFigure> CreateFigures()
        {
            var source = FoundDependencies[0];

            Check.NotNull(source);
            var dependenciesSubset = new List <IFigure>(FoundDependencies.Without(source));
            var results            = Transformer.CreateTranslatedFigure(
                Drawing,
                source,
                dependenciesSubset,
                dialog.magnitude,
                dialog.direction);

            Check.NotNull(results);
            Check.NoNullElements(results);
            foreach (var f in results)
            {
                yield return(f);
            }
        }
예제 #13
0
        /// <summary>
        /// Assumes coordinates are logical already
        /// </summary>
        /// <param name="coordinates">Logical coordinates of the click point</param>
        protected virtual void Click(System.Windows.Point coordinates)
        {
            IFigure underMouse   = null;
            Type    expectedType = ExpectedDependency;

            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;
            }

            if (ExpectingAPoint())
            {
                if (underMouse == null)
                {
                    underMouse = CreatePointAtCurrentPosition(coordinates, true);
                }
            }

            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())
                {
                    TempPoint = CreateTempPoint(coordinates);
                    AddFoundDependency(TempPoint);
                    if (ExpectedDependency == null)
                    {
                        CreateAndAddFigure();
                    }
                }
                AddIntermediateFigureIfNecessary();
                AdvertiseNextDependency();
            }
            else
            {
                Finish();
            }

            Drawing.Figures.CheckConsistency();
        }
예제 #14
0
        /// <summary>
        /// Assumes coordinates are logical already
        /// </summary>
        /// <param name="coordinates">Logical coordinates of the click point</param>
        protected virtual void Click(object sender, System.Windows.Input.MouseButtonEventArgs e)
        {
            System.Windows.Point coordinates = Coordinates(e);

            IFigure underMouse   = null;
            Type    expectedType = ExpectedDependency;

            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;
            }

            if (ExpectingAPoint())
            {
                if (underMouse == null)
                {
                    //underMouse = CreatePointAtCurrentPosition(coordinates, true);
                    return;
                }
                else
                {
                    // one branch only
                    if (underMouse is Webb.Playbook.Geometry.Game.PBPlayer && underMouse.Dependents.Count > 0)
                    {
                        return;
                    }
                    // at most two branch
                    if (underMouse is IPoint && underMouse.Dependents.Count > 1)
                    {
                        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())
                {
                    TempPoint = CreateTempPoint(coordinates);
                    AddFoundDependency(TempPoint);
                    if (ExpectedDependency == null)
                    {
                        CreateAndAddFigure();
                    }
                }
                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();
        }