Smrf.NodeXL.ExcelTemplate.MatrixWorkbookImporter.ReadEdges C# (CSharp) Method

ReadEdges() protected method

protected ReadEdges ( Microsoft oSourceWorksheet, Int32 iFirstEdgeWeightRowOneBased, Int32 iFirstEdgeWeightColumnOneBased, IGraph oGraph, IVertex aoOrderedVertices ) : void
oSourceWorksheet Microsoft
iFirstEdgeWeightRowOneBased System.Int32
iFirstEdgeWeightColumnOneBased System.Int32
oGraph IGraph
aoOrderedVertices IVertex
return void
    ReadEdges
    (
        Microsoft.Office.Interop.Excel.Worksheet oSourceWorksheet,
        Int32 iFirstEdgeWeightRowOneBased,
        Int32 iFirstEdgeWeightColumnOneBased,
        IGraph oGraph,
        IVertex [] aoOrderedVertices
    )
    {
        Debug.Assert(oSourceWorksheet != null);
        Debug.Assert(iFirstEdgeWeightRowOneBased >= 1);
        Debug.Assert(iFirstEdgeWeightColumnOneBased >= 1);
        Debug.Assert(oGraph != null);
        Debug.Assert(aoOrderedVertices != null);
        Debug.Assert(oGraph.Vertices.Count == aoOrderedVertices.Length);

        Boolean bGraphIsDirected =
            (oGraph.Directedness == GraphDirectedness.Directed);

        Int32 iVertices = aoOrderedVertices.Length;
        IEdgeCollection oEdges = oGraph.Edges;

        for (Int32 i = 0; i < iVertices; i++)
        {
            Int32 iRowOneBased = iFirstEdgeWeightRowOneBased + i;

            Object [,] oRowOfEdgeWeightValues = ExcelUtil.GetValuesInRow(
                oSourceWorksheet, iRowOneBased, iFirstEdgeWeightColumnOneBased,
                iVertices);

            // In a directed graph, look at the whole row.  In an undirected
            // graph, look only at the cell on the diagonal and the cells to
            // the right.

            for (Int32 j = (bGraphIsDirected ? 0 : i); j < iVertices; j++)
            {
                Double dEdgeWeight = 0;
                Int32 iColumnOneBased = iFirstEdgeWeightColumnOneBased + j;

                if ( !ExcelUtil.TryGetDoubleFromCell(oRowOfEdgeWeightValues, 1,
                        j + 1, out dEdgeWeight) )
                {
                    OnInvalidSourceWorkbook( String.Format(

                        "The edge weight in {0} must be a number."
                        ,
                        ExcelUtil.GetCellAddress(oSourceWorksheet,
                            iRowOneBased, iColumnOneBased)
                        ),
                        oSourceWorksheet, iRowOneBased, iColumnOneBased
                        );
                }

                if (dEdgeWeight != 0)
                {
                    IEdge oEdge = oEdges.Add(aoOrderedVertices[i],
                        aoOrderedVertices[j], bGraphIsDirected);

                    oEdge.SetValue(ReservedMetadataKeys.EdgeWeight,
                        dEdgeWeight);
                }
            }
        }
    }