TryCalculateGraphMetrics
(
IGraph graph,
CalculateGraphMetricsContext calculateGraphMetricsContext,
Algorithms.OneDoubleGraphMetricCalculatorBase
oneDoubleGraphMetricCalculator,
GraphMetrics graphMetric,
String columnName,
Double columnWidthChars,
String style,
out GraphMetricColumn [] graphMetricColumns
)
{
Debug.Assert(graph != null);
Debug.Assert(calculateGraphMetricsContext != null);
Debug.Assert(oneDoubleGraphMetricCalculator != null);
Debug.Assert( !String.IsNullOrEmpty(columnName) );
Debug.Assert(columnWidthChars == ExcelTableUtil.AutoColumnWidth ||
columnWidthChars > 0);
AssertValid();
graphMetricColumns = new GraphMetricColumn[0];
if ( !calculateGraphMetricsContext.ShouldCalculateGraphMetrics(
graphMetric) )
{
return (true);
}
// Calculate the graph metrics for each vertex using the
// OneDoubleGraphMetricCalculatorBase object, which knows nothing about
// Excel.
Dictionary<Int32, Double> oGraphMetrics;
if ( !oneDoubleGraphMetricCalculator.TryCalculateGraphMetrics(graph,
calculateGraphMetricsContext.BackgroundWorker, out oGraphMetrics) )
{
// The user cancelled.
return (false);
}
// Transfer the graph metrics to an array of GraphMetricValue objects.
List<GraphMetricValueWithID> oGraphMetricValues =
new List<GraphMetricValueWithID>();
foreach (IVertex oVertex in graph.Vertices)
{
// Try to get the row ID stored in the worksheet.
Int32 iRowID;
if ( TryGetRowID(oVertex, out iRowID) )
{
oGraphMetricValues.Add( new GraphMetricValueWithID(
iRowID, oGraphMetrics[oVertex.ID] ) );
}
}
graphMetricColumns = new GraphMetricColumn [] {
new GraphMetricColumnWithID( WorksheetNames.Vertices,
TableNames.Vertices, columnName, columnWidthChars,
NumericFormat, style, oGraphMetricValues.ToArray()
) };
return (true);
}