GRASS Programmer's Manual  6.5.svn(2014)-r66266
 All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Macros Pages
GP2.c
Go to the documentation of this file.
1 
19 #include <stdlib.h>
20 #include <string.h>
21 
22 #include <grass/gis.h>
23 #include <grass/gstypes.h>
24 
25 #include "gsget.h"
26 
27 static int Site_ID[MAX_SITES];
28 static int Next_site = 0;
29 
38 int GP_site_exists(int id)
39 {
40  int i, found = 0;
41 
42  if (NULL == gp_get_site(id)) {
43  return (0);
44  }
45 
46  for (i = 0; i < Next_site && !found; i++) {
47  if (Site_ID[i] == id) {
48  found = 1;
49  }
50  }
51 
52  G_debug(3, "GP_site_exists(): found=%d", found);
53 
54  return (found);
55 }
56 
63 int GP_new_site(void)
64 {
65  geosite *np;
66 
67  if (Next_site < MAX_SITES) {
68  np = gp_get_new_site();
69  gp_set_defaults(np);
70  Site_ID[Next_site] = np->gsite_id;
71  ++Next_site;
72 
73  G_debug(3, "GP_new_site() id=%d", np->gsite_id);
74 
75  return (np->gsite_id);
76  }
77 
78  return (-1);
79 }
80 
86 int GP_num_sites(void)
87 {
88  return (gp_num_sites());
89 }
90 
101 int *GP_get_site_list(int *numsites)
102 {
103  int i, *ret;
104 
105  *numsites = Next_site;
106 
107  if (Next_site) {
108  ret = (int *)G_malloc(Next_site * sizeof(int)); /* G_fatal_error */
109  if (!ret) {
110  return (NULL);
111  }
112 
113  for (i = 0; i < Next_site; i++) {
114  ret[i] = Site_ID[i];
115  }
116 
117  return (ret);
118  }
119 
120  return (NULL);
121 }
122 
131 int GP_delete_site(int id)
132 {
133  int i, j, found = 0;
134 
135  G_debug(3, "GP_delete_site(): id=%d", id);
136 
137  if (GP_site_exists(id)) {
138  gp_delete_site(id);
139 
140  for (i = 0; i < Next_site && !found; i++) {
141  if (Site_ID[i] == id) {
142  found = 1;
143  for (j = i; j < Next_site; j++) {
144  Site_ID[j] = Site_ID[j + 1];
145  }
146  }
147  }
148 
149  if (found) {
150  --Next_site;
151  return (1);
152  }
153  }
154 
155  return (-1);
156 }
157 
173 int GP_load_site(int id, const char *filename)
174 {
175  geosite *gp;
176 
177  if (NULL == (gp = gp_get_site(id))) {
178  return (-1);
179  }
180 
181  if (gp->points) {
182  gp_free_sitemem(gp);
183  }
184 
185  gp->filename = G_store(filename);
186 
187  gp->points = Gp_load_sites(filename, &(gp->n_sites),
188  &(gp->has_z), &(gp->has_att));
189 
190  if (gp->points) {
191  return (1);
192  }
193 
194  return (-1);
195 }
196 
208 int GP_get_sitename(int id, char **filename)
209 {
210  geosite *gp;
211 
212  if (NULL == (gp = gp_get_site(id))) {
213  return (-1);
214  }
215 
216  *filename = G_store(gp->filename);
217 
218  return (1);
219 }
220 
224 int GP_get_sitemode(int id, int *atmod, int *color, int *width, float *size,
225  int *marker)
226 {
227  geosite *gp;
228 
229  if (NULL == (gp = gp_get_site(id))) {
230  return (-1);
231  }
232 
233  *atmod = gp->attr_mode;
234  *color = gp->color;
235  *width = gp->width;
236  *marker = gp->marker;
237  *size = gp->size;
238 
239  return (1);
240 }
241 
254 int GP_set_sitemode(int id, int atmod, int color, int width, float size,
255  int marker)
256 {
257  geosite *gp;
258 
259  if (NULL == (gp = gp_get_site(id))) {
260  return (-1);
261  }
262 
263  gp->attr_mode = atmod; /* FIX this - probably should be seperate */
264  gp->color = color;
265  gp->width = width;
266  gp->marker = marker;
267  gp->size = size;
268 
269  return (1);
270 }
271 
284 int GP_attmode_color(int id, const char *filename)
285 {
286  geosite *gp;
287 
288  if (NULL == (gp = gp_get_site(id))) {
289  return (-1);
290  }
291 
292  if (!gp->has_att) {
293  return (0);
294  }
295 
296  if (Gp_set_color(filename, gp->points)) {
297  gp->attr_mode = ST_ATT_COLOR;
298  return (1);
299  }
300 
301  return (-1);
302 }
303 
312 int GP_attmode_none(int id)
313 {
314  geosite *gp;
315 
316  if (NULL == (gp = gp_get_site(id))) {
317  return (-1);
318  }
319 
320  gp->attr_mode = ST_ATT_NONE;
321 
322  return (1);
323 }
324 
335 int GP_set_zmode(int id, int use_z)
336 {
337  geosite *gp;
338 
339  if (NULL == (gp = gp_get_site(id))) {
340  return (-1);
341  }
342 
343  if (use_z) {
344  if (gp->has_z) {
345  gp->use_z = 1;
346  return (1);
347  }
348 
349  return (0);
350  }
351 
352  gp->use_z = 0;
353  return (1);
354 }
355 
365 int GP_get_zmode(int id, int *use_z)
366 {
367  geosite *gp;
368 
369  if (NULL == (gp = gp_get_site(id))) {
370  return (-1);
371  }
372 
373  *use_z = gp->use_z;
374  return (1);
375 }
376 
383 void GP_set_trans(int id, float xtrans, float ytrans, float ztrans)
384 {
385  geosite *gp;
386 
387  G_debug(3, "GP_set_trans(): id=%d trans=%f,%f,%f",
388  id, xtrans, ytrans, ztrans);
389 
390  gp = gp_get_site(id);
391  if (gp) {
392  gp->x_trans = xtrans;
393  gp->y_trans = ytrans;
394  gp->z_trans = ztrans;
395  }
396 
397  return;
398 }
399 
406 void GP_get_trans(int id, float *xtrans, float *ytrans, float *ztrans)
407 {
408  geosite *gp;
409 
410  gp = gp_get_site(id);
411 
412  if (gp) {
413  *xtrans = gp->x_trans;
414  *ytrans = gp->y_trans;
415  *ztrans = gp->z_trans;
416  }
417 
418  G_debug(3, "GP_get_trans(): id=%d, trans=%f,%f,%f",
419  id, *xtrans, *ytrans, *ztrans);
420 
421  return;
422 }
423 
433 int GP_select_surf(int hp, int hs)
434 {
435  geosite *gp;
436 
437  if (GP_surf_is_selected(hp, hs)) {
438  return (1);
439  }
440 
441  gp = gp_get_site(hp);
442 
443  if (gp && GS_surf_exists(hs)) {
444  gp->drape_surf_id[gp->n_surfs] = hs;
445  gp->n_surfs += 1;
446  return (1);
447  }
448 
449  return (-1);
450 }
451 
461 int GP_unselect_surf(int hp, int hs)
462 {
463  geosite *gp;
464  int i, j;
465 
466  if (!GP_surf_is_selected(hp, hs)) {
467  return (1);
468  }
469 
470  gp = gp_get_site(hp);
471 
472  if (gp) {
473  for (i = 0; i < gp->n_surfs; i++) {
474  if (gp->drape_surf_id[i] == hs) {
475  for (j = i; j < gp->n_surfs - 1; j++) {
476  gp->drape_surf_id[j] = gp->drape_surf_id[j + 1];
477  }
478 
479  gp->n_surfs -= 1;
480  return (1);
481  }
482  }
483  }
484 
485  return (-1);
486 }
487 
497 int GP_surf_is_selected(int hp, int hs)
498 {
499  int i;
500  geosite *gp;
501 
502  gp = gp_get_site(hp);
503 
504  if (gp) {
505  for (i = 0; i < gp->n_surfs; i++) {
506  if (hs == gp->drape_surf_id[i]) {
507  return (1);
508  }
509  }
510  }
511 
512  return (0);
513 }
514 
520 void GP_draw_site(int id)
521 {
522  geosurf *gs;
523  geosite *gp;
524  int i;
525  float n, yo, xo, e;
526 
527  gp = gp_get_site(id);
528  GS_get_region(&n, &yo, &xo, &e);
529 
530  /* kind of sloppy - maybe site files should have an origin, too */
531  if (gp) {
532  if (gp->use_z && gp->has_z) {
533  gpd_3dsite(gp, xo, yo, 0);
534  }
535  else {
536  for (i = 0; i < gp->n_surfs; i++) {
537  gs = gs_get_surf(gp->drape_surf_id[i]);
538 
539  if (gs) {
540  gpd_2dsite(gp, gs, 0);
541 #ifdef TRACE_GP_FUNCS
542  G_debug(3, "Drawing site %d on Surf %d", id,
543  gp->drape_surf_id[i]);
544  print_site_fields(gp);
545 #endif
546  }
547  }
548  }
549  }
550 
551  return;
552 }
553 
557 void GP_alldraw_site(void)
558 {
559  int id;
560 
561  for (id = 0; id < Next_site; id++) {
562  GP_draw_site(Site_ID[id]);
563  }
564 
565  return;
566 }
567 
577 int GP_Set_ClientData(int id, void *clientd)
578 {
579  geosite *gp;
580 
581  gp = gp_get_site(id);
582 
583  if (gp) {
584  gp->clientdata = clientd;
585  return (1);
586  }
587 
588  return (-1);
589 }
590 
599 void *GP_Get_ClientData(int id)
600 {
601  geosite *gp;
602 
603  gp = gp_get_site(id);
604  if (gp) {
605  return (gp->clientdata);
606  }
607 
608  return (NULL);
609 }
int * GP_get_site_list(int *numsites)
Get list of point sets.
Definition: GP2.c:101
int gp_set_defaults(geosite *gp)
Set default value for geosite struct.
Definition: gp.c:183
int GP_Set_ClientData(int id, void *clientd)
Set client data.
Definition: GP2.c:577
void GP_draw_site(int id)
Draw point set.
Definition: GP2.c:520
int gpd_3dsite(geosite *gp, float xo, float yo, int do_fast)
ADD.
Definition: gpd.c:458
char * G_store(const char *s)
Copy string to allocated memory.
Definition: store.c:32
int GP_unselect_surf(int hp, int hs)
Unselect surface.
Definition: GP2.c:461
int GP_site_exists(int id)
Check if point set exists.
Definition: GP2.c:38
int GS_surf_exists(int id)
Definition: GS2.c:194
tuple width
int gpd_2dsite(geosite *gp, geosurf *gs, int do_fast)
ADD.
Definition: gpd.c:349
int gp_num_sites(void)
Get number of loaded point sets.
Definition: gp.c:79
int GP_get_zmode(int id, int *use_z)
Get z-mode.
Definition: GP2.c:365
void * GP_Get_ClientData(int id)
Get client data.
Definition: GP2.c:599
int Gp_set_color(const char *grassname, geopoint *gp)
Set color for point set.
Definition: Gp3.c:41
int GS_get_region(float *n, float *s, float *w, float *e)
Get 2D region extent.
Definition: GS2.c:156
int GP_attmode_color(int id, const char *filename)
Set attribute mode color.
Definition: GP2.c:284
void GP_alldraw_site(void)
Draw all available point sets.
Definition: GP2.c:557
int GP_set_sitemode(int id, int atmod, int color, int width, float size, int marker)
Set point set mode.
Definition: GP2.c:254
tuple size
value.Bind(wx.EVT_TEXT, self.OnVolumeIsosurfMap)
Definition: tools.py:2334
void GP_set_trans(int id, float xtrans, float ytrans, float ztrans)
Set trans ?
Definition: GP2.c:383
geosite * gp_get_site(int id)
Get geosite struct.
Definition: gp.c:36
int GP_new_site(void)
Create new point set.
Definition: GP2.c:63
tuple id
self.OnVectorSurface(event)
Definition: tools.py:3426
geosite * gp_get_new_site(void)
Create new geosite instance and add it to list.
Definition: gp.c:120
tuple color
Definition: tools.py:1703
int GP_get_sitename(int id, char **filename)
Get point set filename.
Definition: GP2.c:208
int GP_attmode_none(int id)
Set attribute mode to none.
Definition: GP2.c:312
int GP_set_zmode(int id, int use_z)
Set z-mode.
Definition: GP2.c:335
geopoint * Gp_load_sites(const char *grassname, int *nsites, int *has_z, int *has_att)
Load to points to memory.
Definition: Gp3.c:90
int GP_get_sitemode(int id, int *atmod, int *color, int *width, float *size, int *marker)
Get point set mode.
Definition: GP2.c:224
void print_site_fields(geosite *gp)
Print point set fields, debugging.
Definition: gp.c:219
geosurf * gs_get_surf(int id)
Get geosurf struct.
Definition: gs.c:62
return NULL
Definition: dbfopen.c:1394
int G_debug(int level, const char *msg,...)
Print debugging message.
Definition: gis/debug.c:51
int GP_delete_site(int id)
Delete registrated point set.
Definition: GP2.c:131
void gp_free_sitemem(geosite *fp)
Free geosite.
Definition: gp.c:338
int GP_surf_is_selected(int hp, int hs)
Check if surface is selected.
Definition: GP2.c:497
void gp_delete_site(int id)
Delete point set and remove from list.
Definition: gp.c:266
int GP_num_sites(void)
Get number of loaded point sets.
Definition: GP2.c:86
int GP_select_surf(int hp, int hs)
Select surface.
Definition: GP2.c:433
int n
Definition: dataquad.c:291
void GP_get_trans(int id, float *xtrans, float *ytrans, float *ztrans)
Get trans.
Definition: GP2.c:406
int GP_load_site(int id, const char *filename)
Load point set from file.
Definition: GP2.c:173