diff --git a/ diy-layout-creator --username bancika@gmail.com/diylc-core/.classpath b/ diy-layout-creator --username bancika@gmail.com/diylc-core/.classpath index c0ec8be1..1d2aca0d 100644 --- a/ diy-layout-creator --username bancika@gmail.com/diylc-core/.classpath +++ b/ diy-layout-creator --username bancika@gmail.com/diylc-core/.classpath @@ -8,6 +8,6 @@ - + diff --git a/ diy-layout-creator --username bancika@gmail.com/diylc-core/library/main.jar b/ diy-layout-creator --username bancika@gmail.com/diylc-core/library/main.jar index 7c39bd34..e439b308 100644 Binary files a/ diy-layout-creator --username bancika@gmail.com/diylc-core/library/main.jar and b/ diy-layout-creator --username bancika@gmail.com/diylc-core/library/main.jar differ diff --git a/ diy-layout-creator --username bancika@gmail.com/diylc-library/.classpath b/ diy-layout-creator --username bancika@gmail.com/diylc-library/.classpath index 19090f8d..dc0adbd6 100644 --- a/ diy-layout-creator --username bancika@gmail.com/diylc-library/.classpath +++ b/ diy-layout-creator --username bancika@gmail.com/diylc-library/.classpath @@ -5,6 +5,6 @@ - + diff --git a/ diy-layout-creator --username bancika@gmail.com/diylc-library/src/org/diylc/components/passive/PotentiometerSymbol.java b/ diy-layout-creator --username bancika@gmail.com/diylc-library/src/org/diylc/components/passive/PotentiometerSymbol.java index 92c036bc..1eb69a46 100644 --- a/ diy-layout-creator --username bancika@gmail.com/diylc-library/src/org/diylc/components/passive/PotentiometerSymbol.java +++ b/ diy-layout-creator --username bancika@gmail.com/diylc-library/src/org/diylc/components/passive/PotentiometerSymbol.java @@ -1,18 +1,26 @@ package org.diylc.components.passive; +import java.awt.Color; +import java.awt.FontMetrics; import java.awt.Graphics2D; +import java.awt.Polygon; import java.awt.Shape; import java.awt.geom.GeneralPath; +import java.awt.geom.Rectangle2D; import org.diylc.core.IDIYComponent; import org.diylc.core.annotations.ComponentDescriptor; import org.diylc.components.semiconductors.AbstractTransistorSymbol; -@ComponentDescriptor(name = "Trimmer Symbol", author = "MCbx", category = "Schematics", instanceNamePrefix = " VR", description = "Trimmer (potentiometer) symbol", stretchable = false, zOrder = IDIYComponent.COMPONENT, rotatable = true) +@ComponentDescriptor(name = "Potentiometer Symbol", author = "MCbx", category = "Schematics", instanceNamePrefix = " VR", description = "Potentiometer symbol", stretchable = false, zOrder = IDIYComponent.COMPONENT, rotatable = true) public class PotentiometerSymbol extends AbstractTransistorSymbol { private static final long serialVersionUID = 1L; + public PotentiometerSymbol() { + this.color = Color.blue; + } + public Shape[] getBody() { if (body == null) { body = new Shape[3]; @@ -41,30 +49,65 @@ public class PotentiometerSymbol extends AbstractTransistorSymbol { polyline.lineTo(x + pinSpacing * 2, (y - pinSpacing * 2) + 7 * pinSpacing / 2); polyline.lineTo(x + pinSpacing * 2, y + pinSpacing * 2); polyline.moveTo(x, y); - polyline.lineTo(x + pinSpacing * 2 - pinSpacing / 4, y); - polyline.lineTo(x + pinSpacing * 2 - 2 * pinSpacing / 3, y - pinSpacing / 2); - polyline.moveTo(x + pinSpacing * 2 - pinSpacing / 4, y); - polyline.lineTo(x + pinSpacing * 2 - 2 * pinSpacing / 3, y + pinSpacing / 2); - - body[0] = polyline; - polyline = new GeneralPath(); + polyline.lineTo(x + pinSpacing * 2 - pinSpacing / 2, y); body[1] = polyline; + polyline = new GeneralPath(); + + body[0] = polyline; + + polyline = new GeneralPath(); + polyline.moveTo(x + pinSpacing * 2 - pinSpacing / 3, y); + polyline.lineTo(x + pinSpacing * 2 - pinSpacing * 2 / 3, y - pinSpacing / 3); + polyline.lineTo(x + pinSpacing * 2 - pinSpacing * 2 / 3, y + pinSpacing / 3); + polyline.lineTo(x + pinSpacing * 2 - pinSpacing / 3, y); body[2] = polyline; } return body; } + @Override + protected int getLabelX(Rectangle2D shapeRect, Rectangle2D textRect, FontMetrics fontMetrics, boolean outlineMode) { + int pinSpacing = (int) PIN_SPACING.convertToPixels(); + if (controlPoints[0].x < controlPoints[1].x && controlPoints[0].x < controlPoints[2].x) + return controlPoints[1].x + pinSpacing / 3; + if (controlPoints[0].y < controlPoints[1].y && controlPoints[0].y < controlPoints[2].y) + return controlPoints[0].x - (int) (textRect.getWidth() / 2); + if (controlPoints[0].x > controlPoints[1].x && controlPoints[0].x > controlPoints[2].x) + return controlPoints[1].x - pinSpacing / 2 - (int)textRect.getWidth(); + if (controlPoints[0].y > controlPoints[1].y && controlPoints[0].y > controlPoints[2].y) + return controlPoints[0].x - (int) (textRect.getWidth() / 2); + return 2 * ((int) (shapeRect.getWidth() - textRect.getWidth()) / 2 + (int) shapeRect.getX()); + } + + @Override + protected int getLabelY(Rectangle2D shapeRect, Rectangle2D textRect, FontMetrics fontMetrics, boolean outlineMode) { + int pinSpacing = (int) PIN_SPACING.convertToPixels(); + if (controlPoints[0].x < controlPoints[1].x && controlPoints[0].x < controlPoints[2].x) + return controlPoints[0].y; + if (controlPoints[0].y < controlPoints[1].y && controlPoints[0].y < controlPoints[2].y) + return controlPoints[1].y + pinSpacing * 2 / 3; + if (controlPoints[0].x > controlPoints[1].x && controlPoints[0].x > controlPoints[2].x) + return controlPoints[0].y; + if (controlPoints[0].y > controlPoints[1].y && controlPoints[0].y > controlPoints[2].y) + return controlPoints[1].y - pinSpacing * 2 / 3; + return 2 * ((int) (shapeRect.getHeight() - textRect.getHeight()) / 2 + fontMetrics.getAscent() + + (int) shapeRect.getY()); + } + @Override public void drawIcon(Graphics2D g2d, int width, int height) { g2d.rotate(-Math.PI / 4, width / 2, height / 2); - g2d.setColor(COLOR); + g2d.setColor(Color.blue); g2d.drawLine(0, height / 2, 4, height / 2); g2d.drawLine(width - 4, height / 2, width, height / 2); g2d.drawPolyline(new int[] { 4, 6, 10, 14, 18, 22, 26, 28 }, new int[] { height / 2, height / 2 + 2, height / 2 - 2, height / 2 + 2, height / 2 - 2, height / 2 + 2, height / 2 - 2, height / 2 }, 8); - g2d.drawPolyline(new int[] { width / 2, width / 2 - 2, width / 2 - 4, width / 2 + 2, width / 2 - 2 }, - new int[] { height, height / 2 + 2, height / 2 + 6, height / 2 + 6, height / 2 + 2 }, 5); + + g2d.drawPolyline(new int[] { width / 2, width / 2 - 2 }, new int[] { height, height / 2 + 2 }, 2); + + g2d.fill(new Polygon(new int[] { width / 2 - 4, width / 2 + 2, width / 2 - 2 }, + new int[] { height / 2 + 6, height / 2 + 6, height / 2 + 2 }, 3)); } } \ No newline at end of file diff --git a/ diy-layout-creator --username bancika@gmail.com/diylc-library/src/org/diylc/components/semiconductors/AbstractTransistorSymbol.java b/ diy-layout-creator --username bancika@gmail.com/diylc-library/src/org/diylc/components/semiconductors/AbstractTransistorSymbol.java index f7d718e4..d09a6476 100644 --- a/ diy-layout-creator --username bancika@gmail.com/diylc-library/src/org/diylc/components/semiconductors/AbstractTransistorSymbol.java +++ b/ diy-layout-creator --username bancika@gmail.com/diylc-library/src/org/diylc/components/semiconductors/AbstractTransistorSymbol.java @@ -1,10 +1,13 @@ package org.diylc.components.semiconductors; import java.awt.Color; +import java.awt.FontMetrics; import java.awt.Graphics2D; import java.awt.Point; +import java.awt.Rectangle; import java.awt.Shape; import java.awt.geom.AffineTransform; +import java.awt.geom.Rectangle2D; import org.diylc.appframework.miscutils.ConfigurationManager; import org.diylc.common.Display; @@ -35,7 +38,7 @@ public abstract class AbstractTransistorSymbol extends AbstractComponent protected Point[] controlPoints = new Point[] { new Point(0, 0), new Point(0, 0), new Point(0, 0) }; protected Color color = COLOR; - protected SymbolFlipping flipping = FLIPPING; + protected SymbolFlipping flip = FLIPPING; protected Display display = Display.NAME; transient protected Shape[] body; @@ -90,7 +93,7 @@ public abstract class AbstractTransistorSymbol extends AbstractComponent AffineTransform old = g2d.getTransform(); g2d.rotate(Math.toRadians(rotation),controlPoints[0].x,controlPoints[0].y); - if (this.flipping==SymbolFlipping.Y){ + if (this.flip==SymbolFlipping.Y){ g2d.translate(0,controlPoints[0].y); g2d.scale(1, -1); g2d.translate(0, -1*controlPoints[0].y); @@ -129,8 +132,13 @@ public abstract class AbstractTransistorSymbol extends AbstractComponent if (display==Display.BOTH) { label=getName()+" "+(getValue() == null ? "" : getValue().toString()); } + + FontMetrics fontMetrics = g2d.getFontMetrics(); + Rectangle2D textRect = fontMetrics.getStringBounds(label, g2d); + Rectangle shapeRect = body[0].getBounds().union(body[1].getBounds()).union(body[2].getBounds()); + drawCenteredText(g2d, label, - x + pinSpacing * 2, y, HorizontalAlignment.LEFT, VerticalAlignment.CENTER); + getLabelX(shapeRect, textRect, fontMetrics, outlineMode), getLabelY(shapeRect, textRect, fontMetrics, outlineMode), HorizontalAlignment.LEFT, VerticalAlignment.CENTER); } @Override @@ -142,6 +150,14 @@ public abstract class AbstractTransistorSymbol extends AbstractComponent public int getControlPointCount() { return controlPoints.length; } + + protected int getLabelX(Rectangle2D shapeRect, Rectangle2D textRect, FontMetrics fontMetrics, boolean outlineMode) { + return controlPoints[0].x + (int) PIN_SPACING.convertToPixels() * 2; + } + + protected int getLabelY(Rectangle2D shapeRect, Rectangle2D textRect, FontMetrics fontMetrics, boolean outlineMode) { + return controlPoints[0].y; + } private void updateControlPoints() { int pinSpacing = (int) PIN_SPACING.convertToPixels(); @@ -185,12 +201,12 @@ public abstract class AbstractTransistorSymbol extends AbstractComponent } @EditableProperty - public SymbolFlipping getFlipping() { - return flipping; + public SymbolFlipping getFlip() { + return flip; } - public void setFlipping(SymbolFlipping flipping) { - this.flipping = flipping; + public void setFlip(SymbolFlipping flip) { + this.flip = flip; } @EditableProperty diff --git a/ diy-layout-creator --username bancika@gmail.com/diylc-library/src/org/diylc/components/semiconductors/SymbolFlipping.java b/ diy-layout-creator --username bancika@gmail.com/diylc-library/src/org/diylc/components/semiconductors/SymbolFlipping.java index 1b77e82a..d4b146a5 100644 --- a/ diy-layout-creator --username bancika@gmail.com/diylc-library/src/org/diylc/components/semiconductors/SymbolFlipping.java +++ b/ diy-layout-creator --username bancika@gmail.com/diylc-library/src/org/diylc/components/semiconductors/SymbolFlipping.java @@ -6,6 +6,13 @@ public enum SymbolFlipping { @Override public String toString() { - return name(); + switch (this) { + case Y: + return "Y-axis"; + case NONE: + return "None"; + default: + return name(); + } } } \ No newline at end of file diff --git a/ diy-layout-creator --username bancika@gmail.com/diylc-swing/.classpath b/ diy-layout-creator --username bancika@gmail.com/diylc-swing/.classpath index b7926aca..46ccb2bb 100644 --- a/ diy-layout-creator --username bancika@gmail.com/diylc-swing/.classpath +++ b/ diy-layout-creator --username bancika@gmail.com/diylc-swing/.classpath @@ -15,6 +15,6 @@ - + diff --git a/ diy-layout-creator --username bancika@gmail.com/diylc-swing/DIYLCStarter.launch b/ diy-layout-creator --username bancika@gmail.com/diylc-swing/DIYLCStarter.launch index 23679b63..8a6de7d1 100644 --- a/ diy-layout-creator --username bancika@gmail.com/diylc-swing/DIYLCStarter.launch +++ b/ diy-layout-creator --username bancika@gmail.com/diylc-swing/DIYLCStarter.launch @@ -9,6 +9,7 @@ + diff --git a/ diy-layout-creator --username bancika@gmail.com/diylc-swing/library/main.jar b/ diy-layout-creator --username bancika@gmail.com/diylc-swing/library/main.jar index 7c39bd34..e439b308 100644 Binary files a/ diy-layout-creator --username bancika@gmail.com/diylc-swing/library/main.jar and b/ diy-layout-creator --username bancika@gmail.com/diylc-swing/library/main.jar differ diff --git a/ diy-layout-creator --username bancika@gmail.com/diylc-swing/update.xml b/ diy-layout-creator --username bancika@gmail.com/diylc-swing/update.xml index eef1fd35..57ea2952 100644 --- a/ diy-layout-creator --username bancika@gmail.com/diylc-swing/update.xml +++ b/ diy-layout-creator --username bancika@gmail.com/diylc-swing/update.xml @@ -1296,6 +1296,22 @@ http://code.google.com/p/diy-layout-creator/downloads/list + + + + 3 + 30 + 0 + + 2016-04-25 20:00:00.000 CET + + + + IMPROVEMENT + Improved potentiometer symbol appearance + + + http://code.google.com/p/diy-layout-creator/downloads/list \ No newline at end of file