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 GCHEMPAINT_CHAIN_H
00026 #define GCHEMPAINT_CHAIN_H
00027
00028 #include "atom.h"
00029 #include "bond.h"
00030 #include <map>
00031
00032 using namespace gcu;
00033
00034 namespace gcp {
00035
00036 class Molecule;
00037
00038 typedef struct
00039 {
00040 Bond *fwd, *rev;
00041 } ChainElt;
00042
00043 class Chain: public Object
00044 {
00045 public:
00046 Chain (Bond* pBond, Atom* pAtom = NULL, TypeId Type = ChainType);
00047 Chain (Molecule* Molecule, Bond* pBond, TypeId Type = ChainType);
00048 Chain (Molecule* Molecule, Atom* pAtom, TypeId Type = ChainType);
00049 virtual ~Chain();
00050
00051 void FindCycles (Atom* pAtom);
00052 bool FindCycle (Atom* pAtom, Bond* pBond);
00053 virtual void Erase (Atom* pAtom1, Atom* pAtom2);
00054 virtual void Insert (Atom* pAtom1, Atom* pAtom2, Chain& Chain);
00055 void Extract (Atom* pAtom1, Atom* pAtom2, Chain& Chain);
00056 void Reverse ();
00057 void AddBond (Atom* start, Atom* end);
00058 unsigned GetUnsaturations ();
00059 unsigned GetHeteroatoms ();
00060 bool Contains (Atom* pAtom);
00061 bool Contains (Bond* pBond);
00062 unsigned GetLength ();
00063 double GetMeanBondLength ();
00064 Atom* GetNextAtom (Atom* pAtom);
00065
00066 protected:
00067 map<Atom*, ChainElt> m_Bonds;
00068 Molecule* m_Molecule;
00069 guint m_nMolIndex;
00070 };
00071
00072 }
00073
00074 #endif // GCHEMPAINT_CHAIN_H