Revision 43002

View differences:

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
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

  
trunk/org.gvsig.desktop/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.jts/src/main/java/org/gvsig/fmap/geom/jts/primitive/curve/arc/AbstractArc.java
483 483
        at.preConcatenate(inverseTranslate);
484 484
        return at;
485 485
    }
486

  
487
    @Override
488
    public boolean canBeTransformed(AffineTransform at) {
489
        return false;
490
    }
491

  
492
    @Override
493
    public boolean canBeReprojected(ICoordTrans ct) {
494
        return false;
495
    }
486 496
}
trunk/org.gvsig.desktop/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.jts/src/main/java/org/gvsig/fmap/geom/jts/primitive/curve/line/AbstractLine.java
553 553
        return cloned;
554 554
    }
555 555

  
556

  
557
    @Override
558
    public boolean canBeTransformed(AffineTransform at) {
559
        return true;
560
    }
561

  
562
    @Override
563
    public boolean canBeReprojected(ICoordTrans ct) {
564
        return true;
565
    }
566

  
556 567
}
trunk/org.gvsig.desktop/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.jts/src/main/java/org/gvsig/fmap/geom/jts/primitive/curve/spline/AbstractSpline.java
558 558
        return coordinates.get(0).equals(coordinates.get(coordinates.size()-1));
559 559
    }
560 560

  
561

  
562
    @Override
563
    public boolean canBeTransformed(AffineTransform at) {
564
        return true;
565
    }
566

  
567
    @Override
568
    public boolean canBeReprojected(ICoordTrans ct) {
569
        return true;
570
    }
571

  
561 572
}
trunk/org.gvsig.desktop/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.jts/src/main/java/org/gvsig/fmap/geom/jts/primitive/surface/ellipticarc/AbstractEllipticArc.java
468 468
        cloned.setPoints(clonedAxis1Start, clonedAxis1End, clonedYDist, this.angSt, this.angExt);
469 469
        return cloned;
470 470
    }
471

  
472

  
473
    @Override
474
    public boolean canBeTransformed(AffineTransform at) {
475
        return false;
476
    }
477

  
478
    @Override
479
    public boolean canBeReprojected(ICoordTrans ct) {
480
        return false;
481
    }
471 482
}
trunk/org.gvsig.desktop/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.jts/src/main/java/org/gvsig/fmap/geom/jts/primitive/surface/ellipse/AbstractEllipse.java
422 422
        return angle;
423 423
    }
424 424

  
425

  
426
    @Override
427
    public boolean canBeTransformed(AffineTransform at) {
428
        return false;
429
    }
430

  
431
    @Override
432
    public boolean canBeReprojected(ICoordTrans ct) {
433
        return false;
434
    }
435

  
425 436
}
trunk/org.gvsig.desktop/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.jts/src/main/java/org/gvsig/fmap/geom/jts/primitive/surface/circle/AbstractCircle.java
422 422
//        throw new UnsupportedOperationException(message);
423 423
    }
424 424

  
425

  
426
    @Override
427
    public boolean canBeTransformed(AffineTransform at) {
428
        return false;
429
    }
430

  
431
    @Override
432
    public boolean canBeReprojected(ICoordTrans ct) {
433
        return false;
434
    }
435

  
425 436
}
trunk/org.gvsig.desktop/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.jts/src/main/java/org/gvsig/fmap/geom/jts/primitive/point/AbstractPoint.java
331 331

  
332 332
    public abstract String toString();
333 333

  
334
    /* (non-Javadoc)
335
     * @see org.gvsig.fmap.geom.Geometry#canBeTransformed(java.awt.geom.AffineTransform)
336
     */
337
    @Override
338
    public boolean canBeTransformed(AffineTransform at) {
339
        return true;
340
    }
341

  
342
    /* (non-Javadoc)
343
     * @see org.gvsig.fmap.geom.Geometry#canBeReprojected(org.cresques.cts.ICoordTrans)
344
     */
345
    @Override
346
    public boolean canBeReprojected(ICoordTrans ct) {
347
        return true;
348
    }
349

  
334 350
}
trunk/org.gvsig.desktop/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.jts/src/main/java/org/gvsig/fmap/geom/jts/primitive/DefaultNullGeometry.java
258 258
        return this;
259 259
    }
260 260

  
261

  
262
    @Override
263
    public boolean canBeTransformed(AffineTransform at) {
264
        return false;
265
    }
266

  
267
    @Override
268
    public boolean canBeReprojected(ICoordTrans ct) {
269
        return false;
270
    }
271

  
261 272
}
trunk/org.gvsig.desktop/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.jts/src/main/java/org/gvsig/fmap/geom/jts/aggregate/AbstractAggregate.java
190 190
        return true;
191 191
    }
192 192

  
193
    /* (non-Javadoc)
194
     * @see org.gvsig.fmap.geom.Geometry#canBeTransformed(java.awt.geom.AffineTransform)
195
     */
196
    @Override
197
    public boolean canBeTransformed(AffineTransform at) {
198
        for (Iterator<Primitive> iterator = primitives.iterator(); iterator.hasNext();) {
199
            GeometryJTS primitive = (GeometryJTS) iterator.next();
200
            if (!primitive.canBeTransformed(at)) {
201
                return false;
202
            };
203
        }
204
        return true;
205
    }
206

  
207
    /* (non-Javadoc)
208
     * @see org.gvsig.fmap.geom.Geometry#canBeReprojected(org.cresques.cts.ICoordTrans)
209
     */
210
    @Override
211
    public boolean canBeReprojected(ICoordTrans ct) {
212
        for (Iterator<Primitive> iterator = primitives.iterator(); iterator.hasNext();) {
213
            GeometryJTS primitive = (GeometryJTS) iterator.next();
214
            if (!primitive.canBeReprojected(ct)) {
215
                return false;
216
            };
217
        }
218
        return true;
219
    }
220

  
193 221
}
trunk/org.gvsig.desktop/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.api/src/main/java/org/gvsig/fmap/geom/Geometry.java
510 510

  
511 511
	public byte[] convertToWKBForcingType(int srs, int type)
512 512
		throws GeometryOperationNotSupportedException, GeometryOperationException;
513
	
513

  
514 514
	/**
515 515
	 * Return a byte array with the equivalent in EWKB format of the Geometry.
516 516
	 *
......
521 521
	 */
522 522
	public byte[] convertToEWKB() throws GeometryOperationNotSupportedException, GeometryOperationException;
523 523

  
524
    public byte[] convertToEWKB(int srs) 
524
    public byte[] convertToEWKB(int srs)
525 525
    		throws GeometryOperationNotSupportedException, GeometryOperationException;
526 526

  
527
    public byte[] convertToEWKBForcingType(int srs, int type) 
527
    public byte[] convertToEWKBForcingType(int srs, int type)
528 528
    		throws GeometryOperationNotSupportedException, GeometryOperationException;
529 529

  
530 530

  
......
891 891
     * @throws GeometryOperationException
892 892
     */
893 893
    public boolean out(Geometry geometry) throws GeometryOperationNotSupportedException, GeometryOperationException;
894

  
895
    /**
896
     * Return true if the geometry can be transformed by the affine transform
897
     *
898
     * @param at the affine transform
899
     * @return
900
     */
901
    public boolean canBeTransformed(AffineTransform at);
902

  
903
    /**
904
     * Return true if the geometry can be reprojected by the coordinate transformation
905
     *
906
     * @param ct the coordinate transformation
907
     * @return
908
     */
909
    public boolean canBeReprojected(ICoordTrans ct);
910

  
894 911
}

Also available in: Unified diff