⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 bond.java

📁 化学图形处理软件
💻 JAVA
字号:
/*  $RCSfile$ *  $Author: egonw $ *  $Date: 2007-02-16 14:03:31 +0100 (Fri, 16 Feb 2007) $ *  $Revision: 7958 $ * *  Copyright (C) 1997-2007  Christoph Steinbeck <steinbeck@users.sf.net> * *  Contact: cdk-devel@lists.sourceforge.net * *  This program is free software; you can redistribute it and/or *  modify it under the terms of the GNU Lesser General Public License *  as published by the Free Software Foundation; either version 2.1 *  of the License, or (at your option) any later version. * *  This program is distributed in the hope that it will be useful, *  but WITHOUT ANY WARRANTY; without even the implied warranty of *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the *  GNU Lesser General Public License for more details. * *  You should have received a copy of the GNU Lesser General Public License *  along with this program; if not, write to the Free Software *  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. * */package org.openscience.cdk;import java.io.Serializable;import javax.vecmath.Point2d;import javax.vecmath.Point3d;import org.openscience.cdk.interfaces.IAtom;import org.openscience.cdk.interfaces.IBond;/** *  Implements the concept of a covalent bond between two atoms. A bond is *  considered to be a number of electrons connecting a two of atoms. * * @cdk.module data * * @author     steinbeck * @cdk.created    2003-10-02 * @cdk.keyword    bond * @cdk.keyword    atom * @cdk.keyword    electron */public class Bond extends ElectronContainer implements IBond, Serializable, Cloneable{	/**     * Determines if a de-serialized object is compatible with this class.     *     * This value must only be changed if and only if the new version     * of this class is imcompatible with the old version. See Sun docs     * for <a href=http://java.sun.com/products/jdk/1.1/docs/guide     * /serialization/spec/version.doc.html>details</a>.	 */	private static final long serialVersionUID = 7057060562283387384L;	/**	 *  The bond order of this bond.	 */	protected double order;	/**	 *  Number of atoms contained by this object.	 */	protected int atomCount = 2;	/**	 *  A list of atoms participating in this bond.	 */	protected IAtom[] atoms;	/**	 *  A descriptor the stereochemical orientation of this bond.	 *	 *@see    org.openscience.cdk.CDKConstants for predefined values to be used	 *      here.	 */	protected int stereo;	/**	 *  Constructs an empty bond.	 */	public Bond() {		this(null, null, 0.0, CDKConstants.STEREO_BOND_NONE);	}	/**	 *  Constructs a bond with a single bond order..	 *	 *@param  atom1  the first Atom in the bond	 *@param  atom2  the second Atom in the bond	 */	public Bond(IAtom atom1, IAtom atom2)	{		this(atom1, atom2, 1.0, CDKConstants.STEREO_BOND_NONE);	}	/**	 *  Constructs a bond with a given order.	 *	 *@param  atom1  the first Atom in the bond	 *@param  atom2  the second Atom in the bond	 *@param  order  the bond order	 */	public Bond(IAtom atom1, IAtom atom2, double order)	{		this(atom1, atom2, order, CDKConstants.STEREO_BOND_NONE);	}	/**	 *  Constructs a bond with a given order and stereo orientation from an array	 *  of atoms.	 *	 *@param  atom1   the first Atom in the bond	 *@param  atom2   the second Atom in the bond	 *@param  order   the bond order	 *@param  stereo  a descriptor the stereochemical orientation of this bond	 */	public Bond(IAtom atom1, IAtom atom2, double order, int stereo)	{		atoms = new Atom[2];		atoms[0] = atom1;		atoms[1] = atom2;		this.order = order;		this.stereo = stereo;	}	/**	 *  Returns the Iterator to atoms making up this bond.	 *  Iterator.remove() is not implemented.	 *	 *@return    An Iterator to atoms participating in this bond	 *@see       #setAtoms	 */	public java.util.Iterator atoms()	{		return new AtomsIterator();	}	/**     * The inner Iterator class.     *     */    private class AtomsIterator implements java.util.Iterator {        private int pointer = 0;    	        public boolean hasNext() {            if (pointer < 2) return true;	    return false;        }        public Object next() {            ++pointer;            return atoms[pointer-1];        }        public void remove() {}    	    }		/**	 *  Sets the array of atoms making up this bond.	 *	 *@param  atoms  An array of atoms that forms this bond	 *@see           #atoms	 */	public void setAtoms(IAtom[] atoms)	{		this.atoms = atoms;		notifyChanged();	}	/**	 *  Returns the number of Atoms in this Bond.	 *	 *@return    The number of Atoms in this Bond	 */	public int getAtomCount()	{		return atomCount;	}	/**	 *  Returns an Atom from this bond.	 *	 *@param  position  The position in this bond where the atom is	 *@return           The atom at the specified position	 *@see              #setAtom	 */	public IAtom getAtom(int position)	{		return (IAtom)atoms[position];	}	/**	 *  Returns the atom connected to the given atom.	 *	 *@param  atom  The atom the bond partner is searched of	 *@return       the connected atom or null	 */	public IAtom getConnectedAtom(IAtom atom)	{		if (atoms[0] == atom)		{			return (Atom)atoms[1];		} else if (atoms[1] == atom)		{			return (Atom)atoms[0];		}		return null;	}	/**	 *  Returns true if the given atom participates in this bond.	 *	 *@param  atom  The atom to be tested if it participates in this bond	 *@return       true if the atom participates in this bond	 */	public boolean contains(IAtom atom)	{		if (atoms[0] == atom)		{			return true;		} else if (atoms[1] == atom)		{			return true;		}		return false;	}	/**	 *  Sets an Atom in this bond.	 *	 *@param  atom      The atom to be set	 *@param  position  The position in this bond where the atom is to be inserted	 *@see              #getAtom	 */	public void setAtom(IAtom atom, int position)	{		atoms[position] = atom;		notifyChanged();	}	/**	 *  Returns the bond order of this bond.	 *	 *@return    The bond order of this bond	 *@see       org.openscience.cdk.CDKConstants org.openscience.cdk.CDKConstants	 *      for predefined values.	 *@see       #setOrder	 */	public double getOrder()	{		return this.order;	}	/**	 *  Sets the bond order of this bond.	 *	 *@param  order  The bond order to be assigned to this bond	 *@see           org.openscience.cdk.CDKConstants	 *      org.openscience.cdk.CDKConstants for predefined values.	 *@see           #getOrder	 */	public void setOrder(double order)	{		this.order = order;		notifyChanged();	}	/**	 *  Returns the stereo descriptor for this bond.	 *	 *@return    The stereo descriptor for this bond	 *@see       #setStereo	 *@see       org.openscience.cdk.CDKConstants for predefined values.	 */	public int getStereo()	{		return this.stereo;	}	/**	 *  Sets the stereo descriptor for this bond.	 *	 *@param  stereo  The stereo descriptor to be assigned to this bond.	 *@see            #getStereo	 *@see            org.openscience.cdk.CDKConstants for predefined values.	 */	public void setStereo(int stereo)	{		this.stereo = stereo;		notifyChanged();	}	/**	 *  Returns the geometric 2D center of the bond.	 *	 *@return    The geometric 2D center of the bond	 */	public Point2d get2DCenter()	{		double xOfCenter = 0;		double yOfCenter = 0;		for (int f = 0; f < getAtomCount(); f++)		{			xOfCenter += getAtom(f).getPoint2d().x;			yOfCenter += getAtom(f).getPoint2d().y;		}		return new Point2d(xOfCenter / ((double) getAtomCount()),                            yOfCenter / ((double) getAtomCount()));	}	/**	 *  Returns the geometric 3D center of the bond.	 *	 *@return    The geometric 3D center of the bond	 */	public Point3d get3DCenter()	{		double xOfCenter = 0;		double yOfCenter = 0;		double zOfCenter = 0;		for (int f = 0; f < getAtomCount(); f++)		{			xOfCenter += getAtom(f).getPoint3d().x;			yOfCenter += getAtom(f).getPoint3d().y;			zOfCenter += getAtom(f).getPoint3d().z;		}		return new Point3d(xOfCenter / getAtomCount(),                            yOfCenter / getAtomCount(),                            zOfCenter / getAtomCount());	}	/**	 *  Compares a bond with this bond.	 *	 *@param  object  Object of type Bond	 *@return         Return true, if the bond is equal to this bond	 */	public boolean compare(Object object)	{		if (object instanceof IBond)		{			Bond bond = (Bond) object;			for (int i = 0; i < atoms.length; i++)			{				if (!bond.contains(atoms[i]))				{					return false;				}			}			// not important ??!!			//if (order==bond.order)			//  return false;			return true;		}		return false;	}	/**	 * Checks wether a bond is connected to another one.	 * This can only be true if the bonds have an Atom in common.	 *	 * @param  bond  The bond which is checked to be connect with this one	 * @return       True, if the bonds share an atom, otherwise false	 */	public boolean isConnectedTo(IBond bond)	{		for (int f = 0; f < getAtomCount(); f++)		{			if (bond.contains(getAtom(f)))			{				return true;			}		}		return false;	}	/**	 * Clones this bond object, including clones of the atoms between which the     * bond is defined.	 *	 * @return    The cloned object	 */	public Object clone() throws CloneNotSupportedException {		Bond clone = (Bond)super.clone();        // clone all the Atoms        if (atoms != null) {		    clone.atoms = new IAtom[atoms.length];            for (int f = 0; f < atoms.length; f++) {                if (atoms[f] != null) {                    clone.atoms[f] = (IAtom)((IAtom)atoms[f]).clone();                }            }        }		return clone;	}	/**	 *  Returns a one line string representation of this Container. This method is	 *  conform RFC #9.	 *	 *@return    The string representation of this Container	 */	public String toString() {		StringBuffer resultString = new StringBuffer(32);		resultString.append("Bond(");		resultString.append(this.hashCode());		resultString.append(", #O:").append(getOrder());		resultString.append(", #S:").append(getStereo());		resultString.append(", #A:").append(atoms.length);		for (int i = 0; i < atomCount; i++)		{			if (atoms[i] == null)			{				resultString.append(", null");			} else			{				resultString.append(", ").append(atoms[i].toString());			}		}		resultString.append(')');		return resultString.toString();	}}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -