Esempio n. 1
0
        void HandleMouseDown(object sender, MouseButtonEventArgs e)
        {
            e.Handled = true;

            var inputElem = _pad.GetItemAtPoint(e.GetPosition(_pad.Canvas)) as ISketchItemUI;

            if (inputElem != null)
            {
                if (inputElem.Model is ConnectableBase)
                {
                    var ending2 = inputElem.Model as ConnectableBase;
                    if (_connector.To == null)
                    {
                        _connector.To = ending2;
                    }
                    else
                    {
                        _connector.From = ending2;
                    }
                }
                _pad.EndEdit();
            }
        }
Esempio n. 2
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;
            }
        }