3
/*----------------- this is the include file section -----------------*/
12
#include <grass/config.h>
14
#if defined(OPENGL_X11) || defined(OPENGL_WINDOWS)
17
#elif defined(OPENGL_AQUA)
18
#include <OpenGL/gl.h>
19
#include <OpenGL/glu.h>
22
#include <grass/gis.h>
23
#include <grass/gsurf.h>
24
#include <grass/gstypes.h>
26
/* extern int *GV_get_vect_list(int *);
27
extern int *GS_get_surf_list(int *);
28
extern int *GP_get_site_list(int *); */
31
/*-------------- this is the data define section ---------------*/
43
/* I don't like this - to be consistant, should really do all scaling
44
in library, so can send real world coords. (seems like it would make
45
type-ins & sliders easier, too) */
46
#define RANGE (5 * GS_UNIT_SIZE)
47
#define RANGE_OFFSET (2 * GS_UNIT_SIZE)
48
#define ZRANGE (3 * GS_UNIT_SIZE)
49
#define ZRANGE_OFFSET (1 * GS_UNIT_SIZE)
51
#define DEFAULT_SURF_COLOR 0x33BBFF
52
#define DEFAULT_WIRE_COLOR 0x999999
53
#define DEFAULT_WIRE_CNT 10
54
#define DEFAULT_POLY_CNT 2
56
/* Attributes for vector and site files */
57
#define SV_ATT_WIDTH -1
58
#define SV_ATT_MARKER -2
59
#define SV_ATT_SIZE -3
60
#define SV_ATT_USEATT -4
61
#define SV_ATT_DISPLAY -5
63
#define SV_ATT_FLAT -7
68
extern GLuint FontBase;
71
/*------------------------------------------------------------------------
72
- this is the data type declaration section -
73
------------------------------------------------------------------------*/
80
float ar, ag, ab; /* ambient rgb */
81
float x, y, z, w; /* position */
86
float Zrange, XYrange;
89
int CurCplane, Cp_on[MAX_CPLANES];
90
float Cp_trans[MAX_CPLANES][3];
91
float Cp_rot[MAX_CPLANES][3];
93
light_data light[MAX_LIGHTS];
98
/* - The following structure is used to associate client data with surfaces.
99
* We do this so that we don't have to rely on the surface ID (which is libal to change
100
* between subsequent executions of nviz) when saving set-up info to files.
105
/* We use logical names to assign textual names to map objects.
106
When Nviz needs to refer to a map object it uses the logical name
107
rather than the map ID. By setting appropriate logical names, we
108
can reuse names inbetween executions of Nviz. The Nviz library
109
also provides a mechanism for aliasing between logical names.
110
Thus several logical names may refer to the same map object.
111
Aliases are meant to support the case in which two logical names
112
happen to be the same. The Nviz library automatically assigns
113
logical names uniquely if they are not specified in the creation
114
of a map object. When loading a saved file containing several map
115
objects, it is expected that the map 0bjects will be aliased to
116
their previous names. This ensures that old scripts will work.
123
/* Here are the functions that use these structures */
126
int Nset_interp_mode_cmd(Nv_data *, Tcl_Interp *, int, char **);
127
int Nset_tension_cmd(Nv_data *, Tcl_Interp *, int, char **);
128
int Nshowtension_start_cmd(Nv_data *, Tcl_Interp *, int, char **);
129
int Nupdate_tension_cmd(Nv_data *, Tcl_Interp *, int, char **);
130
int Nshowtension_stop_cmd(Nv_data *, Tcl_Interp *, int, char **);
131
int Nupdate_frames_cmd(Nv_data *, Tcl_Interp *, int, char **);
132
int Nset_numsteps_cmd(Nv_data *, Tcl_Interp *, int, char **);
133
int Nclear_keys_cmd(Nv_data *, Tcl_Interp *, int, char **);
134
int Nadd_key_cmd(Nv_data *, Tcl_Interp *, int, char **);
135
int Ndelete_key_cmd(Nv_data *, Tcl_Interp *, int, char **);
136
int Nmove_key_cmd(Nv_data *, Tcl_Interp *, int, char **);
137
int Ndo_framestep_cmd(Nv_data *, Tcl_Interp *, int, char **);
138
int Nshow_site_cmd(Nv_data *, Tcl_Interp *, int, char **);
139
int Nshow_vect_cmd(Nv_data *, Tcl_Interp *, int, char **);
140
int Nshow_vol_cmd(Nv_data *, Tcl_Interp *, int, char **);
141
int Nshow_lab_cmd(Nv_data *, Tcl_Interp *, int, char **);
142
int Nshow_path_cmd(Nv_data *, Tcl_Interp *, int, char **);
145
int Nchange_persp_cmd(Nv_data *, Tcl_Interp *, int, char **);
146
int Nchange_position_cmd(Nv_data *, Tcl_Interp *, int, char **);
147
int Nchange_height_cmd(Nv_data *, Tcl_Interp *, int, char **);
148
int Nset_light_to_view_cmd(Nv_data *, Tcl_Interp *, int, char **);
149
int Nchange_exag_cmd(Nv_data *, Tcl_Interp *, int, char **);
152
int Nset_fence_color_cmd(Nv_data *, Tcl_Interp *, int, char **);
153
int Nget_fence_color_cmd(Nv_data *, Tcl_Interp *, int, char **);
154
int Ncutplane_obj_cmd(Nv_data *, Tcl_Interp *, int, char **);
155
int Nnew_cutplane_obj_cmd(Nv_data *, Tcl_Interp *, int, char **);
156
int Nnum_cutplane_obj_cmd(Nv_data *, Tcl_Interp *, int, char **);
157
int Nset_current_cutplane_cmd(Nv_data *, Tcl_Interp *, int, char **);
158
int Nget_current_cutplane_cmd(Nv_data *, Tcl_Interp *, int, char **);
159
int Nget_cutplane_list_cmd(Nv_data *, Tcl_Interp *, int, char **);
160
void cp_draw(int, Nv_data *, int, int);
161
int draw_cp_obj(Nv_data *, Tcl_Interp *, int, char **, int);
162
int on_cp_obj(Nv_data *, Tcl_Interp *, int, char **, int);
163
int off_cp_obj(Nv_data *, Tcl_Interp *, int, char **, int);
164
int state_cp_obj(Nv_data *, Tcl_Interp *, int, char **, int);
165
int cp_set_rot(Nv_data *, Tcl_Interp *, int, char **, int);
166
int cp_set_trans(Nv_data *, Tcl_Interp *, int, char **, int);
167
int cp_get_rot(Nv_data *, Tcl_Interp *, int, char **, int);
168
int cp_get_trans(Nv_data *, Tcl_Interp *, int, char **, int);
169
int get_cp_idnum(char *);
172
void CancelFunc_Hook(void);
173
int Nunset_cancel_func_cmd(Nv_data *, Tcl_Interp *, int, char **);
174
int Nset_cancel_func_cmd(Nv_data *, Tcl_Interp *, int, char **);
175
int Nset_draw_cmd(Nv_data *, Tcl_Interp *, int, char **);
176
int Ntransp_is_set_cmd(Nv_data *, Tcl_Interp *, int, char **);
177
int Nis_masked_cmd(Nv_data *, Tcl_Interp *, int, char **);
178
int Nhas_transparency_cmd(Nv_data *, Tcl_Interp *, int, char **);
179
int Nget_def_color_cmd(Nv_data *, Tcl_Interp *, int, char **);
180
int Nclear_cmd(Nv_data *, Tcl_Interp *, int, char **);
181
int Ndraw_wire_cmd(Nv_data *, Tcl_Interp *, int, char **);
182
int Ndraw_X_cmd(Nv_data *, Tcl_Interp *, int, char **);
183
int Ndraw_line_on_surf_cmd(Nv_data *, Tcl_Interp *, int, char **);
184
int Ndraw_model_cmd(Nv_data *, Tcl_Interp *, int, char **);
185
int Nsurf_draw_one_cmd(Nv_data *, Tcl_Interp *, int, char **);
186
int sort_surfs_max(int *, int *, int *, int);
187
int Nvect_draw_one_cmd(Nv_data *, Tcl_Interp *, int, char **);
188
int Nsite_draw_one_cmd(Nv_data *, Tcl_Interp *, int, char **);
189
int Nvol_draw_one_cmd(Nv_data *, Tcl_Interp *, int, char **);
190
int Nsurf_draw_all_cmd(Nv_data *, Tcl_Interp *, int, char **);
191
int Nset_cancel_cmd(Nv_data *, Tcl_Interp *, int, char **);
192
int Nvect_draw_all_cmd(Nv_data *, Tcl_Interp *, int, char **);
193
int Nsite_draw_all_cmd(Nv_data *, Tcl_Interp *, int, char **);
194
int Nvol_draw_all_cmd(Nv_data *, Tcl_Interp *, int, char **);
195
int Nready_draw_cmd(void);
196
int Ndone_draw_cmd(void);
197
int check_blank(Tcl_Interp *, int);
200
int Nget_first_exag_cmd(Nv_data *, Tcl_Interp *, int, char **);
201
int Nget_height_cmd(Nv_data *, Tcl_Interp *, int, char **);
204
int tcl_color_to_int(const char *);
205
int Nresize_cmd(Nv_data *, Tcl_Interp *, int, char **);
206
int Nfinish_cmd(ClientData, Tcl_Interp *, int, char **);
207
int Nset_background_cmd(Nv_data *, Tcl_Interp *, int, char **);
209
/* init_commands.c */
210
int init_commands(Tcl_Interp *, Nv_data *);
213
int Nplace_label_cmd(Nv_data *, Tcl_Interp *, int, char **);
214
void G_site_destroy_struct(void *);
217
int Nlight_obj_cmd(Nv_data *, Tcl_Interp *, int, char **);
218
int Nnew_light_cmd(Nv_data *, Tcl_Interp *);
219
int Nlights_cmd(Nv_data *, Tcl_Interp *, int, char **);
222
int Nliteral_from_logical_cmd(Nv_data *, Tcl_Interp *, int, char *[]);
223
int Nlogical_from_literal_cmd(Nv_data *, Tcl_Interp *, int, char *[]);
224
int Nget_surf_list_cmd(Nv_data *, Tcl_Interp *, int, char *[]);
225
int Nget_vect_list_cmd(Nv_data *, Tcl_Interp *, int, char *[]);
226
int Nget_site_list_cmd(Nv_data *, Tcl_Interp *, int, char *[]);
227
int Nget_vol_list_cmd(Nv_data *, Tcl_Interp *, int, char *[]);
228
int Nnew_map_obj_cmd(Nv_data *, Tcl_Interp *, int, char *[]);
229
int Nmap_obj_cmd(Nv_data *, Tcl_Interp *, int, char *[]);
230
int get_idnum(char *);
231
int get_type(char *);
232
int att_atoi(char *);
233
int slice(int, int, Tcl_Interp *, int, char *[]);
234
int isosurf(int, int, Tcl_Interp *, int, char *[]);
237
int Nlibinit_cmd(Nv_data *, Tcl_Interp *, int, char **);
238
int Nget_cancel_cmd(Nv_data *, Tcl_Interp *, int, char **);
239
int Nset_SDsurf_cmd(Nv_data *, Tcl_Interp *, int, char **);
240
int Nunset_SDsurf_cmd(Nv_data *, Tcl_Interp *, int, char **);
241
int Nset_SDscale_cmd(Nv_data *, Tcl_Interp *, int, char **);
244
int Ninit(Tcl_Interp *, Tk_Window);
245
int Ninitdata(Tcl_Interp *, Nv_data *);
248
int Ninit_view_cmd(Nv_data *, Tcl_Interp *, int, char **);
249
int Nget_to_cmd(Nv_data *, Tcl_Interp *, int, char **);
250
int Nget_from_cmd(Nv_data *, Tcl_Interp *, int, char **);
251
int Nlook_here_cmd(Nv_data *, Tcl_Interp *, int, char **);
252
int Nhas_focus_cmd(Nv_data *, Tcl_Interp *, int, char **);
253
int Nset_focus_cmd(Nv_data *, Tcl_Interp *, int, char **);
254
int Nset_focus_state_cmd(Nv_data *, Tcl_Interp *, int, char **);
255
int Nset_focus_map_cmd(Nv_data *, Tcl_Interp *, int, char **);
256
int Nmove_to_cmd(Nv_data *, Tcl_Interp *, int, char **);
257
int Nset_fov_cmd(Nv_data *, Tcl_Interp *, int, char **);
258
int Nget_region_cmd(Nv_data *, Tcl_Interp *, int, char **);
259
int Nget_point_on_surf_cmd(Nv_data *, Tcl_Interp *, int, char **);
260
int Nget_dist_along_surf_cmd(Nv_data *, Tcl_Interp *, int, char **);
261
int Nget_cat_at_xy_cmd(Nv_data *, Tcl_Interp *, int, char **);
262
int Nget_val_at_xy_cmd(Nv_data *, Tcl_Interp *, int, char **);
263
int Nget_focus_cmd(Nv_data *, Tcl_Interp *, int, char **);
264
int Nget_longdim_cmd(Nv_data *, Tcl_Interp *, int, char **);
265
int Nget_zrange_cmd(Nv_data *, Tcl_Interp *, int, char **);
266
int Nget_xyrange_cmd(Nv_data *, Tcl_Interp *, int, char **);
267
int Nget_zextents_cmd(Nv_data *, Tcl_Interp *, int, char **);
268
int Nget_exag_cmd(Nv_data *, Tcl_Interp *, int, char **);
269
int Nset_exag_cmd(Nv_data *, Tcl_Interp *, int, char **);
270
int Nsave_3dview_cmd(Nv_data *, Tcl_Interp *, int, char **);
271
int Nload_3dview_cmd(Nv_data *, Tcl_Interp *, int, char **);
274
int Nquick_draw_cmd(Nv_data *, Tcl_Interp *);
276
/* script_support.c */
277
int ScriptAddString_Cmd(ClientData, Tcl_Interp *, int, char **);
278
int CloseScripting_Cmd(ClientData, Tcl_Interp *, int, char **);
279
int SetState_Cmd(ClientData, Tcl_Interp *, int, char **);
280
int SetScriptFile_Cmd(ClientData, Tcl_Interp *, int, char **);
283
int Create_OS_Ctx(int, int);
284
int Destroy_OS_Ctx(void);
287
char *query_vect(char *, double, double);
289
/* togl_flythrough.c */
290
int Nset_viewdir_cmd(Nv_data * data, Tcl_Interp * interp, int argc,
292
int Nget_viewdir_cmd(Nv_data * data, Tcl_Interp * interp, int argc,
294
int Ndraw_all_together_cmd(Nv_data * data, Tcl_Interp * interp, int argc,
296
void togl_flythrough_init_tcl(Tcl_Interp *, Nv_data *);
297
void flythrough_postdraw_cb_remove();
298
void flythrough_postdraw_cb();
301
GLuint load_font(char *);
302
void hide_togl_win(void);
303
void show_togl_win(void);
306
Display *togl_display(void);
307
Screen *togl_screen(void);
308
int togl_screen_number(void);
313
int Tcl_AppInit(Tcl_Interp *);
316
int TkCopyAndGlobalEval(Tcl_Interp *, char *);
319
#if TK_MAJOR_VERSION==8 && TK_MINOR_VERSION > 3
320
CONST char *Tk_SetAppName(Tk_Window, CONST char *);
322
char *Tk_SetAppName(Tk_Window, char *);
324
int Tk_SendCmd(ClientData, Tcl_Interp *, int, char **);
325
int TkGetInterpNames(Tcl_Interp *, Tk_Window);
328
int Tk_RegisterInterp(Tcl_Interp *, char *, Tk_Window);
329
int Tk_SendCmd(ClientData, Tcl_Interp *, int, char **);
330
int TkGetInterpNames(Tcl_Interp *, Tk_Window);
332
/* tkSpecial_Wait.c */
333
int Tk_Tkspecial_waitCmd(ClientData, Tcl_Interp *, int, char **);
334
int update_ranges(Nv_data *);
335
void cp_draw(int, Nv_data *, int, int);
336
int draw_cp_obj(Nv_data *, Tcl_Interp *, int, char **, int);
337
int on_cp_obj(Nv_data *, Tcl_Interp *, int, char **, int);
338
int off_cp_obj(Nv_data *, Tcl_Interp *, int, char **, int);
339
int state_cp_obj(Nv_data *, Tcl_Interp *, int, char **, int);
340
int cp_set_rot(Nv_data *, Tcl_Interp *, int, char **, int);
341
int cp_set_trans(Nv_data *, Tcl_Interp *, int, char **, int);
342
int cp_get_rot(Nv_data *, Tcl_Interp *, int, char **, int);
343
int cp_get_trans(Nv_data *, Tcl_Interp *, int, char **, int);
344
int surf_draw_all(Nv_data *, Tcl_Interp *);
345
int init_default_slider_vals1(Nv_data *, float *, float *, float *);
346
int set_drawmode(Tcl_Interp *, int, int, Nv_data *, int, char *[]);
347
int get_drawmode(int, int, Nv_data *, Tcl_Interp *);
348
int delete_obj(int, int, Nv_data *, Tcl_Interp *);
349
int set_wirecolor(Tcl_Interp *, int, int, Nv_data *, int, char *[]);
350
int get_wirecolor(int, int, Nv_data *, Tcl_Interp *);
351
int set_nozero(Tcl_Interp *, int, int, Nv_data *, int, char *[]);
352
int get_nozero(int, int, Nv_data *, Tcl_Interp *, int, char *[]);
353
int load_obj(int, int, Nv_data *, int, char *[], Tcl_Interp *);
354
int get_att(int, int, Nv_data *, Tcl_Interp *, int, char *[]);
355
int set_att(int, int, Nv_data *, Tcl_Interp *, int, char *[]);
356
int get_mask_mode(int, int, Nv_data *, Tcl_Interp *);
357
int set_mask_mode(int, int, Nv_data *, Tcl_Interp *, int, char *[]);
358
int set_default_wirecolors(Nv_data *, int);
361
int isosurf_set_res(int, Tcl_Interp *, int, char *[]);
362
int isosurf_get_res(int, Tcl_Interp *, int, char *[]);
363
int isosurf_set_drawmode(int, Tcl_Interp *, int, char *[]);
364
int isosurf_get_drawmode(int, Tcl_Interp *, int, char *[]);
365
int isosurf_num_isosurfs(int, Tcl_Interp *, int, char *[]);
366
int isosurf_add(int, Tcl_Interp *, int, char *[]);
367
int isosurf_del(int, Tcl_Interp *, int, char *[]);
368
int isosurf_move_up(int, Tcl_Interp *, int, char *[]);
369
int isosurf_move_down(int, Tcl_Interp *, int, char *[]);
370
int isosurf_get_att(int, Tcl_Interp *, int, char *[]);
371
int isosurf_set_att(int, Tcl_Interp *, int, char *[]);
372
int isosurf_unset_att(int, Tcl_Interp *, int, char *[]);
373
int isosurf_att_atoi(char *);
374
int isosurf_get_mask_mode(int, Tcl_Interp *, int, char *[]);
375
int isosurf_set_mask_mode(int, Tcl_Interp *, int, char *[]);
376
int isosurf_get_flags(int, Tcl_Interp *, int, char *[]);
377
int isosurf_set_flags(int, Tcl_Interp *, int, char *[]);
378
int slice_set_res(int, Tcl_Interp *, int, char *[]);
379
int slice_get_res(int, Tcl_Interp *, int, char *[]);
380
int slice_set_drawmode(int, Tcl_Interp *, int, char *[]);
381
int slice_get_drawmode(int, Tcl_Interp *, int, char *[]);
382
int slice_num_slices(int, Tcl_Interp *, int, char *[]);
383
int slice_set_pos(int, Tcl_Interp *, int, char *[]);
384
int slice_get_pos(int, Tcl_Interp *, int, char *[]);
385
int slice_add(int, Tcl_Interp *, int, char *[]);
386
int slice_del(int, Tcl_Interp *, int, char *[]);
387
int slice_move_up(int, Tcl_Interp *, int, char *[]);
388
int slice_move_down(int, Tcl_Interp *, int, char *[]);
389
int slice_get_transp(int, Tcl_Interp *, int, char *[]);
390
int slice_set_transp(int, Tcl_Interp *, int, char *[]);
394
/* site_attr_commands.c */
395
int site_attr_open_map(geosite *, int, struct Map_info **, int *, char ***,
397
int site_attr_set_color(geosite *, int, int, int, const char **,
399
int site_attr_set_size(geosite *, int, int, int, const char **,
401
int site_attr_set_fixed_color(geosite *, int, unsigned int);
402
int site_attr_set_fixed_size(geosite *, int, float);
403
int site_attr_set_fixed_marker(geosite *, int, int);
404
int site_attr_set(Tcl_Interp *, geosite *, int, char *, int, char *, char *);
405
int site_attr_unset(Tcl_Interp *, geosite *, int, char *);
406
int site_attr_get(Tcl_Interp *, geosite *, int);
407
void site_attr_init_tcl(Tcl_Interp *, Nv_data *);
408
void site_attr_init(int);
409
int attr_interp_entries(int, const char **, const char **, float **, float **,
411
int attr_interp_colors(int, const char **, const char **, float **, float **,
412
float **, float **, float **, float **, float **);
413
int attr_get_int_BBGGRR(const char *);
414
float attr_get_RRGGBB(const char *, float *, float *, float *);
415
int attr_interp_entries_string(int, const char **, float **);
416
int attr_interp_colors_string(int, const char **, float **, float **,
418
int attr_eval_color(float, int, float *, float *, float *, float *, float *,
420
int attr_eval_color_string(const char *, int, const char **, float *, float *,
422
float attr_eval_entry_string(const char *, int, const char **, float *);
424
/* pick_vect_commands.c */
425
void pick_init_tcl(Tcl_Interp *, Nv_data *);
427
/* site_highlight_commands.c */
428
void site_highlight_init_tcl(Tcl_Interp *, Nv_data *);