From a4de01dfb0345f1cefd8c425ded987a69ef47fa2 Mon Sep 17 00:00:00 2001 From: bancika Date: Fri, 18 Dec 2020 22:20:11 +0100 Subject: [PATCH] Added 'Neutrik Jack' component based on Neutrik NMJx series --- .../src/org/diylc/presenter/update.xml | 4 + diylc/diylc-library/lib/diylc-core.jar | Bin 340101 -> 340132 bytes .../electromechanical/NeutrikJack1_4.java | 393 ++++++++++++++++++ diylc/diylc-swing/lib/diylc-core.jar | Bin 340101 -> 340132 bytes diylc/diylc-swing/library/main.jar | Bin 741850 -> 751817 bytes 5 files changed, 397 insertions(+) create mode 100644 diylc/diylc-library/src/org/diylc/components/electromechanical/NeutrikJack1_4.java diff --git a/diylc/diylc-core/src/org/diylc/presenter/update.xml b/diylc/diylc-core/src/org/diylc/presenter/update.xml index c40f7654..b0b182f5 100644 --- a/diylc/diylc-core/src/org/diylc/presenter/update.xml +++ b/diylc/diylc-core/src/org/diylc/presenter/update.xml @@ -3362,6 +3362,10 @@ NEW_FEATURE Added 'Font Size Override' property to most components that display text to allow control over font size + + NEW_FEATURE + Added 'Neutrik Jack' component based on Neutrik NMJx series. Mono/Stereo and PCB/Panel mount options are available + IMPROVEMENT Improved performance of the application when using dashed and dotted style for 'Hookup Wire' component diff --git a/diylc/diylc-library/lib/diylc-core.jar b/diylc/diylc-library/lib/diylc-core.jar index 5d7e0976f05be915d9c5c18978a6db8f700cd272..720a6978f475ccc1884a9cda2cba1004b1d0e145 100644 GIT binary patch delta 7160 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 delta 7096 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. + +*/ +package org.diylc.components.electromechanical; + +import java.awt.AlphaComposite; +import java.awt.Color; +import java.awt.Composite; +import java.awt.Graphics2D; +import java.awt.Shape; +import java.awt.geom.AffineTransform; +import java.awt.geom.Area; +import java.awt.geom.Ellipse2D; +import java.awt.geom.Point2D; +import java.awt.geom.Rectangle2D; +import java.awt.geom.RoundRectangle2D; + +import org.diylc.appframework.miscutils.ConfigurationManager; +import org.diylc.awt.StringUtils; +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.AbstractMultiPartComponent; +import org.diylc.components.transform.CliffJackTransformer; +import org.diylc.core.ComponentState; +import org.diylc.core.IDIYComponent; +import org.diylc.core.IDrawingObserver; +import org.diylc.core.Project; +import org.diylc.core.Theme; +import org.diylc.core.VisibilityPolicy; +import org.diylc.core.annotations.ComponentDescriptor; +import org.diylc.core.annotations.EditableProperty; +import org.diylc.core.measures.Size; +import org.diylc.core.measures.SizeUnit; +import org.diylc.utils.Constants; + +@ComponentDescriptor(name = "Neutrik 1/4\" Jack", category = "Electro-Mechanical", author = "Branislav Stojkovic", + description = "1/4\" mono/stereo phono jack based on Neutrik NMJx series, PCB or Panel-mount", + zOrder = IDIYComponent.COMPONENT, instanceNamePrefix = "J", autoEdit = false, transformer = CliffJackTransformer.class, + enableCache = true) +public class NeutrikJack1_4 extends AbstractMultiPartComponent { + + private static final long serialVersionUID = 1L; + + private static Size X_SPACING = new Size(0.25d, SizeUnit.in); + private static Size Y_SPACING = new Size(16.23d, SizeUnit.mm); + private static Size PIN_WIDTH = new Size(0.1d, SizeUnit.in); + private static Size PIN_THICKNESS = new Size(0.02d, SizeUnit.in); + private static Size PIN_DIAMETER = new Size(1.4d, SizeUnit.mm); + private static Size PIN_OFFSET_MONO = new Size(-6.27d, SizeUnit.mm); + private static Size PIN_OFFSET_STEREO = new Size(-7.72d, SizeUnit.mm); + private static Color BODY_COLOR = Color.decode("#666666"); + private static Color NUT_COLOR = Color.decode("#999999"); + private static Color BORDER_COLOR = Color.black; + private static Color LABEL_COLOR = Color.white; + private static Size BODY_WIDTH = new Size(18.2, SizeUnit.mm); + private static Size BODY_LENGTH = new Size(20.6d, SizeUnit.mm); + private static Size TAIL_LENGTH = new Size(0.1d, SizeUnit.in); + + private Point2D[] controlPoints = new Point2D[] {new Point2D.Double(0, 0)}; + private JackType type = JackType.MONO; + private Mount mount = Mount.Panel; + private Orientation orientation = Orientation.DEFAULT; + transient private Area[] body; + private String value = ""; + + public NeutrikJack1_4() { + super(); + updateControlPoints(); + } + + private void updateControlPoints() { + // invalidate body shape + body = null; + double x = controlPoints[0].getX(); + double y = controlPoints[0].getY(); + int xSpacing = (int) X_SPACING.convertToPixels(); + int ySpacing = (int) Y_SPACING.convertToPixels(); + controlPoints = new Point2D[type == JackType.STEREO ? 6 : 4]; + + controlPoints[0] = new Point2D.Double(x, y); + controlPoints[1] = new Point2D.Double(x, y + ySpacing); + controlPoints[2] = new Point2D.Double(x + 2 * xSpacing, y); + controlPoints[3] = new Point2D.Double(x + 2 * xSpacing, y + ySpacing); + if (type == JackType.STEREO) { + controlPoints[4] = new Point2D.Double(x + xSpacing, y); + controlPoints[5] = new Point2D.Double(x + xSpacing, y + ySpacing); + } + + // Apply rotation if necessary + double angle = getAngle(); + if (angle != 0) { + AffineTransform rotation = AffineTransform.getRotateInstance(angle, x, y); + for (int i = 1; i < controlPoints.length; i++) { + rotation.transform(controlPoints[i], controlPoints[i]); + } + } + } + + private double getAngle() { + // Apply rotation if necessary + double angle; + switch (orientation) { + case _90: + angle = Math.PI / 2; + break; + case _180: + angle = Math.PI; + break; + case _270: + angle = Math.PI * 3 / 2; + break; + default: + angle = 0; + } + + return angle; + } + + public Area[] getBody() { + if (body == null) { + body = new Area[5]; + + // Create body. + int bodyLength = (int) BODY_LENGTH.convertToPixels(); + int bodyWidth = (int) BODY_WIDTH.convertToPixels(); + int offset = (int)(type == JackType.MONO ? PIN_OFFSET_MONO : PIN_OFFSET_STEREO).convertToPixels(); + double centerX = controlPoints[3].getX() + offset; + double centerY = (controlPoints[0].getY() + controlPoints[3].getY()) / 2; + body[0] = new Area(new Rectangle2D.Double(centerX - bodyLength / 2, centerY - bodyWidth / 2, bodyLength, bodyWidth)); + + int tailLength = (int) TAIL_LENGTH.convertToPixels(); + body[1] = new Area(new RoundRectangle2D.Double(centerX - bodyLength / 2 - tailLength, centerY - bodyWidth / 4, tailLength * 2, + bodyWidth / 2, tailLength, tailLength)); + Area tailArea = new Area(body[1]); + tailArea.subtract(new Area(body[0])); + body[1] = tailArea; + + body[2] = new Area(new Rectangle2D.Double(centerX + bodyLength / 2, centerY - bodyWidth / 4, tailLength, bodyWidth / 2)); + + body[3] = new Area(new Rectangle2D.Double(centerX + bodyLength / 2 + tailLength, centerY - bodyWidth / 4, tailLength, bodyWidth / 2)); + tailArea = new Area(body[3]); + int radius = bodyLength / 2 + tailLength * 2; + tailArea.intersect(new Area(new Ellipse2D.Double(centerX - radius, centerY - radius, radius * 2, radius * 2))); + body[3] = tailArea; + + // Apply rotation if necessary + double angle = getAngle(); + if (angle != 0) { + AffineTransform rotation = AffineTransform.getRotateInstance(angle, centerX, centerY); + for (int i = 0; i < body.length; i++) { + if (body[i] != null) { + Area area = new Area(body[i]); + area.transform(rotation); + body[i] = area; + } + } + } + + // Create pins. + Area pins = new Area(); + + int pinWidth = (int) PIN_WIDTH.convertToPixels(); + int pinThickness = (int) PIN_THICKNESS.convertToPixels(); + int pinDiameter = (int) PIN_DIAMETER.convertToPixels(); + for (int i = 0; i < getControlPointCount(); i++) { + Point2D point = getControlPoint(i); + Shape pin; + if (mount == Mount.PCB) { + pin = new Ellipse2D.Double(point.getX() - pinDiameter / 2, point.getY() - pinDiameter / 2, pinDiameter, pinDiameter); + } else { + if (orientation == Orientation.DEFAULT || orientation == Orientation._180) { + pin = new Rectangle2D.Double(point.getX() - pinWidth / 2, point.getY() - pinThickness / 2, pinWidth, pinThickness); + } else { + pin = new Rectangle2D.Double(point.getX() - pinThickness / 2, point.getY() - pinWidth / 2, pinThickness, pinWidth); + } + } + pins.add(new Area(pin)); + } + + body[4] = pins; + } + return body; + } + + @Override + public void draw(Graphics2D g2d, ComponentState componentState, boolean outlineMode, Project project, + IDrawingObserver drawingObserver) { + Shape[] body = getBody(); + + g2d.setStroke(ObjectCache.getInstance().fetchBasicStroke(1)); +// if (componentState != ComponentState.DRAGGING) { + 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 : BODY_COLOR); + for (int i = 0; i < body.length - 1; i++) { + // Nut is brighter colored. + if (i == body.length - 2) + g2d.setColor(outlineMode ? Constants.TRANSPARENT_COLOR : NUT_COLOR); + g2d.fill(body[i]); + } + g2d.setComposite(oldComposite); +// } + + Color finalBorderColor; + Theme theme = (Theme) ConfigurationManager.getInstance().readObject(IPlugInPort.THEME_KEY, Constants.DEFAULT_THEME); + if (outlineMode) { + finalBorderColor = theme.getOutlineColor(); + } else { + finalBorderColor = BORDER_COLOR; + } + + drawingObserver.stopTracking(); + + g2d.setColor(finalBorderColor); + for (int i = 0; i < body.length - 1; i++) { + g2d.draw(body[i]); + } + + // Pins are the last piece. + Shape pins = body[body.length - 1]; + if (!outlineMode) { + g2d.setColor(METAL_COLOR); + g2d.fill(pins); + } + g2d.setColor(outlineMode ? theme.getOutlineColor() : METAL_COLOR.darker()); + g2d.draw(pins); + + Color finalLabelColor; + if (outlineMode) { + finalLabelColor = + componentState == ComponentState.SELECTED || componentState == ComponentState.DRAGGING ? LABEL_COLOR_SELECTED + : theme.getOutlineColor(); + } else { + finalLabelColor = + componentState == ComponentState.SELECTED || componentState == ComponentState.DRAGGING ? LABEL_COLOR_SELECTED + : LABEL_COLOR; + } + g2d.setColor(finalLabelColor); + g2d.setFont(project.getFont()); + + // Override font size + if (getFontSizeOverride() != null) + g2d.setFont(g2d.getFont().deriveFont(1f * getFontSizeOverride())); + + double centerX = (controlPoints[0].getX() + controlPoints[3].getX()) / 2; + double centerY = (controlPoints[0].getY() + controlPoints[3].getY()) / 2; + StringUtils.drawCenteredText(g2d, name, centerX, centerY, HorizontalAlignment.CENTER, VerticalAlignment.CENTER); + + drawSelectionOutline(g2d, componentState, outlineMode, project, drawingObserver); + } + + @Override + public void drawIcon(Graphics2D g2d, int width, int height) { + int bodyWidth = getClosestOdd(width * 3 / 5); + int tailWidth = getClosestOdd(width * 3 / 9); + + g2d.setColor(BODY_COLOR); + g2d.fillRoundRect((width - tailWidth) / 2, height / 2, tailWidth, height / 2 - 2 * 32 / height, 4 * 32 / width, + 4 * 32 / width); + g2d.setColor(BORDER_COLOR); + g2d.drawRoundRect((width - tailWidth) / 2, height / 2, tailWidth, height / 2 - 2 * 32 / height, 4 * 32 / width, + 4 * 32 / width); + + g2d.setColor(NUT_COLOR); + g2d.fillRoundRect((width - tailWidth) / 2, 2 * 32 / height, tailWidth, height / 2, 4 * 32 / width, 4 * 32 / width); + g2d.setColor(BORDER_COLOR); + g2d.drawRoundRect((width - tailWidth) / 2, 2 * 32 / height, tailWidth, height / 2, 4 * 32 / width, 4 * 32 / width); + + g2d.setColor(BODY_COLOR); + g2d.fillRect((width - bodyWidth) / 2, height / 7 + 1, bodyWidth, height * 5 / 7); + g2d.setColor(BORDER_COLOR); + g2d.drawRect((width - bodyWidth) / 2, height / 7 + 1, bodyWidth, height * 5 / 7); + + g2d.setColor(METAL_COLOR); + int pinX1 = getClosestOdd((width - bodyWidth * 3 / 4) / 2); + int pinX2 = getClosestOdd((width + bodyWidth * 3 / 4) / 2) - 1; + g2d.drawLine(pinX1, width * 2 / 8, pinX1, width * 3 / 8); + g2d.drawLine(pinX1, width * 5 / 8, pinX1, width * 6 / 8); + g2d.drawLine(pinX2, width * 2 / 8, pinX2, width * 3 / 8); + g2d.drawLine(pinX2, width * 5 / 8, pinX2, width * 6 / 8); + } + + @Override + public int getControlPointCount() { + return controlPoints.length; + } + + @Override + public Point2D getControlPoint(int index) { + return controlPoints[index]; + } + + @Override + public void setControlPoint(Point2D point, int index) { + controlPoints[index].setLocation(point); + body = null; + } + + @Override + public boolean isControlPointSticky(int index) { + return true; + } + + @Override + public VisibilityPolicy getControlPointVisibilityPolicy(int index) { + return VisibilityPolicy.NEVER; + } + + @EditableProperty + @Override + public String getValue() { + return value; + } + + @Override + public void setValue(String value) { + this.value = value; + } + + @EditableProperty + public JackType getType() { + return type; + } + + public void setType(JackType type) { + this.type = type; + updateControlPoints(); + } + + @EditableProperty + public Orientation getOrientation() { + return orientation; + } + + public void setOrientation(Orientation orientation) { + this.orientation = orientation; + updateControlPoints(); + } + + @EditableProperty + public Mount getMount() { + return mount; + } + + public void setMount(Mount mount) { + this.mount = mount; + body = null; + } + + @Override + public boolean canPointMoveFreely(int pointIndex) { + return false; + } + + @Override + public Rectangle2D getCachingBounds() { + Area area = new Area(); + Area[] body = getBody(); + int margin = 20; + for (Area a : body) + if (a != null) + area.add(a); + Rectangle2D bounds = area.getBounds2D(); + return new Rectangle2D.Double(bounds.getX() - margin, bounds.getY() - margin, bounds.getWidth() + 2 * margin, bounds.getHeight() + 2 * margin); + } + + enum Mount { + PCB, Panel + } +} diff --git a/diylc/diylc-swing/lib/diylc-core.jar b/diylc/diylc-swing/lib/diylc-core.jar index 5d7e0976f05be915d9c5c18978a6db8f700cd272..720a6978f475ccc1884a9cda2cba1004b1d0e145 100644 GIT binary patch delta 7160 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 delta 7096 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 u1+244XY>us)NEL7@fJ!TD!n39R0|2