19#include <grass/ogsf.h>
22#define FIRST_VECT_ID 20656
24static geovect *Vect_top =
NULL;
38 G_debug(5,
"gv_get_vect() id=%d",
id);
40 for (gv = Vect_top; gv; gv = gv->next) {
41 if (gv->gvect_id ==
id) {
61 G_debug(5,
"gv_get_prev_vect(): id=%d",
id);
63 for (pv = Vect_top; pv; pv = pv->next) {
64 if (pv->gvect_id ==
id - 1) {
82 for (i = 0, gv = Vect_top; gv; gv = gv->next, i++)
85 G_debug(5,
"gv_num_vects(): num=%d", i);
104 for (lv = Vect_top; lv->next; lv = lv->next)
107 G_debug(5,
"gv_get_last_vect(): id=%d", lv->gvect_id);
122 nv = (geovect *)G_malloc(
sizeof(geovect));
127 G_zero(nv,
sizeof(geovect));
131 nv->gvect_id = lv->gvect_id + 1;
138 nv->style = (gvstyle *)G_malloc(
sizeof(gvstyle));
139 if (
NULL == nv->style)
141 G_zero(nv->style,
sizeof(gvstyle));
142 nv->hstyle = (gvstyle *)G_malloc(
sizeof(gvstyle));
143 if (
NULL == nv->hstyle)
145 G_zero(nv->hstyle,
sizeof(gvstyle));
147 G_debug(5,
"gv_get_new_vect() id=%d", nv->gvect_id);
162 for (gv = Vect_top; gv; gv = gv->next) {
164 for (i = 0; i < gv->n_surfs; i++) {
165 if (gv->drape_surf_id[i]) {
167 for (j = i; j < gv->n_surfs - 1; j++) {
168 gv->drape_surf_id[j] = gv->drape_surf_id[j + 1];
171 gv->n_surfs = gv->n_surfs - 1;
194 G_debug(5,
"gv_set_defaults() id=%d", gv->gvect_id);
197 gv->n_lines = gv->n_surfs = gv->use_mem = 0;
198 gv->x_trans = gv->y_trans = gv->z_trans = 0.0;
200 gv->fastlines =
NULL;
202 gv->style->color = 0xF0F0F0;
203 gv->style->width = 1;
204 gv->style->next =
NULL;
205 gv->hstyle->color = 0xFF0000;
206 gv->hstyle->width = 2;
207 gv->hstyle->next =
NULL;
211 for (i = 0; i < MAX_SURFS; i++) {
212 gv->drape_surf_id[i] = 0;
232 G_debug(5,
"gv_init_vect() id=%d", gv->gvect_id);
246 G_debug(5,
"gv_delete_vect(): id=%d",
id);
271 if (fv == Vect_top) {
272 if (Vect_top->next) {
284 for (gv = Vect_top; gv && !found; gv = gv->next) {
287 if (gv->next == fv) {
296 G_debug(5,
"gv_free_vect(): id=%d", fv->gvect_id);
315 geoline *gln, *tmpln;
317 G_free((
void *)fv->filename);
325 for (gln = fv->lines; gln;) {
326 if (gln->dims == 2) {
331 if (gln->dims == 3) {
348 G_free(fv->tstyle->color_column);
349 G_free(fv->tstyle->symbol_column);
350 G_free(fv->tstyle->size_column);
351 G_free(fv->tstyle->width_column);
368 for (i = 0; i < nsurfs && i < MAX_SURFS; i++) {
369 gv->drape_surf_id[i] = hsurfs[i];
void G_free(void *buf)
Free allocated memory.
int G_debug(int level, const char *msg,...)
Print debugging message.
geosurf * gs_get_surf(int id)
Get geosurf struct.
void sub_Vectmem(int minus)
Tracking memory.
int gv_free_vect(geovect *fv)
Free allocated memory for geovect struct.
void gv_update_drapesurfs(void)
Update drape surfaces.
int gv_init_vect(geovect *gv)
Initialize geovect struct.
geovect * gv_get_prev_vect(int id)
Get previous vector set.
geovect * gv_get_last_vect(void)
Get last loaded vector set.
void gv_delete_vect(int id)
Delete vector set (unload)
int gv_num_vects(void)
Get number of loaded vector sets.
geovect * gv_get_new_vect(void)
Allocate memory for new vector set.
geovect * gv_get_vect(int id)
Get vector set.
void gv_free_vectmem(geovect *fv)
Free allocated memory.
void gv_set_drapesurfs(geovect *gv, int *hsurfs, int nsurfs)
Set drape surfaces for vector set.
int gv_set_defaults(geovect *gv)
Set attributes of vector set to default values.
void G_zero(void *buf, int i)
Zero out a buffer, buf, of length i.