示例#1
0
        /// <summary>
        /// Get contact points defined for given item
        /// <remarks>Note that because of simple getting contact points we store them as first four</remarks>.
        /// </summary>
        /// <param name="item">Item which points are generated.</param>
        /// <returns>Generated points.</returns>
        private IEnumerable <GraphPoint> generatePoints(DiagramItem item)
        {
            var span     = SceneNavigator.GetSpan(item, item.GlobalPosition);
            var topLeft  = new GraphPoint(span.TopLeft, TopLeftCorner, item);
            var topRight = new GraphPoint(span.TopRight, TopRightCorner, item);

            var bottomLeft  = new GraphPoint(span.BottomLeft, BottomLeftCorner, item);
            var bottomRight = new GraphPoint(span.BottomRight, BottomRightCorner, item);

            topLeft.SetEdgeStatus(topRight);
            topLeft.SetEdgeStatus(bottomLeft);

            bottomRight.SetEdgeStatus(topRight);
            bottomRight.SetEdgeStatus(bottomLeft);

            var points = new List <GraphPoint>();

            points.Add(topLeft);
            points.Add(topRight);
            points.Add(bottomLeft);
            points.Add(bottomRight);

            generateConnectorPoints(item.TopConnectorDrawings, ConnectorAlign.Top, item, points);
            generateConnectorPoints(item.LeftConnectorDrawings, ConnectorAlign.Left, item, points);
            generateConnectorPoints(item.BottomConnectorDrawings, ConnectorAlign.Bottom, item, points);
            generateConnectorPoints(item.RightConnectorDrawings, ConnectorAlign.Right, item, points);

            return(points);
        }
        /// <summary>
        /// Compute possibilities of movedItem to move without overlapping any other item
        /// </summary>
        /// <param name="movedItem">Item which possibilities are created</param>
        /// <returns>Computed possibilities</returns>
        private ItemMoveability computePossibilities(DiagramItem movedItem)
        {
            if (movedItem.IsRootItem)
            {
                return(new ItemMoveability(double.PositiveInfinity, double.PositiveInfinity, double.PositiveInfinity, double.PositiveInfinity));
            }

            var container = movedItem.ContainingDiagramCanvas;

            //we have to check possibilities relative to parent!
            //so using relative position is necessary
            var currentPosition      = getPosition(movedItem);
            var currentLocalPosition = movedItem.AsLocalPosition(currentPosition);
            var span = SceneNavigator.GetSpan(movedItem, currentLocalPosition);

            var contMargin  = container.Margin;
            var upPossib    = span.Top;
            var downPossib  = container.DesiredSize.Height - span.Bottom - contMargin.Bottom - contMargin.Top;
            var rightPossib = container.DesiredSize.Width - span.Right - contMargin.Right - contMargin.Left;
            var leftPossib  = span.Left;

            return(new ItemMoveability(
                       upPossib,
                       downPossib,
                       leftPossib,
                       rightPossib
                       ));
        }
        internal void Arrange(IEnumerable <DiagramItem> arrangedItems)
        {
            //TODO use zGroups on container
            var sortedItems = arrangedItems.OrderBy((item) => DiagramCanvasBase.GetZIndex(item));

            _navigator = new SceneNavigator();

            foreach (var item in sortedItems)
            {
                var collidingItems = _navigator.GetItemsInCollision(item).ToArray();

                foreach (var colidingItem in collidingItems)
                {
                    //move colliding items
                    moveCollidingItem(item, colidingItem);
                }
                _navigator.AddItem(item);
            }
        }
示例#4
0
 /// <summary>
 /// Initializes a new instance of the <see cref="JoinGraph"/> class.
 /// </summary>
 /// <param name="navigator">The navigator.</param>
 internal JoinGraph(SceneNavigator navigator)
 {
     _navigator = navigator;
 }
示例#5
0
 private Rect getLocalSpan(DiagramItem item)
 {
     return(SceneNavigator.GetSpan(item, item.LocalPosition));
 }