From ba735dd350f4490faef5c027f1af99ad91797b77 Mon Sep 17 00:00:00 2001 From: Branislav Stojkovic Date: Thu, 17 Jan 2019 22:21:30 +0100 Subject: [PATCH] added audio transformer --- diylc/diylc-library/lib/diylc-core.jar | Bin 242798 -> 242829 bytes .../components/passive/AudioTransformer.java | 522 +++++ diylc/diylc-swing/lib/diylc-core.jar | Bin 242798 -> 242829 bytes diylc/diylc-swing/library/main.jar | Bin 541954 -> 550368 bytes diylc/diylc-swing/update.xml | 4 + diylc/diylc-swing/variants.xml | 2042 ++++++++++------- 6 files changed, 1739 insertions(+), 829 deletions(-) create mode 100644 diylc/diylc-library/src/org/diylc/components/passive/AudioTransformer.java diff --git a/diylc/diylc-library/lib/diylc-core.jar b/diylc/diylc-library/lib/diylc-core.jar index 730ea64a9c25bbb4c8b4566df1c911b8266a2783..7a880bb153273a82ab84feb7258b499a4ef42920 100644 GIT binary patch delta 10475 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 MWGNG~41!DjAGB(BQvd(} delta 10400 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%0A&3 z0*kp6yj=_wpv(?-7~Fo0jza=w4@UjK_J~I8hlow0@vkZ{ypG1h zT=}s2|C2$f=9tiz>np0fTT{M*ZbaV0Of7Lxc}})B_=oAy^fsdqho;Z_MyHM-a3gs z>NYF|=$;^u+Al{|7=3v2BrwHO@eMt)+0Ix{16ov2Pxcka(^^*m54r+97+*m(GcjuI n24J`wdh1&RXa_>kQYLW. + +*/ +package org.diylc.components.passive; + +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.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.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.annotations.PositiveMeasureValidator; +import org.diylc.core.measures.Size; +import org.diylc.core.measures.SizeUnit; +import org.diylc.utils.Constants; + +@ComponentDescriptor(name = "Audio Transformer", author = "Branislav Stojkovic", category = "Passive", + instanceNamePrefix = "TR", description = "Small signal audio transformer with EI core", stretchable = false, + zOrder = IDIYComponent.COMPONENT, keywordPolicy = KeywordPolicy.SHOW_VALUE, transformer = DIL_ICTransformer.class) +public class AudioTransformer extends AbstractTransparentComponent { + + private static final long serialVersionUID = 1L; + + public static Color CORE_COLOR = METAL_COLOR; + public static Color CORE_BORDER_COLOR = CORE_COLOR.darker(); + public static Color COIL_COLOR = Color.decode("#DDDDDD"); + public static Color COIL_BORDER_COLOR = COIL_COLOR.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.03d, SizeUnit.in); + + private String value = ""; + private Orientation orientation = Orientation.DEFAULT; + private Size leadSpacing = new Size(0.1d, SizeUnit.in); + private Size windingSpacing = new Size(0.5d, SizeUnit.in); + private Size coreThickness = new Size(0.15d, SizeUnit.in); + private Size coreWidth = new Size(0.6, SizeUnit.in); + private Size coilWidth = new Size(0.5, SizeUnit.in); + private Size coilLength = new Size(0.6, SizeUnit.in); + private Point[] controlPoints = new Point[] {new Point(0, 0)}; + protected Display display = Display.BOTH; + private Color coreColor = CORE_COLOR; + private Color coreBorderColor = CORE_BORDER_COLOR; + private Color coilColor = COIL_COLOR; + private Color coilBorderColor = COIL_BORDER_COLOR; + private Color labelColor = LABEL_COLOR; + private boolean primaryCT = true; + private boolean secondaryCT = true; + + transient private Area[] body; + + public AudioTransformer() { + 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(name = "Lead Spacing", validatorClass = PositiveMeasureValidator.class) + public Size getLeadSpacing() { + return leadSpacing; + } + + public void setLeadSpacing(Size leadSpacing) { + this.leadSpacing = leadSpacing; + updateControlPoints(); + // Reset body shape; + body = null; + } + + @EditableProperty(name = "Winding Spacing", validatorClass = PositiveMeasureValidator.class) + public Size getWindingSpacing() { + return windingSpacing; + } + + public void setWindingSpacing(Size rowSpacing) { + this.windingSpacing = rowSpacing; + 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; + } + + private void updateControlPoints() { + Point firstPoint = controlPoints[0]; + int pinCount = 4 + (primaryCT ? 1 : 0) + (secondaryCT ? 1 : 0); + controlPoints = new Point[pinCount]; + controlPoints[0] = firstPoint; + double leadSpacing = this.leadSpacing.convertToPixels(); + double windingSpacing = this.windingSpacing.convertToPixels(); + + // Update control points. + for (int i = 1; i < 2 + (primaryCT ? 1 : 0); i++) + controlPoints[i] = new Point(firstPoint.x, (int) (firstPoint.y + i * leadSpacing * (primaryCT ? 1 : 2))); + for (int i = 0; i < 2 + (secondaryCT ? 1 : 0); i++) + controlPoints[2 + (primaryCT ? 1 : 0) + i] = new Point((int) (firstPoint.x + windingSpacing), (int) (firstPoint.y + i * leadSpacing * (secondaryCT ? 1 : 2))); + + AffineTransform tx = getTx(); + + if (tx != null) { + for (int i = 1; i < controlPoints.length; i++) { + tx.transform(controlPoints[i], controlPoints[i]); + } + } + } + + public Area[] getBody() { + if (body == null) { + body = new Area[2]; + double leadSpacing = this.leadSpacing.convertToPixels(); + double windingSpacing = this.windingSpacing.convertToPixels(); + int centerX = (int) (controlPoints[0].x + windingSpacing / 2); + int centerY = (int) (controlPoints[0].y + leadSpacing); + int coreWidth = getClosestOdd(this.coreWidth.convertToPixels()); + int coreThickness = getClosestOdd(this.coreThickness.convertToPixels()); + int coilWidth = getClosestOdd(this.coilWidth.convertToPixels()); + int coilLength = getClosestOdd(this.coilLength.convertToPixels()); + + body[0] = new Area(new Rectangle2D.Double(centerX - coreThickness / 2, centerY - coreWidth / 2, coreThickness, coreWidth)); + body[1] = new Area(new RoundRectangle2D.Double(centerX - coilLength / 2, centerY - coilWidth / 2, coilLength, coilWidth, coilWidth / 3, coilWidth / 3)); + body[1].subtract(body[0]); + + AffineTransform tx = getTx(); + if (tx != null) + for (Area b : body) { + if (b != null) + b.transform(tx); + } + } + return body; + } + + @SuppressWarnings("incomplete-switch") + private AffineTransform getTx() { + double x = controlPoints[0].x; + double y = controlPoints[0].y; + if (orientation == Orientation.DEFAULT) + return null; + + 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, x, y); + + return rotation; + } + + @Override + public void draw(Graphics2D g2d, ComponentState componentState, boolean outlineMode, Project project, + IDrawingObserver drawingObserver) { + if (checkPointsClipped(g2d.getClip())) { + return; + } + Area[] body = getBody(); + Area coreArea = body[0]; + Area coilArea = body[1]; + + 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); + } + } + Composite oldComposite = g2d.getComposite(); + if (alpha < MAX_ALPHA) { + g2d.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_OVER, 1f * alpha / MAX_ALPHA)); + } + + // render coil + g2d.setColor(outlineMode ? Constants.TRANSPARENT_COLOR : getCoilColor()); + g2d.setStroke(ObjectCache.getInstance().fetchBasicStroke(1)); + g2d.fill(coilArea); + 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 + : getCoilBorderColor(); + } + g2d.setColor(finalBorderColor); + g2d.draw(coilArea); + + // render core + g2d.setColor(outlineMode ? Constants.TRANSPARENT_COLOR : getCoreColor()); + g2d.fill(coreArea); + g2d.setComposite(oldComposite); + + if (!outlineMode) { + finalBorderColor = + componentState == ComponentState.SELECTED || componentState == ComponentState.DRAGGING ? SELECTION_COLOR + : getCoreBorderColor(); + } + g2d.setColor(finalBorderColor); + g2d.draw(coreArea); + + drawingObserver.stopTracking(); + + g2d.setFont(project.getFont()); + + // Draw winding designations + Point wPoint = new Point((int) (controlPoints[0].x + project.getFontSize()), (int) (controlPoints[0].y + leadSpacing.convertToPixels())); + AffineTransform tx = getTx(); + if (tx != null) + tx.transform(wPoint, wPoint); + drawCenteredText(g2d, "P", wPoint.x, wPoint.y, HorizontalAlignment.CENTER, VerticalAlignment.CENTER); + wPoint = new Point((int) (controlPoints[0].x + windingSpacing.convertToPixels() - project.getFontSize()), (int) (controlPoints[0].y + leadSpacing.convertToPixels())); + if (tx != null) + tx.transform(wPoint, wPoint); + drawCenteredText(g2d, "S", wPoint.x, wPoint.y, HorizontalAlignment.CENTER, VerticalAlignment.CENTER); + + // Draw label. + 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 = coreArea.getBounds(); + int x = bounds.x + (bounds.width - textWidth) / 2; + int y = bounds.y + (bounds.height - textHeight) / 2 + fontMetrics.getAscent(); + + AffineTransform oldTransform = g2d.getTransform(); + + if (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); + } + } + } + + @Override + public void drawIcon(Graphics2D g2d, int width, int height) { + int radius = (int) (12f * width / 32); + g2d.setColor(COIL_COLOR); + g2d.fillRoundRect(1, (int) (height / 8f), width - 2, (int) (height * 6 / 8f), radius, radius); + g2d.setColor(COIL_BORDER_COLOR); + g2d.drawRoundRect(1, (int) (height / 8f), width - 2, (int) (height * 6 / 8f), radius, radius); + + g2d.setColor(CORE_COLOR); + g2d.fillRect(width * 3 / 8, 1, width / 4, height - 2); + g2d.setColor(CORE_BORDER_COLOR); + g2d.drawRect(width * 3 / 8, 1, width / 4, height - 2); + + int pinSize = (int) (2f * width / 32); + g2d.setColor(PIN_COLOR); + for (int i = 0; i < 3; i++) { + g2d.fillRect(width / 5 - pinSize + 1, (height / 6) * (i + 2), pinSize, pinSize); + g2d.fillRect(4 * width / 5 + 1, (height / 6) * (i + 2), pinSize, pinSize); + } + } + + @EditableProperty(name = "Core") + public Color getCoreColor() { + if (coreColor == null) { + coreColor = CORE_COLOR; + } + return coreColor; + } + + public void setCoreColor(Color coreColor) { + this.coreColor = coreColor; + } + + @EditableProperty(name = "Core Border") + public Color getCoreBorderColor() { + if (coreBorderColor == null) { + coreBorderColor = CORE_BORDER_COLOR; + } + return coreBorderColor; + } + + public void setCoreBorderColor(Color coreBorderColor) { + this.coreBorderColor = coreBorderColor; + } + + @EditableProperty(name = "Label") + public Color getLabelColor() { + if (labelColor == null) { + labelColor = LABEL_COLOR; + } + return labelColor; + } + + public void setLabelColor(Color labelColor) { + this.labelColor = labelColor; + } + + @EditableProperty(name = "Core Thickness") + public Size getCoreThickness() { + return coreThickness; + } + + public void setCoreThickness(Size coreThickness) { + this.coreThickness = coreThickness; + body = null; + } + + @EditableProperty(name = "Core Width") + public Size getCoreWidth() { + return coreWidth; + } + + public void setCoreWidth(Size coreWidth) { + this.coreWidth = coreWidth; + body = null; + } + + @EditableProperty(name = "Coil Width") + public Size getCoilWidth() { + return coilWidth; + } + + public void setCoilWidth(Size coilWidth) { + this.coilWidth = coilWidth; + body = null; + } + + @EditableProperty(name = "Coil Length") + public Size getCoilLength() { + return coilLength; + } + + public void setCoilLength(Size coilLength) { + this.coilLength = coilLength; + body = null; + } + + @EditableProperty(name = "Coil") + public Color getCoilColor() { + return coilColor; + } + + public void setCoilColor(Color coilColor) { + this.coilColor = coilColor; + } + + @EditableProperty(name = "Coil Border") + public Color getCoilBorderColor() { + return coilBorderColor; + } + + public void setCoilBorderColor(Color coilBorderColor) { + this.coilBorderColor = coilBorderColor; + } + + @EditableProperty(name = "Primary CT") + public boolean getPrimaryCT() { + return primaryCT; + } + + public void setPrimaryCT(boolean primaryCT) { + this.primaryCT = primaryCT; + updateControlPoints(); + } + + @EditableProperty(name = "Secondary CT") + public boolean getSecondaryCT() { + return secondaryCT; + } + + public void setSecondaryCT(boolean secondaryCT) { + this.secondaryCT = secondaryCT; + updateControlPoints(); + } +} diff --git a/diylc/diylc-swing/lib/diylc-core.jar b/diylc/diylc-swing/lib/diylc-core.jar index 730ea64a9c25bbb4c8b4566df1c911b8266a2783..7a880bb153273a82ab84feb7258b499a4ef42920 100644 GIT binary patch delta 10475 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 MWGNG~41!DjAGB(BQvd(} delta 10400 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%0A&3 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 JpgV1f{{u|k=!O6Q delta 7773 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ţi_=({9S0M5F42&|42xUI1*Z%qCSbk` zOnb_i^@B+u#%2G*sK$7&UUWq&%P99K z7ihXEE3|Q_c^CL}-Q?Jp*xZ=FK6zLN@x`$=@`=NE`uW3{tGB-3NcAv2E&d72PK}&d z`P{rBu`sP~M?qj`qUEo)%IhYVXRpZsDD2YV%*e!B7N$LI9B$qU(jK3k3eUdftitVL zyvyZxr6{&E!dB@(hh*@Y|M_O%0QNe56xsfcASZz+J^{LnWU3po!Cnw88_7$w5}1<;fa$U7s9vG&Wzp*|L=<|BDn^=?W!{40t}J*C-&7X=*CCiy zfjacpEVi}RX7LKvWie|fsw_wpWb2>Jm}}m#Fx_ZbHeVuDfb?0<5r@%4q02vG-d|k) zt^izGV}boJ)5T?TC&BEhW+7Q0H0A#bqV6xA^ltRCvBU);SkK<~y5`MRD8F}f)xVw! zUozG*W7emIx~o-u>;=VZbuKU1v@y(9B|D*Cc-lFJ1YuzJM!4jHt@X@Syj2UdgRSBf zIqU+O|6Cz23?}6;gWV2UNd)6&a5>`ISudKI$7c7yTyyyCw6!g)I2PGW~5V38WQ;e2=LH<_ZHa187qr34t!z6fvg3-okXDV~fmfYW+CW z{yG}&3i2MbvV=&KeJ=87y=W9vl|IGHeNBipVxX19 z<`{Nguw8wVT|ths?Ka$MruOgNM(KPpPw`hU_gaDlaiB3Jd>=|LVaTOK3lfE${9@(8 zrBm4~jAQk+-d8UrTST4dlM?d_;Oq}Erq9{ya7o|xkCN4?7I`Dh8OJAJ**NBOLx}~E z=;m?62R*lb5^I02K0Kw3y!}$uiP{D8jmE!}nfqXxHEf_0N(p@9r1JpY^lE$fU#0wj zYyfz{3~Shi`i&<}{_ygZW;M+Iid|$L7YITpt5ScrP^EsCR2TZvc;bz+H4{(uf6fZ_ h^wsvVw-2CfXSa;OGFu{oaG(72019-01-16 00:00:00.000 CET + + NEW_FEATURE + "Signal Transformer" added + NEW_FEATURE Configurable graphics hardware acceleration diff --git a/diylc/diylc-swing/variants.xml b/diylc/diylc-swing/variants.xml index 08e396a2..daedb113 100644 --- a/diylc/diylc-swing/variants.xml +++ b/diylc/diylc-swing/variants.xml @@ -18,6 +18,14 @@ Alpha 127 + + Model + + + + Orientation + DEFAULT + Pole Color @@ -27,14 +35,6 @@ 255 - - Orientation - DEFAULT - - - Model - - Type Stratocaster @@ -73,16 +73,16 @@ 127 - Pole Color - + Model + Orientation DEFAULT - Model - + Pole Color + Type @@ -117,16 +117,16 @@ 127 - Pole Color - + Model + Orientation DEFAULT - Model - + Pole Color + Type @@ -161,16 +161,16 @@ 127 - Pole Color - + Model + Orientation DEFAULT - Model - + Pole Color + Type @@ -205,16 +205,16 @@ 127 - Pole Color - + Model + Orientation DEFAULT - Model - + Pole Color + Type @@ -249,16 +249,16 @@ 127 - Pole Color - + Model + Orientation DEFAULT - Model - + Pole Color + Type @@ -283,16 +283,396 @@ + + Passive.Audio Transformer + + + Xicon 42TL + + + Alpha + 100 + + + Value + + + + Orientation + DEFAULT + + + Core Border + + 81 + 109 + 122 + 255 + + + + Coil + + 221 + 221 + 221 + 255 + + + + Winding Spacing + + 0.5 + in + + + + Display + BOTH + + + Core + + 117 + 157 + 175 + 255 + + + + Coil Border + + 154 + 154 + 154 + 255 + + + + Lead Spacing + + 0.1 + in + + + + Core Thickness + + 0.15 + in + + + + Primary CT + true + + + Core Width + + 0.6 + in + + + + Coil Width + + 0.5 + in + + + + Coil Length + + 0.6 + in + + + + Secondary CT + true + + + Label + + 255 + 255 + 255 + 255 + + + + + + 0 + 0 + + + 0 + 20 + + + 0 + 40 + + + 100 + 0 + + + 100 + 20 + + + 100 + 40 + + + false + + + Xicon 42TU + + + Alpha + 100 + + + Value + + + + Orientation + DEFAULT + + + Core Border + + + + Coil + + + + Winding Spacing + + 0.6 + in + + + + Display + BOTH + + + Core + + + + Coil Border + + + + Lead Spacing + + 0.2 + in + + + + Core Thickness + + 0.25 + in + + + + Primary CT + true + + + Core Width + + 0.98 + in + + + + Coil Width + + 0.65 + in + + + + Coil Length + + 0.72 + in + + + + Secondary CT + true + + + Label + + + + + + 0 + 0 + + + 0 + 40 + + + 0 + 80 + + + 120 + 0 + + + 120 + 40 + + + 120 + 80 + + + false + + + Xicon 42TM + + + Alpha + 100 + + + Value + + + + Orientation + DEFAULT + + + Core Border + + + + Coil + + + + Winding Spacing + + 0.5 + in + + + + Display + BOTH + + + Core + + + + Coil Border + + + + Lead Spacing + + 0.15 + in + + + + Core Thickness + + 0.2 + in + + + + Primary CT + true + + + Core Width + + 0.866 + in + + + + Coil Width + + 0.49 + in + + + + Coil Length + + 0.59 + in + + + + Secondary CT + true + + + Label + + + + + + 0 + 0 + + + 0 + 30 + + + 0 + 60 + + + 100 + 0 + + + 100 + 30 + + + 100 + 60 + + + false + + + Electro-Mechanical.Mini Toggle Switch DPDT - - Alpha - 127 - Body @@ -302,10 +682,18 @@ 255 + + Alpha + 127 + Orientation VERTICAL + + Type + DPDT + Border @@ -315,10 +703,6 @@ 255 - - Type - DPDT - Spacing @@ -359,25 +743,25 @@ SPDT - Alpha - 127 + Body + - Body - + Alpha + 127 Orientation VERTICAL - - Border - - Type SPDT + + Border + + Spacing @@ -574,316 +958,6 @@ - - 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 - - - Square BR-3 - - - Label Orientation - Horizontal - - - Value - - - - Body - - 128 - 128 - 128 - 255 - - - - Alpha - 100 - - - Orientation - DEFAULT - - - Border - - 89 - 89 - 89 - 255 - - - - Type - SquareBR3 - - - Display - BOTH - - - Voltage - - - - Label - - 255 - 255 - 255 - 255 - - - - Current - - 3.0 - A - - - - - - 0 - 0 - - - 85 - 0 - - - 0 - 85 - - - 85 - 85 - - - false - - - Passive.Potentiometer @@ -1068,6 +1142,316 @@ + + Semiconductors.Bridge Rectifier + + + Miniature Rectangular + + + Label Orientation + Directional + + + Value + + + + Body + + 128 + 128 + 128 + 255 + + + + Alpha + 127 + + + Orientation + DEFAULT + + + Border + + 89 + 89 + 89 + 255 + + + + Type + MiniDIP1 + + + Display + BOTH + + + Voltage + + + + Label + + 255 + 255 + 255 + 255 + + + + Current + + + + + + 0 + 0 + + + 60 + 0 + + + 60 + 40 + + + 0 + 40 + + + false + + + Miniature Round + + + Label Orientation + Directional + + + Value + + + + Body + + + + Alpha + 100 + + + Orientation + DEFAULT + + + Border + + + + Type + MiniRound1 + + + Display + BOTH + + + Voltage + + + + Label + + + + Current + + + + + + 0 + 0 + + + 40 + 0 + + + 40 + 40 + + + 0 + 40 + + + false + + + In-line + + + Label Orientation + Directional + + + Value + + + + Body + + + + Alpha + 100 + + + Orientation + DEFAULT + + + Border + + + + Type + InLine + + + Display + BOTH + + + Voltage + + + + Label + + + + Current + + + + + + 0 + 0 + + + 0 + 40 + + + 0 + 80 + + + 0 + 120 + + + false + + + Square BR-3 + + + Label Orientation + Horizontal + + + Alpha + 100 + + + Body + + 128 + 128 + 128 + 255 + + + + Value + + + + Orientation + DEFAULT + + + Type + SquareBR3 + + + Border + + 89 + 89 + 89 + 255 + + + + Voltage + + + + Display + BOTH + + + Label + + 255 + 255 + 255 + 255 + + + + Current + + 3.0 + A + + + + + + 0 + 0 + + + 85 + 0 + + + 0 + 85 + + + 85 + 85 + + + false + + + Passive.Multi-Section Capacitor @@ -1091,10 +1475,8 @@ - Value - - - + Alpha + 127 Body @@ -1106,8 +1488,10 @@ - Alpha - 127 + Value + + + Orientation @@ -1122,14 +1506,14 @@ 255 - - Voltage - - Display BOTH + + Voltage + + Label @@ -1181,8 +1565,12 @@ - Alpha - 127 + Value + + + + + Body @@ -1194,12 +1582,8 @@ - Value - - - - - + Alpha + 127 Orientation @@ -1214,14 +1598,14 @@ 255 - - Display - BOTH - Voltage + + Display + BOTH + Label @@ -1281,13 +1665,8 @@ - Value - - - - - - + Alpha + 127 Body @@ -1299,8 +1678,13 @@ - Alpha - 127 + Value + + + + + + Orientation @@ -1315,14 +1699,14 @@ 255 - - Voltage - - Display BOTH + + Voltage + + Label @@ -1378,19 +1762,19 @@ - Value - - - - + Alpha + 127 Body - Alpha - 127 + Value + + + + Orientation @@ -1400,14 +1784,14 @@ Border - - Voltage - - Display BOTH + + Voltage + + Label @@ -1435,241 +1819,6 @@ - - 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 @@ -2566,6 +2715,383 @@ + + 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 + + + Alpha + 127 + + + Type + + + + Color + + 247 + 247 + 239 + 255 + + + + + + 0 + 0 + + + 66 + 48 + + + 25 + 78 + + + -25 + 78 + + + -66 + 48 + + + -82 + 0 + + + -66 + -48 + + + -25 + -78 + + + 25 + -78 + + + 66 + -48 + + + false + + + Octal + + + Angle + 0 + + + Base + OCTAL + + + Alpha + 127 + + + Type + + + + Color + + + + + + 0 + 0 + + + 63 + 26 + + + 26 + 63 + + + -27 + 63 + + + -64 + 26 + + + -64 + -27 + + + -27 + -64 + + + 26 + -64 + + + 63 + -27 + + + false + + + Electro-Mechanical.Chassis Panel @@ -2731,154 +3257,16 @@ - - Tubes.Tube Socket - - - Noval - - - Base - B9A - - - Angle - 0 - - - Alpha - 127 - - - Type - - - - Color - - 247 - 247 - 239 - 255 - - - - - - 0 - 0 - - - 66 - 48 - - - 25 - 78 - - - -25 - 78 - - - -66 - 48 - - - -82 - 0 - - - -66 - -48 - - - -25 - -78 - - - 25 - -78 - - - 66 - -48 - - - false - - - Octal - - - Base - OCTAL - - - Angle - 0 - - - Alpha - 127 - - - Type - - - - Color - - - - - - 0 - 0 - - - 63 - 26 - - - 26 - 63 - - - -27 - 63 - - - -64 - 26 - - - -64 - -27 - - - -27 - -64 - - - 26 - -64 - - - 63 - -27 - - - false - - - Guitar.Humbucker Pickup Covered PAF-Style + + Alpha + 127 + Bobin 1 @@ -2888,18 +3276,6 @@ 255 - - Alpha - 127 - - - Model - - - - Orientation - DEFAULT - Pole Color @@ -2909,6 +3285,14 @@ 255 + + Orientation + DEFAULT + + + Model + + Bobin 2 @@ -2955,10 +3339,6 @@ Uncovered PAF-Style - - Alpha - 127 - Bobin 1 @@ -2968,6 +3348,18 @@ 255 + + Alpha + 127 + + + Model + + + + Orientation + DEFAULT + Pole Color @@ -2977,14 +3369,6 @@ 255 - - Orientation - DEFAULT - - - Model - - Bobin 2 @@ -3031,10 +3415,6 @@ EMG-style - - Alpha - 127 - Bobin 1 @@ -3044,6 +3424,18 @@ 255 + + Alpha + 127 + + + Model + + + + Orientation + DEFAULT + Pole Color @@ -3053,14 +3445,6 @@ 255 - - Orientation - DEFAULT - - - Model - - Bobin 2 @@ -3107,6 +3491,10 @@ Filtertron-style + + Alpha + 127 + Bobin 1 @@ -3116,18 +3504,6 @@ 255 - - Alpha - 127 - - - Model - - - - Orientation - DEFAULT - Pole Color @@ -3137,6 +3513,14 @@ 255 + + Orientation + DEFAULT + + + Model + + Bobin 2 @@ -3150,14 +3534,14 @@ Type Filtertron - - Cover - true - Legs false + + Cover + true + Pole Pieces 1 Screws