From df33d7fd6ee2c8c8f56fc15f31b474dce61f2b16 Mon Sep 17 00:00:00 2001 From: bancika Date: Mon, 24 Jan 2011 21:28:53 +0000 Subject: [PATCH] improved IC --- .../DIYLC/library/main.jar | Bin 54991 -> 55209 bytes .../components/semiconductors/DIL_IC.java | 44 +++++++++++++----- 2 files changed, 33 insertions(+), 11 deletions(-) diff --git a/ diy-layout-creator --username bancika@gmail.com/DIYLC/library/main.jar b/ diy-layout-creator --username bancika@gmail.com/DIYLC/library/main.jar index 2005e958ca2570bc709de6997b488c76634b9a97..75535d0006bde5463c4a489c60b639275bbd0624 100644 GIT binary patch delta 4606 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 diff --git a/ diy-layout-creator --username bancika@gmail.com/Library/src/org/diylc/components/semiconductors/DIL_IC.java b/ diy-layout-creator --username bancika@gmail.com/Library/src/org/diylc/components/semiconductors/DIL_IC.java index 3ae26731..b0dc7591 100644 --- a/ diy-layout-creator --username bancika@gmail.com/Library/src/org/diylc/components/semiconductors/DIL_IC.java +++ b/ diy-layout-creator --username bancika@gmail.com/Library/src/org/diylc/components/semiconductors/DIL_IC.java @@ -7,7 +7,8 @@ import java.awt.FontMetrics; import java.awt.Graphics2D; import java.awt.Point; import java.awt.Rectangle; -import java.awt.Shape; +import java.awt.geom.Area; +import java.awt.geom.Ellipse2D; import java.awt.geom.Rectangle2D; import java.awt.geom.RoundRectangle2D; @@ -33,11 +34,11 @@ public class DIL_IC extends AbstractTransparentComponent { public static Color BORDER_COLOR = Color.gray.darker(); public static Color PIN_COLOR = Color.decode("#00B2EE"); public static Color PIN_BORDER_COLOR = PIN_COLOR.darker(); - public static Color INDENT_COLOR = Color.lightGray; + public static Color INDENT_COLOR = Color.gray.darker(); public static Color LABEL_COLOR = Color.white; public static int EDGE_RADIUS = 6; public static Size PIN_SIZE = new Size(0.04d, SizeUnit.in); - public static Size INDENT_SIZE = new Size(0.15d, SizeUnit.in); + public static Size INDENT_SIZE = new Size(0.07d, SizeUnit.in); private String value = ""; private Orientation orientation = Orientation.DEFAULT; @@ -55,7 +56,7 @@ public class DIL_IC extends AbstractTransparentComponent { // pinSpacing.convertToPixels()), // new Point(3 * pinSpacing.convertToPixels(), 3 * // pinSpacing.convertToPixels()) }; - private Shape body; + private Area body[]; public DIL_IC() { super(); @@ -174,7 +175,7 @@ public class DIL_IC extends AbstractTransparentComponent { dx1 = i * pinSpacing.convertToPixels(); dy1 = 0; dx2 = i * pinSpacing.convertToPixels(); - dy2 = rowSpacing.convertToPixels(); + dy2 = -rowSpacing.convertToPixels(); break; default: throw new RuntimeException("Unexpected orientation: " + orientation); @@ -185,42 +186,58 @@ public class DIL_IC extends AbstractTransparentComponent { } } - public Shape getBody() { + public Area[] getBody() { if (body == null) { + body = new Area[2]; int x = controlPoints[0].x; int y = controlPoints[0].y; int width; int height; int pinSize = PIN_SIZE.convertToPixels(); + Area indentation = null; + int indentationSize = getClosestOdd(INDENT_SIZE.convertToPixels()); switch (orientation) { case DEFAULT: width = rowSpacing.convertToPixels() - pinSize; height = (pinCount.getValue() / 2) * pinSpacing.convertToPixels(); x += pinSize / 2; y -= pinSpacing.convertToPixels() / 2; + indentation = new Area(new Ellipse2D.Double(x + width / 2 - indentationSize / 2, y + - indentationSize / 2, indentationSize, indentationSize)); break; case _90: width = (pinCount.getValue() / 2) * pinSpacing.convertToPixels(); height = rowSpacing.convertToPixels() - pinSize; x -= (pinSpacing.convertToPixels() / 2) + width - pinSpacing.convertToPixels(); y += pinSize / 2; + indentation = new Area(new Ellipse2D.Double(x + width - indentationSize / 2, y + + height / 2 - indentationSize / 2, indentationSize, indentationSize)); break; case _180: width = rowSpacing.convertToPixels() - pinSize; height = (pinCount.getValue() / 2) * pinSpacing.convertToPixels(); x -= rowSpacing.convertToPixels() - pinSize / 2; y -= (pinSpacing.convertToPixels() / 2) + height - pinSpacing.convertToPixels(); + indentation = new Area(new Ellipse2D.Double(x + width / 2 - indentationSize / 2, y + + height - indentationSize / 2, indentationSize, indentationSize)); break; case _270: width = (pinCount.getValue() / 2) * pinSpacing.convertToPixels(); height = rowSpacing.convertToPixels() - pinSize; x -= pinSpacing.convertToPixels() / 2; - y += pinSize / 2; + y += pinSize / 2 - rowSpacing.convertToPixels(); + indentation = new Area(new Ellipse2D.Double(x - indentationSize / 2, y + height / 2 + - indentationSize / 2, indentationSize, indentationSize)); break; default: throw new RuntimeException("Unexpected orientation: " + orientation); } - body = new RoundRectangle2D.Double(x, y, width, height, EDGE_RADIUS, EDGE_RADIUS); + body[0] = new Area(new RoundRectangle2D.Double(x, y, width, height, EDGE_RADIUS, + EDGE_RADIUS)); + body[1] = indentation; + if (indentation != null) { + indentation.intersect(body[0]); + } } return body; } @@ -229,6 +246,7 @@ public class DIL_IC extends AbstractTransparentComponent { public void draw(Graphics2D g2d, ComponentState componentState, Project project, IDrawingObserver drawingObserver) { int pinSize = PIN_SIZE.convertToPixels() / 2 * 2; + Area mainArea = getBody()[0]; for (Point point : controlPoints) { g2d.setColor(PIN_COLOR); g2d.fillRect(point.x - pinSize / 2, point.y - pinSize / 2, pinSize, pinSize); @@ -241,12 +259,16 @@ public class DIL_IC extends AbstractTransparentComponent { / MAX_ALPHA)); } g2d.setColor(BODY_COLOR); - g2d.fill(getBody()); + g2d.fill(mainArea); g2d.setComposite(oldComposite); g2d.setColor(componentState == ComponentState.SELECTED || componentState == ComponentState.DRAGGING ? SELECTION_COLOR : BORDER_COLOR); g2d.setStroke(ObjectCache.getInstance().fetchBasicStroke(1)); - g2d.draw(getBody()); + g2d.draw(mainArea); + if (getBody()[1] != null) { + g2d.setColor(INDENT_COLOR); + g2d.fill(getBody()[1]); + } // Draw label. g2d.setFont(LABEL_FONT); g2d.setColor(LABEL_COLOR); @@ -255,7 +277,7 @@ public class DIL_IC extends AbstractTransparentComponent { int textHeight = (int) (rect.getHeight()); int textWidth = (int) (rect.getWidth()); // Center text horizontally and vertically - Rectangle bounds = getBody().getBounds(); + Rectangle bounds = mainArea.getBounds(); int x = bounds.x + (bounds.width - textWidth) / 2; int y = bounds.y + (bounds.height - textHeight) / 2 + fontMetrics.getAscent(); g2d.drawString(getName(), x, y);