diff --git a/diylc/diylc-library/src/org/diylc/components/passive/AirCoreInductor.java b/diylc/diylc-library/src/org/diylc/components/passive/AirCoreInductor.java
new file mode 100644
index 00000000..17d6a5ad
--- /dev/null
+++ b/diylc/diylc-library/src/org/diylc/components/passive/AirCoreInductor.java
@@ -0,0 +1,158 @@
+/*
+ *
+ * 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.passive;
+
+import java.awt.Color;
+import java.awt.Graphics2D;
+import java.awt.Rectangle;
+import java.awt.Shape;
+import java.awt.Stroke;
+import java.awt.geom.Area;
+import java.awt.geom.Line2D;
+import java.awt.geom.Rectangle2D;
+
+import org.diylc.common.ObjectCache;
+import org.diylc.components.AbstractLeadedComponent;
+import org.diylc.core.annotations.EditableProperty;
+import org.diylc.core.annotations.PositiveMeasureValidator;
+import org.diylc.core.measures.Inductance;
+import org.diylc.core.measures.Resistance;
+import org.diylc.core.measures.Size;
+import org.diylc.core.measures.SizeUnit;
+
+//@ComponentDescriptor(name = "Air-Core Inductor", author = "Branislav Stojkovic", category = "Passive",
+// creationMethod = CreationMethod.POINT_BY_POINT, instanceNamePrefix = "L",
+// description = "Air-core inductor mounted horizontally or vertically", zOrder = IDIYComponent.COMPONENT,
+// transformer = SimpleComponentTransformer.class)
+public class AirCoreInductor extends AbstractLeadedComponent {
+
+ private static final long serialVersionUID = 1L;
+
+ public static Size DEFAULT_WIDTH = new Size(8d, SizeUnit.mm);
+ public static Size DEFAULT_HEIGHT = new Size(14d, SizeUnit.mm);
+ public static Color BODY_COLOR = new Color(0, 0, 0, 0);
+ public static Color LABEL_COLOR = Color.white;
+ public static Color BORDER_COLOR = BODY_COLOR;
+ public static int BAND_SPACING = 5;
+ public static int FIRST_BAND = -4;
+
+ private Inductance value = null;
+ private Resistance resistance = null;
+
+ public AirCoreInductor() {
+ super();
+ this.bodyColor = BODY_COLOR;
+ this.borderColor = BORDER_COLOR;
+ this.leadColor = COPPER_COLOR;
+ this.labelColor = LABEL_COLOR;
+ }
+
+ @Override
+ protected boolean supportsStandingMode() {
+ return false;
+ }
+
+ @EditableProperty(validatorClass = PositiveMeasureValidator.class)
+ public Inductance getValue() {
+ return value;
+ }
+
+ public void setValue(Inductance value) {
+ this.value = value;
+ }
+
+ @Override
+ public String getValueForDisplay() {
+ return getValue().toString();
+ }
+
+ public void drawIcon(Graphics2D g2d, int width, int height) {
+ g2d.rotate(-Math.PI / 4, width / 2, height / 2);
+ g2d.setColor(COPPER_COLOR);
+ g2d.drawLine(0, height / 2, width, height / 2);
+ g2d.setColor(BODY_COLOR);
+ Rectangle2D a = new Rectangle2D.Double(width / 2 - 5, 6, 10, height - 14);
+ g2d.fill(a);
+ g2d.setColor(BORDER_COLOR);
+ g2d.draw(a);
+ g2d.setColor(COPPER_COLOR);
+ g2d.setStroke(ObjectCache.getInstance().fetchBasicStroke(1f));
+ for (int i = 0; i < 9; i++) {
+ g2d.drawLine(width / 2 - 5, 7 + 2 * i, width / 2 + 5, 7 + 2 * i);
+ }
+ }
+
+ @Override
+ protected Size getDefaultWidth() {
+ return DEFAULT_HEIGHT;
+ }
+
+ @Override
+ protected Size getDefaultLength() {
+ return DEFAULT_WIDTH;
+ }
+
+
+ @Override
+ protected Shape getBodyShape() {
+ double width = getWidth().convertToPixels();
+ double length = getLength().convertToPixels();
+ return new Rectangle2D.Double(0f, 0f, length, getClosestOdd(width));
+ }
+
+ @Override
+ protected boolean decorateAboveBorder() {
+ return true;
+ }
+
+ @Override
+ protected void decorateComponentBody(Graphics2D g2d, boolean outlineMode) {
+ if (outlineMode)
+ return;
+ Area body = new Area(getBodyShape());
+ int leadThickness = (int) getLeadThickness();
+ Stroke stroke = ObjectCache.getInstance().fetchBasicStroke(leadThickness / 2);
+ Rectangle rect = body.getBounds();
+ Area copper = new Area();
+ for (double x = leadThickness / 2; x < rect.width; x += leadThickness * 0.7d) {
+ double margin = 0;
+ Line2D line = new Line2D.Double(x, -margin, x, rect.height + margin);
+ Shape s = stroke.createStrokedShape(line);
+ copper.add(new Area(s));
+ }
+// copper.intersect(body);
+ g2d.setColor(COPPER_COLOR);
+ g2d.fill(copper);
+ g2d.setColor(COPPER_COLOR.darker());
+ g2d.draw(copper);
+ }
+
+ @Deprecated
+ public boolean getFlipStanding() {
+ return super.getFlipStanding();
+ }
+
+ @EditableProperty
+ public Resistance getResistance() {
+ return resistance;
+ }
+
+ public void setResistance(Resistance resistance) {
+ this.resistance = resistance;
+ }
+}
diff --git a/diylc/diylc-swing/build.xml b/diylc/diylc-swing/build.xml
index 81c1ee0b..dadc6ec8 100644
--- a/diylc/diylc-swing/build.xml
+++ b/diylc/diylc-swing/build.xml
@@ -7,7 +7,7 @@
-
+
diff --git a/diylc/diylc-swing/update.xml b/diylc/diylc-swing/update.xml
index 3dc24ded..770c0486 100644
--- a/diylc/diylc-swing/update.xml
+++ b/diylc/diylc-swing/update.xml
@@ -2391,7 +2391,7 @@
53
0
- 2019-02-03 00:00:00.000 CET
+ 2019-02-09 00:00:00.000 CET
@@ -2400,7 +2400,7 @@
NEW_FEATURE
- Ability to export and import building blocks and variants from the File menu
+ Ability to export and import building blocks and variants from the "File" menu
NEW_FEATURE
@@ -2440,7 +2440,7 @@
BUG_FIX
- Drag&Drop from the tree sometimes picks up a wrong component type
+ Drag&Drop from the component tree sometimes picks up a wrong component type
BUG_FIX