GRASS Programmer's Manual
6.4.2(2012)
|
00001 00015 #include <grass/nviz.h> 00016 00017 static void cp_draw(nv_data *, int, int, int); 00018 00026 int Nviz_new_cplane(nv_data * data, int id) 00027 { 00028 data->num_cplanes++; 00029 /* Initialize internal attributes for this cutplane */ 00030 data->cp_rot[id][X] = data->cp_rot[id][Y] = data->cp_rot[id][Z] = 0.0; 00031 data->cp_trans[id][X] = data->cp_trans[id][Y] = data->cp_trans[id][Z] = 00032 0.0; 00033 data->cp_on[id] = 0; 00034 00035 return 1; 00036 } 00037 00044 int Nviz_off_cplane(nv_data * data, int id) 00045 { 00046 data->cp_on[id] = 0; 00047 GS_unset_cplane(id); 00048 00049 return 1; 00050 } 00051 00058 int Nviz_draw_cplane(nv_data * data, int bound1, int bound2) 00059 { 00060 cp_draw(data, data->cur_cplane, bound1, bound2); 00061 00062 return 1; 00063 } 00064 00073 void cp_draw(nv_data * data, int current, int surf1, int surf2) 00074 { 00075 int i, nsurfs; 00076 int surf_min = 0, surf_max = 0, temp; 00077 int *surf_list; 00078 00079 GS_set_draw(GSD_BACK); 00080 GS_clear(data->bgcolor); 00081 GS_ready_draw(); 00082 00083 /* If surf boundaries present then find them */ 00084 surf_list = GS_get_surf_list(&nsurfs); 00085 if ((surf1 != -1) && (surf2 != -1)) { 00086 for (i = 0; i < nsurfs; i++) { 00087 if (surf_list[i] == surf1) 00088 surf_min = i; 00089 if (surf_list[i] == surf2) 00090 surf_max = i; 00091 } 00092 00093 if (surf_max < surf_min) { 00094 temp = surf_min; 00095 surf_min = surf_max; 00096 surf_max = temp; 00097 } 00098 00099 surf_max++; 00100 } 00101 else { 00102 surf_min = 0; 00103 surf_max = nsurfs; 00104 } 00105 00106 if (nsurfs > 1) { 00107 for (i = 0; i < MAX_CPLANES; i++) { 00108 if (data->cp_on[i]) 00109 GS_draw_cplane_fence(surf_list[0], surf_list[1], i); 00110 } 00111 } 00112 00113 for (i = surf_min; i < surf_max; i++) { 00114 GS_draw_wire(surf_list[i]); 00115 } 00116 00117 GS_done_draw(); 00118 00119 return; 00120 }