From 58e28a95fd14166c7ecd1554893f23c2fa46722b Mon Sep 17 00:00:00 2001 From: Bane Stojkovic Date: Sun, 30 Mar 2025 23:46:13 +0200 Subject: [PATCH] Board underside display does not work if there's a Label or PCB Text component on the board --- .../org/diylc/presenter/DrawingManager.java | 48 +++++++++++-------- .../diylc-core/src/main/resources/update.xml | 12 +++++ .../components/transform/TextTransformer.java | 17 +------ 3 files changed, 41 insertions(+), 36 deletions(-) diff --git a/diylc/diylc-core/src/main/java/org/diylc/presenter/DrawingManager.java b/diylc/diylc-core/src/main/java/org/diylc/presenter/DrawingManager.java index a1194449..6129bb84 100644 --- a/diylc/diylc-core/src/main/java/org/diylc/presenter/DrawingManager.java +++ b/diylc/diylc-core/src/main/java/org/diylc/presenter/DrawingManager.java @@ -201,10 +201,10 @@ public class DrawingManager { if (c == board) { continue; } - boolean include = true; + boolean include = false; for (int i = 0; i < c.getControlPointCount(); i++) { - if (!boardRect.contains(c.getControlPoint(i))) { - include = false; + if (boardRect.contains(c.getControlPoint(i))) { + include = true; break; } } @@ -333,27 +333,35 @@ public class DrawingManager { lastDrawnStateMap.put(component, state); } - // Mirror components that belong to boards that need to be mirrored - if (componentBoardMap.containsKey(component)) { - @SuppressWarnings("unchecked") - ComponentType componentType = ComponentProcessor.getInstance() - .extractComponentTypeFrom((Class>) component.getClass()); - if (componentType.getTransformer() != null) { - Set boards = componentBoardMap.get(component); - for (IBoard board : boards) { - drawMirroredComponent(project, board, component, componentType, g2dWrapper, state, outlineMode); + try { + // Mirror components that belong to boards that need to be mirrored + if (componentBoardMap.containsKey(component)) { + @SuppressWarnings("unchecked") + ComponentType componentType = ComponentProcessor.getInstance() + .extractComponentTypeFrom((Class>) component.getClass()); + if (componentType.getTransformer() != null) { + Set boards = componentBoardMap.get(component); + for (IBoard board : boards) { + drawMirroredComponent(project, board, component, componentType, g2dWrapper, state, + outlineMode); + } } } - } - // if a component itself is a board that needs to be mirrored, do it - if (IBoard.class.isInstance(component) && componentBoardMap.values().stream() - .anyMatch(boards -> boards.contains(component))) { - ComponentType componentType = ComponentProcessor.getInstance() - .extractComponentTypeFrom((Class>) component.getClass()); - if (componentType.getTransformer() != null) { - drawMirroredComponent(project, (IBoard) component, component, componentType, g2dWrapper, state, outlineMode); + // if a component itself is a board that needs to be mirrored, do it + if (IBoard.class.isInstance(component) && componentBoardMap.values().stream() + .anyMatch(boards -> boards.contains(component))) { + ComponentType componentType = ComponentProcessor.getInstance() + .extractComponentTypeFrom((Class>) component.getClass()); + if (componentType.getTransformer() != null) { + drawMirroredComponent(project, (IBoard) component, component, componentType, + g2dWrapper, state, outlineMode); + } } + } finally { + // revert composite + g2d.setComposite(oldComposite); + g2d.setFont(oldFont); } } } diff --git a/diylc/diylc-core/src/main/resources/update.xml b/diylc/diylc-core/src/main/resources/update.xml index b41b386f..31f0e6d0 100644 --- a/diylc/diylc-core/src/main/resources/update.xml +++ b/diylc/diylc-core/src/main/resources/update.xml @@ -357,6 +357,10 @@ IMPROVEMENT Removed 'DP3T' options from 'Mini Toggle Switch' because that is covered by 'Slide Switch' component and does not belong here + + IMPROVEMENT + Include components in the underside display that have at least one control point laying in the board, as opposed to all + BUG_FIX Applying a variant to a 'Hookup Wire' or 'Curved Trace' makes it lose its shape @@ -365,6 +369,14 @@ BUG_FIX Copy operation doesn't work when certain component types are selected + + BUG_FIX + Board underside display does not work if there's a Label or PCB Text component on the board + + + BUG_FIX + Using board underside display sometimes makes other components semi-transparent + https://github.com/bancika/diy-layout-creator/releases diff --git a/diylc/diylc-library/src/main/java/org/diylc/components/transform/TextTransformer.java b/diylc/diylc-library/src/main/java/org/diylc/components/transform/TextTransformer.java index cb7c594f..c939d487 100644 --- a/diylc/diylc-library/src/main/java/org/diylc/components/transform/TextTransformer.java +++ b/diylc/diylc-library/src/main/java/org/diylc/components/transform/TextTransformer.java @@ -26,23 +26,13 @@ import org.diylc.components.misc.Label; import org.diylc.components.misc.PCBText; import org.diylc.core.IDIYComponent; -public class TextTransformer implements IComponentTransformer { +public class TextTransformer extends SimpleComponentTransformer { @Override public boolean canRotate(IDIYComponent component) { return component.getClass().equals(Label.class) || component.getClass().equals(PCBText.class); } - @Override - public boolean canMirror(IDIYComponent component) { - return false; - } - - @Override - public boolean mirroringChangesCircuit() { - return false; - } - @Override public void rotate(IDIYComponent component, Point2D center, int direction) { AffineTransform rotate = AffineTransform.getRotateInstance(Math.PI / 2 * direction, center.getX(), center.getY()); @@ -76,9 +66,4 @@ public class TextTransformer implements IComponentTransformer { snap.setOrientation(o); } } - - @Override - public void mirror(IDIYComponent component, Point2D center, int direction) { - throw new RuntimeException("Unexpected call to mirror() in LabelTransformer"); - } }