コード例 #1
0
        /// <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;
            }
        }
コード例 #2
0
        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);
        }
コード例 #3
0
ファイル: GraphSharpUtility.cs プロジェクト: senfo/snaglV2
        /// <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;
            }
        }
コード例 #4
0
        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;
        }
コード例 #5
0
        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.");
                }
            }
        }
コード例 #6
0
        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));
            }
        }