void resetIsosurface() { meshData = new MeshData(); xyzMin = xyzMax = null; jvxlData.isBicolorMap = params.isBicolorMap; if (meshDataServer != null) meshDataServer.fillMeshData(null, 0, null); contourVertexCount = 0; if (params.cutoff == Float.MAX_VALUE) params.cutoff = defaultCutoff; jvxlData.jvxlSurfaceData = ""; jvxlData.jvxlEdgeData = ""; jvxlData.jvxlColorData = ""; // TODO: more resets of jvxlData? edgeCount = 0; edgeFractionBase = JvxlCoder.defaultEdgeFractionBase; edgeFractionRange = JvxlCoder.defaultEdgeFractionRange; colorFractionBase = JvxlCoder.defaultColorFractionBase; colorFractionRange = JvxlCoder.defaultColorFractionRange; params.mappedDataMin = Float.MAX_VALUE; }
boolean createIsosurface(boolean justForPlane) { resetIsosurface(); jvxlData.cutoff = Float.NaN; if (!readAndSetVolumeParameters(justForPlane)) return false; if (!justForPlane && !Float.isNaN(params.sigma) && !allowSigma) { if (params.sigma > 0) Logger.error("Reader does not support SIGMA option -- using cutoff 1.6"); params.cutoff = 1.6f; } // negative sigma just ignores the error message // and means it was inserted by Jmol as a default option if (params.sigma < 0) params.sigma = -params.sigma; nPointsX = voxelCounts[0]; nPointsY = voxelCounts[1]; nPointsZ = voxelCounts[2]; jvxlData.isSlabbable = ((params.dataType & Parameters.IS_SLABBABLE) != 0); jvxlData.insideOut = params.insideOut; jvxlData.dataXYReversed = params.dataXYReversed; jvxlData.isBicolorMap = params.isBicolorMap; jvxlData.nPointsX = nPointsX; jvxlData.nPointsY = nPointsY; jvxlData.nPointsZ = nPointsZ; jvxlData.jvxlVolumeDataXml = volumeData.xmlData; jvxlData.voxelVolume = volumeData.voxelVolume; if (justForPlane) { // float[][][] voxelDataTemp = volumeData.voxelData; volumeData.setMappingPlane(params.thePlane); // volumeData.setDataDistanceToPlane(params.thePlane); if (meshDataServer != null) meshDataServer.fillMeshData(meshData, MeshData.MODE_GET_VERTICES, null); params.setMapRanges(this, false); generateSurfaceData(); volumeData.setMappingPlane(null); // if (volumeData != null) // volumeData.voxelData = voxelDataTemp; } else { if (!readVolumeData(false)) return false; generateSurfaceData(); } if (jvxlFileHeaderBuffer != null) { String s = jvxlFileHeaderBuffer.toString(); int i = s.indexOf('\n', s.indexOf('\n', s.indexOf('\n') + 1) + 1) + 1; jvxlData.jvxlFileTitle = s.substring(0, i); } if (params.contactPair == null) setBoundingBox(); if (!params.isSilent) Logger.info("boundbox corners " + Escape.escape(xyzMin) + " " + Escape.escape(xyzMax)); jvxlData.boundingBox = new Point3f[] {xyzMin, xyzMax}; jvxlData.dataMin = dataMin; jvxlData.dataMax = dataMax; jvxlData.cutoff = (isJvxl ? jvxlCutoff : params.cutoff); jvxlData.isCutoffAbsolute = params.isCutoffAbsolute; jvxlData.pointsPerAngstrom = 1f / volumeData.volumetricVectorLengths[0]; jvxlData.jvxlColorData = ""; jvxlData.jvxlPlane = params.thePlane; jvxlData.jvxlEdgeData = edgeData; jvxlData.isBicolorMap = params.isBicolorMap; jvxlData.isContoured = params.isContoured; jvxlData.colorDensity = params.colorDensity; if (jvxlData.vContours != null) params.nContours = jvxlData.vContours.length; jvxlData.nContours = (params.contourFromZero ? params.nContours : -1 - params.nContours); jvxlData.nEdges = edgeCount; jvxlData.edgeFractionBase = edgeFractionBase; jvxlData.edgeFractionRange = edgeFractionRange; jvxlData.colorFractionBase = colorFractionBase; jvxlData.colorFractionRange = colorFractionRange; jvxlData.jvxlDataIs2dContour = jvxlDataIs2dContour; jvxlData.jvxlDataIsColorMapped = jvxlDataIsColorMapped; jvxlData.jvxlDataIsColorDensity = jvxlDataIsColorDensity; jvxlData.isXLowToHigh = isXLowToHigh; jvxlData.vertexDataOnly = vertexDataOnly; jvxlData.saveVertexCount = 0; if (jvxlDataIsColorMapped || jvxlData.nVertexColors > 0) { if (meshDataServer != null) { meshDataServer.fillMeshData(meshData, MeshData.MODE_GET_VERTICES, null); meshDataServer.fillMeshData(meshData, MeshData.MODE_GET_COLOR_INDEXES, null); } jvxlData.jvxlColorData = readColorData(); updateSurfaceData(); if (meshDataServer != null) meshDataServer.notifySurfaceMappingCompleted(); } return true; }