private void ClearCircuit()
        {
            foreach (var visual in ElementVisuals)
            {
                RemoveVisualChild(visual.Value);
                RemoveLogicalChild(visual.Value);
            }
            ElementVisuals.Clear();

            foreach (var visual in HighlightBoxVisuals)
            {
                RemoveVisualChild(visual.Value);
                RemoveLogicalChild(visual.Value);
            }
            HighlightBoxVisuals.Clear();
        }
        protected void RenderCircuit()
        {
            if (DescriptionLookup == null)
            {
                return;
            }

            ClearCircuit();

            if (Circuit == null)
            {
                return;
            }

            // Add ElementVisuals
            foreach (var element in Circuit.PositionalComponents)
            {
                var renderer = new CircuitRenderer(DescriptionLookup);
                var visual   = new ElementDrawingVisual(renderer, element);
                ElementVisuals.Add(element, visual);
                AddChild(visual);
            }

            // Add HighlightVisuals
            foreach (var elementVisual in ElementVisuals)
            {
                var visual = new ElementHighlightBoxVisual(elementVisual.Value)
                {
                    Opacity = 0.0
                };
                HighlightBoxVisuals.Add(elementVisual.Key, visual);
                AddChild(visual);
            }

            RenderConnections();
        }