cap_data.c 4.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198
  1. #include "vizual.h"
  2. /******************************** cap_data **********************************/
  3. void draw_cap_side(D_spec, Headp, G3header, D_Cap, type)
  4. struct dspec *D_spec;
  5. file_info *Headp;
  6. file_info *G3header;
  7. struct Cap *D_Cap;
  8. int type;
  9. {
  10. int t, y, z;
  11. int xdim, ydim, zdim;
  12. int xysize;
  13. FILE *fp;
  14. float *DB;
  15. int old = 0;
  16. int yloop, zloop;
  17. int ystart, zstart;
  18. int xrc, yrc, zrc;
  19. int offset;
  20. *(D_Cap->D_buff) = '\0';
  21. fp = G3header->datainfp;
  22. xdim = G3header->xdim;
  23. ydim = G3header->ydim;
  24. zdim = G3header->zdim;
  25. xysize = xdim * ydim;
  26. build_thresh_arrays(D_spec, Headp);
  27. /*
  28. ** Old DSPF Cubes are 3 less than the number of data points across
  29. ** in each dimension. Thus to make Grid3 match up with
  30. ** Cubes, we have to throw away the outer points of each side
  31. ** Check difference in dimensions to see if we have an old
  32. ** or new file.
  33. */
  34. if ((xdim - Headp->xdim > 1) ||
  35. (ydim - Headp->ydim > 1) || (zdim - Headp->zdim > 1))
  36. old = 1;
  37. if (old) {
  38. yloop = ydim - 1;
  39. ystart = 1;
  40. zloop = zdim - 1;
  41. zstart = 1;
  42. xrc = xdim - 2;
  43. yrc = ydim - 2;
  44. zrc = zdim - 2;
  45. offset = 1;
  46. }
  47. else {
  48. yloop = ydim;
  49. ystart = 0;
  50. zloop = zdim;
  51. zstart = 0;
  52. xrc = xdim;
  53. yrc = ydim;
  54. zrc = zdim;
  55. offset = 0;
  56. }
  57. for (t = 0; t < 6; t++) {
  58. if (!(type & (1 << t)))
  59. continue;
  60. DB = D_Cap->D_buff;
  61. D_Cap->side = t;
  62. switch (t) {
  63. case 0: /*xyplane z = zdim */
  64. D_Cap->reverse = 1;
  65. D_Cap->minx = D_spec->B[X];
  66. D_Cap->miny = D_spec->B[Y];
  67. D_Cap->maxx = D_spec->E[X];
  68. D_Cap->maxy = D_spec->E[Y];
  69. D_Cap->z = D_spec->E[Z];
  70. D_Cap->Rows = yrc;
  71. D_Cap->Cols = xrc;
  72. for (y = ystart; y < yloop; y++) {
  73. G_fseek(fp, D_offset +
  74. (xysize * (D_spec->E[Z]) + y * xdim + offset) *
  75. sizeof(float), 0);
  76. fread(DB, xrc, sizeof(float), fp);
  77. DB += xrc;
  78. }
  79. break;
  80. case 1: /*xyplane z = 0 */
  81. D_Cap->reverse = 0;
  82. D_Cap->minx = D_spec->B[X];
  83. D_Cap->miny = D_spec->B[Y];
  84. D_Cap->maxx = D_spec->E[X];
  85. D_Cap->maxy = D_spec->E[Y];
  86. D_Cap->z = D_spec->B[Z];
  87. D_Cap->Rows = yrc;
  88. D_Cap->Cols = xrc;
  89. for (y = ystart; y < yloop; y++) {
  90. G_fseek(fp, D_offset +
  91. (xysize * (D_spec->B[Z] + offset) + y * xdim + offset) *
  92. sizeof(float), 0);
  93. fread(DB, xrc, sizeof(float), fp);
  94. DB += xrc;
  95. }
  96. break;
  97. case 2: /*yzplane x=xdim */
  98. D_Cap->reverse = 0;
  99. D_Cap->minx = D_spec->B[Y];
  100. D_Cap->miny = D_spec->B[Z];
  101. D_Cap->maxx = D_spec->E[Y];
  102. D_Cap->maxy = D_spec->E[Z];
  103. D_Cap->z = D_spec->E[X];
  104. D_Cap->Rows = zrc;
  105. D_Cap->Cols = yrc;
  106. for (z = zstart; z < zloop; z++) {
  107. for (y = ystart; y < yloop; y++) {
  108. G_fseek(fp, D_offset +
  109. (xysize * z + xdim * y + (D_spec->E[X] + offset)) *
  110. sizeof(float), 0);
  111. fread(DB++, sizeof(float), 1, fp);
  112. }
  113. }
  114. break;
  115. case 3: /*yzplane x = 0 */
  116. D_Cap->reverse = 1;
  117. D_Cap->minx = D_spec->B[Y];
  118. D_Cap->miny = D_spec->B[Z];
  119. D_Cap->maxx = D_spec->E[Y];
  120. D_Cap->maxy = D_spec->E[Z];
  121. D_Cap->z = D_spec->B[X];
  122. D_Cap->Rows = zrc;
  123. D_Cap->Cols = yrc;
  124. for (z = zstart; z < zloop; z++) {
  125. for (y = ystart; y < yloop; y++) {
  126. G_fseek(fp, D_offset +
  127. (xysize * z + xdim * y + (D_spec->B[X] + offset)) *
  128. sizeof(float), 0);
  129. fread(DB++, sizeof(float), 1, fp);
  130. }
  131. }
  132. break;
  133. case 4: /*xzplane y = ydim */
  134. D_Cap->reverse = 0;
  135. D_Cap->minx = D_spec->B[X];
  136. D_Cap->miny = D_spec->B[Z];
  137. D_Cap->maxx = D_spec->E[X];
  138. D_Cap->maxy = D_spec->E[Z];
  139. D_Cap->z = D_spec->E[Y];
  140. D_Cap->Rows = zrc;
  141. D_Cap->Cols = xrc;
  142. for (z = zstart; z < zloop; z++) {
  143. /* fill in the buff one line at a time */
  144. G_fseek(fp, D_offset +
  145. (xysize * z + xdim * (D_spec->E[Y] + offset) + offset) *
  146. sizeof(float), 0);
  147. fread(DB, sizeof(float), xrc, fp);
  148. DB += xrc;
  149. }
  150. break;
  151. case 5: /*xzplane y = 0 */
  152. D_Cap->reverse = 1;
  153. D_Cap->minx = D_spec->B[X];
  154. D_Cap->miny = D_spec->B[Z];
  155. D_Cap->maxx = D_spec->E[X];
  156. D_Cap->maxy = D_spec->E[Z];
  157. D_Cap->z = D_spec->B[Y];
  158. D_Cap->Rows = zrc;
  159. D_Cap->Cols = xrc;
  160. for (z = zstart; z < zloop; z++) {
  161. /* fill in the buff one line at a time */
  162. G_fseek(fp, D_offset +
  163. (xysize * z + xdim * (D_spec->B[Y] + offset) + offset) *
  164. sizeof(float), 0);
  165. fread(DB, sizeof(float), xrc, fp);
  166. DB += xrc;
  167. }
  168. break;
  169. }
  170. draw_cap(Headp, D_spec, D_Cap);
  171. }
  172. }