diff --git a/diylc/diylc-core/src/org/diylc/common/PCBLayer.java b/diylc/diylc-core/src/org/diylc/common/PCBLayer.java index 4b8ffcad..c5e97460 100644 --- a/diylc/diylc-core/src/org/diylc/common/PCBLayer.java +++ b/diylc/diylc-core/src/org/diylc/common/PCBLayer.java @@ -27,5 +27,9 @@ public enum PCBLayer { public String toString() { return name().substring(1); - }; + }; + + public int getId() { + return Integer.parseInt(toString()); + } } diff --git a/diylc/diylc-core/src/org/diylc/core/IDrawingObserver.java b/diylc/diylc-core/src/org/diylc/core/IDrawingObserver.java index c7e69562..88541a3e 100644 --- a/diylc/diylc-core/src/org/diylc/core/IDrawingObserver.java +++ b/diylc/diylc-core/src/org/diylc/core/IDrawingObserver.java @@ -42,9 +42,10 @@ public interface IDrawingObserver { /** * Notifies the observer that it should start tracking conductive continuity areas. * + * @param layerId id of the layer * @param positive designates if the area should be additive or subtractive */ - void startTrackingContinuityArea(boolean positive); + void startTrackingContinuityArea(int layerId, boolean positive); /** * Notifies the observer that it should stop tracking conductive continuity areas. diff --git a/diylc/diylc-core/src/org/diylc/presenter/ComponentArea.java b/diylc/diylc-core/src/org/diylc/presenter/ComponentArea.java index c6140807..85e598a1 100644 --- a/diylc/diylc-core/src/org/diylc/presenter/ComponentArea.java +++ b/diylc/diylc-core/src/org/diylc/presenter/ComponentArea.java @@ -32,15 +32,17 @@ public class ComponentArea implements Serializable { private Area outlineArea; private Collection continuityPositiveAreas; private Collection continuityNegativeAreas; + private int layerId; public ComponentArea() { } - public ComponentArea(Area outlineArea, Collection continuityPositiveAreas, Collection continuityNegativeAreas) { + public ComponentArea(Area outlineArea, Collection continuityPositiveAreas, Collection continuityNegativeAreas, int layerId) { super(); this.outlineArea = outlineArea; this.continuityPositiveAreas = continuityPositiveAreas; this.continuityNegativeAreas = continuityNegativeAreas; + this.layerId = layerId; } public Area getOutlineArea() { @@ -54,4 +56,8 @@ public class ComponentArea implements Serializable { public Collection getContinuityNegativeAreas() { return continuityNegativeAreas; } + + public int getLayerId() { + return layerId; + } } diff --git a/diylc/diylc-core/src/org/diylc/presenter/DrawingCache.java b/diylc/diylc-core/src/org/diylc/presenter/DrawingCache.java index 357d8cf2..ff4c759d 100644 --- a/diylc/diylc-core/src/org/diylc/presenter/DrawingCache.java +++ b/diylc/diylc-core/src/org/diylc/presenter/DrawingCache.java @@ -134,7 +134,7 @@ public class DrawingCache { stats.getSecond().add(componentEnd - componentStart); // copy over tracking area from the cache, regardless if we rendered or not - g2d.merge(value.getCurrentArea(), value.getContinuityPositiveAreas(), value.getContinuityNegativeAreas()); + g2d.merge(value.getCurrentArea(), value.getContinuityPositiveAreas(), value.getContinuityNegativeAreas(), value.getLayerId()); } else { // no caching, just draw as usual component.draw(g2d, componentState, outlineMode, project, g2d); @@ -264,7 +264,7 @@ public class DrawingCache { // add to the cache value = new CacheValue(component, image, wrapper.getCurrentArea(), wrapper.getContinuityPositiveAreas(), - wrapper.getContinuityNegativeAreas(), componentState, outlineMode, zoom, dx, dy, rect); + wrapper.getContinuityNegativeAreas(), wrapper.getLayerId(), componentState, outlineMode, zoom, dx, dy, rect); imageCache.put(component, new SoftReference(value)); } @@ -283,11 +283,13 @@ public class DrawingCache { int dx; int dy; Rectangle2D cacheBounds; + int layerId; public CacheValue(IDIYComponent component, BufferedImage image, Area currentArea, - Map continuityPositiveAreas, Map continuityNegativeAreas, + Map continuityPositiveAreas, Map continuityNegativeAreas, int layerId, ComponentState state, boolean outlineMode, double zoom, int dx, int dy, Rectangle2D cacheBounds) { super(); + this.layerId = layerId; this.cacheBounds = cacheBounds; // take a copy of the component, so we can check if it changed in the meantime try { @@ -324,6 +326,10 @@ public class DrawingCache { public Map getContinuityNegativeAreas() { return continuityNegativeAreas; } + + public int getLayerId() { + return layerId; + } public ComponentState getState() { return state; diff --git a/diylc/diylc-core/src/org/diylc/presenter/DrawingManager.java b/diylc/diylc-core/src/org/diylc/presenter/DrawingManager.java index 55c08180..7a3910e8 100644 --- a/diylc/diylc-core/src/org/diylc/presenter/DrawingManager.java +++ b/diylc/diylc-core/src/org/diylc/presenter/DrawingManager.java @@ -684,23 +684,22 @@ public class DrawingManager { messageDispatcher.dispatchMessage(EventType.REPAINT); } - public void findContinuityAreaAtPoint(Project project, Point2D p) { + public void findContinuityAreaAtPoint(Point2D p) { if (continuityGraphCache == null) - continuityGraphCache = getContinuityGraph(project); + continuityGraphCache = getContinuityGraph(); currentContinuityAreas = continuityGraphCache.findAreasFor(p); } - public List getContinuityAreas(Project project) { + public List getContinuityAreas() { // Find all individual continuity areas for all components List preliminaryAreas = new ArrayList(); List checkBreakout = new ArrayList(); - for (IDIYComponent c : project.getComponents()) { - ComponentArea a = getComponentArea(c); - + for (ComponentArea a : this.componentAreaMap.values()) { if (a == null || a.getOutlineArea() == null) continue; + Collection positiveAreas = a.getContinuityPositiveAreas(); if (positiveAreas != null) for (Area a1 : positiveAreas) { @@ -733,9 +732,9 @@ public class DrawingManager { return areas; } - public ContinuityGraph getContinuityGraph(Project project) { + public ContinuityGraph getContinuityGraph() { Set connections = new HashSet(); - for (IDIYComponent c : project.getComponents()) { + for (IDIYComponent c : this.componentAreaMap.keySet()) { if (c instanceof IContinuity) { for (int i = 0; i < c.getControlPointCount() - 1; i++) for (int j = i + 1; j < c.getControlPointCount(); j++) @@ -744,13 +743,13 @@ public class DrawingManager { } } - List areas = getContinuityAreas(project); + List areas = getContinuityAreas(); return NetlistBuilder.buildContinuityGraph(areas, connections); } - public List getContinuityAreaProximity(Project project, float threshold) { - List continuityAreas = getContinuityAreas(project); + public List getContinuityAreaProximity(float threshold) { + List continuityAreas = getContinuityAreas(); Stroke s = ObjectCache.getInstance().fetchBasicStroke(threshold - 1); // value eyeballed for // approx good results List expanded = continuityAreas.parallelStream() diff --git a/diylc/diylc-core/src/org/diylc/presenter/G2DWrapper.java b/diylc/diylc-core/src/org/diylc/presenter/G2DWrapper.java index 3122828e..2b2e995f 100644 --- a/diylc/diylc-core/src/org/diylc/presenter/G2DWrapper.java +++ b/diylc/diylc-core/src/org/diylc/presenter/G2DWrapper.java @@ -82,6 +82,7 @@ class G2DWrapper extends Graphics2D implements IDrawingObserver { private boolean drawingComponent = false; private boolean trackingAllowed = true; + private int layerId; private boolean trackingContinuityAllowed = false; private boolean trackingContinuityPositive = true; @@ -103,7 +104,7 @@ class G2DWrapper extends Graphics2D implements IDrawingObserver { private String continuityMarker; private Shape lastShape; - private double zoom; + private double zoom; /** * Creates a wrapper around specified {@link Graphics2D} object. @@ -133,6 +134,7 @@ class G2DWrapper extends Graphics2D implements IDrawingObserver { currentArea = new Area(); continuityPositiveAreas = new HashMap(); continuityNegativeAreas = new HashMap(); + layerId = 0; // trackingStacks.clear(); continuityMarker = null; originalStroke = canvasGraphics.getStroke(); @@ -159,7 +161,8 @@ class G2DWrapper extends Graphics2D implements IDrawingObserver { canvasGraphics.setComposite(originalComposite); canvasGraphics.setFont(originalFont); // Map sorted = sortByComparator(trackingStacks, false); - return new ComponentArea(currentArea, new ArrayList(continuityPositiveAreas.values()), new ArrayList(continuityNegativeAreas.values())); + return new ComponentArea(currentArea, new ArrayList(continuityPositiveAreas.values()), + new ArrayList(continuityNegativeAreas.values()), layerId); } // start - used for caching @@ -176,12 +179,18 @@ class G2DWrapper extends Graphics2D implements IDrawingObserver { return continuityNegativeAreas; } + public int getLayerId() { + return layerId; + } + // end - used for caching - public void merge(Area currentArea, Map continuityPositiveAreas, Map continuityNegativeAreas) { + public void merge(Area currentArea, Map continuityPositiveAreas, + Map continuityNegativeAreas, int layerId) { this.currentArea = currentArea; this.continuityPositiveAreas = continuityPositiveAreas; this.continuityNegativeAreas = continuityNegativeAreas; + this.layerId = layerId; } @Override @@ -195,7 +204,8 @@ class G2DWrapper extends Graphics2D implements IDrawingObserver { } @Override - public void startTrackingContinuityArea(boolean positive) { + public void startTrackingContinuityArea(int layerId, boolean positive) { + this.layerId = layerId; this.trackingContinuityAllowed = true; this.trackingContinuityPositive = positive; } diff --git a/diylc/diylc-core/src/org/diylc/presenter/Presenter.java b/diylc/diylc-core/src/org/diylc/presenter/Presenter.java index 481f4d1d..d6da258b 100644 --- a/diylc/diylc-core/src/org/diylc/presenter/Presenter.java +++ b/diylc/diylc-core/src/org/diylc/presenter/Presenter.java @@ -680,7 +680,7 @@ public class Presenter implements IPlugInPort { projectFileManager.notifyFileChange(); } } else if (configManager.readBoolean(HIGHLIGHT_CONTINUITY_AREA, false) || altDown) { - drawingManager.findContinuityAreaAtPoint(currentProject, scaledPoint); + drawingManager.findContinuityAreaAtPoint(scaledPoint); messageDispatcher.dispatchMessage(EventType.REPAINT); } else { List> newSelection = new ArrayList>(selectedComponents); @@ -2809,7 +2809,7 @@ public class Presenter implements IPlugInPort { @Override public List extractNetlists(boolean includeSwitches) throws NetlistException { - List continuityAreas = drawingManager.getContinuityAreas(currentProject); + List continuityAreas = drawingManager.getContinuityAreas(); return NetlistBuilder.extractNetlists(includeSwitches, currentProject, continuityAreas); } @@ -2874,11 +2874,12 @@ public class Presenter implements IPlugInPort { ComponentArea componentArea = drawingManager.getComponentArea(c); areas.put(c, componentArea); } - return new Snapshot(currentProject.clone(), new HashSet>(selectedComponents), areas, new HashSet(drawingManager.getContinuityAreas(currentProject))); + return new Snapshot(currentProject.clone(), new HashSet>(selectedComponents), areas, + new HashSet(drawingManager.getContinuityAreas())); } @Override public List checkContinuityAreaProximity(Size threshold) { - return drawingManager.getContinuityAreaProximity(this.currentProject, (float)threshold.convertToPixels()); + return drawingManager.getContinuityAreaProximity((float)threshold.convertToPixels()); } } diff --git a/diylc/diylc-library/lib/diylc-core.jar b/diylc/diylc-library/lib/diylc-core.jar index 2754ec2f..7b577c72 100644 Binary files a/diylc/diylc-library/lib/diylc-core.jar and b/diylc/diylc-library/lib/diylc-core.jar differ diff --git a/diylc/diylc-library/src/org/diylc/components/AbstractLeadedComponent.java b/diylc/diylc-library/src/org/diylc/components/AbstractLeadedComponent.java index d0019b2d..8eda0b8b 100644 --- a/diylc/diylc-library/src/org/diylc/components/AbstractLeadedComponent.java +++ b/diylc/diylc-library/src/org/diylc/components/AbstractLeadedComponent.java @@ -110,10 +110,14 @@ public abstract class AbstractLeadedComponent extends AbstractLabeledComponen points[1] = new Point2D.Double(targetSize / 2, 0); } - protected boolean IsCopperArea() { + protected boolean isCopperArea() { return false; } + protected int getLayerId() { + return 0; + } + protected Point2D[] getPoints() { // convert old points to new if (points.length == 2) { @@ -149,7 +153,7 @@ public abstract class AbstractLeadedComponent extends AbstractLabeledComponen Shape shape = getBodyShape(); // If there's no body, just draw the line connecting the ending points. if (shape == null) { - drawLead(g2d, componentState, drawingObserver, IsCopperArea()); + drawLead(g2d, componentState, drawingObserver, isCopperArea()); return; } @@ -415,7 +419,7 @@ public abstract class AbstractLeadedComponent extends AbstractLabeledComponen private void drawLead(Graphics2D g2d, ComponentState componentState, IDrawingObserver observer, boolean isCopperArea) { if (isCopperArea) - observer.startTrackingContinuityArea(true); + observer.startTrackingContinuityArea(getLayerId(), true); float thickness = getLeadThickness(); diff --git a/diylc/diylc-library/src/org/diylc/components/boards/Breadboard.java b/diylc/diylc-library/src/org/diylc/components/boards/Breadboard.java index 00104e2e..b36191ae 100644 --- a/diylc/diylc-library/src/org/diylc/components/boards/Breadboard.java +++ b/diylc/diylc-library/src/org/diylc/components/boards/Breadboard.java @@ -195,7 +195,7 @@ public class Breadboard extends AbstractProtoBoard { } // draw transparent connections just to designate connections - drawingObserver.startTrackingContinuityArea(true); + drawingObserver.startTrackingContinuityArea(1, true); Composite oldComposite = g2d.getComposite(); g2d.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_OVER, 0.0f)); diff --git a/diylc/diylc-library/src/org/diylc/components/boards/EurorackStripboard.java b/diylc/diylc-library/src/org/diylc/components/boards/EurorackStripboard.java index be101842..b34e306c 100644 --- a/diylc/diylc-library/src/org/diylc/components/boards/EurorackStripboard.java +++ b/diylc/diylc-library/src/org/diylc/components/boards/EurorackStripboard.java @@ -380,7 +380,7 @@ public class EurorackStripboard extends AbstractProtoBoard { int padX = (int) (x0 + (segment.x + i) * spacing); int padY = (int) (y0 + (segment.y + j) * spacing); - drawingObserver.startTrackingContinuityArea(true); + drawingObserver.startTrackingContinuityArea(1, true); drawingObserver.setContinuityMarker(segment.label); g2d.setColor(padColor); @@ -432,7 +432,7 @@ public class EurorackStripboard extends AbstractProtoBoard { int padX = (int) (x0 + potPad.x * spacing); int padY = (int) (y0 + (potPad.y + 8 * i) * spacing); - drawingObserver.startTrackingContinuityArea(true); + drawingObserver.startTrackingContinuityArea(1, true); drawingObserver.setContinuityMarker(potPad.label + i); g2d.setColor(padColor); @@ -483,7 +483,7 @@ public class EurorackStripboard extends AbstractProtoBoard { int padX = (int) (x0 + potPad.x * spacing); int padY = (int) (y0 + potPad.y * spacing); - drawingObserver.startTrackingContinuityArea(true); + drawingObserver.startTrackingContinuityArea(1, true); drawingObserver.setContinuityMarker(potPad.label); g2d.setColor(padColor); @@ -513,7 +513,7 @@ public class EurorackStripboard extends AbstractProtoBoard { int padX = (int) (x0 + (6.5 + i) * spacing); int padY = (int) (y0 + (36 + j) * spacing); - drawingObserver.startTrackingContinuityArea(true); + drawingObserver.startTrackingContinuityArea(1, true); drawingObserver.setContinuityMarker(connectorLabels[i]); g2d.setColor(padColor); @@ -543,7 +543,7 @@ public class EurorackStripboard extends AbstractProtoBoard { int padX = (int) (x0 + (17) * spacing); int padY = (int) (y0 + 35.5 * spacing); - drawingObserver.startTrackingContinuityArea(true); + drawingObserver.startTrackingContinuityArea(1, true); drawingObserver.setContinuityMarker("GND"); g2d.setColor(padColor); diff --git a/diylc/diylc-library/src/org/diylc/components/boards/ProtoBoard.java b/diylc/diylc-library/src/org/diylc/components/boards/ProtoBoard.java index d34fb7fe..76f941b1 100644 --- a/diylc/diylc-library/src/org/diylc/components/boards/ProtoBoard.java +++ b/diylc/diylc-library/src/org/diylc/components/boards/ProtoBoard.java @@ -140,7 +140,7 @@ public class ProtoBoard extends AbstractProtoBoard { g2d.setColor(traceColor); g2d.setStroke(ObjectCache.getInstance().fetchBasicStroke(padSize / 4)); - drawingObserver.startTrackingContinuityArea(true); + drawingObserver.startTrackingContinuityArea(1, true); // draw segment connectors for (int y = 0; y < ROW_COUNT; y++) { @@ -223,7 +223,7 @@ public class ProtoBoard extends AbstractProtoBoard { // draw top mini pad traces g2d.setColor(traceColor); g2d.setStroke(ObjectCache.getInstance().fetchBasicStroke(padSize / 4)); - drawingObserver.startTrackingContinuityArea(true); + drawingObserver.startTrackingContinuityArea(1, true); g2d.drawLine((int) (point.getX() + (1 + SEGMENTS_SUM[3] + 0.5) * spacing), (int) (point.getY() + 1 * spacing), (int) (point.getX() + (1 + SEGMENTS_SUM[3] + 0.5) * spacing), (int) (point.getY() + 3.5 * spacing)); g2d.drawLine((int) (point.getX() + (1 + SEGMENTS_SUM[3] + 1.5) * spacing + miniPadSize / 2), (int) (point.getY() + 1 * spacing), @@ -255,7 +255,7 @@ public class ProtoBoard extends AbstractProtoBoard { int padX = (int) (point.getX() + (xOffset + x) * spacing); int padY = (int) (point.getY() + (yOffset + y) * spacing); - drawingObserver.startTrackingContinuityArea(true); + drawingObserver.startTrackingContinuityArea(1, true); drawingObserver.setContinuityMarker("SEGMENT=" + segment + ";ROW=" + y); g2d.setColor(padColor); @@ -295,7 +295,7 @@ public class ProtoBoard extends AbstractProtoBoard { g2d.drawRect((int) (point.getX() + (1 + SEGMENTS_SUM[3]) * spacing), (int) (point.getY() + (yOffset - 2 + y * (ROW_COUNT + 2)) * spacing), (int)(3 * spacing), (int)spacing); - drawingObserver.startTrackingContinuityArea(true); + drawingObserver.startTrackingContinuityArea(1, true); for (int x = 0; x < 3; x++) { int padX = (int) (point.getX() + (1 + SEGMENTS_SUM[3] + 0.5 + x) * spacing); @@ -344,7 +344,7 @@ public class ProtoBoard extends AbstractProtoBoard { g2d.setColor(traceColor); g2d.setStroke(ObjectCache.getInstance().fetchBasicStroke(padSize / 4)); - drawingObserver.startTrackingContinuityArea(true); + drawingObserver.startTrackingContinuityArea(1, true); // Draw two horizontal traces in the top-right section g2d.drawLine((int) (point.getX() + width - 4 * spacing), (int) (point.getY() + 0.5 * spacing), (int) (point.getX() + width - (2) * spacing), (int) (point.getY() + 0.5 * spacing)); @@ -403,7 +403,7 @@ public class ProtoBoard extends AbstractProtoBoard { for (int i = 0; i < padXs.length; i++) { int padX = padXs[i]; - drawingObserver.startTrackingContinuityArea(true); + drawingObserver.startTrackingContinuityArea(1, true); if (i == 0 || i == 2 || i == 5) { switch (y) { @@ -473,7 +473,7 @@ public class ProtoBoard extends AbstractProtoBoard { for (int y = 0; y < ROW_COUNT; y++) { g2d.setColor(padColor); - drawingObserver.startTrackingContinuityArea(true); + drawingObserver.startTrackingContinuityArea(1, true); // top row g2d.fillRect((int) (point.getX() + (1 + SEGMENTS_SUM[3] + 0.5) * spacing) + 1, (int) (point.getY() + (yOffset + y - 0.5d) * spacing + 2), miniPadSize, miniPadSize); @@ -492,7 +492,7 @@ public class ProtoBoard extends AbstractProtoBoard { g2d.setColor(undersidePadColor); - drawingObserver.startTrackingContinuityArea(true); + drawingObserver.startTrackingContinuityArea(1, true); // bottom row diff --git a/diylc/diylc-library/src/org/diylc/components/boards/TagStrip.java b/diylc/diylc-library/src/org/diylc/components/boards/TagStrip.java index 7d4f54d1..9405ac07 100644 --- a/diylc/diylc-library/src/org/diylc/components/boards/TagStrip.java +++ b/diylc/diylc-library/src/org/diylc/components/boards/TagStrip.java @@ -302,7 +302,7 @@ public class TagStrip extends AbstractTransparentComponent implements IC g2d.draw(mainArea); g2d.setColor(outlineMode ? Constants.TRANSPARENT_COLOR : TERMINAL_COLOR); - drawingObserver.startTrackingContinuityArea(true); + drawingObserver.startTrackingContinuityArea(1, true); for (int i = 1; i < body.length; i++) g2d.fill(body[i]); drawingObserver.stopTrackingContinuityArea(); diff --git a/diylc/diylc-library/src/org/diylc/components/boards/TerminalStrip.java b/diylc/diylc-library/src/org/diylc/components/boards/TerminalStrip.java index 713a2814..8d066a7f 100644 --- a/diylc/diylc-library/src/org/diylc/components/boards/TerminalStrip.java +++ b/diylc/diylc-library/src/org/diylc/components/boards/TerminalStrip.java @@ -379,7 +379,7 @@ public class TerminalStrip extends AbstractTransparentComponent implemen g2d.draw(mainArea); g2d.setColor(outlineMode ? Constants.TRANSPARENT_COLOR : TERMINAL_COLOR); - drawingObserver.startTrackingContinuityArea(true); + drawingObserver.startTrackingContinuityArea(1, true); for (int i = 1; i < body.length; i++) g2d.fill(body[i]); drawingObserver.stopTrackingContinuityArea(); diff --git a/diylc/diylc-library/src/org/diylc/components/boards/TriPadBoard.java b/diylc/diylc-library/src/org/diylc/components/boards/TriPadBoard.java index 6c3fe623..fd0add0d 100644 --- a/diylc/diylc-library/src/org/diylc/components/boards/TriPadBoard.java +++ b/diylc/diylc-library/src/org/diylc/components/boards/TriPadBoard.java @@ -84,7 +84,7 @@ public class TriPadBoard extends AbstractVeroBoard { } g2d.setColor(stripColor); - drawingObserver.startTrackingContinuityArea(true); + drawingObserver.startTrackingContinuityArea(1, true); g2d.fillRect((int)(x + spacing - stripSize / 2), (int)(y - stripSize / 2), (int)(spacing * (spacesToDraw - 1) + stripSize), stripSize); drawingObserver.stopTrackingContinuityArea(); @@ -122,7 +122,7 @@ public class TriPadBoard extends AbstractVeroBoard { } g2d.setColor(stripColor); - drawingObserver.startTrackingContinuityArea(true); + drawingObserver.startTrackingContinuityArea(1, true); g2d.fillRect((int)(x - stripSize / 2), (int)(y + spacing - stripSize / 2), stripSize, (int)(spacing * (spacesToDraw - 1) + stripSize)); drawingObserver.stopTrackingContinuityArea(); diff --git a/diylc/diylc-library/src/org/diylc/components/boards/VeroBoard.java b/diylc/diylc-library/src/org/diylc/components/boards/VeroBoard.java index 5d8cd16c..7eaec203 100644 --- a/diylc/diylc-library/src/org/diylc/components/boards/VeroBoard.java +++ b/diylc/diylc-library/src/org/diylc/components/boards/VeroBoard.java @@ -73,7 +73,7 @@ public class VeroBoard extends AbstractVeroBoard { x = firstPoint.getX(); y += spacing; g2d.setColor(stripColor); - drawingObserver.startTrackingContinuityArea(true); + drawingObserver.startTrackingContinuityArea(1, true); g2d.fillRect((int)(x + spacing / 2), (int)(y - stripSize / 2), (int)(finalSecondPoint.getX() - spacing - x), stripSize); drawingObserver.stopTrackingContinuityArea(); g2d.setColor(stripColor.darker()); @@ -91,7 +91,7 @@ public class VeroBoard extends AbstractVeroBoard { x += spacing; y = firstPoint.getY(); g2d.setColor(stripColor); - drawingObserver.startTrackingContinuityArea(true); + drawingObserver.startTrackingContinuityArea(1, true); g2d.fillRect((int)(x - stripSize / 2), (int)(y + spacing / 2), stripSize, (int)(finalSecondPoint.getY() - spacing - y)); drawingObserver.stopTrackingContinuityArea(); g2d.setColor(stripColor.darker()); diff --git a/diylc/diylc-library/src/org/diylc/components/connectivity/CopperTrace.java b/diylc/diylc-library/src/org/diylc/components/connectivity/CopperTrace.java index 70cc903c..f1ea95eb 100644 --- a/diylc/diylc-library/src/org/diylc/components/connectivity/CopperTrace.java +++ b/diylc/diylc-library/src/org/diylc/components/connectivity/CopperTrace.java @@ -158,10 +158,15 @@ public class CopperTrace extends AbstractLeadedComponent { } @Override - protected boolean IsCopperArea() { + protected boolean isCopperArea() { return true; } + @Override + protected int getLayerId() { + return getLayer().getId(); + } + @Override public String getControlPointNodeName(int index) { return null; diff --git a/diylc/diylc-library/src/org/diylc/components/connectivity/CurvedTrace.java b/diylc/diylc-library/src/org/diylc/components/connectivity/CurvedTrace.java index ff3930b1..22a18845 100644 --- a/diylc/diylc-library/src/org/diylc/components/connectivity/CurvedTrace.java +++ b/diylc/diylc-library/src/org/diylc/components/connectivity/CurvedTrace.java @@ -63,7 +63,7 @@ public class CurvedTrace extends AbstractCurvedComponent { componentState == ComponentState.SELECTED || componentState == ComponentState.DRAGGING ? SELECTION_COLOR : color; g2d.setColor(curveColor); - drawingObserver.startTrackingContinuityArea(true); + drawingObserver.startTrackingContinuityArea(getLayer().getId(), true); g2d.draw(curve); drawingObserver.stopTrackingContinuityArea(); } diff --git a/diylc/diylc-library/src/org/diylc/components/connectivity/Eyelet.java b/diylc/diylc-library/src/org/diylc/components/connectivity/Eyelet.java index baae3e09..3a80271d 100644 --- a/diylc/diylc-library/src/org/diylc/components/connectivity/Eyelet.java +++ b/diylc/diylc-library/src/org/diylc/components/connectivity/Eyelet.java @@ -72,7 +72,7 @@ public class Eyelet extends AbstractComponent { int holeDiameter = getClosestOdd((int) holeSize.convertToPixels()); g2d.setStroke(ObjectCache.getInstance().fetchBasicStroke(1f)); g2d.setColor(color); - drawingObserver.startTrackingContinuityArea(true); + drawingObserver.startTrackingContinuityArea(1, true); g2d.fillOval((int)(point.getX() - diameter / 2), (int)(point.getY() - diameter / 2), diameter, diameter); drawingObserver.stopTrackingContinuityArea(); g2d.setColor(componentState == ComponentState.SELECTED || componentState == ComponentState.DRAGGING ? SELECTION_COLOR diff --git a/diylc/diylc-library/src/org/diylc/components/connectivity/GroundFill.java b/diylc/diylc-library/src/org/diylc/components/connectivity/GroundFill.java index 5e1f11eb..b852f04d 100644 --- a/diylc/diylc-library/src/org/diylc/components/connectivity/GroundFill.java +++ b/diylc/diylc-library/src/org/diylc/components/connectivity/GroundFill.java @@ -73,7 +73,7 @@ public class GroundFill extends AbstractComponent { xPoints[i] = (int)controlPoints[i].getX(); yPoints[i] = (int)controlPoints[i].getY(); } - drawingObserver.startTrackingContinuityArea(true); + drawingObserver.startTrackingContinuityArea(getLayer().getId(), true); g2d.fillPolygon(xPoints, yPoints, controlPoints.length); drawingObserver.stopTrackingContinuityArea(); // Do not track any changes that follow because the whole board has been diff --git a/diylc/diylc-library/src/org/diylc/components/connectivity/SolderPad.java b/diylc/diylc-library/src/org/diylc/components/connectivity/SolderPad.java index fb265cdd..d275c7d0 100644 --- a/diylc/diylc-library/src/org/diylc/components/connectivity/SolderPad.java +++ b/diylc/diylc-library/src/org/diylc/components/connectivity/SolderPad.java @@ -69,7 +69,7 @@ public class SolderPad extends AbstractComponent { double holeDiameter = getHoleSize().convertToPixels(); g2d.setColor(componentState == ComponentState.SELECTED || componentState == ComponentState.DRAGGING ? SELECTION_COLOR : color); - drawingObserver.startTrackingContinuityArea(true); + drawingObserver.startTrackingContinuityArea(getLayer().getId(), true); if (type == Type.ROUND) { g2d.fill(new Ellipse2D.Double(point.getX() - diameter / 2, point.getY() - diameter / 2, diameter, diameter)); } else if (type == Type.OVAL_HORIZONTAL) { diff --git a/diylc/diylc-library/src/org/diylc/components/connectivity/TraceCut.java b/diylc/diylc-library/src/org/diylc/components/connectivity/TraceCut.java index e9603ccb..aa10222d 100644 --- a/diylc/diylc-library/src/org/diylc/components/connectivity/TraceCut.java +++ b/diylc/diylc-library/src/org/diylc/components/connectivity/TraceCut.java @@ -84,7 +84,7 @@ public class TraceCut extends AbstractComponent { int holeSpacing = getClosestOdd(getHoleSpacing().convertToPixels()); g2d.setColor(componentState == ComponentState.SELECTED || componentState == ComponentState.DRAGGING ? SELECTION_COLOR : getBoardColor()); - drawingObserver.startTrackingContinuityArea(false); + drawingObserver.startTrackingContinuityArea(1, false); if (getOrientation() == OrientationHV.VERTICAL) g2d.fillRect((int)(point.getX() - holeSpacing / 2 - cutWidth / 2), (int)(point.getY() - size / 2 - 1), cutWidth, size + 2); else @@ -93,7 +93,7 @@ public class TraceCut extends AbstractComponent { } else { g2d.setColor(componentState == ComponentState.SELECTED || componentState == ComponentState.DRAGGING ? SELECTION_COLOR : getBoardColor()); - drawingObserver.startTrackingContinuityArea(false); + drawingObserver.startTrackingContinuityArea(1, false); g2d.fillRoundRect((int)(point.getX() - size / 2), (int)(point.getY() - size / 2), size, size, size, size); drawingObserver.stopTrackingContinuityArea(); diff --git a/diylc/diylc-library/src/org/diylc/components/connectivity/Turret.java b/diylc/diylc-library/src/org/diylc/components/connectivity/Turret.java index ebdc300d..41351e4d 100644 --- a/diylc/diylc-library/src/org/diylc/components/connectivity/Turret.java +++ b/diylc/diylc-library/src/org/diylc/components/connectivity/Turret.java @@ -70,7 +70,7 @@ public class Turret extends AbstractComponent { int holeDiameter = getClosestOdd((int) holeSize.convertToPixels()); g2d.setColor(color); g2d.setStroke(ObjectCache.getInstance().fetchZoomableStroke(1f)); - drawingObserver.startTrackingContinuityArea(true); + drawingObserver.startTrackingContinuityArea(1, true); g2d.fillOval((int)(point.getX() - diameter / 2), (int)(point.getY() - diameter / 2), diameter, diameter); drawingObserver.stopTrackingContinuityArea(); g2d.setColor(componentState == ComponentState.SELECTED || componentState == ComponentState.DRAGGING ? SELECTION_COLOR diff --git a/diylc/diylc-library/src/org/diylc/components/electromechanical/OpenJack1_4.java b/diylc/diylc-library/src/org/diylc/components/electromechanical/OpenJack1_4.java index e3daae3e..2df221f8 100644 --- a/diylc/diylc-library/src/org/diylc/components/electromechanical/OpenJack1_4.java +++ b/diylc/diylc-library/src/org/diylc/components/electromechanical/OpenJack1_4.java @@ -127,7 +127,7 @@ public class OpenJack1_4 extends AbstractMultiPartComponent { } g2d.setColor(outlineMode ? Constants.TRANSPARENT_COLOR : BASE_COLOR); - drawingObserver.startTrackingContinuityArea(true); + drawingObserver.startTrackingContinuityArea(hashCode(), true); g2d.fill(body[1]); g2d.fill(body[2]); if (body[3] != null) diff --git a/diylc/diylc-library/src/org/diylc/components/electromechanical/OpenJack1_8.java b/diylc/diylc-library/src/org/diylc/components/electromechanical/OpenJack1_8.java index e7b08966..28bafb7c 100644 --- a/diylc/diylc-library/src/org/diylc/components/electromechanical/OpenJack1_8.java +++ b/diylc/diylc-library/src/org/diylc/components/electromechanical/OpenJack1_8.java @@ -127,7 +127,7 @@ public class OpenJack1_8 extends AbstractMultiPartComponent { } g2d.setColor(outlineMode ? Constants.TRANSPARENT_COLOR : BASE_COLOR); - drawingObserver.startTrackingContinuityArea(true); + drawingObserver.startTrackingContinuityArea(hashCode(), true); g2d.fill(body[1]); g2d.fill(body[2]); if (body[3] != null) diff --git a/diylc/diylc-library/src/org/diylc/components/electromechanical/PilotLampHolder.java b/diylc/diylc-library/src/org/diylc/components/electromechanical/PilotLampHolder.java index 7633bb65..495e41cf 100644 --- a/diylc/diylc-library/src/org/diylc/components/electromechanical/PilotLampHolder.java +++ b/diylc/diylc-library/src/org/diylc/components/electromechanical/PilotLampHolder.java @@ -123,7 +123,7 @@ public class PilotLampHolder extends AbstractMultiPartComponent { } g2d.setColor(outlineMode ? Constants.TRANSPARENT_COLOR : BASE_COLOR); - drawingObserver.startTrackingContinuityArea(true); + drawingObserver.startTrackingContinuityArea(hashCode(), true); g2d.fill(body[3]); g2d.fill(body[4]); diff --git a/diylc/diylc-library/src/org/diylc/components/electromechanical/RCAJack.java b/diylc/diylc-library/src/org/diylc/components/electromechanical/RCAJack.java index c8d0d0bb..67265198 100644 --- a/diylc/diylc-library/src/org/diylc/components/electromechanical/RCAJack.java +++ b/diylc/diylc-library/src/org/diylc/components/electromechanical/RCAJack.java @@ -114,7 +114,7 @@ public class RCAJack extends AbstractMultiPartComponent { } g2d.setColor(outlineMode ? Constants.TRANSPARENT_COLOR : BASE_COLOR); - drawingObserver.startTrackingContinuityArea(true); + drawingObserver.startTrackingContinuityArea(hashCode(), true); g2d.fill(body[1]); g2d.fill(body[2]); drawingObserver.stopTrackingContinuityArea(); diff --git a/diylc/diylc-library/src/org/diylc/components/electromechanical/RotarySelectorSwitch.java b/diylc/diylc-library/src/org/diylc/components/electromechanical/RotarySelectorSwitch.java index 4c1e3990..84188568 100644 --- a/diylc/diylc-library/src/org/diylc/components/electromechanical/RotarySelectorSwitch.java +++ b/diylc/diylc-library/src/org/diylc/components/electromechanical/RotarySelectorSwitch.java @@ -121,7 +121,7 @@ public class RotarySelectorSwitch extends AbstractMultiPartComponent { } g2d.setColor(outlineMode ? Constants.TRANSPARENT_COLOR : TERMINAL_COLOR); - drawingObserver.startTrackingContinuityArea(true); + drawingObserver.startTrackingContinuityArea(hashCode(), true); for (int i = 2; i < body.length; i++) g2d.fill(body[i]); drawingObserver.stopTrackingContinuityArea(); diff --git a/diylc/diylc-library/src/org/diylc/components/electromechanical/RotarySwitchOpen.java b/diylc/diylc-library/src/org/diylc/components/electromechanical/RotarySwitchOpen.java index 64f994da..652eaa8e 100644 --- a/diylc/diylc-library/src/org/diylc/components/electromechanical/RotarySwitchOpen.java +++ b/diylc/diylc-library/src/org/diylc/components/electromechanical/RotarySwitchOpen.java @@ -350,7 +350,7 @@ public class RotarySwitchOpen extends AbstractAngledComponent implements ISwi g2d.drawOval((int)(p.getX() - padDiameter / 2), (int)(p.getY() - padDiameter / 2), padDiameter, padDiameter); } else { g2d.setColor(PAD_COLOR); - drawingObserver.startTrackingContinuityArea(true); + drawingObserver.startTrackingContinuityArea(hashCode(), true); g2d.fillOval((int)(p.getX() - padDiameter / 2), (int)(p.getY() - padDiameter / 2), padDiameter, padDiameter); drawingObserver.stopTrackingContinuityArea(); g2d.setColor(PAD_COLOR.darker()); diff --git a/diylc/diylc-library/src/org/diylc/components/misc/CommonNode.java b/diylc/diylc-library/src/org/diylc/components/misc/CommonNode.java index d53cc649..a41ff441 100644 --- a/diylc/diylc-library/src/org/diylc/components/misc/CommonNode.java +++ b/diylc/diylc-library/src/org/diylc/components/misc/CommonNode.java @@ -93,7 +93,7 @@ public class CommonNode extends AbstractComponent implements ICommonNode } g2d.setColor(bgColor); - drawingObserver.startTrackingContinuityArea(true); + drawingObserver.startTrackingContinuityArea(text.hashCode(), true); g2d.fill(rect); drawingObserver.stopTrackingContinuityArea(); drawingObserver.stopTracking(); diff --git a/diylc/diylc-library/src/org/diylc/components/passive/PotentiometerPanel.java b/diylc/diylc-library/src/org/diylc/components/passive/PotentiometerPanel.java index 35f2836c..4e837fa7 100644 --- a/diylc/diylc-library/src/org/diylc/components/passive/PotentiometerPanel.java +++ b/diylc/diylc-library/src/org/diylc/components/passive/PotentiometerPanel.java @@ -279,11 +279,11 @@ public class PotentiometerPanel extends AbstractPotentiometer { g2d.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_OVER, 1f * alpha / MAX_ALPHA)); } if (!outlineMode) { - if (i == 3) - drawingObserver.startTrackingContinuityArea(true); +// if (i == 3) +// drawingObserver.startTrackingContinuityArea(true); g2d.fill(shape); - if (i == 3) - drawingObserver.stopTrackingContinuityArea(); +// if (i == 3) +// drawingObserver.stopTrackingContinuityArea(); } g2d.setComposite(oldComposite); Color finalBorderColor; diff --git a/diylc/diylc-library/src/org/diylc/components/tube/Jumbo4PinTubeSocket.java b/diylc/diylc-library/src/org/diylc/components/tube/Jumbo4PinTubeSocket.java index c41191c9..fda937d1 100644 --- a/diylc/diylc-library/src/org/diylc/components/tube/Jumbo4PinTubeSocket.java +++ b/diylc/diylc-library/src/org/diylc/components/tube/Jumbo4PinTubeSocket.java @@ -248,7 +248,7 @@ public class Jumbo4PinTubeSocket extends AbstractAngledComponent { Shape terminalShape = body[1]; g2d.setColor(outlineMode ? Constants.TRANSPARENT_COLOR : getTerminalColor()); - drawingObserver.startTrackingContinuityArea(true); + drawingObserver.startTrackingContinuityArea(hashCode(), true); g2d.fill(terminalShape); drawingObserver.stopTrackingContinuityArea(); diff --git a/diylc/diylc-library/src/org/diylc/components/tube/TubeSocket.java b/diylc/diylc-library/src/org/diylc/components/tube/TubeSocket.java index cc733bb1..2b2b56cb 100644 --- a/diylc/diylc-library/src/org/diylc/components/tube/TubeSocket.java +++ b/diylc/diylc-library/src/org/diylc/components/tube/TubeSocket.java @@ -287,7 +287,7 @@ public class TubeSocket extends AbstractAngledComponent { } g2d.setColor(outlineMode ? Constants.TRANSPARENT_COLOR : PIN_COLOR); if (getMount() == Mount.CHASSIS) - drawingObserver.startTrackingContinuityArea(true); + drawingObserver.startTrackingContinuityArea(hashCode(), true); g2d.fill(pinShape); drawingObserver.stopTrackingContinuityArea(); if (!outlineMode) { diff --git a/diylc/diylc-swing/lib/diylc-core.jar b/diylc/diylc-swing/lib/diylc-core.jar index 2754ec2f..7b577c72 100644 Binary files a/diylc/diylc-swing/lib/diylc-core.jar and b/diylc/diylc-swing/lib/diylc-core.jar differ diff --git a/diylc/diylc-swing/library/main.jar b/diylc/diylc-swing/library/main.jar index 910a532b..8c8f48ed 100644 Binary files a/diylc/diylc-swing/library/main.jar and b/diylc/diylc-swing/library/main.jar differ