| Clazz.declarePackage ("JV"); | |
| Clazz.load (null, "JV.ShapeManager", ["java.lang.Boolean", "JU.BS", "$.P3", "J.api.Interface", "J.c.PAL", "$.VDW", "JM.Atom", "JU.BSUtil", "JV.JC"], function () { | |
| c$ = Clazz.decorateAsClass (function () { | |
| this.ms = null; | |
| this.shapes = null; | |
| this.vwr = null; | |
| this.bsRenderableAtoms = null; | |
| this.bsSlabbedInternal = null; | |
| this.navMinMax = null; | |
| Clazz.instantialize (this, arguments); | |
| }, JV, "ShapeManager"); | |
| Clazz.prepareFields (c$, function () { | |
| this.navMinMax = Clazz.newIntArray (4, 0); | |
| }); | |
| Clazz.makeConstructor (c$, | |
| function (vwr) { | |
| this.vwr = vwr; | |
| this.bsRenderableAtoms = new JU.BS (); | |
| this.bsSlabbedInternal = new JU.BS (); | |
| }, "JV.Viewer"); | |
| Clazz.defineMethod (c$, "findNearestShapeAtomIndex", | |
| function (x, y, closest, bsNot) { | |
| if (this.shapes != null) for (var i = 0; i < this.shapes.length && closest[0] == null; ++i) if (this.shapes[i] != null) this.shapes[i].findNearestAtomIndex (x, y, closest, bsNot); | |
| }, "~N,~N,~A,JU.BS"); | |
| Clazz.defineMethod (c$, "getShapePropertyIndex", | |
| function (shapeID, propertyName, index) { | |
| if (this.shapes == null || this.shapes[shapeID] == null) return null; | |
| this.vwr.setShapeErrorState (shapeID, "get " + propertyName); | |
| var result = this.shapes[shapeID].getProperty (propertyName, index); | |
| this.vwr.setShapeErrorState (-1, null); | |
| return result; | |
| }, "~N,~S,~N"); | |
| Clazz.defineMethod (c$, "getShapePropertyData", | |
| function (shapeID, propertyName, data) { | |
| if (this.shapes == null || this.shapes[shapeID] == null) return false; | |
| this.vwr.setShapeErrorState (shapeID, "get " + propertyName); | |
| var result = this.shapes[shapeID].getPropertyData (propertyName, data); | |
| this.vwr.setShapeErrorState (-1, null); | |
| return result; | |
| }, "~N,~S,~A"); | |
| Clazz.defineMethod (c$, "getShapeIdFromObjectName", | |
| function (objectName) { | |
| if (this.shapes != null) for (var i = 16; i < 30; ++i) if (this.shapes[i] != null && this.shapes[i].getIndexFromName (objectName) >= 0) return i; | |
| return -1; | |
| }, "~S"); | |
| Clazz.defineMethod (c$, "loadDefaultShapes", | |
| function (newModelSet) { | |
| this.ms = newModelSet; | |
| if (this.shapes != null) for (var i = 0; i < this.shapes.length; ++i) if (this.shapes[i] != null) this.shapes[i].setModelSet (newModelSet); | |
| this.loadShape (0); | |
| this.loadShape (1); | |
| }, "JM.ModelSet"); | |
| Clazz.defineMethod (c$, "loadShape", | |
| function (shapeID) { | |
| if (this.shapes == null) return null; | |
| if (this.shapes[shapeID] != null) return this.shapes[shapeID]; | |
| if (shapeID == 2 || shapeID == 3 || shapeID == 4) return null; | |
| var className = JV.JC.getShapeClassName (shapeID, false); | |
| var shape; | |
| if ((shape = J.api.Interface.getInterface (className, this.vwr, "shape")) == null) return null; | |
| this.vwr.setShapeErrorState (shapeID, "allocate"); | |
| shape.initializeShape (this.vwr, this.ms, shapeID); | |
| this.vwr.setShapeErrorState (-1, null); | |
| return this.shapes[shapeID] = shape; | |
| }, "~N"); | |
| Clazz.defineMethod (c$, "notifyAtomPositionsChanged", | |
| function (baseModel, bs, mat) { | |
| var Imodel = Integer.$valueOf (baseModel); | |
| var bsModelAtoms = this.vwr.getModelUndeletedAtomsBitSet (baseModel); | |
| for (var i = 0; i < 37; i++) if (this.shapes[i] != null) this.setShapePropertyBs (i, "refreshTrajectories", Clazz.newArray (-1, [Imodel, bs, mat]), bsModelAtoms); | |
| }, "~N,JU.BS,JU.M4"); | |
| Clazz.defineMethod (c$, "releaseShape", | |
| function (shapeID) { | |
| if (this.shapes != null) this.shapes[shapeID] = null; | |
| }, "~N"); | |
| Clazz.defineMethod (c$, "resetShapes", | |
| function () { | |
| this.shapes = new Array (37); | |
| }); | |
| Clazz.defineMethod (c$, "setShapeSizeBs", | |
| function (shapeID, size, rd, bsSelected) { | |
| if (this.shapes == null) return; | |
| if (bsSelected == null && (shapeID != 1 || size != 2147483647)) bsSelected = this.vwr.bsA (); | |
| if (rd != null && rd.value != 0 && rd.vdwType === J.c.VDW.TEMP) this.ms.getBfactor100Lo (); | |
| this.vwr.setShapeErrorState (shapeID, "set size"); | |
| if (rd == null ? size != 0 : rd.value != 0) this.loadShape (shapeID); | |
| if (this.shapes[shapeID] != null) { | |
| this.shapes[shapeID].setShapeSizeRD (size, rd, bsSelected); | |
| }this.vwr.setShapeErrorState (-1, null); | |
| }, "~N,~N,J.atomdata.RadiusData,JU.BS"); | |
| Clazz.defineMethod (c$, "setLabel", | |
| function (strLabel, bsSelection) { | |
| if (strLabel == null) { | |
| if (this.shapes[5] == null) return; | |
| } else { | |
| this.loadShape (5); | |
| this.setShapeSizeBs (5, 0, null, bsSelection); | |
| }this.setShapePropertyBs (5, "label", strLabel, bsSelection); | |
| }, "~O,JU.BS"); | |
| Clazz.defineMethod (c$, "setShapePropertyBs", | |
| function (shapeID, propertyName, value, bsSelected) { | |
| if (this.shapes == null || this.shapes[shapeID] == null) return; | |
| if (bsSelected == null) bsSelected = this.vwr.bsA (); | |
| this.vwr.setShapeErrorState (shapeID, "set " + propertyName); | |
| this.shapes[shapeID].setProperty (propertyName.intern (), value, bsSelected); | |
| this.vwr.setShapeErrorState (-1, null); | |
| }, "~N,~S,~O,JU.BS"); | |
| Clazz.defineMethod (c$, "checkFrankclicked", | |
| function (x, y) { | |
| var frankShape = this.shapes[36]; | |
| return (frankShape != null && frankShape.wasClicked (x, y)); | |
| }, "~N,~N"); | |
| Clazz.defineMethod (c$, "checkObjectClicked", | |
| function (x, y, modifiers, bsVisible, drawPicking) { | |
| var shape; | |
| var map = null; | |
| if (this.vwr.getPickingMode () == 2) { | |
| return this.shapes[5].checkObjectClicked (x, y, modifiers, bsVisible, false); | |
| }if (modifiers != 0 && this.vwr.getBondPicking () && (map = this.shapes[1].checkObjectClicked (x, y, modifiers, bsVisible, false)) != null) return map; | |
| for (var i = 0; i < JV.ShapeManager.clickableMax; i++) if ((shape = this.shapes[JV.ShapeManager.hoverable[i]]) != null && (map = shape.checkObjectClicked (x, y, modifiers, bsVisible, drawPicking)) != null) return map; | |
| return null; | |
| }, "~N,~N,~N,JU.BS,~B"); | |
| Clazz.defineMethod (c$, "checkObjectDragged", | |
| function (prevX, prevY, x, y, modifiers, bsVisible, iShape) { | |
| var found = false; | |
| var n = (iShape > 0 ? iShape + 1 : 37); | |
| for (var i = iShape; !found && i < n; ++i) if (this.shapes[i] != null) found = this.shapes[i].checkObjectDragged (prevX, prevY, x, y, modifiers, bsVisible); | |
| return found; | |
| }, "~N,~N,~N,~N,~N,JU.BS,~N"); | |
| Clazz.defineMethod (c$, "checkObjectHovered", | |
| function (x, y, bsVisible, checkBonds) { | |
| var shape = this.shapes[1]; | |
| if (checkBonds && shape != null && shape.checkObjectHovered (x, y, bsVisible)) return true; | |
| for (var i = 0; i < JV.ShapeManager.hoverable.length; i++) { | |
| shape = this.shapes[JV.ShapeManager.hoverable[i]]; | |
| if (shape != null && shape.checkObjectHovered (x, y, bsVisible)) return true; | |
| } | |
| return false; | |
| }, "~N,~N,JU.BS,~B"); | |
| Clazz.defineMethod (c$, "deleteShapeAtoms", | |
| function (value, bs) { | |
| if (this.shapes != null) for (var j = 0; j < 37; j++) if (this.shapes[j] != null) this.setShapePropertyBs (j, "deleteModelAtoms", value, bs); | |
| }, "~A,JU.BS"); | |
| Clazz.defineMethod (c$, "deleteVdwDependentShapes", | |
| function (bs) { | |
| if (bs == null) bs = this.vwr.bsA (); | |
| if (this.shapes[24] != null) this.shapes[24].setProperty ("deleteVdw", null, bs); | |
| if (this.shapes[25] != null) this.shapes[25].setProperty ("deleteVdw", null, bs); | |
| }, "JU.BS"); | |
| Clazz.defineMethod (c$, "getAtomShapeValue", | |
| function (tok, group, atomIndex) { | |
| var iShape = JV.JC.shapeTokenIndex (tok); | |
| if (iShape < 0 || this.shapes[iShape] == null) return 0; | |
| var mad = this.shapes[iShape].getSize (atomIndex); | |
| if (mad == 0) { | |
| if ((group.shapeVisibilityFlags & this.shapes[iShape].vf) == 0) return 0; | |
| mad = this.shapes[iShape].getSizeG (group); | |
| }return mad / 2000; | |
| }, "~N,JM.Group,~N"); | |
| Clazz.defineMethod (c$, "replaceGroup", | |
| function (g0, g1) { | |
| if (this.shapes == null) return; | |
| for (var i = 9; i < 16; i++) if (this.shapes[i] != null) this.shapes[i].replaceGroup (g0, g1); | |
| }, "JM.Group,JM.Group"); | |
| Clazz.defineMethod (c$, "getObjectMap", | |
| function (map, withDollar) { | |
| if (this.shapes == null) return; | |
| var bDollar = Boolean.$valueOf (withDollar); | |
| for (var i = 16; i < 30; ++i) this.getShapePropertyData (i, "getNames", Clazz.newArray (-1, [map, bDollar])); | |
| }, "java.util.Map,~B"); | |
| Clazz.defineMethod (c$, "getProperty", | |
| function (paramInfo) { | |
| if (paramInfo.equals ("getShapes")) return this.shapes; | |
| return null; | |
| }, "~O"); | |
| Clazz.defineMethod (c$, "getShape", | |
| function (i) { | |
| return (this.shapes == null ? null : this.shapes[i]); | |
| }, "~N"); | |
| Clazz.defineMethod (c$, "resetBioshapes", | |
| function (bsAllAtoms) { | |
| if (this.shapes == null) return; | |
| for (var i = 0; i < this.shapes.length; ++i) if (this.shapes[i] != null && this.shapes[i].isBioShape) { | |
| this.shapes[i].setModelSet (this.ms); | |
| this.shapes[i].setShapeSizeRD (0, null, bsAllAtoms); | |
| this.shapes[i].setProperty ("color", J.c.PAL.NONE, bsAllAtoms); | |
| } | |
| }, "JU.BS"); | |
| Clazz.defineMethod (c$, "setAtomLabel", | |
| function (strLabel, i) { | |
| if (this.shapes != null) this.shapes[5].setProperty ("label:" + strLabel, Integer.$valueOf (i), null); | |
| }, "~S,~N"); | |
| Clazz.defineMethod (c$, "setModelVisibility", | |
| function () { | |
| var shapes = this.shapes; | |
| if (shapes == null || shapes[0] == null) return; | |
| var bs = this.vwr.getVisibleFramesBitSet (); | |
| for (var i = 8; i < 33; i++) if (shapes[i] != null) shapes[i].setModelVisibilityFlags (bs); | |
| var showHydrogens = this.vwr.getBoolean (603979922); | |
| var bsDeleted = this.vwr.slm.bsDeleted; | |
| var atoms = this.ms.at; | |
| this.ms.clearVisibleSets (); | |
| if (atoms.length > 0) { | |
| for (var i = this.ms.ac; --i >= 0; ) { | |
| var atom = atoms[i]; | |
| atom.shapeVisibilityFlags &= -64; | |
| if (bsDeleted != null && bsDeleted.get (i)) continue; | |
| if (bs.get (atom.mi)) { | |
| var f = 1; | |
| if (!this.ms.isAtomHidden (i) && (showHydrogens || atom.getElementNumber () != 1)) { | |
| f |= 8; | |
| if (atom.madAtom != 0) f |= 16; | |
| atom.setShapeVisibility (f, true); | |
| }}} | |
| }this.setShapeVis (); | |
| }); | |
| Clazz.defineMethod (c$, "setShapeVis", | |
| function () { | |
| for (var i = 0; i < 37; ++i) { | |
| var shape = this.shapes[i]; | |
| if (shape != null) shape.setAtomClickability (); | |
| } | |
| }); | |
| Clazz.defineMethod (c$, "finalizeAtoms", | |
| function (bsTranslateSelected, finalizeParams) { | |
| var vwr = this.vwr; | |
| var tm = vwr.tm; | |
| if (finalizeParams) vwr.finalizeTransformParameters (); | |
| if (bsTranslateSelected != null) { | |
| var ptCenter = this.ms.getAtomSetCenter (bsTranslateSelected); | |
| var pt = new JU.P3 (); | |
| tm.transformPt3f (ptCenter, pt); | |
| pt.add (tm.ptOffset); | |
| tm.unTransformPoint (pt, pt); | |
| pt.sub (ptCenter); | |
| vwr.setAtomCoordsRelative (pt, bsTranslateSelected); | |
| tm.ptOffset.set (0, 0, 0); | |
| tm.bsSelectedAtoms = null; | |
| }var bsOK = this.bsRenderableAtoms; | |
| this.ms.getAtomsInFrame (bsOK); | |
| var vibrationVectors = this.ms.vibrations; | |
| var vibs = (vibrationVectors != null && tm.vibrationOn); | |
| var checkOccupancy = (this.ms.bsModulated != null && this.ms.occupancies != null); | |
| var atoms = this.ms.at; | |
| var occ; | |
| var haveMods = false; | |
| var bsSlabbed = this.bsSlabbedInternal; | |
| bsSlabbed.clearAll (); | |
| for (var i = bsOK.nextSetBit (0); i >= 0; i = bsOK.nextSetBit (i + 1)) { | |
| var atom = atoms[i]; | |
| var screen = (vibs && atom.hasVibration () ? tm.transformPtVib (atom, vibrationVectors[i]) : tm.transformPt (atom)); | |
| if (screen.z == 1 && tm.internalSlab && tm.xyzIsSlabbedInternal (atom)) { | |
| bsSlabbed.set (i); | |
| }atom.sX = screen.x; | |
| atom.sY = screen.y; | |
| atom.sZ = screen.z; | |
| var d = Math.abs (atom.madAtom); | |
| if (d == JM.Atom.MAD_GLOBAL) d = Clazz.floatToInt (vwr.getFloat (1140850689) * 2000); | |
| atom.sD = Clazz.floatToShort (vwr.tm.scaleToScreen (screen.z, d)); | |
| if (checkOccupancy && vibrationVectors[i] != null && (occ = vibrationVectors[i].getOccupancy100 (vibs)) != -2147483648) { | |
| haveMods = true; | |
| atom.setShapeVisibility (2, false); | |
| if (occ >= 0 && occ < 50) atom.setShapeVisibility (24, false); | |
| else atom.setShapeVisibility (8 | (atom.madAtom > 0 ? 16 : 0), true); | |
| this.ms.occupancies[atom.i] = Math.abs (occ); | |
| }} | |
| if (haveMods) this.setShapeVis (); | |
| var gdata = vwr.gdata; | |
| if (tm.slabEnabled) { | |
| var slabByMolecule = vwr.getBoolean (603979940); | |
| var slabByAtom = vwr.getBoolean (603979939); | |
| var minZ = gdata.slab; | |
| var maxZ = gdata.depth; | |
| if (slabByMolecule) { | |
| var molecules = this.ms.getMolecules (); | |
| var moleculeCount = this.ms.getMoleculeCountInModel (-1); | |
| for (var i = 0; i < moleculeCount; i++) { | |
| var m = molecules[i]; | |
| var j = 0; | |
| var pt = m.firstAtomIndex; | |
| if (!bsOK.get (pt)) continue; | |
| for (; j < m.ac; j++, pt++) if (gdata.isClippedZ (atoms[pt].sZ - (atoms[pt].sD >> 1))) break; | |
| if (j != m.ac) { | |
| pt = m.firstAtomIndex; | |
| for (var k = 0; k < m.ac; k++) { | |
| bsOK.clear (pt); | |
| atoms[pt++].sZ = 0; | |
| } | |
| }} | |
| }for (var i = bsOK.nextSetBit (0); i >= 0; i = bsOK.nextSetBit (i + 1)) { | |
| var atom = atoms[i]; | |
| if (gdata.isClippedZ (atom.sZ - (slabByAtom ? atoms[i].sD >> 1 : 0))) { | |
| atom.setClickable (0); | |
| var r = Clazz.doubleToInt ((slabByAtom ? -1 : 1) * atom.sD / 2); | |
| if (atom.sZ + r < minZ || atom.sZ - r > maxZ || !gdata.isInDisplayRange (atom.sX, atom.sY)) { | |
| bsOK.clear (i); | |
| }}} | |
| }if (this.ms.ac == 0 || !vwr.getShowNavigationPoint ()) return null; | |
| var minX = 2147483647; | |
| var maxX = -2147483648; | |
| var minY = 2147483647; | |
| var maxY = -2147483648; | |
| for (var i = bsOK.nextSetBit (0); i >= 0; i = bsOK.nextSetBit (i + 1)) { | |
| var atom = atoms[i]; | |
| if (atom.sX < minX) minX = atom.sX; | |
| if (atom.sX > maxX) maxX = atom.sX; | |
| if (atom.sY < minY) minY = atom.sY; | |
| if (atom.sY > maxY) maxY = atom.sY; | |
| } | |
| this.navMinMax[0] = minX; | |
| this.navMinMax[1] = maxX; | |
| this.navMinMax[2] = minY; | |
| this.navMinMax[3] = maxY; | |
| return this.navMinMax; | |
| }, "JU.BS,~B"); | |
| Clazz.defineMethod (c$, "setModelSet", | |
| function (modelSet) { | |
| this.ms = this.vwr.ms = modelSet; | |
| }, "JM.ModelSet"); | |
| Clazz.defineMethod (c$, "checkInheritedShapes", | |
| function () { | |
| if (this.shapes[24] == null) return; | |
| this.setShapePropertyBs (24, "remapInherited", null, null); | |
| }); | |
| Clazz.defineMethod (c$, "restrictSelected", | |
| function (isBond, doInvert) { | |
| var bsSelected = this.vwr.slm.getSelectedAtomsNoSubset (); | |
| if (doInvert) { | |
| this.vwr.slm.invertSelection (); | |
| var bsSubset = this.vwr.slm.bsSubset; | |
| if (bsSubset != null) { | |
| bsSelected = this.vwr.slm.getSelectedAtomsNoSubset (); | |
| bsSelected.and (bsSubset); | |
| this.vwr.select (bsSelected, false, 0, true); | |
| JU.BSUtil.invertInPlace (bsSelected, this.vwr.ms.ac); | |
| bsSelected.and (bsSubset); | |
| }}JU.BSUtil.andNot (bsSelected, this.vwr.slm.bsDeleted); | |
| var bondmode = this.vwr.getBoolean (603979812); | |
| if (!isBond) this.vwr.setBooleanProperty ("bondModeOr", true); | |
| this.setShapeSizeBs (1, 0, null, null); | |
| this.setShapePropertyBs (1, "type", Integer.$valueOf (32768), null); | |
| this.setShapeSizeBs (1, 0, null, null); | |
| this.setShapePropertyBs (1, "type", Integer.$valueOf (1023), null); | |
| var bs = this.vwr.bsA (); | |
| for (var iShape = 21; --iShape >= 0; ) if (iShape != 6 && this.getShape (iShape) != null) this.setShapeSizeBs (iShape, 0, null, bs); | |
| if (this.getShape (21) != null) this.setShapePropertyBs (21, "off", bs, null); | |
| this.setLabel (null, bs); | |
| if (!isBond) this.vwr.setBooleanProperty ("bondModeOr", bondmode); | |
| this.vwr.select (bsSelected, false, 0, true); | |
| }, "~B,~B"); | |
| Clazz.defineStatics (c$, | |
| "hoverable", Clazz.newIntArray (-1, [31, 25, 24, 22, 36])); | |
| c$.clickableMax = c$.prototype.clickableMax = JV.ShapeManager.hoverable.length - 1; | |
| }); | |