diff --git a/diylc/diylc-library/src/org/diylc/components/Abstract3LegSymbol.java b/diylc/diylc-library/src/org/diylc/components/Abstract3LegSymbol.java index d9fb06f2..46b0f1e7 100644 --- a/diylc/diylc-library/src/org/diylc/components/Abstract3LegSymbol.java +++ b/diylc/diylc-library/src/org/diylc/components/Abstract3LegSymbol.java @@ -104,8 +104,6 @@ public abstract class Abstract3LegSymbol extends AbstractComponent { } g2d.setColor(finalColor); - // Draw transistor - if (this.body == null) { this.body = getBody(); applyOrientation(this.body); @@ -164,7 +162,7 @@ public abstract class Abstract3LegSymbol extends AbstractComponent { if (getMoveLabel()) { drawCenteredText(g2d, label, controlPoints[3].x, controlPoints[3].y, flip == SymbolFlipping.X ? HorizontalAlignment.RIGHT - : HorizontalAlignment.LEFT, VerticalAlignment.CENTER); + : HorizontalAlignment.CENTER, VerticalAlignment.CENTER); } else { drawCenteredText(g2d, label, getLabelX(shapeRect, textRect, fontMetrics, outlineMode), getLabelY(shapeRect, textRect, fontMetrics, outlineMode), flip == SymbolFlipping.X ? HorizontalAlignment.RIGHT @@ -194,22 +192,22 @@ public abstract class Abstract3LegSymbol extends AbstractComponent { protected void updateControlPoints() { int pinSpacing = (int) PIN_SPACING.convertToPixels(); - Point[] controlPoints = getNewControlPoints(); - // Update control points. + Point[] controlPoints = getNewControlPoints(); + int x = controlPoints[0].x; int y = controlPoints[0].y; - - int f = flip == SymbolFlipping.X ? -1 : 1; - int d = flip == SymbolFlipping.X ? (int) PIN_SPACING.convertToPixels() / 2 : 0; - - controlPoints[1].x = x + f * pinSpacing * 2; + + // set default point positions + controlPoints[1].x = x + pinSpacing * 2; controlPoints[1].y = y - pinSpacing * 2; - controlPoints[2].x = x + f * pinSpacing * 2; + controlPoints[2].x = x + pinSpacing * 2; controlPoints[2].y = y + pinSpacing * 2; - controlPoints[3].x = x + f * (int) (PIN_SPACING.convertToPixels() * 1.5 + d); + controlPoints[3].x = x + (int) (PIN_SPACING.convertToPixels() * 2); + controlPoints[3].y = y; + // apply rotation if needed if (getOrientation() != Orientation.DEFAULT) { Point first = controlPoints[0]; @@ -218,6 +216,18 @@ public abstract class Abstract3LegSymbol extends AbstractComponent { for (int i = 1; i < controlPoints.length; i++) { rotate.transform(controlPoints[i], controlPoints[i]); } + } + + // flip at the end + if (flip == SymbolFlipping.X) { + controlPoints[1].x = controlPoints[0].x - (controlPoints[1].x - controlPoints[0].x); + controlPoints[2].x = controlPoints[0].x - (controlPoints[2].x - controlPoints[0].x); + controlPoints[3].x = controlPoints[0].x - (controlPoints[3].x - controlPoints[0].x); + } + if (flip == SymbolFlipping.Y) { + controlPoints[1].y = controlPoints[0].y - (controlPoints[1].y - controlPoints[0].y); + controlPoints[2].y = controlPoints[0].y - (controlPoints[2].y - controlPoints[0].y); + controlPoints[3].y = controlPoints[0].y - (controlPoints[3].y - controlPoints[0].y); } } diff --git a/diylc/diylc-swing/lib/diylc-core.jar b/diylc/diylc-swing/lib/diylc-core.jar index 71a6474e..97907000 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 6fc597c6..111b958d 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 15f6addf..47c0392f 100644 --- a/diylc/diylc-swing/update.xml +++ b/diylc/diylc-swing/update.xml @@ -2662,6 +2662,10 @@ IMPROVEMENT Scan "library" folder for any additional JAR files that may contain more components + + BUG_FIX + Some schematic symbols (transistors, potentiometer...) get into bad state when rotated and flipped at the same time + BUG_FIX Z-order of components sometimes gets wrong when importing a DIY file into another file