org.jmol.jvxl.calc
Class MarchingSquares

java.lang.Object
  extended by org.jmol.jvxl.calc.MarchingSquares

public class MarchingSquares
extends java.lang.Object


Nested Class Summary
private static class MarchingSquares.ContourVertex
           
private static class MarchingSquares.PlanarSquare
           
 
Field Summary
static int CONTOUR_POINT
           
private  boolean contourFromZero
           
private  int contourIndex
           
private  float contourPlaneMaximumValue
           
private  float contourPlaneMinimumValue
           
private  javax.vecmath.Point3f[] contourPoints
           
private  int contourType
           
private  int contourVertexCount
           
private  MarchingSquares.ContourVertex[] contourVertexes
           
private static int defaultContourCount
           
static int EDGE_POINT
           
private  javax.vecmath.Vector3f edgeVector
           
private static byte[] edgeVertexes2d
           
private static byte[] insideMaskTable2d
           
private  boolean is3DContour
           
private  boolean logMessages
           
private  javax.vecmath.Matrix3f matXyzToPlane
           
private static int nContourMax
           
private  int nContours
           
private  int nContoursSpecified
           
private  int nSquares
           
private  int[] pixelCounts
           
private  float[][] pixelData
           
private  javax.vecmath.Point3f pixelOrigin
           
private  javax.vecmath.Vector3f[] pixelVertexVectors
           
private  javax.vecmath.Matrix3f planarMatrix
           
private  javax.vecmath.Point3f planarOrigin
           
private  MarchingSquares.PlanarSquare[] planarSquares
           
private  float[] planarVectorLengths
           
private  javax.vecmath.Vector3f[] planarVectors
           
private  javax.vecmath.Point3f pointA
           
private  javax.vecmath.Point3f pointB
           
private  javax.vecmath.Vector3f pointVector
           
private  javax.vecmath.Point3i ptiTemp
           
private  int squareCountX
           
private  int squareCountY
           
private  float[] squareFractions
           
private static javax.vecmath.Point3i[] squareVertexOffsets
           
private static javax.vecmath.Vector3f[] squareVertexVectors
           
private  javax.vecmath.Point4f thePlane
           
private  int thisContour
           
private  int[] triangleVertexList
           
private  javax.vecmath.Vector3f[] unitPlanarVectors
           
private  float valueMax
           
private  float valueMin
           
static int VERTEX_POINT
           
private  float[] vertexValues2d
           
private  VolumeData volumeData
           
private  VertexDataServer voxelReader
           
 
Constructor Summary
MarchingSquares(VertexDataServer voxelReader, VolumeData volumeData, javax.vecmath.Point4f thePlane, int nContours, int thisContour, boolean contourFromZero)
           
 
Method Summary
 int addContourVertex(int x, int y, int z, javax.vecmath.Point3i offsets, javax.vecmath.Point3f vertexXYZ, float value)
           
private  float calcContourPoint(float cutoff, float valueA, float valueB, javax.vecmath.Point3f contourPoint)
           
private  void calcPixelVertexVectors()
           
private  void calcVertexPoints2d(int x, int y, int vertexA, int vertexB)
           
private  void calcVertexPoints3d(int x, int y, int vertexA, int vertexB)
           
private  void contourLocateXYZ(int ix, int iy, javax.vecmath.Point3f pt)
           
 boolean createContours(float min, float max)
           
private  void createPlanarSquares()
           
private  void createTriangleSet(int nVertex, int mesh1, int mesh2)
           
private  void fillSquare(MarchingSquares.PlanarSquare square, int contourIndex, int edgeMask, boolean reverseWinding, int offset)
           
private  int findContourVertex(int ix, int iy)
           
 int generateContourData(boolean haveData)
           
private  int generateContourData(float contourCutoff)
           
 int getContourType()
           
private static int getContourType(javax.vecmath.Point4f plane, javax.vecmath.Vector3f[] volumetricVectors)
           
 int getContourVertexCount()
           
 float getInterpolatedPixelValue(javax.vecmath.Point3f ptXYZ)
           
private  void getPixelCounts()
           
private  void getPlanarOrigin()
           
private  void getPlanarVectors()
           
private  boolean isInside2d(float voxelValue, float max)
           
private  void loadPixelData(boolean haveData)
           
private  javax.vecmath.Point3i locatePixel(javax.vecmath.Point3f ptXyz)
           
private  javax.vecmath.Point3f pixelPtToXYZ(int x, int y)
           
private  void processOneQuadrilateral(int insideMask, float cutoff, int[] pixelPointIndexes, int x, int y)
           
private  int[] propagateNeighborPointIndexes2d(int x, int y, int[][] isoPointIndexes2d, float[][] squareFractions2d)
           
 void setContourData(int i, float value)
           
private  void setContourType()
           
 void setMinMax(float valueMin, float valueMax)
           
private  void setPlanarTransform()
           
private static void setupMatrix(javax.vecmath.Matrix3f mat, javax.vecmath.Vector3f[] cols)
           
private  void triangulateContours(boolean centerIsLow)
           
private  void xyzToPixelVector(javax.vecmath.Vector3f vector)
           
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

CONTOUR_POINT

public static final int CONTOUR_POINT
See Also:
Constant Field Values

VERTEX_POINT

public static final int VERTEX_POINT
See Also:
Constant Field Values

EDGE_POINT

public static final int EDGE_POINT
See Also:
Constant Field Values

logMessages

private boolean logMessages

voxelReader

private VertexDataServer voxelReader

volumeData

private VolumeData volumeData

nContourMax

private static final int nContourMax
See Also:
Constant Field Values

defaultContourCount

private static final int defaultContourCount
See Also:
Constant Field Values

nContours

private int nContours

nContoursSpecified

