Revision 43002 trunk/org.gvsig.desktop/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.operation/src/main/java/org/gvsig/fmap/geom/operation/DrawInts.java

View differences:

DrawInts.java
32 32

  
33 33
import org.gvsig.fmap.geom.Geometry;
34 34
import org.gvsig.fmap.geom.Geometry.SUBTYPES;
35
import org.gvsig.fmap.geom.GeometryException;
35 36
import org.gvsig.fmap.geom.GeometryLocator;
36 37
import org.gvsig.fmap.geom.GeometryManager;
38
import org.gvsig.fmap.geom.aggregate.MultiLine;
39
import org.gvsig.fmap.geom.aggregate.MultiPolygon;
40
import org.gvsig.fmap.geom.aggregate.MultiSurface;
37 41
import org.gvsig.fmap.geom.exception.CreateGeometryException;
42
import org.gvsig.fmap.geom.primitive.Curve;
38 43
import org.gvsig.fmap.geom.primitive.GeneralPathX;
44
import org.gvsig.fmap.geom.primitive.Surface;
39 45
import org.gvsig.fmap.geom.type.GeometryType;
40 46
import org.gvsig.fmap.mapcontext.ViewPort;
41 47
import org.gvsig.fmap.mapcontext.rendering.symbols.CartographicSupport;
......
59 65
		ISymbol symbol = doc.getSymbol();
60 66
		Graphics2D g=doc.getGraphics();
61 67
		Cancellable cancel=doc.getCancellable();
62
		//		 make the symbol to resize itself with the current rendering context
63
		try {
64
			if (doc.hasDPI()){
65
				double previousSize = ((CartographicSupport)symbol).
66
				toCartographicSize(viewPort, doc.getDPI(), geom);
67
				// draw it as normally
68
				Geometry decimatedShape = transformToInts(geom, viewPort.getAffineTransform());
68
        try {
69
            if (doc.hasDPI()) {
70
                double previousSize = ((CartographicSupport) symbol).toCartographicSize(viewPort, doc.getDPI(), geom);
71
                // draw it as normally
72
                Geometry transformedGeometry;
73
                transformedGeometry = transformGeometry(geom.cloneGeometry(), viewPort.getAffineTransform());
69 74

  
70
				//the AffineTransform has to be null because the transformToInts method
71
				//reprojects the geometry
72
				symbol.draw(g, null, decimatedShape, doc.getFeature(), cancel);
75
                // the AffineTransform has to be null because the transformToInts method reprojects the geometry
76
                symbol.draw(g, null, transformedGeometry, doc.getFeature(), cancel);
73 77

  
74
				// restore previous size
75
				((CartographicSupport)symbol).setCartographicSize(previousSize, geom);
76
			}else{
77
				Geometry decimatedShape = transformToInts(geom, viewPort.getAffineTransform());
78
				symbol.draw(g, viewPort.getAffineTransform(), decimatedShape,
79
						doc.getFeature(), cancel);
80
			}
81
		} catch (CreateGeometryException e) {
82
			e.printStackTrace();
83
			throw new GeometryOperationException(e);
78
                // restore previous size
79
                ((CartographicSupport) symbol).setCartographicSize(previousSize, geom);
80
            } else {
81
                // Geometry decimatedShape = transformToInts(geom, viewPort.getAffineTransform());
82
                Geometry transformedGeometry = transformGeometry(geom.cloneGeometry(), viewPort.getAffineTransform());
83
                symbol.draw(g, viewPort.getAffineTransform(), transformedGeometry, doc.getFeature(), cancel);
84
            }
85
        } catch (GeometryException e) {
86
		    throw new GeometryOperationException(e);
84 87
		}
85 88

  
86 89
		return null;
87 90
	}
88 91

  
89
	public int getOperationIndex() {
92
	/**
93
     * @param geom
94
     * @param affineTransform
95
     * @return
96
	 * @throws GeometryException
97
     */
98
    private Geometry transformGeometry(Geometry geom, AffineTransform affineTransform) throws GeometryException {
99
        if(geom.canBeTransformed(affineTransform)){
100
            geom.transform(affineTransform);
101
            return geom;
102
        }
103
        if(geom instanceof Curve || geom instanceof Curve){
104
            MultiLine lines = geom.toLines();
105
            lines.transform(affineTransform);
106
            return lines;
107
        }
108
        if(geom instanceof Surface || geom instanceof MultiSurface){
109
            MultiPolygon polygons = geom.toPolygons();
110
            polygons.transform(affineTransform);
111
            return polygons;
112
        }
113
        return null;
114
    }
115

  
116
    public int getOperationIndex() {
90 117
		return CODE;
91 118
	}
92 119

  

Also available in: Unified diff