From 66bdd41b29b0efb440950311e7442549717012c3 Mon Sep 17 00:00:00 2001 From: bancika Date: Wed, 26 Apr 2017 14:03:36 +0200 Subject: [PATCH] Potentiometers can show an optional shaft, can have either solder lugs or PCB pins and rendering includes the wafer --- .../passive/PotentiometerPanel.java | 214 ++++++++++++++---- diylc/diylc-swing/lib/diylc-core.jar | Bin 239378 -> 239378 bytes diylc/diylc-swing/library/main.jar | Bin 403230 -> 405361 bytes diylc/diylc-swing/update.xml | 16 ++ 4 files changed, 191 insertions(+), 39 deletions(-) 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 ad625924..b48a8de4 100644 --- a/diylc/diylc-library/src/org/diylc/components/passive/PotentiometerPanel.java +++ b/diylc/diylc-library/src/org/diylc/components/passive/PotentiometerPanel.java @@ -6,9 +6,11 @@ import java.awt.Composite; import java.awt.FontMetrics; import java.awt.Graphics2D; import java.awt.Point; +import java.awt.Polygon; import java.awt.geom.Area; import java.awt.geom.Ellipse2D; import java.awt.geom.Rectangle2D; +import java.awt.geom.RoundRectangle2D; import org.diylc.appframework.miscutils.ConfigurationManager; import org.diylc.common.IPlugInPort; @@ -27,7 +29,7 @@ import org.diylc.core.measures.Size; import org.diylc.core.measures.SizeUnit; import org.diylc.utils.Constants; -@ComponentDescriptor(name = "Potentiometer (panel mount)", author = "Branislav Stojkovic", category = "Passive", +@ComponentDescriptor(name = "Potentiometer", author = "Branislav Stojkovic", category = "Passive", creationMethod = CreationMethod.SINGLE_CLICK, instanceNamePrefix = "VR", description = "Panel mount potentiometer with solder lugs", zOrder = IDIYComponent.COMPONENT, stretchable = false, transformer = PotentiometerTransformer.class) @@ -38,14 +40,24 @@ public class PotentiometerPanel extends AbstractPotentiometer { protected static Size BODY_DIAMETER = new Size(1d, SizeUnit.in); protected static Size SPACING = new Size(0.3d, SizeUnit.in); protected static Size LUG_DIAMETER = new Size(0.15d, SizeUnit.in); - protected static Color BODY_COLOR = Color.gray.brighter(); + protected static Size PIN_SIZE = new Size(0.05d, SizeUnit.in); + protected static Size NUT_SIZE = new Size(0.4d, SizeUnit.in); + protected static Size SHAFT_SIZE = new Size(1 / 4d, SizeUnit.in); + protected static Color BODY_COLOR = Color.lightGray; + protected static Color WAFER_COLOR = Color.decode("#CD8500"); protected static Color BORDER_COLOR = Color.gray; + protected static Color NUT_COLOR = Color.decode("#CBD5DB"); + protected Size bodyDiameter = BODY_DIAMETER; protected Size spacing = SPACING; protected Size lugDiameter = LUG_DIAMETER; protected Color bodyColor = BODY_COLOR; protected Color borderColor = BORDER_COLOR; + protected Color nutColor = NUT_COLOR; + protected Color waferColor = WAFER_COLOR; + protected Type type = Type.ThroughHole; + protected boolean showShaft = false; // Array of 7 elements: 3 lug connectors, 1 pot body and 3 lugs transient protected Area[] body = null; @@ -82,71 +94,123 @@ public class PotentiometerPanel extends AbstractPotentiometer { int spacing = (int) this.spacing.convertToPixels(); int diameter = getClosestOdd(bodyDiameter.convertToPixels()); if (body == null) { - body = new Area[7]; + // mandatory: 0, 1, 2 pins, 3 body, 9 wafer + // optional: 4, 5, 6 lugs, 7 nut, 8 shaft + body = new Area[10]; // Add lugs. - int lugDiameter = getClosestOdd(this.lugDiameter.convertToPixels()); - int holeDiameter = getClosestOdd(this.lugDiameter.convertToPixels() / 2); - for (int i = 0; i < 3; i++) { - Area area = - new Area(new Ellipse2D.Double(controlPoints[i].x - lugDiameter / 2, controlPoints[i].y - lugDiameter / 2, - lugDiameter, lugDiameter)); - body[4 + i] = area; - } + int pinWidth = (int) PIN_SIZE.convertToPixels(); + + int centerX = 0; + int centerY = 0; + + double waferWidth = 2.5 * spacing; + double waferHeight = spacing; switch (orientation) { case DEFAULT: - body[3] = - new Area(new Ellipse2D.Double(controlPoints[0].x + spacing - diameter / 2, controlPoints[0].y - spacing - / 2 - diameter, diameter, diameter)); + centerX = controlPoints[0].x + spacing; + centerY = controlPoints[0].y - spacing / 2 - diameter / 2; + + body[9] = + new Area(new RoundRectangle2D.Double(centerX - waferWidth / 2, controlPoints[0].y - waferHeight - spacing + / 2, waferWidth, waferHeight, spacing / 4, spacing / 4)); + for (int i = 0; i < 3; i++) { body[i] = - new Area(new Rectangle2D.Double(controlPoints[i].x - holeDiameter / 2, controlPoints[i].y - - (spacing + diameter) / 2, holeDiameter, (spacing + diameter) / 2)); + new Area(new Rectangle2D.Double(controlPoints[i].x - pinWidth / 2, controlPoints[i].y + - (spacing + diameter) / 2, pinWidth, (spacing + diameter) / 2)); } break; case _90: - body[3] = - new Area(new Ellipse2D.Double(controlPoints[0].x + spacing / 2, controlPoints[0].y + spacing - diameter - / 2, diameter, diameter)); + centerX = controlPoints[0].x + spacing / 2 + diameter / 2; + centerY = controlPoints[0].y + spacing; + + body[9] = + new Area(new RoundRectangle2D.Double(controlPoints[0].x + spacing / 2, centerY - waferWidth / 2, + waferHeight, waferWidth, spacing / 4, spacing / 4)); + for (int i = 0; i < 3; i++) { body[i] = - new Area(new Rectangle2D.Double(controlPoints[i].x, controlPoints[i].y - holeDiameter / 2, - (spacing + diameter) / 2, holeDiameter)); + new Area(new Rectangle2D.Double(controlPoints[i].x, controlPoints[i].y - pinWidth / 2, + (spacing + diameter) / 2, pinWidth)); } break; case _180: - body[3] = - new Area(new Ellipse2D.Double(controlPoints[0].x - spacing - diameter / 2, controlPoints[0].y + spacing - / 2, diameter, diameter)); + centerX = controlPoints[0].x - spacing; + centerY = controlPoints[0].y + spacing / 2 + diameter / 2; + + body[9] = + new Area(new RoundRectangle2D.Double(centerX - waferWidth / 2, controlPoints[0].y + spacing / 2, + waferWidth, waferHeight, spacing / 4, spacing / 4)); + for (int i = 0; i < 3; i++) { body[i] = - new Area(new Rectangle2D.Double(controlPoints[i].x - holeDiameter / 2, controlPoints[i].y, - holeDiameter, (spacing + diameter) / 2)); + new Area(new Rectangle2D.Double(controlPoints[i].x - pinWidth / 2, controlPoints[i].y, pinWidth, + (spacing + diameter) / 2)); } break; case _270: - body[3] = - new Area(new Ellipse2D.Double(controlPoints[0].x - spacing / 2 - diameter, controlPoints[0].y - spacing - - diameter / 2, diameter, diameter)); + centerX = controlPoints[0].x - spacing / 2 - diameter / 2; + centerY = controlPoints[0].y - spacing; + + body[9] = + new Area(new RoundRectangle2D.Double(controlPoints[0].x - waferHeight - spacing / 2, centerY - waferWidth + / 2, waferHeight, waferWidth, spacing / 4, spacing / 4)); + for (int i = 0; i < 3; i++) { body[i] = new Area(new Rectangle2D.Double(controlPoints[i].x - (spacing + diameter) / 2, controlPoints[i].y - - holeDiameter / 2, (spacing + diameter) / 2, holeDiameter)); + - pinWidth / 2, (spacing + diameter) / 2, pinWidth)); } break; default: break; } + + body[3] = new Area(new Ellipse2D.Double(centerX - diameter / 2, centerY - diameter / 2, diameter, diameter)); + + body[9].subtract(body[3]); + for (int i = 0; i < 3; i++) { - for (int j = 3; j < 7; j++) { - body[i].subtract(body[j]); + body[i].subtract(body[3]); + } + + if (getType() == Type.ThroughHole) { + int lugDiameter = getClosestOdd(this.lugDiameter.convertToPixels()); + int holeDiameter = getClosestOdd(this.lugDiameter.convertToPixels() / 2); + + for (int i = 0; i < 3; i++) { + Area area = + new Area(new Ellipse2D.Double(controlPoints[i].x - lugDiameter / 2, controlPoints[i].y - lugDiameter / 2, + lugDiameter, lugDiameter)); + body[4 + i] = area; + } + + for (int i = 0; i < 3; i++) { + for (int j = 0; j < 3; j++) { + body[i].subtract(body[4 + j]); + } + } + // Make holes in the lugs. + for (int i = 0; i < 3; i++) { + body[4 + i].subtract(new Area(new Ellipse2D.Double(controlPoints[i].x - holeDiameter / 2, controlPoints[i].y + - holeDiameter / 2, holeDiameter, holeDiameter))); } } - // Make holes in the lugs. - for (int i = 0; i < 3; i++) { - body[4 + i].subtract(new Area(new Ellipse2D.Double(controlPoints[i].x - holeDiameter / 2, controlPoints[i].y - - holeDiameter / 2, holeDiameter, holeDiameter))); + if (getShowShaft()) { + int nutSize = (int) NUT_SIZE.convertToPixels(); + int shaftSize = (int) SHAFT_SIZE.convertToPixels(); + int[] xPoints = new int[6]; + int[] yPoints = new int[6]; + for (int i = 0; i < 6; i++) { + double alpha = Math.toRadians(60 * i); + xPoints[i] = (int) (centerX + Math.cos(alpha) * nutSize / 2); + yPoints[i] = (int) (centerY + Math.sin(alpha) * nutSize / 2); + } + body[7] = new Area(new Polygon(xPoints, yPoints, 6)); + body[8] = + new Area(new Ellipse2D.Double(centerX - shaftSize / 2, centerY - shaftSize / 2, shaftSize, shaftSize)); } } return body; @@ -170,9 +234,22 @@ public class PotentiometerPanel extends AbstractPotentiometer { IDrawingObserver drawingObserver) { g2d.setStroke(ObjectCache.getInstance().fetchBasicStroke(1)); Theme theme = (Theme) ConfigurationManager.getInstance().readObject(IPlugInPort.THEME_KEY, Constants.DEFAULT_THEME); - for (Area shape : getBody()) { + Area[] body = getBody(); + for (int i = 0; i < body.length; i++) { + Area shape = body[i]; + // determine color if (shape != null) { - g2d.setColor(bodyColor); + switch (i) { + case 7: + g2d.setColor(getNutColor()); + break; + case 9: + g2d.setColor(getWaferColor()); + break; + default: + g2d.setColor(getBodyColor()); + } + Composite oldComposite = g2d.getComposite(); if (alpha < MAX_ALPHA) { g2d.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_OVER, 1f * alpha / MAX_ALPHA)); @@ -189,7 +266,7 @@ public class PotentiometerPanel extends AbstractPotentiometer { } else { finalBorderColor = componentState == ComponentState.SELECTED || componentState == ComponentState.DRAGGING ? SELECTION_COLOR - : borderColor; + : getBorderColor(); } g2d.setColor(finalBorderColor); g2d.draw(shape); @@ -265,6 +342,29 @@ public class PotentiometerPanel extends AbstractPotentiometer { body = null; } + @EditableProperty + public Type getType() { + if (type == null) + type = Type.ThroughHole; + return type; + } + + public void setType(Type type) { + this.type = type; + body = null; + } + + @EditableProperty(name = "Nut") + public Color getNutColor() { + if (nutColor == null) + nutColor = NUT_COLOR; + return nutColor; + } + + public void setNutColor(Color nutColor) { + this.nutColor = nutColor; + } + @EditableProperty(name = "Diameter") public Size getBodyDiameter() { return bodyDiameter; @@ -302,4 +402,40 @@ public class PotentiometerPanel extends AbstractPotentiometer { public void setBorderColor(Color borderColor) { this.borderColor = borderColor; } + + @EditableProperty(name = "Show shaft") + public boolean getShowShaft() { + return showShaft; + } + + public void setShowShaft(boolean showShaft) { + this.showShaft = showShaft; + this.body = null; + } + + @EditableProperty(name = "Wafer") + public Color getWaferColor() { + if (waferColor == null) + waferColor = WAFER_COLOR; + return waferColor; + } + + public void setWaferColor(Color waferColor) { + this.waferColor = waferColor; + } + + public enum Type { + ThroughHole("Through Hole"), PCB("PCB"); + + private String value; + + private Type(String value) { + this.value = value; + } + + @Override + public String toString() { + return value; + } + } } diff --git a/diylc/diylc-swing/lib/diylc-core.jar b/diylc/diylc-swing/lib/diylc-core.jar index e605a9311f3525395b656a3da007d7c5843ca6bb..8bcba159a55594f311fb3cabe897ab2a530e52e0 100644 GIT binary patch delta 4779 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 AhX4Qo delta 4779 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 diff --git a/diylc/diylc-swing/library/main.jar b/diylc/diylc-swing/library/main.jar index c3df7260f823b6746604c0bc109879e87186478f..5e4300283641520ecd96ec162a17381c1668d4cb 100644 GIT binary patch delta 13908 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 ZF_{?x&@iD;FQ9))dMFhC7iif<{STY?doTb1 delta 12336 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 b1_4QKQ$qkALm136`0qP?__@&sv&Z~Dbg%y4 diff --git a/diylc/diylc-swing/update.xml b/diylc/diylc-swing/update.xml index 249f5e31..10fc4627 100644 --- a/diylc/diylc-swing/update.xml +++ b/diylc/diylc-swing/update.xml @@ -1748,6 +1748,22 @@ https://github.com/bancika/diy-layout-creator/releases + + + + 3 + 40 + 0 + + 2017-04-25 00:00:00.000 CET + + + + NEW_FEATURE + Potentiometers can show an optional shaft, can have either solder lugs or PCB pins and rendering includes the wafer + + + https://github.com/bancika/diy-layout-creator/releases \ No newline at end of file