diff --git a/diylc/diylc-library/src/org/diylc/components/Abstract3LegSymbol.java b/diylc/diylc-library/src/org/diylc/components/Abstract3LegSymbol.java index 1a52251f..6b3abad1 100644 --- a/diylc/diylc-library/src/org/diylc/components/Abstract3LegSymbol.java +++ b/diylc/diylc-library/src/org/diylc/components/Abstract3LegSymbol.java @@ -14,6 +14,7 @@ import org.diylc.common.Display; import org.diylc.common.HorizontalAlignment; import org.diylc.common.IPlugInPort; import org.diylc.common.ObjectCache; +import org.diylc.common.Orientation; import org.diylc.common.VerticalAlignment; import org.diylc.components.AbstractComponent; import org.diylc.components.semiconductors.SymbolFlipping; @@ -41,6 +42,7 @@ public abstract class Abstract3LegSymbol extends AbstractComponent { protected SymbolFlipping flip = FLIPPING; protected Display display = Display.NAME; transient protected Shape[] body; + protected Orientation orientation = Orientation.DEFAULT; public Abstract3LegSymbol() { super(); @@ -183,8 +185,8 @@ public abstract class Abstract3LegSymbol extends AbstractComponent { @Override public void setControlPoint(Point point, int index) { controlPoints[index].setLocation(point); - // Invalidate body - body = null; + + refreshDrawing(); } @EditableProperty @@ -194,7 +196,8 @@ public abstract class Abstract3LegSymbol extends AbstractComponent { public void setFlip(SymbolFlipping flip) { this.flip = flip; - updateControlPoints(); + + refreshDrawing(); } @EditableProperty @@ -214,6 +217,42 @@ public abstract class Abstract3LegSymbol extends AbstractComponent { public void setDisplay(Display display) { this.display = display; } + + @EditableProperty + public Orientation getOrientation() { + if (orientation == null) + orientation = Orientation.DEFAULT; + + return orientation; + } + + public void setOrientation(Orientation orientation) { + this.orientation = orientation; + + refreshDrawing(); + } + + protected void refreshDrawing() { + updateControlPoints(); + // make sure we have a new drawing + body = null; + getBody(); + + if (getOrientation() == Orientation.DEFAULT) + return; + + Point first = this.controlPoints[0]; + double angle = Double.parseDouble(getOrientation().name().replace("_", "")); + AffineTransform rotate = AffineTransform.getRotateInstance(Math.toRadians(angle), first.x, first.y); + for (int i = 1; i < this.controlPoints.length; i++) { + rotate.transform(this.controlPoints[i], this.controlPoints[i]); + } + if (this.body != null) { + for (int i = 0; i < this.body.length; i++) { + this.body[i] = rotate.createTransformedShape(this.body[i]); + } + } + } /** * Returns transistor shape consisting of 3 parts, in this order: main body, connectors, polarity 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 910d743b..72d92fda 100644 --- a/diylc/diylc-library/src/org/diylc/components/semiconductors/BJTSymbol.java +++ b/diylc/diylc-library/src/org/diylc/components/semiconductors/BJTSymbol.java @@ -95,7 +95,8 @@ public class BJTSymbol extends Abstract3LegSymbol { public void setPolarity(BJTPolarity polarity) { this.polarity = polarity; - // Invalidate body - body = null; + + + refreshDrawing(); } } 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 5914b2e8..9e52316c 100644 --- a/diylc/diylc-library/src/org/diylc/components/semiconductors/JFETSymbol.java +++ b/diylc/diylc-library/src/org/diylc/components/semiconductors/JFETSymbol.java @@ -87,7 +87,7 @@ public class JFETSymbol extends Abstract3LegSymbol { public void setPolarity(FETPolarity polarity) { this.polarity = polarity; - // Invalidate body - body = null; + + refreshDrawing(); } } 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 ddac6429..a2282e7b 100644 --- a/diylc/diylc-library/src/org/diylc/components/semiconductors/MOSFETSymbol.java +++ b/diylc/diylc-library/src/org/diylc/components/semiconductors/MOSFETSymbol.java @@ -90,7 +90,7 @@ public class MOSFETSymbol extends Abstract3LegSymbol { public void setPolarity(FETPolarity polarity) { this.polarity = polarity; - // Invalidate body - body = null; + + refreshDrawing(); } } diff --git a/diylc/diylc-swing/library/main.jar b/diylc/diylc-swing/library/main.jar index 6292afab..81c47fde 100644 Binary files a/diylc/diylc-swing/library/main.jar and b/diylc/diylc-swing/library/main.jar differ diff --git a/diylc/diylc-swing/update.xml b/diylc/diylc-swing/update.xml index 4e0a2289..a9a0e1bb 100644 --- a/diylc/diylc-swing/update.xml +++ b/diylc/diylc-swing/update.xml @@ -1420,7 +1420,7 @@ NEW_FEATURE - Tube symbols can be rotated + Tube, transistor and potentiometer symbols can be rotated IMPROVEMENT