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); } } }
public override void CopyStaticFigure() { if ((Iterations == -1) || Figure.IsGuide) { return; } var rf = new RectFigure { X = new ScalarExpression("a", "a", RectFigure.X.CachedValue.Str), Y = new ScalarExpression("a", "a", RectFigure.Y.CachedValue.Str), Width = new ScalarExpression("a", "a", RectFigure.Width.CachedValue.Str), Height = new ScalarExpression("a", "a", RectFigure.Height.CachedValue.Str), FigureColor = RectFigure.FigureColor.Copy() }; Figure.StaticLoopFigures.Add(rf); StepManager.Figures.Add(rf); }
public ScaleRectStep(RectFigure figure, Side scaleAround, double factor) : this(figure, scaleAround, factor.Str()) { }
public ScaleRectStep(RectFigure figure, Side scaleAround, string factor) : this(figure, scaleAround) { Scale(factor); }
private ScaleRectStep(RectFigure figure, Side scaleAround) { Figure = figure; RectFigure = figure; ScaleAround = scaleAround; }
private void MoveRect(RectFigure rf, Point pos) { if (_nowMoving == null) { _nowMoving = new MoveRectStep(rf, pos.X - _downPos.X, pos.Y - _downPos.Y); StepManager.InsertNext(_nowMoving); } else { var snapped = StepManager.Snap(pos, _nowMoving.Figure); Magnet snappedBy; if ((snapped != null) && ((snappedBy = StepManager.SnapTo(pos, _nowMoving.Figure.GetMagnets())) != null)) { if (snappedBy.EqualExprStrings(rf.TopLeft)) { ((MoveRectStep)_nowMoving).Move( "(" + snapped.X.ExprString + ") - (" + _nowMoving.Figure.Name + ".x)", "(" + snapped.Y.ExprString + ") - (" + _nowMoving.Figure.Name + ".y)", snappedBy.Def, snapped.Def); } else if (snappedBy.EqualExprStrings(rf.TopRight)) { ((MoveRectStep)_nowMoving).Move( "((" + snapped.X.ExprString + ") - (" + rf.Name + ".width)) - (" + _nowMoving.Figure.Name + ".x)", "(" + snapped.Y.ExprString + ") - (" + _nowMoving.Figure.Name + ".y)", snappedBy.Def, snapped.Def); } else if (snappedBy.EqualExprStrings(rf.BottomLeft)) { ((MoveRectStep)_nowMoving).Move( "(" + snapped.X.ExprString + ") - (" + _nowMoving.Figure.Name + ".x)", "((" + snapped.Y.ExprString + ") - (" + rf.Name + ".height)) - (" + _nowMoving.Figure.Name + ".y)", snappedBy.Def, snapped.Def); } else if (snappedBy.EqualExprStrings(rf.BottomRight)) { ((MoveRectStep)_nowMoving).Move( "((" + snapped.X.ExprString + ") - (" + rf.Name + ".width)) - (" + _nowMoving.Figure.Name + ".x)", "((" + snapped.Y.ExprString + ") - (" + rf.Name + ".height)) - (" + _nowMoving.Figure.Name + ".y)", snappedBy.Def, snapped.Def); } else if (snappedBy.EqualExprStrings(rf.Center)) { ((MoveRectStep)_nowMoving).Move( "((" + snapped.X.ExprString + ") - (" + rf.Name + ".width/2)) - (" + _nowMoving.Figure.Name + ".x)", "((" + snapped.Y.ExprString + ") - (" + rf.Name + ".height/2)) - (" + _nowMoving.Figure.Name + ".y)", snappedBy.Def, snapped.Def); } } else { ((MoveRectStep)_nowMoving).Move(pos.X - _downPos.X, pos.Y - _downPos.Y); } } }
public ResizeRectStep(RectFigure figure, Side resizeAround, double value) : this(figure, resizeAround, value.Str()) { }
public ResizeRectStep(RectFigure figure, Side resizeAround, string value, string where = null) : this(figure, resizeAround) { Resize(value, where); }
private ResizeRectStep(RectFigure figure, Side resizeAround) { Figure = figure; RectFigure = figure; ResizeAround = resizeAround; }
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); } } } }
private DrawRectStep() { Figure = new RectFigure("rect" + _count++); RectFigure = (RectFigure)Figure; }
public MoveRectStep(RectFigure figure, double x, double y) : this(figure, x.Str(), y.Str()) { }
public MoveRectStep(RectFigure figure, string x, string y) : this(figure) { Move(x, y); }
private MoveRectStep(RectFigure figure) { Figure = figure; RectFigure = figure; }