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; } } }
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); }
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; } } }
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); } }
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); }
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); }