diff --git a/diylc/diylc-library/lib/diylc-core.jar b/diylc/diylc-library/lib/diylc-core.jar
index 9fd92047..12c9bc8f 100644
Binary files a/diylc/diylc-library/lib/diylc-core.jar and b/diylc/diylc-library/lib/diylc-core.jar differ
diff --git a/diylc/diylc-library/src/org/diylc/components/semiconductors/AbstractTransistorPackage.java b/diylc/diylc-library/src/org/diylc/components/semiconductors/AbstractTransistorPackage.java
new file mode 100644
index 00000000..28ae3d87
--- /dev/null
+++ b/diylc/diylc-library/src/org/diylc/components/semiconductors/AbstractTransistorPackage.java
@@ -0,0 +1,187 @@
+/*
+
+ DIY Layout Creator (DIYLC).
+ Copyright (c) 2009-2018 held jointly by the individual authors.
+
+ This file is part of DIYLC.
+
+ DIYLC is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+ DIYLC is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with DIYLC. If not, see .
+
+*/
+package org.diylc.components.semiconductors;
+
+import java.awt.Color;
+import java.awt.Point;
+import java.awt.geom.Area;
+
+import org.diylc.common.Display;
+import org.diylc.common.Orientation;
+import org.diylc.components.AbstractTransparentComponent;
+import org.diylc.core.VisibilityPolicy;
+import org.diylc.core.annotations.EditableProperty;
+import org.diylc.netlist.ISpiceMapper;
+
+public abstract class AbstractTransistorPackage extends AbstractTransparentComponent implements ISpiceMapper {
+
+ private static final long serialVersionUID = 1L;
+
+ protected String value = "";
+ protected TransistorPinout pinout;
+ protected Orientation orientation = Orientation.DEFAULT;
+ protected Point[] controlPoints = new Point[] {new Point(0, 0), new Point(0, 0), new Point(0, 0)};
+ transient protected Area[] body;
+
+ protected Color bodyColor;
+ protected Color borderColor;
+ protected Color labelColor = LABEL_COLOR;
+ protected Display display = Display.NAME;
+
+ public AbstractTransistorPackage() {
+ }
+
+ protected abstract void updateControlPoints();
+
+ @Override
+ public int mapToSpiceNode(int index) {
+ if (getPinout() == null)
+ return index;
+
+ switch (getPinout()) {
+ case BJT_CBE:
+ return index;
+ case BJT_EBC:
+ return 2 - index;
+ case JFET_DGS:
+ case MOSFET_DGS:
+ return index;
+ case JFET_DSG:
+ case MOSFET_DSG:
+ switch (index) {
+ case 0: return 0;
+ case 1: return 2;
+ case 2: return 1;
+ }
+ case JFET_GSD:
+ case MOSFET_GSD:
+ switch (index) {
+ case 0: return 1;
+ case 1: return 2;
+ case 2: return 0;
+ }
+ case JFET_SGD:
+ case MOSFET_SGD:
+ return 2 - index;
+ }
+
+ return index;
+ }
+
+ @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;
+ }
+
+ @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 = "Label")
+ public Color getLabelColor() {
+ if (labelColor == null) {
+ labelColor = LABEL_COLOR;
+ }
+ return labelColor;
+ }
+
+ public void setLabelColor(Color labelColor) {
+ this.labelColor = labelColor;
+ }
+
+ @EditableProperty
+ public Display getDisplay() {
+ if (display == null) {
+ display = Display.NAME;
+ }
+ return display;
+ }
+
+ public void setDisplay(Display display) {
+ this.display = display;
+ }
+
+ @EditableProperty
+ public TransistorPinout getPinout() {
+ return pinout;
+ }
+
+ public void setPinout(TransistorPinout pinout) {
+ this.pinout = pinout;
+ }
+}
diff --git a/diylc/diylc-library/src/org/diylc/components/semiconductors/TransistorPinout.java b/diylc/diylc-library/src/org/diylc/components/semiconductors/TransistorPinout.java
new file mode 100644
index 00000000..950bedeb
--- /dev/null
+++ b/diylc/diylc-library/src/org/diylc/components/semiconductors/TransistorPinout.java
@@ -0,0 +1,11 @@
+package org.diylc.components.semiconductors;
+
+public enum TransistorPinout {
+
+ BJT_EBC, BJT_CBE, JFET_DSG, JFET_GSD, JFET_DGS, JFET_SGD, MOSFET_DSG, MOSFET_GSD, MOSFET_DGS, MOSFET_SGD;
+
+ @Override
+ public String toString() {
+ return name().replace("_", " ");
+ };
+}
diff --git a/diylc/diylc-library/src/org/diylc/components/semiconductors/TransistorTO1.java b/diylc/diylc-library/src/org/diylc/components/semiconductors/TransistorTO1.java
index 6adcb452..9cbbeb81 100644
--- a/diylc/diylc-library/src/org/diylc/components/semiconductors/TransistorTO1.java
+++ b/diylc/diylc-library/src/org/diylc/components/semiconductors/TransistorTO1.java
@@ -21,42 +21,39 @@
*/
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.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.Display;
-import org.diylc.common.IPlugInPort;
-import org.diylc.common.ObjectCache;
-import org.diylc.common.Orientation;
-import org.diylc.components.AbstractTransparentComponent;
-import org.diylc.components.transform.TO1Transformer;
-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.annotations.KeywordPolicy;
-import org.diylc.core.measures.Size;
-import org.diylc.core.measures.SizeUnit;
-import org.diylc.utils.Constants;
+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.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.Display;
+import org.diylc.common.IPlugInPort;
+import org.diylc.common.ObjectCache;
+import org.diylc.components.transform.TO1Transformer;
+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.annotations.ComponentDescriptor;
+import org.diylc.core.annotations.EditableProperty;
+import org.diylc.core.annotations.KeywordPolicy;
+import org.diylc.core.measures.Size;
+import org.diylc.core.measures.SizeUnit;
+import org.diylc.utils.Constants;
@ComponentDescriptor(name = "Transistor (TO-1)", author = "Branislav Stojkovic", category = "Semiconductors",
instanceNamePrefix = "Q", description = "Transistor with small metal body", stretchable = false,
zOrder = IDIYComponent.COMPONENT, keywordPolicy = KeywordPolicy.SHOW_VALUE, transformer = TO1Transformer.class)
-public class TransistorTO1 extends AbstractTransparentComponent {
+public class TransistorTO1 extends AbstractTransistorPackage {
private static final long serialVersionUID = 1L;
@@ -71,71 +68,19 @@ public class TransistorTO1 extends AbstractTransparentComponent {
public static Size BODY_LENGTH = new Size(0.4d, SizeUnit.in);
public static Size EDGE_RADIUS = new Size(2d, SizeUnit.mm);
- 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)};
- transient private Area body;
- private Color bodyColor = BODY_COLOR;
- private Color borderColor = BORDER_COLOR;
- private Color labelColor = LABEL_COLOR;
- protected Display display = Display.NAME;
private boolean folded = false;
private Size pinSpacing = PIN_SPACING;
public TransistorTO1() {
super();
updateControlPoints();
- alpha = (byte) 100;
- }
-
- @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;
+ alpha = (byte) 100;
+ bodyColor = BODY_COLOR;
+ borderColor = BORDER_COLOR;
}
@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() {
+ protected void updateControlPoints() {
int pinSpacing = (int) getPinSpacing().convertToPixels();
// Update control points.
int x = controlPoints[0].x;
@@ -162,49 +107,52 @@ public class TransistorTO1 extends AbstractTransparentComponent {
}
}
- public Area getBody() {
+ public Area[] getBody() {
if (body == null) {
int x = (controlPoints[0].x + controlPoints[1].x + controlPoints[2].x) / 3;
int y = (controlPoints[0].y + controlPoints[1].y + controlPoints[2].y) / 3;
int bodyDiameter = getClosestOdd(BODY_DIAMETER.convertToPixels());
int bodyLength = getClosestOdd(BODY_LENGTH.convertToPixels());
- int edgeRadius = (int) EDGE_RADIUS.convertToPixels();
+ int edgeRadius = (int) EDGE_RADIUS.convertToPixels();
+
+ Area newBody = null;
if (folded) {
switch (orientation) {
case DEFAULT:
- body =
+ newBody =
new Area(new RoundRectangle2D.Double(x - bodyLength, y - bodyDiameter / 2, bodyLength, bodyDiameter,
edgeRadius, edgeRadius));
- body.add(new Area(new Rectangle2D.Double(x - bodyLength / 2, y - bodyDiameter / 2, bodyLength / 2,
+ newBody.add(new Area(new Rectangle2D.Double(x - bodyLength / 2, y - bodyDiameter / 2, bodyLength / 2,
bodyDiameter)));
break;
case _90:
- body =
+ newBody =
new Area(new RoundRectangle2D.Double(x - bodyDiameter / 2, y - bodyLength, bodyDiameter, bodyLength,
edgeRadius, edgeRadius));
- body.add(new Area(new Rectangle2D.Double(x - bodyDiameter / 2, y - bodyLength / 2, bodyDiameter,
+ newBody.add(new Area(new Rectangle2D.Double(x - bodyDiameter / 2, y - bodyLength / 2, bodyDiameter,
bodyLength / 2)));
break;
case _180:
- body =
+ newBody =
new Area(new RoundRectangle2D.Double(x, y - bodyDiameter / 2, bodyLength, bodyDiameter, edgeRadius,
edgeRadius));
- body.add(new Area(new Rectangle2D.Double(x, y - bodyDiameter / 2, bodyLength / 2, bodyDiameter)));
+ newBody.add(new Area(new Rectangle2D.Double(x, y - bodyDiameter / 2, bodyLength / 2, bodyDiameter)));
break;
case _270:
- body =
+ newBody =
new Area(new RoundRectangle2D.Double(x - bodyDiameter / 2, y, bodyDiameter, bodyLength, edgeRadius,
edgeRadius));
- body.add(new Area(new Rectangle2D.Double(x - bodyDiameter / 2, y, bodyDiameter, bodyLength / 2)));
+ newBody.add(new Area(new Rectangle2D.Double(x - bodyDiameter / 2, y, bodyDiameter, bodyLength / 2)));
break;
default:
throw new RuntimeException("Unexpected orientation: " + orientation);
}
} else {
- body = new Area(new Ellipse2D.Double(x - bodyDiameter / 2, y - bodyDiameter / 2, bodyDiameter, bodyDiameter));
+ newBody = new Area(new Ellipse2D.Double(x - bodyDiameter / 2, y - bodyDiameter / 2, bodyDiameter, bodyDiameter));
}
-
+
+ body = new Area[] { newBody };
}
return body;
}
@@ -228,7 +176,7 @@ public class TransistorTO1 extends AbstractTransparentComponent {
g2d.drawOval(point.x - pinSize / 2, point.y - pinSize / 2, pinSize, pinSize);
}
- Area mainArea = getBody();
+ Area mainArea = getBody()[0];
Composite oldComposite = g2d.getComposite();
if (alpha < MAX_ALPHA) {
g2d.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_OVER, 1f * alpha / MAX_ALPHA));
@@ -298,15 +246,6 @@ public class TransistorTO1 extends AbstractTransparentComponent {
}
}
- @EditableProperty(name = "Body")
- public Color getBodyColor() {
- return bodyColor;
- }
-
- public void setBodyColor(Color bodyColor) {
- this.bodyColor = bodyColor;
- }
-
@EditableProperty
public boolean getFolded() {
return folded;
@@ -330,34 +269,4 @@ public class TransistorTO1 extends AbstractTransparentComponent {
// Reset body shape;
body = null;
}
-
- @EditableProperty(name = "Border")
- public Color getBorderColor() {
- return borderColor;
- }
-
- public void setBorderColor(Color borderColor) {
- this.borderColor = borderColor;
- }
-
- @EditableProperty(name = "Label")
- public Color getLabelColor() {
- return labelColor;
- }
-
- public void setLabelColor(Color labelColor) {
- this.labelColor = labelColor;
- }
-
- @EditableProperty
- public Display getDisplay() {
- if (display == null) {
- display = Display.NAME;
- }
- return display;
- }
-
- public void setDisplay(Display display) {
- this.display = display;
- }
}
diff --git a/diylc/diylc-library/src/org/diylc/components/semiconductors/TransistorTO220.java b/diylc/diylc-library/src/org/diylc/components/semiconductors/TransistorTO220.java
index 53f689d1..06f97e28 100644
--- a/diylc/diylc-library/src/org/diylc/components/semiconductors/TransistorTO220.java
+++ b/diylc/diylc-library/src/org/diylc/components/semiconductors/TransistorTO220.java
@@ -21,42 +21,39 @@
*/
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.Area;
-import java.awt.geom.Ellipse2D;
-import java.awt.geom.Rectangle2D;
-
-import org.diylc.appframework.miscutils.ConfigurationManager;
-import org.diylc.common.Display;
-import org.diylc.common.IPlugInPort;
-import org.diylc.common.ObjectCache;
-import org.diylc.common.Orientation;
-import org.diylc.components.AbstractTransparentComponent;
-import org.diylc.components.transform.TO220Transformer;
-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.annotations.KeywordPolicy;
-import org.diylc.core.measures.Size;
-import org.diylc.core.measures.SizeUnit;
-import org.diylc.utils.Constants;
+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.Area;
+import java.awt.geom.Ellipse2D;
+import java.awt.geom.Rectangle2D;
+
+import org.diylc.appframework.miscutils.ConfigurationManager;
+import org.diylc.common.Display;
+import org.diylc.common.IPlugInPort;
+import org.diylc.common.ObjectCache;
+import org.diylc.components.transform.TO220Transformer;
+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.annotations.ComponentDescriptor;
+import org.diylc.core.annotations.EditableProperty;
+import org.diylc.core.annotations.KeywordPolicy;
+import org.diylc.core.measures.Size;
+import org.diylc.core.measures.SizeUnit;
+import org.diylc.utils.Constants;
@ComponentDescriptor(name = "Transistor (TO-220)", author = "Branislav Stojkovic", category = "Semiconductors",
instanceNamePrefix = "Q", description = "Transistors with metal tab for heat sink mounting", stretchable = false,
zOrder = IDIYComponent.COMPONENT, keywordPolicy = KeywordPolicy.SHOW_VALUE, transformer = TO220Transformer.class)
-public class TransistorTO220 extends AbstractTransparentComponent {
+public class TransistorTO220 extends AbstractTransistorPackage {
private static final long serialVersionUID = 1L;
@@ -78,72 +75,21 @@ public class TransistorTO220 extends AbstractTransparentComponent {
public static Size LEAD_LENGTH = new Size(3.5d, SizeUnit.mm);
public static Size LEAD_THICKNESS = new Size(0.8d, SizeUnit.mm);
- 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)};
- transient private Shape[] body;
- private Color bodyColor = BODY_COLOR;
- private Color borderColor = BORDER_COLOR;
private Color tabColor = TAB_COLOR;
private Color tabBorderColor = TAB_BORDER_COLOR;
- private Display display = Display.NAME;
private boolean folded = false;
private Size leadLength = LEAD_LENGTH;
public TransistorTO220() {
super();
updateControlPoints();
- alpha = (byte) 100;
+ alpha = (byte) 100;
+ bodyColor = BODY_COLOR;
+ borderColor = BORDER_COLOR;
}
-
- @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() {
+ protected void updateControlPoints() {
int pinSpacing = (int) PIN_SPACING.convertToPixels();
// Update control points.
int x = controlPoints[0].x;
@@ -170,9 +116,9 @@ public class TransistorTO220 extends AbstractTransparentComponent {
}
}
- public Shape[] getBody() {
+ public Area[] getBody() {
if (body == null) {
- body = new Shape[2];
+ body = new Area[2];
int x = controlPoints[0].x;
int y = controlPoints[0].y;
int pinSpacing = (int) PIN_SPACING.convertToPixels();
@@ -187,68 +133,68 @@ public class TransistorTO220 extends AbstractTransparentComponent {
switch (orientation) {
case DEFAULT:
if (folded) {
- body[0] = new Rectangle2D.Double(x + leadLength, y + pinSpacing - bodyWidth / 2, bodyHeight, bodyWidth);
+ body[0] = new Area(new Rectangle2D.Double(x + leadLength, y + pinSpacing - bodyWidth / 2, bodyHeight, bodyWidth));
body[1] =
new Area(new Rectangle2D.Double(x + leadLength + bodyHeight, y + pinSpacing - bodyWidth / 2, tabHeight,
bodyWidth));
((Area) body[1]).subtract(new Area(new Ellipse2D.Double(x + leadLength + bodyHeight + tabHeight / 2
- tabHoleDiameter / 2, y + pinSpacing - tabHoleDiameter / 2, tabHoleDiameter, tabHoleDiameter)));
} else {
- body[0] =
- new Rectangle2D.Double(x - bodyThickness / 2, y + pinSpacing - bodyWidth / 2, bodyThickness, bodyWidth);
- body[1] =
+ body[0] = new Area(
+ new Rectangle2D.Double(x - bodyThickness / 2, y + pinSpacing - bodyWidth / 2, bodyThickness, bodyWidth));
+ body[1] = new Area(
new Rectangle2D.Double(x + bodyThickness / 2 - tabThickness, y + pinSpacing - bodyWidth / 2,
- tabThickness, bodyWidth);
+ tabThickness, bodyWidth));
}
break;
case _90:
if (folded) {
- body[0] = new Rectangle2D.Double(x - pinSpacing - bodyWidth / 2, y + leadLength, bodyWidth, bodyHeight);
+ body[0] = new Area(new Rectangle2D.Double(x - pinSpacing - bodyWidth / 2, y + leadLength, bodyWidth, bodyHeight));
body[1] =
new Area(new Rectangle2D.Double(x - pinSpacing - bodyWidth / 2, y + leadLength + bodyHeight, bodyWidth,
tabHeight));
((Area) body[1]).subtract(new Area(new Ellipse2D.Double(x - pinSpacing - tabHoleDiameter / 2, y
+ leadLength + bodyHeight + tabHeight / 2 - tabHoleDiameter / 2, tabHoleDiameter, tabHoleDiameter)));
} else {
- body[0] =
- new Rectangle2D.Double(x - pinSpacing - bodyWidth / 2, y - bodyThickness / 2, bodyWidth, bodyThickness);
- body[1] =
+ body[0] = new Area(
+ new Rectangle2D.Double(x - pinSpacing - bodyWidth / 2, y - bodyThickness / 2, bodyWidth, bodyThickness));
+ body[1] = new Area(
new Rectangle2D.Double(x - pinSpacing - bodyWidth / 2, y + bodyThickness / 2 - tabThickness, bodyWidth,
- tabThickness);
+ tabThickness));
}
break;
case _180:
if (folded) {
- body[0] =
+ body[0] = new Area(
new Rectangle2D.Double(x - leadLength - bodyHeight, y - pinSpacing - bodyWidth / 2, bodyHeight,
- bodyWidth);
+ bodyWidth));
body[1] =
new Area(new Rectangle2D.Double(x - leadLength - bodyHeight - tabHeight,
y - pinSpacing - bodyWidth / 2, tabHeight, bodyWidth));
((Area) body[1]).subtract(new Area(new Ellipse2D.Double(x - leadLength - bodyHeight - tabHeight / 2
- tabHoleDiameter / 2, y - pinSpacing - tabHoleDiameter / 2, tabHoleDiameter, tabHoleDiameter)));
} else {
- body[0] =
- new Rectangle2D.Double(x - bodyThickness / 2, y - pinSpacing - bodyWidth / 2, bodyThickness, bodyWidth);
- body[1] =
- new Rectangle2D.Double(x - bodyThickness / 2, y - pinSpacing - bodyWidth / 2, tabThickness, bodyWidth);
+ body[0] = new Area(
+ new Rectangle2D.Double(x - bodyThickness / 2, y - pinSpacing - bodyWidth / 2, bodyThickness, bodyWidth));
+ body[1] = new Area(
+ new Rectangle2D.Double(x - bodyThickness / 2, y - pinSpacing - bodyWidth / 2, tabThickness, bodyWidth));
}
break;
case _270:
if (folded) {
- body[0] =
+ body[0] = new Area(
new Rectangle2D.Double(x + pinSpacing - bodyWidth / 2, y - leadLength - bodyHeight, bodyWidth,
- bodyHeight);
+ bodyHeight));
body[1] =
new Area(new Rectangle2D.Double(x + pinSpacing - bodyWidth / 2,
y - leadLength - bodyHeight - tabHeight, bodyWidth, tabHeight));
((Area) body[1]).subtract(new Area(new Ellipse2D.Double(x + pinSpacing - tabHoleDiameter / 2, y
- leadLength - bodyHeight - tabHeight / 2 - tabHoleDiameter / 2, tabHoleDiameter, tabHoleDiameter)));
} else {
- body[0] =
- new Rectangle2D.Double(x + pinSpacing - bodyWidth / 2, y - bodyThickness / 2, bodyWidth, bodyThickness);
- body[1] =
- new Rectangle2D.Double(x + pinSpacing - bodyWidth / 2, y - bodyThickness / 2, bodyWidth, tabThickness);
+ body[0] = new Area(
+ new Rectangle2D.Double(x + pinSpacing - bodyWidth / 2, y - bodyThickness / 2, bodyWidth, bodyThickness));
+ body[1] = new Area(
+ new Rectangle2D.Double(x + pinSpacing - bodyWidth / 2, y - bodyThickness / 2, bodyWidth, tabThickness));
}
break;
default:
@@ -382,7 +328,7 @@ public class TransistorTO220 extends AbstractTransparentComponent {
} else {
finalLabelColor =
componentState == ComponentState.SELECTED || componentState == ComponentState.DRAGGING ? LABEL_COLOR_SELECTED
- : LABEL_COLOR;
+ : getLabelColor();
}
g2d.setColor(finalLabelColor);
String label = "";
@@ -428,24 +374,6 @@ public class TransistorTO220 extends AbstractTransparentComponent {
g2d.drawLine(width / 2 + bodySize / 3, margin + tabSize + bodySize, width / 2 + bodySize / 3, height - margin);
}
- @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;
@@ -487,17 +415,5 @@ public class TransistorTO220 extends AbstractTransparentComponent {
public void setTabBorderColor(Color tabBorderColor) {
this.tabBorderColor = tabBorderColor;
- }
-
- @EditableProperty
- public Display getDisplay() {
- if (display == null) {
- display = Display.NAME;
- }
- return display;
- }
-
- public void setDisplay(Display display) {
- this.display = display;
- }
+ }
}
diff --git a/diylc/diylc-library/src/org/diylc/components/semiconductors/TransistorTO92.java b/diylc/diylc-library/src/org/diylc/components/semiconductors/TransistorTO92.java
index db5531c3..3cd03060 100644
--- a/diylc/diylc-library/src/org/diylc/components/semiconductors/TransistorTO92.java
+++ b/diylc/diylc-library/src/org/diylc/components/semiconductors/TransistorTO92.java
@@ -21,42 +21,39 @@
*/
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.RenderingHints;
-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.Display;
-import org.diylc.common.IPlugInPort;
-import org.diylc.common.ObjectCache;
-import org.diylc.common.Orientation;
-import org.diylc.components.AbstractTransparentComponent;
-import org.diylc.components.transform.TO92Transformer;
-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.annotations.KeywordPolicy;
-import org.diylc.core.measures.Size;
-import org.diylc.core.measures.SizeUnit;
-import org.diylc.utils.Constants;
+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.RenderingHints;
+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.Display;
+import org.diylc.common.IPlugInPort;
+import org.diylc.common.ObjectCache;
+import org.diylc.components.transform.TO92Transformer;
+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.annotations.ComponentDescriptor;
+import org.diylc.core.annotations.EditableProperty;
+import org.diylc.core.annotations.KeywordPolicy;
+import org.diylc.core.measures.Size;
+import org.diylc.core.measures.SizeUnit;
+import org.diylc.utils.Constants;
@ComponentDescriptor(name = "Transistor (TO-92)", author = "Branislav Stojkovic", category = "Semiconductors",
instanceNamePrefix = "Q", description = "Transistor with small plastic or epoxy body", stretchable = false,
zOrder = IDIYComponent.COMPONENT, keywordPolicy = KeywordPolicy.SHOW_VALUE, transformer = TO92Transformer.class)
-public class TransistorTO92 extends AbstractTransparentComponent {
+public class TransistorTO92 extends AbstractTransistorPackage {
private static final long serialVersionUID = 1L;
@@ -69,42 +66,15 @@ public class TransistorTO92 extends AbstractTransparentComponent {
public static Size PIN_SPACING = new Size(0.05d, SizeUnit.in);
public static Size BODY_DIAMETER = new Size(0.2d, 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)};
- transient private Area body;
- private Color bodyColor = BODY_COLOR;
- private Color borderColor = BORDER_COLOR;
- private Color labelColor = LABEL_COLOR;
- protected Display display = Display.NAME;
private boolean folded = false;
- private Size pinSpacing = PIN_SPACING;
+ private Size pinSpacing = PIN_SPACING;
public TransistorTO92() {
super();
updateControlPoints();
- alpha = (byte) 100;
- }
-
- @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;
+ alpha = (byte) 100;
+ bodyColor = BODY_COLOR;
+ borderColor = BORDER_COLOR;
}
@EditableProperty
@@ -132,34 +102,9 @@ public class TransistorTO92 extends AbstractTransparentComponent {
// 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() {
+ protected void updateControlPoints() {
int pinSpacing = (int) getPinSpacing().convertToPixels();
// Update control points.
int x = controlPoints[0].x;
@@ -186,25 +131,27 @@ public class TransistorTO92 extends AbstractTransparentComponent {
}
}
- public Area getBody() {
+ public Area[] getBody() {
if (body == null) {
int x = (controlPoints[0].x + controlPoints[1].x + controlPoints[2].x) / 3;
int y = (controlPoints[0].y + controlPoints[1].y + controlPoints[2].y) / 3;
- int bodyDiameter = getClosestOdd(BODY_DIAMETER.convertToPixels());
+ int bodyDiameter = getClosestOdd(BODY_DIAMETER.convertToPixels());
+
+ Area newBody = null;
if (folded) {
switch (orientation) {
case DEFAULT:
- body = new Area(new Rectangle2D.Double(x - bodyDiameter, y - bodyDiameter / 2, bodyDiameter, bodyDiameter));
+ newBody = new Area(new Rectangle2D.Double(x - bodyDiameter, y - bodyDiameter / 2, bodyDiameter, bodyDiameter));
break;
case _90:
- body = new Area(new Rectangle2D.Double(x - bodyDiameter / 2, y - bodyDiameter, bodyDiameter, bodyDiameter));
+ newBody = new Area(new Rectangle2D.Double(x - bodyDiameter / 2, y - bodyDiameter, bodyDiameter, bodyDiameter));
break;
case _180:
- body = new Area(new Rectangle2D.Double(x, y - bodyDiameter / 2, bodyDiameter, bodyDiameter));
+ newBody = new Area(new Rectangle2D.Double(x, y - bodyDiameter / 2, bodyDiameter, bodyDiameter));
break;
case _270:
- body = new Area(new Rectangle2D.Double(x - bodyDiameter / 2, y, bodyDiameter, bodyDiameter));
+ newBody = new Area(new Rectangle2D.Double(x - bodyDiameter / 2, y, bodyDiameter, bodyDiameter));
break;
default:
throw new RuntimeException("Unexpected orientation: " + orientation);
@@ -212,33 +159,35 @@ public class TransistorTO92 extends AbstractTransparentComponent {
} else {
switch (orientation) {
case DEFAULT:
- body =
+ newBody =
new Area(new Ellipse2D.Double(x - bodyDiameter / 2, y - bodyDiameter / 2, bodyDiameter, bodyDiameter));
- body.subtract(new Area(new Rectangle2D.Double(x - bodyDiameter, y - bodyDiameter / 2, 3 * bodyDiameter / 4,
+ newBody.subtract(new Area(new Rectangle2D.Double(x - bodyDiameter, y - bodyDiameter / 2, 3 * bodyDiameter / 4,
bodyDiameter)));
break;
case _90:
- body =
+ newBody =
new Area(new Ellipse2D.Double(x - bodyDiameter / 2, y - bodyDiameter / 2, bodyDiameter, bodyDiameter));
- body.subtract(new Area(new Rectangle2D.Double(x - bodyDiameter / 2, y - bodyDiameter, bodyDiameter,
+ newBody.subtract(new Area(new Rectangle2D.Double(x - bodyDiameter / 2, y - bodyDiameter, bodyDiameter,
3 * bodyDiameter / 4)));
break;
case _180:
- body =
+ newBody =
new Area(new Ellipse2D.Double(x - bodyDiameter / 2, y - bodyDiameter / 2, bodyDiameter, bodyDiameter));
- body.subtract(new Area(new Rectangle2D.Double(x + bodyDiameter / 4, y - bodyDiameter / 2,
+ newBody.subtract(new Area(new Rectangle2D.Double(x + bodyDiameter / 4, y - bodyDiameter / 2,
3 * bodyDiameter / 4, bodyDiameter)));
break;
case _270:
- body =
+ newBody =
new Area(new Ellipse2D.Double(x - bodyDiameter / 2, y - bodyDiameter / 2, bodyDiameter, bodyDiameter));
- body.subtract(new Area(new Rectangle2D.Double(x - bodyDiameter / 2, y + bodyDiameter / 4, bodyDiameter,
+ newBody.subtract(new Area(new Rectangle2D.Double(x - bodyDiameter / 2, y + bodyDiameter / 4, bodyDiameter,
3 * bodyDiameter / 4)));
break;
default:
throw new RuntimeException("Unexpected orientation: " + orientation);
}
- }
+ }
+
+ body = new Area[] { newBody };
}
return body;
}
@@ -261,7 +210,7 @@ public class TransistorTO92 extends AbstractTransparentComponent {
}
}
- Area mainArea = getBody();
+ Area mainArea = getBody()[0];
Composite oldComposite = g2d.getComposite();
if (alpha < MAX_ALPHA) {
g2d.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_OVER, 1f * alpha / MAX_ALPHA));
@@ -337,46 +286,4 @@ public class TransistorTO92 extends AbstractTransparentComponent {
g2d.fillOval(width / 2 - pinSize / 2, (height / 4) * (i + 1), pinSize, pinSize);
}
}
-
- @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 = "Label")
- public Color getLabelColor() {
- if (labelColor == null) {
- labelColor = LABEL_COLOR;
- }
- return labelColor;
- }
-
- public void setLabelColor(Color labelColor) {
- this.labelColor = labelColor;
- }
-
- @EditableProperty
- public Display getDisplay() {
- if (display == null) {
- display = Display.NAME;
- }
- return display;
- }
-
- public void setDisplay(Display display) {
- this.display = display;
- }
}
diff --git a/diylc/diylc-swing/lib/diylc-core.jar b/diylc/diylc-swing/lib/diylc-core.jar
index 9fd92047..12c9bc8f 100644
Binary files a/diylc/diylc-swing/lib/diylc-core.jar and b/diylc/diylc-swing/lib/diylc-core.jar differ
diff --git a/diylc/diylc-swing/library/main.jar b/diylc/diylc-swing/library/main.jar
index 7a5a9cd3..3b3c8b08 100644
Binary files a/diylc/diylc-swing/library/main.jar and b/diylc/diylc-swing/library/main.jar differ