Example #1
0
        void CheckLineConfiguration(IWaypoint from, IWaypoint to)
        {
            var startPoint = ConnectorUtilities.ComputePoint(from.Bounds, from.OutgoingDocking, from.OutgoingRelativePosition);
            var endPoint   = ConnectorUtilities.ComputePoint(to.Bounds, to.IncomingDocking, to.IncomingRelativePosition);
            var pos        = ConnectorUtilities.ComputeRelativePositionOfPoints(startPoint, endPoint);

            LineType lineType = (LineType)((int)from.OutgoingDocking << 8 | (int)to.IncomingDocking);

            if (AllowedRelativePositions.Table.TryGetValue(lineType, out SortedSet <RelativePosition> possibleConfigurations))
            {
                if (!possibleConfigurations.Contains(pos))
                {
                    if (_model.CanMoveStart)
                    {
                        from.OutgoingDocking = ConnectorDocking.Undefined;
                    }
                    if (_model.CanMoveEnd)
                    {
                        to.IncomingDocking = ConnectorDocking.Undefined;
                    }
                }
            }
            else
            {
                if (_model.CanMoveStart)
                {
                    from.OutgoingDocking = ConnectorDocking.Undefined;
                }
                if (_model.CanMoveEnd)
                {
                    to.IncomingDocking = ConnectorDocking.Undefined;
                }
            }
        }