From 02d38bed019247d8dc29fc752dd3c6851f02b97b Mon Sep 17 00:00:00 2001 From: bancika Date: Mon, 31 Jan 2011 22:47:21 +0000 Subject: [PATCH] added eyelet/turret --- .../DIYLC/library/main.jar | Bin 82357 -> 84337 bytes .../DIYLC/update.xml | 4 + .../diylc/components/boards/EyeletBoard.java | 6 +- .../diylc/components/connectivity/Eyelet.java | 136 ++++++++++++++++++ 4 files changed, 143 insertions(+), 3 deletions(-) create mode 100644 diy-layout-creator --username bancika@gmail.com/Library/src/org/diylc/components/connectivity/Eyelet.java diff --git a/ diy-layout-creator --username bancika@gmail.com/DIYLC/library/main.jar b/ diy-layout-creator --username bancika@gmail.com/DIYLC/library/main.jar index 60c51b4a66d9f1a22b9e306a095eec44534463df..7b4aebce64eec66559dd8c02f98080b5897fcd41 100644 GIT binary patch delta 6925 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 delta 4928 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 diff --git a/ diy-layout-creator --username bancika@gmail.com/DIYLC/update.xml b/ diy-layout-creator --username bancika@gmail.com/DIYLC/update.xml index 3f216920..be6466b9 100644 --- a/ diy-layout-creator --username bancika@gmail.com/DIYLC/update.xml +++ b/ diy-layout-creator --username bancika@gmail.com/DIYLC/update.xml @@ -175,6 +175,10 @@ NEW_FEATURE Added capacitor schematic symbol + + NEW_FEATURE + Added eyelet/turret component + http://code.google.com/p/diy-layout-creator/downloads/list diff --git a/ diy-layout-creator --username bancika@gmail.com/Library/src/org/diylc/components/boards/EyeletBoard.java b/ diy-layout-creator --username bancika@gmail.com/Library/src/org/diylc/components/boards/EyeletBoard.java index 59ded63b..4fe5f1a9 100644 --- a/ diy-layout-creator --username bancika@gmail.com/Library/src/org/diylc/components/boards/EyeletBoard.java +++ b/ diy-layout-creator --username bancika@gmail.com/Library/src/org/diylc/components/boards/EyeletBoard.java @@ -22,9 +22,9 @@ public class EyeletBoard extends AbstractBoard { public static Color EYELET_COLOR = Color.decode("#C3E4ED"); - public static Size SPACING = new Size(0.3d, SizeUnit.in); - public static Size EYELET_SIZE = new Size(1/8d, SizeUnit.in); - public static Size HOLE_SIZE = new Size(2d, SizeUnit.mm); + public static Size SPACING = new Size(0.5d, SizeUnit.in); + public static Size EYELET_SIZE = new Size(0.2d, SizeUnit.in); + public static Size HOLE_SIZE = new Size(0.1d, SizeUnit.in); // private Area copperArea; protected Size spacing = SPACING; diff --git a/ diy-layout-creator --username bancika@gmail.com/Library/src/org/diylc/components/connectivity/Eyelet.java b/ diy-layout-creator --username bancika@gmail.com/Library/src/org/diylc/components/connectivity/Eyelet.java new file mode 100644 index 00000000..8a5b4207 --- /dev/null +++ b/ diy-layout-creator --username bancika@gmail.com/Library/src/org/diylc/components/connectivity/Eyelet.java @@ -0,0 +1,136 @@ +package org.diylc.components.connectivity; + +import java.awt.Color; +import java.awt.Graphics2D; +import java.awt.Point; + +import org.diylc.components.AbstractComponent; +import org.diylc.core.ComponentState; +import org.diylc.core.IDIYComponent; +import org.diylc.core.IDrawingObserver; +import org.diylc.core.Project; +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 = "Eyelet", category = "Connectivity", author = "Branislav Stojkovic", description = "Eyelet or turret terminal", instanceNamePrefix = "Eyelet", stretchable = false, zOrder = IDIYComponent.TRACE + 0.1) +public class Eyelet extends AbstractComponent { + + private static final long serialVersionUID = 1L; + + public static Size SIZE = new Size(0.2d, SizeUnit.in); + public static Size HOLE_SIZE = new Size(0.1d, SizeUnit.in); + public static Color COLOR = Color.decode("#C3E4ED"); + + private Size size = SIZE; + private Size holeSize = HOLE_SIZE; + private Color color = COLOR; + private Point point = new Point(0, 0); + private String value = ""; + + @Override + public void draw(Graphics2D g2d, ComponentState componentState, Project project, + IDrawingObserver drawingObserver) { + int diameter = getClosestOdd(size.convertToPixels()); + int holeDiameter = getClosestOdd(holeSize.convertToPixels()); + g2d.setColor(color); + g2d.fillOval(point.x - diameter / 2, point.y - diameter / 2, diameter, diameter); + g2d.setColor(componentState == ComponentState.SELECTED + || componentState == ComponentState.DRAGGING ? SELECTION_COLOR : color.darker()); + g2d.drawOval(point.x - diameter / 2, point.y - diameter / 2, diameter, diameter); + g2d.setColor(Constants.CANVAS_COLOR); + g2d.fillOval(point.x - holeDiameter / 2, point.y - holeDiameter / 2, holeDiameter, + holeDiameter); + g2d.setColor(componentState == ComponentState.SELECTED + || componentState == ComponentState.DRAGGING ? SELECTION_COLOR : color.darker()); + g2d.drawOval(point.x - holeDiameter / 2, point.y - holeDiameter / 2, holeDiameter, + holeDiameter); + } + + @Override + public void drawIcon(Graphics2D g2d, int width, int height) { + int diameter = getClosestOdd(width / 2); + int holeDiameter = 5; + g2d.setColor(COLOR); + g2d.fillOval((width - diameter) / 2, (height - diameter) / 2, diameter, diameter); + g2d.setColor(COLOR.darker()); + g2d.drawOval((width - diameter) / 2, (height - diameter) / 2, diameter, diameter); + g2d.setColor(Constants.CANVAS_COLOR); + g2d.fillOval((width - holeDiameter) / 2, (height - holeDiameter) / 2, holeDiameter, + holeDiameter); + g2d.setColor(COLOR.darker()); + g2d.drawOval((width - holeDiameter) / 2, (height - holeDiameter) / 2, holeDiameter, + holeDiameter); + } + + @EditableProperty + public Size getSize() { + return size; + } + + public void setSize(Size size) { + this.size = size; + } + + @EditableProperty(name = "Hole size") + public Size getHoleSize() { + return holeSize; + } + + public void setHoleSize(Size holeSize) { + this.holeSize = holeSize; + } + + @Override + public String getName() { + return super.getName(); + } + + @Override + public int getControlPointCount() { + return 1; + } + + @Override + public boolean isControlPointSticky(int index) { + return true; + } + + @Override + public VisibilityPolicy getControlPointVisibilityPolicy(int index) { + return VisibilityPolicy.NEVER; + } + + @Override + public Point getControlPoint(int index) { + return point; + } + + @Override + public void setControlPoint(Point point, int index) { + this.point.setLocation(point); + } + + @EditableProperty(name = "Color") + public Color getColor() { + return color; + } + + public void setColor(Color color) { + this.color = color; + } + + @Override + @EditableProperty + public String getValue() { + return value; + } + + @Override + public void setValue(String value) { + this.value = value; + } +}