From c4b66f5995226ec72060f87f2551e2b16fe69b1d Mon Sep 17 00:00:00 2001 From: Branislav Stojkovic Date: Tue, 15 Jan 2019 00:55:07 +0100 Subject: [PATCH] added bridge rectifier --- diylc/diylc-library/lib/diylc-core.jar | Bin 242795 -> 242795 bytes .../semiconductors/BridgeRectifier.java | 616 +++++++++++ .../semiconductors/TransistorTO1.java | 2 +- diylc/diylc-swing/lib/diylc-core.jar | Bin 242795 -> 242795 bytes diylc/diylc-swing/library/main.jar | Bin 529847 -> 540013 bytes diylc/diylc-swing/update.xml | 4 + diylc/diylc-swing/variants.xml | 994 +++++++++++------- 7 files changed, 1230 insertions(+), 386 deletions(-) create mode 100644 diylc/diylc-library/src/org/diylc/components/semiconductors/BridgeRectifier.java diff --git a/diylc/diylc-library/lib/diylc-core.jar b/diylc/diylc-library/lib/diylc-core.jar index 0f294c9c1d1088fb14fad2594b71034d2e770714..1c978f448fe97e90a7b93195396c429a0099b4e1 100644 GIT binary patch delta 5048 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 SURSNM(!eiR$-UcGBJh8BsFCpi delta 5048 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 diff --git a/diylc/diylc-library/src/org/diylc/components/semiconductors/BridgeRectifier.java b/diylc/diylc-library/src/org/diylc/components/semiconductors/BridgeRectifier.java new file mode 100644 index 00000000..17bc21ca --- /dev/null +++ b/diylc/diylc-library/src/org/diylc/components/semiconductors/BridgeRectifier.java @@ -0,0 +1,616 @@ +/* + + DIY Layout Creator (DIYLC). + Copyright (c) 2009-2018 held jointly by the individual authors. + + This file is part of DIYLC. + + DIYLC is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + DIYLC is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with DIYLC. If not, see . + +*/ +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.AffineTransform; +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.HorizontalAlignment; +import org.diylc.common.IPlugInPort; +import org.diylc.common.ObjectCache; +import org.diylc.common.Orientation; +import org.diylc.common.VerticalAlignment; +import org.diylc.components.AbstractTransparentComponent; +import org.diylc.components.AbstractLeadedComponent.LabelOriantation; +import org.diylc.components.transform.DIL_ICTransformer; +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.annotations.KeywordPolicy; +import org.diylc.core.measures.Current; +import org.diylc.core.measures.Size; +import org.diylc.core.measures.SizeUnit; +import org.diylc.core.measures.Voltage; +import org.diylc.utils.Constants; + +@ComponentDescriptor(name = "Bridge Rectifier", author = "Branislav Stojkovic", category = "Semiconductors", + instanceNamePrefix = "BR", description = "Few variations of bridge rectifier chips", stretchable = false, + zOrder = IDIYComponent.COMPONENT, keywordPolicy = KeywordPolicy.SHOW_VALUE, transformer = DIL_ICTransformer.class) +public class BridgeRectifier extends AbstractTransparentComponent { + + private static final long serialVersionUID = 1L; + + private static Size MINI_LENGTH = new Size(6.35d, SizeUnit.mm); + private static Size MINI_WIDTH = new Size(8.3d, SizeUnit.mm); + private static Size MINI_HORIZONTAL_SPACING = new Size(0.3d, SizeUnit.in); + private static Size MINI_VERTICAL_SPACING = new Size(0.2d, SizeUnit.in); + + private static int[] MINI1_LABEL_SPACING_X = new int[] { 1, -1, -1, 1 }; + private static int[] MINI2_LABEL_SPACING_X = new int[] { 1, -1, 1, -1 }; + + private static Size MINI_ROUND_DIAMETER = new Size(9.1d, SizeUnit.mm); + private static Size MINI_ROUND_SPACING = new Size(0.2d, SizeUnit.in); + + private static int[] MINI_ROUND_LABEL_SPACING_Y = new int[] { 1, 1, -1, -1 }; + + private static Size INLINE_LENGTH = new Size(23.2d, SizeUnit.mm); + private static Size INLINE_WIDTH = new Size(2.7d, SizeUnit.mm); + private static Size INLINE_SPACING = new Size(0.2d, SizeUnit.in); + private static int[] INLINE_LABEL_SPACING_Y = new int[] { -1, -1, 1, 1 }; + + 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 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.07d, SizeUnit.in); + + private String value = ""; + private Orientation orientation = Orientation.DEFAULT; + private Point[] controlPoints = new Point[] { new Point(0, 0), new Point(0, 0), new Point(0, 0), new Point(0, 0) }; + private String[] pointLabels = new String[] { "+", "~", "~", "-" }; + protected Display display = Display.BOTH; + private Color bodyColor = BODY_COLOR; + private Color borderColor = BORDER_COLOR; + private Color labelColor = LABEL_COLOR; + private RectifierType rectifierType = RectifierType.MiniDIP1; + private Voltage voltage; + private Current current; + transient private Area[] body; + private LabelOriantation labelOriantation = LabelOriantation.Directional; + + public BridgeRectifier() { + super(); + updateControlPoints(); + alpha = 100; + } + + @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 + 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; + } + + @SuppressWarnings("incomplete-switch") + private void updateControlPoints() { + Point firstPoint = controlPoints[0]; + + int hSpacing; + int vSpacing; + + switch (rectifierType) { + case MiniDIP1: + hSpacing = (int) MINI_HORIZONTAL_SPACING.convertToPixels(); + vSpacing = (int) MINI_VERTICAL_SPACING.convertToPixels(); + controlPoints[1].setLocation(firstPoint.x + hSpacing, firstPoint.y); + controlPoints[2].setLocation(firstPoint.x + hSpacing, firstPoint.y + vSpacing); + controlPoints[3].setLocation(firstPoint.x, firstPoint.y + vSpacing); + break; + case MiniDIP2: + hSpacing = (int) MINI_HORIZONTAL_SPACING.convertToPixels(); + vSpacing = (int) MINI_VERTICAL_SPACING.convertToPixels(); + controlPoints[1].setLocation(firstPoint.x + hSpacing, firstPoint.y); + controlPoints[2].setLocation(firstPoint.x, firstPoint.y + vSpacing); + controlPoints[3].setLocation(firstPoint.x + hSpacing, firstPoint.y + vSpacing); + break; + case MiniRound1: + hSpacing = vSpacing = (int) MINI_ROUND_SPACING.convertToPixels(); + controlPoints[1].setLocation(firstPoint.x + hSpacing, firstPoint.y); + controlPoints[2].setLocation(firstPoint.x + hSpacing, firstPoint.y + vSpacing); + controlPoints[3].setLocation(firstPoint.x, firstPoint.y + vSpacing); + break; + case MiniRound2: + hSpacing = vSpacing = (int) MINI_ROUND_SPACING.convertToPixels(); + controlPoints[1].setLocation(firstPoint.x + hSpacing, firstPoint.y); + controlPoints[2].setLocation(firstPoint.x, firstPoint.y + vSpacing); + controlPoints[3].setLocation(firstPoint.x + hSpacing, firstPoint.y + vSpacing); + break; + case InLine: + vSpacing = (int) INLINE_SPACING.convertToPixels(); + controlPoints[1].setLocation(firstPoint.x, firstPoint.y + vSpacing); + controlPoints[2].setLocation(firstPoint.x, firstPoint.y + 2 * vSpacing); + controlPoints[3].setLocation(firstPoint.x, firstPoint.y + 3 * vSpacing); + break; + } + + if (orientation != Orientation.DEFAULT) { + double theta = 0; + switch (orientation) { + case _90: + theta = Math.PI / 2; + break; + case _180: + theta = Math.PI; + break; + case _270: + theta = Math.PI * 3 / 2; + break; + } + AffineTransform rotation = AffineTransform.getRotateInstance(theta, firstPoint.x, firstPoint.y); + + for (int i = 1; i < controlPoints.length; i++) { + rotation.transform(controlPoints[i], controlPoints[i]); + } + } + } + + public Area[] getBody() { + if (body == null) { + body = new Area[2]; + + int centerX = (controlPoints[0].x + controlPoints[1].x + controlPoints[2].x + controlPoints[3].x) / 4; + int centerY = (controlPoints[0].y + controlPoints[1].y + controlPoints[2].y + controlPoints[3].y) / 4; + + int width = 0; + int length = 0; + + switch (rectifierType) { + case MiniDIP1: + case MiniDIP2: + length = (int) MINI_LENGTH.convertToPixels(); + width = (int) MINI_WIDTH.convertToPixels(); + break; + case MiniRound1: + case MiniRound2: + length = width = (int) MINI_ROUND_DIAMETER.convertToPixels(); + break; + case InLine: + length = (int) INLINE_WIDTH.convertToPixels(); + width = (int) INLINE_LENGTH.convertToPixels(); + break; + } + + if (orientation == Orientation._90 || orientation == Orientation._270) { + int p = length; + length = width; + width = p; + } + + switch (rectifierType) { + case MiniDIP1: + case MiniDIP2: + case InLine: + body[0] = new Area(new RoundRectangle2D.Double(centerX - length / 2, centerY - width / 2, length, width, EDGE_RADIUS, EDGE_RADIUS)); + break; + case MiniRound1: + case MiniRound2: + body[0] = new Area(new Ellipse2D.Double(centerX - length / 2, centerY - width / 2, length, width)); + break; + } + } + return body; + } + + @SuppressWarnings("incomplete-switch") + @Override + public void draw(Graphics2D g2d, ComponentState componentState, boolean outlineMode, Project project, + IDrawingObserver drawingObserver) { + if (checkPointsClipped(g2d.getClip())) { + return; + } + Area mainArea = getBody()[0]; + + int pinSize = (int) PIN_SIZE.convertToPixels() / 2 * 2; + + // smaller pin for round + if (rectifierType == RectifierType.InLine || rectifierType == RectifierType.MiniRound1 || rectifierType == RectifierType.MiniRound2) + pinSize *= 0.8; + + if (!outlineMode) { + for (Point point : controlPoints) { + g2d.setColor(PIN_COLOR); + if (rectifierType == RectifierType.InLine || rectifierType == RectifierType.MiniRound1 || rectifierType == RectifierType.MiniRound2) + g2d.fillOval(point.x - pinSize / 2, point.y - pinSize / 2, pinSize, pinSize); + else + g2d.fillRect(point.x - pinSize / 2, point.y - pinSize / 2, pinSize, pinSize); + g2d.setColor(PIN_BORDER_COLOR); + if (rectifierType == RectifierType.InLine || rectifierType == RectifierType.MiniRound1 || rectifierType == RectifierType.MiniRound2) + g2d.drawOval(point.x - pinSize / 2, point.y - pinSize / 2, pinSize, pinSize); + else + g2d.drawRect(point.x - pinSize / 2, point.y - pinSize / 2, pinSize, pinSize); + } + } + + 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); + + 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]); +// } + } + + drawingObserver.stopTracking(); + + // Draw label. + g2d.setFont(project.getFont()); + 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 = null; + + if (getDisplay() == Display.NAME) { + label = new String[] {getName()}; + } else if (getDisplay() == Display.VALUE) { + label = new String[] {getValue().toString()}; + } else if (getDisplay() == Display.BOTH) { + String value = getValue().toString(); + label = value.isEmpty() ? new String[] {getName()} : new String[] {getName(), value}; + } + + if (label != null) { + for (int i = 0; i < label.length; i++) { + String l = label[i]; + Rectangle2D rect = fontMetrics.getStringBounds(l, 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(); + + AffineTransform oldTransform = g2d.getTransform(); + + if (getLabelOriantation() == LabelOriantation.Directional && (getOrientation() == Orientation.DEFAULT || getOrientation() == Orientation._180)) { + int centerX = bounds.x + bounds.width / 2; + int centerY = bounds.y + bounds.height / 2; + g2d.rotate(-Math.PI / 2, centerX, centerY); + } + + if (label.length == 2) { + if (i == 0) + g2d.translate(0, -textHeight / 2); + else if (i == 1) + g2d.translate(0, textHeight / 2); + } + + g2d.drawString(l, x, y); + + g2d.setTransform(oldTransform); + } + } + + // draw pin numbers + g2d.setFont(project.getFont().deriveFont((float) (project.getFont().getSize2D() * 0.8))); + g2d.setColor(finalLabelColor); + for (int i = 0; i { @Override public void drawIcon(Graphics2D g2d, int width, int height) { - int margin = 2 * width / 32; + int margin = (int) (2f * width / 32); Area area = new Area(new Ellipse2D.Double(margin / 2, margin, width - 2 * margin, width - 2 * margin)); g2d.setColor(BODY_COLOR); g2d.fill(area); diff --git a/diylc/diylc-swing/lib/diylc-core.jar b/diylc/diylc-swing/lib/diylc-core.jar index ca39ce1e535a029c01fb0a283546f7cd2ef9226a..1c978f448fe97e90a7b93195396c429a0099b4e1 100644 GIT binary patch delta 5048 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 SURSNM(!eiR$-UcGBJh8BsFCpi delta 5048 zcmYk9dt8ra8^C|}efP_$a!gGWGE0uFX%1ub=8(~8Ym8|!Ls1Ti5;{y$(XV>SLz8Mq z5y@|PlC#;z3Y+HeW}C5@^IjjZycuop{an}ed_M0VKKHlld|mh9`FV8T;n95u`=IxP zO?#86t;zJPd`OPHhj=QN5v}^7j9_lC&SbB{dYro`h0Gbah7A(ZL%GL>!Pao`@Ui@_=nI6F@-bO)QFL={wc=5`j*X5Sm)ae)P1aZHWm)hzs+$o zM7e8s8`cZKLIueUER2YOb`&?dMPG~ zn@o*1N|U#fI&_(M&1&Cg6`H5HPr^tI{l*}4?jHf5tbOA$_|INA&NP9UOcS{hKD%qK zr&%d}qn$O;V-5p#<)8$w>n4+F1XD^nIVm=t&mn!QryGWG8}tGME`z_d1-R?ofSGEC zcSpGFGY!FgL<@rJsBEmS>YW|Dv))BxYnT5F5hl~GwkA_wCETN%b;Y~>*y$7njmbGS+$pfOD4H6iw{(U!uKR%?{ z?)d0!rf-?Gab^Ms_;7YN2Y{$W4k%d{wM2mA$^*P;%g;C@w^mnGSoZ-aGpn!a0_Dxa|AnN3G%Q2OKJp4IEwys1b(gZE9Wj3G z@yRwIF`qewVZZ(62_`!F?aydjP=5#|ffr8;2k9QrGTd!+sca(5oO{pJ`cA`Hj^dzP z^GJC_o0-z-jH`9fl@FM`Zf<$_Pwh!5pQqeR>#ofCshzdr>JI%bc`7eb~?3UcYm%>Q`U>M$YJzT4KwcwdRqm5uGoMVP7L{8E;g* z*NSkY_wY!Vu#OsqNEQyMzaE~ai}L(xVnU>-K` z1SB2%$oIai`nFI@#>=B~L6u{+D`HQvCbpBE!((#Z%DzYE!o%zVQu+~Qhjv?!u`x)E zCs{nEuYa@sUD3&8`n#iAl_AHx@@wXTvGOi6-*#~LuK&zVqhH}ImW?#*cXk4)=^pEX zWc!FsN1F4Pg&lSIrFth z=`Oqm&&Sis&)sWe6svl=K%T87#iE0@%#EKxJ0ExXy8?E^zt{T3vGRe6WBT?wY5D#6 zCj6{6<_&%|Q0`}cuI6}hXEmrqw9x`Q_;B2f4W2v(gS{HePh#&UhVn9$MR@Z{Bzf%e zFx9;M&BKCaNmH>g?aC-la~w66FGlO~@%$5v-@%XjqAX|<--7gD3YQP0{%XYqa39QB z70B)3iPTQZPY}|%V7?t5Qf+=HAB(hS2Isc=W2jYx@oVH=*{;%iOjL z$VT7cei%9B9zTpU`XTR$H1iL>5$Vojo`Ih*pKkXm&&d5AXjY#*=Ka(g2jza3HSr5* zxav=CMoN6n=ONu~;m`dc-A!LH9)5Lb?t#LLjSLJC@ihBTan=lW(X&J&`uc~7Sor>G zr{{`5q^=7@7&M};SSUv58?9C@6z>8wEfhlm+#|$rfLRgZUjQW$;vGG@dMiSV18|QN zQvjAm3itu7?vE4`K_b0e)Xs~92mB>nUDWA|L?8GoVUhfatYqCFobm?1l;S_i3tE*62%OFs6-lzmMA8J zF;9{>Z>@3;yg=|!_+H$FPVzppDcG-m)N9GUtuY72)g8W3Z-!VT!J1j=5rdt z_XZ4HPm;9tVjkE$UQb^BsT8?5l_W1yX_x^UNVR)|tWeMOasy=#O(RuBnjDL+YBeBW zBMo8aM(X0_Msg2MC-;5nG{cwaH0Qt!DbeE;Wl;8~8I;05lg{(jOq$rOOuD-LH_>T{ zGoXGG&9K*IN)feL_(IEvHVZ$17n|v5P0XS=n+*6Ni&FHk5X`mEQ9ocI_ht)ujm{=W z&X%u(KKc4=GVY#3?qNB!-Q_t{&kFA&qsR*l zIG9JqnP1A+s7tg9Dv$ABylaH*D<|J zdbfEg9^LfovN_h96H z5eBM){q$5k*)MOlZtQzN%mOGrKwZ2#K<>enWW1-6-i*Htn0AmP#RfbxU}6=iwpCF( o538sQze93Q^`zN{X5cs;Md)Dyh)T&dp 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 OCV5LF(i+%IB>w}E28#ax delta 13511 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 diff --git a/diylc/diylc-swing/update.xml b/diylc/diylc-swing/update.xml index cacecde2..96cb16a4 100644 --- a/diylc/diylc-swing/update.xml +++ b/diylc/diylc-swing/update.xml @@ -2213,6 +2213,10 @@ NEW_FEATURE "Fuse Holder" added + + + NEW_FEATURE + "Bridge Rectifier" added NEW_FEATURE diff --git a/diylc/diylc-swing/variants.xml b/diylc/diylc-swing/variants.xml index 1b65c3b1..f34d3a89 100644 --- a/diylc/diylc-swing/variants.xml +++ b/diylc/diylc-swing/variants.xml @@ -18,14 +18,6 @@ Alpha 127 - - Model - - - - Orientation - DEFAULT - Pole Color @@ -35,6 +27,14 @@ 255 + + Orientation + DEFAULT + + + Model + + Type Stratocaster @@ -73,16 +73,16 @@ 127 - Model - + Pole Color + Orientation DEFAULT - Pole Color - + Model + Type @@ -117,16 +117,16 @@ 127 - Model - + Pole Color + Orientation DEFAULT - Pole Color - + Model + Type @@ -161,16 +161,16 @@ 127 - Model - + Pole Color + Orientation DEFAULT - Pole Color - + Model + Type @@ -205,16 +205,16 @@ 127 - Model - + Pole Color + Orientation DEFAULT - Pole Color - + Model + Type @@ -249,16 +249,16 @@ 127 - Model - + Pole Color + Orientation DEFAULT - Pole Color - + Model + Type @@ -289,6 +289,10 @@ DPDT + + Alpha + 127 + Body @@ -298,18 +302,10 @@ 255 - - Alpha - 127 - Orientation VERTICAL - - Type - DPDT - Border @@ -319,6 +315,10 @@ 255 + + Type + DPDT + Spacing @@ -358,25 +358,25 @@ SPDT - - Body - - Alpha 127 + + Body + + Orientation VERTICAL - Type - SPDT + Border + - Border - + Type + SPDT Spacing @@ -574,6 +574,230 @@ + + Semiconductors.Bridge Rectifier + + + Miniature Rectangular + + + Label Orientation + Directional + + + Alpha + 127 + + + Body + + 128 + 128 + 128 + 255 + + + + Value + + + + Orientation + DEFAULT + + + Type + MiniDIP1 + + + Border + + 89 + 89 + 89 + 255 + + + + Voltage + + + + Display + BOTH + + + Label + + 255 + 255 + 255 + 255 + + + + Current + + + + + + 0 + 0 + + + 60 + 0 + + + 60 + 40 + + + 0 + 40 + + + false + + + Miniature Round + + + Label Orientation + Directional + + + Alpha + 100 + + + Body + + + + Value + + + + Orientation + DEFAULT + + + Type + MiniRound1 + + + Border + + + + Voltage + + + + Display + BOTH + + + Label + + + + Current + + + + + + 0 + 0 + + + 40 + 0 + + + 40 + 40 + + + 0 + 40 + + + false + + + In-line + + + Label Orientation + Directional + + + Alpha + 100 + + + Body + + + + Value + + + + Orientation + DEFAULT + + + Type + InLine + + + Border + + + + Voltage + + + + Display + BOTH + + + Label + + + + Current + + + + + + 0 + 0 + + + 0 + 40 + + + 0 + 80 + + + 0 + 120 + + + false + + + Passive.Potentiometer @@ -781,8 +1005,10 @@ - Alpha - 127 + Value + + + Body @@ -794,10 +1020,8 @@ - Value - - - + Alpha + 127 Orientation @@ -812,14 +1036,14 @@ 255 - - Display - BOTH - Voltage + + Display + BOTH + Label @@ -871,12 +1095,8 @@ - Value - - - - - + Alpha + 127 Body @@ -888,8 +1108,12 @@ - Alpha - 127 + Value + + + + + Orientation @@ -904,14 +1128,14 @@ 255 - - Voltage - - Display BOTH + + Voltage + + Label @@ -971,8 +1195,13 @@ - Alpha - 127 + Value + + + + + + Body @@ -984,13 +1213,8 @@ - Value - - - - - - + Alpha + 127 Orientation @@ -1005,14 +1229,14 @@ 255 - - Display - BOTH - Voltage + + Display + BOTH + Label @@ -1068,19 +1292,19 @@ - Alpha - 127 + Value + + + + Body - Value - - - - + Alpha + 127 Orientation @@ -1090,14 +1314,14 @@ Border - - Display - BOTH - Voltage + + Display + BOTH + Label @@ -1125,6 +1349,241 @@ + + Semiconductors.DIP IC + + + DIP8 + + + Row Spacing + + 0.3 + in + + + + Pins + _8 + + + Alpha + 127 + + + Body + + + + Value + + + + Orientation + DEFAULT + + + Border + + 89 + 89 + 89 + 255 + + + + Display + BOTH + + + Label + + + + Display Pin #s + NO + + + Indent + + 89 + 89 + 89 + 255 + + + + Pin Spacing + + 0.1 + in + + + + + + 0 + 0 + + + 0 + 20 + + + 0 + 40 + + + 0 + 60 + + + 60 + 0 + + + 60 + 20 + + + 60 + 40 + + + 60 + 60 + + + false + + + DIP16 + + + Row Spacing + + 0.3 + in + + + + Pins + _16 + + + Alpha + 127 + + + Body + + + + Value + + + + Orientation + DEFAULT + + + Border + + + + Display + BOTH + + + Label + + + + Display Pin #s + NO + + + Indent + + + + Pin Spacing + + 0.1 + in + + + + + + 0 + 0 + + + 0 + 20 + + + 0 + 40 + + + 0 + 60 + + + 0 + 80 + + + 0 + 100 + + + 0 + 120 + + + 0 + 140 + + + 60 + 0 + + + 60 + 20 + + + 60 + 40 + + + 60 + 60 + + + 60 + 80 + + + 60 + 100 + + + 60 + 120 + + + 60 + 140 + + + false + + + Passive.Resistor @@ -2021,255 +2480,20 @@ - - Semiconductors.DIP IC - - - DIP8 - - - Pins - _8 - - - Row Spacing - - 0.3 - in - - - - Value - - - - Body - - - - Alpha - 127 - - - Orientation - DEFAULT - - - Border - - 89 - 89 - 89 - 255 - - - - Display - BOTH - - - Label - - - - Display Pin #s - NO - - - Indent - - 89 - 89 - 89 - 255 - - - - Pin Spacing - - 0.1 - in - - - - - - 0 - 0 - - - 0 - 20 - - - 0 - 40 - - - 0 - 60 - - - 60 - 0 - - - 60 - 20 - - - 60 - 40 - - - 60 - 60 - - - false - - - DIP16 - - - Pins - _16 - - - Row Spacing - - 0.3 - in - - - - Value - - - - Body - - - - Alpha - 127 - - - Orientation - DEFAULT - - - Border - - - - Display - BOTH - - - Label - - - - Display Pin #s - NO - - - Indent - - - - Pin Spacing - - 0.1 - in - - - - - - 0 - 0 - - - 0 - 20 - - - 0 - 40 - - - 0 - 60 - - - 0 - 80 - - - 0 - 100 - - - 0 - 120 - - - 0 - 140 - - - 60 - 0 - - - 60 - 20 - - - 60 - 40 - - - 60 - 60 - - - 60 - 80 - - - 60 - 100 - - - 60 - 120 - - - 60 - 140 - - - false - - - Tubes.Tube Socket Noval - - Angle - 0 - Base B9A + + Angle + 0 + Alpha 127 @@ -2335,14 +2559,14 @@ Octal - - Angle - 0 - Base OCTAL + + Angle + 0 + Alpha 127 @@ -2404,10 +2628,6 @@ Covered PAF-Style - - Alpha - 127 - Bobin 1 @@ -2417,6 +2637,18 @@ 255 + + Alpha + 127 + + + Model + + + + Orientation + DEFAULT + Pole Color @@ -2426,14 +2658,6 @@ 255 - - Orientation - DEFAULT - - - Model - - Bobin 2 @@ -2480,6 +2704,10 @@ Uncovered PAF-Style + + Alpha + 127 + Bobin 1 @@ -2489,18 +2717,6 @@ 255 - - Alpha - 127 - - - Model - - - - Orientation - DEFAULT - Pole Color @@ -2510,6 +2726,14 @@ 255 + + Orientation + DEFAULT + + + Model + + Bobin 2 @@ -2556,6 +2780,10 @@ EMG-style + + Alpha + 127 + Bobin 1 @@ -2565,18 +2793,6 @@ 255 - - Alpha - 127 - - - Model - - - - Orientation - DEFAULT - Pole Color @@ -2586,6 +2802,14 @@ 255 + + Orientation + DEFAULT + + + Model + + Bobin 2 @@ -2632,10 +2856,6 @@ Filtertron-style - - Alpha - 127 - Bobin 1 @@ -2645,6 +2865,18 @@ 255 + + Alpha + 127 + + + Model + + + + Orientation + DEFAULT + Pole Color @@ -2654,14 +2886,6 @@ 255 - - Orientation - DEFAULT - - - Model - - Bobin 2 @@ -2675,14 +2899,14 @@ Type Filtertron - - Legs - false - Cover true + + Legs + false + Pole Pieces 1 Screws