From e75752ef381ec50368ddb6ca6f64261204563bb0 Mon Sep 17 00:00:00 2001
Date: Wed, 1 Feb 2023 01:22:56 +0100
Subject: [PATCH 1/2] Fix mapcss rotation offset for *-rotation: way
---
.../josm/tools/RotationAngle.java | 22 ++++++++++++++++---
1 file changed, 19 insertions(+), 3 deletions(-)
diff --git a/src/org/openstreetmap/josm/tools/RotationAngle.java b/src/org/openstreetmap/josm/tools/RotationAngle.java
index 491891276..3a9cb02d8 100644
|
a
|
b
|
public interface RotationAngle {
|
| 32 | 32 | return 0; |
| 33 | 33 | } |
| 34 | 34 | final Way w = ways.iterator().next(); |
| | 35 | Double angle = getRotationAngleForNodeOnWay(n, w); |
| | 36 | return angle != null ? angle : 0; |
| | 37 | } |
| | 38 | |
| | 39 | /** |
| | 40 | * Calculates the rotation angle of a node in a way based on the preceding way segment. |
| | 41 | * If the node is the first node in the given way, the angle of the following way segment is used instead. |
| | 42 | * @param n the node to get the rotation angle for |
| | 43 | * @param w the way containing the node |
| | 44 | * @return the rotation angle in radians or null if the way does not contain the node |
| | 45 | * @since xxx |
| | 46 | */ |
| | 47 | public static Double getRotationAngleForNodeOnWay(Node n, Way w) { |
| 35 | 48 | final int idx = w.getNodes().indexOf(n); |
| | 49 | if (idx == -1) { |
| | 50 | return null; |
| | 51 | } |
| 36 | 52 | if (idx == 0) { |
| 37 | | return -Geometry.getSegmentAngle(n.getEastNorth(), w.getNode(idx + 1).getEastNorth()); |
| | 53 | return -(Geometry.getSegmentAngle(n.getEastNorth(), w.getNode(idx + 1).getEastNorth()) - Math.PI/2); |
| 38 | 54 | } else { |
| 39 | | return -Geometry.getSegmentAngle(w.getNode(idx - 1).getEastNorth(), n.getEastNorth()); |
| | 55 | return -(Geometry.getSegmentAngle(w.getNode(idx - 1).getEastNorth(), n.getEastNorth()) - Math.PI/2); |
| 40 | 56 | } |
| 41 | 57 | } |
| 42 | 58 | |
| … |
… |
public interface RotationAngle {
|
| 106 | 122 | /** |
| 107 | 123 | * Calculates the rotation angle depending on the primitive to be displayed. |
| 108 | 124 | * @param p primitive |
| 109 | | * @return rotation angle |
| | 125 | * @return rotation angle in radians, clockwise starting from up/north |
| 110 | 126 | * @since 13623 (signature) |
| 111 | 127 | */ |
| 112 | 128 | double getRotationAngle(IPrimitive p); |