From aa434048f322bb903633d0faaf35c833484e34d7 Mon Sep 17 00:00:00 2001 From: bancika Date: Wed, 28 Mar 2012 02:04:08 +0000 Subject: [PATCH] 9v battery snap --- .../electromechanical/BatterySnap9V.java | 252 ++++++++++++++++++ .../diylc-swing/library/main.jar | Bin 188791 -> 194158 bytes .../diylc-swing/update.xml | 6 +- 3 files changed, 257 insertions(+), 1 deletion(-) create mode 100644 diy-layout-creator --username bancika@gmail.com/diylc-library/src/org/diylc/components/electromechanical/BatterySnap9V.java diff --git a/ diy-layout-creator --username bancika@gmail.com/diylc-library/src/org/diylc/components/electromechanical/BatterySnap9V.java b/ diy-layout-creator --username bancika@gmail.com/diylc-library/src/org/diylc/components/electromechanical/BatterySnap9V.java new file mode 100644 index 00000000..461c3c0a --- /dev/null +++ b/ diy-layout-creator --username bancika@gmail.com/diylc-library/src/org/diylc/components/electromechanical/BatterySnap9V.java @@ -0,0 +1,252 @@ +package org.diylc.components.electromechanical; + +import java.awt.AlphaComposite; +import java.awt.Color; +import java.awt.Composite; +import java.awt.Graphics2D; +import java.awt.Point; +import java.awt.Polygon; +import java.awt.Shape; +import java.awt.geom.AffineTransform; +import java.awt.geom.Area; +import java.awt.geom.Ellipse2D; +import java.awt.geom.Rectangle2D; + +import org.diylc.appframework.miscutils.ConfigurationManager; +import org.diylc.common.IPlugInPort; +import org.diylc.common.ObjectCache; +import org.diylc.common.Orientation; +import org.diylc.components.AbstractTransparentComponent; +import org.diylc.core.ComponentState; +import org.diylc.core.IDIYComponent; +import org.diylc.core.IDrawingObserver; +import org.diylc.core.Project; +import org.diylc.core.Theme; +import org.diylc.core.VisibilityPolicy; +import org.diylc.core.annotations.ComponentDescriptor; +import org.diylc.core.annotations.EditableProperty; +import org.diylc.core.measures.Size; +import org.diylc.core.measures.SizeUnit; +import org.diylc.utils.Constants; + +@ComponentDescriptor(name = "9V Battery Snap", category = "Electromechanical", author = "Branislav Stojkovic", description = "", stretchable = false, zOrder = IDIYComponent.COMPONENT, instanceNamePrefix = "BTR") +public class BatterySnap9V extends AbstractTransparentComponent { + + private static final long serialVersionUID = 1L; + + private static Color BODY_COLOR = Color.darkGray; + private static Size WIDTH = new Size(0.5d, SizeUnit.in); + private static Size LENGTH = new Size(0.75d, SizeUnit.in); + private static Size TERMINAL_DIAMETER = new Size(0.3d, SizeUnit.in); + private static Size TERMINAL_SPACING = new Size(0.5d, SizeUnit.in); + private static Size TERMINAL_BORDER = new Size(0.7d, SizeUnit.mm); + + private String value = ""; + private Point controlPoint = new Point(0, 0); + transient Shape[] body; + private Orientation orientation = Orientation.DEFAULT; + private Color color = BODY_COLOR; + + @Override + public void draw(Graphics2D g2d, ComponentState componentState, boolean outlineMode, + Project project, IDrawingObserver drawingObserver) { + Shape[] body = getBody(); + + g2d.setStroke(ObjectCache.getInstance().fetchBasicStroke(1)); + if (componentState != ComponentState.DRAGGING) { + Composite oldComposite = g2d.getComposite(); + if (alpha < MAX_ALPHA) { + g2d.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_OVER, 1f * alpha + / MAX_ALPHA)); + } + g2d.setColor(outlineMode ? Constants.TRANSPARENT_COLOR : color); + g2d.fill(body[0]); + g2d.setColor(outlineMode ? Constants.TRANSPARENT_COLOR : METAL_COLOR); + g2d.fill(body[1]); + g2d.fill(body[2]); + g2d.setComposite(oldComposite); + } + + Color finalBorderColor; + if (outlineMode) { + Theme theme = (Theme) ConfigurationManager.getInstance().readObject( + IPlugInPort.THEME_KEY, Constants.DEFAULT_THEME); + finalBorderColor = componentState == ComponentState.SELECTED + || componentState == ComponentState.DRAGGING ? SELECTION_COLOR : theme + .getOutlineColor(); + } else { + finalBorderColor = componentState == ComponentState.SELECTED + || componentState == ComponentState.DRAGGING ? SELECTION_COLOR : color + .brighter(); + } + + g2d.setColor(finalBorderColor); + g2d.draw(body[0]); + g2d.setColor(METAL_COLOR.darker()); + g2d.draw(body[1]); + g2d.setColor(METAL_COLOR.darker()); + g2d.draw(body[2]); + } + + public Shape[] getBody() { + if (body == null) { + body = new Shape[3]; + + int x = controlPoint.x; + int y = controlPoint.y; + int width = (int) WIDTH.convertToPixels(); + int length = (int) LENGTH.convertToPixels(); + int totalLength = length + width / 2; + int terminalDiameter = (int) TERMINAL_DIAMETER.convertToPixels(); + int terminalSpacing = (int) TERMINAL_SPACING.convertToPixels(); + int terminalBorder = (int) TERMINAL_BORDER.convertToPixels(); + + Area mainArea = new Area(new Rectangle2D.Double(x, y - width / 2, length, width)); + mainArea.add(new Area(new Ellipse2D.Double(x + length - width / 2, y - width / 2, + width, width))); + + body[0] = mainArea; + + Area terminalArea = new Area(new Ellipse2D.Double(x + (totalLength - terminalSpacing) + / 2 - terminalDiameter / 2, y - terminalDiameter / 2, terminalDiameter, + terminalDiameter)); + + int centerX = x + (totalLength + terminalSpacing) / 2; + int[] terminalX = new int[6]; + int[] terminalY = new int[6]; + + for (int i = 0; i < 6; i++) { + terminalX[i] = (int) (centerX + Math.cos(Math.PI / 3 * i) * terminalDiameter / 2); + terminalY[i] = (int) (y + Math.sin(Math.PI / 3 * i) * terminalDiameter / 2); + } + terminalArea.add(new Area(new Polygon(terminalX, terminalY, 6))); + + body[1] = terminalArea; + + terminalArea = new Area(new Ellipse2D.Double(x + (totalLength - terminalSpacing) / 2 + - terminalDiameter / 2 + terminalBorder, y - terminalDiameter / 2 + + terminalBorder, terminalDiameter - 2 * terminalBorder, terminalDiameter - 2 + * terminalBorder)); + + for (int i = 0; i < 6; i++) { + terminalX[i] = (int) (centerX + Math.cos(Math.PI / 3 * i) + * (terminalDiameter / 2 + terminalBorder)); + terminalY[i] = (int) (y + Math.sin(Math.PI / 3 * i) + * (terminalDiameter / 2 + terminalBorder)); + } + terminalArea.add(new Area(new Polygon(terminalX, terminalY, 6))); + + body[2] = terminalArea; + + // Rotate if needed + if (orientation != Orientation.DEFAULT) { + double theta = 0; + switch (orientation) { + case _90: + theta = Math.PI / 2; + break; + case _180: + theta = Math.PI; + break; + case _270: + theta = Math.PI * 3 / 2; + break; + } + AffineTransform rotation = AffineTransform.getRotateInstance(theta, x, y); + for (Shape shape : body) { + Area area = (Area) shape; + area.transform(rotation); + } + } + } + return body; + } + + @Override + public void drawIcon(Graphics2D g2d, int width, int height) { + g2d.setColor(BODY_COLOR); + g2d.fillOval(width / 4, width / 32, width / 2, width / 2); + g2d.setColor(BODY_COLOR.darker()); + g2d.drawOval(width / 4, width / 32, width / 2, width / 2); + g2d.setColor(BODY_COLOR); + g2d.fillRect(width / 4, width / 32 + width / 4, width / 2, width * 3 / 4 - 2 * width / 32); + g2d.setColor(BODY_COLOR.darker()); + g2d.drawRect(width / 4, width / 32 + width / 4, width / 2, width * 3 / 4 - 2 * width / 32); + g2d.setColor(METAL_COLOR); + g2d.fillOval(width / 4 + 3 * width / 32, width / 32 + 3 * width / 32, width / 2 - 6 * width + / 32, width / 2 - 6 * width / 32); + + int centerX = width / 2; + int centerY = height * 7 / 9; + int terminalDiameter = width / 2 - 4 * width / 32; + int[] terminalX = new int[6]; + int[] terminalY = new int[6]; + + for (int i = 0; i < 6; i++) { + terminalX[i] = (int) (centerX + Math.cos(Math.PI / 3 * i) * terminalDiameter / 2); + terminalY[i] = (int) (centerY + Math.sin(Math.PI / 3 * i) * terminalDiameter / 2); + } + g2d.fillPolygon(terminalX, terminalY, 6); + g2d.setColor(METAL_COLOR.darker()); + g2d.drawOval(width / 4 + 3 * width / 32, width / 32 + 3 * width / 32, width / 2 - 6 * width + / 32, width / 2 - 6 * width / 32); + g2d.drawPolygon(terminalX, terminalY, 6); + } + + @Override + public int getControlPointCount() { + return 1; + } + + @Override + public VisibilityPolicy getControlPointVisibilityPolicy(int index) { + return VisibilityPolicy.WHEN_SELECTED; + } + + @Override + public boolean isControlPointSticky(int index) { + return true; + } + + @Override + public Point getControlPoint(int index) { + return controlPoint; + } + + @Override + public void setControlPoint(Point point, int index) { + this.controlPoint.setLocation(point); + // Invalidate the body + body = null; + } + + @Override + public String getValue() { + return value; + } + + @Override + public void setValue(String value) { + this.value = value; + } + + @EditableProperty + public Orientation getOrientation() { + return orientation; + } + + public void setOrientation(Orientation orientation) { + this.orientation = orientation; + // Invalidate the body + body = null; + } + + @EditableProperty + public Color getColor() { + return color; + } + + public void setColor(Color color) { + this.color = color; + } +} 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 dcb2e55289eadfbc8a8e28a961c79ac638998178..aaa4c316d8ed2b1938f58e44a4d7e899481bfb1b 100644 GIT binary patch delta 10920 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

s`an^r-+%hk{%O3Y|^=2P7z^l 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 T#lWyl@b|}j4D%$97uf#+-%Nv* 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 c0a6b75f..d554d4e9 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 @@ -579,12 +579,16 @@ 7 0 - 2012-03-21 20:00:00.000 CET + 2012-03-27 20:00:00.000 CET NEW_FEATURE Lever guitar switch + + + NEW_FEATURE + 9V battery snap http://code.google.com/p/diy-layout-creator/downloads/list