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