diff --git a/diylc/diylc-core/src/org/diylc/presenter/DrawingManager.java b/diylc/diylc-core/src/org/diylc/presenter/DrawingManager.java index f9045881..a37b5f12 100644 --- a/diylc/diylc-core/src/org/diylc/presenter/DrawingManager.java +++ b/diylc/diylc-core/src/org/diylc/presenter/DrawingManager.java @@ -556,7 +556,7 @@ public class DrawingManager { return areas; } - private void expandConnections(Set connections) { + public void expandConnections(Set connections) { Set toAdd = new HashSet(); for (Connection c1 : connections) for (Connection c2 : connections) { @@ -596,15 +596,19 @@ public class DrawingManager { continue; Area a1 = areas.get(i); Area a2 = areas.get(j); - Area intersection = new Area(a1); - intersection.intersect(a2); + Area intersection = null; + if (a1.getBounds2D().intersects(a2.getBounds())) { + intersection = new Area(a1); + intersection.intersect(a2); + } // if the two areas intersect, make a union and consume the second area - if (!intersection.isEmpty()) { + if (intersection != null && !intersection.isEmpty()) { a1.add(a2); consumed.set(j, true); } else { // maybe there's a connection between them - for (Connection p : connections) { - if ((a1.contains(p.getP1()) && a2.contains(p.getP2())) || (a1.contains(p.getP2()) && a2.contains(p.getP1()))) { + for (Connection p : connections) { // use getBounds to optimize the computation, don't get into complex math if not needed + if ((a1.getBounds().contains(p.getP1()) && a2.getBounds().contains(p.getP2()) && a1.contains(p.getP1()) && a2.contains(p.getP2())) || + (a1.getBounds().contains(p.getP2()) && a2.getBounds().contains(p.getP1())) && a1.contains(p.getP2()) && a2.contains(p.getP1())) { a1.add(a2); consumed.set(j, true); break; diff --git a/diylc/diylc-core/src/org/diylc/presenter/Presenter.java b/diylc/diylc-core/src/org/diylc/presenter/Presenter.java index 3a9b701e..be7c9cdc 100644 --- a/diylc/diylc-core/src/org/diylc/presenter/Presenter.java +++ b/diylc/diylc-core/src/org/diylc/presenter/Presenter.java @@ -2910,7 +2910,7 @@ public class Presenter implements IPlugInPort { @SuppressWarnings("unchecked") private List getConnections(Map switchPositions) { - List connections = new ArrayList(); + Set connections = new HashSet(); for (IDIYComponent c : currentProject.getComponents()) { ComponentType type = ComponentProcessor.getInstance().extractComponentTypeFrom((Class>) c.getClass()); @@ -2930,9 +2930,11 @@ public class Presenter implements IPlugInPort { if (s.arePointsConnected(i, j, position)) connections.add(new Connection(c.getControlPoint(i), c.getControlPoint(j))); } - } + } - return connections; + drawingManager.expandConnections(connections); + + return new ArrayList(connections); } @Override diff --git a/diylc/diylc-library/lib/diylc-core.jar b/diylc/diylc-library/lib/diylc-core.jar index 240578cb..936d9cd3 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/connectivity/CopperTrace.java b/diylc/diylc-library/src/org/diylc/components/connectivity/CopperTrace.java index 0195c6b2..d1c6b67f 100644 --- a/diylc/diylc-library/src/org/diylc/components/connectivity/CopperTrace.java +++ b/diylc/diylc-library/src/org/diylc/components/connectivity/CopperTrace.java @@ -27,7 +27,6 @@ import org.diylc.common.SimpleComponentTransformer; import org.diylc.components.AbstractLeadedComponent; import org.diylc.core.ComponentState; import org.diylc.core.CreationMethod; -import org.diylc.core.IContinuity; import org.diylc.core.IDIYComponent; import org.diylc.core.VisibilityPolicy; import org.diylc.core.annotations.BomPolicy; @@ -42,7 +41,7 @@ import org.diylc.core.measures.SizeUnit; description = "Straight copper trace", zOrder = IDIYComponent.TRACE, bomPolicy = BomPolicy.NEVER_SHOW, autoEdit = false, keywordPolicy = KeywordPolicy.SHOW_TAG, keywordTag = "PCB", transformer = SimpleComponentTransformer.class) -public class CopperTrace extends AbstractLeadedComponent implements IContinuity { +public class CopperTrace extends AbstractLeadedComponent { private static final long serialVersionUID = 1L; @@ -168,9 +167,4 @@ public class CopperTrace extends AbstractLeadedComponent implements IConti public String getControlPointNodeName(int index) { return null; } - - @Override - public boolean arePointsConnected(int index1, int index2) { - return Math.abs(index1 - index2) == getControlPointCount() - 1; - } } 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 65664db2..8394aaad 100644 --- a/diylc/diylc-library/src/org/diylc/components/connectivity/CurvedTrace.java +++ b/diylc/diylc-library/src/org/diylc/components/connectivity/CurvedTrace.java @@ -27,7 +27,6 @@ import org.diylc.common.PCBLayer; import org.diylc.common.SimpleComponentTransformer; import org.diylc.components.AbstractCurvedComponent; import org.diylc.core.ComponentState; -import org.diylc.core.IContinuity; import org.diylc.core.IDIYComponent; import org.diylc.core.IDrawingObserver; import org.diylc.core.annotations.BomPolicy; @@ -41,7 +40,7 @@ import org.diylc.core.measures.SizeUnit; instanceNamePrefix = "Trace", description = "Curved copper trace with two control points", zOrder = IDIYComponent.TRACE, bomPolicy = BomPolicy.NEVER_SHOW, autoEdit = false, keywordPolicy = KeywordPolicy.SHOW_TAG, keywordTag = "PCB", transformer = SimpleComponentTransformer.class) -public class CurvedTrace extends AbstractCurvedComponent implements IContinuity { +public class CurvedTrace extends AbstractCurvedComponent { private static final long serialVersionUID = 1L; @@ -117,9 +116,4 @@ public class CurvedTrace extends AbstractCurvedComponent implements IConti public String getControlPointNodeName(int index) { return null; } - - @Override - public boolean arePointsConnected(int index1, int index2) { - return Math.abs(index1 - index2) == getControlPointCount() - 1; - } } diff --git a/diylc/diylc-swing/lib/diylc-core.jar b/diylc/diylc-swing/lib/diylc-core.jar index 240578cb..936d9cd3 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 9ca90b8f..c68b8b27 100644 Binary files a/diylc/diylc-swing/library/main.jar and b/diylc/diylc-swing/library/main.jar differ diff --git a/diylc/diylc-swing/update.xml b/diylc/diylc-swing/update.xml index 57550040..9c5ed9e8 100644 --- a/diylc/diylc-swing/update.xml +++ b/diylc/diylc-swing/update.xml @@ -2634,6 +2634,10 @@ IMPROVEMENT Output SPICE node names in the "Nxxx" format + + IMPROVEMENT + Improve performance of netlist calculations + IMPROVEMENT Honor "Terminal Strip" connectivity when creating a netlist