Changeset 1000 for trunk/vizservers/nanovis/dxReader.cpp
- Timestamp:
- May 5, 2008 3:05:29 PM (16 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/vizservers/nanovis/dxReader.cpp
r974 r1000 213 213 load_volume_stream2(int index, std::iostream& fin) 214 214 { 215 printf("load_volume_stream2\n"); 215 216 Rappture::Outcome result; 216 217 … … 384 385 int ngen = 0; 385 386 double v; 386 printf("test2\n");387 fflush(stdout);388 387 if (dv == 0.0) { 389 388 dv = 1.0; … … 393 392 v = data[ngen]; 394 393 // scale all values [0-1], -1 => out of bounds 394 // 395 // INSOO 395 396 v = (isnan(v)) ? -1.0 : (v - vmin)/dv; 396 397 data[ngen] = v; … … 511 512 for (int ix=0; ix < nx; ix++) { 512 513 // gradient in x-direction 514 //double valm1 = (ix == 0) ? 0.0 : data[ngen-4]; 515 //double valp1 = (ix == nx-1) ? 0.0 : data[ngen+4]; 513 516 double valm1 = (ix == 0) ? 0.0 : data[ngen-4]; 514 517 double valp1 = (ix == nx-1) ? 0.0 : data[ngen+4]; … … 516 519 data[ngen+1] = 0.0; 517 520 } else { 518 //data[ngen+1] = valp1-valm1; // assume dx=1519 data[ngen+1] = ((valp1-valm1) + 1.0) * 0.5; // assume dz=1521 data[ngen+1] = valp1-valm1; // assume dx=1 522 //data[ngen+1] = ((valp1-valm1) + 1.0) * 0.5; // assume dz=1 520 523 } 521 524 … … 526 529 data[ngen+2] = 0.0; 527 530 } else { 528 //data[ngen+2] = valp1-valm1; // assume dy=1529 data[ngen+2] = ((valp1-valm1) + 1.0) * 0.5; // assume dz=1531 data[ngen+2] = valp1-valm1; // assume dy=1 532 //data[ngen+2] = ((valp1-valm1) + 1.0) * 0.5; // assume dz=1 530 533 } 531 534 … … 536 539 data[ngen+3] = 0.0; 537 540 } else { 538 //data[ngen+3] = valp1-valm1; // assume dz=1539 data[ngen+3] = ((valp1-valm1) + 1.0) * 0.5; // assume dz=1541 data[ngen+3] = valp1-valm1; // assume dz=1 542 //data[ngen+3] = ((valp1-valm1) + 1.0) * 0.5; // assume dz=1 540 543 } 541 544 … … 576 579 load_volume_stream(int index, std::iostream& fin) 577 580 { 581 printf("load_volume_stream\n"); 578 582 Rappture::Outcome result; 579 583 … … 747 751 #endif 748 752 749 float *cdata = new float[nx*ny*nz]; 753 //#define _SOBEL 754 #ifdef _SOBEL_ 755 const int step = 1; 756 float *cdata = new float[nx*ny*nz * step]; 750 757 int ngen = 0; 751 758 double nzero_min = 0.0; … … 766 773 767 774 cdata[ngen] = v; 768 ++ngen;775 ngen += step; 769 776 } 770 777 } … … 773 780 float* data = computeGradient(cdata, nx, ny, nz, field.valueMin(), 774 781 field.valueMax()); 782 #else 783 double vmin = field.valueMin(); 784 double vmax = field.valueMax(); 785 double nzero_min = 0; 786 float *data = new float[nx*ny*nz * 4]; 787 double dv = vmax - vmin; 788 double v; 789 int ngen = 0; 790 if (dv == 0.0) dv = 1.0; 791 792 for (int iz=0; iz < nz; iz++) { 793 double zval = z0 + iz*dmin; 794 for (int iy=0; iy < ny; iy++) { 795 double yval = y0 + iy*dmin; 796 for (int ix=0; ix < nx; ix++) { 797 double xval = x0 + ix*dmin; 798 double v = field.value(xval,yval,zval); 799 800 // scale all values [0-1], -1 => out of bounds 801 v = (isnan(v)) ? -1.0 : (v - vmin)/dv; 802 803 data[ngen] = v; 804 ngen += 4; 805 } 806 } 807 } 808 809 computeSimpleGradient(data, nx, ny, nz); 810 #endif 775 811 776 812 for (int i=0; i<nx*ny*nz; i++) { … … 904 940 data[ngen+1] = 0.0; 905 941 } else { 906 //data[ngen+1] = valp1-valm1; // assume dx=1907 data[ngen+1] = ((valp1-valm1) + 1) * 0.5; // assume dx=1942 data[ngen+1] = valp1-valm1; // assume dx=1 943 //data[ngen+1] = ((valp1-valm1) + 1) * 0.5; // assume dx=1 (ISO) 908 944 } 909 945 … … 914 950 data[ngen+2] = 0.0; 915 951 } else { 916 //data[ngen+2] = valp1-valm1; // assume dy=1917 data[ngen+2] = ((valp1-valm1) + 1) * 0.5; // assume dy=1952 data[ngen+2] = valp1-valm1; // assume dy=1 953 //data[ngen+2] = ((valp1-valm1) + 1) * 0.5; // assume dy=1 (ISO) 918 954 } 919 955 … … 924 960 data[ngen+3] = 0.0; 925 961 } else { 926 //data[ngen+3] = valp1-valm1; // assume dz=1927 data[ngen+3] = ((valp1-valm1) + 1) * 0.5; // assume dz=1962 data[ngen+3] = valp1-valm1; // assume dz=1 963 //data[ngen+3] = ((valp1-valm1) + 1) * 0.5; // assume dz=1 (ISO) 928 964 } 929 965 … … 972 1008 } 973 1009 1010 Rappture::Outcome 1011 load_volume_stream_insoo(int index, std::iostream& fin) 1012 { 1013 printf("load_volume_stream\n"); 1014 Rappture::Outcome result; 1015 1016 Rappture::MeshTri2D xymesh; 1017 int dummy, nx, ny, nz, nxy, npts; 1018 double x0, y0, z0, dx, dy, dz, ddx, ddy, ddz; 1019 char line[128], type[128], *start; 1020 1021 int isrect = 1; 1022 1023 dx = dy = dz = 0.0; // Suppress compiler warning. 1024 x0 = y0 = z0 = 0.0; // May not have an origin line. 1025 while (!fin.eof()) { 1026 fin.getline(line, sizeof(line) - 1); 1027 if (fin.fail()) { 1028 return result.error("error in data stream"); 1029 } 1030 for (start=line; *start == ' ' || *start == '\t'; start++) 1031 ; // skip leading blanks 1032 1033 if (*start != '#') { // skip comment lines 1034 if (sscanf(start, "object %d class gridpositions counts %d %d %d", &dummy, &nx, &ny, &nz) == 4) { 1035 // found grid size 1036 isrect = 1; 1037 } else if (sscanf(start, "object %d class array type float rank 1 shape 3 items %d data follows", &dummy, &nxy) == 2) { 1038 isrect = 0; 1039 1040 double xx, yy, zz; 1041 for (int i=0; i < nxy; i++) { 1042 fin.getline(line,sizeof(line)-1); 1043 if (sscanf(line, "%lg %lg %lg", &xx, &yy, &zz) == 3) { 1044 xymesh.addNode( Rappture::Node2D(xx,yy) ); 1045 } 1046 } 1047 1048 char fpts[128]; 1049 sprintf(fpts, "/tmp/tmppts%d", getpid()); 1050 char fcells[128]; 1051 sprintf(fcells, "/tmp/tmpcells%d", getpid()); 1052 1053 std::ofstream ftmp(fpts); 1054 // save corners of bounding box first, to work around meshing 1055 // problems in voronoi utility 1056 ftmp << xymesh.rangeMin(Rappture::xaxis) << " " 1057 << xymesh.rangeMin(Rappture::yaxis) << std::endl; 1058 ftmp << xymesh.rangeMax(Rappture::xaxis) << " " 1059 << xymesh.rangeMin(Rappture::yaxis) << std::endl; 1060 ftmp << xymesh.rangeMax(Rappture::xaxis) << " " 1061 << xymesh.rangeMax(Rappture::yaxis) << std::endl; 1062 ftmp << xymesh.rangeMin(Rappture::xaxis) << " " 1063 << xymesh.rangeMax(Rappture::yaxis) << std::endl; 1064 for (int i=0; i < nxy; i++) { 1065 ftmp << xymesh.atNode(i).x() << " " << xymesh.atNode(i).y() << std::endl; 1066 1067 } 1068 ftmp.close(); 1069 1070 char cmdstr[512]; 1071 sprintf(cmdstr, "voronoi -t < %s > %s", fpts, fcells); 1072 if (system(cmdstr) == 0) { 1073 int cx, cy, cz; 1074 std::ifstream ftri(fcells); 1075 while (!ftri.eof()) { 1076 ftri.getline(line,sizeof(line)-1); 1077 if (sscanf(line, "%d %d %d", &cx, &cy, &cz) == 3) { 1078 if (cx >= 4 && cy >= 4 && cz >= 4) { 1079 // skip first 4 boundary points 1080 xymesh.addCell(cx-4, cy-4, cz-4); 1081 } 1082 } 1083 } 1084 ftri.close(); 1085 } else { 1086 return result.error("triangularization failed"); 1087 } 1088 1089 sprintf(cmdstr, "rm -f %s %s", fpts, fcells); 1090 system(cmdstr); 1091 } else if (sscanf(start, "object %d class regulararray count %d", &dummy, &nz) == 2) { 1092 // found z-grid 1093 } else if (sscanf(start, "origin %lg %lg %lg", &x0, &y0, &z0) == 3) { 1094 // found origin 1095 } else if (sscanf(start, "delta %lg %lg %lg", &ddx, &ddy, &ddz) == 3) { 1096 // found one of the delta lines 1097 if (ddx != 0.0) { dx = ddx; } 1098 else if (ddy != 0.0) { dy = ddy; } 1099 else if (ddz != 0.0) { dz = ddz; } 1100 } else if (sscanf(start, "object %d class array type %s rank 0 items %d data follows", &dummy, type, &npts) == 3) { 1101 if (isrect && (npts != nx*ny*nz)) { 1102 char mesg[256]; 1103 sprintf(mesg,"inconsistent data: expected %d points but found %d points", nx*ny*nz, npts); 1104 return result.error(mesg); 1105 } else if (!isrect && (npts != nxy*nz)) { 1106 char mesg[256]; 1107 sprintf(mesg,"inconsistent data: expected %d points but found %d points", nxy*nz, npts); 1108 return result.error(mesg); 1109 } 1110 break; 1111 } else if (sscanf(start, "object %d class array type %s rank 0 times %d data follows", &dummy, type, &npts) == 3) { 1112 if (npts != nx*ny*nz) { 1113 char mesg[256]; 1114 sprintf(mesg,"inconsistent data: expected %d points but found %d points", nx*ny*nz, npts); 1115 return result.error(mesg); 1116 } 1117 break; 1118 } 1119 } 1120 } 1121 1122 // read data points 1123 if (!fin.eof()) { 1124 if (isrect) { 1125 Rappture::Mesh1D xgrid(x0, x0+nx*dx, nx); 1126 Rappture::Mesh1D ygrid(y0, y0+ny*dy, ny); 1127 Rappture::Mesh1D zgrid(z0, z0+nz*dz, nz); 1128 Rappture::FieldRect3D field(xgrid, ygrid, zgrid); 1129 1130 double dval[6]; 1131 int nread = 0; 1132 int ix = 0; 1133 int iy = 0; 1134 int iz = 0; 1135 while (!fin.eof() && nread < npts) { 1136 fin.getline(line,sizeof(line)-1); 1137 if (fin.fail()) { 1138 return result.error("error reading data points"); 1139 } 1140 int n = sscanf(line, "%lg %lg %lg %lg %lg %lg", &dval[0], &dval[1], &dval[2], &dval[3], &dval[4], &dval[5]); 1141 1142 for (int p=0; p < n; p++) { 1143 int nindex = iz*nx*ny + iy*nx + ix; 1144 field.define(nindex, dval[p]); 1145 fprintf(stderr,"nindex = %i\tdval[%i] = %lg\n", nindex, p, 1146 dval[p]); 1147 fflush(stderr); 1148 nread++; 1149 if (++iz >= nz) { 1150 iz = 0; 1151 if (++iy >= ny) { 1152 iy = 0; 1153 ++ix; 1154 } 1155 } 1156 } 1157 } 1158 1159 // make sure that we read all of the expected points 1160 if (nread != nx*ny*nz) { 1161 char mesg[256]; 1162 sprintf(mesg,"inconsistent data: expected %d points but found %d points", nx*ny*nz, nread); 1163 result.error(mesg); 1164 return result; 1165 } 1166 1167 // figure out a good mesh spacing 1168 int nsample = 30; 1169 dx = field.rangeMax(Rappture::xaxis) - field.rangeMin(Rappture::xaxis); 1170 dy = field.rangeMax(Rappture::yaxis) - field.rangeMin(Rappture::yaxis); 1171 dz = field.rangeMax(Rappture::zaxis) - field.rangeMin(Rappture::zaxis); 1172 double dmin = pow((dx*dy*dz)/(nsample*nsample*nsample), 0.333); 1173 1174 nx = (int)ceil(dx/dmin); 1175 ny = (int)ceil(dy/dmin); 1176 nz = (int)ceil(dz/dmin); 1177 1178 #ifndef NV40 1179 // must be an even power of 2 for older cards 1180 nx = (int)pow(2.0, ceil(log10((double)nx)/log10(2.0))); 1181 ny = (int)pow(2.0, ceil(log10((double)ny)/log10(2.0))); 1182 nz = (int)pow(2.0, ceil(log10((double)nz)/log10(2.0))); 1183 #endif 1184 1185 float *data = new float[4*nx*ny*nz]; 1186 1187 double vmin = field.valueMin(); 1188 double dv = field.valueMax() - field.valueMin(); 1189 if (dv == 0.0) { dv = 1.0; } 1190 1191 int ngen = 0; 1192 double nzero_min = 0.0; 1193 for (iz=0; iz < nz; iz++) { 1194 double zval = z0 + iz*dmin; 1195 for (int iy=0; iy < ny; iy++) { 1196 double yval = y0 + iy*dmin; 1197 for (int ix=0; ix < nx; ix++) { 1198 double xval = x0 + ix*dmin; 1199 double v = field.value(xval,yval,zval); 1200 1201 if (v != 0.0f && v < nzero_min) 1202 { 1203 nzero_min = v; 1204 } 1205 // scale all values [0-1], -1 => out of bounds 1206 v = (isnan(v)) ? -1.0 : (v - vmin)/dv; 1207 data[ngen] = v; 1208 1209 ngen += 4; 1210 } 1211 } 1212 } 1213 1214 // Compute the gradient of this data. BE CAREFUL: center 1215 // calculation on each node to avoid skew in either direction. 1216 ngen = 0; 1217 for (int iz=0; iz < nz; iz++) { 1218 for (int iy=0; iy < ny; iy++) { 1219 for (int ix=0; ix < nx; ix++) { 1220 // gradient in x-direction 1221 double valm1 = (ix == 0) ? 0.0 : data[ngen-1]; 1222 double valp1 = (ix == nx-1) ? 0.0 : data[ngen+1]; 1223 if (valm1 < 0 || valp1 < 0) { 1224 data[ngen+1] = 0.0; 1225 } else { 1226 data[ngen+1] = valp1-valm1; // assume dx=1 1227 //data[ngen+1] = ((valp1-valm1) + 1) * 0.5; // assume dx=1 (ISO) 1228 } 1229 1230 // gradient in y-direction 1231 valm1 = (iy == 0) ? 0.0 : data[ngen-4*nx]; 1232 valp1 = (iy == ny-1) ? 0.0 : data[ngen+4*nx]; 1233 if (valm1 < 0 || valp1 < 0) { 1234 data[ngen+2] = 0.0; 1235 } else { 1236 data[ngen+2] = valp1-valm1; // assume dy=1 1237 //data[ngen+2] = ((valp1-valm1) + 1) * 0.5; // assume dy=1 (ISO) 1238 } 1239 1240 // gradient in z-direction 1241 valm1 = (iz == 0) ? 0.0 : data[ngen-4*nx*ny]; 1242 valp1 = (iz == nz-1) ? 0.0 : data[ngen+4*nx*ny]; 1243 if (valm1 < 0 || valp1 < 0) { 1244 data[ngen+3] = 0.0; 1245 } else { 1246 data[ngen+3] = valp1-valm1; // assume dz=1 1247 //data[ngen+3] = ((valp1-valm1) + 1) * 0.5; // assume dz=1 (ISO) 1248 } 1249 1250 ngen += 4; 1251 } 1252 } 1253 } 1254 1255 /* 1256 float *cdata = new float[nx*ny*nz]; 1257 int ngen = 0; 1258 double nzero_min = 0.0; 1259 for (int iz=0; iz < nz; iz++) { 1260 double zval = z0 + iz*dmin; 1261 for (int iy=0; iy < ny; iy++) { 1262 double yval = y0 + iy*dmin; 1263 for (int ix=0; ix < nx; ix++) { 1264 double xval = x0 + ix*dmin; 1265 double v = field.value(xval,yval,zval); 1266 1267 if (v != 0.0f && v < nzero_min) { 1268 nzero_min = v; 1269 } 1270 1271 // scale all values [0-1], -1 => out of bounds 1272 v = (isnan(v)) ? -1.0 : v; 1273 1274 cdata[ngen] = v; 1275 ++ngen; 1276 } 1277 } 1278 } 1279 1280 float* data = computeGradient(cdata, nx, ny, nz, field.valueMin(), 1281 field.valueMax()); 1282 1283 for (int i=0; i<nx*ny*nz; i++) { 1284 fprintf(stderr,"enddata[%i] = %lg\n",i,data[i]); 1285 fflush(stderr); 1286 } 1287 1288 fprintf(stdout,"End Data Stats index = %i\n",index); 1289 fprintf(stdout,"nx = %i ny = %i nz = %i\n",nx,ny,nz); 1290 fprintf(stdout,"dx = %lg dy = %lg dz = %lg\n",dx,dy,dz); 1291 fprintf(stdout,"dataMin = %lg\tdataMax = %lg\tnzero_min = %lg\n", field.valueMin(),field.valueMax(),nzero_min); 1292 fflush(stdout); 1293 */ 1294 1295 Volume *volPtr; 1296 volPtr = NanoVis::load_volume(index, nx, ny, nz, 4, data, 1297 field.valueMin(), field.valueMax(), nzero_min); 1298 volPtr->xAxis.SetRange(field.rangeMin(Rappture::xaxis), 1299 field.rangeMax(Rappture::xaxis)); 1300 volPtr->yAxis.SetRange(field.rangeMin(Rappture::yaxis), 1301 field.rangeMax(Rappture::yaxis)); 1302 volPtr->zAxis.SetRange(field.rangeMin(Rappture::zaxis), 1303 field.rangeMax(Rappture::zaxis)); 1304 volPtr->wAxis.SetRange(field.valueMin(), field.valueMax()); 1305 volPtr->update_pending = true; 1306 // TBD.. 1307 // POINTSET 1308 /* 1309 PointSet* pset = new PointSet(); 1310 pset->initialize(volume[index], (float*) data); 1311 pset->setVisible(true); 1312 NanoVis::pointSet.push_back(pset); 1313 updateColor(pset); 1314 NanoVis::volume[index]->pointsetIndex = NanoVis::pointSet.size() - 1; 1315 */ 1316 1317 delete [] data; 1318 1319 } else { 1320 Rappture::Mesh1D zgrid(z0, z0+nz*dz, nz); 1321 Rappture::FieldPrism3D field(xymesh, zgrid); 1322 1323 double dval; 1324 int nread = 0; 1325 int ixy = 0; 1326 int iz = 0; 1327 while (!fin.eof() && nread < npts) { 1328 fin >> dval; 1329 if (fin.fail()) { 1330 char mesg[256]; 1331 sprintf(mesg,"after %d of %d points: can't read number", 1332 nread, npts); 1333 return result.error(mesg); 1334 } else { 1335 int nid = nxy*iz + ixy; 1336 field.define(nid, dval); 1337 1338 nread++; 1339 if (++iz >= nz) { 1340 iz = 0; 1341 ixy++; 1342 } 1343 } 1344 } 1345 1346 // make sure that we read all of the expected points 1347 if (nread != nxy*nz) { 1348 char mesg[256]; 1349 sprintf(mesg,"inconsistent data: expected %d points but found %d points", nxy*nz, nread); 1350 return result.error(mesg); 1351 } 1352 1353 // figure out a good mesh spacing 1354 int nsample = 30; 1355 x0 = field.rangeMin(Rappture::xaxis); 1356 dx = field.rangeMax(Rappture::xaxis) - field.rangeMin(Rappture::xaxis); 1357 y0 = field.rangeMin(Rappture::yaxis); 1358 dy = field.rangeMax(Rappture::yaxis) - field.rangeMin(Rappture::yaxis); 1359 z0 = field.rangeMin(Rappture::zaxis); 1360 dz = field.rangeMax(Rappture::zaxis) - field.rangeMin(Rappture::zaxis); 1361 double dmin = pow((dx*dy*dz)/(nsample*nsample*nsample), 0.333); 1362 1363 nx = (int)ceil(dx/dmin); 1364 ny = (int)ceil(dy/dmin); 1365 nz = (int)ceil(dz/dmin); 1366 #ifndef NV40 1367 // must be an even power of 2 for older cards 1368 nx = (int)pow(2.0, ceil(log10((double)nx)/log10(2.0))); 1369 ny = (int)pow(2.0, ceil(log10((double)ny)/log10(2.0))); 1370 nz = (int)pow(2.0, ceil(log10((double)nz)/log10(2.0))); 1371 #endif 1372 float *data = new float[4*nx*ny*nz]; 1373 1374 double vmin = field.valueMin(); 1375 double dv = field.valueMax() - field.valueMin(); 1376 if (dv == 0.0) { dv = 1.0; } 1377 1378 // generate the uniformly sampled data that we need for a volume 1379 int ngen = 0; 1380 double nzero_min = 0.0; 1381 for (iz=0; iz < nz; iz++) { 1382 double zval = z0 + iz*dmin; 1383 for (int iy=0; iy < ny; iy++) { 1384 double yval = y0 + iy*dmin; 1385 for (int ix=0; ix < nx; ix++) { 1386 double xval = x0 + ix*dmin; 1387 double v = field.value(xval,yval,zval); 1388 1389 if (v != 0.0f && v < nzero_min) 1390 { 1391 nzero_min = v; 1392 } 1393 // scale all values [0-1], -1 => out of bounds 1394 v = (isnan(v)) ? -1.0 : (v - vmin)/dv; 1395 data[ngen] = v; 1396 1397 ngen += 4; 1398 } 1399 } 1400 } 1401 1402 // Compute the gradient of this data. BE CAREFUL: center 1403 // calculation on each node to avoid skew in either direction. 1404 ngen = 0; 1405 for (int iz=0; iz < nz; iz++) { 1406 for (int iy=0; iy < ny; iy++) { 1407 for (int ix=0; ix < nx; ix++) { 1408 // gradient in x-direction 1409 double valm1 = (ix == 0) ? 0.0 : data[ngen-1]; 1410 double valp1 = (ix == nx-1) ? 0.0 : data[ngen+1]; 1411 if (valm1 < 0 || valp1 < 0) { 1412 data[ngen+1] = 0.0; 1413 } else { 1414 data[ngen+1] = valp1-valm1; // assume dx=1 1415 //data[ngen+1] = ((valp1-valm1) + 1) * 0.5; // assume dx=1 (ISO) 1416 } 1417 1418 // gradient in y-direction 1419 valm1 = (iy == 0) ? 0.0 : data[ngen-4*nx]; 1420 valp1 = (iy == ny-1) ? 0.0 : data[ngen+4*nx]; 1421 if (valm1 < 0 || valp1 < 0) { 1422 data[ngen+2] = 0.0; 1423 } else { 1424 data[ngen+2] = valp1-valm1; // assume dy=1 1425 //data[ngen+2] = ((valp1-valm1) + 1) * 0.5; // assume dy=1 (ISO) 1426 } 1427 1428 // gradient in z-direction 1429 valm1 = (iz == 0) ? 0.0 : data[ngen-4*nx*ny]; 1430 valp1 = (iz == nz-1) ? 0.0 : data[ngen+4*nx*ny]; 1431 if (valm1 < 0 || valp1 < 0) { 1432 data[ngen+3] = 0.0; 1433 } else { 1434 data[ngen+3] = valp1-valm1; // assume dz=1 1435 //data[ngen+3] = ((valp1-valm1) + 1) * 0.5; // assume dz=1 (ISO) 1436 } 1437 1438 ngen += 4; 1439 } 1440 } 1441 } 1442 1443 Volume *volPtr; 1444 volPtr = NanoVis::load_volume(index, nx, ny, nz, 4, data, 1445 field.valueMin(), field.valueMax(), nzero_min); 1446 volPtr->xAxis.SetRange(field.rangeMin(Rappture::xaxis), 1447 field.rangeMax(Rappture::xaxis)); 1448 volPtr->yAxis.SetRange(field.rangeMin(Rappture::yaxis), 1449 field.rangeMax(Rappture::yaxis)); 1450 volPtr->zAxis.SetRange(field.rangeMin(Rappture::zaxis), 1451 field.rangeMax(Rappture::zaxis)); 1452 volPtr->wAxis.SetRange(field.valueMin(), field.valueMax()); 1453 volPtr->update_pending = true; 1454 // TBD.. 1455 // POINTSET 1456 /* 1457 PointSet* pset = new PointSet(); 1458 pset->initialize(volume[index], (float*) data); 1459 pset->setVisible(true); 1460 NanoVis::pointSet.push_back(pset); 1461 updateColor(pset); 1462 NanoVis::volume[index]->pointsetIndex = NanoVis::pointSet.size() - 1; 1463 */ 1464 1465 1466 delete [] data; 1467 } 1468 } else { 1469 return result.error("data not found in stream"); 1470 } 1471 1472 // 1473 // Center this new volume on the origin. 1474 // 1475 float dx0 = -0.5; 1476 float dy0 = -0.5*dy/dx; 1477 float dz0 = -0.5*dz/dx; 1478 NanoVis::volume[index]->move(Vector3(dx0, dy0, dz0)); 1479 return result; 1480 }
Note: See TracChangeset
for help on using the changeset viewer.