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++; } }
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); }
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); }
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)); }
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()); }
public RelativeLayoutCalculatorBuilder() { RelativeLayoutCalculator = new RelativeLayoutCalculator(); }