boolean processOneCubical(int insideMask, float cutoff, int[] voxelPointIndexes, int x, int y, int z) {
		int edgeMask = insideMaskTable[insideMask];
		boolean isNaN = false;
		for (int iEdge = 12; --iEdge >= 0;) {
			if ((edgeMask & (1 << iEdge)) == 0)
				continue;
			if (voxelPointIndexes[iEdge] >= 0)
				continue; // propagated from neighbor
			++edgeCount;
			int vertexA = edgeVertexes[2 * iEdge];
			int vertexB = edgeVertexes[2 * iEdge + 1];
			float valueA = vertexValues[vertexA];
			float valueB = vertexValues[vertexB];
			if (Float.isNaN(valueA) || Float.isNaN(valueB))
				isNaN = true;
			calcVertexPoints(x, y, z, vertexA, vertexB);
			float fraction = calcSurfacePoint(cutoff, valueA, valueB, surfacePoints[iEdge]);
			if (isContoured) {
				// Logger.info(" processVoxel " + x + "," + y + "," + z + " "
				// + iEdge + " " + binaryString(edgeMask) + " " + contourType
				// + " fraction " + fraction + " valueA " + valueA + " valueB "
				// + valueB + " cutoff " + cutoff);
				/*
				 * we are collecting just the desired type of intersection for the 2D marching square contouring -- x,
				 * y, or z. In the case of a contoured f(x,y) surface, we take every point.
				 * 
				 */
				int vPt = Integer.MAX_VALUE;
				if (edgeTypeTable[iEdge] == contourType)
					vPt = addContourData(x, y, z, cubeVertexOffsets[vertexA], surfacePoints[iEdge], cutoff);
				voxelPointIndexes[iEdge] = vPt;
				continue;
			}
			int assocVertex = (fraction < assocCutoff ? -1 : fraction > 1 - assocCutoff ? 1 : 0);
			String sKey = (assocVertex == 0 ? "" : calcDataKey(x, y, z, assocVertex < 0 ? vertexA : vertexB));
			voxelPointIndexes[iEdge] = addVertexCopy(surfacePoints[iEdge], thisValue, (assocVertex != 0), sKey);
			if (logCube)
				Logger.info("edge " + vertexPoints[vertexA] + " " + vertexPoints[vertexB] + " surface "
						+ surfacePoints[iEdge] + " " + thisValue);
			if (iAddGridPoints) {
				addVertexCopy(valueA < valueB ? pointA : pointB, Float.NaN, false, "");
				addVertexCopy(valueA < valueB ? pointB : pointA, Float.NaN, false, "");
			}
		}
		return !isNaN;
	}