private void PlaceACLineSegment(ACLine acLine, double offset, int y, double cellWidth)
        {
            ACLineUserControl acLineControl = new ACLineUserControl();

            if (properties.TryGetValue(acLine.ElementGID, out ElementProperties branchProperties))
            {
                acLineControl.DataContext = branchProperties as ACLineProperties;
            }

            double var = 80 * cellWidth / 100;

            if (var > startHeight)
            {
                currentHeight = startHeight;
            }
            else
            {
                currentHeight = var;
            }

            acLineControl.Button.Height = currentHeight;
            acLineControl.Button.Width  = currentHeight / 3;

            Canvas.SetLeft(acLineControl, offset + cellWidth / 2 - currentHeight / 3 / 2);
            Canvas.SetTop(acLineControl, y * cellHeight - cellHeight / 3 - currentHeight / 2);
            Panel.SetZIndex(acLineControl, 5);

            acLineControl.Button.Command          = NetworkViewViewModel.OpenPropertiesCommand;
            acLineControl.Button.CommandParameter = acLine.ElementGID;
            acLineControl.ToolTip = acLine.MRID;

            result.Add(acLineControl);
        }
        public static bool TraceUp(Node no, Tree <Element> tree)
        {
            //Element el = tree.Data[no.Parent];

            //if (tree.Data[el.ElementGID] is Source)
            //{
            //    return true;
            //}
            //else if (tree.Data[el.ElementGID] is Switch)
            //{
            //    Switch s = (Switch)tree.Data[el.ElementGID];
            //    if (s.Marker == true && s.State == SwitchState.Closed)
            //        return true;
            //    else
            //        return false;
            //}
            //else if (tree.Data[el.ElementGID] is ACLine)
            //{
            //    ACLine acl = (ACLine)tree.Data[el.ElementGID];
            //    Node n = (Node)tree.Data[acl.End1];

            //    if (TraceUp(n, tree))
            //        return true;
            //    else
            //        return false;
            //}
            //return false;

            while (true)
            {
                Element el = tree.Data[no.Parent];

                if (tree.Data[el.ElementGID] is Source)
                {
                    return(true);
                }
                else if (tree.Data[el.ElementGID] is Switch)
                {
                    Switch s = (Switch)tree.Data[el.ElementGID];
                    if (s.Marker == true && s.State == SwitchState.Closed)
                    {
                        return(true);
                    }
                    else
                    {
                        return(false);
                    }
                }
                else if (tree.Data[el.ElementGID] is ACLine)
                {
                    ACLine acl = (ACLine)tree.Data[el.ElementGID];
                    Node   n   = (Node)tree.Data[acl.End1];

                    no = n;
                }
            }
        }
Esempio n. 3
0
        public static List <SCADAUpdateModel> TraceDown(Node n, List <SCADAUpdateModel> networkChange, bool isEnergized, bool init, Tree <Element> tree)
        {
            foreach (long item in n.Children)
            {
                Element e = tree.Data[item];
                if (e is Consumer)
                {
                    e.Marker = isEnergized;
                    networkChange.Add(new SCADAUpdateModel(e.ElementGID, isEnergized));
                }
                else if (e is Switch)
                {
                    Element switche;
                    tree.Data.TryGetValue(e.ElementGID, out switche);
                    Switch s = (Switch)switche;

                    if (s.State == SwitchState.Open)
                    {
                        if (!init)
                        {
                            continue;
                        }

                        s.Marker = false;
                        networkChange.Add(new SCADAUpdateModel(s.ElementGID, s.Marker, OMSSCADACommon.States.OPENED));
                    }
                    else
                    {
                        s.Marker = isEnergized;
                        networkChange.Add(new SCADAUpdateModel(s.ElementGID, s.Marker, OMSSCADACommon.States.CLOSED));
                    }

                    Node node = (Node)tree.Data[s.End2];
                    node.Marker = isEnergized;
                    networkChange.Add(new SCADAUpdateModel(node.ElementGID, isEnergized));
                    networkChange = TraceDown(node, networkChange, s.Marker, init, tree);
                }
                else if (e is ACLine)
                {
                    Element acl;
                    tree.Data.TryGetValue(e.ElementGID, out acl);
                    ACLine ac = (ACLine)acl;
                    ac.Marker = isEnergized;
                    networkChange.Add(new SCADAUpdateModel(ac.ElementGID, isEnergized));
                    Node node = (Node)tree.Data[ac.End2];
                    node.Marker = isEnergized;
                    networkChange.Add(new SCADAUpdateModel(node.ElementGID, isEnergized));
                    networkChange = TraceDown(node, networkChange, isEnergized, init, tree);
                }
            }

            return(networkChange);
        }
