diff --git a/ diy-layout-creator --username bancika@gmail.com/diylc-core/src/org/diylc/presenter/Presenter.java b/ diy-layout-creator --username bancika@gmail.com/diylc-core/src/org/diylc/presenter/Presenter.java index 6d81f032..0d516bae 100644 --- a/ diy-layout-creator --username bancika@gmail.com/diylc-core/src/org/diylc/presenter/Presenter.java +++ b/ diy-layout-creator --username bancika@gmail.com/diylc-core/src/org/diylc/presenter/Presenter.java @@ -56,7 +56,7 @@ public class Presenter implements IPlugInPort { private static final Logger LOG = Logger.getLogger(Presenter.class); - public static final VersionNumber CURRENT_VERSION = new VersionNumber(3, 3, 0); + public static final VersionNumber CURRENT_VERSION = new VersionNumber(3, 4, 0); public static final String DEFAULTS_KEY_PREFIX = "default."; public static final List> EMPTY_SELECTION = Collections.emptyList(); diff --git a/ diy-layout-creator --username bancika@gmail.com/diylc-core/src/org/diylc/presenter/ProjectFileManager.java b/ diy-layout-creator --username bancika@gmail.com/diylc-core/src/org/diylc/presenter/ProjectFileManager.java index 52cccbca..594c89e7 100644 --- a/ diy-layout-creator --username bancika@gmail.com/diylc-core/src/org/diylc/presenter/ProjectFileManager.java +++ b/ diy-layout-creator --username bancika@gmail.com/diylc-core/src/org/diylc/presenter/ProjectFileManager.java @@ -111,7 +111,7 @@ public class ProjectFileManager { FileOutputStream fos; fos = new FileOutputStream(fileName); Writer writer = new OutputStreamWriter(fos, "UTF-8"); - writer.write(""); + writer.write("\n"); xStream.toXML(project, writer); fos.close(); if (!isBackup) { diff --git a/ diy-layout-creator --username bancika@gmail.com/diylc-library/lib/diylc-core.jar b/ diy-layout-creator --username bancika@gmail.com/diylc-library/lib/diylc-core.jar index 76339b12..e8c71a82 100644 Binary files a/ diy-layout-creator --username bancika@gmail.com/diylc-library/lib/diylc-core.jar and b/ diy-layout-creator --username bancika@gmail.com/diylc-library/lib/diylc-core.jar differ 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 index 9e240460..7114e7b4 100644 --- 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 @@ -34,7 +34,7 @@ public abstract class AbstractTransistorSymbol extends AbstractComponent new Point(0, 0) }; protected Color color = COLOR; protected Display display = Display.NAME; - protected Shape[] body; + transient protected Shape[] body; public AbstractTransistorSymbol() { super(); diff --git a/ diy-layout-creator --username bancika@gmail.com/diylc-library/src/org/diylc/components/semiconductors/BJTPolarity.java b/ diy-layout-creator --username bancika@gmail.com/diylc-library/src/org/diylc/components/semiconductors/BJTPolarity.java new file mode 100644 index 00000000..e0274896 --- /dev/null +++ b/ diy-layout-creator --username bancika@gmail.com/diylc-library/src/org/diylc/components/semiconductors/BJTPolarity.java @@ -0,0 +1,21 @@ +package org.diylc.components.semiconductors; + +public enum BJTPolarity { + + NPN("NPN"), PNP("PNP"); + + private String title; + + private BJTPolarity(String title) { + this.title = title; + } + + public String getTitle() { + return title; + } + + @Override + public String toString() { + return title; + } +} diff --git a/ diy-layout-creator --username bancika@gmail.com/diylc-library/src/org/diylc/components/semiconductors/BJTSymbol.java b/ diy-layout-creator --username bancika@gmail.com/diylc-library/src/org/diylc/components/semiconductors/BJTSymbol.java new file mode 100644 index 00000000..8fac5d47 --- /dev/null +++ b/ diy-layout-creator --username bancika@gmail.com/diylc-library/src/org/diylc/components/semiconductors/BJTSymbol.java @@ -0,0 +1,99 @@ +package org.diylc.components.semiconductors; + +import java.awt.Graphics2D; +import java.awt.Polygon; +import java.awt.Shape; +import java.awt.geom.AffineTransform; +import java.awt.geom.Area; +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 = "BJT Symbol", author = "Branislav Stojkovic", category = "Semiconductors", instanceNamePrefix = "Q", description = "Bipolar junction transistor schematic symbol", stretchable = false, zOrder = IDIYComponent.COMPONENT) +public class BJTSymbol extends AbstractTransistorSymbol { + + private static final long serialVersionUID = 1L; + + protected BJTPolarity polarity = BJTPolarity.NPN; + + 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 * 3 / 2); + polyline.lineTo(x + pinSpacing / 2, y + pinSpacing * 3 / 2); + + body[0] = polyline; + + polyline = new GeneralPath(); + + polyline.moveTo(x, y); + polyline.lineTo(x + pinSpacing / 2, y); + polyline.moveTo(x + pinSpacing / 2, y - pinSpacing * 7 / 8); + polyline.lineTo(x + pinSpacing * 2, y - pinSpacing * 3 / 2); + polyline.lineTo(x + pinSpacing * 2, y - pinSpacing * 2); + polyline.moveTo(x + pinSpacing / 2, y + pinSpacing * 7 / 8); + polyline.lineTo(x + pinSpacing * 2, y + pinSpacing * 3 / 2); + polyline.lineTo(x + pinSpacing * 2, y + pinSpacing * 2); + body[1] = polyline; + + Area arrow; + double theta; + if (polarity == BJTPolarity.NPN) { + theta = Math.atan(5.0 / 12); + arrow = new Area(new Polygon(new int[] { x + pinSpacing, x + pinSpacing, + x + pinSpacing * 10 / 6 }, new int[] { + y - pinSpacing / 5 + pinSpacing * 7 / 8, + y + pinSpacing / 5 + pinSpacing * 7 / 8, y + pinSpacing * 7 / 8 }, 3)); + arrow.transform(AffineTransform.getRotateInstance(theta, x + pinSpacing / 2, y + + pinSpacing * 7 / 8)); + } else { + theta = -Math.atan(5.0 / 12); + arrow = new Area(new Polygon(new int[] { x + pinSpacing, x + pinSpacing * 10 / 6, + x + pinSpacing * 10 / 6 }, new int[] { y - pinSpacing * 7 / 8, + y - pinSpacing / 5 - pinSpacing * 7 / 8, + y + pinSpacing / 5 - pinSpacing * 7 / 8 }, 3)); + arrow.transform(AffineTransform.getRotateInstance(theta, x + pinSpacing / 2, y + - pinSpacing * 7 / 8)); + } + 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 / 3, height / 5, width / 3, height * 4 / 5); + + g2d.setStroke(ObjectCache.getInstance().fetchBasicStroke(1)); + g2d.drawLine(width / 8, height / 2, width / 3, height / 2); + + g2d.drawLine(width * 3 / 4, 1, width * 3 / 4, height / 4); + g2d.drawLine(width / 3, height / 3 + 1, width * 3 / 4, height / 4); + + g2d.drawLine(width * 3 / 4, height - 1, width * 3 / 4, height * 3 / 4); + g2d.drawLine(width / 3, height * 2 / 3 - 1, width * 3 / 4, height * 3 / 4); + } + + @EditableProperty(name = "Polarity") + public BJTPolarity getPolarity() { + return polarity; + } + + public void setPolarity(BJTPolarity polarity) { + this.polarity = polarity; + // Invalidate body + body = null; + } +} diff --git a/ diy-layout-creator --username bancika@gmail.com/diylc-swing/lib/diylc-core.jar b/ diy-layout-creator --username bancika@gmail.com/diylc-swing/lib/diylc-core.jar index 76339b12..e8c71a82 100644 Binary files a/ diy-layout-creator --username bancika@gmail.com/diylc-swing/lib/diylc-core.jar and b/ diy-layout-creator --username bancika@gmail.com/diylc-swing/lib/diylc-core.jar differ 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 32fdbb2c..9837a59a 100644 Binary files a/ diy-layout-creator --username bancika@gmail.com/diylc-swing/library/main.jar and b/ diy-layout-creator --username bancika@gmail.com/diylc-swing/library/main.jar differ 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 18a08548..3da6ffb3 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 @@ -486,6 +486,10 @@ NEW_FEATURE IC Symbol + + NEW_FEATURE + BJT Symbol + NEW_FEATURE MOSFET Symbol @@ -506,6 +510,10 @@ BUG_FIX "Index out of bounds" exception logs when selecting components + + BUG_FIX + Loading files fails because encoding is not recognized + BUG_FIX Application breaks when resistance is set to 0 ohms