Example #1
0
 public DecoratorModel(ConnectorDocking side, ulong id)
 {
     _side = side;
     _id   = id;
 }
Example #2
0
 public static double ComputeAngle(ConnectorDocking _1, Vector ending)
 {
     return(Vector.AngleBetween(HorizontalVector, ending));
 }
Example #3
0
        public override Point GetConnectorPoint(ConnectorDocking docking, double relativePosition, ulong connectorPort)
        {
            double y = Bounds.Height * relativePosition + Bounds.Top;

            return(new Point(Bounds.Left + Bounds.Width / 2, y));
        }
Example #4
0
        protected override Point GetConnectorPositionInfo(Point hint, out double relativePos, out ConnectorDocking docking, out ulong port)
        {
            port = 0;
            var   lifeLineX = Bounds.X + Bounds.Width / 2;
            Point p         = new Point(lifeLineX, hint.Y);

            docking     = ConnectorDocking.Right;
            relativePos = (p.Y - Bounds.Y) / Bounds.Height;
            if (hint.X < lifeLineX)
            {
                docking = ConnectorDocking.Left;
            }
            return(p);
        }
            public MoveConnectorOperation(ConnectorUI ui, Point p)
            {
                _ui              = ui;
                _model           = ui._model;
                _startPoint      = p;
                _p0              = p;
                _moveHelper      = _model.StartMove(p);
                _newMoveDistance = _moveHelper.Distance;
                _movePointStart  = _moveHelper.StartPoint;
                var from = _moveHelper.StartingFrom;
                var to   = _moveHelper.EndingAt;

                _fromGeometry = new RectangleGeometry(from.Bounds);

                _toGeometry = new RectangleGeometry(to.Bounds);

                if (Keyboard.IsKeyDown(Key.LeftShift))
                {
                    if (TryAdjustConnectorLine())
                    {
                        //_moveHelper.Commit()
                    }
                    StopOperation(false);
                }
                else
                {
                    var initialGeometry = _moveHelper.GetGeometry(_gg, _moveHelper.LineType,
                                                                  _movePointStart, _moveHelper.EndPoint, _moveHelper.Distance);

                    _visualizer = new ConnectorMoveVisualizer(initialGeometry); //tbd
                                                                                //_visualizer.MouseMove += HandleMouseMove;
                    _isSelfTransition = _model.From == _model.To;
                    if (_moveHelper.MoveType == MoveType.MoveStartPoint && _model.CanMoveStart)
                    {
                        _mouseMove = MoveStartPoint;
                        //_allowableDockings = from.AllowableDockings(false);
                        _movingPointDocking = from.GetConnectorDocking(_moveHelper.StartPoint, false);
                        _otherPointDocking  = to.GetConnectorDocking(_moveHelper.EndPoint, true);
                        _otherPointPosition = _moveHelper.EndPoint;
                    }
                    else if (_moveHelper.MoveType == MoveType.MoveEndPoint && _model.CanMoveEnd)
                    {
                        //_allowableDockings = to.AllowableDockings(true);
                        _mouseMove          = MoveEndPoint;
                        _movingPointDocking = to.GetConnectorDocking(_moveHelper.EndPoint, true);
                        _otherPointDocking  = from.GetConnectorDocking(_moveHelper.StartPoint, false);
                        _otherPointPosition = _moveHelper.StartPoint;
                        _movePointStart     = _moveHelper.EndPoint;
                    }
                    else if (_moveHelper.MoveType == MoveType.MoveMiddlePoint)
                    {
                        _mouseMove = MoveMiddlePoint;
                    }
                    else
                    {
                        StopOperation(false);
                        return;
                    }
                    _initialOtherPointDocking = _otherPointDocking;
                    _ui.TriggerSnapshot();
                    _ui.MouseMove += HandleMouseMove;
                    _ui.MouseUp   += HandleMouseUp;
                    _ui.CaptureMouse();
                    _ui._parent.Canvas.Children.Add(_visualizer);
                }
            }
            Point ProbeOtherPosition(Point start, Point end, ConnectorDocking movingDocking, Rect bounds, ref double relativePosition, ref ConnectorDocking docking)
            {
                _moveEndingSuccessful = false;
                var   probings = InitProbings(movingDocking, _initialOtherPointDocking);
                bool  changeOtherPointDocking = false;
                var   tmpDocking = docking;
                Point tmpPos     = end;

                foreach (var d in probings) // pobe the different dockings!
                {
                    tmpDocking = d;
                    LineType lt = _moveHelper.LineType;
                    if (_isSelfTransition)
                    {
                        tmpDocking = movingDocking;
                        lt         = (LineType)((int)ConnectorDocking.Self << 8 | (int)movingDocking);
                    }
                    else
                    {
                        lt = (LineType)((int)tmpDocking << 8 | (int)movingDocking);
                    }
                    tmpPos = ConnectorUtilities.ComputePoint(bounds, tmpDocking, relativePosition);
                    GeometryGroup tmpGeomtery = new GeometryGroup();
                    var           geometry    = _moveHelper.GetGeometry(tmpGeomtery, lt, tmpPos, start, _moveHelper.Distance);

                    if ((_fromGeometry.FillContainsWithDetail(geometry) == IntersectionDetail.Empty &&
                         _toGeometry.FillContainsWithDetail(geometry) == IntersectionDetail.Empty))
                    {
                        changeOtherPointDocking = tmpDocking != docking;
                        _gg.Children.Clear();
                        foreach (var g in tmpGeomtery.Children)
                        {
                            _gg.Children.Add(g);
                        }
                        _moveEndingSuccessful = true;
                        break;
                    }

                    //System.Diagnostics.Trace.WriteLine("probe another setting");
                }
                if (changeOtherPointDocking)
                {
                    docking = tmpDocking;
                    end     = tmpPos;
                }
                return(end);
            }
            IEnumerable <ConnectorDocking> InitProbings(ConnectorDocking movePointDocking, ConnectorDocking otherPointDocking)
            {
                List <ConnectorDocking> probings = new List <ConnectorDocking>();

                if (!_probingOrderDict.TryGetValue(movePointDocking, out List <ConnectorDocking> defaultOrder))
                {
                    throw new NotSupportedException(string.Format("no probing order defined for {0}", movePointDocking));
                }
                probings.AddRange(defaultOrder);
                probings.Remove(otherPointDocking);
                probings.Insert(0, otherPointDocking);
                return(probings);
            }