public static CircuitXml ToCircuitXml(IEnumerable <DiagramObject> diagramObjects) { var cx = new CircuitXml(); cx.Nodes.AddRange(diagramObjects.OfType <Node>()); cx.Resistors.AddRange(diagramObjects.OfType <Resistor>()); cx.VoltageSources.AddRange(diagramObjects.OfType <VoltageSource>()); cx.Switches.AddRange(diagramObjects.OfType <Switch>()); return(cx); }
/// <summary> /// Serializes a circuit. /// </summary> /// <param name="cx">A <see cref="CircuitXml" /> object.</param> /// <param name="s"> /// A <see cref="Stream" /> which the XML will be written to. /// </param> /// <exception cref="ArgumentNullException"> /// If <paramref name="cx" /> or <paramref name="s" /> is null. /// </exception> public void Serialize([NotNull] CircuitXml cx, [NotNull] Stream s) { if (cx == null) { throw new ArgumentNullException(nameof(cx)); } if (s == null) { throw new ArgumentNullException(nameof(s)); } _ser.Serialize(s, cx); }
/// <summary> /// Serializes a circuit. /// </summary> /// <param name="cx">A <see cref="CircuitXml" /> object.</param> /// <exception cref="ArgumentNullException"> /// If <paramref name="cx" /> is null. /// </exception> public string Serialize([NotNull] CircuitXml cx) { if (cx == null) { throw new ArgumentNullException(nameof(cx)); } string r; using (var sw = new StringWriter()) { _ser.Serialize(sw, cx); r = sw.ToString(); } return(r); }
public static IEnumerable <DiagramObject> ToDiagram(this CircuitXml cx) { var nodes = cx.Nodes.Where(n => n != null).ToDictionary(n => n.Id); foreach (var n in nodes.Values) { yield return(n); } Node ln; foreach (var r in cx.Resistors.Where(r => r != null)) { if (r.Node1Id != null && nodes.TryGetValue(r.Node1Id.Value, out ln)) { r.Node1 = ln; } if (r.Node2Id != null && nodes.TryGetValue(r.Node2Id.Value, out ln)) { r.Node2 = ln; } yield return(r); } foreach (var v in cx.VoltageSources) { if (v.Node1Id != null && nodes.TryGetValue(v.Node1Id.Value, out ln)) { v.Node1 = ln; } if (v.Node2Id != null && nodes.TryGetValue(v.Node2Id.Value, out ln)) { v.Node2 = ln; } yield return(v); } foreach (var s in cx.Switches) { if (s.Node1Id != null && nodes.TryGetValue(s.Node1Id.Value, out ln)) { s.Node1 = ln; } if (s.Node2Id != null && nodes.TryGetValue(s.Node2Id.Value, out ln)) { s.Node2 = ln; } yield return(s); } }