Beispiel #1
0
        private void button1_Click(object sender, RoutedEventArgs e)
        {
            int          ret_val;
            double       zero_flow_tolerance = 0.005; //value below which it is assumed that the flow is zero
            double       head_diff_tolerance = 0.2;   //if flow path contstructing algorithm arrives at logger's neighbour, it is assumed that it has arrinved at this logger ony if absolute head difference between the enighbour and the logger is smaller than this value
            WaterNetwork water_network       = new WaterNetwork();
            //ret_val = Epanet.SimulateInEpanet();
            //ret_val = Epanet.ReadEpanetResults(water_network);
            IO io_object = new IO();

            ret_val = io_object.ReadEpanetDll_WindowApp(water_network, false);

            water_network.GenerateNeighboursLists(zero_flow_tolerance); //TEMP!!!
            EFavorTest     efavor_test = new EFavorTest();
            OpenFileDialog file_dialog = new OpenFileDialog();

            file_dialog.InitialDirectory = Settings.Default.path;
            file_dialog.FileName         = "EFavor_test_fake.xls";
            file_dialog.ShowDialog();
            efavor_test.LoadEFavorData(file_dialog.FileName, water_network);


            List <Valve> inlet_valves = efavor_test.list_of_inlet_flowmeters.ConvertAll <Valve>(new Converter <FlowMeter, Valve>(FlowMeter.GetValve));

            //TODO!!!update valve.setting based on FlowMeter.prv_settings, to do so ask efavor object for time_step_pressure_stepping and IO object for hydraulic step (using EN) (and other times if needed)
            inlet_valves[0].setting = new double[5] {
                20, 30, 40, 50, 60
            };                                                              //!!!TEMP!!!
            //inlet_valves[0].setting = new double[6] { 30, 30, 30, 30, 30, 30 }; //!!!TEMP!!!
            io_object.SimulateUpdateHeadsFlows(water_network, inlet_valves, 1 * 60, 5 * 60, 60);
            //io_object.SimulateUpdateHeadsFlows(water_network, inlet_valves, 50, 340, 60);

            io_object.CloseENHydAnalysis();
            io_object.CloseENToolkit();
            //MessageBox.Show("Nodes: " + water_network.nNodes + " Pipes: " + water_network.nLinks);

            List <Node> inlet_nodes = efavor_test.list_of_inlet_loggers.ConvertAll <Node>(new Converter <Logger, Node>(Logger.GetLoggerNode));
            FlowTree    flow_tree   = new FlowTree(water_network, inlet_nodes);

            flow_tree.GenerateFlowTree();

            LoggerConnections logger_connections = new LoggerConnections(efavor_test.list_of_loggers, flow_tree);

            logger_connections.CalculatePathsBetweenLoggers(head_diff_tolerance);
            logger_connections.LoggerConn2WaterNet(efavor_test, efavor_test.list_of_inlet_set_ids[0]);

            List <List <Node> > dupa = logger_connections.GetAllPathsBetweenLoggers("6", "5");

            return;
        }
        /// <summary>!!!relies on specific coding of logger connection names!!!
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void dataGrid1_SelectionChanged(object sender, SelectionChangedEventArgs e)
        {
            List <Tuple <string, double, double> > listJustSelected   = new List <Tuple <string, double, double> >(e.AddedItems.Cast <Tuple <string, double, double> >());
            List <Tuple <string, double, double> > listJustUnselected = new List <Tuple <string, double, double> >(e.RemovedItems.Cast <Tuple <string, double, double> >());
            MainWindow        mainWindow        = (MainWindow)this.Owner;
            LoggerConnections loggerConnections = mainWindow.loggerConnections;
            int error;

            if (loggerConnections.logger_water_network == null)  //check if logger_water_network exists (it should at this stage!)
            {
                error = loggerConnections.LoggerConn2WaterNet(mainWindow.efavorTest, mainWindow.inletSetSelectionComboBox.SelectedValue.ToString(), true);
                loggerConnections.logger_water_network.isPlotted = true;
                error = mainWindow.DrawWaterNetwork();
            }

            //unselected:
            foreach (Tuple <string, double, double> currentTuple in listJustUnselected)
            {
                string loggerName  = currentTuple.Item1;
                int    loggerIndex = loggerConnections.list_of_loggers.FindIndex(tmp => tmp.logger_id == loggerName);
                if (loggerIndex < 0)
                {
                    MessageBox.Show("Can't find logger " + loggerName);
                    return;
                }
                //connections outgoing from this logger:
                for (int i = 0; i < loggerConnections.list_of_loggers.Count; i++)
                {
                    if (loggerConnections.logger_connection_matrix[loggerIndex, i] == true)
                    {
                        Link linkTemp = loggerConnections.logger_water_network.listOfLinks.Find(tmp => tmp.name == "L" + loggerName + "-" + loggerConnections.list_of_loggers[i].logger_id);
                        if (linkTemp == null)
                        {
                            MessageBox.Show("Can't find connection from logger " + loggerName + " to logger " + loggerConnections.list_of_loggers[i].logger_id);
                            return;
                        }
                        var alreadyInList = mainWindow.pathHitList.Find(tmp => tmp.Tag == linkTemp); // make sure that this logger connection is already in pathHitList
                        if (alreadyInList != null)                                                   //add if yes unselect it
                        {
                            mainWindow.ChangeLinkApperance(linkTemp, linkTemp.color, linkTemp.thickness - UI.Default.SelectionLinkThickness);
                            mainWindow.pathHitList.Remove(alreadyInList);
                            //MessageBox.Show(linkTemp.name + " unselected");
                        }
                    }
                }
                //connections incoming to this logger:
                for (int i = 0; i < loggerConnections.list_of_loggers.Count; i++)
                {
                    if (loggerConnections.logger_connection_matrix[i, loggerIndex] == true)
                    {
                        Link linkTemp = loggerConnections.logger_water_network.listOfLinks.Find(tmp => tmp.name == "L" + loggerConnections.list_of_loggers[i].logger_id + "-" + loggerName);
                        if (linkTemp == null)
                        {
                            MessageBox.Show("Can't find connection from logger " + loggerConnections.list_of_loggers[i].logger_id + " to logger " + loggerName);
                            return;
                        }
                        var alreadyInList = mainWindow.pathHitList.Find(tmp => tmp.Tag == linkTemp); // make sure that this logger connection is already in pathHitList
                        if (alreadyInList != null)                                                   //add if yes unselect it
                        {
                            mainWindow.ChangeLinkApperance(linkTemp, linkTemp.color, linkTemp.thickness - UI.Default.SelectionLinkThickness);
                            mainWindow.pathHitList.Remove(alreadyInList);
                            //MessageBox.Show(linkTemp.name + " unselected");
                        }
                    }
                }
            }

            //just selected:
            foreach (Tuple <string, double, double> currentTuple in listJustSelected)
            {
                string loggerName  = currentTuple.Item1;
                int    loggerIndex = loggerConnections.list_of_loggers.FindIndex(tmp => tmp.logger_id == loggerName);
                if (loggerIndex < 0)
                {
                    MessageBox.Show("Can't find logger " + loggerName);
                    return;
                }
                //connections outgoing from this logger:
                for (int i = 0; i < loggerConnections.list_of_loggers.Count; i++)
                {
                    if (loggerConnections.logger_connection_matrix[loggerIndex, i] == true)
                    {
                        Link linkTemp = loggerConnections.logger_water_network.listOfLinks.Find(tmp => tmp.name == "L" + loggerName + "-" + loggerConnections.list_of_loggers[i].logger_id);
                        if (linkTemp == null)
                        {
                            MessageBox.Show("Can't find connection from logger " + loggerName + " to logger " + loggerConnections.list_of_loggers[i].logger_id);
                            return;
                        }
                        var alreadyInList = mainWindow.pathHitList.Find(tmp => tmp.Tag == linkTemp); // check whether logger connection is already in pathHitList
                        if (alreadyInList == null)                                                   //add if not
                        {
                            mainWindow.ChangeLinkApperance(linkTemp, linkTemp.color, linkTemp.thickness + UI.Default.SelectionLinkThickness);
                            mainWindow.pathHitList.Add((System.Windows.Shapes.Path)linkTemp.graphicalObject);
                            //MessageBox.Show(linkTemp.name + " selected");
                        }
                    }
                }
                //connections incoming to this logger:
                for (int i = 0; i < loggerConnections.list_of_loggers.Count; i++)
                {
                    if (loggerConnections.logger_connection_matrix[i, loggerIndex] == true)
                    {
                        Link linkTemp = loggerConnections.logger_water_network.listOfLinks.Find(tmp => tmp.name == "L" + loggerConnections.list_of_loggers[i].logger_id + "-" + loggerName);
                        if (linkTemp == null)
                        {
                            MessageBox.Show("Can't find connection from logger " + loggerConnections.list_of_loggers[i].logger_id + " to logger " + loggerName);
                            return;
                        }
                        var alreadyInList = mainWindow.pathHitList.Find(tmp => tmp.Tag == linkTemp); // check whether logger connection is already in pathHitList
                        if (alreadyInList == null)                                                   //add if not
                        {
                            mainWindow.ChangeLinkApperance(linkTemp, linkTemp.color, linkTemp.thickness + UI.Default.SelectionLinkThickness);
                            mainWindow.pathHitList.Add((System.Windows.Shapes.Path)linkTemp.graphicalObject);
                            //MessageBox.Show(linkTemp.name + " selected");
                        }
                    }
                }
            }
        }