Browse Source

Vlib: fix isle/area check

git-svn-id: https://svn.osgeo.org/grass/grass/trunk@55643 15284696-431f-4ddb-bdfa-cd5b030d7da7
Markus Metz 12 years ago
parent
commit
57dd4f5fdd
1 changed files with 7 additions and 5 deletions
  1. 7 5
      lib/vector/Vlib/copy.c

+ 7 - 5
lib/vector/Vlib/copy.c

@@ -349,16 +349,18 @@ int is_isle(const struct Map_info *Map, int area)
     Vect_get_area_boundaries(Map, area, List);
     Vect_get_area_boundaries(Map, area, List);
 
 
     is_isle = FALSE;
     is_isle = FALSE;
-    /* do we need to check all boundaries ? */
+    /* do we need to check all boundaries ? no */
     for (i = 0; i < List->n_values && !is_isle; i++) {
     for (i = 0; i < List->n_values && !is_isle; i++) {
-        line = abs(List->value[i]);
-        if (1 != Vect_get_line_areas(Map, line, &left, &right))
+        line = List->value[i];
+        if (1 != Vect_get_line_areas(Map, abs(line), &left, &right))
             continue;
             continue;
         
         
-        isle = abs(left == area ? right : left);
+        isle = line > 0 ? right : left;
         
         
-        if (Vect_get_isle_area(Map, isle) > 0)
+        if (isle < 0 && Vect_get_isle_area(Map, abs(isle)) > 0) {
             is_isle = TRUE;
             is_isle = TRUE;
+	    break;
+	}
     }
     }
 
 
     G_debug(3, "is_isle(): area %d skip? -> %s", area, is_isle ? "yes" : "no");
     G_debug(3, "is_isle(): area %d skip? -> %s", area, is_isle ? "yes" : "no");