mirror of
https://github.com/bancika/diy-layout-creator
synced 2026-11-10 09:12:09 +10:00
added abstract class for leaded schematic symbols and resistor symbol
This commit is contained in:
Binary file not shown.
+11
@@ -0,0 +1,11 @@
|
|||||||
|
package org.diylc.common;
|
||||||
|
|
||||||
|
public enum LabelPosition {
|
||||||
|
|
||||||
|
ABOVE, BELOW;
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String toString() {
|
||||||
|
return name().substring(0, 1) + name().substring(1).toLowerCase();
|
||||||
|
}
|
||||||
|
}
|
||||||
+15
-9
@@ -63,14 +63,12 @@ public abstract class AbstractLeadedComponent<T> extends AbstractTransparentComp
|
|||||||
double distance = points[0].distance(points[1]);
|
double distance = points[0].distance(points[1]);
|
||||||
Shape shape = getBodyShape();
|
Shape shape = getBodyShape();
|
||||||
if (shape == null) {
|
if (shape == null) {
|
||||||
g2d.setStroke(ObjectCache.getInstance().fetchBasicStroke(
|
g2d.setStroke(ObjectCache.getInstance().fetchBasicStroke(getLeadThickness()));
|
||||||
getLeadThickness().convertToPixels()));
|
|
||||||
g2d.setColor(shouldShadeLeads() ? getLeadColor(componentState).darker()
|
g2d.setColor(shouldShadeLeads() ? getLeadColor(componentState).darker()
|
||||||
: getLeadColor(componentState));
|
: getLeadColor(componentState));
|
||||||
g2d.drawLine(points[0].x, points[0].y, points[1].x, points[1].y);
|
g2d.drawLine(points[0].x, points[0].y, points[1].x, points[1].y);
|
||||||
if (shouldShadeLeads()) {
|
if (shouldShadeLeads()) {
|
||||||
g2d.setStroke(ObjectCache.getInstance().fetchBasicStroke(
|
g2d.setStroke(ObjectCache.getInstance().fetchBasicStroke(getLeadThickness() - 2));
|
||||||
getLeadThickness().convertToPixels() - 2));
|
|
||||||
g2d.setColor(getLeadColor(componentState));
|
g2d.setColor(getLeadColor(componentState));
|
||||||
g2d.drawLine(points[0].x, points[0].y, points[1].x, points[1].y);
|
g2d.drawLine(points[0].x, points[0].y, points[1].x, points[1].y);
|
||||||
}
|
}
|
||||||
@@ -90,8 +88,10 @@ public abstract class AbstractLeadedComponent<T> extends AbstractTransparentComp
|
|||||||
g2d.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_OVER, 1f * alpha
|
g2d.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_OVER, 1f * alpha
|
||||||
/ MAX_ALPHA));
|
/ MAX_ALPHA));
|
||||||
}
|
}
|
||||||
|
if (bodyColor != null) {
|
||||||
g2d.setColor(bodyColor);
|
g2d.setColor(bodyColor);
|
||||||
g2d.fill(shape);
|
g2d.fill(shape);
|
||||||
|
}
|
||||||
decorateComponentBody(g2d);
|
decorateComponentBody(g2d);
|
||||||
g2d.setComposite(oldComposite);
|
g2d.setComposite(oldComposite);
|
||||||
g2d.setStroke(ObjectCache.getInstance().fetchBasicStroke(1));
|
g2d.setStroke(ObjectCache.getInstance().fetchBasicStroke(1));
|
||||||
@@ -99,7 +99,7 @@ public abstract class AbstractLeadedComponent<T> extends AbstractTransparentComp
|
|||||||
|| componentState == ComponentState.DRAGGING ? SELECTION_COLOR : borderColor);
|
|| componentState == ComponentState.DRAGGING ? SELECTION_COLOR : borderColor);
|
||||||
g2d.draw(shape);
|
g2d.draw(shape);
|
||||||
// Draw leads.
|
// Draw leads.
|
||||||
int leadThickness = getClosestOdd(getLeadThickness().convertToPixels());
|
int leadThickness = getClosestOdd(getLeadThickness());
|
||||||
g2d.setStroke(ObjectCache.getInstance().fetchBasicStroke(leadThickness));
|
g2d.setStroke(ObjectCache.getInstance().fetchBasicStroke(leadThickness));
|
||||||
g2d.setColor(shouldShadeLeads() ? getLeadColor(componentState).darker()
|
g2d.setColor(shouldShadeLeads() ? getLeadColor(componentState).darker()
|
||||||
: getLeadColor(componentState));
|
: getLeadColor(componentState));
|
||||||
@@ -123,7 +123,8 @@ public abstract class AbstractLeadedComponent<T> extends AbstractTransparentComp
|
|||||||
drawingObserver.stopTracking();
|
drawingObserver.stopTracking();
|
||||||
// Draw label.
|
// Draw label.
|
||||||
g2d.setFont(LABEL_FONT);
|
g2d.setFont(LABEL_FONT);
|
||||||
g2d.setColor(componentState == ComponentState.SELECTED ? LABEL_COLOR_SELECTED : labelColor);
|
g2d.setColor(componentState == ComponentState.SELECTED
|
||||||
|
|| componentState == ComponentState.DRAGGING ? LABEL_COLOR_SELECTED : labelColor);
|
||||||
FontMetrics fontMetrics = g2d.getFontMetrics();
|
FontMetrics fontMetrics = g2d.getFontMetrics();
|
||||||
String label = display == Display.NAME ? getName() : getValue().toString();
|
String label = display == Display.NAME ? getName() : getValue().toString();
|
||||||
// Adjust label angle if needed to make sure that it's readable.
|
// Adjust label angle if needed to make sure that it's readable.
|
||||||
@@ -133,13 +134,18 @@ public abstract class AbstractLeadedComponent<T> extends AbstractTransparentComp
|
|||||||
}
|
}
|
||||||
Rectangle2D textRect = fontMetrics.getStringBounds(label, g2d);
|
Rectangle2D textRect = fontMetrics.getStringBounds(label, g2d);
|
||||||
g2d.drawString(label, (int) (shapeRect.width - textRect.getWidth()) / 2,
|
g2d.drawString(label, (int) (shapeRect.width - textRect.getWidth()) / 2,
|
||||||
(int) (shapeRect.height - textRect.getHeight()) / 2 + fontMetrics.getAscent());
|
calculateLabelYCoordinate(shapeRect, textRect, fontMetrics));
|
||||||
}
|
}
|
||||||
|
|
||||||
protected void decorateComponentBody(Graphics2D g2d) {
|
protected void decorateComponentBody(Graphics2D g2d) {
|
||||||
// Do nothing.
|
// Do nothing.
|
||||||
}
|
}
|
||||||
|
|
||||||
|
protected int calculateLabelYCoordinate(Rectangle2D shapeRect, Rectangle2D textRect,
|
||||||
|
FontMetrics fontMetrics) {
|
||||||
|
return (int) (shapeRect.getHeight() - textRect.getHeight()) / 2 + fontMetrics.getAscent();
|
||||||
|
}
|
||||||
|
|
||||||
protected boolean shouldShadeLeads() {
|
protected boolean shouldShadeLeads() {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
@@ -165,8 +171,8 @@ public abstract class AbstractLeadedComponent<T> extends AbstractTransparentComp
|
|||||||
/**
|
/**
|
||||||
* @return default lead thickness. Override this method to change it.
|
* @return default lead thickness. Override this method to change it.
|
||||||
*/
|
*/
|
||||||
protected Size getLeadThickness() {
|
protected int getLeadThickness() {
|
||||||
return LEAD_THICKNESS;
|
return LEAD_THICKNESS.convertToPixels();
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
+72
@@ -0,0 +1,72 @@
|
|||||||
|
package org.diylc.components;
|
||||||
|
|
||||||
|
import java.awt.Color;
|
||||||
|
import java.awt.FontMetrics;
|
||||||
|
import java.awt.geom.Rectangle2D;
|
||||||
|
|
||||||
|
import org.diylc.common.LabelPosition;
|
||||||
|
import org.diylc.core.ComponentState;
|
||||||
|
import org.diylc.core.annotations.EditableProperty;
|
||||||
|
|
||||||
|
public abstract class AbstractSchematicLeadedSymbol<T> extends AbstractLeadedComponent<T> {
|
||||||
|
|
||||||
|
private static final long serialVersionUID = 1L;
|
||||||
|
|
||||||
|
public static Color COLOR = Color.blue;
|
||||||
|
public static Color LEAD_COLOR = Color.black;
|
||||||
|
|
||||||
|
protected LabelPosition labelPosition = LabelPosition.ABOVE;
|
||||||
|
|
||||||
|
public AbstractSchematicLeadedSymbol() {
|
||||||
|
super();
|
||||||
|
// We don't want to fill the body, so use null.
|
||||||
|
this.bodyColor = null;
|
||||||
|
this.borderColor = COLOR;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Color getBodyColor() {
|
||||||
|
return super.getBodyColor();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected boolean shouldShadeLeads() {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected int getLeadThickness() {
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected int calculateLabelYCoordinate(Rectangle2D shapeRect, Rectangle2D textRect,
|
||||||
|
FontMetrics fontMetrics) {
|
||||||
|
if (labelPosition == LabelPosition.ABOVE) {
|
||||||
|
return -1;
|
||||||
|
} else {
|
||||||
|
return (int) (shapeRect.getHeight() + textRect.getHeight() - 1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@EditableProperty(name = "Label position")
|
||||||
|
public LabelPosition getLabelPosition() {
|
||||||
|
return labelPosition;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
@EditableProperty(name = "Color")
|
||||||
|
public Color getBorderColor() {
|
||||||
|
return super.getBorderColor();
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setLabelPosition(LabelPosition labelPosition) {
|
||||||
|
this.labelPosition = labelPosition;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected Color getLeadColor(ComponentState componentState) {
|
||||||
|
return componentState == ComponentState.SELECTED
|
||||||
|
|| componentState == ComponentState.DRAGGING ? SELECTION_COLOR : LEAD_COLOR;
|
||||||
|
}
|
||||||
|
}
|
||||||
Binary file not shown.
+11
-7
@@ -24,7 +24,7 @@ public class CopperTrace extends AbstractLeadedComponent<Void> {
|
|||||||
public static Color COLOR = Color.black;
|
public static Color COLOR = Color.black;
|
||||||
|
|
||||||
private Color leadColor = COLOR;
|
private Color leadColor = COLOR;
|
||||||
private Size leadThickness = THICKNESS;
|
private Size thickness = THICKNESS;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void drawIcon(Graphics2D g2d, int width, int height) {
|
public void drawIcon(Graphics2D g2d, int width, int height) {
|
||||||
@@ -53,14 +53,18 @@ public class CopperTrace extends AbstractLeadedComponent<Void> {
|
|||||||
this.leadColor = leadColor;
|
this.leadColor = leadColor;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@EditableProperty(name = "Width")
|
||||||
@EditableProperty(name = "Thickness")
|
public Size getThickness() {
|
||||||
public Size getLeadThickness() {
|
return thickness;
|
||||||
return leadThickness;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setLeadThickness(Size leadThickness) {
|
public void setThickness(Size thickness) {
|
||||||
this.leadThickness = leadThickness;
|
this.thickness = thickness;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected int getLeadThickness() {
|
||||||
|
return getThickness().convertToPixels();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
+74
@@ -0,0 +1,74 @@
|
|||||||
|
package org.diylc.components.passive;
|
||||||
|
|
||||||
|
import java.awt.Graphics2D;
|
||||||
|
import java.awt.Shape;
|
||||||
|
import java.awt.geom.GeneralPath;
|
||||||
|
|
||||||
|
import org.diylc.components.AbstractSchematicLeadedSymbol;
|
||||||
|
import org.diylc.core.CreationMethod;
|
||||||
|
import org.diylc.core.IDIYComponent;
|
||||||
|
import org.diylc.core.annotations.ComponentDescriptor;
|
||||||
|
import org.diylc.core.annotations.EditableProperty;
|
||||||
|
import org.diylc.core.measures.Resistance;
|
||||||
|
import org.diylc.core.measures.ResistanceUnit;
|
||||||
|
import org.diylc.core.measures.Size;
|
||||||
|
import org.diylc.core.measures.SizeUnit;
|
||||||
|
|
||||||
|
@ComponentDescriptor(name = "Resistor (schematic symbol)", author = "Branislav Stojkovic", category = "Passive", creationMethod = CreationMethod.POINT_BY_POINT, instanceNamePrefix = "R", description = "", zOrder = IDIYComponent.COMPONENT)
|
||||||
|
public class ResistorSymbol extends AbstractSchematicLeadedSymbol<Resistance> {
|
||||||
|
|
||||||
|
private static final long serialVersionUID = 1L;
|
||||||
|
|
||||||
|
public static Size DEFAULT_LENGTH = new Size(0.3, SizeUnit.in);
|
||||||
|
public static Size DEFAULT_WIDTH = new Size(0.08, SizeUnit.in);
|
||||||
|
|
||||||
|
private Resistance value = new Resistance(100d, ResistanceUnit.K);
|
||||||
|
|
||||||
|
@EditableProperty
|
||||||
|
public Resistance getValue() {
|
||||||
|
return value;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setValue(Resistance value) {
|
||||||
|
this.value = value;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void drawIcon(Graphics2D g2d, int width, int height) {
|
||||||
|
g2d.rotate(-Math.PI / 4, width / 2, height / 2);
|
||||||
|
g2d.setColor(LEAD_COLOR);
|
||||||
|
g2d.drawLine(0, height / 2, 4, height / 2);
|
||||||
|
g2d.drawLine(width - 4, height / 2, width, height / 2);
|
||||||
|
g2d.setColor(COLOR);
|
||||||
|
g2d.drawPolyline(new int[] { 4, 6, 10, 14, 18, 22, 26, 28 }, new int[] { height / 2,
|
||||||
|
height / 2 + 2, height / 2 - 2, height / 2 + 2, height / 2 - 2, height / 2 + 2,
|
||||||
|
height / 2 - 2, height / 2 }, 8);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected Size getDefaultWidth() {
|
||||||
|
return DEFAULT_WIDTH;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected Size getDefaultLength() {
|
||||||
|
return DEFAULT_LENGTH;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected Shape getBodyShape() {
|
||||||
|
GeneralPath polyline = new GeneralPath();
|
||||||
|
double length = getLength().convertToPixels();
|
||||||
|
double width = getWidth().convertToPixels();
|
||||||
|
polyline.moveTo(0, width / 2);
|
||||||
|
polyline.lineTo(length / 16, width);
|
||||||
|
polyline.lineTo(3 * length / 16, 0);
|
||||||
|
polyline.lineTo(5 * length / 16, width);
|
||||||
|
polyline.lineTo(7 * length / 16, 0);
|
||||||
|
polyline.lineTo(9 * length / 16, width);
|
||||||
|
polyline.lineTo(11 * length / 16, 0);
|
||||||
|
polyline.lineTo(13 * length / 16, width);
|
||||||
|
polyline.lineTo(15 * length / 16, 0);
|
||||||
|
polyline.lineTo(length, width / 2);
|
||||||
|
return polyline;
|
||||||
|
}
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user