Esempio n. 4
0
        private void UpToSource(Node no, Tree <Element> tree)
        {
            //Element el = tree.Data[no.Parent];

            //if (tree.Data[el.ElementGID] is Source)
            //{
            //    return;
            //}
            //else if (tree.Data[el.ElementGID] is Switch)
            //{
            //    Switch s = (Switch)tree.Data[el.ElementGID];
            //    allBrekersUp.Add(s.ElementGID);
            //    Node n = (Node)tree.Data[s.End1];
            //    UpToSource(n, tree);
            //}
            //else if (tree.Data[el.ElementGID] is ACLine)
            //{
            //    ACLine acl = (ACLine)tree.Data[el.ElementGID];
            //    Node n = (Node)tree.Data[acl.End1];
            //    UpToSource(n, tree);
            //}

            while (true)
            {
                Element el = tree.Data[no.Parent];

                if (tree.Data[el.ElementGID] is Source)
                {
                    return;
                }
                else if (tree.Data[el.ElementGID] is Switch)
                {
                    Switch s = (Switch)tree.Data[el.ElementGID];
                    allBrekersUp.Add(s.ElementGID);
                    Node n = (Node)tree.Data[s.End1];
                    no = n;
                }
                else if (tree.Data[el.ElementGID] is ACLine)
                {
                    ACLine acl = (ACLine)tree.Data[el.ElementGID];
                    Node   n   = (Node)tree.Data[acl.End1];
                    no = n;
                }
            }
        }
Esempio n. 5
0
        private void UpToSource(Node no, Tree <Element> tree)
        {
            Element el = tree.Data[no.Parent];

            if (tree.Data[el.ElementGID] is Source)
            {
                return;
            }
            else if (tree.Data[el.ElementGID] is Switch)
            {
                Switch s = (Switch)tree.Data[el.ElementGID];
                allBrekersUp.Add(s.ElementGID);
                Node n = (Node)tree.Data[s.End1];
                UpToSource(n, tree);
            }
            else if (tree.Data[el.ElementGID] is ACLine)
            {
                ACLine acl = (ACLine)tree.Data[el.ElementGID];
                Node   n   = (Node)tree.Data[acl.End1];
                UpToSource(n, tree);
            }
        }
