Revision 40664

View differences:

trunk/org.gvsig.desktop/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.operation/src/main/java/org/gvsig/fmap/geom/operation/fromwkt/WKTParser.java
30 30
import java.util.ArrayList;
31 31

  
32 32
import org.gvsig.fmap.geom.Geometry;
33
import org.gvsig.fmap.geom.GeometryException;
33 34
import org.gvsig.fmap.geom.GeometryLocator;
34 35
import org.gvsig.fmap.geom.GeometryManager;
35 36
import org.gvsig.fmap.geom.Geometry.SUBTYPES;
......
38 39
import org.gvsig.fmap.geom.aggregate.MultiPoint;
39 40
import org.gvsig.fmap.geom.aggregate.MultiSurface;
40 41
import org.gvsig.fmap.geom.exception.CreateGeometryException;
42
import org.gvsig.fmap.geom.operation.GeometryOperationException;
41 43
import org.gvsig.fmap.geom.primitive.Curve;
42 44
import org.gvsig.fmap.geom.primitive.GeneralPathX;
43 45
import org.gvsig.fmap.geom.primitive.Point;
44 46
import org.gvsig.fmap.geom.primitive.Surface;
47
import org.gvsig.tools.exception.BaseException;
45 48

  
46 49
import com.vividsolutions.jts.geom.Coordinate;
47 50
import com.vividsolutions.jts.io.ParseException;
......
470 473
		if (nextToken.equals("EMPTY")) {
471 474
			return null;
472 475
		}
473
		ArrayList holes = new ArrayList();
476

  
474 477
		Surface shell = readLinearRingText(tokenizer);
478
		Surface hole = null;
475 479
		nextToken = getNextCloserOrComma(tokenizer);
476
		while (nextToken.equals(",")) {
477
			Geometry hole = readLinearRingText(tokenizer);
478
			holes.add(hole);
479
			nextToken = getNextCloserOrComma(tokenizer);
480
		
481
		try {
482
			while (nextToken.equals(",")) {
483
				hole = readLinearRingText(tokenizer);
484
				if (shell.contains(hole)) {
485
					shell = (Surface) shell.difference(hole);
486
				} else {
487
					throw new CreateGeometryException(
488
							Geometry.TYPES.SURFACE,
489
							Geometry.SUBTYPES.GEOM2D,
490
							new Exception("Hole not in shell."));
491
					
492
				}
493
				nextToken = getNextCloserOrComma(tokenizer);
494
			}
495
		} catch (BaseException ge) {
496
			throw new CreateGeometryException(
497
					Geometry.TYPES.SURFACE,
498
					Geometry.SUBTYPES.GEOM2D, ge);
480 499
		}
481
		// LinearRing[] array = new LinearRing[holes.size()];
482 500
		return shell; //geometryFactory.createPolygon(shell, (LinearRing[]) holes.toArray(array));
483 501
	}
484 502

  

Also available in: Unified diff