GRASS GIS 8 Programmer's Manual 8.3.2(2024)-exported
Loading...
Searching...
No Matches
path.c
Go to the documentation of this file.
1#include <grass/gis.h>
2#include "path.h"
3
4void path_init(struct path *p)
5{
6 p->vertices = NULL;
7 p->count = 0;
8 p->alloc = 0;
9 p->start = -1;
10}
11
12void path_free(struct path *p)
13{
14 if (p->vertices)
15 G_free(p->vertices);
16
17 p->count = 0;
18 p->alloc = 0;
19 p->start = -1;
20}
21
22void path_alloc(struct path *p, int n)
23{
24 if (p->alloc >= n)
25 return;
26
27 p->alloc = n;
28 p->vertices = G_realloc(p->vertices, p->alloc * sizeof(struct vertex));
29}
30
31void path_reset(struct path *p)
32{
33 p->count = 0;
34 p->start = -1;
35}
36
37void path_append(struct path *p, double x, double y, int mode)
38{
39 struct vertex *v;
40
41 if (p->count >= p->alloc)
42 path_alloc(p, p->alloc ? p->alloc * 2 : 100);
43
44 v = &p->vertices[p->count++];
45
46 v->x = x;
47 v->y = y;
48 v->mode = mode;
49}
50
51void path_copy(struct path *dst, const struct path *src)
52{
53 int i;
54
55 path_reset(dst);
56 path_alloc(dst, src->count);
57
58 for (i = 0; i < src->count; i++) {
59 struct vertex *v = &src->vertices[i];
60 path_append(dst, v->x, v->y, v->mode);
61 }
62
63 dst->start = src->start;
64}
65
66void path_begin(struct path *p)
67{
68 p->count = 0;
69 p->start = -1;
70}
71
72void path_move(struct path *p, double x, double y)
73{
74 p->start = p->count;
76}
77
78void path_cont(struct path *p, double x, double y)
79{
81}
82
83void path_close(struct path *p)
84{
85 struct vertex *v;
86
87 if (p->start < 0)
88 return;
89
90 v = &p->vertices[p->start];
91 path_append(p, v->x, v->y, P_CLOSE);
92
93 p->start = -1;
94}
95
96void path_stroke(struct path *p, void (*line)(double, double, double, double))
97{
98 int i;
99
100 for (i = 1; i < p->count; i++) {
101 struct vertex *v0 = &p->vertices[i - 1];
102 struct vertex *v1 = &p->vertices[i];
103
104 if (v1->mode != P_MOVE)
105 (*line)(v0->x, v0->y, v1->x, v1->y);
106 }
107
108 path_reset(p);
109}
void G_free(void *buf)
Free allocated memory.
Definition alloc.c:150
#define NULL
Definition ccmath.h:32
void path_close(struct path *p)
Definition path.c:83
void path_stroke(struct path *p, void(*line)(double, double, double, double))
Definition path.c:96
void path_copy(struct path *dst, const struct path *src)
Definition path.c:51
void path_reset(struct path *p)
Definition path.c:31
void path_free(struct path *p)
Definition path.c:12
void path_begin(struct path *p)
Definition path.c:66
void path_cont(struct path *p, double x, double y)
Definition path.c:78
void path_append(struct path *p, double x, double y, int mode)
Definition path.c:37
void path_alloc(struct path *p, int n)
Definition path.c:22
void path_move(struct path *p, double x, double y)
Definition path.c:72
void path_init(struct path *p)
Definition path.c:4
@ P_CONT
Definition path.h:6
@ P_MOVE
Definition path.h:5
@ P_CLOSE
Definition path.h:7
Definition path.h:15
int count
Definition path.h:17
int start
Definition path.h:19
struct vertex * vertices
Definition path.h:16
int alloc
Definition path.h:18
Definition path.h:10
int mode
Definition path.h:12
double x
Definition path.h:11
double y
Definition path.h:11