diff --git a/ diy-layout-creator --username bancika@gmail.com/DIYLC/config.xml b/ diy-layout-creator --username bancika@gmail.com/DIYLC/config.xml index 197268d1..617573b7 100644 --- a/ diy-layout-creator --username bancika@gmail.com/DIYLC/config.xml +++ b/ diy-layout-creator --username bancika@gmail.com/DIYLC/config.xml @@ -1,15 +1,15 @@ - lastPath - C:\Documents and Settings\Branislav Stojkovic\workspace\DIYLC\templates + metric + true zoom 1.0 - metric - true + lastPath + C:\Documents and Settings\Branislav Stojkovic\workspace\DIYLC\templates default.org.diylc.components.misc.Label:Color 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 698fe03f..a54cc0a7 100644 Binary files a/ diy-layout-creator --username bancika@gmail.com/DIYLC/library/main.jar and b/ diy-layout-creator --username bancika@gmail.com/DIYLC/library/main.jar differ diff --git a/ diy-layout-creator --username bancika@gmail.com/DIYLC/src/org/diylc/components/AbstractLeadedComponent.java b/ diy-layout-creator --username bancika@gmail.com/DIYLC/src/org/diylc/components/AbstractLeadedComponent.java index d1370e65..71d5cb22 100644 --- a/ diy-layout-creator --username bancika@gmail.com/DIYLC/src/org/diylc/components/AbstractLeadedComponent.java +++ b/ diy-layout-creator --username bancika@gmail.com/DIYLC/src/org/diylc/components/AbstractLeadedComponent.java @@ -40,8 +40,8 @@ public abstract class AbstractLeadedComponent extends AbstractTransparentComp protected Point[] points = new Point[] { new Point((int) (-DEFAULT_SIZE.convertToPixels() / 2), 0), new Point(DEFAULT_SIZE.convertToPixels() / 2, 0) }; - protected Color bodyColor = getDefaultBodyColor(); - protected Color borderColor = getDefaultBorderColor(); + protected Color bodyColor = Color.white; + protected Color borderColor = Color.black; protected Color labelColor = LABEL_COLOR; protected Display display = Display.NAME; @@ -162,16 +162,6 @@ public abstract class AbstractLeadedComponent extends AbstractTransparentComp */ protected abstract Shape getBodyShape(); - /** - * @return default component body color. - */ - protected abstract Color getDefaultBodyColor(); - - /** - * @return default component border color. - */ - protected abstract Color getDefaultBorderColor(); - /** * @return default lead thickness. Override this method to change it. */ diff --git a/ diy-layout-creator --username bancika@gmail.com/DIYLC/src/org/diylc/swing/plugins/statusbar/StatusBar.java b/ diy-layout-creator --username bancika@gmail.com/DIYLC/src/org/diylc/swing/plugins/statusbar/StatusBar.java index b9d15b18..f8808038 100644 --- a/ diy-layout-creator --username bancika@gmail.com/DIYLC/src/org/diylc/swing/plugins/statusbar/StatusBar.java +++ b/ diy-layout-creator --username bancika@gmail.com/DIYLC/src/org/diylc/swing/plugins/statusbar/StatusBar.java @@ -277,12 +277,13 @@ public class StatusBar extends JPanel implements IPlugIn { } else { count = "second"; } - statusText = "Click on the canvas to set the " + count + " control point of a new " - + componentSlot.getName() + " or press Esc to cancel"; + statusText = "Click on the canvas to set the " + count + + " control point of a new " + componentSlot.getName() + + " or press Esc to cancel"; break; case SINGLE_CLICK: - statusText = "Click on the canvas to create a new " + componentSlot.getName() - + " or press Esc to cancel"; + statusText = "Click on the canvas to create a new " + + componentSlot.getName() + " or press Esc to cancel"; break; } } 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 796e3141..7132c0a9 100644 --- a/ diy-layout-creator --username bancika@gmail.com/DIYLC/update.xml +++ b/ diy-layout-creator --username bancika@gmail.com/DIYLC/update.xml @@ -94,6 +94,14 @@ NEW_FEATURE Added support for creating and loading templates + + NEW_FEATURE + Added TO-92 transistor + + + NEW_FEATURE + Added TO-220 transistor + http://code.google.com/p/diy-layout-creator/downloads/list diff --git a/ diy-layout-creator --username bancika@gmail.com/Library/lib/diylc.jar b/ diy-layout-creator --username bancika@gmail.com/Library/lib/diylc.jar index b81007a0..1f1d9673 100644 Binary files a/ diy-layout-creator --username bancika@gmail.com/Library/lib/diylc.jar and b/ diy-layout-creator --username bancika@gmail.com/Library/lib/diylc.jar differ diff --git a/ diy-layout-creator --username bancika@gmail.com/Library/src/org/diylc/components/connectivity/CopperTrace.java b/ diy-layout-creator --username bancika@gmail.com/Library/src/org/diylc/components/connectivity/CopperTrace.java index 3886a69b..dec9f8cb 100644 --- a/ diy-layout-creator --username bancika@gmail.com/Library/src/org/diylc/components/connectivity/CopperTrace.java +++ b/ diy-layout-creator --username bancika@gmail.com/Library/src/org/diylc/components/connectivity/CopperTrace.java @@ -15,7 +15,7 @@ import org.diylc.core.annotations.EditableProperty; import org.diylc.core.measures.Size; import org.diylc.core.measures.SizeUnit; -@ComponentDescriptor(name = "Copper Trace", author = "Branislav Stojkovic", category = "Connectivity", creationMethod = CreationMethod.POINT_BY_POINT, instanceNamePrefix = "Trace", description = "", zOrder = IDIYComponent.TRACE) +@ComponentDescriptor(name = "Copper Trace", author = "Branislav Stojkovic", category = "Connectivity", creationMethod = CreationMethod.POINT_BY_POINT, instanceNamePrefix = "Trace", description = "Straight copper trace", zOrder = IDIYComponent.TRACE) public class CopperTrace extends AbstractLeadedComponent { private static final long serialVersionUID = 1L; @@ -109,16 +109,6 @@ public class CopperTrace extends AbstractLeadedComponent { public void setValue(Void value) { } - @Override - protected Color getDefaultBodyColor() { - return null; - } - - @Override - protected Color getDefaultBorderColor() { - return null; - } - @Override protected Shape getBodyShape() { return null; diff --git a/ diy-layout-creator --username bancika@gmail.com/Library/src/org/diylc/components/connectivity/CurvedTrace.java b/ diy-layout-creator --username bancika@gmail.com/Library/src/org/diylc/components/connectivity/CurvedTrace.java index 956a1942..f5db6e5e 100644 --- a/ diy-layout-creator --username bancika@gmail.com/Library/src/org/diylc/components/connectivity/CurvedTrace.java +++ b/ diy-layout-creator --username bancika@gmail.com/Library/src/org/diylc/components/connectivity/CurvedTrace.java @@ -8,7 +8,6 @@ import org.diylc.common.ObjectCache; import org.diylc.components.AbstractCurvedComponent; import org.diylc.core.ComponentState; import org.diylc.core.IDIYComponent; -import org.diylc.core.VisibilityPolicy; import org.diylc.core.annotations.ComponentDescriptor; import org.diylc.core.annotations.EditableProperty; import org.diylc.core.measures.Size; diff --git a/ diy-layout-creator --username bancika@gmail.com/Library/src/org/diylc/components/connectivity/Jumper.java b/ diy-layout-creator --username bancika@gmail.com/Library/src/org/diylc/components/connectivity/Jumper.java index 3078d6e2..fb6b4296 100644 --- a/ diy-layout-creator --username bancika@gmail.com/Library/src/org/diylc/components/connectivity/Jumper.java +++ b/ diy-layout-creator --username bancika@gmail.com/Library/src/org/diylc/components/connectivity/Jumper.java @@ -74,16 +74,6 @@ public class Jumper extends AbstractLeadedComponent { public void setValue(Void value) { } - @Override - protected Color getDefaultBodyColor() { - return null; - } - - @Override - protected Color getDefaultBorderColor() { - return null; - } - @Override protected Shape getBodyShape() { return null; diff --git a/ diy-layout-creator --username bancika@gmail.com/Library/src/org/diylc/components/connectivity/TraceCut.java b/ diy-layout-creator --username bancika@gmail.com/Library/src/org/diylc/components/connectivity/TraceCut.java index 252a3f19..57772ae8 100644 --- a/ diy-layout-creator --username bancika@gmail.com/Library/src/org/diylc/components/connectivity/TraceCut.java +++ b/ diy-layout-creator --username bancika@gmail.com/Library/src/org/diylc/components/connectivity/TraceCut.java @@ -16,7 +16,7 @@ import org.diylc.core.annotations.EditableProperty; import org.diylc.core.measures.Size; import org.diylc.core.measures.SizeUnit; -@ComponentDescriptor(name = "Trace Cut", category = "Connectivity", author = "Branislav Stojkovic", description = "test", instanceNamePrefix = "Cut", stretchable = false, zOrder = IDIYComponent.BOARD + 1) +@ComponentDescriptor(name = "Trace Cut", category = "Connectivity", author = "Branislav Stojkovic", description = "Designates the place where a trace on the vero board needs to be cut", instanceNamePrefix = "Cut", stretchable = false, zOrder = IDIYComponent.BOARD + 1) public class TraceCut extends AbstractComponent { private static final long serialVersionUID = 1L; diff --git a/ diy-layout-creator --username bancika@gmail.com/Library/src/org/diylc/components/electromechanical/MiniToggleSwitch.java b/ diy-layout-creator --username bancika@gmail.com/Library/src/org/diylc/components/electromechanical/MiniToggleSwitch.java index 0713233c..64b0379d 100644 --- a/ diy-layout-creator --username bancika@gmail.com/Library/src/org/diylc/components/electromechanical/MiniToggleSwitch.java +++ b/ diy-layout-creator --username bancika@gmail.com/Library/src/org/diylc/components/electromechanical/MiniToggleSwitch.java @@ -20,7 +20,7 @@ import org.diylc.core.annotations.EditableProperty; import org.diylc.core.measures.Size; import org.diylc.core.measures.SizeUnit; -@ComponentDescriptor(name = "Mini Toggle Switch", category = "Electromechanical", author = "Branislav Stojkovic", description = "", stretchable = false, zOrder = IDIYComponent.COMPONENT, instanceNamePrefix = "SW") +@ComponentDescriptor(name = "Mini Toggle Switch", category = "Electromechanical", author = "Branislav Stojkovic", description = "Panel mounted mini toggle switch", stretchable = false, zOrder = IDIYComponent.COMPONENT, instanceNamePrefix = "SW") public class MiniToggleSwitch extends AbstractTransparentComponent { private static final long serialVersionUID = 1L; diff --git a/ diy-layout-creator --username bancika@gmail.com/Library/src/org/diylc/components/passive/AxialFilmCapacitor.java b/ diy-layout-creator --username bancika@gmail.com/Library/src/org/diylc/components/passive/AxialFilmCapacitor.java index ed3ce7cc..ce604209 100644 --- a/ diy-layout-creator --username bancika@gmail.com/Library/src/org/diylc/components/passive/AxialFilmCapacitor.java +++ b/ diy-layout-creator --username bancika@gmail.com/Library/src/org/diylc/components/passive/AxialFilmCapacitor.java @@ -29,6 +29,8 @@ public class AxialFilmCapacitor extends AbstractLeadedComponent { public AxialFilmCapacitor() { super(); + this.bodyColor = BODY_COLOR; + this.borderColor = BORDER_COLOR; } @EditableProperty @@ -60,16 +62,6 @@ public class AxialFilmCapacitor extends AbstractLeadedComponent { return DEFAULT_WIDTH; } - @Override - protected Color getDefaultBodyColor() { - return BODY_COLOR; - } - - @Override - protected Color getDefaultBorderColor() { - return BORDER_COLOR; - } - @Override protected Shape getBodyShape() { return new Rectangle2D.Double(0f, 0f, getWidth().convertToPixels(), diff --git a/ diy-layout-creator --username bancika@gmail.com/Library/src/org/diylc/components/passive/ElectrolyticRadial.java b/ diy-layout-creator --username bancika@gmail.com/Library/src/org/diylc/components/passive/ElectrolyticRadial.java index 6a9b3778..6e66ec64 100644 --- a/ diy-layout-creator --username bancika@gmail.com/Library/src/org/diylc/components/passive/ElectrolyticRadial.java +++ b/ diy-layout-creator --username bancika@gmail.com/Library/src/org/diylc/components/passive/ElectrolyticRadial.java @@ -15,7 +15,7 @@ import org.diylc.core.measures.CapacitanceUnit; import org.diylc.core.measures.Size; import org.diylc.core.measures.SizeUnit; -@ComponentDescriptor(name = "Electrolytic Capacitor", author = "Branislav Stojkovic", category = "Passive", creationMethod = CreationMethod.POINT_BY_POINT, instanceNamePrefix = "C", description = "test", zOrder = IDIYComponent.COMPONENT) +@ComponentDescriptor(name = "Electrolytic Capacitor", author = "Branislav Stojkovic", category = "Passive", creationMethod = CreationMethod.POINT_BY_POINT, instanceNamePrefix = "C", description = "Vertical mounted electrolytic capacitor, polarized or bipolar", zOrder = IDIYComponent.COMPONENT) public class ElectrolyticRadial extends AbstractLeadedComponent { private static final long serialVersionUID = 1L; @@ -27,8 +27,12 @@ public class ElectrolyticRadial extends AbstractLeadedComponent { private Capacitance value = new Capacitance(1d, CapacitanceUnit.uF); + private Color coverColor = COVER_COLOR; + public ElectrolyticRadial() { super(); + this.bodyColor = BODY_COLOR; + this.borderColor = BORDER_COLOR; } @EditableProperty @@ -51,10 +55,10 @@ public class ElectrolyticRadial extends AbstractLeadedComponent { protected void decorateComponentBody(Graphics2D g2d) { int totalDiameter = getClosestOdd(getWidth().convertToPixels()); int coverDiameter = getClosestOdd(totalDiameter * 3 / 4); - g2d.setColor(COVER_COLOR); + g2d.setColor(coverColor); int position = (totalDiameter - coverDiameter) / 2; g2d.fillOval(position, position, coverDiameter, coverDiameter); - g2d.setColor(COVER_COLOR.darker()); + g2d.setColor(coverColor.darker()); g2d.drawLine(position + coverDiameter / 5, position + coverDiameter / 5, position + 4 * coverDiameter / 5, position + 4 * coverDiameter / 5); g2d.drawLine(position + coverDiameter / 5, position + 4 * coverDiameter / 5, position + 4 @@ -84,14 +88,13 @@ public class ElectrolyticRadial extends AbstractLeadedComponent { return super.getWidth(); } - @Override - protected Color getDefaultBodyColor() { - return BODY_COLOR; + @EditableProperty(name = "Cover") + public Color getCoverColor() { + return coverColor; } - @Override - protected Color getDefaultBorderColor() { - return BORDER_COLOR; + public void setCoverColor(Color coverColor) { + this.coverColor = coverColor; } @Override diff --git a/ diy-layout-creator --username bancika@gmail.com/Library/src/org/diylc/components/passive/RadialCeramicDiskCapacitor.java b/ diy-layout-creator --username bancika@gmail.com/Library/src/org/diylc/components/passive/RadialCeramicDiskCapacitor.java index 38f6b763..898a4ab4 100644 --- a/ diy-layout-creator --username bancika@gmail.com/Library/src/org/diylc/components/passive/RadialCeramicDiskCapacitor.java +++ b/ diy-layout-creator --username bancika@gmail.com/Library/src/org/diylc/components/passive/RadialCeramicDiskCapacitor.java @@ -29,6 +29,8 @@ public class RadialCeramicDiskCapacitor extends AbstractLeadedComponent { public RadialFilmCapacitor() { super(); + this.bodyColor = BODY_COLOR; + this.borderColor = BORDER_COLOR; } @EditableProperty @@ -60,16 +62,6 @@ public class RadialFilmCapacitor extends AbstractLeadedComponent { return DEFAULT_WIDTH; } - @Override - protected Color getDefaultBodyColor() { - return BODY_COLOR; - } - - @Override - protected Color getDefaultBorderColor() { - return BORDER_COLOR; - } - @Override protected Shape getBodyShape() { double radius = getHeight().convertToPixels() * 0.7; diff --git a/ diy-layout-creator --username bancika@gmail.com/Library/src/org/diylc/components/passive/Resistor.java b/ diy-layout-creator --username bancika@gmail.com/Library/src/org/diylc/components/passive/Resistor.java index 2195439b..ec25540e 100644 --- a/ diy-layout-creator --username bancika@gmail.com/Library/src/org/diylc/components/passive/Resistor.java +++ b/ diy-layout-creator --username bancika@gmail.com/Library/src/org/diylc/components/passive/Resistor.java @@ -32,6 +32,8 @@ public class Resistor extends AbstractLeadedComponent { public Resistor() { super(); + this.bodyColor = BODY_COLOR; + this.borderColor = BORDER_COLOR; } @EditableProperty @@ -63,16 +65,6 @@ public class Resistor extends AbstractLeadedComponent { return DEFAULT_WIDTH; } - @Override - protected Color getDefaultBodyColor() { - return BODY_COLOR; - } - - @Override - protected Color getDefaultBorderColor() { - return BORDER_COLOR; - } - @EditableProperty(name = "Color code") public ResistorColorCode getColorCode() { return colorCode; diff --git a/ diy-layout-creator --username bancika@gmail.com/Library/src/org/diylc/components/semiconductors/DIL_IC.java b/ diy-layout-creator --username bancika@gmail.com/Library/src/org/diylc/components/semiconductors/DIL_IC.java index b0dc7591..812a6b6f 100644 --- a/ diy-layout-creator --username bancika@gmail.com/Library/src/org/diylc/components/semiconductors/DIL_IC.java +++ b/ diy-layout-creator --username bancika@gmail.com/Library/src/org/diylc/components/semiconductors/DIL_IC.java @@ -25,7 +25,7 @@ import org.diylc.core.annotations.EditableProperty; import org.diylc.core.measures.Size; import org.diylc.core.measures.SizeUnit; -@ComponentDescriptor(name = "DIL IC", author = "Branislav Stojkovic", category = "Semiconductors", instanceNamePrefix = "IC", description = "test", stretchable = false, zOrder = IDIYComponent.COMPONENT) +@ComponentDescriptor(name = "DIL IC", author = "Branislav Stojkovic", category = "Semiconductors", instanceNamePrefix = "IC", description = "IC with rectangular housing and two parallel rows of pins", stretchable = false, zOrder = IDIYComponent.COMPONENT) public class DIL_IC extends AbstractTransparentComponent { private static final long serialVersionUID = 1L; diff --git a/ diy-layout-creator --username bancika@gmail.com/Library/src/org/diylc/components/semiconductors/DiodePlastic.java b/ diy-layout-creator --username bancika@gmail.com/Library/src/org/diylc/components/semiconductors/DiodePlastic.java index d0118346..493cb3c5 100644 --- a/ diy-layout-creator --username bancika@gmail.com/Library/src/org/diylc/components/semiconductors/DiodePlastic.java +++ b/ diy-layout-creator --username bancika@gmail.com/Library/src/org/diylc/components/semiconductors/DiodePlastic.java @@ -13,7 +13,7 @@ import org.diylc.core.annotations.EditableProperty; import org.diylc.core.measures.Size; import org.diylc.core.measures.SizeUnit; -@ComponentDescriptor(name = "Diode (plastic)", author = "Branislav Stojkovic", category = "Semiconductors", creationMethod = CreationMethod.POINT_BY_POINT, instanceNamePrefix = "D", description = "test", zOrder = IDIYComponent.COMPONENT) +@ComponentDescriptor(name = "Diode (plastic)", author = "Branislav Stojkovic", category = "Semiconductors", creationMethod = CreationMethod.POINT_BY_POINT, instanceNamePrefix = "D", description = "Plastic diode, like most rectifier, zener, schottky, etc.", zOrder = IDIYComponent.COMPONENT) public class DiodePlastic extends AbstractLeadedComponent { private static final long serialVersionUID = 1L; @@ -27,10 +27,13 @@ public class DiodePlastic extends AbstractLeadedComponent { public static Color BORDER_COLOR = BODY_COLOR.darker(); private String value = ""; + private Color markerColor = MARKER_COLOR; public DiodePlastic() { super(); this.labelColor = LABEL_COLOR; + this.bodyColor = BODY_COLOR; + this.borderColor = BORDER_COLOR; } @EditableProperty @@ -65,16 +68,6 @@ public class DiodePlastic extends AbstractLeadedComponent { return DEFAULT_WIDTH; } - @Override - protected Color getDefaultBodyColor() { - return BODY_COLOR; - } - - @Override - protected Color getDefaultBorderColor() { - return BORDER_COLOR; - } - @Override protected Shape getBodyShape() { return new Rectangle2D.Double(0f, 0f, getWidth().convertToPixels(), @@ -83,10 +76,19 @@ public class DiodePlastic extends AbstractLeadedComponent { @Override protected void decorateComponentBody(Graphics2D g2d) { - g2d.setColor(MARKER_COLOR); + g2d.setColor(markerColor); int width = getWidth().convertToPixels(); int markerWidth = MARKER_WIDTH.convertToPixels(); - g2d.fillRect(width - markerWidth, 0, markerWidth, getClosestOdd(getHeight().convertToPixels())); - super.decorateComponentBody(g2d); + g2d.fillRect(width - markerWidth, 0, markerWidth, getClosestOdd(getHeight() + .convertToPixels())); + } + + @EditableProperty(name = "Marker") + public Color getMarkerColor() { + return markerColor; + } + + public void setMarkerColor(Color markerColor) { + this.markerColor = markerColor; } } diff --git a/ diy-layout-creator --username bancika@gmail.com/Library/src/org/diylc/components/semiconductors/TransistorTO220.java b/ diy-layout-creator --username bancika@gmail.com/Library/src/org/diylc/components/semiconductors/TransistorTO220.java new file mode 100644 index 00000000..3f4662e0 --- /dev/null +++ b/ diy-layout-creator --username bancika@gmail.com/Library/src/org/diylc/components/semiconductors/TransistorTO220.java @@ -0,0 +1,265 @@ +package org.diylc.components.semiconductors; + +import java.awt.AlphaComposite; +import java.awt.Color; +import java.awt.Composite; +import java.awt.FontMetrics; +import java.awt.Graphics2D; +import java.awt.Point; +import java.awt.Rectangle; +import java.awt.Shape; +import java.awt.geom.Rectangle2D; + +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.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; + +@ComponentDescriptor(name = "Transistor (TO-220 package)", author = "Branislav Stojkovic", category = "Semiconductors", instanceNamePrefix = "Q", description = "Transistors with metal tab for heat sink mounting", stretchable = false, zOrder = IDIYComponent.COMPONENT) +public class TransistorTO220 extends AbstractTransparentComponent { + + private static final long serialVersionUID = 1L; + + public static Color BODY_COLOR = Color.gray; + public static Color BORDER_COLOR = Color.gray.darker(); + public static Color PIN_COLOR = Color.decode("#00B2EE"); + public static Color PIN_BORDER_COLOR = PIN_COLOR.darker(); + public static Color TAB_COLOR = Color.decode("#C3E4ED"); + public static Color TAB_BORDER_COLOR = TAB_COLOR.darker(); + public static Color LABEL_COLOR = Color.white; + public static Size PIN_SIZE = new Size(0.03d, SizeUnit.in); + public static Size PIN_SPACING = new Size(0.1d, SizeUnit.in); + public static Size BODY_WIDTH = new Size(0.4d, SizeUnit.in); + public static Size BODY_HEIGHT = new Size(4.5d, SizeUnit.mm); + public static Size TAB_THICKNESS = new Size(0.05d, SizeUnit.in); + + private String value = ""; + private Orientation orientation = Orientation.DEFAULT; + private Point[] controlPoints = new Point[] { new Point(0, 0), new Point(0, 0), new Point(0, 0) }; + private Shape[] body; + private Color bodyColor = BODY_COLOR; + private Color borderColor = BORDER_COLOR; + private Color tabColor = TAB_COLOR; + private Color tabBorderColor = TAB_BORDER_COLOR; + + public TransistorTO220() { + super(); + updateControlPoints(); + } + + @EditableProperty + public String getValue() { + return value; + } + + public void setValue(String value) { + this.value = value; + } + + @EditableProperty + public Orientation getOrientation() { + return orientation; + } + + public void setOrientation(Orientation orientation) { + this.orientation = orientation; + updateControlPoints(); + // Reset body shape; + body = null; + } + + @Override + public int getControlPointCount() { + return controlPoints.length; + } + + @Override + public Point getControlPoint(int index) { + return controlPoints[index]; + } + + @Override + public boolean isControlPointSticky(int index) { + return true; + } + + @Override + public VisibilityPolicy getControlPointVisibilityPolicy(int index) { + return VisibilityPolicy.NEVER; + } + + @Override + public void setControlPoint(Point point, int index) { + controlPoints[index].setLocation(point); + body = null; + } + + private void updateControlPoints() { + int pinSpacing = PIN_SPACING.convertToPixels(); + // Update control points. + int x = controlPoints[0].x; + int y = controlPoints[0].y; + switch (orientation) { + case DEFAULT: + controlPoints[1].setLocation(x, y + pinSpacing); + controlPoints[2].setLocation(x, y + 2 * pinSpacing); + break; + case _90: + controlPoints[1].setLocation(x - pinSpacing, y); + controlPoints[2].setLocation(x - 2 * pinSpacing, y); + break; + case _180: + controlPoints[1].setLocation(x, y - pinSpacing); + controlPoints[2].setLocation(x, y - 2 * pinSpacing); + break; + case _270: + controlPoints[1].setLocation(x + pinSpacing, y); + controlPoints[2].setLocation(x + 2 * pinSpacing, y); + break; + default: + throw new RuntimeException("Unexpected orientation: " + orientation); + } + } + + public Shape[] getBody() { + if (body == null) { + body = new Shape[2]; + int x = controlPoints[0].x; + int y = controlPoints[0].y; + int pinSpacing = PIN_SPACING.convertToPixels(); + int bodyWidth = getClosestOdd(BODY_WIDTH.convertToPixels()); + int bodyHeight = getClosestOdd(BODY_HEIGHT.convertToPixels()); + int tabThickness = TAB_THICKNESS.convertToPixels(); + + switch (orientation) { + case DEFAULT: + body[0] = new Rectangle2D.Double(x - bodyHeight / 2, + y + pinSpacing - bodyWidth / 2, bodyHeight, bodyWidth); + body[1] = new Rectangle2D.Double(x + bodyHeight / 2 - tabThickness, y + pinSpacing + - bodyWidth / 2, tabThickness, bodyWidth); + break; + case _90: + body[0] = new Rectangle2D.Double(x - pinSpacing - bodyWidth / 2, + y - bodyHeight / 2, bodyWidth, bodyHeight); + body[1] = new Rectangle2D.Double(x - pinSpacing - bodyWidth / 2, y + bodyHeight / 2 + - tabThickness, bodyWidth, tabThickness); + break; + case _180: + body[0] = new Rectangle2D.Double(x - bodyHeight / 2, + y - pinSpacing - bodyWidth / 2, bodyHeight, bodyWidth); + body[1] = new Rectangle2D.Double(x - bodyHeight / 2, + y - pinSpacing - bodyWidth / 2, tabThickness, bodyWidth); + break; + case _270: + body[0] = new Rectangle2D.Double(x + pinSpacing - bodyWidth / 2, + y - bodyHeight / 2, bodyWidth, bodyHeight); + body[1] = new Rectangle2D.Double(x + pinSpacing - bodyWidth / 2, + y - bodyHeight / 2, bodyWidth, tabThickness); + break; + default: + throw new RuntimeException("Unexpected orientation: " + orientation); + } + } + return body; + } + + @Override + public void draw(Graphics2D g2d, ComponentState componentState, Project project, + IDrawingObserver drawingObserver) { + int pinSize = PIN_SIZE.convertToPixels() / 2 * 2; + Shape mainArea = getBody()[0]; + Shape tabArea = getBody()[1]; + Composite oldComposite = g2d.getComposite(); + if (alpha < MAX_ALPHA) { + g2d.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_OVER, 1f * alpha + / MAX_ALPHA)); + } + g2d.setColor(bodyColor); + g2d.fill(mainArea); + g2d.setColor(tabColor); + g2d.fill(tabArea); + g2d.setComposite(oldComposite); + g2d.setStroke(ObjectCache.getInstance().fetchBasicStroke(1)); + g2d.setColor(tabBorderColor); + g2d.draw(tabArea); + g2d.setColor(componentState == ComponentState.SELECTED + || componentState == ComponentState.DRAGGING ? SELECTION_COLOR : borderColor); + g2d.draw(mainArea); + + for (Point point : controlPoints) { + g2d.setColor(PIN_COLOR); + g2d.fillOval(point.x - pinSize / 2, point.y - pinSize / 2, pinSize, pinSize); + g2d.setColor(PIN_BORDER_COLOR); + g2d.drawOval(point.x - pinSize / 2, point.y - pinSize / 2, pinSize, pinSize); + } + + // Draw label. + g2d.setFont(LABEL_FONT); + g2d.setColor(LABEL_COLOR); + FontMetrics fontMetrics = g2d.getFontMetrics(g2d.getFont()); + Rectangle2D rect = fontMetrics.getStringBounds(getName(), g2d); + int textHeight = (int) (rect.getHeight()); + int textWidth = (int) (rect.getWidth()); + // Center text horizontally and vertically + Rectangle bounds = mainArea.getBounds(); + int x = bounds.x + (bounds.width - textWidth) / 2; + int y = bounds.y + (bounds.height - textHeight) / 2 + fontMetrics.getAscent(); + g2d.drawString(getName(), x, y); + } + + @Override + public void drawIcon(Graphics2D g2d, int width, int height) { + g2d.setColor(BODY_COLOR); + int margin = 2 * width / 32; + int thickness = 7 * width / 32; + g2d.fillRect(margin, (height - thickness) / 2, width - margin * 2, thickness); + g2d.setColor(TAB_COLOR); + g2d.fillRect(margin, (height + thickness) / 2 - margin - 1, width - margin * 2, margin); + g2d.setColor(BORDER_COLOR); + g2d.drawRect(margin, (height - thickness) / 2, width - margin * 2, thickness); + } + + @EditableProperty(name = "Body") + public Color getBodyColor() { + return bodyColor; + } + + public void setBodyColor(Color bodyColor) { + this.bodyColor = bodyColor; + } + + @EditableProperty(name = "Border") + public Color getBorderColor() { + return borderColor; + } + + public void setBorderColor(Color borderColor) { + this.borderColor = borderColor; + } + + @EditableProperty(name = "Tab") + public Color getTabColor() { + return tabColor; + } + + public void setTabColor(Color tabColor) { + this.tabColor = tabColor; + } + + @EditableProperty(name = "Tab border") + public Color getTabBorderColor() { + return tabBorderColor; + } + + public void setTabBorderColor(Color tabBorderColor) { + this.tabBorderColor = tabBorderColor; + } +} diff --git a/ diy-layout-creator --username bancika@gmail.com/Library/src/org/diylc/components/semiconductors/TransistorTO92.java b/ diy-layout-creator --username bancika@gmail.com/Library/src/org/diylc/components/semiconductors/TransistorTO92.java index b7dc9a87..303a0200 100644 --- a/ diy-layout-creator --username bancika@gmail.com/Library/src/org/diylc/components/semiconductors/TransistorTO92.java +++ b/ diy-layout-creator --username bancika@gmail.com/Library/src/org/diylc/components/semiconductors/TransistorTO92.java @@ -7,7 +7,6 @@ import java.awt.FontMetrics; import java.awt.Graphics2D; import java.awt.Point; import java.awt.Rectangle; -import java.awt.Shape; import java.awt.geom.Area; import java.awt.geom.Ellipse2D; import java.awt.geom.Rectangle2D; @@ -25,7 +24,7 @@ import org.diylc.core.annotations.EditableProperty; import org.diylc.core.measures.Size; import org.diylc.core.measures.SizeUnit; -@ComponentDescriptor(name = "Transistor (TO-92 package)", author = "Branislav Stojkovic", category = "Semiconductors", instanceNamePrefix = "Q", description = "test", stretchable = false, zOrder = IDIYComponent.COMPONENT) +@ComponentDescriptor(name = "Transistor (TO-92 package)", author = "Branislav Stojkovic", category = "Semiconductors", instanceNamePrefix = "Q", description = "Transistor with small plastic or epoxy body", stretchable = false, zOrder = IDIYComponent.COMPONENT) public class TransistorTO92 extends AbstractTransparentComponent { private static final long serialVersionUID = 1L; @@ -42,17 +41,9 @@ public class TransistorTO92 extends AbstractTransparentComponent { private String value = ""; private Orientation orientation = Orientation.DEFAULT; private Point[] controlPoints = new Point[] { new Point(0, 0), new Point(0, 0), new Point(0, 0) }; - // new Point(0, pinSpacing.convertToPixels()), - // new Point(0, 2 * pinSpacing.convertToPixels()), - // new Point(0, 3 * pinSpacing.convertToPixels()), - // new Point(3 * pinSpacing.convertToPixels(), 0), - // new Point(3 * pinSpacing.convertToPixels(), - // pinSpacing.convertToPixels()), - // new Point(3 * pinSpacing.convertToPixels(), 2 * - // pinSpacing.convertToPixels()), - // new Point(3 * pinSpacing.convertToPixels(), 3 * - // pinSpacing.convertToPixels()) }; private Area body; + private Color bodyColor = BODY_COLOR; + private Color borderColor = BORDER_COLOR; public TransistorTO92() { super(); @@ -182,11 +173,11 @@ public class TransistorTO92 extends AbstractTransparentComponent { g2d.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_OVER, 1f * alpha / MAX_ALPHA)); } - g2d.setColor(BODY_COLOR); + g2d.setColor(bodyColor); g2d.fill(mainArea); g2d.setComposite(oldComposite); g2d.setColor(componentState == ComponentState.SELECTED - || componentState == ComponentState.DRAGGING ? SELECTION_COLOR : BORDER_COLOR); + || componentState == ComponentState.DRAGGING ? SELECTION_COLOR : borderColor); g2d.setStroke(ObjectCache.getInstance().fetchBasicStroke(1)); g2d.draw(mainArea); @@ -222,4 +213,22 @@ public class TransistorTO92 extends AbstractTransparentComponent { g2d.setColor(BORDER_COLOR); g2d.draw(area); } + + @EditableProperty(name = "Body") + public Color getBodyColor() { + return bodyColor; + } + + public void setBodyColor(Color bodyColor) { + this.bodyColor = bodyColor; + } + + @EditableProperty(name = "Border") + public Color getBorderColor() { + return borderColor; + } + + public void setBorderColor(Color borderColor) { + this.borderColor = borderColor; + } }