[GRASS-SVN] r34736 - in grass/trunk: include lib/display lib/raster
svn_grass at osgeo.org
svn_grass at osgeo.org
Fri Dec 5 03:08:10 EST 2008
Author: glynn
Date: 2008-12-05 03:08:10 -0500 (Fri, 05 Dec 2008)
New Revision: 34736
Modified:
grass/trunk/include/display.h
grass/trunk/include/raster.h
grass/trunk/lib/display/Makefile
grass/trunk/lib/display/draw2.c
grass/trunk/lib/raster/raster.c
Log:
Remove D_set_clip_mode(), and clipping/culling display primitives
Add path-based primitives to raster library
Use path_* functions from lib/driver in lib/display
Modified: grass/trunk/include/display.h
===================================================================
--- grass/trunk/include/display.h 2008-12-05 03:51:58 UTC (rev 34735)
+++ grass/trunk/include/display.h 2008-12-05 08:08:10 UTC (rev 34736)
@@ -69,13 +69,7 @@
double D_u_to_a_col(double);
/* draw2.c */
-enum clip_mode {
- D_MODE_NONE,
- D_MODE_CULL,
- D_MODE_CLIP,
-};
-void D_set_clip_mode(int);
void D_set_clip(double, double, double, double);
void D_clip_to_map(void);
Modified: grass/trunk/include/raster.h
===================================================================
--- grass/trunk/include/raster.h 2008-12-05 03:51:58 UTC (rev 34735)
+++ grass/trunk/include/raster.h 2008-12-05 08:08:10 UTC (rev 34736)
@@ -20,6 +20,14 @@
void R_polygon_abs(const double *, const double *, int);
void R_box_abs(double, double, double, double);
+void R_begin(void);
+void R_move(double, double);
+void R_cont(double, double);
+void R_close(void);
+void R_stroke(void);
+void R_fill(void);
+void R_point(double, double);
+
void R_text_size(double, double);
void R_text_rotation(double);
void R_text(const char *);
Modified: grass/trunk/lib/display/Makefile
===================================================================
--- grass/trunk/lib/display/Makefile 2008-12-05 03:51:58 UTC (rev 34735)
+++ grass/trunk/lib/display/Makefile 2008-12-05 08:08:10 UTC (rev 34736)
@@ -1,6 +1,7 @@
MODULE_TOPDIR = ../..
EXTRA_LIBS=$(GISLIB) $(RASTERLIB)
+EXTRA_INC = -I../driver
LIB_NAME = $(DISPLAY_LIBNAME)
Modified: grass/trunk/lib/display/draw2.c
===================================================================
--- grass/trunk/lib/display/draw2.c 2008-12-05 03:51:58 UTC (rev 34735)
+++ grass/trunk/lib/display/draw2.c 2008-12-05 08:08:10 UTC (rev 34736)
@@ -6,6 +6,7 @@
#include <grass/raster.h>
#include <grass/display.h>
#include <grass/glocale.h>
+#include "driverlib.h"
struct rectangle
{
@@ -20,20 +21,10 @@
double x, y;
};
-struct plane
-{
- double x, y, k;
-};
-
static struct vector cur;
static struct rectangle clip;
-static struct plane pl_left = { -1, 0, 0 };
-static struct plane pl_rite = { 1, 0, 0 };
-static struct plane pl_bot = { 0, -1, 0 };
-static struct plane pl_top = { 0, 1, 0 };
-
static int window_set;
#define min(x,y) ((x) < (y) ? (x) : (y))
@@ -45,18 +36,6 @@
static double *xf, *yf;
static int nalloc_f;
-struct functions {
- void (*line)(double x1, double y1, double x2, double y2);
- void (*polydots)(const double *x, const double *y, int n);
- void (*polyline)(const double *x, const double *y, int n);
- void (*polygon)(const double *x, const double *y, int n);
- void (*box)(double x1, double y1, double x2, double y2);
-};
-
-static struct functions raw_functions, cull_functions, clip_functions;
-
-static struct functions *fns = &cull_functions;
-
/******************************************************************************/
static void alloc_dst(int n)
@@ -147,11 +126,6 @@
dealloc_src(px, py, 0);
}
-static double dist_plane(double x, double y, const struct plane *p)
-{
- return x * p->x + y * p->y + p->k;
-}
-
static int shift_count(double dx)
{
return (int)floor(dx / 360);
@@ -201,8 +175,8 @@
return count;
}
-static void do_ll_wrap(const double *x, const double *y, int n,
- void (*func) (const double *, const double *, int))
+static void ll_wrap_path(const double *x, const double *y, int n,
+ void (*func) (const double *, const double *, int))
{
double *xx = G_malloc(n * sizeof(double));
int count, i;
@@ -222,103 +196,9 @@
G_free(xx);
}
-/******************************************************************************/
-
-static double interpolate(double a, double b, double ka, double kb)
+static void ll_wrap_line(double ax, double ay, double bx, double by,
+ void (*func)(double, double, double, double))
{
- return (a * kb - b * ka) / (kb - ka);
-}
-
-static int clip_plane(struct vector *a, struct vector *b,
- const struct plane *p, int *clipped)
-{
- double ka = dist_plane(a->x, a->y, p);
- double kb = dist_plane(b->x, b->y, p);
- double kab;
-
- /* both outside */
- if (ka > 0 && kb > 0)
- return 1;
-
- /* both inside */
- if (ka <= 0 && kb <= 0)
- return 0;
-
- *clipped = 1;
-
- /* a outside - swap a and b */
- if (ka >= 0) {
- struct vector *t;
- double kt;
-
- t = a;
- a = b;
- b = t;
- kt = ka;
- ka = kb;
- kb = kt;
- }
-
- kab = kb - ka;
-
- b->x = interpolate(a->x, b->x, ka, kb);
- b->y = interpolate(a->y, b->y, ka, kb);
-
- return 0;
-}
-
-static int do_clip(struct vector *a, struct vector *b)
-{
- int clipped = 0;
-
- if (a->x < clip.left && b->x < clip.left)
- return -1;
- if (a->x > clip.rite && b->x > clip.rite)
- return -1;
- if (a->y < clip.bot && b->y < clip.bot)
- return -1;
- if (a->y > clip.top && b->y > clip.top)
- return -1;
-
- if (clip_plane(a, b, &pl_left, &clipped))
- return -1;
- if (clip_plane(a, b, &pl_rite, &clipped))
- return -1;
- if (clip_plane(a, b, &pl_bot, &clipped))
- return -1;
- if (clip_plane(a, b, &pl_top, &clipped))
- return -1;
-
- return clipped;
-}
-
-static int line_clip(double x1, double y1, double x2, double y2)
-{
- struct vector a, b;
- int clipped;
-
- a.x = x1;
- a.y = y1;
-
- b.x = x2;
- b.y = y2;
-
- clipped = do_clip(&a, &b);
-
- if (clipped >= 0) {
- double x1 = D_u_to_d_col(a.x);
- double y1 = D_u_to_d_row(a.y);
- double x2 = D_u_to_d_col(b.x);
- double y2 = D_u_to_d_row(b.y);
-
- R_line_abs(x1, y1, x2, y2);
- }
-
- return clipped;
-}
-
-static int line_clip_ll(double ax, double ay, double bx, double by)
-{
double ux0 = clip.left;
double ux1 = clip.rite;
double x0, x1;
@@ -336,407 +216,39 @@
ret = 0;
for (i = lo; i <= hi; i++)
- ret |= line_clip(ax - i * 360, ay, bx - i * 360, by);
-
- return ret;
+ (*func)(ax - i * 360, ay, bx - i * 360, by);
}
-static void polyline_clip(const double *x, const double *y, int n)
-{
- int i;
+/******************************************************************************/
- for (i = 1; i < n; i++)
- line_clip(x[i - 1], y[i - 1], x[i], y[i]);
-}
-
-static int clip_polygon_plane(int *pn, const double *x, const double *y,
- const struct plane *p)
+static void D_polydots_raw(const double *x, const double *y, int n)
{
- int n = *pn;
- double x0 = x[n - 1];
- double y0 = y[n - 1];
- double d0 = dist_plane(x0, y0, p);
- int i, j;
-
- for (i = j = 0; i < n; i++) {
- double x1 = x[i];
- double y1 = y[i];
- double d1 = dist_plane(x1, y1, p);
- int in0 = d0 <= 0;
- int in1 = d1 <= 0;
-
- if (in0 != in1) { /* edge crossing */
- alloc_src(j + 1);
- xf[j] = interpolate(x0, x1, d0, d1);
- yf[j] = interpolate(y0, y1, d0, d1);
- j++;
- }
-
- if (in1) { /* point inside */
- alloc_src(j + 1);
- xf[j] = x[i];
- yf[j] = y[i];
- j++;
- }
-
- x0 = x1;
- y0 = y1;
- d0 = d1;
- }
-
- *pn = j;
-
- return (j == 0);
-}
-
-static void polygon_clip(const double *x, const double *y, int n)
-{
- alloc_src(n + 10);
-
- if (clip_polygon_plane(&n, x, y, &pl_left))
- return;
-
- dealloc_src(&x, &y, 0);
-
- if (clip_polygon_plane(&n, x, y, &pl_rite))
- return;
-
- dealloc_src(&x, &y, 1);
-
- if (clip_polygon_plane(&n, x, y, &pl_bot))
- return;
-
- dealloc_src(&x, &y, 1);
-
- if (clip_polygon_plane(&n, x, y, &pl_top))
- return;
-
- dealloc_src(&x, &y, 1);
-
n = do_convert(x, y, n);
-
- R_polygon_abs(xi, yi, n);
+ R_polydots_abs(xi, yi, n);
}
-static void polydots_clip(const double *x, const double *y, int n)
+static void D_polyline_raw(const double *x, const double *y, int n)
{
- double ux0 = clip.left;
- int i, j;
-
- alloc_src(n);
-
- for (i = j = 0; i < n; i++) {
- double xx = x[i];
- double yy = y[i];
-
- if (D_is_lat_lon())
- xx -= shift_angle(x[i] - ux0);
-
- if (xx < clip.left || xx > clip.rite)
- continue;
- if (yy < clip.bot || yy > clip.top)
- continue;
-
- xf[j] = xx;
- yf[j] = yy;
- j++;
- }
-
- n = do_convert(xf, yf, n);
-
- R_polydots_abs(xi, yi, j);
-}
-
-static void box_clip(double x1, double y1, double x2, double y2)
-{
- x1 = max(clip.left, min(clip.rite, x1));
- x2 = max(clip.left, min(clip.rite, x2));
- y1 = max(clip.bot, min(clip.top, y1));
- y2 = max(clip.bot, min(clip.top, y2));
-
- x1 = D_u_to_d_col(x1);
- x2 = D_u_to_d_col(x2);
- y1 = D_u_to_d_row(y1);
- y2 = D_u_to_d_row(y2);
-
- R_box_abs(x1, y1, x2, y2);
-}
-
-static void box_clip_ll(double x1, double y1, double x2, double y2)
-{
- double ux0 = clip.left;
- double ux1 = clip.rite;
- int lo, hi, i;
-
- x2 = x1 + coerce(x2 - x1);
-
- lo = -shift_count(ux1 - x1);
- hi = shift_count(x2 - ux0);
-
- for (i = lo; i <= hi; i++)
- box_clip(x1 - i * 360, y1, x2 - i * 360, y2);
-}
-
-/******************************************************************************/
-
-static int cull_polyline_plane(int *pn, const double *x, const double *y,
- const struct plane *p)
-{
- int n = *pn;
- int last = -1;
- int prev = 0;
- double x0 = x[prev];
- double y0 = y[prev];
- double d0 = dist_plane(x0, y0, p);
- int i, j;
-
- for (i = 0, j = 0; i < n; i++) {
- double x1 = x[i];
- double y1 = y[i];
- double d1 = dist_plane(x1, y1, p);
- int in0 = d0 <= 0;
- int in1 = d1 <= 0;
-
- if (!in0 && in1 && last != prev) { /* entering */
- alloc_src(j + 1);
- xf[j] = x0;
- yf[j] = y0;
- j++;
- last = prev;
- }
-
- if (in1 || in0) { /* inside or leaving */
- alloc_src(j + 1);
- xf[j] = x1;
- yf[j] = y1;
- j++;
- last = i;
- }
-
- x0 = x1;
- y0 = y1;
- d0 = d1;
- prev = i;
- }
-
- *pn = j;
-
- return (j == 0);
-}
-
-static void polyline_cull(const double *x, const double *y, int n)
-{
- alloc_src(n + 10);
-
- if (cull_polyline_plane(&n, x, y, &pl_left))
- return;
-
- dealloc_src(&x, &y, 0);
-
- if (cull_polyline_plane(&n, x, y, &pl_rite))
- return;
-
- dealloc_src(&x, &y, 1);
-
- if (cull_polyline_plane(&n, x, y, &pl_bot))
- return;
-
- dealloc_src(&x, &y, 1);
-
- if (cull_polyline_plane(&n, x, y, &pl_top))
- return;
-
- dealloc_src(&x, &y, 1);
-
n = do_convert(x, y, n);
-
R_polyline_abs(xi, yi, n);
}
-static int cull_polygon_plane(int *pn, const double *x, const double *y,
- const struct plane *p)
+static void D_polygon_raw(const double *x, const double *y, int n)
{
- int n = *pn;
- int last = -1;
- int prev = n - 1;
- double x0 = x[prev];
- double y0 = y[prev];
- double d0 = dist_plane(x0, y0, p);
- int i, j;
-
- for (i = j = 0; i < n; i++) {
- double x1 = x[i];
- double y1 = y[i];
- double d1 = dist_plane(x1, y1, p);
- int in0 = d0 <= 0;
- int in1 = d1 <= 0;
-
- if (!in0 && in1 && last != prev) { /* entering */
- alloc_src(j + 1);
- xf[j] = x0;
- yf[j] = y0;
- j++;
- last = prev;
- }
-
- if (in1 || in0) { /* inside or leaving */
- alloc_src(j + 1);
- xf[j] = x1;
- yf[j] = y1;
- j++;
- last = i;
- }
-
- x0 = x1;
- y0 = y1;
- d0 = d1;
- prev = i;
- }
-
- *pn = j;
-
- return (j == 0);
-}
-
-static void polygon_cull(const double *x, const double *y, int n)
-{
- alloc_src(n + 10);
-
- if (cull_polygon_plane(&n, x, y, &pl_left))
- return;
-
- dealloc_src(&x, &y, 0);
-
- if (cull_polygon_plane(&n, x, y, &pl_rite))
- return;
-
- dealloc_src(&x, &y, 1);
-
- if (cull_polygon_plane(&n, x, y, &pl_bot))
- return;
-
- dealloc_src(&x, &y, 1);
-
- if (cull_polygon_plane(&n, x, y, &pl_top))
- return;
-
- dealloc_src(&x, &y, 1);
-
n = do_convert(x, y, n);
-
R_polygon_abs(xi, yi, n);
}
-static void box_cull(double x1, double y1, double x2, double y2)
-{
- if (x1 > clip.rite && x2 > clip.rite)
- return;
- if (x1 < clip.left && x2 < clip.left)
- return;
- if (y1 > clip.top && y2 > clip.top)
- return;
- if (y1 < clip.bot && y2 < clip.bot)
- return;
-
- x1 = D_u_to_d_col(x1);
- y1 = D_u_to_d_row(y1);
- x2 = D_u_to_d_col(x2);
- y2 = D_u_to_d_row(y2);
-
- R_box_abs(x1, y1, x2, y2);
-}
-
-static void box_cull_ll(double x1, double y1, double x2, double y2)
-{
- double ux0 = clip.left;
- double ux1 = clip.rite;
- int lo, hi, i;
-
- x2 = x1 + coerce(x2 - x1);
-
- lo = -shift_count(ux1 - x1);
- hi = shift_count(x2 - ux0);
-
- for (i = lo; i <= hi; i++)
- box_clip(x1 - i * 360, y1, x2 - i * 360, y2);
-}
-
-static int line_cull(double x1, double y1, double x2, double y2)
-{
- if (x1 > clip.rite && x2 > clip.rite)
- return 1;
- if (x1 < clip.left && x2 < clip.left)
- return 1;
- if (y1 > clip.top && y2 > clip.top)
- return 1;
- if (y1 < clip.bot && y2 < clip.bot)
- return 1;
-
- x1 = D_u_to_d_col(x1);
- y1 = D_u_to_d_row(y1);
- x2 = D_u_to_d_col(x2);
- y2 = D_u_to_d_row(y2);
-
- R_line_abs(x1, y1, x2, y2);
-
- return 0;
-}
-
-static int line_cull_ll(double ax, double ay, double bx, double by)
-{
- double ux0 = clip.left;
- double ux1 = clip.rite;
- double x0, x1;
- int lo, hi, i;
- int ret;
-
- bx = ax + coerce(bx - ax);
-
- x0 = min(ax, bx);
- x1 = max(ax, bx);
-
- lo = -shift_count(ux1 - x0);
- hi = shift_count(x1 - ux0);
-
- ret = 1;
-
- for (i = lo; i <= hi; i++)
- ret &= line_cull(ax - i * 360, ay, bx - i * 360, by);
-
- return ret;
-}
-
-/******************************************************************************/
-
static void D_line_raw(double x1, double y1, double x2, double y2)
{
x1 = D_u_to_d_col(x1);
y1 = D_u_to_d_row(y1);
-
x2 = D_u_to_d_col(x2);
y2 = D_u_to_d_row(y2);
R_line_abs(x1, y1, x2, y2);
}
-static void D_polydots_raw(const double *x, const double *y, int n)
-{
- n = do_convert(x, y, n);
- R_polydots_abs(xi, yi, n);
-}
-
-static void D_polyline_raw(const double *x, const double *y, int n)
-{
- n = do_convert(x, y, n);
- R_polyline_abs(xi, yi, n);
-}
-
-static void D_polygon_raw(const double *x, const double *y, int n)
-{
- n = do_convert(x, y, n);
- R_polygon_abs(xi, yi, n);
-}
-
static void D_box_raw(double x1, double y1, double x2, double y2)
{
x1 = D_u_to_d_col(x1);
@@ -747,146 +259,8 @@
R_box_abs(x1, y1, x2, y2);
}
-static struct functions raw_functions = {
- D_line_raw,
- D_polydots_raw,
- D_polyline_raw,
- D_polygon_raw,
- D_box_raw,
-};
-
/******************************************************************************/
-static void D_line_cull(double x1, double y1, double x2, double y2)
-{
- if (!window_set)
- D_clip_to_map();
-
- if (D_is_lat_lon())
- line_cull_ll(x1, y1, x2, y2);
- else
- line_cull(x1, y1, x2, y2);
-}
-
-static void D_polydots_cull(const double *x, const double *y, int n)
-{
- if (!window_set)
- D_clip_to_map();
-
- polydots_clip(x, y, n);
-}
-
-static void D_polyline_cull(const double *x, const double *y, int n)
-{
- if (n < 2)
- return;
-
- if (!window_set)
- D_clip_to_map();
-
- if (D_is_lat_lon())
- do_ll_wrap(x, y, n, polyline_cull);
- else
- polyline_cull(x, y, n);
-}
-
-static void D_polygon_cull(const double *x, const double *y, int n)
-{
- if (!window_set)
- D_clip_to_map();
-
- if (D_is_lat_lon())
- do_ll_wrap(x, y, n, polygon_cull);
- else
- polygon_cull(x, y, n);
-}
-
-static void D_box_cull(double x1, double y1, double x2, double y2)
-{
- if (!window_set)
- D_clip_to_map();
-
- if (D_is_lat_lon())
- box_cull_ll(x1, y1, x2, y2);
- else
- box_cull(x1, y1, x2, y2);
-}
-
-static struct functions cull_functions = {
- D_line_cull,
- D_polydots_cull,
- D_polyline_cull,
- D_polygon_cull,
- D_box_cull,
-};
-
-/******************************************************************************/
-
-static void D_line_clip(double x1, double y1, double x2, double y2)
-{
- if (!window_set)
- D_clip_to_map();
-
- if (D_is_lat_lon())
- line_clip_ll(x1, y1, x2, y2);
- else
- line_clip(x1, y1, x2, y2);
-}
-
-static void D_polydots_clip(const double *x, const double *y, int n)
-{
- if (!window_set)
- D_clip_to_map();
-
- polydots_clip(x, y, n);
-}
-
-static void D_polyline_clip(const double *x, const double *y, int n)
-{
- if (!window_set)
- D_clip_to_map();
-
- if (n < 2)
- return;
-
- if (D_is_lat_lon())
- do_ll_wrap(x, y, n, polyline_clip);
- else
- polyline_clip(x, y, n);
-}
-
-static void D_polygon_clip(const double *x, const double *y, int n)
-{
- if (!window_set)
- D_clip_to_map();
-
- if (D_is_lat_lon())
- do_ll_wrap(x, y, n, polygon_clip);
- else
- polygon_clip(x, y, n);
-}
-
-static void D_box_clip(double x1, double y1, double x2, double y2)
-{
- if (!window_set)
- D_clip_to_map();
-
- if (D_is_lat_lon())
- box_clip_ll(x1, y1, x2, y2);
- else
- box_clip(x1, y1, x2, y2);
-}
-
-static struct functions clip_functions = {
- D_line_clip,
- D_polydots_clip,
- D_polyline_clip,
- D_polygon_clip,
- D_box_clip,
-};
-
-/******************************************************************************/
-
/*!
* \brief set clipping window
*
@@ -906,11 +280,6 @@
clip.bot = min(b, t);
clip.top = max(b, t);
- pl_left.k = clip.left;
- pl_rite.k = -clip.rite;
- pl_bot.k = clip.bot;
- pl_top.k = -clip.top;
-
window_set = 1;
}
@@ -958,29 +327,62 @@
/******************************************************************************/
-void D_line_abs(double x1, double y1, double x2, double y2)
-{
- (*fns->line)(x1, y1, x2, y2);
-}
-
void D_polydots_abs(const double *x, const double *y, int n)
{
- (*fns->polydots)(x, y, n);
+ if (!window_set)
+ D_clip_to_map();
+
+ if (D_is_lat_lon())
+ ll_wrap_path(x, y, n, D_polydots_raw);
+ else
+ D_polydots_raw(x, y, n);
}
void D_polyline_abs(const double *x, const double *y, int n)
{
- (*fns->polyline)(x, y, n);
+ if (!window_set)
+ D_clip_to_map();
+
+ if (n < 2)
+ return;
+
+ if (D_is_lat_lon())
+ ll_wrap_path(x, y, n, D_polyline_raw);
+ else
+ D_polyline_raw(x, y, n);
}
void D_polygon_abs(const double *x, const double *y, int n)
{
- (*fns->polygon)(x, y, n);
+ if (!window_set)
+ D_clip_to_map();
+
+ if (D_is_lat_lon())
+ ll_wrap_path(x, y, n, D_polygon_raw);
+ else
+ D_polygon_raw(x, y, n);
}
+void D_line_abs(double x1, double y1, double x2, double y2)
+{
+ if (!window_set)
+ D_clip_to_map();
+
+ if (D_is_lat_lon())
+ ll_wrap_line(x1, y1, x2, y2, D_line_raw);
+ else
+ D_line_raw(x1, y1, x2, y2);
+}
+
void D_box_abs(double x1, double y1, double x2, double y2)
{
- (*fns->box)(x1, y1, x2, y2);
+ if (!window_set)
+ D_clip_to_map();
+
+ if (D_is_lat_lon())
+ ll_wrap_line(x1, y1, x2, y2, D_box_raw);
+ else
+ D_box_raw(x1, y1, x2, y2);
}
/******************************************************************************/
@@ -1030,63 +432,8 @@
/******************************************************************************/
-void D_set_clip_mode(int mode)
-{
- switch (mode) {
- case D_MODE_NONE: fns = &raw_functions; break;
- case D_MODE_CULL: fns = &cull_functions; break;
- case D_MODE_CLIP: fns = &clip_functions; break;
- }
-}
+static struct path path;
-/******************************************************************************/
-
-static int path_point_max;
-static int path_point_num;
-static double *path_x, *path_y;
-
-static int path_segment_max;
-static int path_segment_num;
-static int *path_segments;
-
-static int in_path;
-static int cur_seg;
-
-static void path_alloc_segment(void)
-{
- if (path_segment_num >= path_segment_max) {
- path_segment_max = path_segment_num + 10;
- path_segments = G_realloc(path_segments, path_segment_max * sizeof(int));
- }
-}
-
-static void path_alloc_point(void)
-{
- if (path_point_num >= path_point_max) {
- path_point_max = path_point_num + 100;
- path_x = G_realloc(path_x, path_point_max * sizeof(double));
- path_y = G_realloc(path_y, path_point_max * sizeof(double));
- }
-}
-
-static void new_point(double x, double y)
-{
- path_alloc_point();
- path_x[path_point_num] = x;
- path_y[path_point_num] = y;
- path_point_num++;
-}
-
-static void new_segment(void)
-{
- cur_seg = path_segment_num;
- path_alloc_segment();
- path_segments[path_segment_num] = path_point_num;
- path_segment_num++;
-}
-
-/******************************************************************************/
-
void D_pos_abs(double x, double y)
{
cur.x = x;
@@ -1105,14 +452,8 @@
void D_move_abs(double x, double y)
{
- if (!in_path) {
- G_warning(_("D_move_abs() called while path not active"));
- return;
- }
+ path_move(&path, x, y);
- new_segment();
- new_point(x, y);
-
cur.x = x;
cur.y = y;
}
@@ -1124,13 +465,8 @@
void D_cont_abs(double x, double y)
{
- if (!in_path) {
- G_warning(_("D_cont_abs() called while path not active"));
- return;
- }
+ path_cont(&path, x, y);
- new_point(x, y);
-
cur.x = x;
cur.y = y;
}
@@ -1144,54 +480,26 @@
void D_begin(void)
{
- if (in_path)
- G_warning(_("D_begin() called while path active"));
- path_segment_num = 0;
- path_point_num = 0;
- in_path = 1;
+ path_begin(&path);
}
void D_end(void)
{
- if (!in_path)
- G_warning(_("D_end() called while path not active"));
- new_segment();
- in_path = 0;
}
void D_close(void)
{
- int i;
-
- if (!in_path) {
- G_warning(_("D_close() called while path not active"));
- return;
- }
-
- i = path_segments[cur_seg];
- new_point(path_x[i], path_y[i]);
+ path_close(&path);
}
void D_stroke(void)
{
- int i;
-
- for (i = 0; i < path_segment_num - 1; i++) {
- int i0 = path_segments[i];
- int i1 = path_segments[i+1];
- D_polyline_abs(&path_x[i0], &path_y[i0], i1 - i0);
- }
+ path_fill(&path, D_polyline_abs);
}
void D_fill(void)
{
- int i;
-
- for (i = 0; i < path_segment_num - 1; i++) {
- int i0 = path_segments[i];
- int i1 = path_segments[i+1];
- D_polygon_abs(&path_x[i0], &path_y[i0], i1 - i0);
- }
+ path_fill(&path, D_polygon_abs);
}
/******************************************************************************/
Modified: grass/trunk/lib/raster/raster.c
===================================================================
--- grass/trunk/lib/raster/raster.c 2008-12-05 03:51:58 UTC (rev 34735)
+++ grass/trunk/lib/raster/raster.c 2008-12-05 08:08:10 UTC (rev 34736)
@@ -396,3 +396,39 @@
{
COM_Bitmap(ncols, nrows, threshold, buf);
}
+
+void R_begin(void)
+{
+ COM_Begin();
+}
+
+void R_move(double x, double y)
+{
+ COM_Move(x, y);
+}
+
+void R_cont(double x, double y)
+{
+ COM_Cont(x, y);
+}
+
+void R_close(void)
+{
+ COM_Close();
+}
+
+void R_stroke(void)
+{
+ COM_Stroke();
+}
+
+void R_fill(void)
+{
+ COM_Fill();
+}
+
+void R_point(double x, double y)
+{
+ COM_Point(x, y);
+}
+
More information about the grass-commit
mailing list