Clazz.declarePackage ("J.shape"); Clazz.load (["J.shape.Shape"], "J.shape.MeshCollection", ["java.util.Hashtable", "JU.AU", "$.Lst", "$.P3", "$.PT", "$.SB", "JS.T", "J.shape.Mesh", "JU.C", "$.Escape", "$.Logger", "JV.StateManager"], function () { c$ = Clazz.decorateAsClass (function () { this.meshCount = 0; this.meshes = null; this.currentMesh = null; this.isFixed = false; this.nUnnamed = 0; this.colix = 0; this.explicitID = false; this.previousMeshID = null; this.linkedMesh = null; this.modelIndex = 0; this.displayWithinDistance2 = 0; this.isDisplayWithinNot = false; this.displayWithinPoints = null; this.bsDisplay = null; this.title = null; this.pickedMesh = null; this.pickedModel = 0; this.pickedVertex = 0; this.pickedPt = null; this.connections = null; this.htObjects = null; this.color = 0; Clazz.instantialize (this, arguments); }, J.shape, "MeshCollection", J.shape.Shape); Clazz.prepareFields (c$, function () { this.meshes = new Array (4); }); Clazz.defineMethod (c$, "setMesh", function (thisID) { this.linkedMesh = null; if (thisID == null || JU.PT.isWild (thisID)) { if (thisID != null) this.previousMeshID = thisID; this.currentMesh = null; return null; }this.currentMesh = this.getMesh (thisID); if (this.currentMesh == null) { this.allocMesh (thisID, null); } else if (thisID.equals ("+PREVIOUS_MESH+")) { this.linkedMesh = this.currentMesh.linkedMesh; }if (this.currentMesh.thisID == null) { if (this.nUnnamed == 0 || this.getMesh (this.myType + this.nUnnamed) != null) this.nUnnamed++; this.currentMesh.thisID = this.myType + this.nUnnamed; if (this.htObjects != null) this.htObjects.put (this.currentMesh.thisID.toUpperCase (), this.currentMesh); }this.previousMeshID = this.currentMesh.thisID; return this.currentMesh; }, "~S"); Clazz.defineMethod (c$, "allocMesh", function (thisID, m) { var index = this.meshCount++; this.meshes = JU.AU.ensureLength (this.meshes, this.meshCount * 2); this.currentMesh = this.meshes[index] = (m == null ? new J.shape.Mesh ().mesh1 (this.vwr, thisID, this.colix, index) : m); this.currentMesh.color = this.color; this.currentMesh.index = index; if (thisID != null && this.htObjects != null) this.htObjects.put (thisID.toUpperCase (), this.currentMesh); this.previousMeshID = null; }, "~S,J.shape.Mesh"); Clazz.defineMethod (c$, "merge", function (mc) { for (var i = 0; i < mc.meshCount; i++) { if (mc.meshes[i] != null) { var m = mc.meshes[i]; var m0 = this.getMesh (m.thisID); if (m0 == null) { this.allocMesh (m.thisID, m); } else { this.meshes[m0.index] = m; m.index = m0.index; }}} this.previousMeshID = null; this.currentMesh = null; }, "J.shape.MeshCollection"); Clazz.overrideMethod (c$, "initShape", function () { this.colix = 5; this.color = 0xFFFFFFFF; }); Clazz.defineMethod (c$, "setPropMC", function (propertyName, value, bs) { if ("init" === propertyName) { this.title = null; return; }if ("link" === propertyName) { if (this.meshCount >= 2 && this.currentMesh != null) this.currentMesh.linkedMesh = this.meshes[this.meshCount - 2]; return; }if ("lattice" === propertyName) { if (this.currentMesh != null) this.currentMesh.lattice = value; return; }if ("symops" === propertyName) { if (this.currentMesh != null) { this.currentMesh.symops = value; if (this.currentMesh.symops == null) return; var n = this.currentMesh.symops.length; this.currentMesh.symopColixes = Clazz.newShortArray (n, 0); for (var i = n; --i >= 0; ) this.currentMesh.symopColixes[i] = JU.C.getColix (this.vwr.cm.ce.getArgbMinMax (i + 1, 1, n)); }return; }if ("variables" === propertyName) { if (this.currentMesh != null && this.currentMesh.scriptCommand != null && !this.currentMesh.scriptCommand.startsWith ("{")) this.currentMesh.scriptCommand = "{\n" + JV.StateManager.getVariableList (value, 0, false, false) + "\n" + this.currentMesh.scriptCommand; return; }if ("thisID" === propertyName) { var id = value; this.setMesh (id); this.checkExplicit (id); return; }if ("title" === propertyName) { if (value == null) { this.title = null; } else if (Clazz.instanceOf (value, String)) { var nLine = 1; var lines = value; for (var i = lines.length; --i >= 0; ) if (lines.charAt (i) == '|') nLine++; this.title = new Array (nLine); nLine = 0; var i0 = -1; for (var i = 0; i < lines.length; i++) if (lines.charAt (i) == '|') { this.title[nLine++] = lines.substring (i0 + 1, i); i0 = i; } this.title[nLine] = lines.substring (i0 + 1); } else { this.title = value; }return; }if ("delete" === propertyName) { this.deleteMesh (); return; }if ("reset" === propertyName) { var thisID = value; if (this.setMesh (thisID) == null) return; this.setMesh (thisID); return; }if ("color" === propertyName) { if (value == null) return; this.colix = JU.C.getColixO (value); this.color = (value).intValue (); if (this.currentMesh != null) { this.currentMesh.color = this.color; }this.setTokenProperty (1765808134, false, false); return; }if ("translucency" === propertyName) { this.setTokenProperty (603979967, ((value).equals ("translucent")), false); return; }if ("hidden" === propertyName) { value = Integer.$valueOf ((value).booleanValue () ? 1073742334 : 1073742335); propertyName = "token"; }if ("token" === propertyName) { var tok = (value).intValue (); var tok2 = 0; var test = true; switch (tok) { case 1610625028: case 1073742335: case 1073741958: case 1073741861: case 1073741964: case 1112150019: case 1073741938: case 1073741862: case 1073742182: case 1073741960: break; case 1073742334: test = false; tok = 1073742335; break; case 1073741898: tok2 = 1073742018; break; case 1073742039: test = false; tok = 1073741898; tok2 = 1073742018; break; case 1073742018: tok2 = 1073741898; break; case 1073742052: test = false; tok = 1073742018; tok2 = 1073741898; break; case 1073742042: test = false; tok = 1112150019; break; case 1073742046: test = false; tok = 1073741938; break; case 1073742057: test = false; tok = 1073741862; break; case 1073742060: test = false; tok = 1073742182; break; case 1073742058: test = false; tok = 1073741960; break; default: JU.Logger.error ("PROBLEM IN MESHCOLLECTION: token? " + JS.T.nameOf (tok)); } this.setTokenProperty (tok, test, false); if (tok2 != 0) this.setTokenProperty (tok2, test, true); return; }this.setPropS (propertyName, value, bs); }, "~S,~O,JU.BS"); Clazz.defineMethod (c$, "checkExplicit", function (id) { if (this.explicitID) return; this.explicitID = (id != null && !id.equals ("+PREVIOUS_MESH+")); if (this.explicitID) this.previousMeshID = id; }, "~S"); Clazz.defineMethod (c$, "setTokenProperty", function (tokProp, bProp, testD) { if (this.currentMesh == null) { var key = (this.explicitID && JU.PT.isWild (this.previousMeshID) ? this.previousMeshID : null); var list = this.getMeshList (key, false); for (var i = list.size (); --i >= 0; ) this.setMeshTokenProperty (list.get (i), tokProp, bProp, testD); } else { this.setMeshTokenProperty (this.currentMesh, tokProp, bProp, testD); if (this.linkedMesh != null) this.setMeshTokenProperty (this.linkedMesh, tokProp, bProp, testD); }}, "~N,~B,~B"); Clazz.defineMethod (c$, "setMeshTokenProperty", function (m, tokProp, bProp, testD) { if (testD && (!m.havePlanarContours || m.drawTriangles == m.showContourLines)) return; switch (tokProp) { case 1610625028: m.bsDisplay = this.bsDisplay; if (this.bsDisplay == null && this.displayWithinPoints != null) m.setShowWithin (this.displayWithinPoints, this.displayWithinDistance2, this.isDisplayWithinNot); return; case 1073742335: m.visible = bProp; return; case 1765808134: m.colix = this.colix; return; case 603979967: m.setTranslucent (bProp, this.translucentLevel); if (bProp && m.bsSlabGhost != null) m.resetSlab (); return; default: m.setTokenProperty (tokProp, bProp); } }, "J.shape.Mesh,~N,~B,~B"); Clazz.defineMethod (c$, "getPropDataMC", function (property, data) { if (property === "keys") { var keys = (Clazz.instanceOf (data[1], JU.Lst) ? data[1] : new JU.Lst ()); data[1] = keys; keys.addLast ("count"); keys.addLast ("getCenter"); }if (property === "getNames") { var map = data[0]; var withDollar = (data[1]).booleanValue (); for (var i = this.meshCount; --i >= 0; ) if (this.meshes[i] != null && this.meshes[i].vc != 0) map.put ((withDollar ? "$" : "") + this.meshes[i].thisID, JS.T.tokenOr); return true; }if (property === "getVertices") { var m = this.getMesh (data[0]); if (m == null) return false; data[1] = m.vs; data[2] = m.getVisibleVertexBitSet (); return true; }if (property === "checkID") { var key = data[0]; var list = this.getMeshList (key, true); if (list.size () == 0) return false; data[1] = list.get (0).thisID; return true; }if (property === "index") { var m = this.getMesh (data[0]); data[1] = Integer.$valueOf (m == null ? -1 : m.index); return true; }if (property === "getCenter") { var id = data[0]; var index = (data[1]).intValue (); var m; if ((m = this.getMesh (id)) == null || m.vs == null) return false; if (index == 2147483647) data[2] = JU.P3.new3 (m.index + 1, this.meshCount, m.vc); else data[2] = m.vs[m.getVertexIndexFromNumber (index)]; return true; }return this.getPropShape (property, data); }, "~S,~A"); Clazz.defineMethod (c$, "getMeshList", function (key, justOne) { var list = new JU.Lst (); if (key != null) key = (key.length == 0 ? null : key.toUpperCase ()); var isWild = JU.PT.isWild (key); var id; for (var i = this.meshCount; --i >= 0; ) if (key == null || (id = this.meshes[i].thisID.toUpperCase ()).equals (key) || isWild && JU.PT.isMatch (id, key, true, true)) { list.addLast (this.meshes[i]); if (justOne) break; } return list; }, "~S,~B"); Clazz.defineMethod (c$, "getPropMC", function (property, index) { var m = this.currentMesh; if (index >= 0 && (index >= this.meshCount || (m = this.meshes[index]) == null)) return null; if (property === "count") { var n = 0; for (var i = 0; i < this.meshCount; i++) if ((m = this.meshes[i]) != null && m.vc > 0) n++; return Integer.$valueOf (n); }if (property === "bsVertices") { if (m == null) return null; var lst = new JU.Lst (); lst.addLast (m.vs); lst.addLast (m.getVisibleVBS ()); return lst; }if (property === "ID") return (m == null ? null : m.thisID); if (property.startsWith ("list")) { this.clean (); var sb = new JU.SB (); var k = 0; var isNamed = property.length > 5; var id = (property.equals ("list") ? null : isNamed ? property.substring (5) : m == null ? null : m.thisID); for (var i = 0; i < this.meshCount; i++) { m = this.meshes[i]; if (id != null && !id.equalsIgnoreCase (m.thisID)) continue; sb.appendI ((++k)).append (" id:" + m.thisID).append ("; model:" + this.vwr.getModelNumberDotted (m.modelIndex)).append ("; vertices:" + m.vc).append ("; polygons:" + m.pc).append ("; visible:" + m.visible); var range = this.getProperty ("dataRange", 0); if (range != null) sb.append ("; dataRange:").append (JU.Escape.eAF (range)); if (m.title != null) { var s = ""; for (var j = 0; j < m.title.length; j++) s += (j == 0 ? "; title:" : " | ") + m.title[j]; if (s.length > 10000) s = s.substring (0, 10000) + "..."; sb.append (s); }sb.appendC ('\n'); if (isNamed) { var info = this.getProperty ("jvxlFileInfo", 0); if (info != null) sb.append (info).appendC ('\n'); }} return sb.toString (); }if (property === "vertices") return this.getVertices (m); if (property === "info") return (m == null ? null : m.getInfo (false)); if (property === "data") return (m == null ? null : m.getInfo (true)); return null; }, "~S,~N"); Clazz.defineMethod (c$, "getVertices", function (mesh) { if (mesh == null) return null; return mesh.vs; }, "J.shape.Mesh"); Clazz.defineMethod (c$, "clean", function () { for (var i = this.meshCount; --i >= 0; ) if (this.meshes[i] == null || this.meshes[i].vc == 0) this.deleteMeshI (i); }); Clazz.defineMethod (c$, "deleteMesh", function () { if (this.explicitID && this.currentMesh != null) this.deleteMeshI (this.currentMesh.index); else this.deleteMeshKey (this.explicitID && this.previousMeshID != null && JU.PT.isWild (this.previousMeshID) ? this.previousMeshID : null); this.currentMesh = null; }); Clazz.defineMethod (c$, "deleteMeshKey", function (key) { if (key == null || key.length == 0) { for (var i = this.meshCount; --i >= 0; ) this.meshes[i] = null; this.meshCount = 0; this.nUnnamed = 0; if (this.htObjects != null) this.htObjects.clear (); } else { var list = this.getMeshList (key, false); var n = list.size (); for (var i = 0; i < n; i++) this.deleteMeshI (list.get (i).index); }}, "~S"); Clazz.defineMethod (c$, "deleteMeshI", function (i) { if (this.htObjects != null) this.htObjects.remove (this.meshes[i].thisID.toUpperCase ()); for (var j = i + 1; j < this.meshCount; ++j) this.meshes[--this.meshes[j].index] = this.meshes[j]; this.meshes[--this.meshCount] = null; }, "~N"); Clazz.defineMethod (c$, "resetObjects", function () { this.htObjects.clear (); for (var i = 0; i < this.meshCount; i++) { var m = this.meshes[i]; m.index = i; this.htObjects.put (m.thisID.toUpperCase (), m); } }); Clazz.defineMethod (c$, "getMesh", function (thisID) { var i = this.getIndexFromName (thisID); return (i < 0 ? null : this.meshes[i]); }, "~S"); Clazz.overrideMethod (c$, "getIndexFromName", function (id) { if ("+PREVIOUS_MESH+".equals (id)) return (this.previousMeshID == null ? this.meshCount - 1 : this.getIndexFromName (this.previousMeshID)); if (JU.PT.isWild (id)) { var list = this.getMeshList (id, true); return (list.size () == 0 ? -1 : list.get (0).index); }if (this.htObjects != null) { var m = this.htObjects.get (id.toUpperCase ()); return (m == null ? -1 : m.index); }for (var i = this.meshCount; --i >= 0; ) { if (this.meshes[i] != null && this.meshes[i].vc != 0 && id.equalsIgnoreCase (this.meshes[i].thisID)) return i; } return -1; }, "~S"); Clazz.overrideMethod (c$, "setModelVisibilityFlags", function (bsModels) { var bsDeleted = this.vwr.slm.bsDeleted; for (var i = this.meshCount; --i >= 0; ) { var mesh = this.meshes[i]; mesh.visibilityFlags = (mesh.visible && mesh.isValid && (mesh.modelIndex < 0 || bsModels.get (mesh.modelIndex) && (mesh.atomIndex < 0 || !this.ms.isAtomHidden (mesh.atomIndex) && !(bsDeleted != null && bsDeleted.get (mesh.atomIndex)))) ? this.vf : 0); } }, "JU.BS"); Clazz.defineMethod (c$, "setStatusPicked", function (flag, v, map) { this.vwr.setStatusAtomPicked (flag, "[\"" + this.myType + "\"," + JU.PT.esc (this.pickedMesh.thisID) + "," + +this.pickedModel + "," + this.pickedVertex + "," + v.x + "," + v.y + "," + v.z + "," + (this.pickedMesh.title == null ? "\"\"" : JU.PT.esc (this.pickedMesh.title[0])) + "]", map, false); }, "~N,JU.T3,java.util.Map"); Clazz.defineMethod (c$, "getPickedPoint", function (v, modelIndex) { var map = new java.util.Hashtable (); if (v != null) { map.put ("pt", v); map.put ("modelIndex", Integer.$valueOf (modelIndex)); map.put ("model", this.vwr.getModelNumberDotted (modelIndex)); map.put ("id", this.pickedMesh.thisID); map.put ("vertex", Integer.$valueOf (this.pickedVertex + 1)); map.put ("type", this.myType); }return map; }, "JU.T3,~N"); Clazz.defineStatics (c$, "PREVIOUS_MESH_ID", "+PREVIOUS_MESH+"); });