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
00026
00027
#ifndef CRYSTAL_ATOM_H
00028
#define CRYSTAL_ATOM_H
00029
00030
#include <list>
00031
#include <libxml/parser.h>
00032
#include <libxml/parserInternals.h>
00033
#include <libxml/xmlmemory.h>
00034
#include "atom.h"
00035
#include "chemistry.h"
00036
00037
using namespace std;
00038
00039
namespace gcu
00040 {
00041
00045 class CrystalAtom :
public Atom
00046 {
00047
public:
00048
00049
00050
00051
CrystalAtom ();
00052
00053
00054
00055
virtual ~
CrystalAtom ();
00056
00057
public :
00058
00059
00060
00061
00062
00063
00064
00065
00066
CrystalAtom (
int Z,
double x,
double y,
double z);
00072
CrystalAtom (
CrystalAtom& caAtom);
00073
00074
00075
00076
00077
00078
CrystalAtom&
operator= (
CrystalAtom& caAtom);
00079
00083
void Draw ();
00092
void SetColor (
float red,
float green,
float blue,
float alpha);
00096
void SetDefaultColor ();
00100 bool HasCustomColor () {
return m_bCustomColor;}
00110
void GetColor (
double *red,
double *green,
double *blue,
double *alpha);
00116
void SetSize (
double r);
00120
double GetSize ();
00125
bool operator== (
CrystalAtom& caAtom);
00130 void Cleave () {
m_nCleave++;}
00139
double ScalProd (
int h,
int k,
int l);
00152
void NetToCartesian (
double a,
double b,
double c,
double alpha,
double beta,
double gamma);
00165
double Distance (
double x,
double y,
double z,
bool bFixed);
00169 double r () {
return m_Radius.
value;}
00173 const GcuAtomicRadius&
GetRadius () {
return m_Radius;}
00177
void SetRadius (
const GcuAtomicRadius& r);
00181 bool IsCleaved () {
return m_nCleave != 0;}
00188
virtual bool SaveNode (xmlDocPtr xml, xmlNodePtr node);
00194
virtual bool LoadNode (xmlNodePtr node);
00195
00196
protected:
00200 float m_fBlue;
00204 float m_fRed;
00208 float m_fGreen;
00212 float m_fAlpha;
00216 bool m_bCustomColor;
00220 GcuAtomicRadius m_Radius;
00226 int m_nCleave;
00227 };
00228
00232
typedef list<CrystalAtom*>
CrystalAtomList;
00233
00234 }
00235
00236
#endif // CRYSTAL_ATOM_H