Revision 21100 branches/v2_0_0_prep/libraries/libFMap/src/org/gvsig/fmap/core/geometries/utils/FLabel.java
FLabel.java | ||
---|---|---|
55 | 55 |
import java.awt.geom.Rectangle2D; |
56 | 56 |
|
57 | 57 |
import org.apache.batik.ext.awt.geom.PathLength; |
58 |
import org.gvsig.fmap.core.shapes.FMultiPoint2D;
|
|
59 |
import org.gvsig.fmap.core.shapes.FPoint2D;
|
|
60 |
import org.gvsig.fmap.core.shapes.FShape;
|
|
58 |
import org.gvsig.fmap.geom.aggregate.MultiPoint2D;
|
|
59 |
import org.gvsig.fmap.geom.primitive.FShape;
|
|
60 |
import org.gvsig.fmap.geom.util.Converter;
|
|
61 | 61 |
import org.gvsig.fmap.mapcontext.ViewPort; |
62 | 62 |
import org.gvsig.fmap.mapcontext.rendering.symbols.FGraphicUtilities; |
63 | 63 |
import org.gvsig.fmap.mapcontext.rendering.symbols.FSymbol; |
... | ... | |
299 | 299 |
* |
300 | 300 |
* @return nuevo FLabel creado. |
301 | 301 |
*/ |
302 |
public static FLabel createFLabel(FShape shp) {
|
|
302 |
public static FLabel createFLabel(org.gvsig.fmap.geom.Geometry geom) {
|
|
303 | 303 |
float angle; |
304 |
Point2D pAux = createLabelPoint(shp);
|
|
304 |
Point2D pAux = createLabelPoint(geom);
|
|
305 | 305 |
|
306 | 306 |
FLabel label = new FLabel(); |
307 | 307 |
label.setOrig(pAux); |
308 |
switch (shp.getShapeType()) {
|
|
309 |
case FShape.LINE:
|
|
310 |
case FShape.LINE + FShape.Z:
|
|
311 |
PathLength pathLen = new PathLength(shp);
|
|
308 |
switch (geom.getType()) {
|
|
309 |
case org.gvsig.fmap.geom.Geometry.TYPES.CURVE:
|
|
310 |
case org.gvsig.fmap.geom.Geometry.TYPES.CURVE + org.gvsig.fmap.geom.Geometry.TYPES.Z:
|
|
311 |
PathLength pathLen = new PathLength(geom);
|
|
312 | 312 |
float midDistance = pathLen.lengthOfPath() / 2; |
313 | 313 |
angle = pathLen.angleAtLength(midDistance); |
314 | 314 |
|
... | ... | |
324 | 324 |
|
325 | 325 |
return label; |
326 | 326 |
} |
327 |
public static Point2D createLabelPoint(Shape shp) {
|
|
327 |
public static Point2D createLabelPoint(org.gvsig.fmap.geom.Geometry geom) {
|
|
328 | 328 |
Point2D pAux = null; |
329 |
if (shp instanceof FShape){ |
|
330 |
switch (((FShape)shp).getShapeType()) { |
|
331 |
case FShape.POINT: |
|
332 |
case FShape.POINT + FShape.Z: |
|
333 |
pAux = new Point2D.Double(((FPoint2D) shp).getX(), |
|
334 |
((FPoint2D) shp).getY()); |
|
329 |
switch (geom.getType()) { |
|
330 |
case org.gvsig.fmap.geom.Geometry.TYPES.POINT: |
|
331 |
case org.gvsig.fmap.geom.Geometry.TYPES.POINT + org.gvsig.fmap.geom.Geometry.TYPES.Z: |
|
332 |
pAux = new Point2D.Double(((org.gvsig.fmap.geom.primitive.Point2D) geom).getX(), |
|
333 |
((org.gvsig.fmap.geom.primitive.Point2D) geom).getY()); |
|
335 | 334 |
return pAux; |
336 | 335 |
|
337 |
case FShape.LINE:
|
|
338 |
case FShape.LINE + FShape.Z:
|
|
339 |
PathLength pathLen = new PathLength(shp);
|
|
336 |
case org.gvsig.fmap.geom.Geometry.TYPES.CURVE:
|
|
337 |
case org.gvsig.fmap.geom.Geometry.TYPES.CURVE + org.gvsig.fmap.geom.Geometry.TYPES.Z:
|
|
338 |
PathLength pathLen = new PathLength(geom);
|
|
340 | 339 |
|
341 | 340 |
// if (pathLen.lengthOfPath() < width / mT.getScaleX()) return; |
342 | 341 |
float midDistance = pathLen.lengthOfPath() / 2; |
343 | 342 |
pAux = pathLen.pointAtLength(midDistance); |
344 | 343 |
return pAux; |
345 | 344 |
|
346 |
case FShape.POLYGON:
|
|
347 |
case FShape.POLYGON + FShape.Z:
|
|
348 |
Geometry geo = FConverter.java2d_to_jts((FShape)shp);
|
|
345 |
case org.gvsig.fmap.geom.Geometry.TYPES.SURFACE:
|
|
346 |
case org.gvsig.fmap.geom.Geometry.TYPES.SURFACE + org.gvsig.fmap.geom.Geometry.TYPES.Z:
|
|
347 |
Geometry geo = Converter.java2d_to_jts((FShape)geom);
|
|
349 | 348 |
|
350 | 349 |
if (geo == null) { |
351 | 350 |
return null; |
... | ... | |
354 | 353 |
Point pJTS = geo.getCentroid(); |
355 | 354 |
|
356 | 355 |
if (pJTS != null) { |
357 |
FShape pLabel = FConverter.jts_to_java2d(pJTS);
|
|
358 |
return new Point2D.Double(((FPoint2D) pLabel).getX(),
|
|
359 |
((FPoint2D) pLabel).getY());
|
|
356 |
FShape pLabel = Converter.jts_to_java2d(pJTS); |
|
357 |
return new Point2D.Double(((org.gvsig.fmap.geom.primitive.Point2D) pLabel).getX(),
|
|
358 |
((org.gvsig.fmap.geom.primitive.Point2D) pLabel).getY());
|
|
360 | 359 |
} |
360 |
break; |
|
361 |
case org.gvsig.fmap.geom.Geometry.TYPES.MULTIPOINT: |
|
362 |
int num=((MultiPoint2D)geom).getPrimitivesNumber(); |
|
363 |
Rectangle2D r=null; |
|
364 |
if (num>0){ |
|
365 |
r= ((MultiPoint2D)geom).getPoint(0).getBounds2D(); |
|
366 |
for (int i=1;i<num;i++){ |
|
367 |
org.gvsig.fmap.geom.primitive.Point2D fp=((MultiPoint2D)geom).getPoint(i); |
|
368 |
r.add(new Point2D.Double(fp.getX(),fp.getY())); |
|
369 |
} |
|
370 |
} |
|
371 |
if (r!=null) |
|
372 |
return new Point2D.Double(r.getCenterX(),r.getCenterY()); |
|
373 |
break; |
|
374 |
|
|
361 | 375 |
} // switch |
362 |
}else if (shp instanceof FMultiPoint2D){ |
|
363 |
int num=((FMultiPoint2D)shp).getNumPoints(); |
|
364 |
Rectangle2D r=null; |
|
365 |
if (num>0){ |
|
366 |
r= ((FMultiPoint2D)shp).getPoint(0).getBounds2D(); |
|
367 |
for (int i=1;i<num;i++){ |
|
368 |
FPoint2D fp=((FMultiPoint2D)shp).getPoint(i); |
|
369 |
r.add(new Point2D.Double(fp.getX(),fp.getY())); |
|
370 |
} |
|
371 |
} |
|
372 |
if (r!=null) |
|
373 |
return new Point2D.Double(r.getCenterX(),r.getCenterY()); |
|
374 |
} |
|
375 | 376 |
return null; |
376 | 377 |
} |
377 | 378 |
public void setTypeFont(String t) { |
... | ... | |
425 | 426 |
*/ |
426 | 427 |
public void draw(Graphics2D g, AffineTransform affineTransform, Shape theShape, ISymbol theSymbol) { |
427 | 428 |
FGraphicUtilities.DrawLabel(g, affineTransform, |
428 |
(FShape) theShape, (FSymbol) theSymbol, this);
|
|
429 |
(org.gvsig.fmap.geom.Geometry) theShape, (FSymbol) theSymbol, this);
|
|
429 | 430 |
|
430 | 431 |
|
431 | 432 |
} |
Also available in: Unified diff