public class Polyhedra extends AtomShape implements java.util.Comparator<java.lang.Object[]>
Modifier and Type | Field and Description |
---|---|
private boolean |
bondedOnly |
private javajs.util.BS |
bsPolys |
private javajs.util.BS |
bsVertexCount |
private javajs.util.BS |
bsVertices |
private javajs.util.P3 |
center |
private javajs.util.BS |
centers |
private static float |
CONVEX_HULL_MAX |
private static float |
DEFAULT_FACECENTEROFFSET |
private static float |
DEFAULT_PLANAR_PARAM
a dot product comparison term
|
private float |
distanceRef |
int |
drawEdges |
static int |
EDGES_ALL |
static int |
EDGES_FRONT |
private static int |
EDGES_NONE |
static int |
EDGES_ONLY |
private int[][] |
explicitFaces |
private static int |
FACE_COUNT_MAX |
(package private) float |
faceCenterOffset |
private boolean |
haveBitSetVertices |
private boolean |
iHaveCenterBitSet |
private java.util.Map<java.lang.String,java.lang.Object> |
info |
private boolean |
isAuto |
(package private) boolean |
isCollapsed |
(package private) boolean |
isFull |
private static float |
MAX_DISTANCE_TO_PLANE |
private static int |
MAX_OTHER |
private static int |
MAX_VERTICES |
private static int |
MODE_BITSET |
private static int |
MODE_BONDING |
private static int |
MODE_INFO |
private static int |
MODE_POINTS |
private static int |
MODE_RADIUS |
private static int |
MODE_UNITCELL |
private int |
modelIndex |
private javajs.util.V3[] |
normalsT |
private int |
nPoints |
private int |
nVertices |
private javajs.util.P3[] |
otherAtoms |
private float |
planarParam |
private int[][] |
planesT |
private float |
pointScale |
int |
polyhedronCount |
Polyhedron[] |
polyhedrons |
private float |
radius |
private float |
radiusMin |
private static javajs.util.P3 |
randomPoint |
private java.lang.String |
thisID |
private boolean |
useUnitCell |
private javajs.util.V3 |
vAB |
private javajs.util.V3 |
vAC |
private javajs.util.V3 |
vBC |
ac, atoms, bsSizeDefault, colixes, isActive, mad, mads, monomerCount, paletteIDs
bsColixSet, bsSizeSet, isBioShape, ms, myType, RADIUS_MAX, shapeID, translucentAllowed, translucentLevel, vf, vwr
Constructor and Description |
---|
Polyhedra() |
Modifier and Type | Method and Description |
---|---|
private java.lang.Object |
addEdge(javajs.util.Lst<int[]> faceEdgeList,
java.util.Map<java.lang.String,java.lang.Object> htEdgeMap,
java.lang.Integer normix,
int[] p1,
int i,
javajs.util.P3[] points)
Check each edge to see that
(a) it has not been used before
(b) it does not have vertex points on both sides of it
(c) if it runs opposite another edge, then both edge masks are set properly
|
private void |
addFacet(int i,
int j,
int k,
javajs.util.P3 ptRef,
javajs.util.P3[] points,
javajs.util.V3[] normals,
int[][] faces,
int planeCount,
int nRef,
boolean isWindingOK,
javajs.util.V3 vTemp)
Add one of the three "facets" that compose the planes of a "collapsed" polyhedron.
|
private void |
addPolyhedron(Polyhedron p) |
private javajs.util.BS |
andBitSet(javajs.util.BS bs) |
private void |
buildPolyhedra() |
private float |
checkFacet(javajs.util.P3[] points,
int nPoints,
int[] t,
int index,
javajs.util.V3 norm,
javajs.util.P4 pTemp,
javajs.util.V3 vNorm,
javajs.util.V3 vAC,
java.util.Map<java.lang.Integer,java.lang.Object[]> htNormMap,
java.util.Map<java.lang.String,java.lang.Object> htEdgeMap,
float planarParam,
javajs.util.BS bsTemp,
java.lang.Object[] edgeTest)
Clean out overlapping triangles based on normals and cross products.
|
private boolean |
checkID(java.lang.String thisID) |
int |
compare(java.lang.Object[] a,
java.lang.Object[] b) |
private Polyhedron |
constructBitSetPolyhedron(Atom atom) |
private Polyhedron |
constructBondsPolyhedron(Atom atom,
int otherAtomCount) |
private Polyhedron |
constructRadiusPolyhedron(Atom atom,
AtomIndexIterator iter) |
private Polyhedron |
constructUnitCellPolygon(Atom atom,
boolean useBondAlgorithm) |
private void |
deletePolyhedra() |
private Polyhedron |
findPoly(java.lang.String id,
int iatom,
boolean allowCollapsed) |
private javajs.util.BS |
findPolyBS(javajs.util.BS bsCenters) |
private int[] |
fixExplicitFaceWinding(int[] face,
int ipt,
javajs.util.P3[] points,
javajs.util.V3[] normals)
Check to see that the winding of the explicit face is correct.
|
private javajs.util.BS |
getAtomsWithin(Polyhedron p,
float offset) |
private int[][] |
getFaces(int[][] triangles,
int triangleCount,
java.util.Map<java.lang.Integer,java.lang.Object[]> htNormMap)
Face: a CCW loop of edges all (within tolerance) in the same plane.
|
private int[][] |
getFaceTriangles(int n,
java.util.Map<java.lang.Integer,java.lang.Object[]> htNormMap,
int triangleCount) |
int |
getIndexFromName(java.lang.String id) |
java.lang.Object |
getProperty(java.lang.String property,
int i) |
boolean |
getPropertyData(java.lang.String property,
java.lang.Object[] data) |
java.lang.Object |
getShapeDetail() |
java.lang.String |
getShapeState() |
private boolean |
isMatch(java.lang.String id) |
private boolean |
isPlanar(javajs.util.P3 pt1,
javajs.util.P3 pt2,
javajs.util.P3 pt3,
javajs.util.P3 ptX) |
private void |
offsetPolyhedra(javajs.util.P3 value) |
private void |
pointsPolyhedra(javajs.util.BS bs,
float pointScale) |
private void |
scalePolyhedra(float scale) |
private void |
setDefinedFaces(javajs.util.P3[] points,
int[][] faces) |
private int |
setGap(javajs.util.P3 atom,
int otherAtomCount) |
void |
setModelVisibilityFlags(javajs.util.BS bsModels) |
private void |
setPointsFromBitset() |
void |
setProperty(java.lang.String propertyName,
java.lang.Object value,
javajs.util.BS bs) |
private void |
setVisible(boolean visible) |
private boolean |
testDiff(javajs.util.P3 a1,
javajs.util.P3 b1,
javajs.util.P3 a2,
javajs.util.P3 b2) |
private Polyhedron |
validatePolyhedron(javajs.util.P3 atomOrPt,
int vertexCount) |
checkColixLength, getInfoAsString, getSize, initModelSet, initShape, setAtomClickability, setColixAndPalette, setPropAS, setSize, setSize2, setSizeRD, setSizeRD2
appendCmd, checkBoundsMinMax, checkObjectClicked, checkObjectDragged, checkObjectHovered, coordinateInRange, encodeColor, findNearestAtomIndex, getColix, getColixA, getColixB, getColixI, getColorCommand, getColorCommandUnk, getFontCommand, getPropShape, getSizeG, getTranslucentLabel, initializeShape, replaceGroup, setModelSet, setPropS, setShapeSizeRD, wasClicked
private static final float DEFAULT_FACECENTEROFFSET
private static final int EDGES_NONE
public static final int EDGES_ALL
public static final int EDGES_FRONT
public static final int EDGES_ONLY
private static final int MAX_VERTICES
private static final int FACE_COUNT_MAX
private static final int MAX_OTHER
private javajs.util.P3[] otherAtoms
private javajs.util.V3[] normalsT
private int[][] planesT
private static final javajs.util.P3 randomPoint
private static final int MODE_BONDING
private static final int MODE_POINTS
private static final int MODE_RADIUS
private static final int MODE_BITSET
private static final int MODE_UNITCELL
private static final int MODE_INFO
private static final float DEFAULT_PLANAR_PARAM
private static final float CONVEX_HULL_MAX
public int polyhedronCount
public Polyhedron[] polyhedrons
public int drawEdges
private float radius
private float radiusMin
private float pointScale
private int nVertices
float faceCenterOffset
boolean isCollapsed
boolean isFull
private boolean iHaveCenterBitSet
private boolean bondedOnly
private boolean haveBitSetVertices
private javajs.util.BS centers
private java.lang.String thisID
private javajs.util.P3 center
private javajs.util.BS bsVertices
private javajs.util.BS bsVertexCount
private boolean useUnitCell
private int nPoints
private float planarParam
private java.util.Map<java.lang.String,java.lang.Object> info
private float distanceRef
private int modelIndex
private boolean isAuto
private int[][] explicitFaces
private javajs.util.BS bsPolys
private final javajs.util.V3 vAB
private final javajs.util.V3 vAC
private final javajs.util.V3 vBC
private static float MAX_DISTANCE_TO_PLANE
public int compare(java.lang.Object[] a, java.lang.Object[] b)
compare
in interface java.util.Comparator<java.lang.Object[]>
public void setProperty(java.lang.String propertyName, java.lang.Object value, javajs.util.BS bs)
setProperty
in class Shape
private void setDefinedFaces(javajs.util.P3[] points, int[][] faces)
private void pointsPolyhedra(javajs.util.BS bs, float pointScale)
private void scalePolyhedra(float scale)
private void offsetPolyhedra(javajs.util.P3 value)
public int getIndexFromName(java.lang.String id)
getIndexFromName
in class Shape
public java.lang.Object getProperty(java.lang.String property, int i)
getProperty
in class Shape
public boolean getPropertyData(java.lang.String property, java.lang.Object[] data)
getPropertyData
in class Shape
private javajs.util.BS getAtomsWithin(Polyhedron p, float offset)
private boolean checkID(java.lang.String thisID)
private Polyhedron findPoly(java.lang.String id, int iatom, boolean allowCollapsed)
id
- may be nulliatom
- may be < 0 to (along with id==null) to get matching polyhedronallowCollapsed
- private javajs.util.BS findPolyBS(javajs.util.BS bsCenters)
private boolean isMatch(java.lang.String id)
public java.lang.Object getShapeDetail()
getShapeDetail
in class Shape
private javajs.util.BS andBitSet(javajs.util.BS bs)
private void deletePolyhedra()
private void setVisible(boolean visible)
private void buildPolyhedra()
private void setPointsFromBitset()
private void addPolyhedron(Polyhedron p)
private Polyhedron constructBondsPolyhedron(Atom atom, int otherAtomCount)
private Polyhedron constructUnitCellPolygon(Atom atom, boolean useBondAlgorithm)
private Polyhedron constructBitSetPolyhedron(Atom atom)
private Polyhedron constructRadiusPolyhedron(Atom atom, AtomIndexIterator iter)
private int setGap(javajs.util.P3 atom, int otherAtomCount)
private Polyhedron validatePolyhedron(javajs.util.P3 atomOrPt, int vertexCount)
private int[] fixExplicitFaceWinding(int[] face, int ipt, javajs.util.P3[] points, javajs.util.V3[] normals)
face
- ipt
- points
- normals
- private int[][] getFaceTriangles(int n, java.util.Map<java.lang.Integer,java.lang.Object[]> htNormMap, int triangleCount)
private void addFacet(int i, int j, int k, javajs.util.P3 ptRef, javajs.util.P3[] points, javajs.util.V3[] normals, int[][] faces, int planeCount, int nRef, boolean isWindingOK, javajs.util.V3 vTemp)
i
- j
- k
- ptRef
- slightly out from the center; based on centerOffset parameterpoints
- normals
- faces
- planeCount
- nRef
- isWindingOK
- vTemp
- private float checkFacet(javajs.util.P3[] points, int nPoints, int[] t, int index, javajs.util.V3 norm, javajs.util.P4 pTemp, javajs.util.V3 vNorm, javajs.util.V3 vAC, java.util.Map<java.lang.Integer,java.lang.Object[]> htNormMap, java.util.Map<java.lang.String,java.lang.Object> htEdgeMap, float planarParam, javajs.util.BS bsTemp, java.lang.Object[] edgeTest)
points
- nPoints
- t
- index
- norm
- pTemp
- vNorm
- vAC
- htNormMap
- htEdgeMap
- planarParam
- bsTemp
- edgeTest
- private java.lang.Object addEdge(javajs.util.Lst<int[]> faceEdgeList, java.util.Map<java.lang.String,java.lang.Object> htEdgeMap, java.lang.Integer normix, int[] p1, int i, javajs.util.P3[] points)
faceEdgeList
- htEdgeMap
- normix
- p1
- i
- points
- private boolean testDiff(javajs.util.P3 a1, javajs.util.P3 b1, javajs.util.P3 a2, javajs.util.P3 b2)
private boolean isPlanar(javajs.util.P3 pt1, javajs.util.P3 pt2, javajs.util.P3 pt3, javajs.util.P3 ptX)
private int[][] getFaces(int[][] triangles, int triangleCount, java.util.Map<java.lang.Integer,java.lang.Object[]> htNormMap)
triangles
- triangleCount
- htNormMap
- public void setModelVisibilityFlags(javajs.util.BS bsModels)
setModelVisibilityFlags
in class Shape
public java.lang.String getShapeState()
getShapeState
in class AtomShape