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_BOND_H
00026 #define GCU_BOND_H
00027
00028 #include <list>
00029 #include "object.h"
00030
00031 namespace gcu
00032 {
00033
00034 class Atom;
00035 class Cycle;
00036
00041 class Bond: public Object
00042 {
00043 public:
00047 Bond ();
00056 Bond (Atom* first, Atom* last, unsigned char order);
00060 virtual ~Bond ();
00061
00067 virtual Atom* GetAtom (int which);
00074 virtual Atom* GetAtom (Atom* pAtom, int which = 0);
00075
00079 unsigned char GetOrder ();
00085 void SetOrder (unsigned char Order);
00090 virtual xmlNodePtr Save (xmlDocPtr xml);
00096 virtual bool Load (xmlNodePtr node);
00102 virtual void IncOrder (int n = 1);
00109 virtual bool LoadNode (xmlNodePtr node);
00117 virtual bool SaveNode (xmlDocPtr xml, xmlNodePtr node);
00125 virtual void Move (double x, double y, double z = 0.);
00133 virtual void Transform2D (Matrix2D& m, double x, double y);
00134
00135 bool SetProperty (unsigned property, char const *value);
00136 virtual void AddCycle (Cycle* pCycle);
00137 virtual void RemoveCycle (Cycle* pCycle);
00138 virtual void RemoveAllCycles ();
00139 unsigned IsCyclic () {return m_Cycles.size ();}
00140 Cycle* GetFirstCycle (std::list<Cycle*>::iterator& i, Cycle * pCycle);
00141 Cycle* GetNextCycle (std::list<Cycle*>::iterator& i, Cycle * pCycle);
00142 bool IsInCycle (Cycle* pCycle);
00143 double Get2DLength ();
00144 double GetAngle2DRad (Atom* pAtom);
00145
00146 protected:
00150 unsigned char m_order;
00154 Atom *m_Begin;
00158 Atom *m_End;
00159
00160 std::list<Cycle*> m_Cycles;
00161 };
00162
00163 }
00164
00165 #endif // GCU_BOND_H