org.jmol.jvxl.readers
Class SurfaceReader

java.lang.Object
  extended by org.jmol.jvxl.readers.SurfaceReader
All Implemented Interfaces:
VertexDataServer
Direct Known Subclasses:
SurfaceFileReader, VolumeDataReader

public abstract class SurfaceReader
extends java.lang.Object
implements VertexDataServer


Field Summary
(package private) static float ANGSTROMS_PER_BOHR
           
private  float assocCutoff
           
protected  char cJvxlEdgeNaN
           
protected  ColorEncoder colorEncoder
           
protected  int colorFractionBase
           
protected  int colorFractionRange
           
private static java.lang.String[] colorPhases
           
protected  int contourVertexCount
           
(package private) static float defaultCutoff
           
(package private) static float defaultMappedDataMax
           
(package private) static float defaultMappedDataMin
           
private  int edgeCount
           
private  java.lang.String edgeData
           
protected  int edgeFractionBase
           
protected  int edgeFractionRange
           
protected  java.lang.StringBuffer fractionData
           
(package private)  boolean hasColorData
           
protected  boolean isApbsDx
           
protected  boolean isJvxl
           
protected  boolean isProgressive
           
protected  boolean isXLowToHigh
           
protected  java.lang.String jvxlColorDataRead
           
protected  float jvxlCutoff
           
protected  JvxlData jvxlData
           
protected  boolean jvxlDataIs2dContour
           
protected  boolean jvxlDataIsColorMapped
           
protected  boolean jvxlDataIsPrecisionColor
           
protected  java.lang.String jvxlEdgeDataRead
           
protected  java.lang.StringBuffer jvxlFileHeaderBuffer
           
protected  int jvxlNSurfaceInts
           
protected  java.util.BitSet jvxlVoxelBitSet
           
private  MarchingCubes marchingCubes
           
protected  MarchingSquares marchingSquares
           
protected  MeshData meshData
           
protected  MeshDataServer meshDataServer
           
protected  long nBytes
           
protected  int nDataPoints
           
protected  int nPointsX
           
protected  int nPointsY
           
protected  int nPointsZ
           
protected  Parameters params
           
protected  javax.vecmath.Point3f ptTemp
           
protected  SurfaceGenerator sg
           
protected  java.util.Vector[] vContours
           
(package private)  boolean vertexDataOnly
           
protected  VolumeData volumeData
           
protected  javax.vecmath.Point3f volumetricOrigin
           
protected  javax.vecmath.Vector3f[] volumetricVectors
           
protected  int[] voxelCounts
           
protected  float[][][] voxelData
           
 
Constructor Summary
SurfaceReader(SurfaceGenerator sg)
           
 
Method Summary
 void addTriangleCheck(int iA, int iB, int iC, int check, boolean isAbsolute, int color)
          addTriangleCheck adds a triangle along with a 3-bit check indicating which edges to draw in mesh mode: 1 (iA-iB) + 2 (iB-iC) + 4 (iC-iA)
 int addVertexCopy(javax.vecmath.Point3f vertexXYZ, float value, int assocVertex)
          addVertexCopy is used by the Marching Squares algorithm to uniquely identify a new vertex when an edge is crossed in the 2D plane.
(package private)  void applyColorScale()
           
private  void colorData()
           
(package private)  void colorIsosurface()
           
(package private)  boolean createIsosurface(boolean justForPlane)
           
(package private)  void discardTempData(boolean discardAll)
           
(package private)  void excludeMaximumSet()
           
(package private)  void excludeMinimumSet()
           
private  void generateSurfaceData()
           
protected  int getArgbFromPalette(float value)
           
protected  short getColorIndexFromPalette(float value)
           
(package private) static int getColorPhaseIndex(java.lang.String color)
           
(package private)  float getMaxMappedValue()
           
(package private)  float getMinMappedValue()
           
private  float getPhase(javax.vecmath.Point3f pt)
           
protected  float getSurfacePointAndFraction(float cutoff, boolean isCutoffAbsolute, float valueA, float valueB, javax.vecmath.Point3f pointA, javax.vecmath.Vector3f edgeVector, float[] fReturn, javax.vecmath.Point3f ptReturn)
           
 int getSurfacePointIndexAndFraction(float cutoff, boolean isCutoffAbsolute, int x, int y, int z, javax.vecmath.Point3i offset, int vA, int vB, float valueA, float valueB, javax.vecmath.Point3f pointA, javax.vecmath.Vector3f edgeVector, boolean isContourType, float[] fReturn)
          getSurfacePointIndex is used by the Marching Cubes algorithm and must return a unique integer identifier for a vertex created by the Marching Cube algorithm when it finds an edge.
 float getValue(int x, int y, int z)
          for readers only
