Package org.jmol.shapesurface
Class Isosurface
- java.lang.Object
-
- org.jmol.shape.Shape
-
- org.jmol.shape.MeshCollection
-
- org.jmol.shapesurface.Isosurface
-
- All Implemented Interfaces:
MeshDataServer
,VertexDataServer
- Direct Known Subclasses:
Contact
,LcaoCartoon
,MolecularOrbital
,Pmesh
public class Isosurface extends MeshCollection implements MeshDataServer
-
-
Field Summary
Fields Modifier and Type Field Description private java.lang.String
actualID
(package private) boolean
allowMesh
private boolean
associateNormals
private int
atomIndex
private javajs.util.P3
center
private int
colorType
private float[]
cutoffRange
private short
defaultColix
private boolean
explicitContours
protected boolean
iHaveBitSets
private boolean
iHaveModelIndex
private boolean
isColorExplicit
protected IsosurfaceMesh[]
isomeshes
private boolean
isPhaseColored
private boolean
isWithinNot
int[]
keyXy
private javajs.util.P4
lcaoDir
private static int
MAX_OBJECT_CLICK_DISTANCE_SQUARED
private short
meshColix
private float[]
moLinearCombination
private int
moNumber
private java.lang.String
newFileName
private int
nLCAO
private java.lang.String
oldFileName
private javajs.util.P3i
ptXY
private float
scale3d
private java.lang.String
script
private java.lang.String
scriptAppendix
protected SurfaceGenerator
sg
protected IsosurfaceMesh
thisMesh
private float
withinDistance2
private javajs.util.Lst<javajs.util.P3>
withinPoints
-
Fields inherited from class org.jmol.shape.MeshCollection
bsDisplay, colix, color, connections, currentMesh, displayWithinDistance2, displayWithinPoints, explicitID, htObjects, isDisplayWithinNot, isFixed, jvxlData, linkedMesh, meshCount, meshes, modelIndex, nUnnamed, pickedMesh, pickedModel, pickedPt, pickedVertex, PREVIOUS_MESH_ID, previousMeshID, title
-
Fields inherited from class org.jmol.shape.Shape
bsColixSet, bsSizeSet, isBioShape, ms, myType, RADIUS_MAX, shapeID, translucentAllowed, translucentLevel, vf, vwr
-
-
Constructor Summary
Constructors Constructor Description Isosurface()
-
Method Summary
All Methods Static Methods Instance Methods Concrete Methods Modifier and Type Method Description protected void
addMeshInfo(IsosurfaceMesh mesh, java.util.Map<java.lang.String,java.lang.Object> info)
void
addRequiredFile(java.lang.String fileName)
int
addTriangleCheck(int iA, int iB, int iC, int check, int iContour, 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(javajs.util.T3 vertexXYZ, float value, int assocVertex, boolean asCopy)
addVertexCopy is used by the Marching Squares algorithm to uniquely identify a new vertex when an edge is crossed in the 2D plane.void
allocMesh(java.lang.String thisID, Mesh m)
javajs.util.P3[]
calculateGeodesicSurface(javajs.util.BS bsSelected, float envelopeRadius)
private java.lang.Object
calculateVolumeOrArea(IsosurfaceMesh mesh, boolean isArea)
java.util.Map<java.lang.String,java.lang.Object>
checkObjectClicked(int x, int y, int action, javajs.util.BS bsVisible, boolean drawPicking)
boolean
checkObjectHovered(int x, int y, javajs.util.BS bsVisible)
protected void
clearSg()
private void
createLcaoLobe(javajs.util.V3 lobeAxis, float factor, int nElectrons)
protected void
discardTempData(boolean discardAll)
private void
drawLcaoCartoon(javajs.util.V3 z, javajs.util.V3 x, javajs.util.V3 rotAxis, int nElectrons)
private void
ensureMeshSource()
void
fillMeshData(MeshData meshData, int mode, IsosurfaceMesh mesh)
private java.lang.String
findValue(int x, int y, boolean isPicking, javajs.util.BS bsVisible)
protected void
getCapSlabInfo(java.lang.String script)
private java.lang.Object[]
getCapSlabObject(java.lang.String s, boolean isCap)
legacy -- for some scripts with early isosurface slabbingjava.lang.String
getCmd(int index)
private float[]
getDataRange(IsosurfaceMesh mesh)
private short
getDefaultColix()
private java.lang.Object
getFileReader(java.lang.String fileName)
private void
getMeshCommand(javajs.util.SB sb, int i)
float[]
getPlane(int x)
static java.lang.String
getPolygonColorData(int ccount, short[] colixes, int[][] polygons, javajs.util.BS bsSlabDisplay)
java.lang.Object
getProperty(java.lang.String property, int index)
boolean
getPropertyData(java.lang.String property, java.lang.Object[] data)
protected java.lang.Object
getPropI(java.lang.String property, int index)
private boolean
getScriptBitSets(java.lang.String script, javajs.util.BS[] bsCmd)
java.lang.Object
getShapeDetail()
java.lang.String
getShapeState()
int
getSurfacePointIndexAndFraction(float cutoff, boolean isCutoffAbsolute, int x, int y, int z, javajs.util.P3i offset, int vA, int vB, float valueA, float valueB, javajs.util.T3 pointA, javajs.util.V3 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, int ptyz)
for readers onlyprotected java.lang.Object
getValues(Mesh mesh)
protected java.lang.Object
getVertices(Mesh mesh)
private void
hoverKey(int x, int y)
private void
initializeIsosurface()
void
initShape()
private void
initState()
void
invalidateTriangles()
private boolean
isPickable(IsosurfaceMesh m, javajs.util.BS bsVisible)
protected void
newSg()
boolean
notifySurfaceGenerationCompleted()
void
notifySurfaceMappingCompleted()
private void
setBsVdw()
private void
setColorPhase(IsosurfaceMesh m, short colix0, short colix1)
private void
setIsoMeshColor(IsosurfaceMesh m, java.lang.String color)
private void
setJvxlInfo()
private void
setMeshI()
void
setOutputChannel(javajs.api.GenericBinaryDocument binaryDoc, javajs.util.OC out)
void
setProperty(java.lang.String propertyName, java.lang.Object value, javajs.util.BS bs)
private void
setPropertySuper(java.lang.String propertyName, java.lang.Object value, javajs.util.BS bs)
protected void
setPropI(java.lang.String propertyName, java.lang.Object value, javajs.util.BS bs)
void
setRequiredFile(java.lang.String oldName, java.lang.String fileName)
protected void
setScriptInfo(java.lang.String strCommand)
protected void
slabPolygons(java.lang.Object[] slabInfo)
-
Methods inherited from class org.jmol.shape.MeshCollection
checkExplicit, clean, deleteMeshI, deleteMeshKey, getIndexFromName, getMesh, getMeshList, getPickedPoint, getPropDataMC, getPropMC, merge, resetObjects, setModelVisibilityFlags, setPropMC, setStatusPicked, setTokenProperty
-
Methods inherited from class org.jmol.shape.Shape
appendCmd, checkBoundsMinMax, checkObjectDragged, coordinateInRange, encodeColor, findNearestAtomIndex, getColix, getColixA, getColixB, getColixI, getColorCommand, getColorCommandUnk, getFontCommand, getPropShape, getSize, getSizeG, getTranslucentLabel, initializeShape, initModelSet, replaceGroup, setAtomClickability, setModelSet, setPropS, setShapeSizeRD, setSize, setSizeRD, wasClicked
-
-
-
-
Field Detail
-
isomeshes
protected IsosurfaceMesh[] isomeshes
-
thisMesh
protected IsosurfaceMesh thisMesh
-
actualID
private java.lang.String actualID
-
iHaveBitSets
protected boolean iHaveBitSets
-
explicitContours
private boolean explicitContours
-
atomIndex
private int atomIndex
-
moNumber
private int moNumber
-
moLinearCombination
private float[] moLinearCombination
-
colorType
private int colorType
-
defaultColix
private short defaultColix
-
meshColix
private short meshColix
-
center
private javajs.util.P3 center
-
scale3d
private float scale3d
-
isPhaseColored
private boolean isPhaseColored
-
isColorExplicit
private boolean isColorExplicit
-
scriptAppendix
private java.lang.String scriptAppendix
-
sg
protected SurfaceGenerator sg
-
withinDistance2
private float withinDistance2
-
isWithinNot
private boolean isWithinNot
-
withinPoints
private javajs.util.Lst<javajs.util.P3> withinPoints
-
cutoffRange
private float[] cutoffRange
-
allowMesh
boolean allowMesh
-
script
private java.lang.String script
-
iHaveModelIndex
private boolean iHaveModelIndex
-
nLCAO
private int nLCAO
-
lcaoDir
private javajs.util.P4 lcaoDir
-
associateNormals
private boolean associateNormals
-
oldFileName
private java.lang.String oldFileName
-
newFileName
private java.lang.String newFileName
-
MAX_OBJECT_CLICK_DISTANCE_SQUARED
private static final int MAX_OBJECT_CLICK_DISTANCE_SQUARED
- See Also:
- Constant Field Values
-
ptXY
private final javajs.util.P3i ptXY
-
keyXy
public int[] keyXy
-
-
Method Detail
-
allocMesh
public void allocMesh(java.lang.String thisID, Mesh m)
- Overrides:
allocMesh
in classMeshCollection
-
initShape
public void initShape()
- Overrides:
initShape
in classMeshCollection
-
newSg
protected void newSg()
-
clearSg
protected void clearSg()
-
setProperty
public void setProperty(java.lang.String propertyName, java.lang.Object value, javajs.util.BS bs)
- Specified by:
setProperty
in classShape
-
setPropI
protected void setPropI(java.lang.String propertyName, java.lang.Object value, javajs.util.BS bs)
-
getFileReader
private java.lang.Object getFileReader(java.lang.String fileName)
-
setIsoMeshColor
private void setIsoMeshColor(IsosurfaceMesh m, java.lang.String color)
-
setColorPhase
private void setColorPhase(IsosurfaceMesh m, short colix0, short colix1)
-
ensureMeshSource
private void ensureMeshSource()
-
slabPolygons
protected void slabPolygons(java.lang.Object[] slabInfo)
-
setPropertySuper
private void setPropertySuper(java.lang.String propertyName, java.lang.Object value, javajs.util.BS bs)
-
getPropertyData
public boolean getPropertyData(java.lang.String property, java.lang.Object[] data)
- Overrides:
getPropertyData
in classShape
- Returns:
- true if serviced
-
getProperty
public java.lang.Object getProperty(java.lang.String property, int index)
- Overrides:
getProperty
in classShape
- Returns:
- true if serviced
-
getPropI
protected java.lang.Object getPropI(java.lang.String property, int index)
-
getDataRange
private float[] getDataRange(IsosurfaceMesh mesh)
-
calculateVolumeOrArea
private java.lang.Object calculateVolumeOrArea(IsosurfaceMesh mesh, boolean isArea)
-
getPolygonColorData
public static java.lang.String getPolygonColorData(int ccount, short[] colixes, int[][] polygons, javajs.util.BS bsSlabDisplay)
-
getShapeState
public java.lang.String getShapeState()
- Specified by:
getShapeState
in classShape
-
getMeshCommand
private void getMeshCommand(javajs.util.SB sb, int i)
-
getScriptBitSets
private boolean getScriptBitSets(java.lang.String script, javajs.util.BS[] bsCmd)
-
getCapSlabInfo
protected void getCapSlabInfo(java.lang.String script)
-
getCapSlabObject
private java.lang.Object[] getCapSlabObject(java.lang.String s, boolean isCap)
legacy -- for some scripts with early isosurface slabbing- Parameters:
s
-isCap
-- Returns:
- slabInfo object
-
initializeIsosurface
private void initializeIsosurface()
-
initState
private void initState()
-
setMeshI
private void setMeshI()
-
discardTempData
protected void discardTempData(boolean discardAll)
-
getDefaultColix
private short getDefaultColix()
-
drawLcaoCartoon
private void drawLcaoCartoon(javajs.util.V3 z, javajs.util.V3 x, javajs.util.V3 rotAxis, int nElectrons)
-
createLcaoLobe
private void createLcaoLobe(javajs.util.V3 lobeAxis, float factor, int nElectrons)
-
invalidateTriangles
public void invalidateTriangles()
- Specified by:
invalidateTriangles
in interfaceMeshDataServer
-
setOutputChannel
public void setOutputChannel(javajs.api.GenericBinaryDocument binaryDoc, javajs.util.OC out)
- Specified by:
setOutputChannel
in interfaceMeshDataServer
-
fillMeshData
public void fillMeshData(MeshData meshData, int mode, IsosurfaceMesh mesh)
- Specified by:
fillMeshData
in interfaceMeshDataServer
-
notifySurfaceGenerationCompleted
public boolean notifySurfaceGenerationCompleted()
- Specified by:
notifySurfaceGenerationCompleted
in interfaceMeshDataServer
-
notifySurfaceMappingCompleted
public void notifySurfaceMappingCompleted()
- Specified by:
notifySurfaceMappingCompleted
in interfaceMeshDataServer
-
setBsVdw
private void setBsVdw()
-
calculateGeodesicSurface
public javajs.util.P3[] calculateGeodesicSurface(javajs.util.BS bsSelected, float envelopeRadius)
- Specified by:
calculateGeodesicSurface
in interfaceMeshDataServer
-
getSurfacePointIndexAndFraction
public int getSurfacePointIndexAndFraction(float cutoff, boolean isCutoffAbsolute, int x, int y, int z, javajs.util.P3i offset, int vA, int vB, float valueA, float valueB, javajs.util.T3 pointA, javajs.util.V3 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 interfaceVertexDataServer
vA
- [0:7]vB
- [0:7]edgeVector
- vector from A to B- Returns:
- new vertex index or Integer.MAX_VALUE
-
addVertexCopy
public int addVertexCopy(javajs.util.T3 vertexXYZ, float value, int assocVertex, boolean asCopy)
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 interfaceVertexDataServer
assocVertex
- unique association vertex or -1- Returns:
- new vertex index
-
addTriangleCheck
public int addTriangleCheck(int iA, int iB, int iC, int check, int iContour, 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 interfaceVertexDataServer
iContour
- TODO- Returns:
- polygon index or -1
-
setScriptInfo
protected void setScriptInfo(java.lang.String strCommand)
-
addRequiredFile
public void addRequiredFile(java.lang.String fileName)
- Specified by:
addRequiredFile
in interfaceMeshDataServer
-
setRequiredFile
public void setRequiredFile(java.lang.String oldName, java.lang.String fileName)
- Specified by:
setRequiredFile
in interfaceMeshDataServer
-
setJvxlInfo
private void setJvxlInfo()
-
getShapeDetail
public java.lang.Object getShapeDetail()
- Overrides:
getShapeDetail
in classShape
-
addMeshInfo
protected void addMeshInfo(IsosurfaceMesh mesh, java.util.Map<java.lang.String,java.lang.Object> info)
-
getPlane
public float[] getPlane(int x)
- Specified by:
getPlane
in interfaceVertexDataServer
-
getValue
public float getValue(int x, int y, int z, int ptyz)
Description copied from interface:VertexDataServer
for readers only- Specified by:
getValue
in interfaceVertexDataServer
- Returns:
- value[x][y][z]
-
checkObjectHovered
public boolean checkObjectHovered(int x, int y, javajs.util.BS bsVisible)
- Overrides:
checkObjectHovered
in classShape
- Returns:
- T/F
-
hoverKey
private void hoverKey(int x, int y)
-
checkObjectClicked
public java.util.Map<java.lang.String,java.lang.Object> checkObjectClicked(int x, int y, int action, javajs.util.BS bsVisible, boolean drawPicking)
- Overrides:
checkObjectClicked
in classShape
drawPicking
- TODO- Returns:
- Hashtable containing information about pt clicked
-
isPickable
private boolean isPickable(IsosurfaceMesh m, javajs.util.BS bsVisible)
-
findValue
private java.lang.String findValue(int x, int y, boolean isPicking, javajs.util.BS bsVisible)
- Parameters:
x
-y
-isPicking
- IGNOREDbsVisible
-- Returns:
- value found
-
getCmd
public java.lang.String getCmd(int index)
-
getValues
protected java.lang.Object getValues(Mesh mesh)
- Overrides:
getValues
in classMeshCollection
-
getVertices
protected java.lang.Object getVertices(Mesh mesh)
- Overrides:
getVertices
in classMeshCollection
-
-