Ticket #2667: dashpattern2.diff
File dashpattern2.diff, 7.1 KB (added by , 16 years ago) |
---|
-
styles/standard/elemstyles.xml
352 352 <rule> 353 353 <condition k="barrier" v="bollard"/> 354 354 <icon annotate="true" src="vehicle/restriction/bollard.png"/> 355 <line width="3" colour="barrier#F0F050"/>355 <line width="3" colour="barrier#F0F050" dashed="3,10" /> 356 356 <scale_min>1</scale_min> 357 357 <scale_max>50000</scale_max> 358 358 </rule> -
src/org/openstreetmap/josm/gui/mappaint/ElemStyleHandler.java
104 104 else if (atts.getQName(count).equals("dashed")) { 105 105 try 106 106 { 107 line.dashed=Integer.parseInt(atts.getValue(count)); 107 String[] parts = atts.getValue(count).split(","); 108 line.dashed = new float[parts.length]; 109 System.out.println("Dashes read"); 110 for (int i = 0; i < parts.length; i++) { 111 line.dashed[i] = (float)(Integer.parseInt(parts[i])); 112 System.out.println("dash " + line.dashed[i]); 113 } 108 114 } catch (NumberFormatException nfe) { 109 115 boolean dashed=Boolean.parseBoolean(atts.getValue(count)); 110 116 if(dashed) { 111 line.dashed = 9;112 } 117 line.dashed = new float[]{9}; 118 } 113 119 } 114 120 } else if (atts.getQName(count).equals("dashedcolour")) 115 121 line.dashedColor=convertColor(atts.getValue(count)); -
src/org/openstreetmap/josm/gui/mappaint/LineElemStyle.java
8 8 public int width; 9 9 public int realWidth; //the real width of this line in meter 10 10 public Color color; 11 public intdashed;11 public float[] dashed; 12 12 public Color dashedColor; 13 13 14 14 public boolean over; … … 56 56 { 57 57 width = 1; 58 58 realWidth = 0; 59 dashed = 0;59 dashed = new float[0]; 60 60 dashedColor = null; 61 61 priority = 0; 62 62 color = null; -
src/org/openstreetmap/josm/data/osm/visitor/MapPaintVisitor.java
54 54 protected int fillAlpha; 55 55 protected Color untaggedColor; 56 56 protected Color textColor; 57 protected int currentDashed = 0;57 protected float[] currentDashed = new float[0]; 58 58 protected Color currentDashedColor; 59 59 protected int currentWidth = 0; 60 60 protected Stroke currentStroke = null; … … 248 248 boolean showOnlyHeadArrowOnly = showDirection && !w.selected && showHeadArrowOnly; 249 249 int width = defaultSegmentWidth; 250 250 int realWidth = 0; /* the real width of the element in meters */ 251 int dashed = 0;251 float dashed[] = new float[0]; 252 252 Color dashedColor = null; 253 253 Node lastN; 254 254 … … 1114 1114 return name; 1115 1115 } 1116 1116 1117 private void drawSeg(Node n1, Node n2, Color col, boolean showDirection, int width, int dashed, Color dashedColor) {1117 private void drawSeg(Node n1, Node n2, Color col, boolean showDirection, int width, float dashed[], Color dashedColor) { 1118 1118 //profilerSegments++; 1119 if (col != currentColor || width != currentWidth || dashed != currentDashed|| dashedColor != currentDashedColor) {1119 if (col != currentColor || width != currentWidth || !Arrays.equals(dashed,currentDashed) || dashedColor != currentDashedColor) { 1120 1120 displaySegments(col, width, dashed, dashedColor); 1121 1121 } 1122 1122 Point p1 = nc.getPoint(n1.eastNorth); … … 1138 1138 } 1139 1139 1140 1140 protected void displaySegments() { 1141 displaySegments(null, 0, 0, null);1141 displaySegments(null, 0, new float[0], null); 1142 1142 } 1143 1143 1144 protected void displaySegments(Color newColor, int newWidth, int newDash, Color newDashedColor) {1144 protected void displaySegments(Color newColor, int newWidth, float newDash[], Color newDashedColor) { 1145 1145 if (currentPath != null) { 1146 1146 Graphics2D g2d = (Graphics2D)g; 1147 1147 g2d.setColor(inactive ? inactiveColor : currentColor); 1148 1148 if (currentStroke == null && useStrokes > dist) { 1149 if (currentDashed != 0) 1150 g2d.setStroke(new BasicStroke(currentWidth,BasicStroke.CAP_BUTT,BasicStroke.JOIN_ROUND,0,new float[] {currentDashed},0)); 1149 if (currentDashed.length > 0) { 1150 try { 1151 g2d.setStroke(new BasicStroke(currentWidth,BasicStroke.CAP_BUTT,BasicStroke.JOIN_ROUND,0,currentDashed,0)); 1152 } catch (IllegalArgumentException e) { 1153 System.out.println("dashes:"); 1154 for (float f : currentDashed) 1155 System.out.println("dash: " + f); 1156 g2d.setStroke(new BasicStroke(currentWidth,BasicStroke.CAP_ROUND,BasicStroke.JOIN_ROUND)); 1157 } 1158 } 1151 1159 else 1152 1160 g2d.setStroke(new BasicStroke(currentWidth,BasicStroke.CAP_ROUND,BasicStroke.JOIN_ROUND)); 1153 1161 } … … 1156 1164 if(currentDashedColor != null) { 1157 1165 g2d.setColor(currentDashedColor); 1158 1166 if (currentStroke == null && useStrokes > dist) { 1159 if (currentDashed != 0) 1160 g2d.setStroke(new BasicStroke(currentWidth,BasicStroke.CAP_BUTT,BasicStroke.JOIN_ROUND,0,new float[] {currentDashed},currentDashed)); 1167 if (currentDashed.length > 0) { 1168 float[] currentDashedOffset = new float[currentDashed.length]; 1169 System.arraycopy(currentDashed, 1, currentDashedOffset, 0, currentDashed.length - 1); 1170 currentDashedOffset[currentDashed.length-1] = currentDashed[0]; 1171 float offset = currentDashedOffset[0]; 1172 try { 1173 g2d.setStroke(new BasicStroke(currentWidth,BasicStroke.CAP_BUTT,BasicStroke.JOIN_ROUND,0,currentDashedOffset,offset)); 1174 } catch (IllegalArgumentException e) { 1175 g2d.setStroke(new BasicStroke(currentWidth,BasicStroke.CAP_ROUND,BasicStroke.JOIN_ROUND)); 1176 } 1177 } 1161 1178 else 1162 1179 g2d.setStroke(new BasicStroke(currentWidth,BasicStroke.CAP_ROUND,BasicStroke.JOIN_ROUND)); 1163 1180 }