コード例 #1
0
        /// <summary>Generate multi-species quality report.</summary>
        ///  <param name="msxBin">Name of the MSX simulation output file.</param>
        /// <param name="net">Hydraulic network.</param>
        /// <param name="netMsx">MSX network.</param>
        /// <param name="tk2">Hydraulic network - MSX bridge.</param>
        /// <param name="values">Species report flag.</param>
        public void CreateMsxReport(string msxBin, EpanetNetwork net, EpanetMSX netMsx, EnToolkit2 tk2, bool[] values)
        {
            Rtime = 0;
            var nodes = netMsx.Network.Node;
            var links = netMsx.Network.Link;

            string[] nSpecies    = netMsx.GetSpeciesNames();
            int      reportCount = (int)((net.Duration - net.RStart) / net.RStep) + 1;

            var reader = new MsxReader(
                nodes.Length - 1,
                links.Length - 1,
                nSpecies.Length,
                netMsx.ResultsOffset);

            int totalSpecies = values == null ? nSpecies.Length : values.Count(b => b);

            reader.Open(msxBin);

            var nodesHead = new object[nSpecies.Length + 1];

            nodesHead[0] = _sheet.TransposedMode ? "Node/Time" : "Time/Node";

            var linksHead = new object[nSpecies.Length + 1];

            linksHead[0] = _sheet.TransposedMode ? "Link/Time" : "Time/Link";

            int count = 1;

            for (int i = 0; i < nSpecies.Length; i++)
            {
                if (values == null || values[i])
                {
                    nodesHead[count]   = nSpecies[i];
                    linksHead[count++] = nSpecies[i];
                }
            }

            var nodeRow = new object[totalSpecies + 1];

            for (int i = 1; i < nodes.Length; i++)
            {
                if (!nodes[i].Rpt)
                {
                    continue;
                }

                var spr = _sheet.NewSpreadsheet("Node&lt;&lt;" + tk2.ENgetnodeid(i) + "&gt;&gt;");
                spr.AddHeader(nodesHead);

                for (long time = net.RStart, period = 0;
                     time <= net.Duration;
                     time += net.RStep, period++)
                {
                    nodeRow[0] = time.GetClockTime();

                    for (int j = 0, ji = 0; j < nSpecies.Length; j++)
                    {
                        if (values == null || values[j])
                        {
                            nodeRow[ji++ + 1] = reader.GetNodeQual((int)period, i, j + 1);
                        }
                    }

                    spr.AddData(nodeRow);
                }
            }

            var linkRow = new object[totalSpecies + 1];

            for (int i = 1; i < links.Length; i++)
            {
                if (!links[i].Rpt)
                {
                    continue;
                }

                var spr = _sheet.NewSpreadsheet("Link&lt;&lt;" + tk2.ENgetlinkid(i) + "&gt;&gt;");
                spr.AddHeader(linksHead);

                for (long time = net.RStart, period = 0;
                     time <= net.Duration;
                     time += net.RStep, period++)
                {
                    linkRow[0] = time.GetClockTime();

                    for (int j = 0, ji = 0; j < nSpecies.Length; j++)
                    {
                        if (values == null || values[j])
                        {
                            linkRow[ji++ + 1] = reader.GetLinkQual((int)period, i, j + 1);
                        }
                    }

                    spr.AddData(linkRow);
                }
            }

            reader.Close();
        }
コード例 #2
0
        /// <summary>Report options dialog constructor.</summary>
        public ReportOptions(string inpFile, string msxFile) : this()
        {
            if (inpFile == null)
            {
                return;
            }

            _fileInp = inpFile;
            _net     = new EpanetNetwork();

            try {
                InputParser inpParser;

                string extension = Path.GetExtension(inpFile);

                switch (extension.ToLowerInvariant())
                {
                case ".inp":
                    inpParser = new InpParser();
                    break;

                case ".net":
                    inpParser = new NetParser();
                    break;

                case ".xml":
                    inpParser = new XmlParser(false);

                    break;

                case ".gz":
                    inpParser = new XmlParser(true);
                    break;

                default:
                    inpParser = new InpParser();
                    break;
                }

                _net = inpParser.Parse(new EpanetNetwork(), inpFile);
            }
            catch (ENException ex) {
                MessageBox.Show(
                    ex.Message + "\nCheck epanet.log for detailed error description",
                    "Error",
                    MessageBoxButtons.OK,
                    MessageBoxIcon.Error);

                return;
            }

            if (msxFile == null)
            {
                return;
            }

            _fileMsx  = msxFile;
            _epanetTk = new EnToolkit2(_net);
            _netMsx   = new EpanetMSX(_epanetTk);

            try {
                ErrorCodeType ret = _netMsx.Load(_fileMsx);
                if (ret != 0)
                {
                    MessageBox.Show("MSX parsing error " + ret, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
                    _fileMsx  = null;
                    _netMsx   = null;
                    _epanetTk = null;
                }
            }
            catch (IOException) {
                MessageBox.Show(
                    "IO error while reading the MSX file",
                    "Error",
                    MessageBoxButtons.OK,
                    MessageBoxIcon.Error);
                _fileMsx  = null;
                _netMsx   = null;
                _epanetTk = null;
            }
        }