示例#1
0
        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();
            }
        }