- Timestamp:
- Aug 15, 2013 2:05:00 PM (11 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/gui/src/RpDxToVtk.c
r3756 r3865 109 109 110 110 static int 111 GetStructuredGridFieldValues(Tcl_Interp *interp, int nPoints, char **stringPtr, 112 const char *endPtr, Tcl_Obj *objPtr) 113 { 114 int i; 115 const char *p; 116 char mesg[2000]; 117 double *array, scale, vmin, vmax; 118 119 p = *stringPtr; 120 array = malloc(sizeof(double) * nPoints); 121 if (array == NULL) { 122 return TCL_ERROR; 123 } 124 vmin = DBL_MAX, vmax = -DBL_MAX; 125 for (i = 0; i < nPoints; i++) { 126 double value; 127 char *nextPtr; 128 129 if (p >= endPtr) { 130 Tcl_AppendResult(interp, "unexpected EOF in reading points", 131 (char *)NULL); 132 return TCL_ERROR; 133 } 134 value = strtod(p, &nextPtr); 135 if (nextPtr == p) { 136 Tcl_AppendResult(interp, "bad value found in reading points", 137 (char *)NULL); 138 return TCL_ERROR; 139 } 140 p = nextPtr; 141 array[i] = value; 142 if (value < vmin) { 143 vmin = value; 144 } 145 if (value > vmax) { 146 vmax = value; 147 } 148 } 149 scale = 1.0 / (vmax - vmin); 150 for (i = 0; i < nPoints; i++) { 151 #ifdef notdef 152 sprintf(mesg, "%g\n", (array[i] - vmin) * scale); 153 #endif 154 sprintf(mesg, "%g\n", array[i]); 155 Tcl_AppendToObj(objPtr, mesg, -1); 156 } 157 free(array); 158 *stringPtr = (char *)p; 159 return TCL_OK; 160 } 161 162 static int 111 163 GetCloudFieldValues(Tcl_Interp *interp, int nXYPoints, int nZPoints, char **stringPtr, 112 164 const char *endPtr, Tcl_Obj *objPtr) … … 244 296 char *string; 245 297 char mesg[2000]; 298 double dv0[3], dv1[3], dv2[3]; 246 299 double dx, dy, dz; 247 300 double origin[3]; … … 250 303 char *name; 251 304 int isUniform; 252 int i, iz; 305 int isStructuredGrid; 306 int i, ix, iy, iz; 253 307 254 308 name = "myScalars"; 309 points = NULL; 255 310 nAxes = nPoints = nXYPoints = 0; 256 311 dx = dy = dz = 0.0; /* Suppress compiler warning. */ 257 312 origin[0] = origin[1] = origin[2] = 0.0; /* May not have an origin line. */ 313 dv0[0] = dv0[1] = dv0[2] = 0.0; 314 dv1[0] = dv1[1] = dv1[2] = 0.0; 315 dv2[0] = dv2[1] = dv2[2] = 0.0; 258 316 count[0] = count[1] = count[2] = 0; /* Suppress compiler warning. */ 259 317 isUniform = 1; /* Default to expecting uniform grid */ 260 318 isStructuredGrid = 0; 319 261 320 if (objc != 2) { 262 321 Tcl_AppendResult(interp, "wrong # arguments: should be \"", … … 308 367 return TCL_ERROR; 309 368 } 369 switch (nAxes) { 370 case 0: 371 dv0[0] = ddx; 372 dv0[1] = ddy; 373 dv0[2] = ddz; 374 break; 375 case 1: 376 dv1[0] = ddx; 377 dv1[1] = ddy; 378 dv1[2] = ddz; 379 break; 380 case 2: 381 dv2[0] = ddx; 382 dv2[1] = ddy; 383 dv2[2] = ddz; 384 break; 385 default: 386 break; 387 } 388 310 389 if (ddx != 0.0) { 311 390 if (ddy != 0.0 || ddz != 0.0) { 312 Tcl_AppendResult(interp, "invalid delta statement",313 (char *)NULL);314 return TCL_ERROR;391 /* Not axis aligned or skewed grid */ 392 isUniform = 0; 393 isStructuredGrid = 1; 315 394 } 316 395 dx = ddx; 317 396 } else if (ddy != 0.0) { 318 397 if (ddx != 0.0 || ddz != 0.0) { 319 Tcl_AppendResult(interp, "invalid delta statement",320 (char *)NULL);321 return TCL_ERROR;398 /* Not axis aligned or skewed grid */ 399 isUniform = 0; 400 isStructuredGrid = 1; 322 401 } 323 402 dy = ddy; 324 403 } else if (ddz != 0.0) { 325 404 if (ddx != 0.0 || ddy != 0.0) { 326 Tcl_AppendResult(interp, "invalid delta statement",327 (char *)NULL);328 return TCL_ERROR;405 /* Not axis aligned or skewed grid */ 406 isUniform = 0; 407 isStructuredGrid = 1; 329 408 } 330 409 dz = ddz; … … 360 439 nPoints); 361 440 #endif 362 if (isUniform && nPoints != count[0]*count[1]*count[2]) { 441 if ((isUniform || isStructuredGrid) && 442 nPoints != count[0]*count[1]*count[2]) { 363 443 sprintf(mesg, "inconsistent data: expected %d points" 364 444 " but found %d points", count[0]*count[1]*count[2], … … 366 446 Tcl_AppendResult(interp, mesg, (char *)NULL); 367 447 return TCL_ERROR; 368 } else if (!isUniform && nPoints != nXYPoints * count[2]) { 448 } else if (!(isUniform || isStructuredGrid) && 449 nPoints != nXYPoints * count[2]) { 369 450 sprintf(mesg, "inconsistent data: expected %d points" 370 451 " but found %d points", nXYPoints * count[2], … … 375 456 if (isUniform) { 376 457 if (GetUniformFieldValues(interp, nPoints, count, &p, pend, fieldObjPtr) 458 != TCL_OK) { 459 return TCL_ERROR; 460 } 461 } else if (isStructuredGrid) { 462 if (GetStructuredGridFieldValues(interp, nPoints, &p, pend, fieldObjPtr) 377 463 != TCL_OK) { 378 464 return TCL_ERROR; … … 402 488 sprintf(mesg, "SPACING %g %g %g\n", dx, dy, dz); 403 489 Tcl_AppendToObj(objPtr, mesg, -1); 490 sprintf(mesg, "POINT_DATA %d\n", nPoints); 491 Tcl_AppendToObj(objPtr, mesg, -1); 492 sprintf(mesg, "SCALARS %s double 1\n", name); 493 Tcl_AppendToObj(objPtr, mesg, -1); 494 sprintf(mesg, "LOOKUP_TABLE default\n"); 495 Tcl_AppendToObj(objPtr, mesg, -1); 496 Tcl_AppendObjToObj(objPtr, fieldObjPtr); 497 } else if (isStructuredGrid) { 498 #ifdef notdef 499 fprintf(stderr, "dv0 %g %g %g\n", dv0[0], dv0[1], dv0[2]); 500 fprintf(stderr, "dv1 %g %g %g\n", dv1[0], dv1[1], dv1[2]); 501 fprintf(stderr, "dv2 %g %g %g\n", dv2[0], dv2[1], dv2[2]); 502 #endif 503 objPtr = Tcl_NewStringObj("# vtk DataFile Version 2.0\n", -1); 504 Tcl_AppendToObj(objPtr, "Converted from DX file\n", -1); 505 Tcl_AppendToObj(objPtr, "ASCII\n", -1); 506 Tcl_AppendToObj(objPtr, "DATASET STRUCTURED_GRID\n", -1); 507 sprintf(mesg, "DIMENSIONS %d %d %d\n", count[0], count[1], count[2]); 508 Tcl_AppendToObj(objPtr, mesg, -1); 509 for (ix = 0; ix < count[0]; ix++) { 510 for (iy = 0; iy < count[1]; iy++) { 511 for (iz = 0; iz < count[2]; iz++) { 512 double x, y, z; 513 x = origin[0] + dv2[0] * iz + dv1[0] * iy + dv0[0] * ix; 514 y = origin[1] + dv2[1] * iz + dv1[1] * iy + dv0[1] * ix; 515 z = origin[2] + dv2[2] * iz + dv1[2] * iy + dv0[2] * ix; 516 sprintf(mesg, "%g %g %g\n", x, y, z); 517 Tcl_AppendToObj(pointsObjPtr, mesg, -1); 518 } 519 } 520 } 521 sprintf(mesg, "POINTS %d double\n", nPoints); 522 Tcl_AppendToObj(objPtr, mesg, -1); 523 Tcl_AppendObjToObj(objPtr, pointsObjPtr); 404 524 sprintf(mesg, "POINT_DATA %d\n", nPoints); 405 525 Tcl_AppendToObj(objPtr, mesg, -1);
Note: See TracChangeset
for help on using the changeset viewer.