private void init_Network() { Network = new strNetwork(); Network.nNode = 0; Network.Node = new strNode[nNode * 2]; Network.nLink = 0; Network.Link = new strLink[nNode * 4]; Network.nNode = 2; Network.Node[0].Type = 0; Network.Node[0].Kind = "START"; Network.Node[1].Type = 0; Network.Node[1].Kind = "END"; }
//CORE OF THE FORM private void mnuMakeNetwork_Click(object sender, EventArgs e) //convert network button { for (int run = 0; run < sFileNames.Length; run++) { Network = new strNetwork(); string sFilePath = txtSaveFolder.Text + @"\"; sFilePath += sFileNames[run].Remove(sFileNames[run].Length - 4) + @".net"; //Made Network Load_XML(sFilePaths[run], false); //load and convert XML file named sFilePath[run] example: (f\project\ibm\s000345.bpmn.net) Save_Network(sFilePath, false, ""); //Original Network Load_XML(sFilePaths[run], true); Save_Network(sFilePath, true, "ADD --- Original Network ---"); } MessageBox.Show(txtFileN.Text + " Network files were made"); }
//the same a part of IBM Load_XML() private void Make_aNetwork(bool isOrg) { int nStart = 0, nEnd = 0; string[,] xmlNode2 = new string[maxXmlNode, 3]; Array.Copy(xmlNode, xmlNode2, xmlNode.Length); for (int i = 0; i < xNode; i++) { int cntPre = 0; int cntPost = 0; for (int j = 0; j < xLink; j++) { if (xmlLink[j, 1] == xmlNode[i, 0]) { cntPost++; } if (xmlLink[j, 2] == xmlNode[i, 0]) { cntPre++; } } if (cntPre == 0) { xmlNode[i, 2] = "S"; nStart++; } if (cntPost == 0) { xmlNode2[i, 2] = "E"; nEnd++; } } ////////////////////// convert in to SS and EE model for single entry single exit process model if (!isOrg) { if (nStart > 1) { xmlNode[xNode, 0] = "S"; xmlNode[xNode, 1] = "START"; xNode++; xmlNode[xNode, 0] = "SS"; //dummy strat xmlNode[xNode, 1] = "XOR"; //xmlNode[xNode, 1] = "OR"; xNode++; xmlLink[xLink, 0] = "SL0"; xmlLink[xLink, 1] = "S"; xmlLink[xLink, 2] = "SS"; xLink++; for (int i = 0; i < xNode - 2; i++) { if (xmlNode[i, 2] == "S") { //xmlNode[i, 1] = "SD"; xmlLink[xLink, 0] = "SL1"; xmlLink[xLink, 1] = "SS"; xmlLink[xLink, 2] = xmlNode[i, 0]; xLink++; } } } else //nStart = 1 { xmlNode[xNode, 0] = "S"; xmlNode[xNode, 1] = "START"; xNode++; for (int i = 0; i < xNode - 1; i++) { if (xmlNode[i, 2] == "S") { xmlLink[xLink, 0] = "SL1"; xmlLink[xLink, 1] = "S"; xmlLink[xLink, 2] = xmlNode[i, 0]; xLink++; } } } if (nEnd > 1) { xmlNode[xNode, 0] = "E"; xmlNode[xNode, 1] = "END"; xmlNode2[xNode, 0] = "E"; xmlNode2[xNode, 1] = "END"; xNode++; xmlNode[xNode, 0] = "EE"; // dummy end xmlNode[xNode, 1] = "XOR"; //xmlNode[xNode, 1] = "OR"; xmlNode2[xNode, 0] = "EE"; // dummy end xmlNode[xNode, 1] = "XOR"; //xmlNode2[xNode, 1] = "OR"; xNode++; xmlLink[xLink, 0] = "EL0"; xmlLink[xLink, 1] = "EE"; xmlLink[xLink, 2] = "E"; xLink++; for (int i = 0; i < xNode - 2; i++) { if (xmlNode2[i, 2] == "E") { //xmlNode[i, 1] = "ED"; xmlLink[xLink, 0] = "EL1"; xmlLink[xLink, 1] = xmlNode2[i, 0]; xmlLink[xLink, 2] = "EE"; xLink++; } } } else { xmlNode[xNode, 0] = "E"; xmlNode[xNode, 1] = "END"; xmlNode2[xNode, 0] = "E"; xmlNode2[xNode, 1] = "END"; xNode++; for (int i = 0; i < xNode - 1; i++) { if (xmlNode2[i, 2] == "E") { xmlLink[xLink, 0] = "EL1"; xmlLink[xLink, 1] = xmlNode2[i, 0]; xmlLink[xLink, 2] = "E"; xLink++; } } } } ////////////////////////// Network = new strNetwork(); //노드 수 // number of nodes Network.nNode = xNode; Network.Node = new strNode[xNode]; //노드 정보 //node info for (int i = 0; i < xNode; i++) { Network.Node[i].Kind = xmlNode[i, 1]; if (xmlNode[i, 0] == "S" || xmlNode[i, 0] == "E" || xmlNode[i, 0] == "SS" || xmlNode[i, 0] == "EE") { Network.Node[i].Name = xmlNode[i, 0]; } else { Network.Node[i].Name = xmlNode[i, 0]; } } // 링크 수 Network.nLink = xLink; Network.Link = new strLink[xLink]; for (int i = 0; i < xLink; i++) { int fromN = -1, toN = -1; for (int j = 0; j < xNode; j++) { if (xmlLink[i, 1] == xmlNode[j, 0]) { fromN = j; } if (xmlLink[i, 2] == xmlNode[j, 0]) { toN = j; } } if (fromN >= 0 && toN >= 0) { Network.Link[i].fromNode = fromN; Network.Link[i].toNode = toN; } } //추가 //for (int i = 0; i < Network.nNode; i++) //{ // int cntPre = 0; // int cntPost = 0; // for (int j = 0; j < Network.nLink; j++) // { // if (Network.Link[j].fromNode == i) cntPost++; // if (Network.Link[j].toNode == i) cntPre++; // } // if (Network.Node[i].Kind == "SD") // { // if (cntPost > 1) Network.Node[i].Kind = "OR"; // else Network.Node[i].Kind = "EVENT"; // } // else if (Network.Node[i].Kind == "ED") // { // if (cntPre > 1) Network.Node[i].Kind = "OR"; // else Network.Node[i].Kind = "EVENT"; // } //} }