protected  boolean gotoAndReadVoxelData(boolean isMapData)
           
protected  void gotoData(int n, int nPoints)
           
protected  void initializeVolumetricData()
           
(package private)  void jvxlUpdateInfo()
           
protected  java.lang.String readColorData()
           
protected abstract  void readSurfaceData(boolean isMapData)
           
(package private) abstract  boolean readVolumeData(boolean isMapData)
           
(package private) abstract  boolean readVolumeParameters()
           
(package private)  void resetIsosurface()
           
 void selectPocket(boolean doExclude)
           
(package private)  void setVolumeData(VolumeData v)
           
(package private)  void updateSurfaceData()
           
(package private)  void updateTriangles()
           
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

sg

protected SurfaceGenerator sg

meshDataServer

protected MeshDataServer meshDataServer

colorEncoder

protected ColorEncoder colorEncoder

params

protected Parameters params

meshData

protected MeshData meshData

jvxlData

protected JvxlData jvxlData

volumeData

protected VolumeData volumeData

edgeData

private java.lang.String edgeData

isProgressive

protected boolean isProgressive

isXLowToHigh

protected boolean isXLowToHigh

assocCutoff

private float assocCutoff

vertexDataOnly

boolean vertexDataOnly

hasColorData

boolean hasColorData

ANGSTROMS_PER_BOHR

static final float ANGSTROMS_PER_BOHR
See Also:
Constant Field Values

defaultMappedDataMin

static final float defaultMappedDataMin
See Also:
Constant Field Values

defaultMappedDataMax

static final float defaultMappedDataMax
See Also:
Constant Field Values

defaultCutoff

static final float defaultCutoff
See Also:
Constant Field Values

edgeCount

private int edgeCount

volumetricOrigin

protected javax.vecmath.Point3f volumetricOrigin

volumetricVectors

protected javax.vecmath.Vector3f[] volumetricVectors

voxelCounts

protected int[] voxelCounts

voxelData

protected float[][][] voxelData

nBytes

protected long nBytes

nDataPoints

protected int nDataPoints

nPointsX

protected int nPointsX

nPointsY

protected int nPointsY

nPointsZ

protected int nPointsZ

isJvxl

protected boolean isJvxl

isApbsDx

protected boolean isApbsDx

edgeFractionBase

protected int edgeFractionBase

edgeFractionRange

protected int edgeFractionRange

colorFractionBase

protected int colorFractionBase

colorFractionRange

protected int colorFractionRange

jvxlFileHeaderBuffer

protected java.lang.StringBuffer jvxlFileHeaderBuffer

fractionData

protected java.lang.StringBuffer fractionData

jvxlEdgeDataRead

protected java.lang.String jvxlEdgeDataRead

jvxlColorDataRead

protected java.lang.String jvxlColorDataRead

jvxlVoxelBitSet

protected java.util.BitSet jvxlVoxelBitSet

vContours

protected java.util.Vector[] vContours

jvxlDataIsColorMapped

protected boolean jvxlDataIsColorMapped

jvxlDataIsPrecisionColor

protected boolean jvxlDataIsPrecisionColor

jvxlDataIs2dContour

protected boolean jvxlDataIs2dContour

jvxlCutoff

protected float jvxlCutoff

jvxlNSurfaceInts

protected int jvxlNSurfaceInts

cJvxlEdgeNaN

protected char cJvxlEdgeNaN

contourVertexCount

protected int contourVertexCount

marchingSquares

protected MarchingSquares marchingSquares

marchingCubes

private MarchingCubes marchingCubes

ptTemp

protected final javax.vecmath.Point3f ptTemp

colorPhases

private static final java.lang.String[] colorPhases
Constructor Detail

SurfaceReader

SurfaceReader(SurfaceGenerator sg)
Method Detail

setVolumeData

void setVolumeData(VolumeData v)

readVolumeParameters

abstract boolean readVolumeParameters()

readVolumeData

abstract boolean readVolumeData(boolean isMapData)

jvxlUpdateInfo

void jvxlUpdateInfo()

createIsosurface

boolean createIsosurface(boolean justForPlane)

resetIsosurface

