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;
}
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));
}
}
}
}
}
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);
}
}
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;
}
}
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;
}
Aggregations