Пример #1
0
        private void ExpandOrCollapse(View master, Action <View, Rectangle, double> move)
        {
            int counter    = 0;
            var startAngel = StartAngel;
            var interval   = Interval;

            foreach (var child in Children.Skip(1))
            {
                if (IsExpanded)
                {
                    var angle = startAngel + counter * interval;

                    move(
                        child,
                        RelativeLayoutCalculator.GetRelativePositionByRadian(
                            master,
                            WidthRequest * 2.0,
                            angle),
                        0.8);
                }
                else
                {
                    move(child, master.Bounds, 0.0);
                }

                counter++;
            }
        }
Пример #2
0
 public IncrementalLayoutEngine()
 {
     _diagramNodeToLayoutVertexMap    = new Map <IDiagramNode, DiagramNodeLayoutVertex>();
     _diagramConnectorToLayoutPathMap = new Map <IDiagramConnector, LayoutPath>();
     _layoutPathToPreviousRouteMap    = new Map <LayoutPath, Route>();
     _previousVertexCenters           = new LayoutVertexToPointMap();
     _relativeLayoutCalculator        = new RelativeLayoutCalculator();
     _diagramActionDispatcherVisitor  = new DiagramActionDispatcherVisitor(this);
 }
Пример #3
0
 public IncrementalLayoutCalculator(ILayoutPriorityProvider layoutPriorityProvider)
 {
     _layoutPriorityProvider          = layoutPriorityProvider ?? throw new ArgumentNullException(nameof(layoutPriorityProvider));
     _diagramNodeToLayoutVertexMap    = new Map <IDiagramNode, DiagramNodeLayoutVertex>(new DiagramNodeIdEqualityComparer());
     _diagramConnectorToLayoutPathMap = new Map <IDiagramConnector, LayoutPath>(new DiagramConnectorIdEqualityComparer());
     _layoutPathToPreviousRouteMap    = new Map <LayoutPath, Route>();
     _previousVertexCenters           = new LayoutVertexToPointMap();
     _relativeLayoutCalculator        = new RelativeLayoutCalculator();
     _diagramActionDispatcherVisitor  = new DiagramActionDispatcherVisitor(this);
 }
Пример #4
0
        private static Rectangle GetBoundByRadian(View dependency, View master)
        {
            var widthFactor  = GetWidthFactor(dependency);
            var heightFactor = GetHeightFactor(dependency);

            var r      = GetR(dependency);
            var degree = GetDegree(dependency);

            return(RelativeLayoutCalculator.GetRelativePositionByRadian(
                       master,
                       r,
                       degree,
                       widthFactor,
                       heightFactor));
        }
Пример #5
0
        public IDictionary <ModelNodeId, Rect2D> Calculate(IEnumerable <IDiagramNode> nodes, IEnumerable <IDiagramConnector> connectors)
        {
            var diagramNodeToLayoutVertexMap    = new Map <ModelNodeId, DiagramNodeLayoutVertex>();
            var diagramConnectorToLayoutPathMap = new Map <ModelRelationshipId, LayoutPath>();

            var layoutVertices = nodes.Select(i => CreateLayoutVertex(i, diagramNodeToLayoutVertexMap)).OrderBy(i => i.DiagramNode.AddedAt).ThenBy(i => i.Name)
                                 .ToList();
            var layoutPaths = connectors.Select(i => CreateLayoutPath(i, diagramNodeToLayoutVertexMap, diagramConnectorToLayoutPathMap)).ToList();

            var relativeLayout         = RelativeLayoutCalculator.Calculate(layoutVertices, layoutPaths);
            var layoutVertexToPointMap = AbsolutePositionCalculator.GetVertexCenters(relativeLayout, HorizontalGap, VerticalGap);

            return(diagramNodeToLayoutVertexMap.ToDictionary(
                       i => i.Key,
                       i => Rect2D.CreateFromCenterAndSize(layoutVertexToPointMap.Get(i.Value), i.Value.Size)));
        }
        public LayoutInfo Calculate(ILayoutGroup layoutGroup)
        {
            var diagramNodeToLayoutVertexMap    = new Map <ModelNodeId, DiagramNodeLayoutVertex>();
            var diagramConnectorToLayoutPathMap = new Map <ModelRelationshipId, LayoutPath>();

            var layoutVertices = layoutGroup.Nodes
                                 .Select(i => CreateLayoutVertex(i, diagramNodeToLayoutVertexMap))
                                 .OrderBy(i => i.DiagramNode.AddedAt)
                                 .ThenBy(i => i.Name)
                                 .ToList();

            var layoutPaths = layoutGroup.Connectors
                              .Select(i => CreateLayoutPath(i, diagramNodeToLayoutVertexMap, diagramConnectorToLayoutPathMap))
                              .ToList();

            var relativeLayout = RelativeLayoutCalculator.Calculate(layoutVertices, layoutPaths);

            return(new AbsolutePositionCalculator(relativeLayout, HorizontalGap, VerticalGap).CalculateLayout());
        }
Пример #7
0
 public RelativeLayoutCalculatorBuilder()
 {
     RelativeLayoutCalculator = new RelativeLayoutCalculator();
 }