Changeset 4063
- Timestamp:
- Nov 15, 2013 3:32:03 PM (10 years ago)
- Location:
- trunk/packages/vizservers/nanovis
- Files:
-
- 19 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/packages/vizservers/nanovis/Command.cpp
r4056 r4063 33 33 34 34 #include <assert.h> 35 #include <errno.h> 35 36 #include <stdlib.h> 36 37 #include <unistd.h> /* Needed for getpid, gethostname, … … 40 41 #include <RpField1D.h> 41 42 #include <RpEncode.h> 42 #include <RpOutcome.h>43 43 #include <RpBuffer.h> 44 44 … … 57 57 #ifdef USE_VTK 58 58 #include "VtkDataSetReader.h" 59 #else 60 #include "VtkReader.h" 59 61 #endif 60 #include "VtkReader.h"61 62 #include "BMPWriter.h" 62 63 #include "PPMWriter.h" … … 153 154 } 154 155 155 bool156 nv::SocketRead(Rappture::Buffer &buf, size_t len)157 {158 ReadBuffer::BufferStatus status;159 status = g_inBufPtr->followingData(buf, len);160 TRACE("followingData status: %d", status);161 return (status == ReadBuffer::OK);162 }163 164 156 static int 165 157 ExecuteCommand(Tcl_Interp *interp, Tcl_DString *dsPtr) … … 534 526 /** 535 527 * Read the requested number of bytes from standard input into the given 536 * buffer. The buffer is then decompressed and decoded. 528 * buffer. The buffer must have already been allocated for nBytes. The 529 * buffer is then decompressed and decoded. 537 530 */ 538 531 int 539 532 nv::GetDataStream(Tcl_Interp *interp, Rappture::Buffer &buf, int nBytes) 540 533 { 541 if (!SocketRead(buf, nBytes)) { 542 return TCL_ERROR; 543 } 534 if (!SocketRead((char *)buf.bytes(), nBytes)) { 535 return TCL_ERROR; 536 } 537 buf.count(nBytes); 544 538 Rappture::Outcome err; 545 539 TRACE("Checking header[%.13s]", buf.bytes()); … … 1280 1274 if ((nBytes > 5) && (strncmp(bytes, "<HDR>", 5) == 0)) { 1281 1275 TRACE("ZincBlende Stream loading..."); 1282 volume = (Volume *)ZincBlendeReconstructor::getInstance()->loadFromMemory( const_cast<char *>(bytes));1276 volume = (Volume *)ZincBlendeReconstructor::getInstance()->loadFromMemory(bytes); 1283 1277 if (volume == NULL) { 1284 1278 Tcl_AppendResult(interp, "can't get volume instance", (char *)NULL); … … 1301 1295 abort(); 1302 1296 } 1303 Rappture::Outcome context;1304 1297 #ifdef USE_VTK 1305 volume = load_vtk_volume_stream( context,tag, bytes, nBytes);1298 volume = load_vtk_volume_stream(tag, bytes, nBytes); 1306 1299 #else 1307 1300 std::stringstream fdata; 1308 1301 fdata.write(bytes, nBytes); 1309 volume = load_vtk_volume_stream( context,tag, fdata);1302 volume = load_vtk_volume_stream(tag, fdata); 1310 1303 #endif 1311 1304 if (volume == NULL) { 1312 Tcl_AppendResult(interp, context.remark(), (char*)NULL);1305 Tcl_AppendResult(interp, "Failed to load VTK file", (char*)NULL); 1313 1306 return TCL_ERROR; 1314 1307 } … … 1326 1319 std::stringstream fdata; 1327 1320 fdata.write(bytes, nBytes); 1328 Rappture::Outcome context; 1329 volume = load_dx_volume_stream(context, tag, fdata); 1321 volume = load_dx_volume_stream(tag, fdata); 1330 1322 if (volume == NULL) { 1331 Tcl_AppendResult(interp, context.remark(), (char*)NULL);1323 Tcl_AppendResult(interp, "Failed to load DX file", (char*)NULL); 1332 1324 return TCL_ERROR; 1333 1325 } … … 1765 1757 } 1766 1758 Unirect2d data(1); 1767 if (data.parseBuffer(interp, buf ) != TCL_OK) {1759 if (data.parseBuffer(interp, buf.bytes(), buf.size()) != TCL_OK) { 1768 1760 return TCL_ERROR; 1769 1761 } -
trunk/packages/vizservers/nanovis/Command.h
r3613 r4063 37 37 extern bool SocketRead(char *bytes, size_t len); 38 38 39 extern bool SocketRead(Rappture::Buffer &buf, size_t len);40 41 39 extern int processCommands(Tcl_Interp *interp, 42 40 ReadBuffer *inBufPtr, -
trunk/packages/vizservers/nanovis/FlowCmd.cpp
r4056 r4063 17 17 #include <poll.h> 18 18 19 #include <sstream> 20 19 21 #include <tcl.h> 20 22 21 #include <Rp Outcome.h>23 #include <RpBuffer.h> 22 24 23 25 #include <vrmath/Vector3f.h> … … 32 34 #ifdef USE_VTK 33 35 #include "VtkDataSetReader.h" 36 #else 37 #include "VtkReader.h" 34 38 #endif 35 #include "VtkReader.h"36 39 #include "FlowCmd.h" 37 40 #include "FlowTypes.h" … … 135 138 }; 136 139 137 static int138 FlowDataFileOp(ClientData clientData, Tcl_Interp *interp, int objc,139 Tcl_Obj *const *objv)140 {141 Rappture::Outcome result;142 143 const char *fileName;144 fileName = Tcl_GetString(objv[3]);145 TRACE("File: %s", fileName);146 147 int nComponents;148 if (Tcl_GetIntFromObj(interp, objv[4], &nComponents) != TCL_OK) {149 return TCL_ERROR;150 }151 if ((nComponents < 1) || (nComponents > 4)) {152 Tcl_AppendResult(interp, "bad # of components \"",153 Tcl_GetString(objv[4]), "\"", (char *)NULL);154 return TCL_ERROR;155 }156 Rappture::Buffer buf;157 if (!buf.load(result, fileName)) {158 Tcl_AppendResult(interp, "can't load data from \"", fileName, "\": ",159 result.remark(), (char *)NULL);160 return TCL_ERROR;161 }162 163 Unirect3d *dataPtr;164 dataPtr = new Unirect3d(nComponents);165 Flow *flow = (Flow *)clientData;166 size_t length = buf.size();167 char *bytes = (char *)buf.bytes();168 if ((length > 4) && (strncmp(bytes, "<DX>", 4) == 0)) {169 if (!dataPtr->importDx(result, nComponents, length-4, bytes+4)) {170 Tcl_AppendResult(interp, result.remark(), (char *)NULL);171 delete dataPtr;172 return TCL_ERROR;173 }174 } else if ((length > 10) && (strncmp(bytes, "unirect3d ", 10) == 0)) {175 if (dataPtr->parseBuffer(interp, buf) != TCL_OK) {176 delete dataPtr;177 return TCL_ERROR;178 }179 } else if ((length > 10) && (strncmp(bytes, "unirect2d ", 10) == 0)) {180 Unirect2d *u2dPtr;181 u2dPtr = new Unirect2d(nComponents);182 if (u2dPtr->parseBuffer(interp, buf) != TCL_OK) {183 delete u2dPtr;184 return TCL_ERROR;185 }186 dataPtr->convert(u2dPtr);187 delete u2dPtr;188 } else {189 TRACE("header is %.14s", buf.bytes());190 if (!dataPtr->importDx(result, nComponents, length, bytes)) {191 Tcl_AppendResult(interp, result.remark(), (char *)NULL);192 delete dataPtr;193 return TCL_ERROR;194 }195 }196 if (dataPtr->nValues() == 0) {197 delete dataPtr;198 Tcl_AppendResult(interp, "no data found in \"", fileName, "\"",199 (char *)NULL);200 return TCL_ERROR;201 }202 flow->data(dataPtr);203 Flow::updatePending = true;204 NanoVis::eventuallyRedraw();205 return TCL_OK;206 }207 208 140 /** 209 141 * $flow data follows nbytes nComponents … … 213 145 Tcl_Obj *const *objv) 214 146 { 215 Rappture::Outcome result;216 217 147 TRACE("Enter"); 218 148 … … 253 183 if ((length > 4) && (strncmp(bytes, "<DX>", 4) == 0)) { 254 184 unirect = new Unirect3d(nComponents); 255 if (!unirect->importDx( result,nComponents, length - 4, bytes + 4)) {256 Tcl_AppendResult(interp, result.remark(), (char *)NULL);185 if (!unirect->importDx(nComponents, length - 4, bytes + 4)) { 186 Tcl_AppendResult(interp, "Failed to load DX file", (char *)NULL); 257 187 delete unirect; 258 188 return TCL_ERROR; … … 260 190 } else if ((length > 10) && (strncmp(bytes, "unirect3d ", 10) == 0)) { 261 191 unirect = new Unirect3d(nComponents); 262 if (unirect->parseBuffer(interp, b uf) != TCL_OK) {192 if (unirect->parseBuffer(interp, bytes, length) != TCL_OK) { 263 193 delete unirect; 264 194 return TCL_ERROR; … … 268 198 Unirect2d *u2dPtr; 269 199 u2dPtr = new Unirect2d(nComponents); 270 if (u2dPtr->parseBuffer(interp, b uf) != TCL_OK) {200 if (u2dPtr->parseBuffer(interp, bytes, length) != TCL_OK) { 271 201 delete unirect; 272 202 delete u2dPtr; … … 277 207 } else if ((length > 14) && (strncmp(bytes, "# vtk DataFile", 14) == 0)) { 278 208 TRACE("VTK loading..."); 279 std::stringstream fdata;280 fdata.write(bytes, length);281 209 if (length <= 0) { 282 210 ERROR("data buffer is empty"); 283 211 abort(); 284 212 } 285 Rappture::Outcome context;286 213 #ifdef USE_VTK 287 volume = load_vtk_volume_stream( context,flow->name(), bytes, length);214 volume = load_vtk_volume_stream(flow->name(), bytes, length); 288 215 #else 289 216 std::stringstream fdata; 290 fdata.write(bytes, nBytes);291 volume = load_vtk_volume_stream( context,flow->name(), fdata);217 fdata.write(bytes, length); 218 volume = load_vtk_volume_stream(flow->name(), fdata); 292 219 #endif 293 220 if (volume == NULL) { 294 Tcl_AppendResult(interp, context.remark(), (char*)NULL);221 Tcl_AppendResult(interp, "Failed to load VTK file", (char*)NULL); 295 222 return TCL_ERROR; 296 223 } … … 298 225 TRACE("header is %.14s", buf.bytes()); 299 226 unirect = new Unirect3d(nComponents); 300 if (!unirect->importDx( result,nComponents, length, bytes)) {301 Tcl_AppendResult(interp, result.remark(), (char *)NULL);227 if (!unirect->importDx(nComponents, length, bytes)) { 228 Tcl_AppendResult(interp, "Failed to load DX file", (char *)NULL); 302 229 delete unirect; 303 230 return TCL_ERROR; … … 350 277 351 278 static CmdSpec flowDataOps[] = { 352 {"file", 2, FlowDataFileOp, 5, 5, "fileName nComponents",},353 279 {"follows", 2, FlowDataFollowsOp, 5, 5, "size nComponents",}, 354 280 }; … … 1196 1122 return TCL_ERROR; 1197 1123 } 1198 Rappture::Buffer data;1124 char *data = NULL; 1199 1125 size_t total = 0; 1200 1126 for (;;) { … … 1202 1128 char buffer[BUFSIZ]; 1203 1129 1204 numRead = fread(buffer, sizeof( unsignedchar), BUFSIZ, f);1130 numRead = fread(buffer, sizeof(char), BUFSIZ, f); 1205 1131 total += numRead; 1206 1132 if (numRead == 0) { // EOF … … 1214 1140 return TCL_ERROR; 1215 1141 } 1216 if (!data.append(buffer, numRead)) { 1142 data = (char *)realloc(data, total); 1143 if (data == NULL) { 1217 1144 ERROR("Can't append movie data to buffer %d bytes", 1218 1145 numRead); … … 1221 1148 return TCL_ERROR; 1222 1149 } 1223 } 1224 if (data.size() == 0) { 1150 memcpy(data + (total - numRead), buffer, numRead); 1151 } 1152 if (total == 0) { 1225 1153 ERROR("ffmpeg returned 0 bytes"); 1226 1154 } 1227 1155 // Send zero length to client so it can deal with error 1228 1156 sprintf(cmd,"nv>image -type movie -token \"%s\" -bytes %lu\n", 1229 token, (unsigned long)data.size()); 1230 nv::sendDataToClient(cmd, data.bytes(), data.size()); 1157 token, total); 1158 // Memory is freed by this call 1159 nv::sendDataToClient(cmd, data, total); 1231 1160 return TCL_OK; 1232 1161 } -
trunk/packages/vizservers/nanovis/Makefile.in
r4060 r4063 57 57 VTK_LIB_DIR = @VTK_LIB_DIR@ 58 58 VTK_INC_DIR = @VTK_INC_DIR@ 59 ifdef USE_VTK 59 60 VTK_INC_SPEC = -I$(VTK_INC_DIR)/vtk-$(VTK_VERSION) 60 61 VTK_LIB_SPEC = -L$(VTK_LIB_DIR) \ … … 71 72 -lvtkCommonTransforms-$(VTK_VERSION) \ 72 73 -lvtkCommonMath-$(VTK_VERSION) 74 else 75 VTK_INC_SPEC = 76 VTK_LIB_SPEC = 77 endif 73 78 74 79 EXTRA_LIBS = -lm -lpthread … … 174 179 VolumeRenderer.o \ 175 180 VolumeShader.o \ 176 VtkReader.o \177 181 ZincBlendeReconstructor.o \ 178 182 ZincBlendeVolume.o \ … … 231 235 OBJS += DataSetResample.o \ 232 236 VtkDataSetReader.o 237 else 238 OBJS += VtkReader.o 233 239 endif 234 240 -
trunk/packages/vizservers/nanovis/ReadBuffer.cpp
r3605 r4063 143 143 } 144 144 145 ReadBuffer::BufferStatus146 ReadBuffer::followingData(Rappture::Buffer& out, size_t numBytes)147 {148 TRACE("Enter");149 while (numBytes > 0) {150 size_t bytesLeft;151 152 bytesLeft = _fill - _mark;153 if (bytesLeft > 0) {154 int size;155 156 /* Pull bytes out of the buffer, updating the mark. */157 size = (bytesLeft > numBytes) ? numBytes : bytesLeft;158 out.append((const char *)_bytes + _mark, size);159 _mark += size;160 numBytes -= size;161 }162 if (numBytes == 0) {163 /* Received requested # bytes. */164 return ReadBuffer::OK;165 }166 /* Didn't get enough bytes, need to read some more. */167 _lastStatus = doFill();168 if (_lastStatus == ReadBuffer::ERROR ||169 _lastStatus == ReadBuffer::ENDFILE) {170 return _lastStatus;171 }172 }173 return ReadBuffer::OK;174 }175 176 145 /** 177 146 * \brief Returns the next available line (terminated by a newline) -
trunk/packages/vizservers/nanovis/ReadBuffer.h
r3605 r4063 35 35 36 36 BufferStatus followingData(unsigned char *out, size_t numBytes); 37 38 BufferStatus followingData(Rappture::Buffer& out, size_t numBytes);39 37 40 38 /** -
trunk/packages/vizservers/nanovis/Unirect.cpp
r4056 r4063 42 42 43 43 int 44 nv::Unirect2d::parseBuffer(Tcl_Interp *interp, Rappture::Buffer &buf)45 { 46 Tcl_Obj *objPtr = Tcl_NewStringObj(b uf.bytes(), buf.size());44 nv::Unirect2d::parseBuffer(Tcl_Interp *interp, const char *bytes, size_t len) 45 { 46 Tcl_Obj *objPtr = Tcl_NewStringObj(bytes, len); 47 47 Tcl_Obj **objv; 48 48 int objc; … … 59 59 60 60 int 61 nv::Unirect3d::parseBuffer(Tcl_Interp *interp, Rappture::Buffer &buf)61 nv::Unirect3d::parseBuffer(Tcl_Interp *interp, const char *bytes, size_t len) 62 62 { 63 63 Tcl_Obj *objPtr; 64 objPtr = Tcl_NewStringObj(b uf.bytes(), buf.size());64 objPtr = Tcl_NewStringObj(bytes, len); 65 65 Tcl_Obj **objv; 66 66 int objc; … … 487 487 488 488 bool 489 nv::Unirect3d::importDx( Rappture::Outcome &result,size_t nComponents,489 nv::Unirect3d::importDx(size_t nComponents, 490 490 size_t length, char *string) 491 491 { … … 510 510 &nx, &ny, &nz) == 3) { 511 511 if ((nx < 0) || (ny < 0) || (nz < 0)) { 512 result.addError("invalid grid size: x=%d, y=%d, z=%d",513 512 ERROR("invalid grid size: x=%d, y=%d, z=%d", 513 nx, ny, nz); 514 514 return false; 515 515 } … … 528 528 " rank 1 items %d data follows", &npts) == 1) { 529 529 if (npts < 0) { 530 result.addError("bad # points %d", npts);530 ERROR("bad # points %d", npts); 531 531 return false; 532 532 } 533 533 TRACE("#points=%d", npts); 534 534 if (npts != nx*ny*nz) { 535 result.addError("inconsistent data: expected %d points"536 535 ERROR("inconsistent data: expected %d points" 536 " but found %d points", nx*ny*nz, npts); 537 537 return false; 538 538 } … … 541 541 " times %d data follows", &npts) == 1) { 542 542 if (npts != nx*ny*nz) { 543 result.addError("inconsistent data: expected %d points"544 543 ERROR("inconsistent data: expected %d points" 544 " but found %d points", nx*ny*nz, npts); 545 545 return false; 546 546 } … … 549 549 } 550 550 if (npts != nx*ny*nz) { 551 result.addError("inconsistent data: expected %d points"552 551 ERROR("inconsistent data: expected %d points" 552 " but found %d points", nx*ny*nz, npts); 553 553 return false; 554 554 } … … 605 605 /* Make sure that we read all of the expected points. */ 606 606 if (_nValues != (size_t)npts) { 607 result.addError("inconsistent data: expected %d points"608 607 ERROR("inconsistent data: expected %d points" 608 " but found %d points", npts, _nValues); 609 609 free(_values); 610 610 _values = NULL; -
trunk/packages/vizservers/nanovis/Unirect.h
r4056 r4063 12 12 #include <tcl.h> 13 13 14 #include < rappture.h>14 #include <RpBuffer.h> 15 15 16 16 #include <vrmath/Vector3f.h> … … 222 222 int loadData(Tcl_Interp *interp, int objc, Tcl_Obj *const *objv); 223 223 224 int parseBuffer(Tcl_Interp *interp, Rappture::Buffer &buf); 225 226 bool importDx(Rappture::Outcome &result, size_t nComponents, 227 size_t length, char *string); 224 int parseBuffer(Tcl_Interp *interp, const char *bytes, size_t len); 225 226 bool importDx(size_t nComponents, size_t length, char *string); 228 227 229 228 bool convert(Unirect2d *dataPtr); … … 382 381 int loadData(Tcl_Interp *interp, int objc, Tcl_Obj *const *objv); 383 382 384 int parseBuffer(Tcl_Interp *interp, Rappture::Buffer &buf);383 int parseBuffer(Tcl_Interp *interp, const char *bytes, size_t len); 385 384 386 385 bool isInitialized() -
trunk/packages/vizservers/nanovis/VtkDataSetReader.cpp
r3943 r4063 16 16 #include <vtkCharArray.h> 17 17 18 #include <RpOutcome.h>19 20 18 #include <vrmath/Vector3f.h> 21 19 … … 32 30 33 31 Volume * 34 nv::load_vtk_volume_stream( Rappture::Outcome& result,const char *tag, const char *bytes, int nBytes)32 nv::load_vtk_volume_stream(const char *tag, const char *bytes, int nBytes) 35 33 { 36 34 TRACE("Enter tag:%s", tag); -
trunk/packages/vizservers/nanovis/VtkDataSetReader.h
r3870 r4063 9 9 #include <iostream> 10 10 11 namespace Rappture {12 class Outcome;13 }14 15 11 namespace nv { 16 12 … … 18 14 19 15 extern Volume * 20 load_vtk_volume_stream( Rappture::Outcome& status,const char *tag, const char *bytes, int nBytes);16 load_vtk_volume_stream(const char *tag, const char *bytes, int nBytes); 21 17 22 18 } -
trunk/packages/vizservers/nanovis/VtkReader.cpp
r3870 r4063 8 8 #include <float.h> 9 9 10 #include <RpOutcome.h>11 10 #include <RpField1D.h> 12 11 #include <RpFieldRect3D.h> … … 184 183 185 184 Volume * 186 nv::load_vtk_volume_stream( Rappture::Outcome& result,const char *tag, std::iostream& fin)185 nv::load_vtk_volume_stream(const char *tag, std::iostream& fin) 187 186 { 188 187 TRACE("Enter tag:%s", tag); … … 208 207 fin.getline(line, sizeof(line) - 1); 209 208 if (fin.fail()) { 210 result.error("Error in data stream");209 ERROR("Error in data stream"); 211 210 return NULL; 212 211 } … … 223 222 isRect = 1; 224 223 } else { 225 result.addError("Unsupported DataSet type '%s'", str);224 ERROR("Unsupported DataSet type '%s'", str); 226 225 return NULL; 227 226 } 228 227 } else if (sscanf(start, "DIMENSIONS %d %d %d", &nx, &ny, &nz) == 3) { 229 228 if (nx <= 0 || ny <= 0 || nz <= 0) { 230 result.error("Found non-positive dimensions");229 ERROR("Found non-positive dimensions"); 231 230 return NULL; 232 231 } … … 236 235 } else if (sscanf(start, "SPACING %lg %lg %lg", &dx, &dy, &dz) == 3) { 237 236 if ((nx > 1 && dx == 0.0) || (ny > 1 && dy == 0.0) || (nz > 1 && dz == 0.0)) { 238 result.error("Found zero spacing for dimension");237 ERROR("Found zero spacing for dimension"); 239 238 return NULL; 240 239 } … … 242 241 } else if (sscanf(start, "POINT_DATA %d", &npts) == 1) { 243 242 if (npts < 1 || npts != nx * ny * nz) { 244 result.addError("Error in data stream: unexpected number of point data: %d", npts);243 ERROR("Error in data stream: unexpected number of point data: %d", npts); 245 244 return NULL; 246 245 } 247 246 if (isBinary < 0 || fin.eof()) { 248 247 // Should know if ASCII or BINARY by now 249 result.error("Error in data stream");248 ERROR("Error in data stream"); 250 249 return NULL; 251 250 } 252 251 fin.getline(line, sizeof(line) - 1); 253 252 if (fin.fail()) { 254 result.error("Error in data stream");253 ERROR("Error in data stream"); 255 254 return NULL; 256 255 } … … 258 257 ; // skip leading blanks 259 258 if (sscanf(start, "SCALARS %s %s", str, type) != 2) { 260 result.error("Error in data stream");259 ERROR("Error in data stream"); 261 260 return NULL; 262 261 } … … 268 267 ftype = UCHAR; 269 268 if (!isBinary) { 270 result.addError("unsigned char only supported in binary VTK files");269 ERROR("unsigned char only supported in binary VTK files"); 271 270 return NULL; 272 271 } … … 280 279 ftype = UINT; 281 280 } else { 282 result.addError("Unsupported scalar type: '%s'", type);281 ERROR("Unsupported scalar type: '%s'", type); 283 282 return NULL; 284 283 } 285 284 if (fin.eof()) { 286 result.error("Error in data stream");285 ERROR("Error in data stream"); 287 286 return NULL; 288 287 } 289 288 fin.getline(line, sizeof(line) - 1); 290 289 if (fin.fail()) { 291 result.error("Error in data stream");290 ERROR("Error in data stream"); 292 291 return NULL; 293 292 } … … 297 296 // skip lookup table, but don't read ahead 298 297 if (fin.eof()) { 299 result.error("Error in data stream");298 ERROR("Error in data stream"); 300 299 return NULL; 301 300 } 302 301 } else { 303 302 // Lookup table line is required 304 result.error("Missing LOOKUP_TABLE");303 ERROR("Missing LOOKUP_TABLE"); 305 304 return NULL; 306 305 } … … 311 310 if (fin.fail()) { 312 311 deleteFieldData(fieldData, ftype); 313 result.error("Error in data stream");312 ERROR("Error in data stream"); 314 313 return NULL; 315 314 } … … 321 320 if (fin.fail()) { 322 321 deleteFieldData(fieldData, ftype); 323 result.error("Error in data stream");322 ERROR("Error in data stream"); 324 323 return NULL; 325 324 } … … 334 333 if (isRect < 0 || numRead != npts || npts < 1) { 335 334 deleteFieldData(fieldData, ftype); 336 result.error("Error in data stream");335 ERROR("Error in data stream"); 337 336 return NULL; 338 337 } … … 469 468 } else { 470 469 deleteFieldData(fieldData, ftype); 471 result.error("Unsupported DataSet");470 ERROR("Unsupported DataSet"); 472 471 return NULL; 473 472 } -
trunk/packages/vizservers/nanovis/VtkReader.h
r3613 r4063 9 9 #include <iostream> 10 10 11 namespace Rappture {12 class Outcome;13 }14 15 11 namespace nv { 16 12 … … 18 14 19 15 extern Volume * 20 load_vtk_volume_stream( Rappture::Outcome& status,const char *tag, std::iostream& fin);16 load_vtk_volume_stream(const char *tag, std::iostream& fin); 21 17 22 18 } -
trunk/packages/vizservers/nanovis/ZincBlendeReconstructor.cpp
r3630 r4063 61 61 do { 62 62 getLine(stream); 63 if ( buff[0] == '#') {63 if (_buff[0] == '#') { 64 64 continue; 65 } else if (strstr((const char*) buff, "object") != 0) {65 } else if (strstr((const char*) _buff, "object") != 0) { 66 66 TRACE("VERSION 1"); 67 67 version = 1; 68 68 break; 69 } else if (strstr( buff, "record format") != 0) {69 } else if (strstr(_buff, "record format") != 0) { 70 70 TRACE("VERSION 2"); 71 71 version = 2; … … 77 77 float dummy; 78 78 79 sscanf( buff, "%s%s%s%s%s%d%d%d", str[0], str[1], str[2], str[3], str[4], &width, &height, &depth);80 getLine(stream); 81 sscanf( buff, "%s%f%f%f", str[0], &(origin.x), &(origin.y), &(origin.z));82 getLine(stream); 83 sscanf( buff, "%s%f%f%f", str[0], &(delta.x), &dummy, &dummy);84 getLine(stream); 85 sscanf( buff, "%s%f%f%f", str[0], &dummy, &(delta.y), &dummy);86 getLine(stream); 87 sscanf( buff, "%s%f%f%f", str[0], &dummy, &dummy, &(delta.z));79 sscanf(_buff, "%s%s%s%s%s%d%d%d", str[0], str[1], str[2], str[3], str[4], &width, &height, &depth); 80 getLine(stream); 81 sscanf(_buff, "%s%f%f%f", str[0], &(origin.x), &(origin.y), &(origin.z)); 82 getLine(stream); 83 sscanf(_buff, "%s%f%f%f", str[0], &(delta.x), &dummy, &dummy); 84 getLine(stream); 85 sscanf(_buff, "%s%f%f%f", str[0], &dummy, &(delta.y), &dummy); 86 getLine(stream); 87 sscanf(_buff, "%s%f%f%f", str[0], &dummy, &dummy, &(delta.z)); 88 88 do { 89 89 getLine(stream); 90 } while (strcmp( buff, "<\\HDR>") != 0);90 } while (strcmp(_buff, "<\\HDR>") != 0); 91 91 92 92 width = width / 4; … … 111 111 do { 112 112 getLine(stream); 113 if ((pt = strstr( buff, "delta")) != 0) {113 if ((pt = strstr(_buff, "delta")) != 0) { 114 114 sscanf(pt, "%s%f%f%f", str[0], &(delta.x), &(delta.y), &(delta.z)); 115 115 #ifdef _LOADER_DEBUG_ 116 116 TRACE("delta : %f %f %f", delta.x, delta.y, delta.z); 117 117 #endif 118 } else if ((pt = strstr( buff, "datacount")) != 0) {118 } else if ((pt = strstr(_buff, "datacount")) != 0) { 119 119 sscanf(pt, "%s%d", str[0], &datacount); 120 120 #ifdef _LOADER_DEBUG_ 121 121 TRACE("datacount = %d", datacount); 122 122 #endif 123 } else if ((pt = strstr( buff, "datatype")) != 0) {123 } else if ((pt = strstr(_buff, "datatype")) != 0) { 124 124 sscanf(pt, "%s%s", str[0], str[1]); 125 125 if (strcmp(str[1], "double64")) { 126 126 } 127 } else if ((pt = strstr( buff, "count")) != 0) {127 } else if ((pt = strstr(_buff, "count")) != 0) { 128 128 sscanf(pt, "%s%d%d%d", str[0], &width, &height, &depth); 129 129 #ifdef _LOADER_DEBUG_ 130 130 TRACE("width height depth %d %d %d", width, height, depth); 131 131 #endif 132 } else if ((pt = strstr( buff, "emptymark")) != 0) {132 } else if ((pt = strstr(_buff, "emptymark")) != 0) { 133 133 sscanf(pt, "%s%lf", str[0], &emptyvalue); 134 134 #ifdef _LOADER_DEBUG_ 135 135 TRACE("emptyvalue %lf", emptyvalue); 136 136 #endif 137 } else if ((pt = strstr( buff, "emprymark")) != 0) {137 } else if ((pt = strstr(_buff, "emprymark")) != 0) { 138 138 sscanf(pt, "%s%lf", str[0], &emptyvalue); 139 139 #ifdef _LOADER_DEBUG_ … … 141 141 #endif 142 142 } 143 } while (strcmp( buff, "<\\HDR>") != 0 && strcmp(buff, "</HDR>") != 0);143 } while (strcmp(_buff, "<\\HDR>") != 0 && strcmp(_buff, "</HDR>") != 0); 144 144 145 145 data = malloc(width * height * depth * 8 * 4 * sizeof(double)); … … 363 363 sin.get(ch); 364 364 if (ch == '\n') break; 365 buff[index++] = ch;365 _buff[index++] = ch; 366 366 if (ch == '>') { 367 if ( buff[1] == '\\')367 if (_buff[1] == '\\') 368 368 break; 369 369 } 370 370 } while (!sin.eof()); 371 371 372 buff[index] = '\0';373 374 #ifdef _LOADER_DEBUG_ 375 TRACE("%s", buff);372 _buff[index] = '\0'; 373 374 #ifdef _LOADER_DEBUG_ 375 TRACE("%s", _buff); 376 376 #endif 377 377 } 378 378 379 379 ZincBlendeVolume * 380 ZincBlendeReconstructor::loadFromMemory( void *dataBlock)380 ZincBlendeReconstructor::loadFromMemory(const void *dataBlock) 381 381 { 382 382 ZincBlendeVolume *volume = NULL; … … 386 386 int version = 1; 387 387 388 unsigned char *stream = (unsigned char *)dataBlock;388 const unsigned char *stream = (const unsigned char *)dataBlock; 389 389 char str[5][20]; 390 390 do { 391 391 getLine(stream); 392 if ( buff[0] == '#') {392 if (_buff[0] == '#') { 393 393 continue; 394 } else if (strstr((const char *) buff, "object") != 0) {394 } else if (strstr((const char *)_buff, "object") != 0) { 395 395 TRACE("VERSION 1"); 396 396 version = 1; 397 397 break; 398 } else if (strstr( buff, "record format") != 0) {398 } else if (strstr(_buff, "record format") != 0) { 399 399 TRACE("VERSION 2"); 400 400 version = 2; … … 406 406 float dummy; 407 407 408 sscanf( buff, "%s%s%s%s%s%d%d%d", str[0], str[1], str[2], str[3], str[4],&width, &height, &depth);409 getLine(stream); 410 sscanf( buff, "%s%f%f%f", str[0], &(origin.x), &(origin.y), &(origin.z));411 getLine(stream); 412 sscanf( buff, "%s%f%f%f", str[0], &(delta.x), &dummy, &dummy);413 getLine(stream); 414 sscanf( buff, "%s%f%f%f", str[0], &dummy, &(delta.y), &dummy);415 getLine(stream); 416 sscanf( buff, "%s%f%f%f", str[0], &dummy, &dummy, &(delta.z));408 sscanf(_buff, "%s%s%s%s%s%d%d%d", str[0], str[1], str[2], str[3], str[4],&width, &height, &depth); 409 getLine(stream); 410 sscanf(_buff, "%s%f%f%f", str[0], &(origin.x), &(origin.y), &(origin.z)); 411 getLine(stream); 412 sscanf(_buff, "%s%f%f%f", str[0], &(delta.x), &dummy, &dummy); 413 getLine(stream); 414 sscanf(_buff, "%s%f%f%f", str[0], &dummy, &(delta.y), &dummy); 415 getLine(stream); 416 sscanf(_buff, "%s%f%f%f", str[0], &dummy, &dummy, &(delta.z)); 417 417 do { 418 418 getLine(stream); 419 } while (strcmp( buff, "<\\HDR>") != 0);419 } while (strcmp(_buff, "<\\HDR>") != 0); 420 420 421 421 width = width / 4; … … 435 435 do { 436 436 getLine(stream); 437 if ((pt = strstr( buff, "delta")) != 0) {437 if ((pt = strstr(_buff, "delta")) != 0) { 438 438 sscanf(pt, "%s%f%f%f", str[0], &(delta.x), &(delta.y), &(delta.z)); 439 439 #ifdef _LOADER_DEBUG_ 440 440 TRACE("delta : %f %f %f", delta.x, delta.y, delta.z); 441 441 #endif 442 } else if ((pt = strstr( buff, "datacount")) != 0) {442 } else if ((pt = strstr(_buff, "datacount")) != 0) { 443 443 sscanf(pt, "%s%d", str[0], &datacount); 444 444 TRACE("datacount = %d", datacount); 445 } else if ((pt = strstr( buff, "datatype")) != 0) {445 } else if ((pt = strstr(_buff, "datatype")) != 0) { 446 446 sscanf(pt, "%s%s", str[0], str[1]); 447 447 if (strcmp(str[1], "double64")) { 448 448 } 449 } else if ((pt = strstr( buff, "count")) != 0) {449 } else if ((pt = strstr(_buff, "count")) != 0) { 450 450 sscanf(pt, "%s%d%d%d", str[0], &width, &height, &depth); 451 451 #ifdef _LOADER_DEBUG_ 452 452 TRACE("width height depth %d %d %d", width, height, depth); 453 453 #endif 454 } else if ((pt = strstr( buff, "emptymark")) != 0) {454 } else if ((pt = strstr(_buff, "emptymark")) != 0) { 455 455 sscanf(pt, "%s%lf", str[0], &emptyvalue); 456 456 #ifdef _LOADER_DEBUG_ 457 457 TRACE("emptyvalue %lf", emptyvalue); 458 458 #endif 459 } else if ((pt = strstr( buff, "emprymark")) != 0) {459 } else if ((pt = strstr(_buff, "emprymark")) != 0) { 460 460 sscanf(pt, "%s%lf", str[0], &emptyvalue); 461 461 #ifdef _LOADER_DEBUG_ … … 463 463 #endif 464 464 } 465 } while (strcmp( buff, "<\\HDR>") != 0 && strcmp(buff, "</HDR>") != 0);465 } while (strcmp(_buff, "<\\HDR>") != 0 && strcmp(_buff, "</HDR>") != 0); 466 466 467 467 if (datacount == -1) datacount = width * height * depth; … … 478 478 } 479 479 480 void ZincBlendeReconstructor::getLine( unsigned char*& stream)480 void ZincBlendeReconstructor::getLine(const unsigned char*& stream) 481 481 { 482 482 char ch; … … 486 486 ++stream; 487 487 if (ch == '\n') break; 488 buff[index++] = ch;488 _buff[index++] = ch; 489 489 if (ch == '>') { 490 if ( buff[1] == '\\')490 if (_buff[1] == '\\') 491 491 break; 492 492 } 493 493 } while (1); 494 494 495 buff[index] = '\0';496 497 #ifdef _LOADER_DEBUG_ 498 TRACE("%s", buff);499 #endif 500 } 495 _buff[index] = '\0'; 496 497 #ifdef _LOADER_DEBUG_ 498 TRACE("%s", _buff); 499 #endif 500 } -
trunk/packages/vizservers/nanovis/ZincBlendeReconstructor.h
r3611 r4063 35 35 ZincBlendeVolume *loadFromStream(std::istream& stream); 36 36 37 ZincBlendeVolume *loadFromMemory( void *dataBlock);37 ZincBlendeVolume *loadFromMemory(const void *dataBlock); 38 38 39 39 /** … … 67 67 */ 68 68 void getLine(std::istream& stream); 69 void getLine( unsigned char*& stream);69 void getLine(const unsigned char*& stream); 70 70 71 char buff[255];71 char _buff[255]; 72 72 73 73 /// A ZincBlendeReconstructor Singleton instance -
trunk/packages/vizservers/nanovis/dxReader.cpp
r3874 r4063 29 29 #include <string> 30 30 31 #include <RpOutcome.h>32 31 #include <RpField1D.h> 33 32 #include <RpFieldRect3D.h> … … 58 57 */ 59 58 Volume * 60 nv::load_dx_volume_stream(Rappture::Outcome& result, const char *tag, 61 std::iostream& fin) 59 nv::load_dx_volume_stream(const char *tag, std::iostream& fin) 62 60 { 63 61 TRACE("Enter tag:%s", tag); … … 83 81 fin.getline(line, sizeof(line) - 1); 84 82 if (fin.fail()) { 85 result.error("error in data stream");83 ERROR("error in data stream"); 86 84 return NULL; 87 85 } … … 158 156 ftri.close(); 159 157 } else { 160 result.error("triangularization failed");158 ERROR("triangularization failed"); 161 159 return NULL; 162 160 } … … 183 181 } 184 182 if (count > 1) { 185 result.addError("don't know how to handle multiple non-zero"186 183 ERROR("don't know how to handle multiple non-zero" 184 " delta values"); 187 185 return NULL; 188 186 } … … 190 188 &dummy, type, &npts) == 3) { 191 189 if (isrect && (npts != nx*ny*nz)) { 192 result.addError("inconsistent data: expected %d points"193 190 ERROR("inconsistent data: expected %d points" 191 " but found %d points", nx*ny*nz, npts); 194 192 return NULL; 195 193 } else if (!isrect && (npts != nxy*nz)) { 196 result.addError("inconsistent data: expected %d points"197 194 ERROR("inconsistent data: expected %d points" 195 " but found %d points", nxy*nz, npts); 198 196 return NULL; 199 197 } … … 202 200 &dummy, type, &npts) == 3) { 203 201 if (npts != nx*ny*nz) { 204 result.addError("inconsistent data: expected %d points"205 202 ERROR("inconsistent data: expected %d points" 203 " but found %d points", nx*ny*nz, npts); 206 204 return NULL; 207 205 } … … 220 218 // read data points 221 219 if (fin.eof()) { 222 result.error("data not found in stream");220 ERROR("data not found in stream"); 223 221 return NULL; 224 222 } … … 247 245 fin.getline(line,sizeof(line)-1); 248 246 if (fin.fail()) { 249 result.addError("error reading data points");247 ERROR("error reading data points"); 250 248 return NULL; 251 249 } … … 287 285 // make sure that we read all of the expected points 288 286 if (nread != npts) { 289 result.addError("inconsistent data: expected %d points"290 287 ERROR("inconsistent data: expected %d points" 288 " but found %d points", npts, nread); 291 289 return NULL; 292 290 } … … 390 388 fin >> dval; 391 389 if (fin.fail()) { 392 result.addError("after %d of %d points: can't read number",393 390 ERROR("after %d of %d points: can't read number", 391 nread, npts); 394 392 return NULL; 395 393 } else { … … 407 405 // make sure that we read all of the expected points 408 406 if (nread != npts) { 409 result.addError("inconsistent data: expected %d points"410 407 ERROR("inconsistent data: expected %d points" 408 " but found %d points", npts, nread); 411 409 return NULL; 412 410 } -
trunk/packages/vizservers/nanovis/dxReader.h
r3611 r4063 9 9 #include <iostream> 10 10 11 namespace Rappture {12 class Outcome;13 }14 15 11 namespace nv { 16 12 … … 18 14 19 15 extern Volume * 20 load_dx_volume_stream(Rappture::Outcome& status, const char *tag, 21 std::iostream& fin); 16 load_dx_volume_stream(const char *tag, std::iostream& fin); 22 17 23 18 } -
trunk/packages/vizservers/nanovis/nanovisServer.cpp
r3630 r4063 284 284 #endif 285 285 286 /** 287 * \brief Send a command with data payload 288 * 289 * data pointer is freed on completion of the response 290 */ 286 291 void 287 nv::sendDataToClient(const char *command, c onst char *data, size_t dlen)292 nv::sendDataToClient(const char *command, char *data, size_t dlen) 288 293 { 289 294 #ifdef USE_THREADS … … 301 306 iov[0].iov_len = strlen(command); 302 307 // Data 303 iov[1].iov_base = const_cast<char *>(data);308 iov[1].iov_base = data; 304 309 iov[1].iov_len = dlen; 305 310 if (writev(nv::g_fdOut, iov, numRecords) < 0) { … … 307 312 } 308 313 delete [] iov; 314 free(data); 309 315 #endif 310 316 } -
trunk/packages/vizservers/nanovis/nanovisServer.h
r3614 r4063 55 55 extern int writeToStatsFile(int f, const char *s, size_t length); 56 56 #endif 57 extern void sendDataToClient(const char *command, c onst char *data,57 extern void sendDataToClient(const char *command, char *data, 58 58 size_t dlen); 59 59 } -
trunk/packages/vizservers/nanovis/protocol-nanovis.txt
r3630 r4063 110 110 -transferfunction <name> 111 111 -volume <bool> 112 <flowObj> data file <fileName> <numComponents>113 Load a data file. fileName is path to file on server114 112 <flowObj> data follows <nbytes> <numComponents> 115 113 Send flow data. Data bytes follow the newline after the command
Note: See TracChangeset
for help on using the changeset viewer.