From d868f5ce60fdb4efcf2a1399827ee2cf61fac65b Mon Sep 17 00:00:00 2001 From: Huidae Cho Date: Tue, 20 Feb 2024 09:58:51 -0700 Subject: [PATCH] v.to.rast: Add points without segfault with densification flag (-d) --- vector/v.to.rast/dense_line.c | 12 ++++++++++++ vector/v.to.rast/do_lines.c | 14 +++++++++----- vector/v.to.rast/local.h | 1 + 3 files changed, 22 insertions(+), 5 deletions(-) diff --git a/vector/v.to.rast/dense_line.c b/vector/v.to.rast/dense_line.c index 37370db2884..f344b746453 100644 --- a/vector/v.to.rast/dense_line.c +++ b/vector/v.to.rast/dense_line.c @@ -274,3 +274,15 @@ void dense_line(double x1, double y1, double x2, double y2, } point(ix2, iy2); } + +/* point plotting, alternative to G_plot_point() + * x, y are col, row numbers */ +void plot_point(double east, double north) +{ + int x, y; + + x = ifloor(X(G_adjust_easting(east, &st->window)) + 0.5); + y = ifloor(Y(north) + 0.5); + + st->dot(x, y); +} diff --git a/vector/v.to.rast/do_lines.c b/vector/v.to.rast/do_lines.c index 0a1d402ca2f..a939a6716c0 100644 --- a/vector/v.to.rast/do_lines.c +++ b/vector/v.to.rast/do_lines.c @@ -7,7 +7,7 @@ /* function prototypes */ static int plot_line(double *, double *, int, int, int); -static int plot_points(double *, double *, int); +static int plot_points(double *, double *, int, int); static double v2angle(double[2], double[2], double, double); static double deg_angle(double, double, double, double); @@ -131,7 +131,7 @@ int do_lines(struct Map_info *Map, struct line_pnts *Points, count++; } else if (type & GV_POINTS) { - plot_points(Points->x, Points->y, Points->n_points); + plot_points(Points->x, Points->y, Points->n_points, dense); count++; } } @@ -199,11 +199,15 @@ static double deg_angle(double x0, double y0, double x1, double y1) return (v_ang * 360.0 / M_2PI); } -static int plot_points(double *x, double *y, int n) +static int plot_points(double *x, double *y, int n, int dense) { /* only plot the first point */ - if (n > 0) - G_plot_point(*x, *y); + if (n > 0) { + if (dense) + plot_point(*x, *y); + else + G_plot_point(*x, *y); + } return 0; } diff --git a/vector/v.to.rast/local.h b/vector/v.to.rast/local.h index 18996b97e2f..8448600a342 100644 --- a/vector/v.to.rast/local.h +++ b/vector/v.to.rast/local.h @@ -30,6 +30,7 @@ int do_lines(struct Map_info *, struct line_pnts *, dbCatValArray *, int, int, struct cat_list *, int, double, int, int, int *, int); void plot_line_dense(double, double, double, double); +void plot_point(double, double); void setup_plot(double, double, double, double, int (*dot)(int, int)); /* raster.c */