Example #1
0
        /// <summary>
        /// Converts <paramref name="graph"/> to an <see cref="Microsoft.Msagl.Drawing.Graph"/>.
        /// </summary>
        /// <typeparam name="TVertex">Vertex type.</typeparam>
        /// <typeparam name="TEdge">Edge type.</typeparam>
        /// <param name="graph">Graph to convert to MSAGL graph.</param>
        /// <param name="nodeAdded">Node added delegate.</param>
        /// <param name="edgeAdded">Edge added delegate.</param>
        /// <returns>MSAGL Graph.</returns>
        public static Graph ToMsaglGraph <TVertex, TEdge>(
            [NotNull] this IEdgeListGraph <TVertex, TEdge> graph,
            [CanBeNull] MsaglVertexNodeEventHandler <TVertex> nodeAdded  = null,
            [CanBeNull] MsaglEdgeEventHandler <TVertex, TEdge> edgeAdded = null)
            where TEdge : IEdge <TVertex>
        {
            MsaglGraphPopulator <TVertex, TEdge> populator = CreateMsaglPopulator(graph);

            try
            {
                if (nodeAdded != null)
                {
                    populator.NodeAdded += nodeAdded;
                }
                if (edgeAdded != null)
                {
                    populator.EdgeAdded += edgeAdded;
                }

                populator.Compute();
                return(populator.MsaglGraph);
            }
            finally
            {
                if (nodeAdded != null)
                {
                    populator.NodeAdded -= nodeAdded;
                }
                if (edgeAdded != null)
                {
                    populator.EdgeAdded -= edgeAdded;
                }
            }
        }
        protected virtual void OnEdgeAdded(MsaglEdgeEventArgs <TVertex, TEdge> e)
        {
            MsaglEdgeEventHandler <TVertex, TEdge> eh = this.EdgeAdded;

            if (eh != null)
            {
                eh(this, e);
            }
        }