Revision 47476 trunk/org.gvsig.desktop/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.lib/org.gvsig.symbology.lib.impl/src/main/java/org/gvsig/symbology/fmap/mapcontext/rendering/symbol/marker/impl/MultiLayerMarkerSymbol.java
MultiLayerMarkerSymbol.java | ||
---|---|---|
30 | 30 |
import java.util.ArrayList; |
31 | 31 |
import java.util.Arrays; |
32 | 32 |
import java.util.List; |
33 |
|
|
34 | 33 |
import org.gvsig.compat.print.PrintAttributes; |
35 | 34 |
import org.gvsig.fmap.dal.feature.Feature; |
36 | 35 |
import org.gvsig.fmap.geom.Geometry; |
37 | 36 |
import org.gvsig.fmap.geom.primitive.Point; |
38 | 37 |
import org.gvsig.fmap.mapcontext.MapContextLocator; |
39 | 38 |
import org.gvsig.fmap.mapcontext.ViewPort; |
39 |
import org.gvsig.fmap.mapcontext.rendering.symbols.CartographicSupport; |
|
40 | 40 |
import org.gvsig.fmap.mapcontext.rendering.symbols.IMultiLayerSymbol; |
41 | 41 |
import org.gvsig.fmap.mapcontext.rendering.symbols.ISymbol; |
42 |
import org.gvsig.fmap.mapcontext.rendering.symbols.SymbolDrawingException; |
|
43 | 42 |
import org.gvsig.fmap.mapcontext.rendering.symbols.SymbolManager; |
44 | 43 |
import org.gvsig.symbology.fmap.mapcontext.rendering.symbol.marker.IMarkerSymbol; |
44 |
import org.gvsig.symbology.fmap.mapcontext.rendering.symbol.marker.IMarkerSymbol_v2; |
|
45 | 45 |
import org.gvsig.symbology.fmap.mapcontext.rendering.symbol.marker.IMultiLayerMarkerSymbol; |
46 | 46 |
import org.gvsig.tools.ToolsLocator; |
47 | 47 |
import org.gvsig.tools.dynobject.DynStruct; |
... | ... | |
139 | 139 |
} |
140 | 140 |
|
141 | 141 |
@Override |
142 |
public void draw(Graphics2D g, AffineTransform affineTransform, |
|
143 |
Geometry geom, Feature feature, Cancellable cancel) { |
|
142 |
public void draw(Graphics2D g, AffineTransform affineTransform, Geometry geom, Feature f, Cancellable cancel, Rectangle r) { |
|
143 |
if(r!=null){ |
|
144 |
geom = this.getSampleGeometry(r); |
|
145 |
} |
|
146 |
|
|
144 | 147 |
Point p; |
145 | 148 |
try { |
146 | 149 |
p = geom.centroid(); |
... | ... | |
150 | 153 |
g.rotate(rotation, p.getX(), p.getY()); |
151 | 154 |
for (int i = 0; (cancel == null || !cancel.isCanceled()) |
152 | 155 |
&& layers != null && i < layers.length; i++) { |
153 |
if (layers[i] == null) { |
|
156 |
IMarkerSymbol layer = layers[i]; |
|
157 |
if (layer == null) { |
|
154 | 158 |
continue; |
155 | 159 |
} |
156 |
layers[i].draw(g, affineTransform, geom, feature, cancel); |
|
160 |
layer.setCartographicContext(this.getCartographicContext()); |
|
161 |
if(layer instanceof IMarkerSymbol_v2){ |
|
162 |
((IMarkerSymbol_v2)layer).draw(g, affineTransform, geom, f, cancel, r); |
|
163 |
} else { |
|
164 |
layer.draw(g, affineTransform, geom, f, cancel); |
|
165 |
} |
|
157 | 166 |
} |
158 | 167 |
g.rotate(-rotation, p.getX(), p.getY()); |
159 | 168 |
} |
160 | 169 |
|
161 |
@Override |
|
162 |
public void drawInsideRectangle(Graphics2D g, AffineTransform scaleInstance, Rectangle r, PrintAttributes properties) throws SymbolDrawingException { |
|
163 |
g.rotate(rotation, r.getCenterX(), r.getCenterY()); |
|
164 |
for (int i = 0; layers != null && i < layers.length; i++) { |
|
165 |
if (layers[i] == null) { |
|
166 |
continue; |
|
167 |
} |
|
168 |
layers[i].drawInsideRectangle(g, scaleInstance, r, properties); |
|
169 |
} |
|
170 |
g.rotate(-rotation, r.getCenterX(), r.getCenterY()); |
|
171 |
} |
|
170 |
// @Override |
|
171 |
// public int getOnePointRgb() { |
|
172 |
// // will paint only the last layer pixel |
|
173 |
// return layers[layers.length - 1].getOnePointRgb(); |
|
174 |
// } |
|
175 |
// |
|
176 |
// @Override |
|
177 |
// public void getPixExtentPlus(Geometry geom, float[] distances, |
|
178 |
// ViewPort viewPort, int dpi) { |
|
179 |
// float[] myDistances = new float[]{0, 0}; |
|
180 |
// distances[0] = 0; |
|
181 |
// distances[1] = 0; |
|
182 |
// for (int i = 0; layers != null && i < layers.length; i++) { |
|
183 |
// if (layers[i] == null) { |
|
184 |
// continue; |
|
185 |
// } |
|
186 |
// layers[i].getPixExtentPlus(geom, myDistances, viewPort, dpi); |
|
187 |
// distances[0] = Math.max(myDistances[0], distances[0]); |
|
188 |
// distances[1] = Math.max(myDistances[1], distances[1]); |
|
189 |
// } |
|
190 |
// } |
|
172 | 191 |
|
173 | 192 |
@Override |
174 |
public int getOnePointRgb() { |
|
175 |
// will paint only the last layer pixel |
|
176 |
return layers[layers.length - 1].getOnePointRgb(); |
|
177 |
} |
|
178 |
|
|
179 |
@Override |
|
180 |
public void getPixExtentPlus(Geometry geom, float[] distances, |
|
181 |
ViewPort viewPort, int dpi) { |
|
182 |
float[] myDistances = new float[]{0, 0}; |
|
183 |
distances[0] = 0; |
|
184 |
distances[1] = 0; |
|
185 |
for (int i = 0; layers != null && i < layers.length; i++) { |
|
186 |
if (layers[i] == null) { |
|
187 |
continue; |
|
188 |
} |
|
189 |
layers[i].getPixExtentPlus(geom, myDistances, viewPort, dpi); |
|
190 |
distances[0] = Math.max(myDistances[0], distances[0]); |
|
191 |
distances[1] = Math.max(myDistances[1], distances[1]); |
|
192 |
} |
|
193 |
} |
|
194 |
|
|
195 |
@Override |
|
196 | 193 |
public ISymbol getSymbolForSelection() { |
197 | 194 |
if (selectionSymbol == null) { |
198 | 195 |
selectionSymbol = new MultiLayerMarkerSymbol(); |
... | ... | |
205 | 202 |
selectionSymbol.setLayer(i, selectionSymbol.getLayer(i).getSymbolForSelection()); |
206 | 203 |
} |
207 | 204 |
} |
205 |
if (selectionSymbol instanceof CartographicSupport) { |
|
206 |
((CartographicSupport) selectionSymbol).setUnit(this.getUnit()); |
|
207 |
} |
|
208 | 208 |
return selectionSymbol; |
209 | 209 |
|
210 | 210 |
} |
... | ... | |
243 | 243 |
|
244 | 244 |
@Override |
245 | 245 |
public ISymbol getLayer(int layerIndex) { |
246 |
// try{ |
|
247 | 246 |
return layers[layerIndex]; |
248 |
// } catch (Exception e) { |
|
249 |
// return null; |
|
250 |
// } |
|
251 | 247 |
} |
252 | 248 |
|
253 | 249 |
@Override |
... | ... | |
266 | 262 |
/*|| newLayer instanceof ILabelStyle)*/ return; // null or symbols that are styles are not allowed |
267 | 263 |
} |
268 | 264 |
|
265 |
if(!(newLayer instanceof IMarkerSymbol_v2)){ |
|
266 |
LOGGER.info("Symbol "+newLayer.getClass().getName()+" does not implement IMarkerSymbol_v2"); |
|
267 |
} |
|
269 | 268 |
IMarkerSymbol newMarker = (IMarkerSymbol) newLayer; |
270 | 269 |
if (getLayerCount() == 0) { |
271 | 270 |
// apply the new layer properties to this multilayer |
... | ... | |
290 | 289 |
throw new IndexOutOfBoundsException(layerIndex + " < 0 or " + layerIndex + " > " + layers.length); |
291 | 290 |
} |
292 | 291 |
List<IMarkerSymbol> newLayers = new ArrayList<>(); |
293 |
for (int i = 0; i < layers.length; i++) { |
|
294 |
newLayers.add(layers[i]); |
|
295 |
} |
|
292 |
newLayers.addAll(Arrays.asList(layers)); |
|
296 | 293 |
try { |
297 | 294 |
newLayers.add(layerIndex, (IMarkerSymbol) newLayer); |
298 |
layers = (IMarkerSymbol[]) newLayers.toArray(new IMarkerSymbol[0]);
|
|
295 |
layers = (IMarkerSymbol[]) newLayers.toArray(new IMarkerSymbol[newLayers.size()]);
|
|
299 | 296 |
} catch (ArrayStoreException asEx) { |
300 | 297 |
throw new ClassCastException(newLayer.getClass().getName() + " is not an IMarkerSymbol"); |
301 | 298 |
} |
Also available in: Unified diff