private int nContoursSpecified

contourType

private int contourType

thePlane

private javax.vecmath.Point4f thePlane

is3DContour

private boolean is3DContour

thisContour

private int thisContour

valueMin

private float valueMin

valueMax

private float valueMax

pointVector

private final javax.vecmath.Vector3f pointVector

pointA

private final javax.vecmath.Point3f pointA

pointB

private final javax.vecmath.Point3f pointB

edgeVector

private final javax.vecmath.Vector3f edgeVector

planarOrigin

private final javax.vecmath.Point3f planarOrigin

planarVectors

private final javax.vecmath.Vector3f[] planarVectors

unitPlanarVectors

private final javax.vecmath.Vector3f[] unitPlanarVectors

planarVectorLengths

private final float[] planarVectorLengths

matXyzToPlane

private final javax.vecmath.Matrix3f matXyzToPlane

contourFromZero

private boolean contourFromZero

squareVertexOffsets

private static final javax.vecmath.Point3i[] squareVertexOffsets

squareVertexVectors

private static final javax.vecmath.Vector3f[] squareVertexVectors

edgeVertexes2d

private static final byte[] edgeVertexes2d

insideMaskTable2d

private static final byte[] insideMaskTable2d

contourVertexCount

private int contourVertexCount

contourVertexes

private MarchingSquares.ContourVertex[] contourVertexes

pixelCounts

private final int[] pixelCounts

planarMatrix

private final javax.vecmath.Matrix3f planarMatrix

pixelData

private float[][] pixelData

vertexValues2d

private final float[] vertexValues2d

contourPoints

private final javax.vecmath.Point3f[] contourPoints

squareCountX

private int squareCountX

squareCountY

private int squareCountY

planarSquares

private MarchingSquares.PlanarSquare[] planarSquares

nSquares

private int nSquares

contourPlaneMinimumValue

private float contourPlaneMinimumValue

contourPlaneMaximumValue

private float contourPlaneMaximumValue

contourIndex

private int contourIndex

squareFractions

private float[] squareFractions

pixelOrigin

private final javax.vecmath.Point3f pixelOrigin

pixelVertexVectors

private javax.vecmath.Vector3f[] pixelVertexVectors

triangleVertexList

private final int[] triangleVertexList

ptiTemp

private final javax.vecmath.Point3i ptiTemp
Constructor Detail

MarchingSquares

public MarchingSquares(VertexDataServer voxelReader,
                       VolumeData volumeData,
                       javax.vecmath.Point4f thePlane,
                       int nContours,
                       int thisContour,
                       boolean contourFromZero)
Method Detail

getContourType

public int getContourType()

setMinMax

public void setMinMax(float valueMin,
                      float valueMax)

setContourType

private void setContourType()

getContourType

private static int getContourType(javax.vecmath.Point4f plane,
                                  javax.vecmath.Vector3f[] volumetricVectors)

generateContourData

public int generateContourData(boolean haveData)

getPlanarVectors

private void getPlanarVectors()

setPlanarTransform

private void setPlanarTransform()

getPlanarOrigin

private void getPlanarOrigin()

addContourVertex

public int addContourVertex(int x,
                            int y,
                            int z,
                            javax.vecmath.Point3i offsets,
                            javax.vecmath.Point3f vertexXYZ,
                            float value)

getContourVertexCount

public int getContourVertexCount()

setContourData

public void setContourData(int i,
                           float value)

loadPixelData

private void loadPixelData(boolean haveData)

getInterpolatedPixelValue

public float getInterpolatedPixelValue(javax.vecmath.Point3f ptXYZ)

getPixelCounts

private void getPixelCounts()

createPlanarSquares

private void createPlanarSquares()

createContours

public boolean createContours(float min,
                              float max)

generateContourData

private int generateContourData(float contourCutoff)

isInside2d

private boolean isInside2d(float voxelValue,
                           float max)

propagateNeighborPointIndexes2d

private int[] propagateNeighborPointIndexes2d(int x,
                                              int y,
                                              int[][] isoPointIndexes2d,
                                              float[][] squareFractions2d)

processOneQuadrilateral

private void processOneQuadrilateral(int insideMask,
                                     float cutoff,
                                     int[] pixelPointIndexes,
                                     int x,
                                     int y)

calcVertexPoints2d

private void calcVertexPoints2d(int x,
                                int y,
                                int vertexA,
                                int vertexB)

calcVertexPoints3d

private void calcVertexPoints3d(int x,
                                int y,
                                int vertexA,
                                int vertexB)

contourLocateXYZ

private void contourLocateXYZ(int ix,
                              int iy,
                              javax.vecmath.Point3f pt)

findContourVertex

private int findContourVertex(int ix,
                              int iy)

calcContourPoint

private float calcContourPoint(float cutoff,
                               float valueA,
                               float valueB,
                               javax.vecmath.Point3f contourPoint)

calcPixelVertexVectors

private void calcPixelVertexVectors()

triangulateContours

private void triangulateContours(boolean centerIsLow)

fillSquare

private void fillSquare(MarchingSquares.PlanarSquare square,
                        int contourIndex,
                        int edgeMask,
                        boolean reverseWinding,
                        int offset)

createTriangleSet

private void createTriangleSet(int nVertex,
                               int mesh1,
                               int mesh2)

setupMatrix

private static void setupMatrix(javax.vecmath.Matrix3f mat,
                                javax.vecmath.Vector3f[] cols)

xyzToPixelVector

private void xyzToPixelVector(javax.vecmath.Vector3f vector)

pixelPtToXYZ

private javax.vecmath.Point3f pixelPtToXYZ(int x,
                                           int y)

locatePixel

private javax.vecmath.Point3i locatePixel(javax.vecmath.Point3f ptXyz)