root / trunk / libraries / libFMap / src / com / iver / cit / gvsig / fmap / core / styles / PointLabelPositioneer.java @ 10959
History | View | Annotate | Download (2.44 KB)
1 |
package com.iver.cit.gvsig.fmap.core.styles; |
---|---|
2 |
|
3 |
import java.awt.Color; |
4 |
import java.awt.Font; |
5 |
import java.awt.Graphics2D; |
6 |
import java.awt.Rectangle; |
7 |
import java.awt.RenderingHints; |
8 |
|
9 |
import com.iver.cit.gvsig.fmap.core.FShape; |
10 |
import com.iver.cit.gvsig.fmap.core.symbols.ISymbol; |
11 |
import com.iver.utiles.XMLEntity; |
12 |
|
13 |
public class PointLabelPositioneer extends AbstractStyle { |
14 |
private byte[] preferenceVector = new byte[8]; |
15 |
private static final Color[] colorVector = new Color[] { |
16 |
new Color(140, 140, 140), // gray |
17 |
new Color(140, 245, 130), // green |
18 |
new Color(130, 170, 245), // light blue |
19 |
new Color(100, 100, 255), // dark blue |
20 |
}; |
21 |
|
22 |
public PointLabelPositioneer() {}
|
23 |
|
24 |
public PointLabelPositioneer(byte[] preferenceVector, String description) { |
25 |
this.preferenceVector = preferenceVector;
|
26 |
setDescription(description); |
27 |
} |
28 |
|
29 |
public void drawInsideRectangle(Graphics2D g, Rectangle r) { |
30 |
int size = Math.min(r.width, r.height) / 3; |
31 |
int j = -1; |
32 |
final int fontSize = (int) (size * 0.8); |
33 |
final Font font = new Font("Arial", Font.PLAIN, fontSize); |
34 |
RenderingHints old = g.getRenderingHints();
|
35 |
g.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON); |
36 |
for (int i = 0; i < 9; i++) { |
37 |
if (i == 4) continue; |
38 |
j++; |
39 |
int value = Math.abs(preferenceVector[j] % colorVector.length); |
40 |
int col = i % 3; |
41 |
int row = i / 3; |
42 |
|
43 |
g.setColor(colorVector[value]); |
44 |
g.fillRect(size * col, size*row, size, size); |
45 |
g.setColor(Color.BLACK);
|
46 |
g.drawRect(size * col, size*row, size, size); |
47 |
g.setFont(font); |
48 |
g.drawString(String.valueOf(value),
|
49 |
(float) ((size/2) - (fontSize/4)) + size * col, |
50 |
(float) (size * 0.8) + size*row); |
51 |
} |
52 |
g.setRenderingHints(old); |
53 |
} |
54 |
|
55 |
public boolean isSuitableFor(ISymbol symbol) { |
56 |
return symbol.getSymbolType() == FShape.POINT;
|
57 |
} |
58 |
|
59 |
public String getClassName() { |
60 |
return getClass().getName();
|
61 |
} |
62 |
|
63 |
public XMLEntity getXMLEntity() {
|
64 |
XMLEntity xml = new XMLEntity();
|
65 |
xml.putProperty("desc", getDescription());
|
66 |
StringBuffer sb = new StringBuffer(); |
67 |
for (int i = 0; i < preferenceVector.length; i++) { |
68 |
sb.append(preferenceVector[i]+",");
|
69 |
} |
70 |
String s = sb.substring(0, sb.length()-1); |
71 |
xml.putProperty("preferenceVector", s);
|
72 |
return xml;
|
73 |
} |
74 |
|
75 |
public void setXMLEntity(XMLEntity xml) { |
76 |
setDescription(xml.getStringProperty("desc"));
|
77 |
String[] ss = xml.getStringArrayProperty("preferenceVector"); |
78 |
for (int i = 0; i < ss.length; i++) { |
79 |
preferenceVector[i] = (byte) Integer.parseInt(ss[i]); |
80 |
} |
81 |
} |
82 |
|
83 |
} |