示例#1
0
        private void toolStripMenuItem1_Click(object sender, EventArgs e)
        {
            int          count          = 0;
            int          count_newGraph = 0;
            StreamWriter sw1            = new StreamWriter("c:\\DisconnectedCount.txt", true);

            for (int run = 0; run < sFileNames.Length; run++)
            {
                m_Network = new clsAnaysisNetwork();

                m_Network.Load_Data_ForBreakModel(m_Network.orgNet, sFilePaths[run], true);

                string saveFilePath = txtSaveFolder.Text + @"\" + sFileNames[run];
                //Check Disconnected model
                int   CCs  = 0;
                int[] mark = null;
                m_Network.find_ConnectedComponents(m_Network.baseNet, ref CCs, ref mark); //We calculate on base net only.!!.


                sw1.WriteLine(sFileNames[run] + ";" + CCs);

                count++;
            }
            sw1.Close();
            MessageBox.Show(count.ToString(), "Number of total model");
        }
示例#2
0
        //Processing here
        private void mnuMakeNetwork_Click(object sender, EventArgs e)
        {
            int count          = 0;
            int count_newGraph = 0;

            for (int run = 0; run < sFileNames.Length; run++)
            {
                m_Network = new clsAnaysisNetwork();

                m_Network.Load_Data_ForBreakModel(m_Network.orgNet, sFilePaths[run], true);

                string saveFilePath = txtSaveFolder.Text + @"\" + sFileNames[run];
                //Check Disconnected model
                int   CCs  = 0;
                int[] mark = null;
                m_Network.find_ConnectedComponents(m_Network.baseNet, ref CCs, ref mark); //We calculate on base net only.!!.
                if (CCs > 1)                                                              //Split model and store it
                {
                    count++;
                    for (int CC = 1; CC <= CCs; CC++)
                    {
                        count_newGraph++;
                        saveFilePath = txtSaveFolder.Text + @"\" + sFileNames[run].Replace(".net", "") + @"_" + CC + @".net";

                        int[] nodeList  = new int[m_Network.Network[m_Network.orgNet].nNode];
                        int   nNodeList = 0;
                        //get node list
                        for (int j = 0; j < mark.Length; j++)
                        {
                            if (mark[j] == CC)
                            {
                                nodeList[nNodeList] = j;
                                nNodeList++;
                            }
                        }
                        //get edge list
                        clsAnaysisNetwork.strLink[] LinkList = new clsAnaysisNetwork.strLink[m_Network.Network[m_Network.orgNet].nLink];
                        int nLinkList = 0;
                        for (int j = 0; j < m_Network.Network[m_Network.orgNet].nLink; j++)
                        {
                            for (int k = 0; k < nNodeList; k++)
                            {
                                if (nodeList[k] == m_Network.Network[m_Network.orgNet].Link[j].fromNode)
                                {
                                    for (int m = 0; m < nNodeList; m++)
                                    {
                                        if (nodeList[m] == m_Network.Network[m_Network.orgNet].Link[j].toNode)
                                        {
                                            LinkList[nLinkList].fromNode = k;
                                            LinkList[nLinkList].toNode   = m;
                                            nLinkList++;
                                        }
                                    }
                                }
                            }
                        }
                        //Save temporary to file
                        Save_Network_1(m_Network.baseNet, nodeList, nNodeList, LinkList, nLinkList, saveFilePath, false, "ADD --- Original Network ---");
                        string[] tempLines = File.ReadAllLines(saveFilePath);

                        //Transfer to nodeList_S
                        string[] nodeList_S  = new string[m_Network.Network[m_Network.orgNet].nNode];
                        int      nNodeList_S = nNodeList;
                        for (int j = 0; j < nNodeList; j++)
                        {
                            nodeList_S[nNodeList] = nodeList[nNodeList].ToString();
                        }
                        //build Original Network
                        //find SS
                        int[] SS_List = new int[nNodeList];
                        int   nSS     = 0;
                        for (int j = 0; j < nNodeList; j++)
                        {
                            int count_Pre = 0;
                            for (int k = 0; k < nLinkList; k++)
                            {
                                if (j == LinkList[k].toNode)
                                {
                                    count_Pre++;
                                }
                            }
                            if (count_Pre == 0)
                            {
                                SS_List[nSS] = j;
                                nSS++;
                            }
                        }
                        //find EE
                        int[] EE_List = new int[nNodeList];
                        int   nEE     = 0;
                        for (int j = 0; j < nNodeList; j++)
                        {
                            int count_Post = 0;
                            for (int k = 0; k < nLinkList; k++)
                            {
                                if (j == LinkList[k].fromNode)
                                {
                                    count_Post++;
                                }
                            }
                            if (count_Post == 0)
                            {
                                EE_List[nEE] = j;
                                nEE++;
                            }
                        }
                        // SS -> -1; START -> -2; EE -> -3; END -> -4
                        //Create SS and EE links
                        if (nSS > 1)
                        {
                            //Create node SS
                            nodeList[nNodeList] = -1;
                            nNodeList++;
                            for (int j = 0; j < nSS; j++)
                            {
                                LinkList[nLinkList].fromNode = nNodeList - 1;
                                LinkList[nLinkList].toNode   = SS_List[j];
                                nLinkList++;
                            }
                            //Create START link to SS
                            nodeList[nNodeList] = -2; //START node
                            nNodeList++;
                            LinkList[nLinkList].fromNode = nNodeList - 1;
                            LinkList[nLinkList].toNode   = nNodeList - 2;
                            nLinkList++;
                        }
                        else
                        {
                            //Create START link to the only start EVENT
                            nodeList[nNodeList] = -2; //START node
                            nNodeList++;
                            LinkList[nLinkList].fromNode = nNodeList - 1;
                            LinkList[nLinkList].toNode   = SS_List[nSS - 1];
                            nLinkList++;
                        }

                        if (nEE > 1)
                        {
                            //Create node EE
                            nodeList[nNodeList] = -3;
                            nNodeList++;
                            for (int j = 0; j < nEE; j++)
                            {
                                LinkList[nLinkList].fromNode = EE_List[j];
                                LinkList[nLinkList].toNode   = nNodeList - 1;
                                nLinkList++;
                            }
                            //Create END to be linked by EE
                            nodeList[nNodeList] = -4; //START node
                            nNodeList++;
                            LinkList[nLinkList].fromNode = nNodeList - 2;
                            LinkList[nLinkList].toNode   = nNodeList - 1;
                            nLinkList++;
                        }
                        else
                        {
                            //Create END to be linked by the only end EVENT
                            nodeList[nNodeList] = -4; //END node
                            nNodeList++;
                            LinkList[nLinkList].fromNode = EE_List[nEE - 1];
                            LinkList[nLinkList].toNode   = nNodeList - 1;
                            nLinkList++;
                        }
                        //build convert Network
                        //save file "abc.net" to "abc_CCs.net"
                        Save_Network_2(m_Network.baseNet, nodeList_S, nNodeList_S, nodeList, nNodeList, LinkList, nLinkList, saveFilePath, false, "");
                        //add more line in current IO File
                        StreamWriter sw = new StreamWriter(saveFilePath, true);
                        for (int i = 0; i < tempLines.Length; i++)
                        {
                            sw.WriteLine(tempLines[i]);
                        }
                        sw.Close();
                    }
                }
                else
                {
                    System.IO.File.Copy(sFilePaths[run], saveFilePath, true);
                }
                m_Network = null;
            }
            MessageBox.Show(count.ToString(), "Disconnected Component Count");
            MessageBox.Show(count_newGraph.ToString(), "New Graph Created");
        }