diff --git a/ diy-layout-creator --username bancika@gmail.com/DIYLC/lib/bancika-gui-framework.jar b/ diy-layout-creator --username bancika@gmail.com/DIYLC/lib/bancika-gui-framework.jar index 71f30d9b..d3374bf4 100644 Binary files a/ diy-layout-creator --username bancika@gmail.com/DIYLC/lib/bancika-gui-framework.jar and b/ diy-layout-creator --username bancika@gmail.com/DIYLC/lib/bancika-gui-framework.jar differ diff --git a/ diy-layout-creator --username bancika@gmail.com/DIYLC/library/main.jar b/ diy-layout-creator --username bancika@gmail.com/DIYLC/library/main.jar index f4ad7e5c..28793104 100644 Binary files a/ diy-layout-creator --username bancika@gmail.com/DIYLC/library/main.jar and b/ diy-layout-creator --username bancika@gmail.com/DIYLC/library/main.jar differ diff --git a/ diy-layout-creator --username bancika@gmail.com/DIYLC/src/org/diylc/common/ResistorColorCode.java b/ diy-layout-creator --username bancika@gmail.com/DIYLC/src/org/diylc/common/ResistorColorCode.java new file mode 100644 index 00000000..2ceaef6e --- /dev/null +++ b/ diy-layout-creator --username bancika@gmail.com/DIYLC/src/org/diylc/common/ResistorColorCode.java @@ -0,0 +1,11 @@ +package org.diylc.common; + +public enum ResistorColorCode { + + _4_BAND, _5_BAND; + + @Override + public String toString() { + return name().substring(1).replace("_", " ").toLowerCase(); + } +} diff --git a/ diy-layout-creator --username bancika@gmail.com/DIYLC/src/org/diylc/core/measures/Resistance.java b/ diy-layout-creator --username bancika@gmail.com/DIYLC/src/org/diylc/core/measures/Resistance.java index b897ace8..4619c9fa 100644 --- a/ diy-layout-creator --username bancika@gmail.com/DIYLC/src/org/diylc/core/measures/Resistance.java +++ b/ diy-layout-creator --username bancika@gmail.com/DIYLC/src/org/diylc/core/measures/Resistance.java @@ -1,9 +1,20 @@ package org.diylc.core.measures; +import java.awt.Color; + +import org.diylc.common.ResistorColorCode; + public class Resistance extends AbstractMeasure { private static final long serialVersionUID = 1L; + private static final Color[] COLOR_DIGITS = new Color[] { Color.black, Color.decode("#8B4513"), + Color.red, Color.orange, Color.yellow, Color.decode("#76EE00"), Color.blue, + Color.decode("#91219E"), Color.lightGray, Color.white }; + private static final Color[] COLOR_MULTIPLIER = new Color[] { Color.lightGray.brighter(), + Color.decode("#FFB90F"), Color.black, Color.decode("#8B4513"), Color.red, Color.orange, + Color.yellow, Color.decode("#76EE00"), Color.blue }; + public Resistance() { super(); // TODO Auto-generated constructor stub @@ -19,6 +30,44 @@ public class Resistance extends AbstractMeasure { return new Resistance(value, unit); } + public Color[] getColorCode(ResistorColorCode resistorColorCode) { + Color[] bands; + double base = getValue() * getUnit().getFactor(); + int multiplier = 0; + while (base > (resistorColorCode == ResistorColorCode._4_BAND ? 99 : 999)) { + multiplier += 1; + base /= 10; + } + while (base < (resistorColorCode == ResistorColorCode._4_BAND ? 10 : 100)) { + multiplier -= 1; + base *= 10; + } + System.out.println("base: " + base + " factor: " + multiplier); + + if (multiplier > 6 || multiplier < -2) { + // Out of range. + return new Color[] {}; + } + switch (resistorColorCode) { + case _4_BAND: + bands = new Color[3]; + bands[0] = COLOR_DIGITS[(int) Math.round(base / 10)]; + bands[1] = COLOR_DIGITS[(int) Math.round(base % 10)]; + bands[2] = COLOR_MULTIPLIER[multiplier + 2]; + break; + case _5_BAND: + bands = new Color[4]; + bands[0] = COLOR_DIGITS[(int) Math.round(base / 100)]; + bands[1] = COLOR_DIGITS[(int) Math.round(base / 10 % 10)]; + bands[2] = COLOR_DIGITS[(int) Math.round(base % 10)]; + bands[3] = COLOR_MULTIPLIER[multiplier + 2]; + break; + default: + bands = new Color[] {}; + } + return bands; + } + public static Resistance parseResistance(String value) { for (ResistanceUnit unit : ResistanceUnit.values()) { if (value.toLowerCase().endsWith(unit.toString().toLowerCase())) { diff --git a/ diy-layout-creator --username bancika@gmail.com/Library/lib/diylc.jar b/ diy-layout-creator --username bancika@gmail.com/Library/lib/diylc.jar index 5ffd2707..ebd0f3ed 100644 Binary files a/ diy-layout-creator --username bancika@gmail.com/Library/lib/diylc.jar and b/ diy-layout-creator --username bancika@gmail.com/Library/lib/diylc.jar differ diff --git a/ diy-layout-creator --username bancika@gmail.com/Library/src/org/diylc/components/passive/Resistor.java b/ diy-layout-creator --username bancika@gmail.com/Library/src/org/diylc/components/passive/Resistor.java index 2b66584c..bb12585b 100644 --- a/ diy-layout-creator --username bancika@gmail.com/Library/src/org/diylc/components/passive/Resistor.java +++ b/ diy-layout-creator --username bancika@gmail.com/Library/src/org/diylc/components/passive/Resistor.java @@ -5,6 +5,8 @@ import java.awt.Graphics2D; import java.awt.Shape; import java.awt.geom.Rectangle2D; +import org.diylc.common.ObjectCache; +import org.diylc.common.ResistorColorCode; import org.diylc.components.AbstractLeadedComponent; import org.diylc.core.CreationMethod; import org.diylc.core.IDIYComponent; @@ -26,6 +28,7 @@ public class Resistor extends AbstractLeadedComponent { public static Color BORDER_COLOR = BODY_COLOR.darker(); private Resistance value = new Resistance(123d, ResistanceUnit.K); + private ResistorColorCode colorCode = ResistorColorCode._5_BAND; public Resistor() { super(); @@ -70,9 +73,32 @@ public class Resistor extends AbstractLeadedComponent { return BORDER_COLOR; } + @EditableProperty(name = "Color code") + public ResistorColorCode getColorCode() { + return colorCode; + } + + public void setColorCode(ResistorColorCode colorCode) { + this.colorCode = colorCode; + } + @Override protected Shape getBodyShape() { return new Rectangle2D.Double(0f, 0f, getWidth().convertToPixels(), getClosestOdd(getHeight().convertToPixels())); } + + @Override + protected void decorateComponentBody(Graphics2D g2d) { + // int width = getWidth().convertToPixels(); + int height = getClosestOdd(getHeight().convertToPixels()); + Color[] bands = value.getColorCode(colorCode); + int x = 4; + g2d.setStroke(ObjectCache.getInstance().fetchBasicStroke(2)); + for (int i = 0; i < bands.length; i++) { + g2d.setColor(bands[i]); + g2d.drawLine(x, 1, x, height - 1); + x += 5; + } + } }