From f7806d4d3cc06fbbac460900c708616635823b6a Mon Sep 17 00:00:00 2001 From: Bane Stojkovic Date: Fri, 26 Dec 2025 12:28:16 +0100 Subject: [PATCH] Added trace Ending Style property --- diylc/diylc-core/src/main/resources/update.xml | 4 ++++ .../components/AbstractLeadedComponent.java | 7 +++++-- .../org/diylc/components/LineEndingStyle.java | 5 +++++ .../components/connectivity/CopperTrace.java | 12 ++++++++++++ .../components/connectivity/CurvedTrace.java | 17 ++++++++++++++--- 5 files changed, 40 insertions(+), 5 deletions(-) create mode 100644 diylc/diylc-library/src/main/java/org/diylc/components/LineEndingStyle.java diff --git a/diylc/diylc-core/src/main/resources/update.xml b/diylc/diylc-core/src/main/resources/update.xml index 41eaa9f1..af36f18a 100644 --- a/diylc/diylc-core/src/main/resources/update.xml +++ b/diylc/diylc-core/src/main/resources/update.xml @@ -425,6 +425,10 @@ 2025-12-21 00:00:00.000 CET + + NEW_FEATURE + Added 'Ending Style' property to 'Copper Trace' and 'Curved Trace' to allow choosing round or flat style + IMPROVEMENT Added configuration for text scale factor in rare cases when system scale factor is not applied correctly; requires adding a configuration property to confix.xml with key 'fontScaleFactor' and a desired float value diff --git a/diylc/diylc-library/src/main/java/org/diylc/components/AbstractLeadedComponent.java b/diylc/diylc-library/src/main/java/org/diylc/components/AbstractLeadedComponent.java index 2994619a..7d23c65c 100644 --- a/diylc/diylc-library/src/main/java/org/diylc/components/AbstractLeadedComponent.java +++ b/diylc/diylc-library/src/main/java/org/diylc/components/AbstractLeadedComponent.java @@ -43,7 +43,6 @@ import org.diylc.common.IPlugInPort; import org.diylc.common.LineStyle; import org.diylc.common.ObjectCache; import org.diylc.common.VerticalAlignment; -import org.diylc.components.AbstractLabeledComponent; import org.diylc.core.ComponentState; import org.diylc.core.IDrawingObserver; import org.diylc.core.Project; @@ -434,7 +433,7 @@ public abstract class AbstractLeadedComponent extends AbstractLabeledComponen Stroke stroke = null; switch (getStyle()) { case SOLID: - stroke = ObjectCache.getInstance().fetchBasicStroke(thickness); + stroke = ObjectCache.getInstance().fetchStroke(thickness, getEndingStyle() == LineEndingStyle.Round ? BasicStroke.CAP_ROUND : BasicStroke.CAP_BUTT); break; case DASHED: stroke = @@ -747,6 +746,10 @@ public abstract class AbstractLeadedComponent extends AbstractLabeledComponen hideShortLeads = false; return hideShortLeads; } + + protected LineEndingStyle getEndingStyle() { + return LineEndingStyle.Round; + } public void setHideShortLeads(Boolean hideShortLeads) { this.hideShortLeads = hideShortLeads; diff --git a/diylc/diylc-library/src/main/java/org/diylc/components/LineEndingStyle.java b/diylc/diylc-library/src/main/java/org/diylc/components/LineEndingStyle.java new file mode 100644 index 00000000..786ee9f9 --- /dev/null +++ b/diylc/diylc-library/src/main/java/org/diylc/components/LineEndingStyle.java @@ -0,0 +1,5 @@ +package org.diylc.components; + +public enum LineEndingStyle { + Round, Flat +} diff --git a/diylc/diylc-library/src/main/java/org/diylc/components/connectivity/CopperTrace.java b/diylc/diylc-library/src/main/java/org/diylc/components/connectivity/CopperTrace.java index 9dd83877..a012649f 100644 --- a/diylc/diylc-library/src/main/java/org/diylc/components/connectivity/CopperTrace.java +++ b/diylc/diylc-library/src/main/java/org/diylc/components/connectivity/CopperTrace.java @@ -28,6 +28,7 @@ import com.bancika.gerberwriter.GerberFunctions; import org.diylc.common.ObjectCache; import org.diylc.common.PCBLayer; import org.diylc.components.AbstractLeadedComponent; +import org.diylc.components.LineEndingStyle; import org.diylc.components.transform.SimpleComponentTransformer; import org.diylc.core.ComponentState; import org.diylc.core.CreationMethod; @@ -58,6 +59,7 @@ public class CopperTrace extends AbstractLeadedComponent implements ILayer private Size thickness = THICKNESS; private PCBLayer layer = PCBLayer._1; + private LineEndingStyle endingStyle = LineEndingStyle.Round; public CopperTrace() { super(); @@ -202,6 +204,16 @@ public class CopperTrace extends AbstractLeadedComponent implements ILayer return false; } + @EditableProperty(name = "Ending Style") + @Override + public LineEndingStyle getEndingStyle() { + return endingStyle; + } + + public void setEndingStyle(LineEndingStyle endingStyle) { + this.endingStyle = endingStyle; + } + @Override public Set getGerberRenderModes() { return EnumSet.of(GerberRenderMode.Normal); diff --git a/diylc/diylc-library/src/main/java/org/diylc/components/connectivity/CurvedTrace.java b/diylc/diylc-library/src/main/java/org/diylc/components/connectivity/CurvedTrace.java index 91c3f39e..94221597 100644 --- a/diylc/diylc-library/src/main/java/org/diylc/components/connectivity/CurvedTrace.java +++ b/diylc/diylc-library/src/main/java/org/diylc/components/connectivity/CurvedTrace.java @@ -17,8 +17,7 @@ */ package org.diylc.components.connectivity; -import java.awt.Color; -import java.awt.Graphics2D; +import java.awt.*; import java.awt.geom.Path2D; import java.util.EnumSet; import java.util.Set; @@ -29,6 +28,8 @@ import org.diylc.common.LineStyle; import org.diylc.common.ObjectCache; import org.diylc.common.PCBLayer; import org.diylc.components.AbstractCurvedComponent; +import org.diylc.components.AbstractLeadedComponent; +import org.diylc.components.LineEndingStyle; import org.diylc.components.transform.SimpleComponentTransformer; import org.diylc.core.ComponentState; import org.diylc.core.IDIYComponent; @@ -58,6 +59,7 @@ public class CurvedTrace extends AbstractCurvedComponent implements ILayer protected Size size = SIZE; private PCBLayer layer = PCBLayer._1; + private LineEndingStyle endingStyle = LineEndingStyle.Round; @Override protected Color getDefaultColor() { @@ -67,7 +69,7 @@ public class CurvedTrace extends AbstractCurvedComponent implements ILayer @Override protected void drawCurve(Path2D curve, Graphics2D g2d, ComponentState componentState, IDrawingObserver drawingObserver) { float thickness = (float) size.convertToPixels(); - g2d.setStroke(ObjectCache.getInstance().fetchBasicStroke(thickness)); + g2d.setStroke(ObjectCache.getInstance().fetchStroke(thickness, getEndingStyle() == LineEndingStyle.Round ? BasicStroke.CAP_ROUND : BasicStroke.CAP_BUTT)); Color curveColor = componentState == ComponentState.SELECTED || componentState == ComponentState.DRAGGING ? SELECTION_COLOR : color; @@ -97,6 +99,15 @@ public class CurvedTrace extends AbstractCurvedComponent implements ILayer public void setLayer(PCBLayer layer) { this.layer = layer; } + + @EditableProperty(name = "Ending Style") + public LineEndingStyle getEndingStyle() { + return endingStyle; + } + + public void setEndingStyle(LineEndingStyle endingStyle) { + this.endingStyle = endingStyle; + } @Override public int getLayerId() {