GRASS 8 Programmer's Manual 8.6.0dev(2026)-985dd2421b
Loading...
Searching...
No Matches
position.c
Go to the documentation of this file.
1/*!
2 \file lib/nviz/position.c
3
4 \brief Nviz library -- Position, focus settings
5
6 Based on visualization/nviz/src/position.c
7
8 SPDX-FileCopyrightText: 2008, 2010 GRASS Development Team
9 SPDX-License-Identifier: GPL-2.0-or-later
10
11 \author Updated/modified by Martin Landa <landa.martin gmail.com> (Google SoC
12 2008/2010)
13 */
14
15#include <grass/glocale.h>
16#include <grass/nviz.h>
17
18/*!
19 Initialize view, position, lighting settings (focus)
20
21 Set position to center of view
22 */
24{
26 Nviz_set_focus_state(1); /* center of view */
27
28 /* set default lights (1 & 2) */
29 Nviz_set_light_position(data, 1, 0.68, -0.68, 0.80, 0.0);
30 Nviz_set_light_bright(data, 1, 0.8);
31 Nviz_set_light_color(data, 1, 255, 255, 255);
32 Nviz_set_light_ambient(data, 1, 0.2);
33 Nviz_set_light_position(data, 2, 0.0, 0.0, 1.0, 0.0);
34 Nviz_set_light_bright(data, 2, 0.5);
35 Nviz_set_light_color(data, 2, 255, 255, 255);
36 Nviz_set_light_ambient(data, 2, 0.3);
37
38 return;
39}
40
41/*!
42 \brief Set focus state
43
44 \param state_flag 1 for center view, 0 use viewdir
45
46 \return 1 on success
47 \return 0 on failure
48 */
50{
51 if (state_flag == 1)
52 GS_set_infocus(); /* return center of view */
53 else if (state_flag == 0)
54 GS_set_nofocus(); /* no center of view -- use viewdir */
55 else {
56 G_warning(_("Unable to set focus"));
57 return 0;
58 }
59
60 return 1;
61}
62
63/*!
64 \brief Set focus based on loaded map
65
66 If <i>map</i> is MAP_OBJ_UNDEFINED, set focus from first
67 surface/volume in the list.
68
69 \param type map object type
70 \param id map object id
71
72 \return 0 on no focus
73 \return id id of map object used for setting focus
74 */
75int Nviz_set_focus_map(int type, int id)
76{
77 if (GS_num_surfs() < 0 && GVL_num_vols() < 0) {
79 return 0;
80 }
81
82 if (type == MAP_OBJ_UNDEFINED) {
84
85 if (GS_num_surfs() > 0) {
87 id = surf_list[0];
89
91 }
92
93 if (GVL_num_vols() > 0) {
95 id = vol_list[0];
97
99 }
100 return id;
101 }
102
103 if (type == MAP_OBJ_SURF) {
105 }
106 else if (type == MAP_OBJ_VOL) {
108 }
109
110 return id;
111}
112
113/*!
114 \brief Get focus
115
116 \param data nviz data [unused]
117 \param x,y,z focus coordinates
118 */
119int Nviz_get_focus(nv_data *data G_UNUSED, float *x, float *y, float *z)
120{
121 float realto[3];
122
123 /* Get current center */
125 *x = realto[0];
126 *y = realto[1];
127 *z = realto[2];
128 /* old nviz code is more complicated and it doesn't work properly, */
129 /* no idea why */
130
131 return 1;
132}
133
134/*!
135 \brief Set focus
136
137 \param data nviz data [unused]
138 \param x, y, z focus coordinates
139 */
140int Nviz_set_focus(nv_data *data G_UNUSED, float x, float y, float z)
141{
142 float realto[3];
143
144 realto[0] = x;
145 realto[1] = y;
146 realto[2] = z;
148 /* old nviz code is more complicated and it doesn't work properly, */
149 /* no idea why */
150
151 return 1;
152}
153
154/*!
155 \brief Test focus
156
157 \param data nviz data [unused]
158 */
160{
161 float realto[3];
162
163 if (GS_get_focus(realto))
164 return 1;
165 else
166 return 0;
167}
168
169/*!
170 \brief Get xy range
171
172 \param data nviz data
173 */
175{
176 return data->xyrange;
177}
178
179/*!
180 \brief Get z range
181
182 \param data nviz data [unused]
183 \param min,max z range
184 */
185int Nviz_get_zrange(nv_data *data G_UNUSED, float *min, float *max)
186{
188 return 1;
189}
190
191/*!
192 \brief Get largest dimension
193
194 \param data nviz data [unused]
195 */
197{
198 float dim;
199
200 GS_get_longdim(&dim);
201
202 return dim;
203}
void G_free(void *)
Free allocated memory.
Definition gis/alloc.c:145
void G_warning(const char *,...) __attribute__((format(printf
int Nviz_set_light_position(nv_data *, int, double, double, double, double)
Set light position.
Definition lights.c:27
int Nviz_set_light_ambient(nv_data *, int, double)
Set light ambient.
Definition lights.c:115
int Nviz_set_light_color(nv_data *, int, int, int, int)
Set light color.
Definition lights.c:89
int Nviz_set_light_bright(nv_data *, int, double)
Set light brightness.
Definition lights.c:64
void GS_set_infocus(void)
Set focus.
Definition gs2.c:2961
int GS_get_longdim(float *)
Get largest dimension.
Definition gs2.c:136
void GS_set_focus(float *)
Set focus.
Definition gs2.c:2516
void GS_get_zrange_nz(float *, float *)
Get Z extents for all loaded surfaces.
Definition gs2.c:2354
int GS_num_surfs(void)
Get number of surfaces.
Definition gs2.c:1513
int GVL_num_vols(void)
Get number of loaded volume sets.
Definition gvl2.c:162
int * GS_get_surf_list(int *)
Get surface list.
Definition gs2.c:1528
void GS_set_focus_center_map(int)
Set focus to map center.
Definition gs2.c:2577
void GS_init_view(void)
Init viewpoint.
Definition gs2.c:3342
void GVL_set_focus_center_map(int)
Set focus on map center.
Definition gvl2.c:518
void GS_set_nofocus(void)
Unset focus.
Definition gs2.c:2947
int * GVL_get_vol_list(int *)
Get list of loaded volume sets.
Definition gvl2.c:177
int GS_get_focus(float *)
Get focus.
Definition gs2.c:2558
#define min(x, y)
Definition draw2.c:29
#define max(x, y)
Definition draw2.c:30
#define G_UNUSED
A macro for an attribute, if attached to a variable, indicating that the variable is not used.
Definition gis.h:43
#define _(str)
Definition glocale.h:10
#define MAP_OBJ_VOL
Definition nviz.h:43
#define MAP_OBJ_UNDEFINED
Definition nviz.h:41
#define MAP_OBJ_SURF
Definition nviz.h:42
void Nviz_init_view(nv_data *data)
Definition position.c:23
int Nviz_set_focus_map(int type, int id)
Set focus based on loaded map.
Definition position.c:75
float Nviz_get_longdim(nv_data *data)
Get largest dimension.
Definition position.c:196
int Nviz_set_focus(nv_data *data, float x, float y, float z)
Set focus.
Definition position.c:140
int Nviz_has_focus(nv_data *data)
Test focus.
Definition position.c:159
float Nviz_get_xyrange(nv_data *data)
Get xy range.
Definition position.c:174
int Nviz_get_focus(nv_data *data, float *x, float *y, float *z)
Get focus.
Definition position.c:119
int Nviz_get_zrange(nv_data *data, float *min, float *max)
Get z range.
Definition position.c:185
int Nviz_set_focus_state(int state_flag)
Set focus state.
Definition position.c:49
Definition nviz.h:96
float xyrange
Definition nviz.h:98
#define x