From 1c1ec2fcf5a4b69cb3826e48000fd1323a6f0890 Mon Sep 17 00:00:00 2001 From: Branislav Stojkovic Date: Sat, 9 Mar 2019 17:24:34 +0100 Subject: [PATCH] refactor transistor packages with a base class, add pinouts --- diylc/diylc-library/lib/diylc-core.jar | Bin 273513 -> 273513 bytes .../AbstractTransistorPackage.java | 187 ++++++++++++++++ .../semiconductors/TransistorPinout.java | 11 + .../semiconductors/TransistorTO1.java | 189 +++++----------- .../semiconductors/TransistorTO220.java | 204 ++++++------------ .../semiconductors/TransistorTO92.java | 203 +++++------------ diylc/diylc-swing/lib/diylc-core.jar | Bin 273513 -> 273513 bytes diylc/diylc-swing/library/main.jar | Bin 613689 -> 615549 bytes 8 files changed, 362 insertions(+), 432 deletions(-) create mode 100644 diylc/diylc-library/src/org/diylc/components/semiconductors/AbstractTransistorPackage.java create mode 100644 diylc/diylc-library/src/org/diylc/components/semiconductors/TransistorPinout.java diff --git a/diylc/diylc-library/lib/diylc-core.jar b/diylc/diylc-library/lib/diylc-core.jar index 9fd920470aaa6e93c970428db43d2f484d14e46a..12c9bc8f66d962988b1ffd291b7438ee15c09ad0 100644 GIT binary patch delta 4823 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 HxQzWT=r9jD diff --git a/diylc/diylc-library/src/org/diylc/components/semiconductors/AbstractTransistorPackage.java b/diylc/diylc-library/src/org/diylc/components/semiconductors/AbstractTransistorPackage.java new file mode 100644 index 00000000..28ae3d87 --- /dev/null +++ b/diylc/diylc-library/src/org/diylc/components/semiconductors/AbstractTransistorPackage.java @@ -0,0 +1,187 @@ +/* + + 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.Color; +import java.awt.Point; +import java.awt.geom.Area; + +import org.diylc.common.Display; +import org.diylc.common.Orientation; +import org.diylc.components.AbstractTransparentComponent; +import org.diylc.core.VisibilityPolicy; +import org.diylc.core.annotations.EditableProperty; +import org.diylc.netlist.ISpiceMapper; + +public abstract class AbstractTransistorPackage extends AbstractTransparentComponent implements ISpiceMapper { + + private static final long serialVersionUID = 1L; + + protected String value = ""; + protected TransistorPinout pinout; + protected Orientation orientation = Orientation.DEFAULT; + protected Point[] controlPoints = new Point[] {new Point(0, 0), new Point(0, 0), new Point(0, 0)}; + transient protected Area[] body; + + protected Color bodyColor; + protected Color borderColor; + protected Color labelColor = LABEL_COLOR; + protected Display display = Display.NAME; + + public AbstractTransistorPackage() { + } + + protected abstract void updateControlPoints(); + + @Override + public int mapToSpiceNode(int index) { + if (getPinout() == null) + return index; + + switch (getPinout()) { + case BJT_CBE: + return index; + case BJT_EBC: + return 2 - index; + case JFET_DGS: + case MOSFET_DGS: + return index; + case JFET_DSG: + case MOSFET_DSG: + switch (index) { + case 0: return 0; + case 1: return 2; + case 2: return 1; + } + case JFET_GSD: + case MOSFET_GSD: + switch (index) { + case 0: return 1; + case 1: return 2; + case 2: return 0; + } + case JFET_SGD: + case MOSFET_SGD: + return 2 - index; + } + + return index; + } + + @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; + } + + @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; + } + + @EditableProperty(name = "Body") + public Color getBodyColor() { + return bodyColor; + } + + public void setBodyColor(Color bodyColor) { + this.bodyColor = bodyColor; + } + + @EditableProperty(name = "Border") + public Color getBorderColor() { + 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 + public Display getDisplay() { + if (display == null) { + display = Display.NAME; + } + return display; + } + + public void setDisplay(Display display) { + this.display = display; + } + + @EditableProperty + public TransistorPinout getPinout() { + return pinout; + } + + public void setPinout(TransistorPinout pinout) { + this.pinout = pinout; + } +} diff --git a/diylc/diylc-library/src/org/diylc/components/semiconductors/TransistorPinout.java b/diylc/diylc-library/src/org/diylc/components/semiconductors/TransistorPinout.java new file mode 100644 index 00000000..950bedeb --- /dev/null +++ b/diylc/diylc-library/src/org/diylc/components/semiconductors/TransistorPinout.java @@ -0,0 +1,11 @@ +package org.diylc.components.semiconductors; + +public enum TransistorPinout { + + BJT_EBC, BJT_CBE, JFET_DSG, JFET_GSD, JFET_DGS, JFET_SGD, MOSFET_DSG, MOSFET_GSD, MOSFET_DGS, MOSFET_SGD; + + @Override + public String toString() { + return name().replace("_", " "); + }; +} diff --git a/diylc/diylc-library/src/org/diylc/components/semiconductors/TransistorTO1.java b/diylc/diylc-library/src/org/diylc/components/semiconductors/TransistorTO1.java index 6adcb452..9cbbeb81 100644 --- a/diylc/diylc-library/src/org/diylc/components/semiconductors/TransistorTO1.java +++ b/diylc/diylc-library/src/org/diylc/components/semiconductors/TransistorTO1.java @@ -21,42 +21,39 @@ */ 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.components.transform.TO1Transformer; -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.Size; -import org.diylc.core.measures.SizeUnit; -import org.diylc.utils.Constants; +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.components.transform.TO1Transformer; +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.annotations.ComponentDescriptor; +import org.diylc.core.annotations.EditableProperty; +import org.diylc.core.annotations.KeywordPolicy; +import org.diylc.core.measures.Size; +import org.diylc.core.measures.SizeUnit; +import org.diylc.utils.Constants; @ComponentDescriptor(name = "Transistor (TO-1)", author = "Branislav Stojkovic", category = "Semiconductors", instanceNamePrefix = "Q", description = "Transistor with small metal body", stretchable = false, zOrder = IDIYComponent.COMPONENT, keywordPolicy = KeywordPolicy.SHOW_VALUE, transformer = TO1Transformer.class) -public class TransistorTO1 extends AbstractTransparentComponent { +public class TransistorTO1 extends AbstractTransistorPackage { private static final long serialVersionUID = 1L; @@ -71,71 +68,19 @@ public class TransistorTO1 extends AbstractTransparentComponent { public static Size BODY_LENGTH = new Size(0.4d, SizeUnit.in); public static Size EDGE_RADIUS = new Size(2d, SizeUnit.mm); - 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)}; - transient private Area body; - private Color bodyColor = BODY_COLOR; - private Color borderColor = BORDER_COLOR; - private Color labelColor = LABEL_COLOR; - protected Display display = Display.NAME; private boolean folded = false; private Size pinSpacing = PIN_SPACING; public TransistorTO1() { super(); updateControlPoints(); - alpha = (byte) 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; + alpha = (byte) 100; + bodyColor = BODY_COLOR; + borderColor = BORDER_COLOR; } @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() { + protected void updateControlPoints() { int pinSpacing = (int) getPinSpacing().convertToPixels(); // Update control points. int x = controlPoints[0].x; @@ -162,49 +107,52 @@ public class TransistorTO1 extends AbstractTransparentComponent { } } - public Area getBody() { + public Area[] getBody() { if (body == null) { int x = (controlPoints[0].x + controlPoints[1].x + controlPoints[2].x) / 3; int y = (controlPoints[0].y + controlPoints[1].y + controlPoints[2].y) / 3; int bodyDiameter = getClosestOdd(BODY_DIAMETER.convertToPixels()); int bodyLength = getClosestOdd(BODY_LENGTH.convertToPixels()); - int edgeRadius = (int) EDGE_RADIUS.convertToPixels(); + int edgeRadius = (int) EDGE_RADIUS.convertToPixels(); + + Area newBody = null; if (folded) { switch (orientation) { case DEFAULT: - body = + newBody = new Area(new RoundRectangle2D.Double(x - bodyLength, y - bodyDiameter / 2, bodyLength, bodyDiameter, edgeRadius, edgeRadius)); - body.add(new Area(new Rectangle2D.Double(x - bodyLength / 2, y - bodyDiameter / 2, bodyLength / 2, + newBody.add(new Area(new Rectangle2D.Double(x - bodyLength / 2, y - bodyDiameter / 2, bodyLength / 2, bodyDiameter))); break; case _90: - body = + newBody = new Area(new RoundRectangle2D.Double(x - bodyDiameter / 2, y - bodyLength, bodyDiameter, bodyLength, edgeRadius, edgeRadius)); - body.add(new Area(new Rectangle2D.Double(x - bodyDiameter / 2, y - bodyLength / 2, bodyDiameter, + newBody.add(new Area(new Rectangle2D.Double(x - bodyDiameter / 2, y - bodyLength / 2, bodyDiameter, bodyLength / 2))); break; case _180: - body = + newBody = new Area(new RoundRectangle2D.Double(x, y - bodyDiameter / 2, bodyLength, bodyDiameter, edgeRadius, edgeRadius)); - body.add(new Area(new Rectangle2D.Double(x, y - bodyDiameter / 2, bodyLength / 2, bodyDiameter))); + newBody.add(new Area(new Rectangle2D.Double(x, y - bodyDiameter / 2, bodyLength / 2, bodyDiameter))); break; case _270: - body = + newBody = new Area(new RoundRectangle2D.Double(x - bodyDiameter / 2, y, bodyDiameter, bodyLength, edgeRadius, edgeRadius)); - body.add(new Area(new Rectangle2D.Double(x - bodyDiameter / 2, y, bodyDiameter, bodyLength / 2))); + newBody.add(new Area(new Rectangle2D.Double(x - bodyDiameter / 2, y, bodyDiameter, bodyLength / 2))); break; default: throw new RuntimeException("Unexpected orientation: " + orientation); } } else { - body = new Area(new Ellipse2D.Double(x - bodyDiameter / 2, y - bodyDiameter / 2, bodyDiameter, bodyDiameter)); + newBody = new Area(new Ellipse2D.Double(x - bodyDiameter / 2, y - bodyDiameter / 2, bodyDiameter, bodyDiameter)); } - + + body = new Area[] { newBody }; } return body; } @@ -228,7 +176,7 @@ public class TransistorTO1 extends AbstractTransparentComponent { g2d.drawOval(point.x - pinSize / 2, point.y - pinSize / 2, pinSize, pinSize); } - Area mainArea = getBody(); + Area mainArea = getBody()[0]; Composite oldComposite = g2d.getComposite(); if (alpha < MAX_ALPHA) { g2d.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_OVER, 1f * alpha / MAX_ALPHA)); @@ -298,15 +246,6 @@ public class TransistorTO1 extends AbstractTransparentComponent { } } - @EditableProperty(name = "Body") - public Color getBodyColor() { - return bodyColor; - } - - public void setBodyColor(Color bodyColor) { - this.bodyColor = bodyColor; - } - @EditableProperty public boolean getFolded() { return folded; @@ -330,34 +269,4 @@ public class TransistorTO1 extends AbstractTransparentComponent { // Reset body shape; body = null; } - - @EditableProperty(name = "Border") - public Color getBorderColor() { - return borderColor; - } - - public void setBorderColor(Color borderColor) { - this.borderColor = borderColor; - } - - @EditableProperty(name = "Label") - public Color getLabelColor() { - return labelColor; - } - - public void setLabelColor(Color labelColor) { - this.labelColor = labelColor; - } - - @EditableProperty - public Display getDisplay() { - if (display == null) { - display = Display.NAME; - } - return display; - } - - public void setDisplay(Display display) { - this.display = display; - } } diff --git a/diylc/diylc-library/src/org/diylc/components/semiconductors/TransistorTO220.java b/diylc/diylc-library/src/org/diylc/components/semiconductors/TransistorTO220.java index 53f689d1..06f97e28 100644 --- a/diylc/diylc-library/src/org/diylc/components/semiconductors/TransistorTO220.java +++ b/diylc/diylc-library/src/org/diylc/components/semiconductors/TransistorTO220.java @@ -21,42 +21,39 @@ */ 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.Shape; -import java.awt.geom.Area; -import java.awt.geom.Ellipse2D; -import java.awt.geom.Rectangle2D; - -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.components.transform.TO220Transformer; -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.Size; -import org.diylc.core.measures.SizeUnit; -import org.diylc.utils.Constants; +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.Shape; +import java.awt.geom.Area; +import java.awt.geom.Ellipse2D; +import java.awt.geom.Rectangle2D; + +import org.diylc.appframework.miscutils.ConfigurationManager; +import org.diylc.common.Display; +import org.diylc.common.IPlugInPort; +import org.diylc.common.ObjectCache; +import org.diylc.components.transform.TO220Transformer; +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.annotations.ComponentDescriptor; +import org.diylc.core.annotations.EditableProperty; +import org.diylc.core.annotations.KeywordPolicy; +import org.diylc.core.measures.Size; +import org.diylc.core.measures.SizeUnit; +import org.diylc.utils.Constants; @ComponentDescriptor(name = "Transistor (TO-220)", author = "Branislav Stojkovic", category = "Semiconductors", instanceNamePrefix = "Q", description = "Transistors with metal tab for heat sink mounting", stretchable = false, zOrder = IDIYComponent.COMPONENT, keywordPolicy = KeywordPolicy.SHOW_VALUE, transformer = TO220Transformer.class) -public class TransistorTO220 extends AbstractTransparentComponent { +public class TransistorTO220 extends AbstractTransistorPackage { private static final long serialVersionUID = 1L; @@ -78,72 +75,21 @@ public class TransistorTO220 extends AbstractTransparentComponent { public static Size LEAD_LENGTH = new Size(3.5d, SizeUnit.mm); public static Size LEAD_THICKNESS = new Size(0.8d, SizeUnit.mm); - 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)}; - transient private Shape[] body; - private Color bodyColor = BODY_COLOR; - private Color borderColor = BORDER_COLOR; private Color tabColor = TAB_COLOR; private Color tabBorderColor = TAB_BORDER_COLOR; - private Display display = Display.NAME; private boolean folded = false; private Size leadLength = LEAD_LENGTH; public TransistorTO220() { super(); updateControlPoints(); - alpha = (byte) 100; + alpha = (byte) 100; + bodyColor = BODY_COLOR; + borderColor = BORDER_COLOR; } - - @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; - } - + @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() { + protected void updateControlPoints() { int pinSpacing = (int) PIN_SPACING.convertToPixels(); // Update control points. int x = controlPoints[0].x; @@ -170,9 +116,9 @@ public class TransistorTO220 extends AbstractTransparentComponent { } } - public Shape[] getBody() { + public Area[] getBody() { if (body == null) { - body = new Shape[2]; + body = new Area[2]; int x = controlPoints[0].x; int y = controlPoints[0].y; int pinSpacing = (int) PIN_SPACING.convertToPixels(); @@ -187,68 +133,68 @@ public class TransistorTO220 extends AbstractTransparentComponent { switch (orientation) { case DEFAULT: if (folded) { - body[0] = new Rectangle2D.Double(x + leadLength, y + pinSpacing - bodyWidth / 2, bodyHeight, bodyWidth); + body[0] = new Area(new Rectangle2D.Double(x + leadLength, y + pinSpacing - bodyWidth / 2, bodyHeight, bodyWidth)); body[1] = new Area(new Rectangle2D.Double(x + leadLength + bodyHeight, y + pinSpacing - bodyWidth / 2, tabHeight, bodyWidth)); ((Area) body[1]).subtract(new Area(new Ellipse2D.Double(x + leadLength + bodyHeight + tabHeight / 2 - tabHoleDiameter / 2, y + pinSpacing - tabHoleDiameter / 2, tabHoleDiameter, tabHoleDiameter))); } else { - body[0] = - new Rectangle2D.Double(x - bodyThickness / 2, y + pinSpacing - bodyWidth / 2, bodyThickness, bodyWidth); - body[1] = + body[0] = new Area( + new Rectangle2D.Double(x - bodyThickness / 2, y + pinSpacing - bodyWidth / 2, bodyThickness, bodyWidth)); + body[1] = new Area( new Rectangle2D.Double(x + bodyThickness / 2 - tabThickness, y + pinSpacing - bodyWidth / 2, - tabThickness, bodyWidth); + tabThickness, bodyWidth)); } break; case _90: if (folded) { - body[0] = new Rectangle2D.Double(x - pinSpacing - bodyWidth / 2, y + leadLength, bodyWidth, bodyHeight); + body[0] = new Area(new Rectangle2D.Double(x - pinSpacing - bodyWidth / 2, y + leadLength, bodyWidth, bodyHeight)); body[1] = new Area(new Rectangle2D.Double(x - pinSpacing - bodyWidth / 2, y + leadLength + bodyHeight, bodyWidth, tabHeight)); ((Area) body[1]).subtract(new Area(new Ellipse2D.Double(x - pinSpacing - tabHoleDiameter / 2, y + leadLength + bodyHeight + tabHeight / 2 - tabHoleDiameter / 2, tabHoleDiameter, tabHoleDiameter))); } else { - body[0] = - new Rectangle2D.Double(x - pinSpacing - bodyWidth / 2, y - bodyThickness / 2, bodyWidth, bodyThickness); - body[1] = + body[0] = new Area( + new Rectangle2D.Double(x - pinSpacing - bodyWidth / 2, y - bodyThickness / 2, bodyWidth, bodyThickness)); + body[1] = new Area( new Rectangle2D.Double(x - pinSpacing - bodyWidth / 2, y + bodyThickness / 2 - tabThickness, bodyWidth, - tabThickness); + tabThickness)); } break; case _180: if (folded) { - body[0] = + body[0] = new Area( new Rectangle2D.Double(x - leadLength - bodyHeight, y - pinSpacing - bodyWidth / 2, bodyHeight, - bodyWidth); + bodyWidth)); body[1] = new Area(new Rectangle2D.Double(x - leadLength - bodyHeight - tabHeight, y - pinSpacing - bodyWidth / 2, tabHeight, bodyWidth)); ((Area) body[1]).subtract(new Area(new Ellipse2D.Double(x - leadLength - bodyHeight - tabHeight / 2 - tabHoleDiameter / 2, y - pinSpacing - tabHoleDiameter / 2, tabHoleDiameter, tabHoleDiameter))); } else { - body[0] = - new Rectangle2D.Double(x - bodyThickness / 2, y - pinSpacing - bodyWidth / 2, bodyThickness, bodyWidth); - body[1] = - new Rectangle2D.Double(x - bodyThickness / 2, y - pinSpacing - bodyWidth / 2, tabThickness, bodyWidth); + body[0] = new Area( + new Rectangle2D.Double(x - bodyThickness / 2, y - pinSpacing - bodyWidth / 2, bodyThickness, bodyWidth)); + body[1] = new Area( + new Rectangle2D.Double(x - bodyThickness / 2, y - pinSpacing - bodyWidth / 2, tabThickness, bodyWidth)); } break; case _270: if (folded) { - body[0] = + body[0] = new Area( new Rectangle2D.Double(x + pinSpacing - bodyWidth / 2, y - leadLength - bodyHeight, bodyWidth, - bodyHeight); + bodyHeight)); body[1] = new Area(new Rectangle2D.Double(x + pinSpacing - bodyWidth / 2, y - leadLength - bodyHeight - tabHeight, bodyWidth, tabHeight)); ((Area) body[1]).subtract(new Area(new Ellipse2D.Double(x + pinSpacing - tabHoleDiameter / 2, y - leadLength - bodyHeight - tabHeight / 2 - tabHoleDiameter / 2, tabHoleDiameter, tabHoleDiameter))); } else { - body[0] = - new Rectangle2D.Double(x + pinSpacing - bodyWidth / 2, y - bodyThickness / 2, bodyWidth, bodyThickness); - body[1] = - new Rectangle2D.Double(x + pinSpacing - bodyWidth / 2, y - bodyThickness / 2, bodyWidth, tabThickness); + body[0] = new Area( + new Rectangle2D.Double(x + pinSpacing - bodyWidth / 2, y - bodyThickness / 2, bodyWidth, bodyThickness)); + body[1] = new Area( + new Rectangle2D.Double(x + pinSpacing - bodyWidth / 2, y - bodyThickness / 2, bodyWidth, tabThickness)); } break; default: @@ -382,7 +328,7 @@ public class TransistorTO220 extends AbstractTransparentComponent { } else { finalLabelColor = componentState == ComponentState.SELECTED || componentState == ComponentState.DRAGGING ? LABEL_COLOR_SELECTED - : LABEL_COLOR; + : getLabelColor(); } g2d.setColor(finalLabelColor); String label = ""; @@ -428,24 +374,6 @@ public class TransistorTO220 extends AbstractTransparentComponent { g2d.drawLine(width / 2 + bodySize / 3, margin + tabSize + bodySize, width / 2 + bodySize / 3, height - margin); } - @EditableProperty(name = "Body") - public Color getBodyColor() { - return bodyColor; - } - - public void setBodyColor(Color bodyColor) { - this.bodyColor = bodyColor; - } - - @EditableProperty(name = "Border") - public Color getBorderColor() { - return borderColor; - } - - public void setBorderColor(Color borderColor) { - this.borderColor = borderColor; - } - @EditableProperty(name = "Tab") public Color getTabColor() { return tabColor; @@ -487,17 +415,5 @@ public class TransistorTO220 extends AbstractTransparentComponent { public void setTabBorderColor(Color tabBorderColor) { this.tabBorderColor = tabBorderColor; - } - - @EditableProperty - public Display getDisplay() { - if (display == null) { - display = Display.NAME; - } - return display; - } - - public void setDisplay(Display display) { - this.display = display; - } + } } diff --git a/diylc/diylc-library/src/org/diylc/components/semiconductors/TransistorTO92.java b/diylc/diylc-library/src/org/diylc/components/semiconductors/TransistorTO92.java index db5531c3..3cd03060 100644 --- a/diylc/diylc-library/src/org/diylc/components/semiconductors/TransistorTO92.java +++ b/diylc/diylc-library/src/org/diylc/components/semiconductors/TransistorTO92.java @@ -21,42 +21,39 @@ */ 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.RenderingHints; -import java.awt.geom.Area; -import java.awt.geom.Ellipse2D; -import java.awt.geom.Rectangle2D; - -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.components.transform.TO92Transformer; -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.Size; -import org.diylc.core.measures.SizeUnit; -import org.diylc.utils.Constants; +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.RenderingHints; +import java.awt.geom.Area; +import java.awt.geom.Ellipse2D; +import java.awt.geom.Rectangle2D; + +import org.diylc.appframework.miscutils.ConfigurationManager; +import org.diylc.common.Display; +import org.diylc.common.IPlugInPort; +import org.diylc.common.ObjectCache; +import org.diylc.components.transform.TO92Transformer; +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.annotations.ComponentDescriptor; +import org.diylc.core.annotations.EditableProperty; +import org.diylc.core.annotations.KeywordPolicy; +import org.diylc.core.measures.Size; +import org.diylc.core.measures.SizeUnit; +import org.diylc.utils.Constants; @ComponentDescriptor(name = "Transistor (TO-92)", author = "Branislav Stojkovic", category = "Semiconductors", instanceNamePrefix = "Q", description = "Transistor with small plastic or epoxy body", stretchable = false, zOrder = IDIYComponent.COMPONENT, keywordPolicy = KeywordPolicy.SHOW_VALUE, transformer = TO92Transformer.class) -public class TransistorTO92 extends AbstractTransparentComponent { +public class TransistorTO92 extends AbstractTransistorPackage { private static final long serialVersionUID = 1L; @@ -69,42 +66,15 @@ public class TransistorTO92 extends AbstractTransparentComponent { public static Size PIN_SPACING = new Size(0.05d, SizeUnit.in); public static Size BODY_DIAMETER = new Size(0.2d, 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)}; - transient private Area body; - private Color bodyColor = BODY_COLOR; - private Color borderColor = BORDER_COLOR; - private Color labelColor = LABEL_COLOR; - protected Display display = Display.NAME; private boolean folded = false; - private Size pinSpacing = PIN_SPACING; + private Size pinSpacing = PIN_SPACING; public TransistorTO92() { super(); updateControlPoints(); - alpha = (byte) 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; + alpha = (byte) 100; + bodyColor = BODY_COLOR; + borderColor = BORDER_COLOR; } @EditableProperty @@ -132,34 +102,9 @@ public class TransistorTO92 extends AbstractTransparentComponent { // Reset body shape; body = null; } - + @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() { + protected void updateControlPoints() { int pinSpacing = (int) getPinSpacing().convertToPixels(); // Update control points. int x = controlPoints[0].x; @@ -186,25 +131,27 @@ public class TransistorTO92 extends AbstractTransparentComponent { } } - public Area getBody() { + public Area[] getBody() { if (body == null) { int x = (controlPoints[0].x + controlPoints[1].x + controlPoints[2].x) / 3; int y = (controlPoints[0].y + controlPoints[1].y + controlPoints[2].y) / 3; - int bodyDiameter = getClosestOdd(BODY_DIAMETER.convertToPixels()); + int bodyDiameter = getClosestOdd(BODY_DIAMETER.convertToPixels()); + + Area newBody = null; if (folded) { switch (orientation) { case DEFAULT: - body = new Area(new Rectangle2D.Double(x - bodyDiameter, y - bodyDiameter / 2, bodyDiameter, bodyDiameter)); + newBody = new Area(new Rectangle2D.Double(x - bodyDiameter, y - bodyDiameter / 2, bodyDiameter, bodyDiameter)); break; case _90: - body = new Area(new Rectangle2D.Double(x - bodyDiameter / 2, y - bodyDiameter, bodyDiameter, bodyDiameter)); + newBody = new Area(new Rectangle2D.Double(x - bodyDiameter / 2, y - bodyDiameter, bodyDiameter, bodyDiameter)); break; case _180: - body = new Area(new Rectangle2D.Double(x, y - bodyDiameter / 2, bodyDiameter, bodyDiameter)); + newBody = new Area(new Rectangle2D.Double(x, y - bodyDiameter / 2, bodyDiameter, bodyDiameter)); break; case _270: - body = new Area(new Rectangle2D.Double(x - bodyDiameter / 2, y, bodyDiameter, bodyDiameter)); + newBody = new Area(new Rectangle2D.Double(x - bodyDiameter / 2, y, bodyDiameter, bodyDiameter)); break; default: throw new RuntimeException("Unexpected orientation: " + orientation); @@ -212,33 +159,35 @@ public class TransistorTO92 extends AbstractTransparentComponent { } else { switch (orientation) { case DEFAULT: - body = + newBody = new Area(new Ellipse2D.Double(x - bodyDiameter / 2, y - bodyDiameter / 2, bodyDiameter, bodyDiameter)); - body.subtract(new Area(new Rectangle2D.Double(x - bodyDiameter, y - bodyDiameter / 2, 3 * bodyDiameter / 4, + newBody.subtract(new Area(new Rectangle2D.Double(x - bodyDiameter, y - bodyDiameter / 2, 3 * bodyDiameter / 4, bodyDiameter))); break; case _90: - body = + newBody = new Area(new Ellipse2D.Double(x - bodyDiameter / 2, y - bodyDiameter / 2, bodyDiameter, bodyDiameter)); - body.subtract(new Area(new Rectangle2D.Double(x - bodyDiameter / 2, y - bodyDiameter, bodyDiameter, + newBody.subtract(new Area(new Rectangle2D.Double(x - bodyDiameter / 2, y - bodyDiameter, bodyDiameter, 3 * bodyDiameter / 4))); break; case _180: - body = + newBody = new Area(new Ellipse2D.Double(x - bodyDiameter / 2, y - bodyDiameter / 2, bodyDiameter, bodyDiameter)); - body.subtract(new Area(new Rectangle2D.Double(x + bodyDiameter / 4, y - bodyDiameter / 2, + newBody.subtract(new Area(new Rectangle2D.Double(x + bodyDiameter / 4, y - bodyDiameter / 2, 3 * bodyDiameter / 4, bodyDiameter))); break; case _270: - body = + newBody = new Area(new Ellipse2D.Double(x - bodyDiameter / 2, y - bodyDiameter / 2, bodyDiameter, bodyDiameter)); - body.subtract(new Area(new Rectangle2D.Double(x - bodyDiameter / 2, y + bodyDiameter / 4, bodyDiameter, + newBody.subtract(new Area(new Rectangle2D.Double(x - bodyDiameter / 2, y + bodyDiameter / 4, bodyDiameter, 3 * bodyDiameter / 4))); break; default: throw new RuntimeException("Unexpected orientation: " + orientation); } - } + } + + body = new Area[] { newBody }; } return body; } @@ -261,7 +210,7 @@ public class TransistorTO92 extends AbstractTransparentComponent { } } - Area mainArea = getBody(); + Area mainArea = getBody()[0]; Composite oldComposite = g2d.getComposite(); if (alpha < MAX_ALPHA) { g2d.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_OVER, 1f * alpha / MAX_ALPHA)); @@ -337,46 +286,4 @@ public class TransistorTO92 extends AbstractTransparentComponent { g2d.fillOval(width / 2 - pinSize / 2, (height / 4) * (i + 1), pinSize, pinSize); } } - - @EditableProperty(name = "Body") - public Color getBodyColor() { - return bodyColor; - } - - public void setBodyColor(Color bodyColor) { - this.bodyColor = bodyColor; - } - - @EditableProperty(name = "Border") - public Color getBorderColor() { - 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 - public Display getDisplay() { - if (display == null) { - display = Display.NAME; - } - return display; - } - - public void setDisplay(Display display) { - this.display = display; - } } diff --git a/diylc/diylc-swing/lib/diylc-core.jar b/diylc/diylc-swing/lib/diylc-core.jar index 9fd920470aaa6e93c970428db43d2f484d14e46a..12c9bc8f66d962988b1ffd291b7438ee15c09ad0 100644 GIT binary patch delta 4823 zcmYk9dtAtVEIIV4OB9jPYeuyk-JBJX`&*YkNl??1lR`MU1w{yo26?v~r%Ew{Ih8!e=zPG_#u z6>iA14&enGG9$XwzxoK~19*o8@xl%IG}a$rV7&kh>{WmV9}Jkp!vJ6K2tXS1(ib$^ zS^ZyKeH+I#U-1e=j8{;V(+GJ2D>sTk;PaPJfSIxnAWMcT zHqXKO)V72HPuuT8&UFlspl7(QMcv&!7qd$|smj#uZwc`4^6^Fc8NVM;PYLotePeJw za%k8H%-;|mg)Hf{4yaG)eHGF}`fNh;(N{f~P2q-=vDeCi``y&(bd&XInNIpX2`2g{ zeP2N2<9y{4x7$$vH0~>;W5P`2(uqy5r2N@af-r7#k`FR>I?WqBlh)BXYasRso0E!pzog{Y zLf+(0?NCoywixrOmhZF%`)3<^qJ4LIHs%f8+#mg)WV)lCu{8|+1=|GjkL|X|D_>Os z^#{Lc0_@yz1@PgwRZw)?&hgw9mbWT%Pof9c>GlbIa*>Nx+ak=g^cLZkU-!K~mNDJ6 z&I&TN9GHe}ALNyx{p?{=Y=7xL9;n|l&=_vNZbW_eiJKU|y3hyXem=P$sGm@D9T0x1 z1F8m{o&nMN4QKJj))&)V{CLh8iyS@Q16h7?q{O>^WmR2qs?g~M=ntN7)%rXa7JB>Z zR$5fMFwIZ8vKBiwTx-Roit-!S`Di6QR|{_Zf&N$P9-!a1eg*n}xZOo;JdXaP`+LxD z_TVPk8=FJTa937`m%N*zcGWEP8HFy`JwLL29R{CyT7VD#ny$N`Yl|7%t!QxN>?Bk* zRG6?l@EFp~S*^AD9U2z8u%878t{%)0g-|cn7lkBm7Kp+cKW2eKMj*36;k#hwAtCG6 zaF)P9uH-mUMiSsMZv(O;2R*S&O8ZVbd@+9SgL?vX_|GI+Asw z<-yzR6bgsO8wV+#z|t{hQX-2**Uop@pC~L$V*60&HiKoLkTZ*I#o(Ct*-+{q>Hkm` zs7)Q!GJUzbRyvEB8xG84r5LtyA^V=&!kB+o-nMWt)#(nIYBh|zX&0p$bj%0L&lHZc zcqv^~?=-IY49SXgQT_Jm$8YY%f}d{>UC<&xoJc2(+aAo5iE$ z+Flj{=|>K-?pVetIeO1az{=D6HsW z3ACZ5*84w?RU3-YGPf{ytHsLXtf7G1&qEKbU zLl|^5wc)+d5@FBHQHXKkA5xF-6Fqx5t1@lw^fps**5AEWrTgJ1X`Rq^>+?Ot`$YkKpGbcO|UTFr%W zbaAb2uUg-HM`>kP)sNHfC365j$Z*Z&+j>0@Qx9bj*K!AOcf;&~dRYCn_5@&zcI9nX{T&O;{f zVQ5*H$TbwqrtnQDY)|45SozX>+!o$4hMHt<2Hy|u&MbZ#43}o})$mF&Oq|Dq9YFXz zmCwR=NyF!SE(-Bq@VD@#^7R^?hn6wxc@xyr25;mIkmR4v$611~WIO){V`qHL$6(9c zZ0?O6F7M-OQ=AGwx5n2i_@;J0OmU8@H8T_tr7qq;7m4Ac6_3Qi(6tXM$ zPbkDxb7!0)v4$J4j(r_J2H#J^`DXqB#zeL8T5quUIEp|=5QYbcHVhsdBtp?LXP}_P z9T+4Gm^CL-RA9^-(P9o-_Qi-`6s`>u>rqIK75H&8G>s5K;5T7v;%7~zOsAVGw7Ov; zK>M?&dWD6I5tUfWWUSC*W_Fx7iI!>cf=;_&g2+#V;r#Xs{KLR-^?>*bV}8jM{cXTi zQy@(7w2g&g845E`iPP|u7(z=#1y(k>C_ceUTz*-^p>XM%cn|7meagh^>dDmRm5HIi zoHEe|SW_kjfZwfLya}9EE+T;*sWR&0lrf$CIR!RMH0~A2JwR%0@kCI z+z@d1bp*ZiwVG$_0<1DJ)O_%Hq~EpTZ{nzZ@0yV zz`hL>|78Q!t8Ab-gBvODQzMHT$?tiG=ALth`X0YS`3`r*G^n@ut{4w2x=VJCd!*05 zC*B2n@jaT~@4iR|ef52j0&Kod`yKa>m3kU^pw_ckhuLBoqFOknmXqhrHM{To7PF&%ITzSvgf3ae@>^}{hZ2n zK37kz`qhkjp|+y9^@aM?D3-raPk~}+7csR<WTtbnbdTiQk_ne~I6(41YRb zgHazCAg4nA?Ey4zTL9$^52Uzn1L@o?fim6#{-^Hd;j*n!%LtY(T5^zl4RW<0in(WG zWKYsFjJ##!fMBw(H?lgI&e$u2X4n`)Gc<Rt1SGPMfL@R9+E6 zJeQ)SF+@I z7H3+A@ZF0uBRbW;`UvI&c#j3~oW=Sy))!!4Jpgs=b$|yS2$;yj0IPTeAdPwHPuAO6 z{a;;u3&%8H@ft*oQ&5%D2nPjLt``Hq=P#oGGh{D7mJCWwcm-H?HC|I&v0Ffy1RQGW*2!5h8FmN4|6+$xZNY_mmP`??aS zKk#h>V8`}rfRDecgrZ}2jN`Vjyp@?b2_9Uh+bi@*1uj}mlQ7fLn}l0_?GOG~#&qX8 zE6CWqe=4?pbg&fd=MS4=`z!zPK>dM%#&G*}1M0g@+`{{=f-WtyhPz(A(dz z(xO_0X@26hwb-$)q#2XS%Wh)lqZRaA&Aa&r`d_bognr*U%hCVi-A-ctar7rX%t61| zqg!aNZwxiVU0EGo^nQxkRio5roN~eL`H`*bF!AVlRwve%1iUwECPD52g zxd}T69z(i0tFczUL&JO*wp)PU>cJdQ2=!vUQAqS=fher;V-_f61Tq^Gz7J*|60&{` zXYm{ayPoW*JqQ;Dv#*8CZgs1!MQxuXs5QlD(-N3_)&gl}*f^9;!vak)>=ouUk6`U+ zdGszjgTmo)#z6|lvviD^n80Gtwc~yECkpcu*B4g2S?Vhmd`pZ&mXVa&fP?pnB*>U4)pwQ9!Qw98TrI{G8#X9~wz zxP-082JK5(1q!9h*-I>OBaMxsPAM++^U~BwQ?=8Vn7bin4O2e@m0a~D3q`>^ouz`H zy*Z5gYZa!_(vZKIeTcrUdgg|^?5DAGw4BK{9&_sswg)Xkeqv9tXT;BJI9k&F&En8f zvWJC0`jG>yE0*!jXN7nZ_X~_?J${Zoz}TD%#``;RiA7)l>%}`8Tl|%?o6s`-n44j-36IA7qvqTfg-R

_h7ypg`6;cjN)4ktnxpq;`6ndJ?f^{^yHW64D*tk&4qGw za;}n+VOD=Wh~v*?Yt|=nu&OXX zW5ufU`2lb~H!QHWc`-@%v4H*5Gow2WTQ8=#&xa09P{B>!|i))It8+xR~iJN+9z8e8UN zb8qZ$bqAMdDgB;*hh;w9$p@og*v*A0q@UQwr=!Iuj}OKU(+={h;OTpauW$n4$XV`- zWy;U-P!voGxi<k}uVYmFonDaHWHE7dTHU8=+&;CoeKBJg09NCZ0EBz|;LzFMV z;(f3eKA`#i9*QK;S3eXfz{ZEP-?9IQ8K56F(xXAl0ex))^{Z$QV?hslL`;1|b6zsi ztC9LGXrz6dX{7VoHi;O>o7g1Y10HN5dwY`@0eVa``8PGw+;^I(PDBgsZF39F+uTC; zJNz-7kcdKBqMtAZ~j>r=IYFrp|pqX`-Fdrnb|za@%Q}tb_D%9dz1V9aOfx zLp` zSW#S_l^hNJPNP1`n(Ag*ll`_e<%QW$|Ick`&LSIHf|ISpo0?@yhd0<#U1>-91Ut(6 z*^cs_*ipSf_H^!*_B780dy4aLpt{o?C~l7f`I{YRu7QrkHIB5GtB&M%cOrh^ME&;} z^~X*Wua=INz1ErHE<2Om&4v0VyO2N6h3qd}=plH=mFjJARr9FdRfVgvD+am|7rH6G z(oednOILJsSNV!l+|~XR_qdb4)m`mF>BBwL+=^R0)V(M^@Sym)MQP6zvxu5udi_pYS-ca!)Y+|*6Z0{gRW z65szx-V|5hO>;T>NPK@SFtW(VKwq-2FtXCfetr_aSDXFl+;{vWet)9;C4Rp${ONpk zM!kQ4oC5u~1<<@L0hBi^km9}zq;od~$~X)7pSqie%hq}=BUrjEo& HxQzWT=r9jD diff --git a/diylc/diylc-swing/library/main.jar b/diylc/diylc-swing/library/main.jar index 7a5a9cd3ed3642aa9fbe1bacccedab29c4391bc2..3b3c8b083319cfe2ec839b9b2acb1083f768ab7d 100644 GIT binary patch delta 29180 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 delta 27302 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 RLMp-;7Xkv!E#&e}@PEZE3~B%X