mirror of
https://github.com/bancika/diy-layout-creator
synced 2026-11-07 12:24:58 +10:00
Add IEC/IEEE schematic symbols for Potentiometer and Fuse (#995)
* Add new IEC and IEEE styles to Fuse symbol * Add IEC style to potentiometer For some reason it refuses to redraw on changing, it must be moved? * Fix redraw on standard selection * Fix indentation * Change draw_style to camelCase drawStyle
This commit is contained in:
@@ -24,6 +24,7 @@ package org.diylc.components.passive;
|
||||
import java.awt.Graphics2D;
|
||||
import java.awt.Shape;
|
||||
import java.awt.geom.Ellipse2D;
|
||||
import java.awt.geom.GeneralPath;
|
||||
import java.awt.geom.Path2D;
|
||||
|
||||
import org.diylc.components.AbstractSchematicLeadedSymbol;
|
||||
@@ -47,6 +48,8 @@ public class FuseSymbol extends AbstractSchematicLeadedSymbol<Current> {
|
||||
|
||||
public static Size DEFAULT_LENGTH = new Size(0.3, SizeUnit.in);
|
||||
public static Size DEFAULT_WIDTH = new Size(0.12, SizeUnit.in);
|
||||
private DrawStyle drawStyle = DrawStyle.ANSI;
|
||||
|
||||
|
||||
private Current value = null;
|
||||
|
||||
@@ -59,6 +62,18 @@ public class FuseSymbol extends AbstractSchematicLeadedSymbol<Current> {
|
||||
this.value = value;
|
||||
}
|
||||
|
||||
@EditableProperty(name = "Draw Standard")
|
||||
public DrawStyle getDrawStandard() {
|
||||
if (drawStyle == null) {
|
||||
drawStyle = DrawStyle.ANSI;
|
||||
}
|
||||
return drawStyle;
|
||||
}
|
||||
|
||||
public void setDrawStandard(DrawStyle drawStyle) {
|
||||
this.drawStyle = drawStyle;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getValueForDisplay() {
|
||||
return getValue() == null ? null : getValue().toString();// + (getPowerNew() == null ? "" : " " + getPowerNew().toString());
|
||||
@@ -93,16 +108,35 @@ public class FuseSymbol extends AbstractSchematicLeadedSymbol<Current> {
|
||||
|
||||
@Override
|
||||
protected Shape getBodyShape() {
|
||||
Path2D polyline = new Path2D.Double();
|
||||
double length = getLength().convertToPixels();
|
||||
double width = getWidth().convertToPixels();
|
||||
double radius = width / 6;
|
||||
polyline.moveTo(2 * radius, width / 2);
|
||||
polyline.curveTo(3 * radius, width, length / 2 - radius, width, length / 2, width / 2);
|
||||
polyline.curveTo(length / 2 + radius, 0, length - 3 * radius, 0, length - 2 * radius, width / 2);
|
||||
polyline.append(new Ellipse2D.Double(0, width / 2 - radius, radius * 2, radius * 2), false);
|
||||
polyline.append(new Ellipse2D.Double(length - radius * 2, width / 2 - radius, radius * 2, radius * 2), false);
|
||||
return polyline;
|
||||
double length = getLength().convertToPixels();
|
||||
if(getDrawStandard() == DrawStyle.ANSI) {
|
||||
Path2D polyline = new Path2D.Double();
|
||||
double radius = width / 6;
|
||||
polyline.moveTo(2 * radius, width / 2);
|
||||
polyline.curveTo(3 * radius, width, length / 2 - radius, width, length / 2, width / 2);
|
||||
polyline.curveTo(length / 2 + radius, 0, length - 3 * radius, 0, length - 2 * radius, width / 2);
|
||||
polyline.append(new Ellipse2D.Double(0, width / 2 - radius, radius * 2, radius * 2), false);
|
||||
polyline.append(new Ellipse2D.Double(length - radius * 2, width / 2 - radius, radius * 2, radius * 2), false);
|
||||
return polyline;
|
||||
} else {
|
||||
GeneralPath fuseshape = new GeneralPath();
|
||||
fuseshape.moveTo(0f, 0f);
|
||||
fuseshape.lineTo(0f, width);
|
||||
fuseshape.lineTo(length, width);
|
||||
fuseshape.lineTo(length, 0f);
|
||||
fuseshape.lineTo(0f, 0f);
|
||||
if (getDrawStandard() == DrawStyle.IEEE) {
|
||||
fuseshape.moveTo(0f, width / 2);
|
||||
fuseshape.lineTo(length, width / 2);
|
||||
} else {
|
||||
fuseshape.moveTo(length * 0.2f, 0f);
|
||||
fuseshape.lineTo(length * 0.2f, width);
|
||||
fuseshape.moveTo(length * 0.8f, 0f);
|
||||
fuseshape.lineTo(length * 0.8f, width);
|
||||
}
|
||||
return fuseshape;
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -110,6 +144,10 @@ public class FuseSymbol extends AbstractSchematicLeadedSymbol<Current> {
|
||||
return false;
|
||||
}
|
||||
|
||||
public enum DrawStyle {
|
||||
ANSI, IEC, IEEE
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isPolarized() {
|
||||
return false;
|
||||
|
||||
+52
-19
@@ -35,6 +35,7 @@ import org.diylc.components.semiconductors.SymbolFlipping;
|
||||
import org.diylc.components.transform.ThreeLegTransformer;
|
||||
import org.diylc.core.IDIYComponent;
|
||||
import org.diylc.core.annotations.ComponentDescriptor;
|
||||
import org.diylc.core.annotations.EditableProperty;
|
||||
import org.diylc.core.annotations.KeywordPolicy;
|
||||
|
||||
@ComponentDescriptor(name = "Potentiometer", author = "MCbx", category = "Schematic Symbols",
|
||||
@@ -44,50 +45,79 @@ import org.diylc.core.annotations.KeywordPolicy;
|
||||
public class PotentiometerSymbol extends Abstract3LegSymbol {
|
||||
|
||||
private static final long serialVersionUID = 1L;
|
||||
private DrawStyle drawStyle = DrawStyle.ANSI;
|
||||
|
||||
public PotentiometerSymbol() {
|
||||
this.color = Color.blue;
|
||||
}
|
||||
|
||||
@EditableProperty(name = "Draw Standard")
|
||||
public DrawStyle getDrawStandard() {
|
||||
if (drawStyle == null) {
|
||||
drawStyle = DrawStyle.ANSI;
|
||||
}
|
||||
return drawStyle;
|
||||
}
|
||||
|
||||
public void setDrawStandard(DrawStyle drawStyle) {
|
||||
this.drawStyle = drawStyle;
|
||||
body = null;
|
||||
}
|
||||
|
||||
public Shape[] getBody() {
|
||||
Shape[] body = new Shape[3];
|
||||
Point2D[] controlPoints = getControlPoints();
|
||||
double x = controlPoints[0].getX();
|
||||
double y = controlPoints[0].getY();
|
||||
int pinSpacing = (int) PIN_SPACING.convertToPixels();
|
||||
|
||||
GeneralPath polyline = new GeneralPath();
|
||||
|
||||
// Draw lead in
|
||||
polyline.moveTo(x + pinSpacing * 2, y - pinSpacing * 2);
|
||||
polyline.lineTo(x + pinSpacing * 2, y - pinSpacing * 2 + pinSpacing / 2);
|
||||
polyline.lineTo(x + pinSpacing * 2 - pinSpacing / 4, (y - pinSpacing * 2) + pinSpacing / 2 + pinSpacing / 4);
|
||||
polyline.lineTo(x + pinSpacing * 2 + pinSpacing / 4, (y - pinSpacing * 2) + 2 * pinSpacing / 2);
|
||||
polyline.lineTo(x + pinSpacing * 2 - pinSpacing / 4, (y - pinSpacing * 2) + 3 * pinSpacing / 2 - pinSpacing / 8);
|
||||
polyline.lineTo(x + pinSpacing * 2 + pinSpacing / 4, (y - pinSpacing * 2) + 4 * pinSpacing / 2 - pinSpacing / 4);
|
||||
polyline.lineTo(x + pinSpacing * 2 - pinSpacing / 4, (y - pinSpacing * 2) + 5 * pinSpacing / 2 - pinSpacing / 3
|
||||
- pinSpacing / 16);
|
||||
polyline.lineTo(x + pinSpacing * 2 + pinSpacing / 4, (y - pinSpacing * 2) + 6 * pinSpacing / 2 - pinSpacing / 2
|
||||
+ pinSpacing / 16);
|
||||
polyline.lineTo(x + pinSpacing * 2 - pinSpacing / 4, (y - pinSpacing * 2) + 7 * pinSpacing / 2 - pinSpacing / 2
|
||||
- pinSpacing / 16);
|
||||
polyline.lineTo(x + pinSpacing * 2 + pinSpacing / 4, (y - pinSpacing * 2) + 7 * pinSpacing / 2 - pinSpacing / 2
|
||||
+ pinSpacing / 4);
|
||||
polyline.lineTo(x + pinSpacing * 2, (y - pinSpacing * 2) + 7 * pinSpacing / 2);
|
||||
polyline.lineTo(x + pinSpacing * 2, y + pinSpacing * 2);
|
||||
|
||||
if (getDrawStandard() == DrawStyle.ANSI) {
|
||||
// Draw ZigZag and lead out
|
||||
polyline.lineTo(x + pinSpacing * 2 - pinSpacing / 4, (y - pinSpacing * 2) + pinSpacing / 2 + pinSpacing / 4);
|
||||
polyline.lineTo(x + pinSpacing * 2 + pinSpacing / 4, (y - pinSpacing * 2) + 2 * pinSpacing / 2);
|
||||
polyline.lineTo(x + pinSpacing * 2 - pinSpacing / 4, (y - pinSpacing * 2) + 3 * pinSpacing / 2 - pinSpacing / 8);
|
||||
polyline.lineTo(x + pinSpacing * 2 + pinSpacing / 4, (y - pinSpacing * 2) + 4 * pinSpacing / 2 - pinSpacing / 4);
|
||||
polyline.lineTo(x + pinSpacing * 2 - pinSpacing / 4, (y - pinSpacing * 2) + 5 * pinSpacing / 2 - pinSpacing / 3
|
||||
- pinSpacing / 16);
|
||||
polyline.lineTo(x + pinSpacing * 2 + pinSpacing / 4, (y - pinSpacing * 2) + 6 * pinSpacing / 2 - pinSpacing / 2
|
||||
+ pinSpacing / 16);
|
||||
polyline.lineTo(x + pinSpacing * 2 - pinSpacing / 4, (y - pinSpacing * 2) + 7 * pinSpacing / 2 - pinSpacing / 2
|
||||
- pinSpacing / 16);
|
||||
polyline.lineTo(x + pinSpacing * 2 + pinSpacing / 4, (y - pinSpacing * 2) + 7 * pinSpacing / 2 - pinSpacing / 2
|
||||
+ pinSpacing / 4);
|
||||
polyline.lineTo(x + pinSpacing * 2, (y - pinSpacing * 2) + 7 * pinSpacing / 2);
|
||||
polyline.lineTo(x + pinSpacing * 2, y + pinSpacing * 2);
|
||||
} else {
|
||||
// Draw a rect and lead out
|
||||
polyline.moveTo(x + pinSpacing * 1.7, y - pinSpacing * 2 + pinSpacing / 2);
|
||||
polyline.lineTo(x + pinSpacing * 2.3, y - pinSpacing * 2 + pinSpacing / 2);
|
||||
polyline.lineTo(x + pinSpacing * 2.3, y + pinSpacing * 2 - pinSpacing / 2);
|
||||
polyline.lineTo(x + pinSpacing * 1.7, y + pinSpacing * 2 - pinSpacing / 2);
|
||||
polyline.lineTo(x + pinSpacing * 1.7, y - pinSpacing * 2 + pinSpacing / 2);
|
||||
|
||||
polyline.moveTo(x + pinSpacing * 2, y + pinSpacing * 2 - pinSpacing / 2);
|
||||
polyline.lineTo(x + pinSpacing * 2, y + pinSpacing * 2);
|
||||
}
|
||||
// The control line
|
||||
polyline.moveTo(x, y);
|
||||
polyline.lineTo(x + pinSpacing * 2 - pinSpacing / 2, y);
|
||||
|
||||
body[1] = polyline;
|
||||
|
||||
polyline = new GeneralPath();
|
||||
|
||||
body[0] = polyline;
|
||||
|
||||
|
||||
// Arrow
|
||||
polyline = new GeneralPath();
|
||||
polyline.moveTo(x + pinSpacing * 2 - pinSpacing / 3, y);
|
||||
polyline.lineTo(x + pinSpacing * 2 - pinSpacing * 2 / 3, y - pinSpacing / 3);
|
||||
polyline.lineTo(x + pinSpacing * 2 - pinSpacing * 2 / 3, y + pinSpacing / 3);
|
||||
polyline.lineTo(x + pinSpacing * 2 - pinSpacing / 3, y);
|
||||
body[2] = polyline;
|
||||
|
||||
return body;
|
||||
}
|
||||
|
||||
@@ -146,4 +176,7 @@ public class PotentiometerSymbol extends Abstract3LegSymbol {
|
||||
height / 2 + 6, height / 2 + 2}, 3));
|
||||
}
|
||||
|
||||
public enum DrawStyle {
|
||||
ANSI, IEC
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user