Modify

Opened 16 years ago

Closed 16 years ago

#741 closed defect (fixed)

Exception when enabling "Draw Segment order numbers"

Reported by: jbuchner@… Owned by: framm
Priority: major Milestone:
Component: Core Version:
Keywords: Cc:

Description

  1. Download map data from bounding box

http://www.openstreetmap.org/index.html?mlat=50.07509763654676&mlon=8.857383728027344&zoom=12

(I think the error will occur with other bb either)

  1. Enable "Draw Segment order numbers" in the display settings.
  1. Exception:
Path: josm
URL: http://www.openstreetmap.de/svn/josm
Repository Root: http://www.openstreetmap.de/svn/josm
Repository UUID: 0c6e7542-c601-0410-84e7-c038aed88b3b
Revision: 631
Node Kind: directory
Last Changed Author: framm
Last Changed Rev: 631
Last Changed Date: 2008-05-11 03:05:11 +0200 (Sun, 11 May 2008)


java.lang.NullPointerException
	at org.openstreetmap.josm.data.osm.visitor.MapPaintVisitor.drawOrderNumber(MapPaintVisitor.java:406)
	at org.openstreetmap.josm.data.osm.visitor.MapPaintVisitor.visit(MapPaintVisitor.java:203)
	at org.openstreetmap.josm.data.osm.Way.visit(Way.java:48)
	at org.openstreetmap.josm.data.osm.visitor.MapPaintVisitor.visitAll(MapPaintVisitor.java:376)
	at org.openstreetmap.josm.gui.layer.OsmDataLayer.paint(OsmDataLayer.java:183)
	at org.openstreetmap.josm.gui.MapView.paint(MapView.java:211)
	at javax.swing.JComponent.paintChildren(JComponent.java:864)
	at javax.swing.JComponent.paint(JComponent.java:1036)
	at javax.swing.JComponent.paintToOffscreen(JComponent.java:5122)
	at javax.swing.BufferStrategyPaintManager.paint(BufferStrategyPaintManager.java:285)
	at javax.swing.RepaintManager.paint(RepaintManager.java:1128)
	at javax.swing.JComponent._paintImmediately(JComponent.java:5070)
	at javax.swing.JComponent.paintImmediately(JComponent.java:4880)
	at javax.swing.RepaintManager.paintDirtyRegions(RepaintManager.java:723)
	at javax.swing.RepaintManager.paintDirtyRegions(RepaintManager.java:679)
	at javax.swing.RepaintManager.seqPaintDirtyRegions(RepaintManager.java:659)
	at javax.swing.SystemEventQueueUtilities$ComponentWorkRequest.run(SystemEventQueueUtilities.java:128)
	at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:209)
	at java.awt.EventQueue.dispatchEvent(EventQueue.java:597)
	at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:273)
	at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:183)
	at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:173)
	at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:168)
	at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:160)
	at java.awt.EventDispatchThread.run(EventDispatchThread.java:121)

Attachments (0)

Change History (2)

comment:1 by dnaber, 16 years ago

This was caused by rendering to a BufferedImage, sorry. I cannot attach the patch (Trac says "TypeError: can't pickle mp_request objects"), so I'm pasting it here:

Index: /home/dnaber/workspace/JOSM/src/org/openstreetmap/josm/data/osm/visitor/MapPaintVisitor.java
===================================================================
--- /home/dnaber/workspace/JOSM/src/org/openstreetmap/josm/data/osm/visitor/MapPaintVisitor.java	(revision 631)
+++ /home/dnaber/workspace/JOSM/src/org/openstreetmap/josm/data/osm/visitor/MapPaintVisitor.java	(working copy)
@@ -8,7 +8,6 @@
 import java.awt.Graphics2D;
 import java.awt.Point;
 import java.awt.Polygon;
-import java.awt.Rectangle;
 import java.awt.Stroke;
 import java.awt.geom.GeneralPath;
 import java.util.Collection;
@@ -29,7 +28,6 @@
 import org.openstreetmap.josm.gui.mappaint.IconElemStyle;
 import org.openstreetmap.josm.gui.mappaint.LineElemStyle;
 import org.openstreetmap.josm.gui.mappaint.MapPaintStyles;
-import org.openstreetmap.josm.tools.ColorHelper;
 
 public class MapPaintVisitor implements Visitor {
 	
@@ -267,11 +265,9 @@
 		Point p1 = nc.getPoint(n1.eastNorth);
 		Point p2 = nc.getPoint(n2.eastNorth);
 
-		// checking if this segment is visible
-		if ((p1.x < 0) && (p2.x < 0)) return ;
-		if ((p1.y < 0) && (p2.y < 0)) return ;
-		if ((p1.x > nc.getWidth()) && (p2.x > nc.getWidth())) return ;
-		if ((p1.y > nc.getHeight()) && (p2.y > nc.getHeight())) return ;
+		if (!isSegmentVisible(p1, p2)) {
+			return;
+		}
 		//if (ls.selected)
 		// col = selectedColor;
 		//g.setColor(col);
@@ -392,26 +388,34 @@
 	}
 	
 	/**
-	 * Draw an number of the order of the two consecutive nodes within the
+	 * Draw a number of the order of the two consecutive nodes within the
 	 * parents way
 	 */
 	protected void drawOrderNumber(Node n1, Node n2, int orderNumber) {
-		int strlen = (""+orderNumber).length();
 		Point p1 = nc.getPoint(n1.eastNorth);
 		Point p2 = nc.getPoint(n2.eastNorth);
+		if (!isSegmentVisible(p1, p2)) {
+			return;
+		}
+		int strlen = (""+orderNumber).length();
 		int x = (p1.x+p2.x)/2 - 4*strlen;
 		int y = (p1.y+p2.y)/2 + 4;
 
-		Rectangle screen = g.getClipBounds();
-		if (screen.contains(x,y)) {
-			Color c = g.getColor();
-			g.setColor(backgroundColor);
-			g.fillRect(x-1, y-12, 8*strlen+1, 14);
-			g.setColor(c);
-			g.drawString(""+orderNumber, x, y);
-		}
+		Color c = g.getColor();
+		g.setColor(backgroundColor);
+		g.fillRect(x-1, y-12, 8*strlen+1, 14);
+		g.setColor(c);
+		g.drawString(""+orderNumber, x, y);
     }
 	
+	private boolean isSegmentVisible(Point p1, Point p2) {
+		if ((p1.x < 0) && (p2.x < 0)) return false;
+		if ((p1.y < 0) && (p2.y < 0)) return false;
+		if ((p1.x > nc.getWidth()) && (p2.x > nc.getWidth())) return false;
+		if ((p1.y > nc.getHeight()) && (p2.y > nc.getHeight())) return false;
+		return true;
+	}
+
 	public void setGraphics(Graphics g) {
     	this.g = g;
     }

comment:2 by anonymous, 16 years ago

Resolution: fixed
Status: newclosed

applied for in r636

Modify Ticket

Change Properties
Set your email in Preferences
Action
as closed The owner will remain framm.
as The resolution will be set.
The resolution will be deleted. Next status will be 'reopened'.

Add Comment


E-mail address and name can be saved in the Preferences .
 
Note: See TracTickets for help on using tickets.