TryCalculateGraphMetrics
(
IGraph graph,
CalculateGraphMetricsContext calculateGraphMetricsContext,
out GraphMetricColumn [] graphMetricColumns
)
{
Debug.Assert(graph != null);
Debug.Assert(calculateGraphMetricsContext != null);
AssertValid();
graphMetricColumns = new GraphMetricColumn[0];
// Attempt to retrieve the group information the WorkbookReader object
// may have stored as metadata on the graph.
GroupInfo [] aoGroups;
if (
!calculateGraphMetricsContext.ShouldCalculateGraphMetrics(
GraphMetrics.GroupMetrics)
||
!GroupUtil.TryGetGroups(graph, out aoGroups)
)
{
return (true);
}
// Count the edges using the IntergroupEdgeCalculator class in the
// Algorithms namespace, which knows nothing about Excel.
IList<IntergroupEdgeInfo> oIntergroupEdges;
if ( !(new Algorithms.IntergroupEdgeCalculator() ).
TryCalculateGraphMetrics(graph,
calculateGraphMetricsContext.BackgroundWorker, aoGroups, true,
out oIntergroupEdges) )
{
// The user cancelled.
return (false);
}
// Add a row to the group-edge table for each pair of groups that has
// edges.
graphMetricColumns = CreateGraphMetricColumns(
AddRows(aoGroups, oIntergroupEdges) );
return (true);
}