GRASS Programmer's Manual  6.4.2(2012)
 All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Macros Pages
cplanes_obj.c
Go to the documentation of this file.
1 
15 #include <grass/nviz.h>
16 
17 static void cp_draw(nv_data *, int, int, int);
18 
26 int Nviz_new_cplane(nv_data * data, int id)
27 {
28  data->num_cplanes++;
29  /* Initialize internal attributes for this cutplane */
30  data->cp_rot[id][X] = data->cp_rot[id][Y] = data->cp_rot[id][Z] = 0.0;
31  data->cp_trans[id][X] = data->cp_trans[id][Y] = data->cp_trans[id][Z] =
32  0.0;
33  data->cp_on[id] = 0;
34 
35  return 1;
36 }
37 
44 int Nviz_off_cplane(nv_data * data, int id)
45 {
46  data->cp_on[id] = 0;
47  GS_unset_cplane(id);
48 
49  return 1;
50 }
51 
58 int Nviz_draw_cplane(nv_data * data, int bound1, int bound2)
59 {
60  cp_draw(data, data->cur_cplane, bound1, bound2);
61 
62  return 1;
63 }
64 
73 void cp_draw(nv_data * data, int current, int surf1, int surf2)
74 {
75  int i, nsurfs;
76  int surf_min = 0, surf_max = 0, temp;
77  int *surf_list;
78 
79  GS_set_draw(GSD_BACK);
80  GS_clear(data->bgcolor);
81  GS_ready_draw();
82 
83  /* If surf boundaries present then find them */
84  surf_list = GS_get_surf_list(&nsurfs);
85  if ((surf1 != -1) && (surf2 != -1)) {
86  for (i = 0; i < nsurfs; i++) {
87  if (surf_list[i] == surf1)
88  surf_min = i;
89  if (surf_list[i] == surf2)
90  surf_max = i;
91  }
92 
93  if (surf_max < surf_min) {
94  temp = surf_min;
95  surf_min = surf_max;
96  surf_max = temp;
97  }
98 
99  surf_max++;
100  }
101  else {
102  surf_min = 0;
103  surf_max = nsurfs;
104  }
105 
106  if (nsurfs > 1) {
107  for (i = 0; i < MAX_CPLANES; i++) {
108  if (data->cp_on[i])
109  GS_draw_cplane_fence(surf_list[0], surf_list[1], i);
110  }
111  }
112 
113  for (i = surf_min; i < surf_max; i++) {
114  GS_draw_wire(surf_list[i]);
115  }
116 
117  GS_done_draw();
118 
119  return;
120 }