private void PathMouseDown(object sender, MouseEventArgs e) { var edge = (Edge <FaultTreeNode>)((EdgeViewModel)((FrameworkElement)sender).DataContext).Edge; if (edge.Source is FaultTreeTerminalNode) { return; } FaultTreeNode node; switch (this.EditorMode) { case VisualEditorMode.MODE_ADD_AND_GATE: node = new FaultTreeAndGateNode(this.ViewModel.FaultTree.NextId()); break; case VisualEditorMode.MODE_ADD_OR_GATE: node = new FaultTreeOrGateNode(this.ViewModel.FaultTree.NextId()); break; default: return; } edge.Source.Childs.Add(node); edge.Source.Childs.Remove(edge.Destination); node.Childs.Add(edge.Destination); this.ViewModel.RaisePropertyChanged("FaultTree"); this.EditorMode = VisualEditorMode.MODE_VIEW_ONLY; }
/// <summary> /// The transform. /// </summary> /// <param name="gate"> /// The gate. /// </param> /// <param name="childs"> /// The childs. /// </param> /// <returns> /// The <see cref="FaultTreeNode"/>. /// </returns> public override FaultTreeNode Transform(FaultTreeOrGateNode gate, List <FaultTreeNode> childs) { bool all = true; foreach (FaultTreeNode c in childs) { if (c.GetType() == typeof(FaultTreeLiteralNode)) { if (((FaultTreeLiteralNode)c).Value) { return(this.CreateNode(new FaultTreeLiteralNode(gate.ID, true))); } } else { all = false; } } return(all ? this.CreateNode(new FaultTreeLiteralNode(gate.ID, false)) : base.Transform(gate, childs)); }
private void EditorDownGate(FrameworkElement sender) { FaultTreeNode vertex; switch (this.EditorMode) { case VisualEditorMode.MODE_ADD_AND_GATE: vertex = new FaultTreeAndGateNode(this.ViewModel.FaultTree.NextId()); break; case VisualEditorMode.MODE_ADD_OR_GATE: vertex = new FaultTreeOrGateNode(this.ViewModel.FaultTree.NextId()); break; case VisualEditorMode.MODE_ADD_BASIC_EVENT: FaultTreeTerminalNode node = sender.DataContext as FaultTreeTerminalNode; if (node != null) { vertex = new FaultTreeTerminalNode(this.ViewModel.FaultTree.NextId(), this.ViewModel.FaultTree.NextBasicEvent()); this.ViewModel.FaultTree.MarkovChain.InitialDistribution[(FaultTreeTerminalNode)vertex] = 1.0; this.ViewModel.FaultTree.MarkovChain[node, (FaultTreeTerminalNode)vertex] = 1.0; this.ViewModel.FaultTree.MarkovChain[(FaultTreeTerminalNode)vertex, node] = 1.0; this.ViewModel.RaisePropertyChanged("FaultTree"); this.EditorMode = VisualEditorMode.MODE_VIEW_ONLY; return; } vertex = new FaultTreeTerminalNode(this.ViewModel.FaultTree.NextId(), this.ViewModel.FaultTree.NextBasicEvent()); this.ViewModel.FaultTree.MarkovChain.InitialDistribution[(FaultTreeTerminalNode)vertex] = 1.0; break; default: return; } this.ViewModel.NewEdgeStart = (FaultTreeNode)sender.DataContext; this.ViewModel.NewEdgeEnd = vertex; this.ViewModel.CreateEdge(); this.EditorMode = VisualEditorMode.MODE_VIEW_ONLY; }
/// <summary> /// The transform. /// </summary> /// <param name="gate"> /// The gate. /// </param> /// <param name="childs"> /// The childs. /// </param> /// <returns> /// The <see cref="int"/>. /// </returns> public override int Transform(FaultTreeOrGateNode gate, List <int> childs) { return(childs.DefaultIfEmpty(0).Max()); }
/// <summary> /// The transform. /// </summary> /// <param name="gate"> /// The gate. /// </param> /// <param name="childs"> /// The childs. /// </param> /// <returns> /// The <see cref="FaultTreeNode"/>. /// </returns> public override FaultTreeNode Transform(FaultTreeOrGateNode gate, List <FaultTreeNode> childs) { return(this.CreateNode(new FaultTreeOrGateNode(gate.ID, childs))); }
/// <summary> /// The transform. /// </summary> /// <param name="gate"> /// The gate. /// </param> /// <param name="childs"> /// The childs. /// </param> /// <returns> /// The <see cref="int"/>. /// </returns> public override int Transform(FaultTreeOrGateNode gate, List <int> childs) { return(childs.Min()); }
/// <summary> /// The transform overwritten by the <see cref="FaultTreeOrGateNode"/>. /// </summary> /// <param name="gate"> /// The gate. /// </param> /// <param name="childs"> /// The childs. /// </param> /// <returns> /// The <see> /// <cref>T</cref> /// </see> /// . /// </returns> public abstract T Transform(FaultTreeOrGateNode gate, List <T> childs);