void resetIsosurface()

discardTempData

void discardTempData(boolean discardAll)

initializeVolumetricData

protected void initializeVolumetricData()

readSurfaceData

protected abstract void readSurfaceData(boolean isMapData)
                                 throws java.lang.Exception
Throws:
java.lang.Exception

gotoAndReadVoxelData

protected boolean gotoAndReadVoxelData(boolean isMapData)

gotoData

protected void gotoData(int n,
                        int nPoints)
                 throws java.lang.Exception
Throws:
java.lang.Exception

readColorData

protected java.lang.String readColorData()

getValue

public float getValue(int x,
                      int y,
                      int z)
Description copied from interface: VertexDataServer
for readers only

Specified by:
getValue in interface VertexDataServer
Returns:
value[x][y][z]

generateSurfaceData

private void generateSurfaceData()

getSurfacePointIndexAndFraction

public int getSurfacePointIndexAndFraction(float cutoff,
                                           boolean isCutoffAbsolute,
                                           int x,
                                           int y,
                                           int z,
                                           javax.vecmath.Point3i offset,
                                           int vA,
                                           int vB,
                                           float valueA,
                                           float valueB,
                                           javax.vecmath.Point3f pointA,
                                           javax.vecmath.Vector3f edgeVector,
                                           boolean isContourType,
                                           float[] fReturn)
Description copied from interface: VertexDataServer
getSurfacePointIndex is used by the Marching Cubes algorithm and must return a unique integer identifier for a vertex created by the Marching Cube algorithm when it finds an edge. If a vertex is discarded, then Integer.MAX_VALUE should be returned. the 3D coordinate of the point can be calculated using surfacePoint.scaleAdd(fraction, edgeVector, pointA); where fraction is generally calculated as: fraction = (cutoff - valueA) / (valueB - valueA); if (isCutoffAbsolute && (fraction < 0 || fraction > 1)) fraction = (-cutoff - valueA) / (valueB - valueA); This method is also used by MarchingCubes to deliver the appropriate oblique planar coordinate to MarchingSquares for later contouring.

Specified by:
getSurfacePointIndexAndFraction in interface VertexDataServer
vA - [0:7]
vB - [0:7]
edgeVector - vector from A to B
Returns:
new vertex index or Integer.MAX_VALUE

getSurfacePointAndFraction

protected float getSurfacePointAndFraction(float cutoff,
                                           boolean isCutoffAbsolute,
                                           float valueA,
                                           float valueB,
                                           javax.vecmath.Point3f pointA,
                                           javax.vecmath.Vector3f edgeVector,
                                           float[] fReturn,
                                           javax.vecmath.Point3f ptReturn)

addVertexCopy

public int addVertexCopy(javax.vecmath.Point3f vertexXYZ,
                         float value,
                         int assocVertex)
Description copied from interface: VertexDataServer
addVertexCopy is used by the Marching Squares algorithm to uniquely identify a new vertex when an edge is crossed in the 2D plane. The implementing method should COPY the Point3f using Point3f.set(). The data consumer can use the association key to group this vertex with others near the same gridpoint.

Specified by:
addVertexCopy in interface VertexDataServer
assocVertex - unique association vertex or -1
Returns:
new vertex index

addTriangleCheck

public void addTriangleCheck(int iA,
                             int iB,
                             int iC,
                             int check,
                             boolean isAbsolute,
                             int color)
Description copied from interface: VertexDataServer
addTriangleCheck adds a triangle along with a 3-bit check indicating which edges to draw in mesh mode: 1 (iA-iB) + 2 (iB-iC) + 4 (iC-iA)

Specified by:
addTriangleCheck in interface VertexDataServer

colorIsosurface

void colorIsosurface()

applyColorScale

void applyColorScale()

colorData

private void colorData()

getColorPhaseIndex

static int getColorPhaseIndex(java.lang.String color)

getPhase

private float getPhase(javax.vecmath.Point3f pt)

getMinMappedValue

float getMinMappedValue()

getMaxMappedValue

float getMaxMappedValue()

getColorIndexFromPalette

protected short getColorIndexFromPalette(float value)

getArgbFromPalette

protected int getArgbFromPalette(float value)

updateTriangles

void updateTriangles()

updateSurfaceData

void updateSurfaceData()

selectPocket

public void selectPocket(boolean doExclude)

excludeMinimumSet

void excludeMinimumSet()

excludeMaximumSet

void excludeMaximumSet()