public IList <VisualisedConnection> PositionConnections(CircuitDocument document, LayoutOptions layoutOptions)
        {
            foreach (var wire in document.Wires().ToList())
            {
                document.Elements.Remove(wire);
                document.Elements.Add(WireToComponent(wire));
            }

            // Compute connections
            var connectionPoints      = document.PositionalComponents().SelectMany(x => GetConnectionPoints(x, layoutOptions).Select(c => Tuple.Create(x, c)));
            var connectionsByLocation = connectionPoints.GroupBy(x => x.Item2.Location).Where(x => x.Any(c => c.Item2.IsEdge) && x.Count() > 1).ToList();

            // Connect components
            foreach (var c in connectionsByLocation)
            {
                foreach (var c1 in c)
                {
                    foreach (var c2 in c)
                    {
                        var connection1 = c1.Item1.Connections.GetConnection(c1.Item2.Connection, c1.Item1);
                        var connection2 = c2.Item1.Connections.GetConnection(c2.Item2.Connection, c2.Item1);
                        connection1.ConnectTo(connection2);
                    }
                }
            }

            // Return the connections that the connectionVisualiser indicates should be rendered
            var points = connectionsByLocation
                         .Select(x => new VisualisedConnection
            {
                Connection = x.Select(c => c.Item1.Connections[c.Item2.Connection].Connection).First(),
                Location   = x.Key,
                Render     = VisualiseConnection(x.Select(y => y.Item2).ToList())
            }).ToList();

            foreach (var wire in document.PositionalComponents().Where(x => x.Type == WireType).ToList())
            {
                document.Elements.Remove(wire);
                document.Elements.Add(ComponentToWire(wire));
            }

            return(points);
        }
Beispiel #2
0
        public void RenderCircuit(CircuitDocument circuit, IDrawingContext drawingContext)
        {
            foreach (var component in circuit.PositionalComponents())
            {
                RenderComponent(component, drawingContext, ignoreOffset: false);
            }

            foreach (var wire in circuit.Wires())
            {
                RenderWire(wire, drawingContext);
            }

            var connections = connectionVisualiser.PositionConnections(circuit, new LayoutOptions()
            {
                GridSize = 10.0
            });

            foreach (var connection in connections.Where(x => x.Render).Select(x => x.Location))
            {
                RenderConnection(connection, drawingContext);
            }
        }