2
/***************************************************************
4
* MODULE: site_highlight_commands.c 1.0
6
* AUTHOR(S): ACS - Massimo Cuomo - m.cuomo at acsys.it
8
* PURPOSE: Tcl commands created:
10
* Sites depending commands
12
* Nsite_highlight "what" "site_id" "cat" ["value"]
13
* - highlights a specific geopoint -
14
* what = color/size/marker/default
15
* default: panel highlight type and values are used instead of "value"
16
* site_id = (string range map_name 5 end)
17
* cat = DB category associated to the specific geopoint
18
* [value] (optional) = #rrggbb for color
21
* when omitted default value is used
23
* Nsite_highlight_list "what" "site_id" "catlist" ["value"]
24
* - highlights a list of geopoints -
25
* what = color/size/marker/default
26
* default: panel highlight type and values are used instead of "value"
27
* site_id = (string range map_name 5 end)
28
* catlist = list of DB category associated to the each geopoint
29
* [value] (optional) = #rrggbb for color
32
* when omitted default value is used
35
* Nsite_unhighlight "what" "site_id" "cat"
36
* - unhighlights a specific geopoint -
37
* what = color/size/marker
38
* site_id = (string range map_name 5 end)
39
* cat = DB category associated to the specific geopoint
41
* Nsite_unhighlight_list "what" "site_id" "catlist"
42
* - unhighlights a list of geopoints -
43
* what = color/size/marker/default
44
* default: panel highlight type and values are used instead of "value"
45
* site_id = (string range map_name 5 end)
46
* catlist = list of DB category associated to the each geopoint
48
* Nsite_unhighlight_all "what" "site_id"
49
* - unhighlights all site geopoints -
50
* what = color/size/marker/all
51
* all: unhighlights color, size and marker
52
* site_id = (string range map_name 5 end)
55
* Sites independent commands (for panel_highlight.tcl)
57
* Nsite_highlight_set_default "what" "value"
58
* - sets highlight default type -
59
* what = color/size/marker
60
* value = 1/0 (1: turns ON / 0 turns OFF color/size/marker highlight)
62
* Nsite_highlight_get_default "what"
63
* - returns highlight default type -
64
* what = color/size/marker
66
* Nsite_highlight_set_default_value "what" "value"
67
* - sets highlight default value -
68
* what = color/size/marker
69
* value = color/size/marker value to set
71
* Nsite_highlight_get_default_value "what"
72
* - returns highlight default value -
73
* what = color/size/marker
76
* REQUIREMENTS: external files with needed modifications:
79
* visualization/nviz/src/Makefile
80
* visualization/nviz/src/nviz_init.c
87
* See following "README" section for details
90
* COPYRIGHT: (C) 2005 by the ACS / GRASS Development Team
92
* This program is free software under the
93
* GNU General Public License (>=v2).
94
* Read the file COPYING that comes with GRASS
97
**************************************************************/
100
******************************************************************************* ********************site_highlight "README" ********************************** *******************************************************************************Files involved:
102
-src(mod) visualization / nviz / src / Makefile
103
(new) visualization / nviz / src / site_highlight_commands.c
104
(mod) visualization / nviz / src / nviz_init.c
106
(mod) lib / ogsf / gstypes.h
107
(mod) lib / ogsf / Gp3.c
108
(mod) lib / ogsf / gpd.c
110
(new) visualization / nviz / scripts / panel_highlight.tcl
112
(mod) visualization / nviz / src / Makefile
113
added compilation for site_highlight_commands
114
.c(new) visualization / nviz / src / site_highlight_commands.c this file: creates Tcl commands(mod) visualization / nviz / src / nviz_init.c added call to function:site_highlight_init_tcl(interp,
116
to intialize all the Tcl commands -
117
ogsf(mod) lib / ogsf /
118
gstypes.h added in struct g_point:... int highlight_color;
120
int highlight_marker;
122
TRUE / FALSE flags to enable / disable proper highlight
123
int highlight_color_value;
124
float highlight_size_value;
125
int highlight_marker_value;
127
...proper highlight values used for each
128
geopoint(mod) lib / ogsf / Gp3.c added line:gpt->highlight_color =
129
gpt->highlight_size = gpt->highlight_marker = FALSE;
130
in order to get the proper initializations(mod) lib / ogsf /
131
gpd.c added:if (gpt->highlight_color)
132
color = gpt->highlight_color_value;
134
if (gpt->highlight_size)
135
marker = gpt->highlight_marker_value;
136
if (gpt->highlight_marker)
137
size *= gpt->highlight_size_value;
139
in function "gpd_obj_site_attr"(that replaces function "gpd_obj")
144
(new) visualization / nviz / scripts / panel_highlight.tcl
145
to panelIndex file add:"highlight"
146
to tclIndex file add:set auto_index(mkhighlightPanel)
147
"source $dir/panel_highlight.tcl"
148
*******************************************************************************
149
********************end site_highlight "README"
150
******************************
151
*******************************************************************************
156
#include "interface.h"
157
#define SITE_HIGHLIGHT_ALL 0
158
#define SITE_HIGHLIGHT_COLOR 1
159
#define SITE_HIGHLIGHT_SIZE 2
160
#define SITE_HIGHLIGHT_MARKER 3
161
static int default_highlight_color_value = 0xffffff; /* white */
162
static float default_highlight_size_value = 1.2f;
163
static int default_highlight_marker_value = 9; /* ST_GYRO */
165
static int default_highlight_color = 1;
166
static int default_highlight_size = 0;
167
static int default_highlight_marker = 0;
170
/* Color conversion function */
171
int site_highlight_get_int_BBGGRR(char *rrggbb)
173
/* rrggbb is in the form of #RRGGBB (first char is skipped) */
176
memcpy(strbuf + 0, rrggbb + 5, 2);
177
memcpy(strbuf + 2, rrggbb + 3, 2);
178
memcpy(strbuf + 4, rrggbb + 1, 2);
179
memset(strbuf + 6, 0, 1);
180
return (strtol(strbuf, NULL, 16));
185
int Nsite_highlight_cmd(Nv_data * data, Tcl_Interp * interp, int argc,
187
int Nsite_highlight_list_cmd(Nv_data * data, Tcl_Interp * interp, int argc,
190
int Nsite_unhighlight_list_cmd(Nv_data * data, Tcl_Interp * interp, int argc,
192
int Nsite_unhighlight_cmd(Nv_data * data, Tcl_Interp * interp, int argc,
194
int Nsite_unhighlight_all_cmd(Nv_data * data, Tcl_Interp * interp, int argc,
198
int Nsite_highlight_set_default_cmd(Nv_data * data, Tcl_Interp * interp,
199
int argc, char **argv);
200
int Nsite_highlight_get_default_cmd(Nv_data * data, Tcl_Interp * interp,
201
int argc, char **argv);
202
int Nsite_highlight_set_default_value_cmd(Nv_data * data, Tcl_Interp * interp,
203
int argc, char **argv);
204
int Nsite_highlight_get_default_value_cmd(Nv_data * data, Tcl_Interp * interp,
205
int argc, char **argv);
208
/* called by nviz_init.c */
210
void site_highlight_init_tcl(Tcl_Interp * interp, Nv_data * data)
212
Tcl_CreateCommand(interp, "Nsite_highlight",
213
(Tcl_CmdProc *) Nsite_highlight_cmd, data, NULL);
214
Tcl_CreateCommand(interp, "Nsite_unhighlight",
215
(Tcl_CmdProc *) Nsite_unhighlight_cmd, data, NULL);
217
Tcl_CreateCommand(interp, "Nsite_highlight_list",
218
(Tcl_CmdProc *) Nsite_highlight_list_cmd, data, NULL);
219
Tcl_CreateCommand(interp, "Nsite_unhighlight_list",
220
(Tcl_CmdProc *) Nsite_unhighlight_list_cmd, data, NULL);
222
Tcl_CreateCommand(interp, "Nsite_unhighlight_all",
223
(Tcl_CmdProc *) Nsite_unhighlight_all_cmd, data, NULL);
225
Tcl_CreateCommand(interp, "Nsite_highlight_set_default",
226
(Tcl_CmdProc *) Nsite_highlight_set_default_cmd, data,
228
Tcl_CreateCommand(interp, "Nsite_highlight_get_default",
229
(Tcl_CmdProc *) Nsite_highlight_get_default_cmd, data,
231
Tcl_CreateCommand(interp, "Nsite_highlight_set_default_value",
232
(Tcl_CmdProc *) Nsite_highlight_set_default_value_cmd,
234
Tcl_CreateCommand(interp, "Nsite_highlight_get_default_value",
235
(Tcl_CmdProc *) Nsite_highlight_get_default_value_cmd,
240
/*not used for now */
241
geosite *site_highlight_get_geosite(char *name)
246
id = GP_get_site_list(&n);
247
for (i = 0; i < n; i++) {
248
gp = gp_get_site(id[i]);
249
if (!strcmp(gp->filename, name)) {
259
geopoint *site_highlight_get_geopoint(geosite * gp, int cat)
263
for (gpt = gp->points; gpt; gpt = gpt->next) {
271
int site_highlight_loop(geosite * gp, const char **argvPtr, int argcPtr,
272
int what, int flag, float value)
278
case SITE_HIGHLIGHT_SIZE:
279
for (i = 0; i < argcPtr; i++) {
281
site_highlight_get_geopoint(gp, atoi(argvPtr[i]))) == NULL)
283
gpt->highlight_size = flag;
284
gpt->highlight_size_value = value;
287
case SITE_HIGHLIGHT_COLOR:
288
for (i = 0; i < argcPtr; i++) {
290
site_highlight_get_geopoint(gp, atoi(argvPtr[i]))) == NULL)
292
gpt->highlight_color = flag;
293
gpt->highlight_color_value = (int)value;
296
case SITE_HIGHLIGHT_MARKER:
297
for (i = 0; i < argcPtr; i++) {
299
site_highlight_get_geopoint(gp, atoi(argvPtr[i]))) == NULL)
301
gpt->highlight_marker = flag;
302
gpt->highlight_marker_value = (int)value;
305
case SITE_HIGHLIGHT_ALL:
306
for (i = 0; i < argcPtr; i++) {
308
site_highlight_get_geopoint(gp, atoi(argvPtr[i]))) == NULL)
310
gpt->highlight_size = flag;
311
gpt->highlight_color = flag;
312
gpt->highlight_marker = flag;
314
gpt->highlight_size_value = value;
315
gpt->highlight_color_value = (int)value;
316
gpt->highlight_marker_value = (int)value;
326
int Nsite_highlight_cmd(Nv_data * data, Tcl_Interp * interp, int argc,
329
/* argv[1] = what (color/size/marker) / argv[2] = id / argv[3] = category / [argv[4] = color] */
335
if ((gp = gp_get_site(atoi(argv[2]))) == NULL)
337
if ((gpt = site_highlight_get_geopoint(gp, atoi(argv[3]))) == NULL)
340
if (!strcmp(argv[1], "size")) {
342
gpt->highlight_size_value = atof(argv[4]);
344
gpt->highlight_size_value = default_highlight_size_value;
345
gpt->highlight_size = TRUE;
347
else if (!strcmp(argv[1], "color")) {
349
gpt->highlight_color_value =
350
site_highlight_get_int_BBGGRR(argv[4]);
352
gpt->highlight_color_value = default_highlight_color_value;
353
gpt->highlight_color = TRUE;
355
else if (!strcmp(argv[1], "marker")) {
357
gpt->highlight_marker_value = atoi(argv[4]);
359
gpt->highlight_marker_value = default_highlight_marker_value;
360
gpt->highlight_marker = TRUE;
362
else if (!strcmp(argv[1], "default")) {
363
if (default_highlight_size != 0) {
364
gpt->highlight_size_value = default_highlight_size_value;
365
gpt->highlight_size = TRUE;
367
if (default_highlight_color != 0) {
368
gpt->highlight_color_value = default_highlight_color_value;
369
gpt->highlight_color = TRUE;
371
if (default_highlight_marker != 0) {
372
gpt->highlight_marker_value = default_highlight_marker_value;
373
gpt->highlight_marker = TRUE;
383
int Nsite_highlight_list_cmd(Nv_data * data, Tcl_Interp * interp, int argc,
386
/* argv[1] = what (color/size/marker) / argv[2] = id / argv[3] = list of categories / [argv[4] = color] */
388
const char **argvPtr;
394
if ((gp = gp_get_site(atoi(argv[2]))) == NULL)
397
if (TCL_OK != Tcl_SplitList(interp, argv[3], &argcPtr, &argvPtr))
401
if (!strcmp(argv[1], "size")) {
403
value = atof(argv[4]);
405
value = default_highlight_size_value;
407
if (site_highlight_loop
408
(gp, argvPtr, argcPtr, SITE_HIGHLIGHT_SIZE, TRUE, value) == 0)
411
else if (!strcmp(argv[1], "color")) {
413
value = (float)site_highlight_get_int_BBGGRR(argv[4]);
415
value = (float)default_highlight_color_value;
417
if (site_highlight_loop
418
(gp, argvPtr, argcPtr, SITE_HIGHLIGHT_COLOR, TRUE, value) == 0)
421
else if (!strcmp(argv[1], "marker")) {
423
value = (float)atoi(argv[4]);
425
value = (float)default_highlight_marker_value;
427
if (site_highlight_loop
428
(gp, argvPtr, argcPtr, SITE_HIGHLIGHT_MARKER, TRUE, value) == 0)
431
else if (!strcmp(argv[1], "default")) {
432
if (default_highlight_size != 0) {
433
value = default_highlight_size_value;
434
if (site_highlight_loop
435
(gp, argvPtr, argcPtr, SITE_HIGHLIGHT_SIZE, TRUE, value) == 0)
438
if (default_highlight_color != 0) {
439
value = (float)default_highlight_color_value;
440
if (site_highlight_loop
441
(gp, argvPtr, argcPtr, SITE_HIGHLIGHT_COLOR, TRUE,
445
if (default_highlight_marker != 0) {
446
value = (float)default_highlight_marker_value;
447
if (site_highlight_loop
448
(gp, argvPtr, argcPtr, SITE_HIGHLIGHT_MARKER, TRUE,
456
Tcl_Free((char *)argvPtr);
461
Tcl_Free((char *)argvPtr);
465
int Nsite_unhighlight_cmd(Nv_data * data, Tcl_Interp * interp, int argc,
468
/* argv[1] = what (color/size/marker/all) / argv[2] = id / argv[3] = category */
474
if ((gp = gp_get_site(atoi(argv[2]))) == NULL)
476
if ((gpt = site_highlight_get_geopoint(gp, atoi(argv[3]))) == NULL)
479
if (!strcmp(argv[1], "size"))
480
gpt->highlight_size = FALSE;
481
else if (!strcmp(argv[1], "color"))
482
gpt->highlight_color = FALSE;
483
else if (!strcmp(argv[1], "marker"))
484
gpt->highlight_marker = FALSE;
485
else if (!strcmp(argv[1], "all")) {
486
gpt->highlight_color = FALSE;
487
gpt->highlight_size = FALSE;
488
gpt->highlight_marker = FALSE;
496
int Nsite_unhighlight_list_cmd(Nv_data * data, Tcl_Interp * interp, int argc,
499
/* argv[1] = what (color/size/marker) / argv[2] = id / argv[3] = list of categories / [argv[4] = color] */
501
const char **argvPtr;
506
if ((gp = gp_get_site(atoi(argv[2]))) == NULL)
509
if (TCL_OK != Tcl_SplitList(interp, argv[3], &argcPtr, &argvPtr))
513
if (!strcmp(argv[1], "size")) {
514
if (site_highlight_loop
515
(gp, argvPtr, argcPtr, SITE_HIGHLIGHT_SIZE, FALSE, 0.0) == 0)
518
else if (!strcmp(argv[1], "color")) {
519
if (site_highlight_loop
520
(gp, argvPtr, argcPtr, SITE_HIGHLIGHT_COLOR, FALSE, 0.0) == 0)
523
else if (!strcmp(argv[1], "marker")) {
524
if (site_highlight_loop
525
(gp, argvPtr, argcPtr, SITE_HIGHLIGHT_MARKER, FALSE, 0.0) == 0)
528
else if (!strcmp(argv[1], "all")) {
529
if (site_highlight_loop
530
(gp, argvPtr, argcPtr, SITE_HIGHLIGHT_ALL, FALSE, 0.0) == 0)
536
Tcl_Free((char *)argvPtr);
541
Tcl_Free((char *)argvPtr);
546
int Nsite_unhighlight_all_cmd(Nv_data * data, Tcl_Interp * interp, int argc,
549
/* argv[1] = what (color/size/marker/all) / argv[2] = id */
555
if ((gp = gp_get_site(atoi(argv[2]))) == NULL)
558
if (!strcmp(argv[1], "size")) {
559
for (gpt = gp->points; gpt; gpt = gpt->next)
560
gpt->highlight_size = FALSE;
562
else if (!strcmp(argv[1], "color")) {
563
for (gpt = gp->points; gpt; gpt = gpt->next)
564
gpt->highlight_color = FALSE;
566
else if (!strcmp(argv[1], "marker")) {
567
for (gpt = gp->points; gpt; gpt = gpt->next)
568
gpt->highlight_marker = FALSE;
570
else if (!strcmp(argv[1], "all")) {
571
for (gpt = gp->points; gpt; gpt = gpt->next) {
572
gpt->highlight_color = FALSE;
573
gpt->highlight_size = FALSE;
574
gpt->highlight_marker = FALSE;
584
Commands for highlight panel, not depending from sites
587
int Nsite_highlight_set_default_value_cmd(Nv_data * data, Tcl_Interp * interp,
588
int argc, char **argv)
590
/* argv[1] = what (color/size/marker) / argv[2] = value */
595
if (!strcmp(argv[1], "size")) {
596
default_highlight_size_value = atof(argv[2]);
598
else if (!strcmp(argv[1], "color")) {
599
default_highlight_color_value =
600
site_highlight_get_int_BBGGRR(argv[2]);
602
else if (!strcmp(argv[1], "marker")) {
603
default_highlight_marker_value = atoi(argv[2]);
611
int Nsite_highlight_get_default_value_cmd(Nv_data * data, Tcl_Interp * interp,
612
int argc, char **argv)
614
/* argv[1] = what (color/size/marker) */
620
if (!strcmp(argv[1], "size")) {
621
sprintf(buf, "%.1f", default_highlight_size_value);
623
else if (!strcmp(argv[1], "color")) {
624
sprintf(buf, "#%x", default_highlight_color_value);
626
else if (!strcmp(argv[1], "marker")) {
627
sprintf(buf, "%d", default_highlight_marker_value);
632
Tcl_SetResult(interp, buf, TCL_VOLATILE);
640
int Nsite_highlight_set_default_cmd(Nv_data * data, Tcl_Interp * interp,
641
int argc, char **argv)
643
/* argv[1] = what (color/size/marker) / argv[2] = value */
648
if (!strcmp(argv[1], "size")) {
649
default_highlight_size = atoi(argv[2]);
651
else if (!strcmp(argv[1], "color")) {
652
default_highlight_color = atoi(argv[2]);
654
else if (!strcmp(argv[1], "marker")) {
655
default_highlight_marker = atoi(argv[2]);
663
int Nsite_highlight_get_default_cmd(Nv_data * data, Tcl_Interp * interp,
664
int argc, char **argv)
666
/* argv[1] = what (color/size/marker) */
672
if (!strcmp(argv[1], "size")) {
673
sprintf(buf, "%d", default_highlight_size);
675
else if (!strcmp(argv[1], "color")) {
676
sprintf(buf, "%d", default_highlight_color);
678
else if (!strcmp(argv[1], "marker")) {
679
sprintf(buf, "%d", default_highlight_marker);
684
Tcl_SetResult(interp, buf, TCL_VOLATILE);