Esempio n. 6
0
        public static bool TraceUp(Node no, Tree <Element> tree)
        {
            Element el = tree.Data[no.Parent];

            if (tree.Data[el.ElementGID] is Source)
            {
                return(true);
            }
            else if (tree.Data[el.ElementGID] is Switch)
            {
                Switch s = (Switch)tree.Data[el.ElementGID];
                if (s.Marker == true && s.State == SwitchState.Closed)
                {
                    return(true);
                }
                else
                {
                    return(false);
                }
            }
            else if (tree.Data[el.ElementGID] is ACLine)
            {
                ACLine acl = (ACLine)tree.Data[el.ElementGID];
                Node   n   = (Node)tree.Data[acl.End1];

                if (TraceUp(n, tree))
                {
                    return(true);
                }
                else
                {
                    return(false);
                }
            }
            return(false);
        }
        public static List <UIUpdateModel> TraceDown(Node n, List <UIUpdateModel> networkChange, bool isEnergized, bool init, Tree <Element> tree)
        {
            //foreach (long item in n.Children)
            //{
            //    Element e = tree.Data[item];
            //    if (e is Consumer)
            //    {
            //        e.Marker = isEnergized;
            //        networkChange.Add(new SCADAUpdateModel(e.ElementGID, isEnergized));
            //    }
            //    else if (e is Switch)
            //    {
            //        Element switche;
            //        tree.Data.TryGetValue(e.ElementGID, out switche);
            //        Switch s = (Switch)switche;

            //        if (s.State == SwitchState.Open)
            //        {
            //            if (!init)
            //            {
            //                continue;
            //            }

            //            s.Marker = false;
            //            networkChange.Add(new SCADAUpdateModel(s.ElementGID, s.Marker, OMSSCADACommon.States.OPENED));
            //        }
            //        else
            //        {
            //            s.Marker = isEnergized;
            //            networkChange.Add(new SCADAUpdateModel(s.ElementGID, s.Marker, OMSSCADACommon.States.CLOSED));
            //        }

            //        Node node = (Node)tree.Data[s.End2];
            //        node.Marker = isEnergized;
            //        networkChange.Add(new SCADAUpdateModel(node.ElementGID, isEnergized));
            //        networkChange = TraceDown(node, networkChange, s.Marker, init, tree);
            //    }
            //    else if (e is ACLine)
            //    {
            //        Element acl;
            //        tree.Data.TryGetValue(e.ElementGID, out acl);
            //        ACLine ac = (ACLine)acl;
            //        ac.Marker = isEnergized;
            //        networkChange.Add(new SCADAUpdateModel(ac.ElementGID, isEnergized));
            //        Node node = (Node)tree.Data[ac.End2];
            //        node.Marker = isEnergized;
            //        networkChange.Add(new SCADAUpdateModel(node.ElementGID, isEnergized));
            //        networkChange = TraceDown(node, networkChange, isEnergized, init, tree);
            //    }
            //}

            Queue <Node> nodes = new Queue <Node>();

            nodes.Enqueue(n);

            while (nodes.Count > 0)
            {
                Node currentNode = nodes.Dequeue();

                foreach (long item in currentNode.Children)
                {
                    Element e = tree.Data[item];

                    if (e is Consumer)
                    {
                        e.Marker = currentNode.Marker;
                        networkChange.Add(new UIUpdateModel(e.ElementGID, isEnergized));
                    }
                    else if (e is Switch)
                    {
                        Element switche;
                        tree.Data.TryGetValue(e.ElementGID, out switche);
                        Switch s = (Switch)switche;

                        if (s.State == SwitchState.Open)
                        {
                            if (!init)
                            {
                                continue;
                            }

                            s.Marker = false;
                            networkChange.Add(new UIUpdateModel(s.ElementGID, s.Marker, OMSSCADACommon.States.OPENED));
                        }
                        else
                        {
                            s.Marker = currentNode.Marker;
                            networkChange.Add(new UIUpdateModel(s.ElementGID, s.Marker, OMSSCADACommon.States.CLOSED));
                        }

                        Node node = (Node)tree.Data[s.End2];
                        node.Marker = s.Marker;
                        networkChange.Add(new UIUpdateModel(node.ElementGID, isEnergized));
                        nodes.Enqueue(node);
                    }
                    else if (e is ACLine)
                    {
                        Element acl;
                        tree.Data.TryGetValue(e.ElementGID, out acl);
                        ACLine ac = (ACLine)acl;
                        ac.Marker = currentNode.Marker;
                        networkChange.Add(new UIUpdateModel(ac.ElementGID, isEnergized));

                        Node node = (Node)tree.Data[ac.End2];
                        node.Marker = currentNode.Marker;
                        networkChange.Add(new UIUpdateModel(node.ElementGID, isEnergized));
                        nodes.Enqueue(node);
                    }
                }
            }

            return(networkChange);
        }
        public Dictionary <long, ElementProperties> InitElementProperties(List <Element> elements)
        {
            if (elements != null)
            {
                foreach (Element element in elements)
                {
                    if (element is Switch)
                    {
                        Switch           @switch          = (Switch)element;
                        SwitchProperties switchProperties = new SwitchProperties()
                        {
                            GID          = @switch.ElementGID,
                            IsEnergized  = @switch.IsEnergized,
                            IsUnderScada = @switch.UnderSCADA,
                            Incident     = @switch.Incident,
                            CanCommand   = @switch.CanCommand,
                            ParentGid    = @switch.End1
                        };

                        properties.Add(switchProperties.GID, switchProperties);
                    }
                    else if (element is Consumer)
                    {
                        Consumer           consumer           = (Consumer)element;
                        ConsumerProperties consumerProperties = new ConsumerProperties()
                        {
                            GID          = consumer.ElementGID,
                            IsEnergized  = consumer.IsEnergized,
                            IsUnderScada = consumer.UnderSCADA,
                            Call         = false
                        };

                        properties.Add(consumerProperties.GID, consumerProperties);
                    }
                    else if (element is Source)
                    {
                        Source           source           = (Source)element;
                        SourceProperties sourceProperties = new SourceProperties()
                        {
                            GID          = source.ElementGID,
                            IsEnergized  = source.IsEnergized,
                            IsUnderScada = source.UnderSCADA
                        };

                        properties.Add(sourceProperties.GID, sourceProperties);
                    }
                    else if (element is ACLine)
                    {
                        ACLine           acLine           = (ACLine)element;
                        ACLineProperties acLineProperties = new ACLineProperties()
                        {
                            GID          = acLine.ElementGID,
                            IsEnergized  = acLine.IsEnergized,
                            IsUnderScada = acLine.UnderSCADA
                        };

                        properties.Add(acLineProperties.GID, acLineProperties);
                    }
                    else if (element is Node)
                    {
                        Node           node           = (Node)element;
                        NodeProperties nodeProperties = new NodeProperties()
                        {
                            GID         = node.ElementGID,
                            IsEnergized = node.IsEnergized
                        };

                        properties.Add(nodeProperties.GID, nodeProperties);
                    }
                }
            }

            foreach (Model.Properties.DMSProperties.ElementProperties property in properties.Values)
            {
                if (property is SwitchProperties)
                {
                    properties.TryGetValue(((SwitchProperties)property).ParentGid, out ElementProperties elementProperties);

                    if (elementProperties != null)
                    {
                        ((SwitchProperties)property).Parent = elementProperties;
                    }
                }
            }

            return(properties);
        }
