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);
                }
            }
Example #4
0
 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;
             }
         }
     }
 }
Example #5
0
        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));
            }
        }
Example #6
0
        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");
        }
Example #7
0
        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;
            }
Example #9
0
        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;
            }
        }