Add IC symbol

This commit is contained in:
bancika
2012-03-05 03:11:45 +00:00
parent e618a1e1ad
commit 61937d6d42
@@ -8,6 +8,7 @@ import java.awt.Point;
import java.awt.Polygon; import java.awt.Polygon;
import java.awt.Shape; import java.awt.Shape;
import java.awt.geom.Area; import java.awt.geom.Area;
import java.awt.geom.GeneralPath;
import java.awt.geom.Rectangle2D; import java.awt.geom.Rectangle2D;
import org.diylc.appframework.miscutils.ConfigurationManager; import org.diylc.appframework.miscutils.ConfigurationManager;
@@ -45,7 +46,7 @@ public class ICSymbol extends AbstractTransparentComponent<String> {
protected Color bodyColor = BODY_COLOR; protected Color bodyColor = BODY_COLOR;
protected Color borderColor = BORDER_COLOR; protected Color borderColor = BORDER_COLOR;
protected Display display = Display.NAME; protected Display display = Display.NAME;
transient private Shape body; transient private Shape[] body;
public ICSymbol() { public ICSymbol() {
super(); super();
@@ -64,8 +65,11 @@ public class ICSymbol extends AbstractTransparentComponent<String> {
g2d.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_OVER, 1f * alpha g2d.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_OVER, 1f * alpha
/ MAX_ALPHA)); / MAX_ALPHA));
} }
Shape[] body = getBody();
g2d.setColor(outlineMode ? Constants.TRANSPARENT_COLOR : bodyColor); g2d.setColor(outlineMode ? Constants.TRANSPARENT_COLOR : bodyColor);
g2d.fill(getBody()); g2d.fill(body[0]);
g2d.setComposite(oldComposite); g2d.setComposite(oldComposite);
Color finalBorderColor; Color finalBorderColor;
if (outlineMode) { if (outlineMode) {
@@ -78,21 +82,10 @@ public class ICSymbol extends AbstractTransparentComponent<String> {
g2d.setColor(finalBorderColor); g2d.setColor(finalBorderColor);
// Draw contacts // Draw contacts
g2d.setStroke(ObjectCache.getInstance().fetchBasicStroke(1)); g2d.setStroke(ObjectCache.getInstance().fetchBasicStroke(1));
g2d.drawLine(controlPoints[0].x, controlPoints[0].y, controlPoints[0].x + pinSpacing / 2, g2d.draw(body[1]);
controlPoints[0].y);
g2d.drawLine(controlPoints[1].x, controlPoints[1].y, controlPoints[1].x + pinSpacing / 2,
controlPoints[1].y);
g2d.drawLine(controlPoints[2].x, controlPoints[2].y, controlPoints[2].x - pinSpacing / 2,
controlPoints[2].y);
if (icPointCount == ICPointCount._5) {
g2d.drawLine(controlPoints[3].x, controlPoints[3].y, controlPoints[3].x,
controlPoints[3].y + pinSpacing * 3 / 4);
g2d.drawLine(controlPoints[4].x, controlPoints[4].y, controlPoints[4].x,
controlPoints[4].y - pinSpacing * 3 / 4);
}
// Draw triangle // Draw triangle
g2d.setStroke(ObjectCache.getInstance().fetchBasicStroke(2)); g2d.setStroke(ObjectCache.getInstance().fetchBasicStroke(2));
g2d.draw(getBody()); g2d.draw(body[0]);
// Draw label // Draw label
g2d.setFont(LABEL_FONT); g2d.setFont(LABEL_FONT);
Color finalLabelColor; Color finalLabelColor;
@@ -169,14 +162,31 @@ public class ICSymbol extends AbstractTransparentComponent<String> {
controlPoints[4].y = y + pinSpacing * 3; controlPoints[4].y = y + pinSpacing * 3;
} }
public Shape getBody() { public Shape[] getBody() {
if (body == null) { if (body == null) {
body = new Shape[2];
int pinSpacing = (int) PIN_SPACING.convertToPixels(); int pinSpacing = (int) PIN_SPACING.convertToPixels();
int x = controlPoints[0].x; int x = controlPoints[0].x;
int y = controlPoints[0].y; int y = controlPoints[0].y;
body = new Polygon(new int[] { x + pinSpacing / 2, x + pinSpacing * 11 / 2, Shape triangle = new Polygon(new int[] { x + pinSpacing / 2, x + pinSpacing * 11 / 2,
x + pinSpacing / 2 }, new int[] { y - pinSpacing * 3 / 2, y + pinSpacing, x + pinSpacing / 2 }, new int[] { y - pinSpacing * 3 / 2, y + pinSpacing,
y + pinSpacing * 7 / 2 }, 3); y + pinSpacing * 7 / 2 }, 3);
body[0] = triangle;
GeneralPath polyline = new GeneralPath();
polyline.moveTo(controlPoints[0].x, controlPoints[0].y);
polyline.lineTo(controlPoints[0].x + pinSpacing / 2, controlPoints[0].y);
polyline.moveTo(controlPoints[1].x, controlPoints[1].y);
polyline.lineTo(controlPoints[1].x + pinSpacing / 2, controlPoints[1].y);
polyline.moveTo(controlPoints[2].x, controlPoints[2].y);
polyline.lineTo(controlPoints[2].x - pinSpacing / 2, controlPoints[2].y);
if (icPointCount == ICPointCount._5) {
polyline.moveTo(controlPoints[3].x, controlPoints[3].y);
polyline.lineTo(controlPoints[3].x, controlPoints[3].y + pinSpacing * 3 / 4);
polyline.moveTo(controlPoints[4].x, controlPoints[4].y);
polyline.lineTo(controlPoints[4].x, controlPoints[4].y - pinSpacing * 3 / 4);
}
body[1] = polyline;
} }
return body; return body;
} }
@@ -216,6 +226,7 @@ public class ICSymbol extends AbstractTransparentComponent<String> {
public void setIcPointCount(ICPointCount icPointCount) { public void setIcPointCount(ICPointCount icPointCount) {
this.icPointCount = icPointCount; this.icPointCount = icPointCount;
updateControlPoints(); updateControlPoints();
body = null;
} }
@EditableProperty(name = "Body") @EditableProperty(name = "Body")