Esempio n. 9
0
        public static List <UIUpdateModel> TraceDown(Node n, List <UIUpdateModel> networkChange, bool isEnergized, bool init, Tree <Element> tree)
        {
            Queue <Node> nodes = new Queue <Node>();

            nodes.Enqueue(n);

            while (nodes.Count > 0)
            {
                Node currentNode = nodes.Dequeue();

                foreach (long item in currentNode.Children)
                {
                    Element e = tree.Data[item];

                    if (e is Consumer)
                    {
                        e.IsEnergized = currentNode.IsEnergized;
                        networkChange.Add(new UIUpdateModel(e.ElementGID, isEnergized)); // mali bug koji se ne ispoljava, treba currentNode.IsEnergized
                    }
                    else if (e is Switch)
                    {
                        Element switche;
                        tree.Data.TryGetValue(e.ElementGID, out switche);
                        Switch s = (Switch)switche;

                        if (s.State == SwitchState.Open)
                        {
                            if (!init)
                            {
                                continue;
                            }

                            s.IsEnergized = false;
                            networkChange.Add(new UIUpdateModel(s.ElementGID, s.IsEnergized, OMSSCADACommon.States.OPEN));
                        }
                        else
                        {
                            s.IsEnergized = currentNode.IsEnergized;
                            networkChange.Add(new UIUpdateModel(s.ElementGID, s.IsEnergized, OMSSCADACommon.States.CLOSED));
                        }

                        Node node = (Node)tree.Data[s.End2];
                        node.IsEnergized = s.IsEnergized;
                        networkChange.Add(new UIUpdateModel(node.ElementGID, isEnergized));
                        nodes.Enqueue(node);
                    }
                    else if (e is ACLine)
                    {
                        Element acl;
                        tree.Data.TryGetValue(e.ElementGID, out acl);
                        ACLine ac = (ACLine)acl;
                        ac.IsEnergized = currentNode.IsEnergized;
                        networkChange.Add(new UIUpdateModel(ac.ElementGID, isEnergized));

                        Node node = (Node)tree.Data[ac.End2];
                        node.IsEnergized = currentNode.IsEnergized;
                        networkChange.Add(new UIUpdateModel(node.ElementGID, isEnergized));
                        nodes.Enqueue(node);
                    }
                }
            }

            return(networkChange);
        }