From 06b204fc384615581a4c48c2aad1f521edade381 Mon Sep 17 00:00:00 2001 From: bancika Date: Wed, 10 Oct 2012 15:52:18 +0000 Subject: [PATCH] SIP IC --- .../diylc-library/lib/diylc-core.jar | Bin 209242 -> 209243 bytes .../components/semiconductors/SIL_IC.java | 413 ++++++++++++++++++ 2 files changed, 413 insertions(+) create mode 100644 diy-layout-creator --username bancika@gmail.com/diylc-library/src/org/diylc/components/semiconductors/SIL_IC.java diff --git a/ diy-layout-creator --username bancika@gmail.com/diylc-library/lib/diylc-core.jar b/ diy-layout-creator --username bancika@gmail.com/diylc-library/lib/diylc-core.jar index d67106dda14b9315ce22efbe29880bb841f849d2..8c3f0f12c6c583a06d58fe6772c86acffb984381 100644 GIT binary patch delta 10886 zcmZu%2|N|u`!_SzoAuh)Yt0@?C|i-WNTHBYp~Wtg3O9SbZFI|&M2d)_k`QGnh3twb zb&D2~s5g81pEKjv?|0w#@AEmH=X{^OBAL+LOIA2O32N;N(3GyAW!r&g-W1gIEy@oG<8uFfl^zH z1|`E$d z-`!9)wiE0Ogk2mj{EZ5iG-~c7NZL!hNm7e4H@1p{jg6C+;Uyw|&K?sjY0|alfQiKn z787Ngt+++_j2TA}GRW-8B50@D3lM#!byI|tUH_Da4<@cS{nflr5KKB_+|8Bl6T8QD zBh{&0Y{@di#u}fX3}d18O|thdN}yDb-HaLD{TIUSLBDUyB(35rE^yWg5v4U%(o9hH0P29&WvS^ z`q#{juNImUFaBL7KF|C6(bclZzpLpcGm8v&m#=u%^6GWQ4@LP-?&Ia5Q~9A(hw$;| zEzXHHavTpRGe^zDeq3Q*OOQ4<%%!A-d3{hx@C)*by2a)n?UszZF;Bi&VV05nv&!J@ zad9U4=5|V+_`a}I0r7YBa#aaC@b5XRYwNcKJeD_Hd%kWXO_I6wM8C@k{M`pLPkPek zsj>b@m16DPahl~7P05sSxd=foqJso_%4mmX+o1ZCycWH?-_q`bKOB{%tbD6ciIje zYo`HWsWGPfmlZkNpGW_^xVeF*Gg@;g>W-cqpQglSCmXe8ch|U_4D6&@yPOUl2~eV! zi)H7yo|d*-p7}cGiS=^)!?vT$FMa~0fq`F#hI?0CtlXbpmhUiJgba3}UbL9P;YvJ+$?}VJ}+U+!9m0mmqwtiSSXA zGDs^e9lV(9N|Wmt@G!9(Jmc{!Eh;kD;%#;!qiZ7Ko{%{8_HN@#U$s51_>M2;uo0

