public void setViewerFrameRenderer(/*Viewer viewer,*/ FrameRenderer frameRenderer, NuGraphics3D g3d) { //this.viewer = viewer; this.frameRenderer = frameRenderer; this.g3d = g3d; initRenderer(); }
public /*Chem*/ Frame(Org.OpenScience.CDK.Interfaces.IChemFile chemFile, Device graphicsDevice) { shapes = new Shape[JmolConstants.SHAPE_MAX]; this.g3d = new NuGraphics3D(graphicsDevice); this.frameRenderer = new FrameRenderer(); for (int i = MAX_BONDS_LENGTH_TO_CACHE; --i > 0;) // .GT. 0 { freeBonds[i] = new Bond[MAX_NUM_TO_CACHE][]; } // convert to jmol native mmset = new Mmset(this); // set properties mmset.ModelSetProperties = new System.Collections.Specialized.NameValueCollection(); // init build currentModelIndex = -1; currentModel = null; currentChainID = '\uFFFF'; currentChain = null; currentGroupSequenceNumber = -1; currentGroupInsertionCode = '\uFFFF'; int atomCountEstimate = 0; for (int seq = 0; seq < chemFile.ChemSequenceCount; seq++) { for (int model = 0; model < chemFile.ChemSequences[seq].ChemModelCount; model++) { Org.OpenScience.CDK.Interfaces.IChemModel chemModel = chemFile.ChemSequences[seq].ChemModels[model]; for (int atomC = 0; atomC < chemModel.SetOfMolecules.AtomContainerCount; atomC++) { atomCountEstimate += chemModel.SetOfMolecules.AtomContainers[atomC].AtomCount; } } } if (atomCountEstimate <= 0) { atomCountEstimate = ATOM_GROWTH_INCREMENT; } atoms = new Atom[atomCountEstimate]; bonds = new Bond[2 * atomCountEstimate]; htAtomMap.Clear(); // translate IChemSequence[] into Model[] mmset.ModelCount = chemFile.ChemSequenceCount; for (int seq = 0; seq < chemFile.ChemSequenceCount; ++seq) { int modelNumber = seq + 1; string modelName = modelNumber.ToString(); NameValueCollection modelProperties = new NameValueCollection(); // FIXME: Loading property values mmset.setModelNameNumberProperties(seq, modelName, modelNumber, modelProperties); } // translate Atoms Dictionary <Org.OpenScience.CDK.Interfaces.IAtom, Atom> atomsList = new Dictionary <Org.OpenScience.CDK.Interfaces.IAtom, Atom>(); //try //{ for (int seq = 0; seq < chemFile.ChemSequenceCount; seq++) { for (int model = 0; model < chemFile.ChemSequences[seq].ChemModelCount; model++) { Org.OpenScience.CDK.Interfaces.IChemModel chemModel = chemFile.ChemSequences[seq].ChemModels[model]; for (int atomC = 0; atomC < chemModel.SetOfMolecules.AtomContainerCount; atomC++) { for (int atomIdx = 0; atomIdx < chemModel.SetOfMolecules.AtomContainers[atomC].AtomCount; atomIdx++) { Org.OpenScience.CDK.Interfaces.IAtom atom = chemModel.SetOfMolecules.AtomContainers[atomC].Atoms[atomIdx]; sbyte elementNumber = (sbyte)atom.AtomicNumber; if (elementNumber <= 0) { elementNumber = JmolConstants.elementNumberFromSymbol(atom.Symbol); } char alternateLocation = '\0'; int sequenceNumber = int.MinValue; char groupInsertionCode = '\0'; string atomName = null; string group3Name = null; char chainID = '\0'; if (atom is PDBAtom) { PDBAtom pdbAtom = (PDBAtom)atom; if (pdbAtom.ResSeq != null && pdbAtom.ResSeq.Length > 0) { sequenceNumber = int.Parse(pdbAtom.ResSeq); } if (pdbAtom.ICode != null && pdbAtom.ICode.Length > 0) { groupInsertionCode = pdbAtom.ICode[0]; } atomName = pdbAtom.Name; group3Name = pdbAtom.ResName; if (pdbAtom.ChainID != null && pdbAtom.ChainID.Length >= 1) { chainID = pdbAtom.ChainID[0]; } } else { atomName = atom.AtomTypeName; } atomsList[atom] = AddAtom(model, atom, elementNumber, atomName, atom.getFormalCharge(), (float)atom.getCharge(), 100, float.NaN, (float)atom.X3d, (float)atom.Y3d, (float)atom.Z3d, false, int.MinValue, chainID, group3Name, sequenceNumber, groupInsertionCode, float.NaN, float.NaN, float.NaN, alternateLocation, null); } } } } //} //catch (Exception e) //{ // throw new ApplicationException("Problem translating atoms", e); //} fileHasHbonds = false; // translate bonds try { for (int seq = 0; seq < chemFile.ChemSequenceCount; seq++) { for (int model = 0; model < chemFile.ChemSequences[seq].ChemModelCount; model++) { Org.OpenScience.CDK.Interfaces.IChemModel chemModel = chemFile.ChemSequences[seq].ChemModels[model]; for (int atomC = 0; atomC < chemModel.SetOfMolecules.AtomContainerCount; atomC++) { for (int bondIdx = 0; bondIdx < chemModel.SetOfMolecules.AtomContainers[atomC].Bonds.Length; bondIdx++) { Org.OpenScience.CDK.Interfaces.IBond bond = chemModel.SetOfMolecules.AtomContainers[atomC].Bonds[bondIdx]; Org.OpenScience.CDK.Interfaces.IAtom[] cdkAtoms = bond.getAtoms(); // locate translated atoms Atom atom1, atom2; atomsList.TryGetValue(cdkAtoms[0], out atom1); atomsList.TryGetValue(cdkAtoms[1], out atom2); bondAtoms(atom1, atom2, (int)bond.Order); } } } } } catch (Exception e) { throw new ApplicationException("Problem translating bonds", e); } atomsList.Clear(); // translate structures of PDBPolymer only for (int seq = 0; seq < chemFile.ChemSequenceCount; seq++) { for (int model = 0; model < chemFile.ChemSequences[seq].ChemModelCount; model++) { Org.OpenScience.CDK.Interfaces.IChemModel chemModel = chemFile.ChemSequences[seq].ChemModels[model]; foreach (Org.OpenScience.CDK.Interfaces.IMolecule molecule in chemModel.SetOfMolecules.Molecules) { if (molecule is PDBPolymer) { PDBPolymer pdbPolymer = (PDBPolymer)molecule; if (pdbPolymer.Structures != null && pdbPolymer.Structures.Count > 0) { structuresDefined = true; foreach (PDBStructure pdbStruct in pdbPolymer.Structures) { structuresDefined = true; mmset.defineStructure(pdbStruct.StructureType, pdbStruct.StartChainID, pdbStruct.StartSequenceNumber, pdbStruct.StartInsertionCode, pdbStruct.EndChainID, pdbStruct.EndSequenceNumber, pdbStruct.EndInsertionCode); } } } } } } autoBond(null, null); // build groups FinalizeGroupBuild(); BuildPolymers(); Freeze(); finalizeBuild(); // create ribbon shapes try { setShapeSize(JmolConstants.SHAPE_RIBBONS, -1, new BitArray(0)); setShapeSize(JmolConstants.SHAPE_CARTOON, -1, new BitArray(0)); } catch (Exception) { } }
public /*Chem*/Frame(Org.OpenScience.CDK.Interfaces.IChemFile chemFile, Device graphicsDevice) { shapes = new Shape[JmolConstants.SHAPE_MAX]; this.g3d = new NuGraphics3D(graphicsDevice); this.frameRenderer = new FrameRenderer(); for (int i = MAX_BONDS_LENGTH_TO_CACHE; --i > 0; ) // .GT. 0 freeBonds[i] = new Bond[MAX_NUM_TO_CACHE][]; // convert to jmol native mmset = new Mmset(this); // set properties mmset.ModelSetProperties = new System.Collections.Specialized.NameValueCollection(); // init build currentModelIndex = -1; currentModel = null; currentChainID = '\uFFFF'; currentChain = null; currentGroupSequenceNumber = -1; currentGroupInsertionCode = '\uFFFF'; int atomCountEstimate = 0; for (int seq = 0; seq < chemFile.ChemSequenceCount; seq++) { for (int model = 0; model < chemFile.ChemSequences[seq].ChemModelCount; model++) { Org.OpenScience.CDK.Interfaces.IChemModel chemModel = chemFile.ChemSequences[seq].ChemModels[model]; for (int atomC = 0; atomC < chemModel.SetOfMolecules.AtomContainerCount; atomC++) { atomCountEstimate += chemModel.SetOfMolecules.AtomContainers[atomC].AtomCount; } } } if (atomCountEstimate <= 0) atomCountEstimate = ATOM_GROWTH_INCREMENT; atoms = new Atom[atomCountEstimate]; bonds = new Bond[2 * atomCountEstimate]; htAtomMap.Clear(); // translate IChemSequence[] into Model[] mmset.ModelCount = chemFile.ChemSequenceCount; for (int seq = 0; seq < chemFile.ChemSequenceCount; ++seq) { int modelNumber = seq + 1; string modelName = modelNumber.ToString(); NameValueCollection modelProperties = new NameValueCollection(); // FIXME: Loading property values mmset.setModelNameNumberProperties(seq, modelName, modelNumber, modelProperties); } // translate Atoms Dictionary<Org.OpenScience.CDK.Interfaces.IAtom, Atom> atomsList = new Dictionary<Org.OpenScience.CDK.Interfaces.IAtom, Atom>(); //try //{ for (int seq = 0; seq < chemFile.ChemSequenceCount; seq++) { for (int model = 0; model < chemFile.ChemSequences[seq].ChemModelCount; model++) { Org.OpenScience.CDK.Interfaces.IChemModel chemModel = chemFile.ChemSequences[seq].ChemModels[model]; for (int atomC = 0; atomC < chemModel.SetOfMolecules.AtomContainerCount; atomC++) { for (int atomIdx = 0; atomIdx < chemModel.SetOfMolecules.AtomContainers[atomC].AtomCount; atomIdx++) { Org.OpenScience.CDK.Interfaces.IAtom atom = chemModel.SetOfMolecules.AtomContainers[atomC].Atoms[atomIdx]; sbyte elementNumber = (sbyte)atom.AtomicNumber; if (elementNumber <= 0) elementNumber = JmolConstants.elementNumberFromSymbol(atom.Symbol); char alternateLocation = '\0'; int sequenceNumber = int.MinValue; char groupInsertionCode = '\0'; string atomName = null; string group3Name = null; char chainID = '\0'; if (atom is PDBAtom) { PDBAtom pdbAtom = (PDBAtom)atom; if (pdbAtom.ResSeq != null && pdbAtom.ResSeq.Length > 0) sequenceNumber = int.Parse(pdbAtom.ResSeq); if (pdbAtom.ICode != null && pdbAtom.ICode.Length > 0) groupInsertionCode = pdbAtom.ICode[0]; atomName = pdbAtom.Name; group3Name = pdbAtom.ResName; if (pdbAtom.ChainID != null && pdbAtom.ChainID.Length >= 1) chainID = pdbAtom.ChainID[0]; } else atomName = atom.AtomTypeName; atomsList[atom] = AddAtom(model, atom, elementNumber, atomName, atom.getFormalCharge(), (float)atom.getCharge(), 100, float.NaN, (float)atom.X3d, (float)atom.Y3d, (float)atom.Z3d, false, int.MinValue, chainID, group3Name, sequenceNumber, groupInsertionCode, float.NaN, float.NaN, float.NaN, alternateLocation, null); } } } } //} //catch (Exception e) //{ // throw new ApplicationException("Problem translating atoms", e); //} fileHasHbonds = false; // translate bonds try { for (int seq = 0; seq < chemFile.ChemSequenceCount; seq++) { for (int model = 0; model < chemFile.ChemSequences[seq].ChemModelCount; model++) { Org.OpenScience.CDK.Interfaces.IChemModel chemModel = chemFile.ChemSequences[seq].ChemModels[model]; for (int atomC = 0; atomC < chemModel.SetOfMolecules.AtomContainerCount; atomC++) { for (int bondIdx = 0; bondIdx < chemModel.SetOfMolecules.AtomContainers[atomC].Bonds.Length; bondIdx++) { Org.OpenScience.CDK.Interfaces.IBond bond = chemModel.SetOfMolecules.AtomContainers[atomC].Bonds[bondIdx]; Org.OpenScience.CDK.Interfaces.IAtom[] cdkAtoms = bond.getAtoms(); // locate translated atoms Atom atom1, atom2; atomsList.TryGetValue(cdkAtoms[0], out atom1); atomsList.TryGetValue(cdkAtoms[1], out atom2); bondAtoms(atom1, atom2, (int)bond.Order); } } } } } catch (Exception e) { throw new ApplicationException("Problem translating bonds", e); } atomsList.Clear(); // translate structures of PDBPolymer only for (int seq = 0; seq < chemFile.ChemSequenceCount; seq++) { for (int model = 0; model < chemFile.ChemSequences[seq].ChemModelCount; model++) { Org.OpenScience.CDK.Interfaces.IChemModel chemModel = chemFile.ChemSequences[seq].ChemModels[model]; foreach (Org.OpenScience.CDK.Interfaces.IMolecule molecule in chemModel.SetOfMolecules.Molecules) { if (molecule is PDBPolymer) { PDBPolymer pdbPolymer = (PDBPolymer)molecule; if (pdbPolymer.Structures != null && pdbPolymer.Structures.Count > 0) { structuresDefined = true; foreach (PDBStructure pdbStruct in pdbPolymer.Structures) { structuresDefined = true; mmset.defineStructure(pdbStruct.StructureType, pdbStruct.StartChainID, pdbStruct.StartSequenceNumber, pdbStruct.StartInsertionCode, pdbStruct.EndChainID, pdbStruct.EndSequenceNumber, pdbStruct.EndInsertionCode); } } } } } } autoBond(null, null); // build groups FinalizeGroupBuild(); BuildPolymers(); Freeze(); finalizeBuild(); // create ribbon shapes try { setShapeSize(JmolConstants.SHAPE_RIBBONS, -1, new BitArray(0)); setShapeSize(JmolConstants.SHAPE_CARTOON, -1, new BitArray(0)); } catch (Exception) { } }