[cig-commits] r12930 - cs/spatialdata-0.1/trunk/libsrc/spatialdb
brad at geodynamics.org
brad at geodynamics.org
Sun Sep 21 12:57:34 PDT 2008
Author: brad
Date: 2008-09-21 12:57:33 -0700 (Sun, 21 Sep 2008)
New Revision: 12930
Modified:
cs/spatialdata-0.1/trunk/libsrc/spatialdb/GocadVoxet.cc
cs/spatialdata-0.1/trunk/libsrc/spatialdb/SCECCVMH.cc
Log:
Added retry loop to adjust search location in vertical direction when encountering 'holes' in the voxet file.
Modified: cs/spatialdata-0.1/trunk/libsrc/spatialdb/GocadVoxet.cc
===================================================================
--- cs/spatialdata-0.1/trunk/libsrc/spatialdb/GocadVoxet.cc 2008-09-21 11:33:29 UTC (rev 12929)
+++ cs/spatialdata-0.1/trunk/libsrc/spatialdb/GocadVoxet.cc 2008-09-21 19:57:33 UTC (rev 12930)
@@ -84,6 +84,22 @@
indexZ >= 0 && indexZ < numZ) {
int indexV = indexZ*numY*numX + indexY*numX + indexX;
*value = _data[indexV];
+
+ // If voxet value is "no data value"
+ if (fabs(1.0 - *value / _property.noDataValue) < 1.0e-6) {
+ // If near indexZ=0, retry with indexZ+1, otherwise if near
+ // indexZ=numZ, retry with indexZ-1.
+ const int dz = (indexZ < numZ/2) ? +1 : -1;
+ const int maxRetries = 32;
+ for (int iTry=0; iTry < maxRetries; ++iTry) {
+ const int indexZNew = indexZ + dz*iTry;
+ assert(indexZNew >= 0 && indexZNew < numZ);
+ indexV = indexZNew*numY*numX + indexY*numX + indexX;
+ *value = _data[indexV];
+ if (fabs(1.0 - *value / _property.noDataValue) > 1.0e-6)
+ break;
+ } // for
+ } // if
} else {
*value = _property.noDataValue;
flag = 1;
Modified: cs/spatialdata-0.1/trunk/libsrc/spatialdb/SCECCVMH.cc
===================================================================
--- cs/spatialdata-0.1/trunk/libsrc/spatialdb/SCECCVMH.cc 2008-09-21 11:33:29 UTC (rev 12929)
+++ cs/spatialdata-0.1/trunk/libsrc/spatialdb/SCECCVMH.cc 2008-09-21 19:57:33 UTC (rev 12930)
@@ -235,21 +235,16 @@
case QUERY_VP :
outsideVoxet = _queryVp(&vals[iVal]);
if (outsideVoxet)
- queryFlag = outsideVoxet || queryFlag;
+ queryFlag |= outsideVoxet;
haveVp = true;
vp = vals[iVal];
break;
- case QUERY_VPTAG :
- outsideVoxet = _queryTag(&vals[iVal]);
- if (outsideVoxet)
- queryFlag = outsideVoxet || queryFlag;
- break;
case QUERY_DENSITY :
if (!haveVp) {
outsideVoxet = _queryVp(&vp);
haveVp = true;
if (outsideVoxet)
- queryFlag = outsideVoxet || queryFlag;
+ queryFlag |= outsideVoxet;
} // if
vals[iVal] = _calcDensity(vp);
break;
@@ -258,7 +253,7 @@
outsideVoxet = _queryVp(&vp);
haveVp = true;
if (outsideVoxet)
- queryFlag = outsideVoxet || queryFlag;
+ queryFlag |= outsideVoxet;
} // if
vals[iVal] = _calcVs(vp);
break;
@@ -267,7 +262,7 @@
assert(0 != _topoElev);
outsideVoxet = _topoElev->queryNearest(&vals[iVal], _xyzUTM);
if (outsideVoxet)
- queryFlag = outsideVoxet || queryFlag;
+ queryFlag |= outsideVoxet;
} else
vals[iVal] = topoElev;
break;
@@ -275,14 +270,19 @@
assert(0 != _baseDepth);
outsideVoxet = _baseDepth->queryNearest(&vals[iVal], _xyzUTM);
if (outsideVoxet)
- queryFlag = outsideVoxet || queryFlag;
+ queryFlag |= outsideVoxet;
break;
case QUERY_MOHODEPTH :
assert(0 != _mohoDepth);
outsideVoxet = _mohoDepth->queryNearest(&vals[iVal], _xyzUTM);
if (outsideVoxet)
- queryFlag = outsideVoxet || queryFlag;
+ queryFlag |= outsideVoxet;
break;
+ case QUERY_VPTAG :
+ outsideVoxet = _queryTag(&vals[iVal]);
+ if (outsideVoxet)
+ queryFlag |= outsideVoxet;
+ break;
default:
assert(0);
} // switch
More information about the cig-commits
mailing list