Search in sources :

Example 11 with Wire

use of com.cburch.logisim.circuit.Wire in project logisim-evolution by reds-heig.

the class Connector method pruneImpossible.

private static ArrayList<ConnectionData> pruneImpossible(ArrayList<ConnectionData> connects, AvoidanceMap avoid, int dx, int dy) {
    ArrayList<Wire> pathWires = new ArrayList<Wire>();
    for (ConnectionData conn : connects) {
        for (Wire w : conn.getWirePath()) {
            pathWires.add(w);
        }
    }
    ArrayList<ConnectionData> impossible = new ArrayList<ConnectionData>();
    for (Iterator<ConnectionData> it = connects.iterator(); it.hasNext(); ) {
        ConnectionData conn = it.next();
        Location dest = conn.getLocation().translate(dx, dy);
        if (avoid.get(dest) != null) {
            boolean isInPath = false;
            for (Wire w : pathWires) {
                if (w.contains(dest)) {
                    isInPath = true;
                    break;
                }
            }
            if (!isInPath) {
                it.remove();
                impossible.add(conn);
            }
        }
    }
    return impossible;
}
Also used : ArrayList(java.util.ArrayList) Wire(com.cburch.logisim.circuit.Wire) Location(com.cburch.logisim.data.Location)

Example 12 with Wire

use of com.cburch.logisim.circuit.Wire in project logisim-evolution by reds-heig.

the class Connector method processConnection.

private static void processConnection(ConnectionData conn, int dx, int dy, HashSet<Location> connLocs, ArrayList<SearchNode> connNodes, AvoidanceMap selAvoid) {
    Location cur = conn.getLocation();
    Location dest = cur.translate(dx, dy);
    if (selAvoid.get(cur) == null) {
        Direction preferred = conn.getDirection();
        if (preferred == null) {
            if (Math.abs(dx) > Math.abs(dy)) {
                preferred = dx > 0 ? Direction.EAST : Direction.WEST;
            } else {
                preferred = dy > 0 ? Direction.SOUTH : Direction.NORTH;
            }
        }
        connLocs.add(cur);
        connNodes.add(new SearchNode(conn, cur, preferred, dest));
    }
    for (Wire w : conn.getWirePath()) {
        for (Location loc : w) {
            if (selAvoid.get(loc) == null || loc.equals(dest)) {
                boolean added = connLocs.add(loc);
                if (added) {
                    Direction dir = null;
                    if (w.endsAt(loc)) {
                        if (w.isVertical()) {
                            int y0 = loc.getY();
                            int y1 = w.getOtherEnd(loc).getY();
                            dir = y0 < y1 ? Direction.NORTH : Direction.SOUTH;
                        } else {
                            int x0 = loc.getX();
                            int x1 = w.getOtherEnd(loc).getX();
                            dir = x0 < x1 ? Direction.WEST : Direction.EAST;
                        }
                    }
                    connNodes.add(new SearchNode(conn, loc, dir, dest));
                }
            }
        }
    }
}
Also used : Wire(com.cburch.logisim.circuit.Wire) Direction(com.cburch.logisim.data.Direction) Location(com.cburch.logisim.data.Location)

Example 13 with Wire

use of com.cburch.logisim.circuit.Wire in project logisim-evolution by reds-heig.

the class WiringTool method mouseDragged.

@Override
public void mouseDragged(Canvas canvas, Graphics g, MouseEvent e) {
    if (exists) {
        Canvas.snapToGrid(e);
        int curX = e.getX();
        int curY = e.getY();
        if (!computeMove(curX, curY))
            return;
        hasDragged = true;
        Rectangle rect = new Rectangle();
        rect.add(start.getX(), start.getY());
        rect.add(cur.getX(), cur.getY());
        rect.add(curX, curY);
        rect.grow(3, 3);
        cur = Location.create(curX, curY);
        super.mouseDragged(canvas, g, e);
        Wire shorten = null;
        if (startShortening) {
            for (Wire w : canvas.getCircuit().getWires(start)) {
                if (w.contains(cur)) {
                    shorten = w;
                    break;
                }
            }
        }
        if (shorten == null) {
            for (Wire w : canvas.getCircuit().getWires(cur)) {
                if (w.contains(start)) {
                    shorten = w;
                    break;
                }
            }
        }
        shortening = shorten;
        canvas.repaint(rect);
    }
}
Also used : Rectangle(java.awt.Rectangle) Wire(com.cburch.logisim.circuit.Wire)

Example 14 with Wire

use of com.cburch.logisim.circuit.Wire in project logisim-evolution by reds-heig.

the class WiringTool method performShortening.

private boolean performShortening(Canvas canvas, Location drag0, Location drag1) {
    Wire shorten = willShorten(drag0, drag1);
    if (shorten == null) {
        return false;
    } else {
        CircuitMutation xn = new CircuitMutation(canvas.getCircuit());
        StringGetter actName;
        Wire result = getShortenResult(shorten, drag0, drag1);
        if (result == null) {
            xn.remove(shorten);
            actName = Strings.getter("removeComponentAction", shorten.getFactory().getDisplayGetter());
        } else {
            xn.replace(shorten, result);
            actName = Strings.getter("shortenWireAction");
        }
        canvas.getProject().doAction(xn.toAction(actName));
        return true;
    }
}
Also used : CircuitMutation(com.cburch.logisim.circuit.CircuitMutation) Wire(com.cburch.logisim.circuit.Wire) StringGetter(com.cburch.logisim.util.StringGetter)

Example 15 with Wire

use of com.cburch.logisim.circuit.Wire in project logisim-evolution by reds-heig.

the class PortHDLGeneratorFactory method findEndConnection.

private Location findEndConnection(Location start, Circuit circ) {
    Location newLoc = start;
    Collection<Wire> wiresCol = circ.getWires(newLoc);
    Iterator<Wire> wires = wiresCol.iterator();
    if (wiresCol.size() != 1) {
        return null;
    }
    Wire net = null;
    Wire oldNet = null;
    while (wires.hasNext()) {
        net = wires.next();
        if (net != oldNet) {
            newLoc = net.getEnd0().equals(newLoc) ? net.getEnd1() : net.getEnd0();
            wiresCol = circ.getWires(newLoc);
            wires = wiresCol.iterator();
            oldNet = net;
        }
    }
    return newLoc;
}
Also used : Wire(com.cburch.logisim.circuit.Wire) Location(com.cburch.logisim.data.Location)

Aggregations

Wire (com.cburch.logisim.circuit.Wire)24 Location (com.cburch.logisim.data.Location)13 Component (com.cburch.logisim.comp.Component)12 Circuit (com.cburch.logisim.circuit.Circuit)8 ArrayList (java.util.ArrayList)7 ComponentFactory (com.cburch.logisim.comp.ComponentFactory)4 HashSet (java.util.HashSet)4 CircuitMutation (com.cburch.logisim.circuit.CircuitMutation)3 SubcircuitFactory (com.cburch.logisim.circuit.SubcircuitFactory)3 AttributeSet (com.cburch.logisim.data.AttributeSet)3 Direction (com.cburch.logisim.data.Direction)3 EndData (com.cburch.logisim.comp.EndData)2 Bounds (com.cburch.logisim.data.Bounds)2 Selection (com.cburch.logisim.gui.main.Selection)2 InstanceComponent (com.cburch.logisim.instance.InstanceComponent)2 Action (com.cburch.logisim.proj.Action)2 Project (com.cburch.logisim.proj.Project)2 Pin (com.cburch.logisim.std.wiring.Pin)2 StringGetter (com.cburch.logisim.util.StringGetter)2 Graphics (java.awt.Graphics)2