From b4c1ed74c257456d4dbc7f821d6d7f3f51dc806c Mon Sep 17 00:00:00 2001 From: Bane Stojkovic Date: Sat, 29 Mar 2025 22:17:21 +0100 Subject: [PATCH] switch fixes --- .../java/org/diylc/utils/SwitchUtils.java | 3 +- .../diylc-core/src/main/resources/update.xml | 6 +- .../electromechanical/MiniToggleSwitch.java | 109 ++++++------ .../electromechanical/ToggleSwitchType.java | 1 - .../diylc/components/guitar/LeverSwitch.java | 2 - .../diylc/netlist/MiniToggleSwitchTests.java | 160 +++++++++++++++++- 6 files changed, 212 insertions(+), 69 deletions(-) diff --git a/diylc/diylc-core/src/main/java/org/diylc/utils/SwitchUtils.java b/diylc/diylc-core/src/main/java/org/diylc/utils/SwitchUtils.java index 33dc583f..5fcd8a2f 100644 --- a/diylc/diylc-core/src/main/java/org/diylc/utils/SwitchUtils.java +++ b/diylc/diylc-core/src/main/java/org/diylc/utils/SwitchUtils.java @@ -45,7 +45,8 @@ public class SwitchUtils { for (int i = 0; i < numPoints; i++) { final int finalI = i; if (switchingMatrix.stream().allMatch( - l -> l.stream().anyMatch( + l -> l.isEmpty() || + l.stream().anyMatch( s -> s.contains(finalI)))) { markers[i] = String.valueOf((char)((int)'A' + commonPoints.size())); commonPoints.add(i); diff --git a/diylc/diylc-core/src/main/resources/update.xml b/diylc/diylc-core/src/main/resources/update.xml index bb014406..f4ca536a 100644 --- a/diylc/diylc-core/src/main/resources/update.xml +++ b/diylc/diylc-core/src/main/resources/update.xml @@ -331,7 +331,7 @@ NEW_FEATURE - Added ability to highlight connected switch lugs in selected position in order to illustrate how it works internally. + Added ability to display switch lug markings in order to illustrate how it works internally. IMPROVEMENT @@ -345,6 +345,10 @@ IMPROVEMENT Fully configurable colors for 'Mini Toggle Switch' components + + IMPROVEMENT + Removed 'DP3T' options from 'Mini Toggle Switch' because that is covered by 'Slide Switch' component and does not belong here + BUG_FIX Applying a variant to a 'Hookup Wire' or 'Curved Trace' makes it lose its shape diff --git a/diylc/diylc-library/src/main/java/org/diylc/components/electromechanical/MiniToggleSwitch.java b/diylc/diylc-library/src/main/java/org/diylc/components/electromechanical/MiniToggleSwitch.java index b73ba11d..ba70ca02 100644 --- a/diylc/diylc-library/src/main/java/org/diylc/components/electromechanical/MiniToggleSwitch.java +++ b/diylc/diylc-library/src/main/java/org/diylc/components/electromechanical/MiniToggleSwitch.java @@ -31,15 +31,11 @@ import java.awt.geom.Area; import java.awt.geom.Point2D; import java.awt.geom.Rectangle2D; import java.awt.geom.RoundRectangle2D; -import java.util.List; -import java.util.Set; -import java.util.stream.IntStream; import org.diylc.appframework.miscutils.ConfigurationManager; -import org.diylc.common.IPlugInPort; -import org.diylc.common.ObjectCache; -import org.diylc.common.OrientationHV; +import org.diylc.awt.StringUtils; +import org.diylc.common.*; import org.diylc.components.AbstractTransparentComponent; import org.diylc.components.guitar.ToggleSwitchPositionPropertyValueSource; import org.diylc.components.transform.MiniToggleSwitchTransformer; @@ -59,8 +55,7 @@ import org.diylc.core.gerber.IGerberComponentSimple; import org.diylc.core.measures.Size; import org.diylc.core.measures.SizeUnit; import org.diylc.utils.Constants; - -import static org.diylc.utils.SwitchUtils.getConnectedTerminals; +import org.diylc.utils.SwitchUtils; @ComponentDescriptor(name = "Mini Toggle Switch", category = "Electro-Mechanical", author = "Branislav Stojkovic", description = "Panel mounted mini toggle switch", zOrder = IDIYComponent.COMPONENT, @@ -74,11 +69,14 @@ public class MiniToggleSwitch extends AbstractTransparentComponent> connectedTerminals = getConnectedTerminals(this, controlPoints.length); - for (int i = 0; i < controlPoints.length; i++) { Point2D p = controlPoints[i]; if (outlineMode) { @@ -341,36 +326,44 @@ public class MiniToggleSwitch extends AbstractTransparentComponent connectedTerminals.get(j).contains(finalI)) - .findFirst().orElse(-1); - - if (groupIndex < 0) { - g2d.setColor(getTerminalPadColor().darker()); - } else { - g2d.setColor(ISwitch.POLE_COLORS[groupIndex].darker()); - } + g2d.setColor(getTerminalPadColor().darker()); g2d.drawOval((int)(p.getX() - circleDiameter / 2d), (int)(p.getY() - circleDiameter / 2d), circleDiameter, circleDiameter); - - if (groupIndex < 0) { - g2d.setColor(getTerminalPadColor()); - } else { - g2d.setColor(ISwitch.POLE_COLORS[groupIndex]); - } + g2d.setColor(getTerminalPadColor()); g2d.fillOval((int)(p.getX() - circleDiameter / 2d), (int)(p.getY() - circleDiameter / 2d), circleDiameter, circleDiameter); - if (groupIndex < 0) { - g2d.setColor(getTerminalColor()); - } else { - g2d.setColor(getTerminalColor().darker()); - } + g2d.setColor(getTerminalColor()); // drawingObserver.startTrackingContinuityArea(true); g2d.fillRect((int)(p.getX() - lugWidth / 2d), (int)(p.getY() - lugHeight / 2d), lugWidth, lugHeight); // drawingObserver.stopTrackingContinuityArea(); } } + + if (getShowMarkers()) { + String[] markers = + SwitchUtils.getSwitchingMarkers(this, getControlPointCount(), false); + + g2d.setColor(MARKER_COLOR); + + double offset = MARKER_OFFSET.convertToPixels(); + for (int i = 0; i < getControlPointCount(); i++) { + if (markers[i] == null) + continue; + + Point2D p = getControlPoint(i); + Point2D labelPoint = new Point2D.Double(offset, 0); + + AffineTransform tx = null; + if (getOrientation() == OrientationHV.HORIZONTAL) { + tx = AffineTransform.getRotateInstance(-Math.PI / 2, 0, 0); + } + if (tx != null) { + tx.transform(labelPoint, labelPoint); + } + StringUtils.drawCenteredText(g2d, markers[i], p.getX() + labelPoint.getX(), p.getY() + labelPoint.getY(), + HorizontalAlignment.CENTER, VerticalAlignment.CENTER); + } + } } public Shape getBody() { @@ -398,11 +391,6 @@ public class MiniToggleSwitch extends AbstractTransparentComponent= index2) + return false; + switch (switchType) { case SPST: return position == 0; @@ -561,9 +550,11 @@ public class MiniToggleSwitch extends AbstractTransparentComponent