From 5052e10f0e5565cc6995515c0a07e24f73c3bcfc Mon Sep 17 00:00:00 2001 From: Bane Stojkovic Date: Thu, 27 Mar 2025 23:32:31 +0100 Subject: [PATCH] fix rotation --- .../electromechanical/RotarySwitchOpen.java | 4 +- .../electromechanical/SlideSwitch.java | 66 ++++++++++++------- .../diylc/components/guitar/LeverSwitch.java | 21 +++--- 3 files changed, 56 insertions(+), 35 deletions(-) diff --git a/diylc/diylc-library/src/main/java/org/diylc/components/electromechanical/RotarySwitchOpen.java b/diylc/diylc-library/src/main/java/org/diylc/components/electromechanical/RotarySwitchOpen.java index 40c0da54..694cc21b 100644 --- a/diylc/diylc-library/src/main/java/org/diylc/components/electromechanical/RotarySwitchOpen.java +++ b/diylc/diylc-library/src/main/java/org/diylc/components/electromechanical/RotarySwitchOpen.java @@ -65,8 +65,6 @@ import org.diylc.presenter.AreaUtils; import org.diylc.utils.Constants; import org.diylc.utils.SwitchUtils; -import static org.diylc.utils.SwitchUtils.getConnectedTerminals; - @ComponentDescriptor(name = "Rotary Switch (Open)", author = "Branislav Stojkovic", category = "Electro-Mechanical", instanceNamePrefix = "SW", description = "Open rotary switch in several different switching configurations", @@ -403,7 +401,7 @@ public class RotarySwitchOpen extends AbstractAngledComponent i private static Size LUG_WIDTH = new Size(0.020d, SizeUnit.in); private static Size LUG_THICKNESS = new Size(0.1d, SizeUnit.in); private static Size HOLE_DIAMETER = new Size(3d, SizeUnit.mm); + private static Size MARKER_OFFSET = new Size(0.05d, SizeUnit.in); private static Color BODY_COLOR = PHENOLIC_DARK_COLOR; private static Color BORDER_COLOR = Color.gray; public static Color TERMINAL_COLOR = METAL_COLOR; public static Color LABEL_COLOR = Color.white; public static Color BRACKET_COLOR = Color.lightGray; + public static Color MARKER_COLOR = Color.lightGray; protected Point2D[] controlPoints = new Point2D[] {new Point2D.Double(0, 0)}; transient protected Shape[] body; @@ -94,7 +96,7 @@ public class SlideSwitch extends AbstractTransparentComponent i private Boolean showBracket = true; private Integer selectedPosition; - private Boolean highlightConnectedTerminals; + private Boolean showMarkers; public SlideSwitch() { super(); @@ -133,9 +135,10 @@ public class SlideSwitch extends AbstractTransparentComponent i firstPoint.getY() + 3 * rowSpacing)}; break; } - AffineTransform xform = - AffineTransform.getRotateInstance(-Math.PI / 2, firstPoint.getX(), firstPoint.getY()); + if (getOrientation() == OrientationHV.HORIZONTAL) { + AffineTransform xform = + AffineTransform.getRotateInstance(-Math.PI / 2, firstPoint.getX(), firstPoint.getY()); for (int i = 1; i < controlPoints.length; i++) { xform.transform(controlPoints[i], controlPoints[i]); } @@ -284,8 +287,6 @@ public class SlideSwitch extends AbstractTransparentComponent i lugHeight = getClosestOdd((int) LUG_THICKNESS.convertToPixels()); } - List> connectedTerminals = getConnectedTerminals(this, controlPoints.length); - g2d.setStroke(ObjectCache.getInstance().fetchBasicStroke(1)); for (int i = 0; i < controlPoints.length; i++) { Point2D p = controlPoints[i]; @@ -294,15 +295,7 @@ public class SlideSwitch extends AbstractTransparentComponent i g2d.drawRect((int) (p.getX() - lugWidth / 2d), (int) (p.getY() - lugHeight / 2d), lugWidth, lugHeight); } else { - int finalI = i; - int groupIndex = IntStream.range(0, connectedTerminals.size()) - .filter(j -> connectedTerminals.get(j).contains(finalI)) - .findFirst().orElse(-1); - if (groupIndex < 0) { - g2d.setColor(TERMINAL_COLOR); - } else { - g2d.setColor(ISwitch.POLE_COLORS[groupIndex]); - } + g2d.setColor(TERMINAL_COLOR); g2d.fillRect((int) (p.getX() - lugWidth / 2d), (int) (p.getY() - lugHeight / 2d), lugWidth, lugHeight); g2d.setColor(TERMINAL_COLOR.darker()); @@ -310,6 +303,33 @@ public class SlideSwitch extends AbstractTransparentComponent i lugHeight); } } + + 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); + int direction = switchType == SlideSwitchType.SPDT || i < getControlPointCount() / 2 ? 1 : -1; + Point2D labelPoint = new Point2D.Double(direction * 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() { @@ -504,16 +524,16 @@ public class SlideSwitch extends AbstractTransparentComponent i this.selectedPosition = selectedPosition; } - @EditableProperty(name = "Highlight Connected") + @EditableProperty(name = "Markers") public Boolean getShowMarkers() { - if (highlightConnectedTerminals == null) { - highlightConnectedTerminals = false; + if (showMarkers == null) { + showMarkers = false; } - return highlightConnectedTerminals; + return showMarkers; } - public void setHighlightConnectedTerminals(Boolean highlightConnectedTerminals) { - this.highlightConnectedTerminals = highlightConnectedTerminals; + public void setShowMarkers(Boolean showMarkers) { + this.showMarkers = showMarkers; } @Override diff --git a/diylc/diylc-library/src/main/java/org/diylc/components/guitar/LeverSwitch.java b/diylc/diylc-library/src/main/java/org/diylc/components/guitar/LeverSwitch.java index ce82b037..626cc320 100644 --- a/diylc/diylc-library/src/main/java/org/diylc/components/guitar/LeverSwitch.java +++ b/diylc/diylc-library/src/main/java/org/diylc/components/guitar/LeverSwitch.java @@ -151,21 +151,24 @@ public class LeverSwitch extends AbstractAngledComponent