From f834aa6d0b6ddf887712c24162dac7a1d0c23190 Mon Sep 17 00:00:00 2001 From: bancika Date: Sun, 4 Mar 2012 23:03:41 +0000 Subject: [PATCH] Added JFET Symbol --- .../components/passive/ResistorSymbol.java | 2 +- .../components/semiconductors/JFETSymbol.java | 88 ++++++++++++++++++ .../semiconductors/MOSFETSymbol.java | 20 ++-- .../diylc-swing/library/main.jar | Bin 141089 -> 142927 bytes .../diylc-swing/update.xml | 6 +- 5 files changed, 104 insertions(+), 12 deletions(-) create mode 100644 diy-layout-creator --username bancika@gmail.com/diylc-library/src/org/diylc/components/semiconductors/JFETSymbol.java diff --git a/ diy-layout-creator --username bancika@gmail.com/diylc-library/src/org/diylc/components/passive/ResistorSymbol.java b/ diy-layout-creator --username bancika@gmail.com/diylc-library/src/org/diylc/components/passive/ResistorSymbol.java index 11b2d892..2ed5d7ba 100644 --- a/ diy-layout-creator --username bancika@gmail.com/diylc-library/src/org/diylc/components/passive/ResistorSymbol.java +++ b/ diy-layout-creator --username bancika@gmail.com/diylc-library/src/org/diylc/components/passive/ResistorSymbol.java @@ -15,7 +15,7 @@ import org.diylc.core.measures.ResistanceUnit; import org.diylc.core.measures.Size; import org.diylc.core.measures.SizeUnit; -@ComponentDescriptor(name = "Resistor (schematic symbol)", author = "Branislav Stojkovic", category = "Passive", creationMethod = CreationMethod.POINT_BY_POINT, instanceNamePrefix = "R", description = "", zOrder = IDIYComponent.COMPONENT) +@ComponentDescriptor(name = "Resistor (schematic symbol)", author = "Branislav Stojkovic", category = "Passive", creationMethod = CreationMethod.POINT_BY_POINT, instanceNamePrefix = "R", description = "Resistor schematic symbol", zOrder = IDIYComponent.COMPONENT) public class ResistorSymbol extends AbstractSchematicLeadedSymbol { private static final long serialVersionUID = 1L; diff --git a/ diy-layout-creator --username bancika@gmail.com/diylc-library/src/org/diylc/components/semiconductors/JFETSymbol.java b/ diy-layout-creator --username bancika@gmail.com/diylc-library/src/org/diylc/components/semiconductors/JFETSymbol.java new file mode 100644 index 00000000..3f48f003 --- /dev/null +++ b/ diy-layout-creator --username bancika@gmail.com/diylc-library/src/org/diylc/components/semiconductors/JFETSymbol.java @@ -0,0 +1,88 @@ +package org.diylc.components.semiconductors; + +import java.awt.Graphics2D; +import java.awt.Polygon; +import java.awt.Shape; +import java.awt.geom.GeneralPath; + +import org.diylc.common.ObjectCache; +import org.diylc.core.IDIYComponent; +import org.diylc.core.annotations.ComponentDescriptor; +import org.diylc.core.annotations.EditableProperty; + +@ComponentDescriptor(name = "JFET Symbol", author = "Branislav Stojkovic", category = "Semiconductors", instanceNamePrefix = "Q", description = "JFET transistor schematic symbol", stretchable = false, zOrder = IDIYComponent.COMPONENT) +public class JFETSymbol extends AbstractTransistorSymbol { + + private static final long serialVersionUID = 1L; + + protected FETPolarity polarity = FETPolarity.NEGATIVE; + + 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, y - pinSpacing); + polyline.lineTo(x + pinSpacing, y + pinSpacing); + + body[0] = polyline; + + polyline = new GeneralPath(); + + polyline.moveTo(x, y); + polyline.lineTo(x + pinSpacing, y); + polyline.moveTo(x + pinSpacing, y - pinSpacing * 7 / 8); + polyline.lineTo(x + pinSpacing * 2, y - pinSpacing * 7 / 8); + polyline.lineTo(x + pinSpacing * 2, y - pinSpacing * 2); + polyline.moveTo(x + pinSpacing, y + pinSpacing * 7 / 8); + polyline.lineTo(x + pinSpacing * 2, y + pinSpacing * 7 / 8); + polyline.lineTo(x + pinSpacing * 2, y + pinSpacing * 2); + body[1] = polyline; + + Polygon arrow; + if (polarity == FETPolarity.NEGATIVE) { + arrow = new Polygon(new int[] { x + pinSpacing * 2 / 6, x + pinSpacing * 2 / 6, + x + pinSpacing * 6 / 6 }, new int[] { y - pinSpacing / 5, + y + pinSpacing / 5, y }, 3); + } else { + arrow = new Polygon(new int[] { x + pinSpacing / 6, x + pinSpacing * 5 / 6, + x + pinSpacing * 5 / 6 }, new int[] { y, y + pinSpacing / 5, + y - pinSpacing / 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(2)); + g2d.drawLine(width / 2, height / 5, width / 2, height * 4 / 5); + + g2d.setStroke(ObjectCache.getInstance().fetchBasicStroke(1)); + g2d.drawLine(width / 5, height / 2, width / 2, height / 2); + + g2d.drawLine(width * 3 / 4, 1, width * 3 / 4, height / 4); + g2d.drawLine(width / 2, height / 4, width * 3 / 4, height / 4); + + g2d.drawLine(width * 3 / 4, height - 1, width * 3 / 4, height * 3 / 4); + g2d.drawLine(width / 2, height * 3 / 4, width * 3 / 4, height * 3 / 4); + } + + @EditableProperty(name = "Channel") + public FETPolarity getPolarity() { + return polarity; + } + + public void setPolarity(FETPolarity polarity) { + this.polarity = polarity; + // Invalidate body + body = null; + } +} 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 index 03009e06..864bf123 100644 --- 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 @@ -10,11 +10,11 @@ import org.diylc.core.IDIYComponent; import org.diylc.core.annotations.ComponentDescriptor; import org.diylc.core.annotations.EditableProperty; -@ComponentDescriptor(name = "MOSFET Symbol", author = "Branislav Stojkovic", category = "Semiconductors", instanceNamePrefix = "Q", description = "MOSFET transistor", stretchable = false, zOrder = IDIYComponent.COMPONENT) +@ComponentDescriptor(name = "MOSFET Symbol", author = "Branislav Stojkovic", category = "Semiconductors", instanceNamePrefix = "Q", description = "MOSFET transistor schematic symbol", stretchable = false, zOrder = IDIYComponent.COMPONENT) public class MOSFETSymbol extends AbstractTransistorSymbol { private static final long serialVersionUID = 1L; - + protected FETPolarity polarity = FETPolarity.NEGATIVE; public Shape[] getBody() { @@ -30,14 +30,14 @@ public class MOSFETSymbol extends AbstractTransistorSymbol { 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 + pinSpacing, y - pinSpacing); + polyline.lineTo(x + pinSpacing * 2, y - pinSpacing); + polyline.moveTo(x + pinSpacing, y + pinSpacing); + polyline.lineTo(x + pinSpacing * 2, y + pinSpacing); polyline.moveTo(x, y); polyline.lineTo(x + pinSpacing / 2, y); polyline.moveTo(x + pinSpacing * 2, y - pinSpacing * 2); @@ -68,15 +68,15 @@ public class MOSFETSymbol extends AbstractTransistorSymbol { 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); } - - @EditableProperty + + @EditableProperty(name = "Channel") public FETPolarity getPolarity() { return polarity; } 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 06edcc7de1659d35061fd72b24f5f7c426d827a2..32fdbb2cf5af7ada5bd0b6b663bda3cfd9af6d97 100644 GIT binary patch delta 7672 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 NEW_FEATURE MOSFET Symbol - + + + NEW_FEATURE + JFET Symbol + NEW_FEATURE Line connector