chain.h
Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025 #ifndef GCU_CHAIN_H
00026 #define GCU_CHAIN_H
00027
00028 #include "object.h"
00029 #include <map>
00030
00032 namespace gcu {
00033
00034 class Atom;
00035 class Bond;
00036 class Molecule;
00037
00043 typedef struct
00044 {
00048 Bond *fwd;
00052 Bond *rev;
00053 } ChainElt;
00054
00059 class Chain: public Object
00060 {
00061 public:
00072 Chain (Bond* pBond, Atom* pAtom = NULL, TypeId Type = ChainType);
00081 Chain (Molecule* molecule, Bond* pBond, TypeId Type = ChainType);
00090 Chain (Molecule* molecule, Atom* pAtom, TypeId Type = ChainType);
00094 virtual ~Chain();
00095
00102 void FindCycles (Atom* pAtom);
00112 bool FindCycle (Atom* pAtom, Bond* pBond);
00119 virtual void Erase (Atom* pAtom1, Atom* pAtom2);
00127 virtual void Insert (Atom* pAtom1, Atom* pAtom2, Chain& chain);
00135 void Extract (Atom* pAtom1, Atom* pAtom2, Chain& chain);
00139 void Reverse ();
00146 void AddBond (Atom* start, Atom* end);
00150 unsigned GetUnsaturations ();
00154 unsigned GetHeteroatoms ();
00160 bool Contains (Atom* pAtom);
00166 bool Contains (Bond* pBond);
00170 unsigned GetLength ();
00174 double GetMeanBondLength ();
00179 Atom* GetNextAtom (Atom* pAtom);
00180
00184 std::string Name ();
00185
00186 protected:
00190 std::map<Atom*, ChainElt> m_Bonds;
00194 Molecule* m_Molecule;
00195 };
00196
00197 }
00198
00199 #endif // GCHEMPAINT_CHAIN_H