/// <summary> /// Removes node overlap occurring in the input graph /// </summary> /// <param name="graph">GraphMapData</param> public static void FSAOverlapRemoval(GraphMapData graph) { ICollection <NodeMapData> nodes = graph.GetNodes(); IDictionary <string, Rect> rectangles = new Dictionary <string, Rect>(nodes.Count); foreach (NodeMapData node in nodes) { Point location = new Point(node.Position.X, node.Position.Y); Rect rect = new Rect(location, node.Dimension); rectangles[node.Id] = rect; } OverlapRemovalParameters overlapRemovalParameters = new OverlapRemovalParameters() { HorizontalGap = 0F, VerticalGap = 0F }; FSAAlgorithm <string> overlapRemoval = new FSAAlgorithm <string>(rectangles, overlapRemovalParameters); overlapRemoval.Compute(); foreach (NodeMapData node in nodes) { Rect rect = overlapRemoval.Rectangles[node.Id]; Point pos = new Point(rect.X, rect.Y); node.Position = pos; } }
private object RemoveOverlaps2() { OverlapRemovalParameters params2 = new OverlapRemovalParameters(); params2.HorizontalGap = 40; params2.VerticalGap = 40; var vertexRectangles = new Dictionary <string, Rectangle>(); for (int i = 0; i < vertexLabels.Length; ++i) { var vertex = vertexPositions[vertexLabels[i]]; var border = vertexBorders[vertexLabels[i]]; var rect = new Rectangle(); rect.Width = border.Right - border.Left; rect.Height = border.Bottom - border.Top; vertexRectangles.Add(vertexLabels[i], rect); } FSAAlgorithm <string> algo2; algo2 = new FSAAlgorithm <string>(null, params2); algo2.Compute(); return(null); }
/// <summary> /// Removes node overlap occurring in the input graph /// </summary> /// <param name="graph">GraphMapData</param> public static void FSAOverlapRemoval(GraphMapData graph) { ICollection<NodeMapData> nodes = graph.GetNodes(); IDictionary<string, Rect> rectangles = new Dictionary<string, Rect>(nodes.Count); foreach (NodeMapData node in nodes) { Point location = new Point(node.Position.X, node.Position.Y); Rect rect = new Rect(location, node.Dimension); rectangles[node.Id] = rect; } OverlapRemovalParameters overlapRemovalParameters = new OverlapRemovalParameters() { HorizontalGap = 0F, VerticalGap = 0F }; FSAAlgorithm<string> overlapRemoval = new FSAAlgorithm<string>(rectangles, overlapRemovalParameters); overlapRemoval.Compute(); foreach (NodeMapData node in nodes) { Rect rect = overlapRemoval.Rectangles[node.Id]; Point pos = new Point(rect.X, rect.Y); node.Position = pos; } }
private void RunFSA(CancellationToken cancellationToken) { OverlapRemovalParameters parameters = new OverlapRemovalParameters { HorizontalGap = 20, VerticalGap = 30 }; var oneWayFSA = new FSAAlgorithm <ElementVertex>(Rectangles, parameters); oneWayFSA.Compute(cancellationToken); Rectangles = oneWayFSA.Rectangles; }
public void Compute([NotNull] OverlapRemovalParameters parameters) { Dictionary <int, Rect> rectangles = GetRectangles(); Dictionary <int, Rect> initialRectangles = rectangles.ToDictionary( pair => pair.Key, pair => new Rect(pair.Value.Location, pair.Value.Size)); var algorithm = new FSAAlgorithm <int>(rectangles, parameters); algorithm.Compute(); foreach (KeyValuePair <int, Rect> pair in algorithm.Rectangles) { Rect initialRectangle = initialRectangles[pair.Key]; // Size must not change Assert.AreEqual(initialRectangle.Size, pair.Value.Size); // Fulfill minimum spacing AssertNoOverlap(Distinct(algorithm.Rectangles.Values)); foreach (KeyValuePair <int, Rect> innerPair in algorithm.Rectangles.Where(p => pair.Key != p.Key)) { if (NearEqual(pair.Value, innerPair.Value)) { continue; } if (Math.Abs(pair.Value.Location.X - innerPair.Value.Location.X) >= parameters.HorizontalGap) { continue; } if (Math.Abs(pair.Value.Location.Y - innerPair.Value.Location.Y) >= parameters.VerticalGap) { continue; } Assert.Fail("Minimum spacing not fulfilled."); } } }
private void ComputerOverlapRemoval() { //Overlap Param OverlapRemovalParameters orp = new OverlapRemovalParameters(); orp.VerticalGap = 2; orp.HorizontalGap = 2; //Get Rect for Each Vertex Dictionary<FlockVertex, Rect> rectangles = new Dictionary<FlockVertex, Rect>(); for (int i = 0; i < directed.VertexCount; i++) { FlockVertex v = directed.Vertices.ElementAt(i); rectangles.Add(v, v.FlockRect); } try { FSAAlgorithm<FlockVertex> ora = new FSAAlgorithm<FlockVertex>(rectangles, orp); ora.Compute(); //Update New Rect Postions for (int i = 0; i < ora.Rectangles.Count; i++) { FlockVertex v = directed.Vertices.ElementAt(i); v.FlockRect = ora.Rectangles.ElementAt(i).Value; v.FlockPoint = new Point(v.FlockRect.X, v.FlockRect.Y); } } catch (Exception ex) { Debug.WriteLine(string.Format("Error at Overlap: {0}. {1}", ex.Message, ex.StackTrace)); } }