Loading files that contain lines with end arrows sometimes produces errors in the log and lines not to be loaded

This commit is contained in:
Bane Stojkovic
2025-02-13 20:15:30 +01:00
parent 6c62484b48
commit cd2f6fe417
2 changed files with 19 additions and 10 deletions
@@ -4486,6 +4486,10 @@
<changeType>BUG_FIX</changeType> <changeType>BUG_FIX</changeType>
<description>Fixed null pointer exceptions when trying to add components to the layout in some cases</description> <description>Fixed null pointer exceptions when trying to add components to the layout in some cases</description>
</org.diylc.appframework.update.Change> </org.diylc.appframework.update.Change>
<org.diylc.appframework.update.Change>
<changeType>BUG_FIX</changeType>
<description>Loading files that contain lines with end arrows sometimes produces errors in the log and lines not to be loaded</description>
</org.diylc.appframework.update.Change>
</changes> </changes>
<url>https://github.com/bancika/diy-layout-creator/releases</url> <url>https://github.com/bancika/diy-layout-creator/releases</url>
</org.diylc.appframework.update.Version> </org.diylc.appframework.update.Version>
@@ -60,10 +60,13 @@ public class Line extends AbstractLeadedComponent<Void> {
private Size thickness = new Size(1d, SizeUnit.px); private Size thickness = new Size(1d, SizeUnit.px);
private Size arrowSize = new Size(5d, SizeUnit.px); private Size arrowSize = new Size(5d, SizeUnit.px);
private Polygon arrow = null; private Polygon arrow = null;
private AffineTransform arrowTx = new AffineTransform();
private boolean arrowStart = false; private boolean arrowStart = false;
private boolean arrowEnd = false; private boolean arrowEnd = false;
@SuppressWarnings("unused")
@Deprecated
private transient AffineTransform arrowTx;
@Override @Override
public void drawIcon(Graphics2D g2d, int width, int height) { public void drawIcon(Graphics2D g2d, int width, int height) {
g2d.setStroke(ObjectCache.getInstance().fetchBasicStroke(1)); g2d.setStroke(ObjectCache.getInstance().fetchBasicStroke(1));
@@ -95,13 +98,15 @@ public class Line extends AbstractLeadedComponent<Void> {
Point2D startPoint = new Point2D.Double(first.getX(), first.getY()); Point2D startPoint = new Point2D.Double(first.getX(), first.getY());
Point2D endPoint = new Point2D.Double(second.getX(), second.getY()); Point2D endPoint = new Point2D.Double(second.getX(), second.getY());
AffineTransform arrowPosTx = new AffineTransform();
if (arrowStart) { if (arrowStart) {
arrowTx.setToIdentity(); arrowPosTx.setToIdentity();
double angle = Math.atan2(getControlPoint(1).getY() - getControlPoint(0).getY(), getControlPoint(1).getX() - getControlPoint(0).getX()); double angle = Math.atan2(getControlPoint(1).getY() - getControlPoint(0).getY(), getControlPoint(1).getX() - getControlPoint(0).getX());
arrowTx.translate(getControlPoint(0).getX(), getControlPoint(0).getY()); arrowPosTx.translate(getControlPoint(0).getX(), getControlPoint(0).getY());
arrowTx.rotate((angle + Math.PI / 2d)); arrowPosTx.rotate((angle + Math.PI / 2d));
AffineTransform oldTx = g2d.getTransform(); AffineTransform oldTx = g2d.getTransform();
g2d.transform(arrowTx); g2d.transform(arrowPosTx);
g2d.fill(getArrow()); g2d.fill(getArrow());
g2d.setTransform(oldTx); g2d.setTransform(oldTx);
@@ -110,12 +115,12 @@ public class Line extends AbstractLeadedComponent<Void> {
interpolate(startPoint, endPoint, getArrowSize().convertToPixels() * 0.9 / distance, startPoint); interpolate(startPoint, endPoint, getArrowSize().convertToPixels() * 0.9 / distance, startPoint);
} }
if (arrowEnd) { if (arrowEnd) {
arrowTx.setToIdentity(); arrowPosTx.setToIdentity();
double angle = Math.atan2(getControlPoint(1).getY() - getControlPoint(0).getY(), getControlPoint(1).getX() - getControlPoint(0).getX()); double angle = Math.atan2(getControlPoint(1).getY() - getControlPoint(0).getY(), getControlPoint(1).getX() - getControlPoint(0).getX());
arrowTx.translate(getControlPoint(1).getX(), getControlPoint(1).getY()); arrowPosTx.translate(getControlPoint(1).getX(), getControlPoint(1).getY());
arrowTx.rotate((angle - Math.PI / 2d)); arrowPosTx.rotate((angle - Math.PI / 2d));
AffineTransform oldTx = g2d.getTransform(); AffineTransform oldTx = g2d.getTransform();
g2d.transform(arrowTx); g2d.transform(arrowPosTx);
g2d.fill(getArrow()); g2d.fill(getArrow());
g2d.setTransform(oldTx); g2d.setTransform(oldTx);