Changeset 1434 for trunk/packages/vizservers/nanovis
- Timestamp:
- May 14, 2009 10:18:44 PM (15 years ago)
- Location:
- trunk/packages/vizservers/nanovis
- Files:
-
- 7 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/packages/vizservers/nanovis/Command.cpp
r1431 r1434 689 689 Rappture::Outcome err; 690 690 unsigned int flags; 691 flags = RPENC_ HDR;691 flags = RPENC_Z|RPENC_B64|RPENC_HDR; 692 692 if (!Rappture::encoding::decode(err, buf, flags)) { 693 693 printf("ERROR -- DECODING\n"); … … 1234 1234 return TCL_ERROR; 1235 1235 } 1236 1236 const char *tag; 1237 tag = Tcl_GetString(objv[4]); 1237 1238 Rappture::Buffer buf; 1238 1239 if (GetDataStream(interp, buf, nbytes) != TCL_OK) { … … 1317 1318 } 1318 1319 } else { 1319 1320 #ifdef notdef 1321 Rappture::Unirect3d *dataPtr; 1322 1323 dataPtr = new Rappture::Unirect3d(1); 1324 if (!dataPtr->ImportDx(result, 1, buf.size(), (char *)buf.bytes())) { 1325 Tcl_AppendResult(interp, result.remark(), (char *)NULL); 1326 delete dataPtr; 1327 return TCL_ERROR; 1328 } 1329 #if !ISO_TEST 1330 dataPtr->Resample(context, 30); 1331 #endif 1332 Volume *volPtr; 1333 volPtr = NanoVis::load_volume(index, nx, ny, nz, 4, data, vmin, vmax, 1334 nzero_min); 1335 1336 volPtr->xAxis.SetRange(dataPtr->xMin(), dataPtr->xMin() + (nx * dx)); 1337 volPtr->yAxis.SetRange(dataPtr->yMin(), dataPtr->yMin() + (ny * dy)); 1338 volPtr->zAxis.SetRange(dataPtr->zMin(), dataPtr->zMin() + (nz * dz)); 1339 volPtr->wAxis.SetRange(vmin, vmax); 1340 volPtr->update_pending = true; 1341 1342 flowPtr->SetData(dataPtr); 1343 #endif 1320 1344 printf("OpenDX loading...\n"); 1321 1345 fflush(stdout); … … 1367 1391 volPtr = NanoVis::volume[n]; 1368 1392 // FIXME: strlen(info) is the return value of sprintf 1369 sprintf(info, "nv>data id %d min %g max %g vmin %g vmax %g\n",1370 n, volPtr->wAxis.min(), volPtr->wAxis.max(),1393 sprintf(info, "nv>data tag %s id %d min %g max %g vmin %g vmax %g\n", 1394 tag, n, volPtr->wAxis.min(), volPtr->wAxis.max(), 1371 1395 Volume::valueMin, Volume::valueMax); 1372 1396 nWritten = write(0, info, strlen(info)); … … 1403 1427 1404 1428 static Rappture::CmdSpec volumeDataOps[] = { 1405 {"follows", 1, VolumeDataFollowsOp, 4, 4, "size",},1429 {"follows", 1, VolumeDataFollowsOp, 5, 5, "size tag",}, 1406 1430 {"state", 1, VolumeDataStateOp, 4, 0, "bool ?indices?",}, 1407 1431 }; -
trunk/packages/vizservers/nanovis/FlowCmd.cpp
r1431 r1434 338 338 } 339 339 340 341 #ifdef notdef342 int343 NanoVis::InitVectorField(Tcl_Interp *interp)344 {345 if (flowVisRenderer == NULL) {346 Tcl_AppendResult(interp, "flowvis renderer is NULL", (char *)NULL);347 return TCL_ERROR;348 }349 if (licRenderer == NULL) {350 Tcl_AppendResult(interp, "LIC renderer is NULL", (char *)NULL);351 return TCL_ERROR;352 }353 _fieldPtr->setVectorField(_volPtr->id, *(_volPtr->get_location()),354 1.0f, _volPtr->height / (float)_volPtr->width,355 _volPtr->depth / (float)_volPtr->width,356 _volPtr->wAxis.max());357 358 licRenderer->make_patterns();359 licRenderer->setVectorField(360 _volPtr->id, /* Texture ID */361 *(_volPtr->get_location()), /* Origin */362 1.0f / volPtr->aspect_ratio_width, /* X-axis scale. */363 1.0f / volPtr->aspect_ratio_height, /* Y-axis scale. */364 1.0f / volPtr->aspect_ratio_depth, /* Z-axis scale. */365 volPtr->wAxis.max()); /* Maximum ???? */366 367 licRenderer->set_offset(lic_slice_z);368 return TCL_OK;369 }370 #endif371 372 340 int 373 341 FlowCmd::CreateParticles(Tcl_Interp *interp, Tcl_Obj *objPtr) … … 499 467 } 500 468 return (FlowBox *)Tcl_GetHashValue(iterPtr->hashPtr); 501 }502 503 void504 FlowCmd::GetMagRange(double &min_mag, double &max_mag)505 {506 const float *values = _dataPtr->values();507 size_t nValues = _dataPtr->nValues();508 max_mag = -1e21, min_mag = 1e21;509 for (size_t i = 0; i < nValues; i += 3) {510 double vx, vy, vz, vm;511 512 vx = values[i];513 vy = values[i+1];514 vz = values[i+2];515 516 vm = sqrt(vx*vx + vy*vy + vz*vz);517 if (vm > max_mag) {518 max_mag = vm;519 }520 if (vm < min_mag) {521 min_mag = vm;522 }523 }524 469 } 525 470 … … 712 657 { 713 658 Rappture::Outcome result; 714 659 715 660 const char *fileName; 716 661 fileName = Tcl_GetString(objv[3]); 717 662 Trace("Flow loading data from file %s\n", fileName); 718 663 719 int extents;720 if (Tcl_GetIntFromObj(interp, objv[4], & extents) != TCL_OK) {664 int nComponents; 665 if (Tcl_GetIntFromObj(interp, objv[4], &nComponents) != TCL_OK) { 721 666 return TCL_ERROR; 722 667 } 723 if (( extents < 1) || (extents > 4)) {724 Tcl_AppendResult(interp, "bad extents value \"", Tcl_GetString(objv[4]),725 "\"", (char *)NULL);668 if ((nComponents < 1) || (nComponents > 4)) { 669 Tcl_AppendResult(interp, "bad # of components \"", 670 Tcl_GetString(objv[4]), "\"", (char *)NULL); 726 671 return TCL_ERROR; 727 672 } … … 737 682 Rappture::Unirect3d *dataPtr; 738 683 739 dataPtr = new Rappture::Unirect3d( extents);740 if (!dataPtr-> ReadVectorDataFromDx(result, buf.size(),684 dataPtr = new Rappture::Unirect3d(nComponents); 685 if (!dataPtr->ImportDx(result, nComponents, buf.size(), 741 686 (char *)buf.bytes())) { 742 687 Tcl_AppendResult(interp, result.remark(), (char *)NULL); … … 754 699 return TCL_ERROR; 755 700 } 756 dataPtr = new Rappture::Unirect3d( extents);701 dataPtr = new Rappture::Unirect3d(nComponents); 757 702 cmdInfo.objClientData = (ClientData)dataPtr; 758 703 Tcl_SetCommandInfo(interp, "unirect3d", &cmdInfo); … … 769 714 Rappture::Unirect3d *dataPtr; 770 715 771 dataPtr = new Rappture::Unirect3d( extents);772 if (!dataPtr-> ReadVectorDataFromDx(result, buf.size(),773 716 dataPtr = new Rappture::Unirect3d(nComponents); 717 if (!dataPtr->ImportDx(result, nComponents, buf.size(), 718 (char *)buf.bytes())) { 774 719 Tcl_AppendResult(interp, result.remark(), (char *)NULL); 775 720 delete dataPtr; … … 783 728 784 729 /* 785 * $flow data follows nbytes extents730 * $flow data follows nbytes nComponents 786 731 */ 787 732 static int … … 804 749 return TCL_ERROR; 805 750 } 806 int extents;807 if (Tcl_GetIntFromObj(interp, objv[4], & extents) != TCL_OK) {808 Trace("Bad extents \"%s\"\n", Tcl_GetString(objv[4]));751 int nComponents; 752 if (Tcl_GetIntFromObj(interp, objv[4], &nComponents) != TCL_OK) { 753 Trace("Bad # of components \"%s\"\n", Tcl_GetString(objv[4])); 809 754 return TCL_ERROR; 810 755 } 811 if ( extents <= 0) {812 Tcl_AppendResult(interp, "bad extents request \"",756 if (nComponents <= 0) { 757 Tcl_AppendResult(interp, "bad # of components request \"", 813 758 Tcl_GetString(objv[4]), "\" for \"data follows\"", (char *)NULL); 814 Trace("Bad extents %d\n", extents);759 Trace("Bad # of components %d\n", nComponents); 815 760 return TCL_ERROR; 816 761 } 817 762 Rappture::Buffer buf; 818 Trace("Flow Data Loading %d %d\n", nBytes, extents);763 Trace("Flow Data Loading %d %d\n", nBytes, nComponents); 819 764 if (GetDataStream(interp, buf, nBytes) != TCL_OK) { 820 765 return TCL_ERROR; … … 824 769 Rappture::Unirect3d *dataPtr; 825 770 826 dataPtr = new Rappture::Unirect3d( extents);827 if (!dataPtr-> ReadVectorDataFromDx(result, buf.size(),771 dataPtr = new Rappture::Unirect3d(nComponents); 772 if (!dataPtr->ImportDx(result, nComponents, buf.size(), 828 773 (char *)buf.bytes())) { 829 774 Tcl_AppendResult(interp, result.remark(), (char *)NULL); … … 839 784 /* Set the clientdata field of the unirect3d command to contain 840 785 * the local data structure. */ 841 dataPtr = new Rappture::Unirect3d( extents);786 dataPtr = new Rappture::Unirect3d(nComponents); 842 787 if (!Tcl_GetCommandInfo(interp, "unirect3d", &cmdInfo)) { 843 788 return TCL_ERROR; … … 859 804 Rappture::Unirect3d *dataPtr; 860 805 861 dataPtr = new Rappture::Unirect3d( extents);862 if (!dataPtr-> ReadVectorDataFromDx(result, buf.size(),863 806 dataPtr = new Rappture::Unirect3d(nComponents); 807 if (!dataPtr->ImportDx(result, nComponents, buf.size(), 808 (char *)buf.bytes())) { 864 809 Tcl_AppendResult(interp, result.remark(), (char *)NULL); 865 810 delete dataPtr; … … 873 818 size_t length; 874 819 875 length = sprintf(info, "nv>data id 0 name %s min 0 max 1 vmin 0 vmax 1\n", 876 flowPtr->name()); 820 length = sprintf(info, "nv>data tag %s id 0 min %g max %g vmin %g vmax %g\n", 821 flowPtr->name(), NanoVis::magMin, 822 NanoVis::magMax, NanoVis::xMin, NanoVis::xMax); 877 823 nWritten = write(0, info, length); 878 824 assert(nWritten == (ssize_t)strlen(info)); … … 883 829 884 830 static Rappture::CmdSpec flowDataOps[] = { 885 {"file", 2, FlowDataFileOp, 5, 5, "fileName extents",},886 {"follows", 2, FlowDataFollowsOp, 5, 5, "size extents",},831 {"file", 2, FlowDataFileOp, 5, 5, "fileName nComponents",}, 832 {"follows", 2, FlowDataFollowsOp, 5, 5, "size nComponents",}, 887 833 }; 888 834 static int nFlowDataOps = NumCmdSpecs(flowDataOps); … … 1034 980 for (flowPtr = FirstFlow(&iter); flowPtr != NULL; 1035 981 flowPtr = NextFlow(&iter)) { 1036 double min Mag, maxMag;982 double min, max; 1037 983 if (!flowPtr->isDataLoaded()) { 1038 984 continue; 1039 985 } 1040 flowPtr->GetMagRange(minMag, maxMag);1041 if (minMag < NanoVis::magMin) {1042 NanoVis::magMin = minMag;1043 }1044 if (maxMag > NanoVis::magMax) {1045 NanoVis::magMax = maxMag;1046 }1047 986 Rappture::Unirect3d *dataPtr; 1048 987 dataPtr = flowPtr->GetData(); 1049 if (dataPtr->xMin() < NanoVis::xMin) { 1050 NanoVis::xMin = dataPtr->xMin(); 1051 } 1052 if (dataPtr->yMin() < NanoVis::yMin) { 1053 NanoVis::yMin = dataPtr->yMin(); 1054 } 1055 if (dataPtr->zMin() < NanoVis::zMin) { 1056 NanoVis::zMin = dataPtr->zMin(); 1057 } 1058 if (dataPtr->xMax() > NanoVis::xMax) { 1059 NanoVis::xMax = dataPtr->xMax(); 1060 } 1061 if (dataPtr->yMax() > NanoVis::yMax) { 1062 NanoVis::yMax = dataPtr->yMax(); 1063 } 1064 if (dataPtr->zMax() > NanoVis::zMax) { 1065 NanoVis::zMax = dataPtr->zMax(); 988 min = dataPtr->magMin(); 989 max = dataPtr->magMax(); 990 if (min < magMin) { 991 magMin = min; 992 } 993 if (max > magMax) { 994 magMax = max; 995 } 996 if (dataPtr->xMin() < xMin) { 997 xMin = dataPtr->xMin(); 998 } 999 if (dataPtr->yMin() < yMin) { 1000 yMin = dataPtr->yMin(); 1001 } 1002 if (dataPtr->zMin() < zMin) { 1003 zMin = dataPtr->zMin(); 1004 } 1005 if (dataPtr->xMax() > xMax) { 1006 xMax = dataPtr->xMax(); 1007 } 1008 if (dataPtr->yMax() > yMax) { 1009 yMax = dataPtr->yMax(); 1010 } 1011 if (dataPtr->zMax() > zMax) { 1012 zMax = dataPtr->zMax(); 1066 1013 } 1067 1014 } … … 1084 1031 return false; 1085 1032 } 1086 NanoVis::licRenderer->set_offset(flowPtr->GetRelativePosition()); 1087 } 1033 licRenderer->set_offset(flowPtr->GetRelativePosition()); 1034 } 1035 AdvectFlows(); 1088 1036 return true; 1089 1037 } … … 1092 1040 NanoVis::RenderFlows(void) 1093 1041 { 1094 #ifdef notdef1095 if (!licRenderer->active()) {1096 licRenderer->active(true);1097 }1098 #endif1099 1042 FlowCmd *flowPtr; 1100 1043 FlowIterator iter; … … 1111 1054 NanoVis::ResetFlows(void) 1112 1055 { 1113 #ifdef notdef1114 if (!licRenderer->active()) {1115 licRenderer->active(true);1116 }1117 #endif1118 1056 FlowCmd *flowPtr; 1119 1057 FlowIterator iter; … … 1129 1067 NanoVis::AdvectFlows(void) 1130 1068 { 1131 #ifdef notdef1132 if (!licRenderer->active()) {1133 licRenderer->active(true);1134 }1135 #endif1136 1069 FlowCmd *flowPtr; 1137 1070 FlowIterator iter; … … 1821 1754 { 1822 1755 assert(NanoVis::licRenderer != NULL); 1823 #ifdef notdef1824 if (!NanoVis::licRenderer->active()) {1825 NanoVis::licRenderer->active(true);1826 }1827 #endif1828 1756 if (NanoVis::flags & NanoVis::MAP_FLOWS) { 1829 1757 NanoVis::MapFlows(); … … 1882 1810 return TCL_ERROR; 1883 1811 } 1884 #ifdef notdef1885 NanoVis::licRenderer->active(true);1886 #endif1887 1812 // Save the old dimensions of the offscreen buffer. 1888 1813 int oldWidth, oldHeight; -
trunk/packages/vizservers/nanovis/FlowCmd.h
r1431 r1434 16 16 struct FlowParticlesValues { 17 17 int isHidden; /* Indicates if particle injection 18 * plan ce is active or not. */18 * plane is active or not. */ 19 19 FlowPosition position; /* Position on axis of particle 20 20 * plane */ … … 285 285 NanoVis::licRenderer->active(_sv.sliceVisible); 286 286 } 287 void GetMagRange(double &min_mag, double &max_mag);288 289 287 void SetVectorField(NvVectorField *fieldPtr) { 290 288 DeleteVectorField(); -
trunk/packages/vizservers/nanovis/Unirect.cpp
r1431 r1434 416 416 417 417 bool 418 Rappture::Unirect3d:: ReadVectorDataFromDx(Rappture::Outcome &result,418 Rappture::Unirect3d::ImportDx(Rappture::Outcome &result, int nComponents, 419 419 size_t length, char *string) 420 420 { … … 486 486 _yMax = _yMin + dy * _yNum; 487 487 _zMax = _zMin + dz * _zNum; 488 _nComponents = nComponents; 489 488 490 if (_values != NULL) { 489 491 delete [] _values; … … 617 619 } 618 620 621 622 void 623 Rappture::Unirect3d::GetVectorRange(void) 624 { 625 assert(_nComponents == 3); 626 _magMax = -DBL_MAX, _magMin = DBL_MAX; 627 size_t i; 628 for (i = 0; i < _nValues; i += _nComponents) { 629 double vx, vy, vz, vm; 630 631 vx = _values[i]; 632 vy = _values[i+1]; 633 vz = _values[i+2]; 634 635 vm = sqrt(vx*vx + vy*vy + vz*vz); 636 if (vm > _magMax) { 637 _magMax = vm; 638 } 639 if (vm < _magMin) { 640 _magMin = vm; 641 } 642 } 643 } -
trunk/packages/vizservers/nanovis/Unirect.h
r1429 r1434 14 14 float _yValueMin, _yValueMax; 15 15 float _zValueMin, _zValueMax; 16 double _magMin, _magMax; /* Range of magnitudes of vector 17 * data. */ 16 18 char *_xUnits; 17 19 char *_yUnits; … … 21 23 float *_values; 22 24 bool _initialized; 25 void GetVectorRange(void); 23 26 24 27 public: … … 39 42 _xUnits = _yUnits = _zUnits = _vUnits = NULL; 40 43 _nComponents = nComponents; 44 _magMin = DBL_MAX; 45 _magMax = -DBL_MAX; 41 46 } 42 47 ~Unirect3d(void) { … … 70 75 _zMin = zMin; 71 76 _zNum = zNum; 77 _magMin = DBL_MAX; 78 _magMax = -DBL_MAX; 72 79 _nValues = nValues; 73 80 _values = values; … … 138 145 return _values; 139 146 } 147 double magMin(void) { 148 if (_magMin == DBL_MAX) { 149 GetVectorRange(); 150 } 151 return _magMin; 152 } 153 double magMax(void) { 154 if (_magMax == -DBL_MAX) { 155 GetVectorRange(); 156 } 157 return _magMax; 158 } 140 159 const float *SaveValues(void) { 141 160 float *values; … … 150 169 int LoadData(Tcl_Interp *interp, int objc, Tcl_Obj *const *objv); 151 170 152 bool ReadVectorDataFromDx(Rappture::Outcome &result, size_t length,153 char *string);171 bool ImportDx(Rappture::Outcome &result, int nComponents, 172 size_t length, char *string); 154 173 bool Resample(Rappture::Outcome &context, int nSamples = 30); 155 174 bool isInitialized(void) { -
trunk/packages/vizservers/nanovis/dxReader.cpp
r1429 r1434 44 44 45 45 #define _LOCAL_ZINC_TEST_ 0 46 47 static INLINE char *48 skipspaces(char *string)49 {50 while (isspace(*string)) {51 string++;52 }53 return string;54 }55 56 static INLINE char *57 getline(char **stringPtr, char *endPtr)58 {59 char *line, *p;60 61 line = skipspaces(*stringPtr);62 for (p = line; p < endPtr; p++) {63 if (*p == '\n') {64 *p++ = '\0';65 *stringPtr = p;66 return line;67 }68 }69 *stringPtr = p;70 return line;71 }72 73 Rappture::Unirect3d *74 ReadDxVectorFieldData(Rappture::Outcome &result, size_t length, char *string)75 {76 int nx, ny, nz, npts;77 double x0, y0, z0, dx, dy, dz, ddx, ddy, ddz;78 char *p, *endPtr;79 80 81 dx = dy = dz = 0.0; // Suppress compiler warning.82 x0 = y0 = z0 = 0.0; // May not have an origin line.83 for (p = string, endPtr = p + length; p < endPtr; /*empty*/) {84 char *line;85 86 line = getline(&p, endPtr);87 if (line == endPtr) {88 break;89 }90 if ((line[0] == '#') || (line == '\0')) {91 continue; // Skip blank or comment lines.92 }93 if (sscanf(line, "object %*d class gridpositions counts %d %d %d",94 &nx, &ny, &nz) == 3) {95 printf("w:%d h:%d d:%d\n", nx, ny, nz);96 // found grid size97 } else if (sscanf(line, "origin %lg %lg %lg", &x0, &y0, &z0) == 3) {98 // found origin99 } else if (sscanf(line, "delta %lg %lg %lg", &ddx, &ddy, &ddz) == 3) {100 // found one of the delta lines101 if (ddx != 0.0) {102 dx = ddx;103 } else if (ddy != 0.0) {104 dy = ddy;105 } else if (ddz != 0.0) {106 dz = ddz;107 }108 } else if (sscanf(line, "object %*d class array type %*s shape 3"109 " rank 1 items %d data follows", &npts) == 1) {110 printf("point %d\n", npts);111 if (npts != nx*ny*nz) {112 result.addError("inconsistent data: expected %d points"113 " but found %d points", nx*ny*nz, npts);114 return NULL;115 }116 break;117 } else if (sscanf(line, "object %*d class array type %*s rank 0"118 " times %d data follows", &npts) == 1) {119 if (npts != nx*ny*nz) {120 result.addError("inconsistent data: expected %d points"121 " but found %d points", nx*ny*nz, npts);122 return NULL;123 }124 break;125 }126 }127 if (npts != nx*ny*nz) {128 result.addError("inconsistent data: expected %d points"129 " but found %d points", nx*ny*nz, npts);130 return NULL;131 }132 float *values = new float[npts];133 int nValues = 0;134 for (int ix=0; ix < nx; ix++) {135 for (int iy=0; iy < ny; iy++) {136 for (int iz=0; iz < nz; iz++) {137 char *line;138 if ((p == endPtr) || (nValues > npts)) {139 break;140 }141 line = getline(&p, endPtr);142 if ((line[0] == '#') || (line[0] == '\0')) {143 continue; // Skip blank or comment lines.144 }145 double vx, vy, vz;146 if (sscanf(line, "%lg %lg %lg", &vx, &vy, &vz) == 3) {147 int nindex = (iz*nx*ny + iy*nx + ix) * 3;148 values[nindex] = vx;149 values[nindex+1] = vy;150 values[nindex+2] = vz;151 nValues++;152 }153 }154 }155 }156 // make sure that we read all of the expected points157 if (nValues != npts) {158 result.addError("inconsistent data: expected %d points"159 " but found %d points", npts, nValues);160 delete values;161 return NULL;162 }163 return new Rappture::Unirect3d(x0, x0 + dx * nx, nx, y0, y0 + dy * ny, ny,164 z0, z0 + dz * nz, nz, nValues, values, 3);165 }166 167 168 #ifdef notdef169 /*170 * Load a 3D vector field from a dx-format file171 */172 bool173 load_vector_stream2(Rappture::Outcome &result, int ivol, size_t length,174 char *string)175 {176 Rappture::Unirect3d *dataPtr;177 dataPtr = ReadDxVectorFieldData(result, length, string);178 if (dataPtr == NULL) {179 return false;180 }181 Vector3 physicalMin;182 Vector3 physicalMax;183 184 physicalMin.set(dataPtr->xMin(), dataPtr->yMin(), dataPtr->zMin());185 physicalMax.set(dataPtr->xMax(), dataPtr->yMax(), dataPtr->zMax());186 187 double max_mag = -DBL_MAX, min_mag = DBL_MAX;188 float *values = dataPtr->values();189 for (size_t ix=0; ix < dataPtr->xNum(); ix++) {190 for (size_t iy=0; iy < dataPtr->yNum(); iy++) {191 for (size_t iz=0; iz < dataPtr->zNum(); iz++) {192 double vx, vy, vz, vm;193 vx = values[0];194 vy = values[1];195 vz = values[2];196 vm = sqrt(vx*vx + vy*vy + vz*vz);197 if (vm > max_mag) {198 max_mag = vm;199 }200 if (vm < min_mag) {201 min_mag = vm;202 }203 values += 3;204 }205 }206 }207 208 float *data = new float[4*dataPtr->nValues()];209 memset(data, 0, sizeof(float) * 4 * dataPtr->nValues());210 fprintf(stderr, "generating %dx%dx%d = %d points\n",211 dataPtr->xNum(), dataPtr->yNum(), dataPtr->zNum(),212 dataPtr->nValues());213 214 float *destPtr = data;215 float *srcPtr = dataPtr->values();216 for (size_t iz=0; iz < dataPtr->zNum(); iz++) {217 for (size_t iy=0; iy < dataPtr->yNum(); iy++) {218 for (size_t ix=0; ix < dataPtr->xNum(); ix++) {219 double vx, vy, vz, vm;220 vx = values[0];221 vy = values[1];222 vz = values[2];223 vm = sqrt(vx*vx + vy*vy + vz*vz);224 destPtr[0] = vm / max_mag;225 destPtr[1] = vx /(2.0*max_mag) + 0.5;226 destPtr[2] = vy /(2.0*max_mag) + 0.5;227 destPtr[3] = vz /(2.0*max_mag) + 0.5;228 srcPtr += 3;229 destPtr += 4;230 }231 }232 }233 234 Volume *volPtr;235 volPtr = NanoVis::load_volume(ivol, dataPtr->xNum(), dataPtr->yNum(),236 dataPtr->zNum(), 4, data, min_mag, max_mag, 0);237 volPtr->xAxis.SetRange(dataPtr->xMin(), dataPtr->xMax());238 volPtr->yAxis.SetRange(dataPtr->yMin(), dataPtr->yMax());239 volPtr->zAxis.SetRange(dataPtr->zMin(), dataPtr->zMax());240 volPtr->wAxis.SetRange(min_mag, max_mag);241 volPtr->update_pending = true;242 volPtr->setPhysicalBBox(physicalMin, physicalMax);243 delete dataPtr;244 delete data;245 return true;246 }247 248 bool249 load_vector_stream(Rappture::Outcome result, int index, size_t length,250 char *string)251 {252 Rappture::Unirect3d *dataPtr;253 dataPtr = ReadDxVectorFieldData(result, length, string);254 if (dataPtr == NULL) {255 return false;256 }257 Vector3 physicalMin;258 Vector3 physicalMax;259 260 physicalMin.set(dataPtr->xMin(), dataPtr->yMin(), dataPtr->zMin());261 physicalMax.set(dataPtr->xMax(), dataPtr->yMax(), dataPtr->zMax());262 263 Rappture::Mesh1D xgrid(dataPtr->xMin(), dataPtr->yMin(), dataPtr->xNum());264 Rappture::Mesh1D ygrid(dataPtr->yMin(), dataPtr->yMax(), dataPtr->yNum());265 Rappture::Mesh1D zgrid(dataPtr->zMin(), dataPtr->zMax(), dataPtr->zNum());266 Rappture::FieldRect3D xfield(xgrid, ygrid, zgrid);267 Rappture::FieldRect3D yfield(xgrid, ygrid, zgrid);268 Rappture::FieldRect3D zfield(xgrid, ygrid, zgrid);269 270 float *values = dataPtr->values();271 size_t npts = 0;272 for (size_t ix=0; ix < dataPtr->xNum(); ix++) {273 for (size_t iy=0; iy < dataPtr->yNum(); iy++) {274 for (size_t iz=0; iz < dataPtr->zNum(); iz++) {275 xfield.define(npts, values[0]);276 yfield.define(npts, values[1]);277 zfield.define(npts, values[2]);278 npts++;279 values += 3;280 }281 }282 }283 284 double dx, dy, dz;285 // figure out a good mesh spacing286 int nsample = 30;287 dx = xfield.rangeMax(Rappture::xaxis) - xfield.rangeMin(Rappture::xaxis);288 dy = xfield.rangeMax(Rappture::yaxis) - xfield.rangeMin(Rappture::yaxis);289 dz = xfield.rangeMax(Rappture::zaxis) - xfield.rangeMin(Rappture::zaxis);290 double dmin = pow((dx*dy*dz)/(nsample*nsample*nsample), 0.333);291 292 printf("dx:%lf dy:%lf dz:%lf dmin:%lf\n", dx, dy, dz, dmin);293 294 size_t nx, ny, nz;295 nx = (int)ceil(dx/dmin);296 ny = (int)ceil(dy/dmin);297 nz = (int)ceil(dz/dmin);298 299 #ifndef NV40300 // must be an even power of 2 for older cards301 nx = (int)pow(2.0, ceil(log10((double)nx)/log10(2.0)));302 ny = (int)pow(2.0, ceil(log10((double)ny)/log10(2.0)));303 nz = (int)pow(2.0, ceil(log10((double)nz)/log10(2.0)));304 #endif305 306 float *data = new float[4*nx*ny*nz];307 memset(data, 0, sizeof(float) * 4 * nx * ny * nz);308 309 std::cout << "generating " << nx << "x" << ny << "x" << nz << " = " << nx*ny*nz << " points" << std::endl;310 311 // generate the uniformly sampled data that we need for a volume312 double vmin = 1e21;313 double vmax = -1e21;314 double nzero_min = 0.0;315 size_t ngen = 0;316 for (size_t iz=0; iz < nz; iz++) {317 double zval = dataPtr->zMin() + iz*dmin;318 for (size_t iy=0; iy < ny; iy++) {319 double yval = dataPtr->yMin() + iy*dmin;320 for (size_t ix=0; ix < nx; ix++) {321 double xval = dataPtr->xMin() + ix*dmin;322 double vx, vy, vz;323 324 vx = xfield.value(xval,yval,zval);325 vy = yfield.value(xval,yval,zval);326 vz = zfield.value(xval,yval,zval);327 328 double vm;329 vm = sqrt(vx*vx + vy*vy + vz*vz);330 if (vm < vmin) {331 vmin = vm;332 } else if (vm > vmax) {333 vmax = vm;334 }335 if ((vm != 0.0f) && (vm < nzero_min)) {336 nzero_min = vm;337 }338 data[ngen++] = vm;339 data[ngen++] = vx;340 data[ngen++] = vy;341 data[ngen++] = vz;342 }343 }344 }345 346 ngen = 0;347 // scale should be accounted.348 for (ngen=0; ngen < npts; /*empty*/) {349 data[ngen] = data[ngen] / vmax; ++ngen;350 data[ngen] = (data[ngen]/(2.0*vmax) + 0.5); ++ngen;351 data[ngen] = (data[ngen]/(2.0*vmax) + 0.5); ++ngen;352 data[ngen] = (data[ngen]/(2.0*vmax) + 0.5); ++ngen;353 }354 Volume *volPtr;355 volPtr = NanoVis::load_volume(index, nx, ny, nz, 4, data, vmin, vmax,356 nzero_min);357 358 volPtr->xAxis.SetRange(dataPtr->xMin(), dataPtr->xMin() + (nx * dx));359 volPtr->yAxis.SetRange(dataPtr->yMin(), dataPtr->yMin() + (ny * dy));360 volPtr->zAxis.SetRange(dataPtr->zMin(), dataPtr->zMin() + (nz * dz));361 volPtr->wAxis.SetRange(vmin, vmax);362 volPtr->update_pending = true;363 delete [] data;364 return true;365 }366 #endif367 46 368 47 /* Load a 3D volume from a dx-format file … … 963 642 #endif 964 643 644 #ifdef notdef 965 645 for (int i=0; i<nx*ny*nz; i++) { 966 646 fprintf(stderr,"enddata[%i] = %lg\n",i,data[i]); 967 647 fflush(stderr); 968 648 } 969 649 #endif 970 650 fprintf(stdout,"End Data Stats index = %i\n",index); 971 651 fprintf(stdout,"nx = %i ny = %i nz = %i\n",nx,ny,nz); -
trunk/packages/vizservers/nanovis/nanovis.cpp
r1431 r1434 1674 1674 if (flags & MAP_FLOWS) { 1675 1675 MapFlows(); 1676 grid->xAxis.SetScale(xMin, xMax); 1677 grid->yAxis.SetScale(yMin, yMax); 1678 grid->zAxis.SetScale(zMin, zMax); 1676 1679 } 1677 1680 //assert(glGetError()==0); … … 2077 2080 { 2078 2081 2079 if ((NanoVis::licRenderer != NULL) && 2080 2082 #ifdef notdef 2083 if ((NanoVis::licRenderer != NULL) && (NanoVis::licRenderer->active())) { 2081 2084 NanoVis::licRenderer->convolve(); 2082 2085 } 2083 2084 if ((NanoVis::flowVisRenderer != NULL) && 2085 (NanoVis::flowVisRenderer->active())) { 2086 #else 2087 if (NanoVis::licRenderer != NULL) { 2088 NanoVis::licRenderer->convolve(); 2089 } 2090 #endif 2091 2092 if ((NanoVis::flowVisRenderer != NULL) && (NanoVis::flowVisRenderer->active())) { 2086 2093 NanoVis::flowVisRenderer->advect(); 2087 2094 }
Note: See TracChangeset
for help on using the changeset viewer.