o!g@JMC5fYGl*kSEwV7KOnnMr7dYN$Wnkep{+o(_-5}e+y{1Gz zfKQg+;<9eNc9p8&ChvD05`n|-2l`$YbV*td=-Yg5>@&O+O)S8m@+GO=ITOV{uY_gS-EnQykH=h@Yt0)BSto7-xR zWUDl)O0P6lQ9$qR#fJB2_4-zPiA$>g^yBZ&=AthSZ^iD`St}m1KI+BMVY^7DXV2!A z{Om@(FA_@+MJT1`FqbE8*Pdy-Y&?*@!_Ttwg$LWvnCzh|n{&6PZi_njXu37@(23&# zeg~KK8PQ|;u0G!3_DW>=6%qFANKe&$$|{X_^|Nx*V+~4euGsNQe;*anP93ZXd-7t( zNoRp^PeFqV6eXLarlcsLm$*jP!{^c`Cr{?@xV|q?EU0g7j-gBH&a+czcuW^}*%dn4 zpU*q{pm}7a`1lfE2AJOYR5|V=vTOwbcM&VYtKA(RWd1p#&P9;aQ$BvOYi5dyT`MkzBEGS33RKuo#jRH#>B8pQ%O7 zw(_-1uJQeG1G15rY83pHk135dY;gkjvVG%V@hK@2<_8H zMo89?0bP}`C4Sp!sY!VU@6tvU&0E#Fq?8)(|Mbba;81EiJ9^7t=dQwO$-AQ+=ZBto zD4vuL(HRvU<4B3?Rlbue`B=)|h+4uCV1qhpF1wz!Xnx*5g_B7|J*2v6$GbCvDs&M+DR&otO&u z9{G<�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 z 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 diff --git a/ diy-layout-creator --username bancika@gmail.com/diylc-library/src/org/diylc/components/semiconductors/SIL_IC.java b/ diy-layout-creator --username bancika@gmail.com/diylc-library/src/org/diylc/components/semiconductors/SIL_IC.java new file mode 100644 index 00000000..cf4df5ce --- /dev/null +++ b/ diy-layout-creator --username bancika@gmail.com/diylc-library/src/org/diylc/components/semiconductors/SIL_IC.java @@ -0,0 +1,413 @@ +package org.diylc.components.semiconductors; + +import java.awt.AlphaComposite; +import java.awt.Color; +import java.awt.Composite; +import java.awt.FontMetrics; +import java.awt.Graphics2D; +import java.awt.Point; +import java.awt.Rectangle; +import java.awt.geom.Area; +import java.awt.geom.Ellipse2D; +import java.awt.geom.Rectangle2D; +import java.awt.geom.RoundRectangle2D; + +import org.diylc.appframework.miscutils.ConfigurationManager; +import org.diylc.common.Display; +import org.diylc.common.IPlugInPort; +import org.diylc.common.ObjectCache; +import org.diylc.common.Orientation; +import org.diylc.components.AbstractTransparentComponent; +import org.diylc.core.ComponentState; +import org.diylc.core.IDIYComponent; +import org.diylc.core.IDrawingObserver; +import org.diylc.core.Project; +import org.diylc.core.Theme; +import org.diylc.core.VisibilityPolicy; +import org.diylc.core.annotations.ComponentDescriptor; +import org.diylc.core.annotations.EditableProperty; +import org.diylc.core.measures.Size; +import org.diylc.core.measures.SizeUnit; +import org.diylc.utils.Constants; + +@ComponentDescriptor(name = "SIP IC", author = "Branislav Stojkovic", category = "Semiconductors", instanceNamePrefix = "IC", description = "Single-in-line package IC", stretchable = false, zOrder = IDIYComponent.COMPONENT) +public class SIL_IC extends AbstractTransparentComponent { + + private static final long serialVersionUID = 1L; + + public static Color BODY_COLOR = Color.gray; + 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.gray.darker(); + public static Color LABEL_COLOR = Color.white; + public static int EDGE_RADIUS = 6; + public static Size PIN_SIZE = new Size(0.8d, SizeUnit.mm); + public static Size INDENT_SIZE = new Size(0.07d, SizeUnit.in); + public static Size THICKNESS = new Size(0.13d, SizeUnit.in); + + private String value = ""; + private Orientation orientation = Orientation.DEFAULT; + private PinCount pinCount = PinCount._8; + private Size pinSpacing = new Size(0.1d, SizeUnit.in); + private Point[] controlPoints = new Point[] { new Point(0, 0) }; + protected Display display = Display.NAME; + private Color bodyColor = BODY_COLOR; + private Color borderColor = BORDER_COLOR; + private Color labelColor = LABEL_COLOR; + private Color indentColor = INDENT_COLOR; + // new Point(0, pinSpacing.convertToPixels()), + // new Point(0, 2 * pinSpacing.convertToPixels()), + // new Point(0, 3 * pinSpacing.convertToPixels()), + // new Point(3 * pinSpacing.convertToPixels(), 0), + // new Point(3 * pinSpacing.convertToPixels(), + // pinSpacing.convertToPixels()), + // new Point(3 * pinSpacing.convertToPixels(), 2 * + // pinSpacing.convertToPixels()), + // new Point(3 * pinSpacing.convertToPixels(), 3 * + // pinSpacing.convertToPixels()) }; + transient private Area[] body; + + public SIL_IC() { + super(); + updateControlPoints(); + } + + @EditableProperty + public String getValue() { + return value; + } + + public void setValue(String value) { + this.value = value; + } + + @EditableProperty + public Orientation getOrientation() { + return orientation; + } + + public void setOrientation(Orientation orientation) { + this.orientation = orientation; + updateControlPoints(); + // Reset body shape. + body = null; + } + + @EditableProperty(name = "Pins") + public PinCount getPinCount() { + return pinCount; + } + + public void setPinCount(PinCount pinCount) { + this.pinCount = pinCount; + updateControlPoints(); + // Reset body shape; + body = null; + } + + @EditableProperty(name = "Pin spacing") + public Size getPinSpacing() { + return pinSpacing; + } + + public void setPinSpacing(Size pinSpacing) { + this.pinSpacing = pinSpacing; + } + + @EditableProperty + public Display getDisplay() { + if (display == null) { + display = Display.VALUE; + } + return display; + } + + public void setDisplay(Display display) { + this.display = display; + } + + @Override + public int getControlPointCount() { + return controlPoints.length; + } + + @Override + public Point getControlPoint(int index) { + return controlPoints[index]; + } + + @Override + public boolean isControlPointSticky(int index) { + return true; + } + + @Override + public VisibilityPolicy getControlPointVisibilityPolicy(int index) { + return VisibilityPolicy.NEVER; + } + + @Override + public void setControlPoint(Point point, int index) { + controlPoints[index].setLocation(point); + body = null; + } + + private void updateControlPoints() { + Point firstPoint = controlPoints[0]; + controlPoints = new Point[pinCount.getValue()]; + controlPoints[0] = firstPoint; + int pinSpacing = (int) this.pinSpacing.convertToPixels(); + // Update control points. + int dx1; + int dy1; + for (int i = 0; i < pinCount.getValue(); i++) { + switch (orientation) { + case DEFAULT: + dx1 = 0; + dy1 = i * pinSpacing; + break; + case _90: + dx1 = -i * pinSpacing; + dy1 = 0; + break; + case _180: + dx1 = 0; + dy1 = -i * pinSpacing; + break; + case _270: + dx1 = i * pinSpacing; + dy1 = 0; + break; + default: + throw new RuntimeException("Unexpected orientation: " + + orientation); + } + controlPoints[i] = new Point(firstPoint.x + dx1, firstPoint.y + dy1); + } + } + + public Area[] getBody() { + if (body == null) { + body = new Area[2]; + int x = controlPoints[0].x; + int y = controlPoints[0].y; + int thickness = getClosestOdd(THICKNESS.convertToPixels()); + int width; + int height; + int pinSpacing = (int) this.pinSpacing.convertToPixels(); + Area indentation = null; + int indentationSize = getClosestOdd(INDENT_SIZE.convertToPixels()); + switch (orientation) { + case DEFAULT: + width = thickness; + height = pinCount.getValue() * pinSpacing; + x -= thickness / 2; + y -= pinSpacing / 2; + indentation = new Area(new Ellipse2D.Double(x + width / 2 + - indentationSize / 2, y - indentationSize / 2, + indentationSize, indentationSize)); + break; + case _90: + width = pinCount.getValue() * pinSpacing; + height = thickness; + x -= (pinSpacing / 2) + width - pinSpacing; + y -= thickness / 2; + indentation = new Area(new Ellipse2D.Double(x + width + - indentationSize / 2, y + height / 2 - indentationSize + / 2, indentationSize, indentationSize)); + break; + case _180: + width = thickness; + height = pinCount.getValue() * pinSpacing; + x -= thickness / 2; + y -= (pinSpacing / 2) + height - pinSpacing; + indentation = new Area(new Ellipse2D.Double(x + width / 2 + - indentationSize / 2, + y + height - indentationSize / 2, indentationSize, + indentationSize)); + break; + case _270: + width = pinCount.getValue() * pinSpacing; + height = thickness; + x -= pinSpacing / 2; + y -= thickness / 2; + 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[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; + } + + @Override + public void draw(Graphics2D g2d, ComponentState componentState, + boolean outlineMode, Project project, + IDrawingObserver drawingObserver) { + if (checkPointsClipped(g2d.getClip())) { + return; + } + Area mainArea = getBody()[0]; + Composite oldComposite = g2d.getComposite(); + if (alpha < MAX_ALPHA) { + g2d.setComposite(AlphaComposite.getInstance( + AlphaComposite.SRC_OVER, 1f * alpha / MAX_ALPHA)); + } + g2d.setColor(outlineMode ? Constants.TRANSPARENT_COLOR : getBodyColor()); + g2d.fill(mainArea); + g2d.setComposite(oldComposite); + + if (!outlineMode) { + int pinSize = (int) PIN_SIZE.convertToPixels() / 2 * 2; + for (Point point : controlPoints) { + g2d.setColor(PIN_COLOR); + g2d.fillOval(point.x - pinSize / 2, point.y - pinSize / 2, + pinSize, pinSize); + g2d.setColor(PIN_BORDER_COLOR); + g2d.drawOval(point.x - pinSize / 2, point.y - pinSize / 2, + pinSize, pinSize); + } + } + + Color finalBorderColor; + if (outlineMode) { + Theme theme = (Theme) ConfigurationManager.getInstance() + .readObject(IPlugInPort.THEME_KEY, Constants.DEFAULT_THEME); + finalBorderColor = componentState == ComponentState.SELECTED + || componentState == ComponentState.DRAGGING ? SELECTION_COLOR + : theme.getOutlineColor(); + } else { + finalBorderColor = componentState == ComponentState.SELECTED + || componentState == ComponentState.DRAGGING ? SELECTION_COLOR + : getBorderColor(); + } + g2d.setColor(finalBorderColor); + g2d.setStroke(ObjectCache.getInstance().fetchBasicStroke(1)); + if (outlineMode) { + Area area = new Area(mainArea); + area.subtract(getBody()[1]); + g2d.draw(area); + } else { + g2d.draw(mainArea); + if (getBody()[1] != null) { + g2d.setColor(getIndentColor()); + g2d.fill(getBody()[1]); + } + } + // Draw label. + g2d.setFont(LABEL_FONT); + Color finalLabelColor; + if (outlineMode) { + Theme theme = (Theme) ConfigurationManager.getInstance() + .readObject(IPlugInPort.THEME_KEY, Constants.DEFAULT_THEME); + finalLabelColor = componentState == ComponentState.SELECTED + || componentState == ComponentState.DRAGGING ? LABEL_COLOR_SELECTED + : theme.getOutlineColor(); + } else { + finalLabelColor = componentState == ComponentState.SELECTED + || componentState == ComponentState.DRAGGING ? LABEL_COLOR_SELECTED + : getLabelColor(); + } + g2d.setColor(finalLabelColor); + FontMetrics fontMetrics = g2d.getFontMetrics(g2d.getFont()); + String label = display == Display.NAME ? getName() : getValue(); + Rectangle2D rect = fontMetrics.getStringBounds(label, g2d); + int textHeight = (int) (rect.getHeight()); + int textWidth = (int) (rect.getWidth()); + // Center text horizontally and vertically + Rectangle bounds = mainArea.getBounds(); + int x = bounds.x + (bounds.width - textWidth) / 2; + int y = bounds.y + (bounds.height - textHeight) / 2 + + fontMetrics.getAscent(); + g2d.drawString(label, x, y); + } + + @Override + public void drawIcon(Graphics2D g2d, int width, int height) { + int radius = 6 * width / 32; + int thickness = getClosestOdd(width / 3); + g2d.rotate(Math.PI / 4, width / 2, height / 2); + g2d.setColor(BODY_COLOR); + g2d.fillRoundRect((width - thickness) / 2, 0, thickness, height, radius, radius); + g2d.setColor(BORDER_COLOR); + g2d.drawRoundRect((width - thickness) / 2, 0, thickness, height, radius, radius); + int pinSize = 2 * width / 32; + g2d.setColor(PIN_COLOR); + for (int i = 0; i < 4; i++) { + g2d.fillOval(width / 2 - pinSize / 2, (height / 5) * (i + 1), + pinSize, pinSize); + } + } + + @EditableProperty(name = "Body") + public Color getBodyColor() { + if (bodyColor == null) { + bodyColor = BODY_COLOR; + } + return bodyColor; + } + + public void setBodyColor(Color bodyColor) { + this.bodyColor = bodyColor; + } + + @EditableProperty(name = "Border") + public Color getBorderColor() { + if (borderColor == null) { + borderColor = BORDER_COLOR; + } + return borderColor; + } + + public void setBorderColor(Color borderColor) { + this.borderColor = borderColor; + } + + @EditableProperty(name = "Label") + public Color getLabelColor() { + if (labelColor == null) { + labelColor = LABEL_COLOR; + } + return labelColor; + } + + public void setLabelColor(Color labelColor) { + this.labelColor = labelColor; + } + + @EditableProperty(name = "Indent") + public Color getIndentColor() { + if (indentColor == null) { + indentColor = INDENT_COLOR; + } + return indentColor; + } + + public void setIndentColor(Color indentColor) { + this.indentColor = indentColor; + } + + public static enum PinCount { + + _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17, _18, _19, _20; + + @Override + public String toString() { + return name().replace("_", ""); + } + + public int getValue() { + return Integer.parseInt(toString()); + } + } +}