fix submini tube orientation

This commit is contained in:
bancika
2020-04-15 20:35:27 +02:00
parent e78c6148c7
commit 874c9dea83
@@ -134,7 +134,7 @@ public class SubminiTube extends AbstractTransparentComponent<String> {
@Override @Override
public VisibilityPolicy getControlPointVisibilityPolicy(int index) { public VisibilityPolicy getControlPointVisibilityPolicy(int index) {
return VisibilityPolicy.ALWAYS; return getFolded() ? VisibilityPolicy.ALWAYS : VisibilityPolicy.WHEN_SELECTED;
} }
@Override @Override
@@ -166,18 +166,18 @@ public class SubminiTube extends AbstractTransparentComponent<String> {
switch (orientation) { switch (orientation) {
case DEFAULT: case DEFAULT:
dx = 0; dx = 0;
dy = leadSpacing; dy = -leadSpacing;
break; break;
case _90: case _90:
dx = -leadSpacing; dx = leadSpacing;
dy = 0; dy = 0;
break; break;
case _180: case _180:
dx = 0; dx = 0;
dy = -leadSpacing; dy = leadSpacing;
break; break;
case _270: case _270:
dx = leadSpacing; dx = -leadSpacing;
dy = 0; dy = 0;
break; break;
default: default:
@@ -191,33 +191,33 @@ public class SubminiTube extends AbstractTransparentComponent<String> {
int centerY = (controlPoints[controlPoints.length - 2].y + y) / 2; int centerY = (controlPoints[controlPoints.length - 2].y + y) / 2;
switch (orientation) { switch (orientation) {
case DEFAULT: case DEFAULT:
if (folded)
dx += length + leadLength + diameter / 2;
else
dx = -leadSpacing;
dy = 0;
break;
case _90:
dx = 0;
if (folded)
dy += length + leadLength + diameter / 2;
else
dy = -leadSpacing;
break;
case _180:
if (folded) if (folded)
dx -= length + leadLength + diameter / 2; dx -= length + leadLength + diameter / 2;
else else
dx = leadSpacing; dx = leadSpacing;
dy = 0; dy = 0;
break; break;
case _270: case _90:
dx = 0; dx = 0;
if (folded) if (folded)
dy -= length + leadLength + diameter / 2; dy -= length + leadLength + diameter / 2;
else else
dy = leadSpacing; dy = leadSpacing;
break; break;
case _180:
if (folded)
dx += length + leadLength + diameter / 2;
else
dx = -leadSpacing;
dy = 0;
break;
case _270:
dx = 0;
if (folded)
dy += length + leadLength + diameter / 2;
else
dy = -leadSpacing;
break;
} }
controlPoints[controlPoints.length - 1].setLocation(centerX + dx, centerY + dy); controlPoints[controlPoints.length - 1].setLocation(centerX + dx, centerY + dy);
} }
@@ -263,30 +263,30 @@ public class SubminiTube extends AbstractTransparentComponent<String> {
if (folded) { if (folded) {
switch (orientation) { switch (orientation) {
case DEFAULT: case DEFAULT:
body[0] = new Area(new RoundRectangle2D.Double(centerX + leadLength, centerY - diameter / 2,
length, diameter, edgeRadius, edgeRadius));
body[0].add(new Area(new RoundRectangle2D.Double(centerX + leadLength + length - diameter / 2, centerY - diameter / 8,
diameter, diameter / 4, diameter / 4, diameter / 4)));
break;
case _90:
body[0] = new Area(new RoundRectangle2D.Double(centerX - diameter / 2, centerY + leadLength,
diameter, length, edgeRadius, edgeRadius));
body[0].add(new Area(new RoundRectangle2D.Double(centerX - diameter / 8, centerY + leadLength + length - diameter / 2,
diameter / 4, diameter, diameter / 4, diameter / 4)));
break;
case _180:
body[0] = new Area(new RoundRectangle2D.Double(centerX - leadLength - length, centerY - diameter / 2, body[0] = new Area(new RoundRectangle2D.Double(centerX - leadLength - length, centerY - diameter / 2,
length, diameter, edgeRadius, edgeRadius)); length, diameter, edgeRadius, edgeRadius));
body[0].add(new Area(new RoundRectangle2D.Double(centerX - leadLength - length - diameter / 2, centerY - diameter / 8, body[0].add(new Area(new RoundRectangle2D.Double(centerX - leadLength - length - diameter / 2, centerY - diameter / 8,
diameter, diameter / 4, diameter / 4, diameter / 4))); diameter, diameter / 4, diameter / 4, diameter / 4)));
break; break;
case _270: case _90:
body[0] = new Area(new RoundRectangle2D.Double(centerX - diameter / 2, centerY - leadLength - length, body[0] = new Area(new RoundRectangle2D.Double(centerX - diameter / 2, centerY - leadLength - length,
diameter, length, edgeRadius, edgeRadius)); diameter, length, edgeRadius, edgeRadius));
body[0].add(new Area(new RoundRectangle2D.Double(centerX - diameter / 8, centerY - leadLength - length - diameter / 2, body[0].add(new Area(new RoundRectangle2D.Double(centerX - diameter / 8, centerY - leadLength - length - diameter / 2,
diameter / 4, diameter, diameter / 4, diameter / 4))); diameter / 4, diameter, diameter / 4, diameter / 4)));
break; break;
case _180:
body[0] = new Area(new RoundRectangle2D.Double(centerX + leadLength, centerY - diameter / 2,
length, diameter, edgeRadius, edgeRadius));
body[0].add(new Area(new RoundRectangle2D.Double(centerX + leadLength + length - diameter / 2, centerY - diameter / 8,
diameter, diameter / 4, diameter / 4, diameter / 4)));
break;
case _270:
body[0] = new Area(new RoundRectangle2D.Double(centerX - diameter / 2, centerY + leadLength,
diameter, length, edgeRadius, edgeRadius));
body[0].add(new Area(new RoundRectangle2D.Double(centerX - diameter / 8, centerY + leadLength + length - diameter / 2,
diameter / 4, diameter, diameter / 4, diameter / 4)));
break;
default: default:
throw new RuntimeException("Unexpected orientation: " + orientation); throw new RuntimeException("Unexpected orientation: " + orientation);
} }
@@ -357,7 +357,7 @@ public class SubminiTube extends AbstractTransparentComponent<String> {
int centerX = (controlPoints[controlPoints.length - (getTopLead() ? 2 : 1)].x + controlPoints[0].x) / 2; int centerX = (controlPoints[controlPoints.length - (getTopLead() ? 2 : 1)].x + controlPoints[0].x) / 2;
int centerY = (controlPoints[controlPoints.length - (getTopLead() ? 2 : 1)].y + controlPoints[0].y) / 2; int centerY = (controlPoints[controlPoints.length - (getTopLead() ? 2 : 1)].y + controlPoints[0].y) / 2;
double increment = getDiameter().convertToPixels() / getPinCount().getValue(); double increment = getDiameter().convertToPixels() / getPinCount().getValue();
if (orientation == Orientation._90 || orientation == Orientation._180) if (orientation == Orientation.DEFAULT || orientation == Orientation._270)
increment = -increment; increment = -increment;
double startX = centerX - increment * (getPinCount().getValue() - 1) / 2; double startX = centerX - increment * (getPinCount().getValue() - 1) / 2;
double startY = centerY - increment * (getPinCount().getValue() - 1) / 2; double startY = centerY - increment * (getPinCount().getValue() - 1) / 2;
@@ -368,34 +368,34 @@ public class SubminiTube extends AbstractTransparentComponent<String> {
case DEFAULT: case DEFAULT:
g2d.setStroke(ObjectCache.getInstance().fetchBasicStroke(leadThickness)); g2d.setStroke(ObjectCache.getInstance().fetchBasicStroke(leadThickness));
g2d.setColor(finalPinBorderColor); g2d.setColor(finalPinBorderColor);
g2d.drawLine(point.x, point.y, point.x + leadLength - leadThickness / 2, (int)(startY + increment * i)); g2d.drawLine(point.x, point.y, point.x - leadLength - leadThickness / 2, (int)(startY + increment * i));
g2d.setStroke(ObjectCache.getInstance().fetchBasicStroke(leadThickness - 2)); g2d.setStroke(ObjectCache.getInstance().fetchBasicStroke(leadThickness - 2));
g2d.setColor(finalPinColor); g2d.setColor(finalPinColor);
g2d.drawLine(point.x, point.y, point.x + leadLength - leadThickness / 2, (int)(startY + increment * i)); g2d.drawLine(point.x, point.y, point.x - leadLength - leadThickness / 2, (int)(startY + increment * i));
break; break;
case _90: case _90:
g2d.setStroke(ObjectCache.getInstance().fetchBasicStroke(leadThickness)); g2d.setStroke(ObjectCache.getInstance().fetchBasicStroke(leadThickness));
g2d.setColor(finalPinBorderColor); g2d.setColor(finalPinBorderColor);
g2d.drawLine(point.x, point.y, (int)(startX + increment * i), point.y + leadLength - leadThickness / 2); g2d.drawLine(point.x, point.y, (int)(startX + increment * i), point.y - leadLength);
g2d.setStroke(ObjectCache.getInstance().fetchBasicStroke(leadThickness - 2)); g2d.setStroke(ObjectCache.getInstance().fetchBasicStroke(leadThickness - 2));
g2d.setColor(finalPinColor); g2d.setColor(finalPinColor);
g2d.drawLine(point.x, point.y, (int)(startX + increment * i), point.y + leadLength - leadThickness / 2); g2d.drawLine(point.x, point.y, (int)(startX + increment * i), point.y - leadLength);
break; break;
case _180: case _180:
g2d.setStroke(ObjectCache.getInstance().fetchBasicStroke(leadThickness)); g2d.setStroke(ObjectCache.getInstance().fetchBasicStroke(leadThickness));
g2d.setColor(finalPinBorderColor); g2d.setColor(finalPinBorderColor);
g2d.drawLine(point.x, point.y, point.x - leadLength - leadThickness / 2, (int)(startY + increment * i)); g2d.drawLine(point.x, point.y, point.x + leadLength - leadThickness / 2, (int)(startY + increment * i));
g2d.setStroke(ObjectCache.getInstance().fetchBasicStroke(leadThickness - 2)); g2d.setStroke(ObjectCache.getInstance().fetchBasicStroke(leadThickness - 2));
g2d.setColor(finalPinColor); g2d.setColor(finalPinColor);
g2d.drawLine(point.x, point.y, point.x - leadLength - leadThickness / 2, (int)(startY + increment * i)); g2d.drawLine(point.x, point.y, point.x + leadLength - leadThickness / 2, (int)(startY + increment * i));
break; break;
case _270: case _270:
g2d.setStroke(ObjectCache.getInstance().fetchBasicStroke(leadThickness)); g2d.setStroke(ObjectCache.getInstance().fetchBasicStroke(leadThickness));
g2d.setColor(finalPinBorderColor); g2d.setColor(finalPinBorderColor);
g2d.drawLine(point.x, point.y, (int)(startX + increment * i), point.y - leadLength); g2d.drawLine(point.x, point.y, (int)(startX + increment * i), point.y + leadLength - leadThickness / 2);
g2d.setStroke(ObjectCache.getInstance().fetchBasicStroke(leadThickness - 2)); g2d.setStroke(ObjectCache.getInstance().fetchBasicStroke(leadThickness - 2));
g2d.setColor(finalPinColor); g2d.setColor(finalPinColor);
g2d.drawLine(point.x, point.y, (int)(startX + increment * i), point.y - leadLength); g2d.drawLine(point.x, point.y, (int)(startX + increment * i), point.y + leadLength - leadThickness / 2);
break; break;
} }
} }