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.StringactualID(package private) booleanallowMeshprivate booleanassociateNormalsprivate intatomIndexprivate javajs.util.P3centerprivate intcolorTypeprivate float[]cutoffRangeprivate shortdefaultColixprivate booleanexplicitContoursprotected booleaniHaveBitSetsprivate booleaniHaveModelIndexprivate booleanisColorExplicitprivate IsosurfaceMesh[]isomeshesprivate booleanisPhaseColoredprivate booleanisWithinNotprotected JvxlDatajvxlDataint[]keyXyprivate javajs.util.P4lcaoDirprivate static intMAX_OBJECT_CLICK_DISTANCE_SQUAREDprivate shortmeshColixprivate float[]moLinearCombinationprivate intmoNumberprivate intnLCAOprivate javajs.util.P3iptXYprivate floatscale3dprivate java.lang.Stringscriptprivate java.lang.StringscriptAppendixprotected SurfaceGeneratorsgprotected IsosurfaceMeshthisMeshprivate floatwithinDistance2private 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, 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 voidaddMeshInfo(IsosurfaceMesh mesh, java.util.Map<java.lang.String,java.lang.Object> info)voidaddRequiredFile(java.lang.String fileName)intaddTriangleCheck(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)intaddVertexCopy(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.voidallocMesh(java.lang.String thisID, Mesh m)javajs.util.P3[]calculateGeodesicSurface(BS bsSelected, float envelopeRadius)private java.lang.ObjectcalculateVolumeOrArea(IsosurfaceMesh mesh, boolean isArea)java.util.Map<java.lang.String,java.lang.Object>checkObjectClicked(int x, int y, int action, BS bsVisible, boolean drawPicking)booleancheckObjectHovered(int x, int y, BS bsVisible)protected voidclearSg()private voidcreateLcaoLobe(javajs.util.V3 lobeAxis, float factor, int nElectrons)protected voiddiscardTempData(boolean discardAll)private voiddrawLcaoCartoon(javajs.util.V3 z, javajs.util.V3 x, javajs.util.V3 rotAxis, int nElectrons)private voidensureMeshSource()voidfillMeshData(MeshData meshData, int mode, IsosurfaceMesh mesh)private java.lang.StringfindValue(int x, int y, boolean isPicking, BS bsVisible)protected voidgetCapSlabInfo(java.lang.String script)private java.lang.Object[]getCapSlabObject(java.lang.String s, boolean isCap)legacy -- for some scripts with early isosurface slabbingjava.lang.StringgetCmd(int index)private float[]getDataRange(IsosurfaceMesh mesh)private shortgetDefaultColix()private voidgetMeshCommand(javajs.util.SB sb, int i)float[]getPlane(int x)static java.lang.StringgetPolygonColorData(int ccount, short[] colixes, int[][] polygons, BS bsSlabDisplay)java.lang.ObjectgetProperty(java.lang.String property, int index)booleangetPropertyData(java.lang.String property, java.lang.Object[] data)protected java.lang.ObjectgetPropI(java.lang.String property, int index)private booleangetScriptBitSets(java.lang.String script, BS[] bsCmd)java.lang.ObjectgetShapeDetail()java.lang.StringgetShapeState()intgetSurfacePointIndexAndFraction(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.floatgetValue(int x, int y, int z, int ptyz)for readers onlyprivate voidhoverKey(int x, int y)private voidinitializeIsosurface()voidinitShape()private voidinitState()voidinvalidateTriangles()private booleanisPickable(IsosurfaceMesh m, BS bsVisible)protected voidnewSg()booleannotifySurfaceGenerationCompleted()voidnotifySurfaceMappingCompleted()private voidsetBsVdw()private voidsetColorPhase(IsosurfaceMesh m, short colix0, short colix1)private voidsetIsoMeshColor(IsosurfaceMesh m, java.lang.String color)private voidsetJvxlInfo()private voidsetMeshI()voidsetOutputChannel(javajs.api.GenericBinaryDocument binaryDoc, javajs.util.OC out)voidsetProperty(java.lang.String propertyName, java.lang.Object value, BS bs)private voidsetPropertySuper(java.lang.String propertyName, java.lang.Object value, BS bs)protected voidsetPropI(java.lang.String propertyName, java.lang.Object value, BS bs)protected voidsetScriptInfo(java.lang.String strCommand)protected voidslabPolygons(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
private 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
-
jvxlData
protected JvxlData jvxlData
-
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
-
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:
allocMeshin classMeshCollection
-
initShape
public void initShape()
- Overrides:
initShapein classMeshCollection
-
newSg
protected void newSg()
-
clearSg
protected void clearSg()
-
setProperty
public void setProperty(java.lang.String propertyName, java.lang.Object value, BS bs)- Specified by:
setPropertyin classShape
-
setPropI
protected void setPropI(java.lang.String propertyName, java.lang.Object value, BS bs)
-
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, BS bs)
-
getPropertyData
public boolean getPropertyData(java.lang.String property, java.lang.Object[] data)- Overrides:
getPropertyDatain classShape- Returns:
- true if serviced
-
getProperty
public java.lang.Object getProperty(java.lang.String property, int index)- Overrides:
getPropertyin 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, BS bsSlabDisplay)
-
getShapeState
public java.lang.String getShapeState()
- Specified by:
getShapeStatein classShape
-
getMeshCommand
private void getMeshCommand(javajs.util.SB sb, int i)
-
getScriptBitSets
private boolean getScriptBitSets(java.lang.String script, 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:
invalidateTrianglesin interfaceMeshDataServer
-
setOutputChannel
public void setOutputChannel(javajs.api.GenericBinaryDocument binaryDoc, javajs.util.OC out)- Specified by:
setOutputChannelin interfaceMeshDataServer
-
fillMeshData
public void fillMeshData(MeshData meshData, int mode, IsosurfaceMesh mesh)
- Specified by:
fillMeshDatain interfaceMeshDataServer
-
notifySurfaceGenerationCompleted
public boolean notifySurfaceGenerationCompleted()
- Specified by:
notifySurfaceGenerationCompletedin interfaceMeshDataServer
-
notifySurfaceMappingCompleted
public void notifySurfaceMappingCompleted()
- Specified by:
notifySurfaceMappingCompletedin interfaceMeshDataServer
-
setBsVdw
private void setBsVdw()
-
calculateGeodesicSurface
public javajs.util.P3[] calculateGeodesicSurface(BS bsSelected, float envelopeRadius)
- Specified by:
calculateGeodesicSurfacein 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:VertexDataServergetSurfacePointIndex 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:
getSurfacePointIndexAndFractionin interfaceVertexDataServervA- [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:VertexDataServeraddVertexCopy 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:
addVertexCopyin interfaceVertexDataServerassocVertex- 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:VertexDataServeraddTriangleCheck 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:
addTriangleCheckin interfaceVertexDataServeriContour- TODO- Returns:
- polygon index or -1
-
setScriptInfo
protected void setScriptInfo(java.lang.String strCommand)
-
addRequiredFile
public void addRequiredFile(java.lang.String fileName)
- Specified by:
addRequiredFilein interfaceMeshDataServer
-
setJvxlInfo
private void setJvxlInfo()
-
getShapeDetail
public java.lang.Object getShapeDetail()
- Overrides:
getShapeDetailin 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:
getPlanein interfaceVertexDataServer
-
getValue
public float getValue(int x, int y, int z, int ptyz)Description copied from interface:VertexDataServerfor readers only- Specified by:
getValuein interfaceVertexDataServer- Returns:
- value[x][y][z]
-
checkObjectHovered
public boolean checkObjectHovered(int x, int y, BS bsVisible)- Overrides:
checkObjectHoveredin 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, BS bsVisible, boolean drawPicking)- Overrides:
checkObjectClickedin classShapedrawPicking- TODO- Returns:
- Hashtable containing information about pt clicked
-
isPickable
private boolean isPickable(IsosurfaceMesh m, BS bsVisible)
-
findValue
private java.lang.String findValue(int x, int y, boolean isPicking, BS bsVisible)- Parameters:
x-y-isPicking- IGNOREDbsVisible-- Returns:
- value found
-
getCmd
public java.lang.String getCmd(int index)
-
-