public void OnMouseMove(System.Windows.Input.MouseEventArgs e) { Point p = e.GetPosition(_ui._parent.Canvas); p = PlacementHelper.RoundToGrid(p); var v = Point.Subtract(_p0, p); _p0 = p; _mouseMove(p); e.Handled = true; }
private void Ui_MouseMove(object sender, System.Windows.Input.MouseEventArgs e) { Point p = e.GetPosition(_ui._parent.Canvas); p = PlacementHelper.RoundToGrid(p); var v = Point.Subtract(p, _startPoint); _startPoint = p; _wp.Move(new TranslateTransform(v.X, v.Y)); e.Handled = true; }
public ChangeSizeOperation(OutlineUI parent_, System.Windows.Input.MouseButtonEventArgs e) { var p = e.GetPosition(parent_._parent.Canvas); var relP = e.GetPosition(parent_); _start = PlacementHelper.RoundToGrid(p); _ui = parent_; _origialRect = _ui.Bounds; _originalUiPos = _ui._adorner.Bounds; //List<LineGeometry> lgs = new List<LineGeometry> //{ // new LineGeometry( _origialRect.TopLeft, _origialRect.TopRight ), // new LineGeometry( _origialRect.TopRight, _origialRect.BottomRight), // new LineGeometry( _origialRect.BottomRight, _origialRect.BottomLeft), // new LineGeometry( _origialRect.BottomLeft, _origialRect.TopLeft) //}; //foreach( var l in lgs) //{ // l.Transform = _ui.DefiningGeometry.Transform; //} //int direction = 0; //for (int i = 0; i < lgs.Count; ++i) //{ // if (lgs[i].StrokeContains(_pen, p)) // { // direction |= (1 << i); // } //} _ui.TriggerSnapshot(); _ui._adorner.SetActive(true); //_direction = (RelativePosition)direction;// _ui._myShadow.HitShadowBorder(_start); _direction = _ui._adorner.HitShadowBorder(relP); _ui.MouseUp += HandleMouseUp; _ui.MouseMove += HandleMouseMove; _ui.CaptureMouse(); if (_direction == RelativePosition.Undefined) { StopOperation(false); } }
protected override void OnMouseDown(System.Windows.Input.MouseButtonEventArgs e) { _parent.Canvas.Focus(); if (_currentOperationHandler != null) { //_currentOperationHandler.OnMouseDown(e); return; } else { e.Handled = true; // only react on left button if (e.LeftButton == MouseButtonState.Pressed && e.RightButton == MouseButtonState.Released) { Point p = PlacementHelper.RoundToGrid(e.GetPosition(this._parent.Canvas)); var hitResult = _adorner.HitShadowBorder(p); SetMouseCursor(hitResult); // toggle on mouse press if (Keyboard.Modifiers.HasFlag(ModifierKeys.Control)) { IsMarked = !IsMarked; } else { if (hitResult == _mouseMoveHitResult) { if (_mouseMoveHitResult != RelativePosition.Undefined && _model.CanChangeSize) { RegisterHandler(new ChangeSizeOperation(this, e)); } else { RegisterHandler(new MoveOperation(this, p)); } } IsSelected = true; } } } }
public static Point ComputePoint(Rect r, ConnectorDocking docking, double relativePosition) { switch (docking) { case ConnectorDocking.Top: return(new Point(PlacementHelper.RoundToGrid(r.Left + relativePosition * r.Width), r.Top - 1)); case ConnectorDocking.Right: return(new Point(r.Right + 1, PlacementHelper.RoundToGrid(r.Top + relativePosition * r.Height))); case ConnectorDocking.Bottom: return(new Point(PlacementHelper.RoundToGrid(r.Left + relativePosition * r.Width), r.Bottom + 1)); case ConnectorDocking.Left: return(new Point(r.Left - 1, PlacementHelper.RoundToGrid(r.Top + relativePosition * r.Height))); default: return(new Point(PlacementHelper.RoundToGrid(r.Left + relativePosition * r.Width), r.Top)); } }
public static ConnectorDocking ComputeDocking(Rect r, double relativePosition, ref Point p) { if (p.Y == r.Top || p.Y == r.Bottom) { p.X = PlacementHelper.RoundToGrid(r.Left + relativePosition * r.Width); if (p.Y == r.Bottom) { return(ConnectorDocking.Bottom); } return(ConnectorDocking.Top); } if (p.X == r.Left || p.X == r.Right) { p.Y = PlacementHelper.RoundToGrid(r.Top + relativePosition * r.Height); if (p.X == r.Right) { return(ConnectorDocking.Right); } return(ConnectorDocking.Left); } throw new InvalidOperationException("point is not on the border of rectangle"); }
void HandleMouseDown(object sender, MouseButtonEventArgs e) { _pad.Canvas.Focus(); var p = e.GetPosition(_pad.Canvas); p = PlacementHelper.RoundToGrid(p); var factory = _pad.ItemFactory; if (factory.SelectedForCreation != null && factory.SelectedForCreation.GetInterface( nameof(IBoundedSketchItemModel)) != null) { var cm = factory.CreateConnectableSketchItem(factory.SelectedForCreation, p, _pad); if (cm != null) { _pad.TakeSnapshot(); _pad.SketchItems.Add(cm); } //_pad.UpdateLayout(); e.Handled = true; } }
Transform ComputeResizeTransformation(Point p) { p = PlacementHelper.RoundToGrid(p); var rect = _origialRect; var rot = _ui._model.Geometry.Transform as RotateTransform; var angle = 0.0; if (rot != null) { angle = rot.Angle; } switch (_direction) { case RelativePosition.N: { var delta = _start - p; //var len = delta.Length; //angle = Vector.AngleBetween(delta, _horizontalLine)-angle; //var deltaY = Math.Sin(angle) * len; var scaleY = (delta.Y + _origialRect.Height) / _origialRect.Height; //var scaleY = ( deltaY + _origialRect.Height) / _origialRect.Height; var sf = new ScaleTransform(1, scaleY); rect.Transform(sf.Value); var transY = _origialRect.Top - rect.Top - delta.Y; //var transY = _origialRect.Top - rect.Top - deltaY; var tg = new TransformGroup(); tg.Children.Add(sf); tg.Children.Add(new TranslateTransform(0, -delta.Y)); return(tg); } case RelativePosition.NE: { var delta = _start - p; var scaleY = (delta.Y + _origialRect.Height) / _origialRect.Height; var scaleX = (-delta.X + _origialRect.Width) / _origialRect.Width; var sf = new ScaleTransform(scaleX, scaleY); rect.Transform(sf.Value); var trans = _origialRect.TopLeft - rect.TopLeft; var tg = new TransformGroup(); tg.Children.Add(sf); tg.Children.Add(new TranslateTransform(0, -delta.Y)); return(tg); } case RelativePosition.E: { var delta = p - _start; var scaleX = (delta.X + _origialRect.Width) / _origialRect.Width; var sf = new ScaleTransform(scaleX, 1); //rect.Transform(sf.Value); //var trans = _origialRect.TopLeft - rect.TopLeft; var tg = new TransformGroup(); tg.Children.Add(sf); //tg.Children.Add(new TranslateTransform(trans.X, 0)); return(tg); } case RelativePosition.SE: { var delta = p - _start; var scaleY = (delta.Y + _origialRect.Height) / _origialRect.Height; var scaleX = (delta.X + _origialRect.Width) / _origialRect.Width; var sf = new ScaleTransform(scaleX, scaleY); //rect.Transform(sf.Value); //var trans = _origialRect.TopLeft - rect.TopLeft; var tg = new TransformGroup(); tg.Children.Add(sf); //tg.Children.Add(new TranslateTransform(trans.X, trans.Y)); return(tg); } case RelativePosition.S: { var delta = p - _start; var scaleY = (delta.Y + _origialRect.Height) / _origialRect.Height; var sf = new ScaleTransform(1, scaleY); //rect.Transform(sf.Value); //var trans = _origialRect.TopLeft - rect.TopLeft; var tg = new TransformGroup(); tg.Children.Add(sf); //tg.Children.Add(new TranslateTransform(0, trans.Y)); return(tg); } case RelativePosition.SW: { var delta = p - _start; var scaleY = (delta.Y + _origialRect.Height) / _origialRect.Height; var scaleX = (-delta.X + _origialRect.Width) / _origialRect.Width; var sf = new ScaleTransform(scaleX, scaleY); //rect.Transform(sf.Value); //var trans = _origialRect.TopLeft - rect.TopLeft; var tg = new TransformGroup(); tg.Children.Add(sf); tg.Children.Add(new TranslateTransform(delta.X, 0)); return(tg); } case RelativePosition.W: { var delta = p - _start; var scaleX = (-delta.X + _origialRect.Width) / _origialRect.Width; var sf = new ScaleTransform(scaleX, 1); //rect.Transform(sf.Value); //var trans = _origialRect.TopLeft - rect.TopLeft; var tg = new TransformGroup(); tg.Children.Add(sf); tg.Children.Add(new TranslateTransform(delta.X, 0)); return(tg); } case RelativePosition.NW: { var delta = p - _start; var scaleY = (-delta.Y + _origialRect.Height) / _origialRect.Height; var scaleX = (-delta.X + _origialRect.Width) / _origialRect.Width; var sf = new ScaleTransform(scaleX, scaleY); rect.Transform(sf.Value); //var trans = _origialRect.TopLeft - rect.TopLeft; var tg = new TransformGroup(); tg.Children.Add(sf); tg.Children.Add(new TranslateTransform(delta.X, delta.Y)); return(tg); } default: return(null); } //return null; }
void HandleMouseDown(object sender, MouseButtonEventArgs e) { e.Handled = true; Point moveDown = e.GetPosition(_pad.Canvas); var factory = _pad.ItemFactory; ISketchItemUI sketchItemUI = _pad.GetItemAtPoint(moveDown); if (sketchItemUI != null) { Point endPointHint = PlacementHelper.RoundToGrid(moveDown);// e.GetPosition(sketchItemUI.Shape); if (sketchItemUI.Model is ConnectableBase) { var to = sketchItemUI.Model as ConnectableBase; var connectorModel = factory.CreateConnector( factory.SelectedForCreation, _from, to, _selector.Start , endPointHint, _pad); _pad.SketchItems.Add(connectorModel); } _pad.EndEdit(); } else { _pad.Canvas.ContextMenu = new ContextMenu(); var selectedForCreation = factory.SelectedForCreation; var factoryList = factory.GetConnectableFactories( selectedForCreation ).OrderByDescending((x) => x.LastCalled); foreach (var fac in factoryList) { _pad.Canvas.ContextMenu.Items.Add(new MenuItem() { Icon = new BitmapImage { ImageBitmap = fac.Bitmap }, Header = new Label() { Content = fac.Name }, ToolTip = fac.ToolTip, Command = new DelegateCommand(() => { double dx = 0; double dy = 0; var angle = Vector.AngleBetween(new Vector(1, 0), new Vector(_selector.Start.X - moveDown.X, _selector.Start.Y - moveDown.Y)); if (angle < 0) { angle += 360.0; } var connectable = fac.CreateConnectableItem(moveDown, _pad); if (angle >= 0 && angle < 45) { dy = -GetDefaultHeight(connectable) / 2; dx = -GetDefaultWidth(connectable); } else if (angle >= 45 && angle < 135) { dx = -GetDefaultWidth(connectable) / 2; dy = -GetDefaultHeight(connectable); } else if (angle >= 135 && angle < 225) { dy = -GetDefaultHeight(connectable) / 2; } else { dx = -GetDefaultWidth(connectable) / 2; } connectable.Move(new TranslateTransform(dx, dy)); if (connectable != null) { _pad.SketchItems.Add(connectable); var connector = factory.CreateConnector( selectedForCreation, _from, connectable , _selector.Start , moveDown, _pad); _pad.SketchItems.Add(connector); _pad.EndEdit(); } }) } ); } _pad.Canvas.ContextMenu.IsOpen = true; } }