public void ReloadSurface(PrimitivesSurface saved) { foreach (var seg in Surface.Segments) { var savedSeg = saved.Segments.FirstOrDefault(s => s.Position == seg.Position); if (savedSeg == null || seg.Join.Any()) { continue; } if (savedSeg.Type != ElementType.None) { var el = _palette.First(s => s.Get() .First().Type == savedSeg.Type) .Get() .First() .Primitives .First(p => p.Container != null) .Container; var restored = Surface.Add((DrawingElement)el.Clone(), seg.Position) .ConnectPower() .ConnectSiblings(); } else { seg.Connectors.AddRange(savedSeg.Connectors); } } foreach (var line in saved.PowerLines) { Surface.AddPowerLine(line); } foreach (var seg in Surface.Segments) { var savedSeg = saved.Segments.FirstOrDefault(s => s.Type != ElementType.None && s.Position == seg.Position); if (savedSeg == null) { continue; } seg.Variables.AddRange(savedSeg.Variables); seg.OverrideFunction = savedSeg.OverrideFunction; seg.Function = savedSeg.Function; seg.FunctionText = seg.Type.GetRuleForElement() .GetFormatted(seg); seg.ConnectPower().ConnectSiblings(); } }