Exemple #1
0
        private void ScaleRect(RectFigure rf, Point pos)
        {
            if (_nowScaling == null)
            {
                _originalW = rf.Width.CachedValue.AsDouble;
                _originalH = rf.Height.CachedValue.AsDouble;
                var snappedTo = StepManager.SnapTo(pos, rf.GetMagnets(), rf.Center);
                if ((snappedTo == rf.Left) && (Math.Abs(_originalW) > Utils.Tolerance))
                {
                    _nowScaling = new ScaleRectStep(rf, ScaleRectStep.Side.Right,
                                                    1 - (pos.X - _downPos.X) / _originalW);
                }
                else if ((snappedTo == rf.Right) && (Math.Abs(_originalW) > Utils.Tolerance))
                {
                    _nowScaling = new ScaleRectStep(rf, ScaleRectStep.Side.Left,
                                                    1 + (pos.X - _downPos.X) / _originalW);
                }
                else if ((snappedTo == rf.Top) && (Math.Abs(_originalH) > Utils.Tolerance))
                {
                    _nowScaling = new ScaleRectStep(rf, ScaleRectStep.Side.Bottom,
                                                    1 - (pos.Y - _downPos.Y) / _originalH);
                }
                else if ((snappedTo == rf.Bottom) && (Math.Abs(_originalH) > Utils.Tolerance))
                {
                    _nowScaling = new ScaleRectStep(rf, ScaleRectStep.Side.Top,
                                                    1 + (pos.Y - _downPos.Y) / _originalH);
                }
                if (_nowScaling == null)
                {
                    return;
                }
                StepManager.InsertNext(_nowScaling);
            }
            else
            {
                var srs = (ScaleRectStep)_nowScaling;

                if (srs.ScaleAround == ScaleRectStep.Side.Right)
                {
                    srs.Scale(1 - (pos.X - _downPos.X) / _originalW);
                }
                else if (srs.ScaleAround == ScaleRectStep.Side.Left)
                {
                    srs.Scale(1 + (pos.X - _downPos.X) / _originalW);
                }
                else if (srs.ScaleAround == ScaleRectStep.Side.Top)
                {
                    srs.Scale(1 + (pos.Y - _downPos.Y) / _originalH);
                }
                else if (srs.ScaleAround == ScaleRectStep.Side.Bottom)
                {
                    srs.Scale(1 - (pos.Y - _downPos.Y) / _originalH);
                }
            }
        }
 private void ResizeRect(RectFigure rf, Point pos)
 {
     if (_nowResizing == null)
     {
         var snappedTo = StepManager.SnapTo(pos, rf.GetMagnets(), rf.Center);
         if (snappedTo == rf.Left)
         {
             _nowResizing = new ResizeRectStep(rf, ResizeRectStep.Side.Right, pos.X - _downPos.X);
         }
         else if (snappedTo == rf.Right)
         {
             _nowResizing = new ResizeRectStep(rf, ResizeRectStep.Side.Left, pos.X - _downPos.X);
         }
         else if (snappedTo == rf.Top)
         {
             _nowResizing = new ResizeRectStep(rf, ResizeRectStep.Side.Bottom, pos.Y - _downPos.Y);
         }
         else if (snappedTo == rf.Bottom)
         {
             _nowResizing = new ResizeRectStep(rf, ResizeRectStep.Side.Top, pos.Y - _downPos.Y);
         }
         if (_nowResizing == null)
         {
             return;
         }
         StepManager.InsertNext(_nowResizing);
     }
     else
     {
         var rrs     = (ResizeRectStep)_nowResizing;
         var snapped = StepManager.Snap(pos, _nowResizing.Figure);
         if (snapped != null)
         {
             if (rrs.ResizeAround == ResizeRectStep.Side.Right)
             {
                 rrs.Resize("(" + snapped.X.ExprString + ") - " + rrs.Figure.Name + ".x", snapped.Def);
             }
             else if (rrs.ResizeAround == ResizeRectStep.Side.Left)
             {
                 rrs.Resize("(" + snapped.X.ExprString + ") - (" + rrs.Figure.Name + ".x + (" +
                            rrs.Figure.Name + ".width))", snapped.Def);
             }
             else if (rrs.ResizeAround == ResizeRectStep.Side.Top)
             {
                 rrs.Resize("(" + snapped.Y.ExprString + ") - (" + rrs.Figure.Name + ".y + (" +
                            rrs.Figure.Name + ".height))", snapped.Def);
             }
             else if (rrs.ResizeAround == ResizeRectStep.Side.Bottom)
             {
                 rrs.Resize("(" + snapped.Y.ExprString + ") - " + rrs.Figure.Name + ".y", snapped.Def);
             }
         }
         else
         {
             if (rrs.ResizeAround == ResizeRectStep.Side.Right)
             {
                 rrs.Resize(pos.X - _downPos.X);
             }
             else if (rrs.ResizeAround == ResizeRectStep.Side.Left)
             {
                 rrs.Resize(pos.X - _downPos.X);
             }
             else if (rrs.ResizeAround == ResizeRectStep.Side.Top)
             {
                 rrs.Resize(pos.Y - _downPos.Y);
             }
             else if (rrs.ResizeAround == ResizeRectStep.Side.Bottom)
             {
                 rrs.Resize(pos.Y - _downPos.Y);
             }
         }
     }
 }