From af1a11e84856d98aca22db97fedfb2b6cd02889f Mon Sep 17 00:00:00 2001 From: bancika Date: Sun, 4 Mar 2012 22:32:42 +0000 Subject: [PATCH] Added MOSFET Symbol --- .../AbstractTransistorSymbol.java | 185 ++++++++++++++++++ .../components/semiconductors/ICSymbol.java | 1 - .../semiconductors/MOSFETSymbol.java | 77 ++++++++ .../semiconductors/TransistorPolarity.java | 6 + .../diylc-swing/library/main.jar | Bin 135384 -> 140975 bytes .../diylc-swing/update.xml | 4 + 6 files changed, 272 insertions(+), 1 deletion(-) create mode 100644 diy-layout-creator --username bancika@gmail.com/diylc-library/src/org/diylc/components/semiconductors/AbstractTransistorSymbol.java create mode 100644 diy-layout-creator --username bancika@gmail.com/diylc-library/src/org/diylc/components/semiconductors/MOSFETSymbol.java create mode 100644 diy-layout-creator --username bancika@gmail.com/diylc-library/src/org/diylc/components/semiconductors/TransistorPolarity.java 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 new file mode 100644 index 00000000..a9893014 --- /dev/null +++ b/ diy-layout-creator --username bancika@gmail.com/diylc-library/src/org/diylc/components/semiconductors/AbstractTransistorSymbol.java @@ -0,0 +1,185 @@ +package org.diylc.components.semiconductors; + +import java.awt.Color; +import java.awt.Graphics2D; +import java.awt.Point; +import java.awt.Shape; + +import org.diylc.appframework.miscutils.ConfigurationManager; +import org.diylc.common.Display; +import org.diylc.common.HorizontalAlignment; +import org.diylc.common.IPlugInPort; +import org.diylc.common.ObjectCache; +import org.diylc.common.VerticalAlignment; +import org.diylc.components.AbstractComponent; +import org.diylc.core.ComponentState; +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.EditableProperty; +import org.diylc.core.measures.Size; +import org.diylc.core.measures.SizeUnit; +import org.diylc.utils.Constants; + +public abstract class AbstractTransistorSymbol extends AbstractComponent { + + private static final long serialVersionUID = 1L; + + public static Size PIN_SPACING = new Size(0.1d, SizeUnit.in); + public static Color COLOR = Color.black; + + protected TransistorPolarity polarity = TransistorPolarity.NPN; + protected String value = ""; + protected Point[] controlPoints = new Point[] { new Point(0, 0), new Point(0, 0), + new Point(0, 0) }; + protected Color color = COLOR; + protected Display display = Display.NAME; + protected Shape[] body; + + public AbstractTransistorSymbol() { + super(); + updateControlPoints(); + } + + @Override + public void draw(Graphics2D g2d, ComponentState componentState, boolean outlineMode, + Project project, IDrawingObserver drawingObserver) { + if (checkPointsClipped(g2d.getClip())) { + return; + } + int pinSpacing = (int) PIN_SPACING.convertToPixels(); + Color finalColor; + if (componentState == ComponentState.SELECTED) { + finalColor = SELECTION_COLOR; + } else if (outlineMode) { + Theme theme = (Theme) ConfigurationManager.getInstance().readObject( + IPlugInPort.THEME_KEY, Constants.DEFAULT_THEME); + finalColor = theme.getOutlineColor(); + } else { + finalColor = color; + } + g2d.setColor(finalColor); + + // Draw transistor + + int x = controlPoints[0].x; + int y = controlPoints[0].y; + + Shape[] body = getBody(); + + g2d.setStroke(ObjectCache.getInstance().fetchBasicStroke(2)); + g2d.draw(body[0]); + + g2d.setStroke(ObjectCache.getInstance().fetchBasicStroke(1)); + g2d.draw(body[1]); + + g2d.fill(body[2]); + + // Draw label + g2d.setFont(LABEL_FONT); + Color finalLabelColor; + if (outlineMode) { + Theme theme = (Theme) ConfigurationManager.getInstance().readObject( + IPlugInPort.THEME_KEY, Constants.DEFAULT_THEME); + finalLabelColor = componentState == ComponentState.SELECTED + || componentState == ComponentState.DRAGGING ? LABEL_COLOR_SELECTED : theme + .getOutlineColor(); + } else { + finalLabelColor = componentState == ComponentState.SELECTED + || componentState == ComponentState.DRAGGING ? LABEL_COLOR_SELECTED + : LABEL_COLOR; + } + g2d.setColor(finalLabelColor); + drawCenteredText(g2d, display == Display.VALUE ? getValue() : getName(), + x + pinSpacing * 2, y, HorizontalAlignment.LEFT, VerticalAlignment.CENTER); + } + + @Override + public Point getControlPoint(int index) { + return controlPoints[index]; + } + + @Override + public int getControlPointCount() { + return controlPoints.length; + } + + private void updateControlPoints() { + int pinSpacing = (int) PIN_SPACING.convertToPixels(); + // Update control points. + int x = controlPoints[0].x; + int y = controlPoints[0].y; + + controlPoints[1].x = x + pinSpacing * 2; + controlPoints[1].y = y - pinSpacing * 2; + + controlPoints[2].x = x + pinSpacing * 2; + controlPoints[2].y = y + pinSpacing * 2; + } + + @Override + public VisibilityPolicy getControlPointVisibilityPolicy(int index) { + return VisibilityPolicy.WHEN_SELECTED; + } + + @EditableProperty + @Override + public String getValue() { + return this.value; + } + + @Override + public void setValue(String value) { + this.value = value; + } + + @Override + public boolean isControlPointSticky(int index) { + return true; + } + + @Override + public void setControlPoint(Point point, int index) { + controlPoints[index].setLocation(point); + // Invalidate body + body = null; + } + + @EditableProperty + public TransistorPolarity getPolarity() { + return polarity; + } + + public void setPolarity(TransistorPolarity polarity) { + this.polarity = polarity; + // Invalidate body + body = null; + } + + @EditableProperty + public Color getColor() { + return color; + } + + public void setColor(Color color) { + this.color = color; + } + + @EditableProperty + public Display getDisplay() { + return display; + } + + public void setDisplay(Display display) { + this.display = display; + } + + /** + * Returns transistor shape consisting of 3 parts, in this order: main body, + * connectors, polarity arrow. + * + * @return + */ + protected abstract Shape[] getBody(); +} diff --git a/ diy-layout-creator --username bancika@gmail.com/diylc-library/src/org/diylc/components/semiconductors/ICSymbol.java b/ diy-layout-creator --username bancika@gmail.com/diylc-library/src/org/diylc/components/semiconductors/ICSymbol.java index dd3ef3f7..ed60e670 100644 --- a/ diy-layout-creator --username bancika@gmail.com/diylc-library/src/org/diylc/components/semiconductors/ICSymbol.java +++ b/ diy-layout-creator --username bancika@gmail.com/diylc-library/src/org/diylc/components/semiconductors/ICSymbol.java @@ -1,7 +1,6 @@ package org.diylc.components.semiconductors; import java.awt.AlphaComposite; -import java.awt.BasicStroke; import java.awt.Color; import java.awt.Composite; import java.awt.Graphics2D; diff --git a/ diy-layout-creator --username bancika@gmail.com/diylc-library/src/org/diylc/components/semiconductors/MOSFETSymbol.java b/ diy-layout-creator --username bancika@gmail.com/diylc-library/src/org/diylc/components/semiconductors/MOSFETSymbol.java new file mode 100644 index 00000000..64adcad5 --- /dev/null +++ b/ diy-layout-creator --username bancika@gmail.com/diylc-library/src/org/diylc/components/semiconductors/MOSFETSymbol.java @@ -0,0 +1,77 @@ +package org.diylc.components.semiconductors; + +import java.awt.Graphics2D; +import java.awt.Polygon; +import java.awt.Shape; +import java.awt.geom.Area; +import java.awt.geom.GeneralPath; +import java.awt.geom.Rectangle2D; + +import org.diylc.common.ObjectCache; +import org.diylc.core.IDIYComponent; +import org.diylc.core.annotations.ComponentDescriptor; + +@ComponentDescriptor(name = "MOSFET Symbol", author = "Branislav Stojkovic", category = "Semiconductors", instanceNamePrefix = "Q", description = "BJT NPN and PNP transistor", stretchable = false, zOrder = IDIYComponent.COMPONENT) +public class MOSFETSymbol extends AbstractTransistorSymbol { + + private static final long serialVersionUID = 1L; + + public Shape[] getBody() { + if (body == null) { + body = new Shape[3]; + int x = controlPoints[0].x; + int y = controlPoints[0].y; + int pinSpacing = (int) PIN_SPACING.convertToPixels(); + + GeneralPath polyline = new GeneralPath(); + + polyline.moveTo(x + pinSpacing / 2, y - pinSpacing); + polyline.lineTo(x + pinSpacing / 2, y + pinSpacing); + polyline.moveTo(x + pinSpacing, y - pinSpacing); + polyline.lineTo(x + pinSpacing, y + pinSpacing); + polyline.moveTo(x + pinSpacing, y - pinSpacing); + polyline.lineTo(x + pinSpacing * 2, y - pinSpacing); + polyline.moveTo(x + pinSpacing, y + pinSpacing); + polyline.lineTo(x + pinSpacing * 2, y + pinSpacing); + body[0] = polyline; + + polyline = new GeneralPath(); + + polyline.moveTo(x, y); + polyline.lineTo(x + pinSpacing / 2, y); + polyline.moveTo(x + pinSpacing * 2, y - pinSpacing * 2); + polyline.lineTo(x + pinSpacing * 2, y - pinSpacing); + polyline.moveTo(x + pinSpacing * 2, y + pinSpacing * 2); + polyline.lineTo(x + pinSpacing * 2, y + pinSpacing); + body[1] = polyline; + + Polygon arrow; + if (polarity == TransistorPolarity.PNP) { + arrow = new Polygon(new int[] { x + pinSpacing * 8 / 6, x + pinSpacing * 8 / 6, + x + pinSpacing * 12 / 6 }, new int[] { y + pinSpacing * 6 / 5, + y + pinSpacing * 4 / 5, y + pinSpacing }, 3); + } else { + arrow = new Polygon(new int[] { x + pinSpacing * 7 / 6, x + pinSpacing * 11 / 6, + x + pinSpacing * 11 / 6 }, new int[] { y - pinSpacing, + y - pinSpacing * 6 / 5, y - pinSpacing * 4 / 5 }, 3); + } + body[2] = arrow; + } + return body; + } + + @Override + public void drawIcon(Graphics2D g2d, int width, int height) { + g2d.setColor(COLOR); + g2d.setStroke(ObjectCache.getInstance().fetchBasicStroke(1)); + g2d.drawLine(width / 5, height / 2, width / 2, height / 2); + g2d.drawLine(width / 2, height / 4, width / 2, height * 3 / 4); + g2d.drawLine(width * 3 / 5, height / 4, width * 3 / 5, height * 3 / 4); + + g2d.drawLine(width * 4 / 5, 1, width * 4 / 5, height / 4); + g2d.drawLine(width * 4 / 5, height / 4, width * 3 / 5, height / 4); + + g2d.drawLine(width * 4 / 5, height - 1, width * 4 / 5, height * 3 / 4); + g2d.drawLine(width * 4 / 5, height * 3 / 4, width * 3 / 5, height * 3 / 4); + } +} diff --git a/ diy-layout-creator --username bancika@gmail.com/diylc-library/src/org/diylc/components/semiconductors/TransistorPolarity.java b/ diy-layout-creator --username bancika@gmail.com/diylc-library/src/org/diylc/components/semiconductors/TransistorPolarity.java new file mode 100644 index 00000000..895f36cf --- /dev/null +++ b/ diy-layout-creator --username bancika@gmail.com/diylc-library/src/org/diylc/components/semiconductors/TransistorPolarity.java @@ -0,0 +1,6 @@ +package org.diylc.components.semiconductors; + +public enum TransistorPolarity { + + NPN, PNP, +} 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 d6038669fb46750b1b5fafcc78217ac97b94a52c..fa84681387ed555a029d43a54557dc92d38fb7e0 100644 GIT binary patch delta 11168 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 delta 5717 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 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 6866456b..339b3baf 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 @@ -485,6 +485,10 @@ NEW_FEATURE IC Symbol + + + NEW_FEATURE + MOSFET Symbol NEW_FEATURE