diff flys-artifacts/src/main/java/de/intevation/flys/artifacts/geom/Polygon2D.java @ 1801:6f83d9d434f2

Polygon2D: Generate polygons for trivial cases. flys-artifacts/trunk@3125 c6561f87-3c4e-4783-a992-168aeb5c3f6f
author Sascha L. Teichmann <sascha.teichmann@intevation.de>
date Mon, 31 Oct 2011 17:05:14 +0000
parents 1402991208d5
children 5642a83420f2
line wrap: on
line diff
--- a/flys-artifacts/src/main/java/de/intevation/flys/artifacts/geom/Polygon2D.java	Mon Oct 31 16:04:59 2011 +0000
+++ b/flys-artifacts/src/main/java/de/intevation/flys/artifacts/geom/Polygon2D.java	Mon Oct 31 17:05:14 2011 +0000
@@ -257,28 +257,50 @@
 
                 if (neg) {
                     if (yan > ybn) { // intersection
-                        // TODO: calculate intersection point
-                        // finish polygon and start a new one
+                        Point2D ip = VectorUtils.intersection(
+                            apoints.get(apoints.size()-1), as[ai],
+                            bpoints.get(bpoints.size()-1), bs[bi]);
+                        addCheck(ip, apoints);
+                        addCheck(ip, bpoints);
+                        Polygon2D p = new Polygon2D(
+                            new ArrayList<Point2D>(apoints));
+                        p.addReversed(bpoints);
+                        negatives.add(p);
+                        apoints.clear();
+                        bpoints.clear();
+                        apoints.add(ip);
+                        bpoints.add(ip);
+                        neg = !neg;
                     }
                     else { // no intersection
                         addCheck(as[ai], apoints);
                         addCheck(bs[bi], bpoints);
-                        ++ai;
-                        ++bi;
                     }
                 }
                 else { // not neg
                     if (ybn > yan) { // intersection
-                        // TODO: calculate intersection point
-                        // finish polygon and start a new one
+                        Point2D ip = VectorUtils.intersection(
+                            apoints.get(apoints.size()-1), as[ai],
+                            bpoints.get(bpoints.size()-1), bs[bi]);
+                        addCheck(ip, apoints);
+                        addCheck(ip, bpoints);
+                        Polygon2D p = new Polygon2D(
+                            new ArrayList<Point2D>(apoints));
+                        p.addReversed(bpoints);
+                        positives.add(p);
+                        apoints.clear();
+                        bpoints.clear();
+                        apoints.add(ip);
+                        bpoints.add(ip);
+                        neg = !neg;
                     }
                     else { // no intersection
                         addCheck(as[ai], apoints);
                         addCheck(bs[bi], bpoints);
-                        ++ai;
-                        ++bi;
                     }
                 }
+                ++ai;
+                ++bi;
             }
             else if (xan > xbn) {
                 line.set(apoints.get(apoints.size()-1), as[ai]);
@@ -296,6 +318,12 @@
                         Y(apoints.get(apoints.size()-1)), Y(as[ai]));
                     addCheck(new Point2D.Double(X(bs[bi-1]), ay1), apoints);
                     addCheck(bs[bi-1], bpoints);
+                    Polygon2D p = new Polygon2D(
+                        new ArrayList<Point2D>(apoints));
+                    p.addReversed(bpoints);
+                    apoints.clear();
+                    bpoints.clear();
+                    (neg ? negatives : positives).add(p);
                     break;
                 }
                 else {

http://dive4elements.wald.intevation.org