diff --git a/diylc/diylc-core/src/org/diylc/presenter/update.xml b/diylc/diylc-core/src/org/diylc/presenter/update.xml index bf57db00..35277bd7 100644 --- a/diylc/diylc-core/src/org/diylc/presenter/update.xml +++ b/diylc/diylc-core/src/org/diylc/presenter/update.xml @@ -3014,6 +3014,10 @@ NEW_FEATURE Added support for automated regression testing of core functionalities which should reduce regression bugs in the long run + + NEW_FEATURE + Added support for rotating and mirroring potentiometer symbol and transistor symbols + NEW_FEATURE Added mirrored pin display options for "DIL IC" diff --git a/diylc/diylc-library/lib/diylc-core.jar b/diylc/diylc-library/lib/diylc-core.jar index cf105cd4..1b61087a 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/passive/PotentiometerSymbol.java b/diylc/diylc-library/src/org/diylc/components/passive/PotentiometerSymbol.java index 3804034c..cf446c54 100644 --- a/diylc/diylc-library/src/org/diylc/components/passive/PotentiometerSymbol.java +++ b/diylc/diylc-library/src/org/diylc/components/passive/PotentiometerSymbol.java @@ -32,13 +32,15 @@ import java.awt.geom.Rectangle2D; import org.diylc.components.Abstract3LegSymbol; import org.diylc.components.semiconductors.SymbolFlipping; +import org.diylc.components.transform.ThreeLegTransformer; import org.diylc.core.IDIYComponent; import org.diylc.core.annotations.ComponentDescriptor; import org.diylc.core.annotations.KeywordPolicy; @ComponentDescriptor(name = "Potentiometer", author = "MCbx", category = "Schematic Symbols", instanceNamePrefix = "VR", description = "Potentiometer symbol", - zOrder = IDIYComponent.COMPONENT, keywordPolicy = KeywordPolicy.SHOW_TAG, keywordTag = "Schematic") + zOrder = IDIYComponent.COMPONENT, transformer = ThreeLegTransformer.class, keywordPolicy = KeywordPolicy.SHOW_TAG, + keywordTag = "Schematic") public class PotentiometerSymbol extends Abstract3LegSymbol { private static final long serialVersionUID = 1L; diff --git a/diylc/diylc-library/src/org/diylc/components/semiconductors/BJTSymbol.java b/diylc/diylc-library/src/org/diylc/components/semiconductors/BJTSymbol.java index 76af7c98..0e3f6f30 100644 --- a/diylc/diylc-library/src/org/diylc/components/semiconductors/BJTSymbol.java +++ b/diylc/diylc-library/src/org/diylc/components/semiconductors/BJTSymbol.java @@ -30,7 +30,8 @@ import java.awt.geom.Area; import java.awt.geom.GeneralPath; import org.diylc.common.ObjectCache; -import org.diylc.components.Abstract3LegSymbol; +import org.diylc.components.Abstract3LegSymbol; +import org.diylc.components.transform.ThreeLegTransformer; import org.diylc.core.IDIYComponent; import org.diylc.core.annotations.ComponentDescriptor; import org.diylc.core.annotations.EditableProperty; @@ -38,7 +39,7 @@ import org.diylc.core.annotations.KeywordPolicy; @ComponentDescriptor(name = "BJT", author = "Branislav Stojkovic", category = "Schematic Symbols", instanceNamePrefix = "Q", description = "Bipolar junction transistor schematic symbol", - zOrder = IDIYComponent.COMPONENT, keywordPolicy = KeywordPolicy.SHOW_TAG_AND_VALUE, keywordTag = "Schematic") + zOrder = IDIYComponent.COMPONENT, transformer = ThreeLegTransformer.class, keywordPolicy = KeywordPolicy.SHOW_TAG_AND_VALUE, keywordTag = "Schematic") public class BJTSymbol extends Abstract3LegSymbol { private static final long serialVersionUID = 1L; diff --git a/diylc/diylc-library/src/org/diylc/components/semiconductors/JFETSymbol.java b/diylc/diylc-library/src/org/diylc/components/semiconductors/JFETSymbol.java index c7bb3f85..2505ddd1 100644 --- a/diylc/diylc-library/src/org/diylc/components/semiconductors/JFETSymbol.java +++ b/diylc/diylc-library/src/org/diylc/components/semiconductors/JFETSymbol.java @@ -28,7 +28,8 @@ import java.awt.Shape; import java.awt.geom.GeneralPath; import org.diylc.common.ObjectCache; -import org.diylc.components.Abstract3LegSymbol; +import org.diylc.components.Abstract3LegSymbol; +import org.diylc.components.transform.ThreeLegTransformer; import org.diylc.core.IDIYComponent; import org.diylc.core.annotations.ComponentDescriptor; import org.diylc.core.annotations.EditableProperty; @@ -36,7 +37,7 @@ import org.diylc.core.annotations.KeywordPolicy; @ComponentDescriptor(name = "JFET", author = "Branislav Stojkovic", category = "Schematic Symbols", instanceNamePrefix = "Q", description = "JFET transistor schematic symbol", - zOrder = IDIYComponent.COMPONENT, keywordPolicy = KeywordPolicy.SHOW_TAG_AND_VALUE, keywordTag = "Schematic") + zOrder = IDIYComponent.COMPONENT, transformer = ThreeLegTransformer.class, keywordPolicy = KeywordPolicy.SHOW_TAG_AND_VALUE, keywordTag = "Schematic") public class JFETSymbol extends Abstract3LegSymbol { private static final long serialVersionUID = 1L; diff --git a/diylc/diylc-library/src/org/diylc/components/semiconductors/MOSFETSymbol.java b/diylc/diylc-library/src/org/diylc/components/semiconductors/MOSFETSymbol.java index 9595fd4f..84753790 100644 --- a/diylc/diylc-library/src/org/diylc/components/semiconductors/MOSFETSymbol.java +++ b/diylc/diylc-library/src/org/diylc/components/semiconductors/MOSFETSymbol.java @@ -28,7 +28,8 @@ import java.awt.Shape; import java.awt.geom.GeneralPath; import org.diylc.common.ObjectCache; -import org.diylc.components.Abstract3LegSymbol; +import org.diylc.components.Abstract3LegSymbol; +import org.diylc.components.transform.ThreeLegTransformer; import org.diylc.core.IDIYComponent; import org.diylc.core.annotations.ComponentDescriptor; import org.diylc.core.annotations.EditableProperty; @@ -36,7 +37,7 @@ import org.diylc.core.annotations.KeywordPolicy; @ComponentDescriptor(name = "MOSFET", author = "Branislav Stojkovic", category = "Schematic Symbols", instanceNamePrefix = "Q", description = "MOSFET transistor schematic symbol", - zOrder = IDIYComponent.COMPONENT, keywordPolicy = KeywordPolicy.SHOW_TAG_AND_VALUE, keywordTag = "Schematic") + zOrder = IDIYComponent.COMPONENT, transformer = ThreeLegTransformer.class, keywordPolicy = KeywordPolicy.SHOW_TAG_AND_VALUE, keywordTag = "Schematic") public class MOSFETSymbol extends Abstract3LegSymbol { private static final long serialVersionUID = 1L; diff --git a/diylc/diylc-library/src/org/diylc/components/transform/ThreeLegTransformer.java b/diylc/diylc-library/src/org/diylc/components/transform/ThreeLegTransformer.java new file mode 100644 index 00000000..144be827 --- /dev/null +++ b/diylc/diylc-library/src/org/diylc/components/transform/ThreeLegTransformer.java @@ -0,0 +1,104 @@ +/* + + 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.transform; + +import java.awt.Point; +import java.awt.geom.AffineTransform; + +import org.diylc.common.IComponentTransformer; +import org.diylc.common.Orientation; +import org.diylc.components.Abstract3LegSymbol; +import org.diylc.components.semiconductors.SymbolFlipping; +import org.diylc.core.IDIYComponent; + +public class ThreeLegTransformer implements IComponentTransformer { + + @Override + public boolean canRotate(IDIYComponent component) { + return Abstract3LegSymbol.class.isAssignableFrom(component.getClass()); + } + + @Override + public boolean canMirror(IDIYComponent component) { + return Abstract3LegSymbol.class.isAssignableFrom(component.getClass()); + } + + @Override + public boolean mirroringChangesCircuit() { + return true; + } + + @Override + public void rotate(IDIYComponent component, Point center, int direction) { + AffineTransform rotate = AffineTransform.getRotateInstance(Math.PI / 2 * direction, center.x, center.y); + for (int index = 0; index < component.getControlPointCount(); index++) { + Point p = new Point(component.getControlPoint(index)); + rotate.transform(p, p); + component.setControlPoint(p, index); + } + + Abstract3LegSymbol a3l = (Abstract3LegSymbol) component; + Orientation o = a3l.getOrientation(); + int oValue = o.ordinal(); + oValue += direction; + if (oValue < 0) + oValue = Orientation.values().length - 1; + if (oValue >= Orientation.values().length) + oValue = 0; + o = Orientation.values()[oValue]; + a3l.setOrientation(o); + } + + @Override + public void mirror(IDIYComponent component, Point center, int direction) { + Abstract3LegSymbol a3l = (Abstract3LegSymbol) component; + + Orientation o = a3l.getOrientation(); + SymbolFlipping flip = a3l.getFlip(); + + if (direction == IComponentTransformer.HORIZONTAL) { + if (o == Orientation.DEFAULT || o == Orientation._180) { + if (flip == SymbolFlipping.NONE) + a3l.setFlip(SymbolFlipping.X); + else if (flip == SymbolFlipping.X) + a3l.setFlip(SymbolFlipping.NONE); + } else if (o == Orientation._90 || o == Orientation._270) { + if (flip == SymbolFlipping.NONE) + a3l.setFlip(SymbolFlipping.Y); + else if (flip == SymbolFlipping.Y) + a3l.setFlip(SymbolFlipping.NONE); + } + } else { + if (o == Orientation.DEFAULT || o == Orientation._180) { + if (flip == SymbolFlipping.NONE) + a3l.setFlip(SymbolFlipping.Y); + else if (flip == SymbolFlipping.Y) + a3l.setFlip(SymbolFlipping.NONE); + } else if (o == Orientation._90 || o == Orientation._270) { + if (flip == SymbolFlipping.NONE) + a3l.setFlip(SymbolFlipping.X); + else if (flip == SymbolFlipping.X) + a3l.setFlip(SymbolFlipping.NONE); + } + } + } +} diff --git a/diylc/diylc-swing/lib/diylc-core.jar b/diylc/diylc-swing/lib/diylc-core.jar index cf105cd4..1b61087a 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 c0761a4f..97b5476c 100644 Binary files a/diylc/diylc-swing/library/main.jar and b/diylc/diylc-swing/library/main.jar differ