Explorar o código

vedit: Don't write empty lines

git-svn-id: https://svn.osgeo.org/grass/grass/trunk@70598 15284696-431f-4ddb-bdfa-cd5b030d7da7
Huidae Cho %!s(int64=8) %!d(string=hai) anos
pai
achega
a07ff6dac8
Modificáronse 1 ficheiros con 44 adicións e 34 borrados
  1. 44 34
      lib/vector/vedit/extend.c

+ 44 - 34
lib/vector/vedit/extend.c

@@ -281,45 +281,55 @@ int extend_lines(struct Map_info *Map, int first, int line_from, int line_to,
 	/* Vect_list_append(List, line_new); */
 	/* Vect_list_append(List, line_new); */
 
 
 	Vect_reset_line(Points_final);
 	Vect_reset_line(Points_final);
-	switch (line_to_extended) {
-	    case 1:
-		/* extend line_to start node */
-		Vect_append_point(Points_final, x1, y1, 0.0);
-		for (is = 0; is < Points_to->n_points; is++)
-		    Vect_append_point(Points_final, Points_to->x[is],
-				      Points_to->y[is], Points_to->z[is]);
-		line_new = Vect_rewrite_line(Map, line_to, type_to,
-					     Points_final, Cats_to);
-		break;
-	    case 2:
-		/* extend line_to end node */
-		for (is = 0; is < Points_to->n_points; is++)
-		    Vect_append_point(Points_final, Points_to->x[is],
-				      Points_to->y[is], Points_to->z[is]);
-		Vect_append_point(Points_final, x1, y1, 0.0);
-		line_new = Vect_rewrite_line(Map, line_to, type_to,
-					     Points_final, Cats_to);
-		break;
-	    default:
-		/* break line_to */
-		/* update line_to  -- first part */
-		for (is = 0; is < seg; is++)
-		    Vect_append_point(Points_final, Points_to->x[is],
-				      Points_to->y[is], Points_to->z[is]);
-		Vect_append_point(Points_final, x1, y1, 0.0);
+	if (line_to_extended == 1) {
+	    /* extend line_to start node */
+	    Vect_append_point(Points_final, x1, y1, 0.0);
+	    for (is = 0; is < Points_to->n_points; is++)
+		Vect_append_point(Points_final, Points_to->x[is],
+				  Points_to->y[is], Points_to->z[is]);
+	    line_new = Vect_rewrite_line(Map, line_to, type_to, Points_final,
+					 Cats_to);
+	} else if (line_to_extended == 2) {
+	    /* extend line_to end node */
+	    for (is = 0; is < Points_to->n_points; is++)
+		Vect_append_point(Points_final, Points_to->x[is],
+				  Points_to->y[is], Points_to->z[is]);
+	    Vect_append_point(Points_final, x1, y1, 0.0);
+	    line_new = Vect_rewrite_line(Map, line_to, type_to, Points_final,
+					 Cats_to);
+	} else {
+	    int n_parts = 0;
+
+	    /* break line_to */
+	    /* update line_to  -- first part */
+	    for (is = 0; is < seg; is++)
+		Vect_append_point(Points_final, Points_to->x[is],
+				  Points_to->y[is], Points_to->z[is]);
+	    Vect_append_point(Points_final, x1, y1, 0.0);
+
+	    if (Vect_line_length(Points_final) > 0) {
+		n_parts++;
 		line_new = Vect_rewrite_line(Map, line_to, type_to,
 		line_new = Vect_rewrite_line(Map, line_to, type_to,
 					     Points_final, Cats_to);
 					     Points_final, Cats_to);
 		/* Vect_list_append(List, line_new); */
 		/* Vect_list_append(List, line_new); */
+	    }
 
 
-		/* write second part */
-		Vect_reset_line(Points_final);
-		Vect_append_point(Points_final, x1, y1, 0.0);
-		for (is = seg; is < Points_to->n_points; is++)
-		    Vect_append_point(Points_final, Points_to->x[is],
-				      Points_to->y[is], Points_to->z[is]);
-		line_new = Vect_write_line(Map, type_to, Points_final, Cats_to);
+	    /* write second part */
+	    Vect_reset_line(Points_final);
+	    Vect_append_point(Points_final, x1, y1, 0.0);
+	    for (is = seg; is < Points_to->n_points; is++)
+		Vect_append_point(Points_final, Points_to->x[is],
+				  Points_to->y[is], Points_to->z[is]);
+
+	    if (Vect_line_length(Points_final) > 0) {
+		if (n_parts > 0)
+		    line_new = Vect_write_line(Map, type_to, Points_final,
+					       Cats_to);
+		else
+		    line_new = Vect_rewrite_line(Map, line_to, type_to,
+						 Points_final, Cats_to);
 		/* Vect_list_append(List, line_new); */
 		/* Vect_list_append(List, line_new); */
-		break;
+	    }
 	}
 	}
     } while(0);
     } while(0);