00001 #ifndef _OBJCRYST_SCATTERER_H_
00002 #define _OBJCRYST_SCATTERER_H_
00003
00004 #include "CrystVector/CrystVector.h"
00005
00006 #include "ObjCryst/General.h"
00007
00008 #include "ObjCryst/ScatteringPower.h"
00009
00010 #include <string>
00011
00012 namespace ObjCryst
00013 {
00014 extern const RefParType *gpRefParTypeScatt;
00015 extern const RefParType *gpRefParTypeScattTransl;
00016 extern const RefParType *gpRefParTypeScattOrient;
00017 extern const RefParType *gpRefParTypeScattConform;
00018 extern const RefParType *gpRefParTypeScattConformBondLength;
00019 extern const RefParType *gpRefParTypeScattConformBondAngle;
00020 extern const RefParType *gpRefParTypeScattConformDihedAngle;
00021 extern const RefParType *gpRefParTypeScattOccup;
00022
00023
00024
00040
00041
00042 class Scatterer:virtual public RefinableObj
00043 {
00044 public:
00046 Scatterer();
00048 Scatterer(const Scatterer &old);
00050 virtual ~Scatterer();
00053 virtual Scatterer* CreateCopy() const=0;
00054 virtual const string GetClassName() const;
00055
00057 virtual int GetNbComponent() const=0;
00058
00065 virtual const ScatteringComponentList& GetScatteringComponentList() const=0;
00074 virtual string GetComponentName(const int i) const=0;
00075
00079 double GetX() const;
00083 double GetY() const;
00087 double GetZ() const;
00088
00097 double GetOccupancy() const ;
00098
00102 virtual void SetX(const double x);
00106 virtual void SetY(const double y);
00110 virtual void SetZ(const double z);
00119 virtual void SetOccupancy(const double occupancy) ;
00120
00124 operator string()const;
00126 virtual void Print() const=0;
00127
00131 virtual const string& GetColour()const;
00135 virtual const float* GetColourRGB()const;
00136
00142 virtual ostream& POVRayDescription(ostream &os,
00143 const bool noSymmetrics=false)const=0;
00153 virtual void GLInitDisplayList(const bool noSymmetrics=false,
00154 const double xMin=-.1,const double xMax=1.1,
00155 const double yMin=-.1,const double yMax=1.1,
00156 const double zMin=-.1,const double zMax=1.1)const=0;
00158 const RefinableObjClock& GetClockScatterer()const;
00160 void SetCrystal(const Crystal&);
00162 const Crystal& GetCrystal()const;
00163 protected:
00178 virtual void Update() const=0;
00180 virtual void InitRefParList()=0;
00185 virtual void InitRGBColour();
00187 const RefinableObjClock& GetClockScattCompList()const;
00189 CrystVector_double mXYZ;
00190
00195 double mOccupancy;
00197 string mColourName;
00199 float mColourRGB[3];
00201 RefinableObjClock mClockScatterer;
00203 mutable RefinableObjClock mClockScattCompList;
00208 const Crystal *mpCryst;
00209
00210 private:
00211 #ifdef __WX__CRYST__
00212 public:
00213 virtual WXCrystObjBasic* WXCreate(wxWindow*);
00214 friend class WXScatterer;
00215 #endif
00216 };
00217
00219 extern ObjRegistry<Scatterer> gScattererRegistry;
00220
00221
00222 }
00223
00224 #include "ObjCryst/Crystal.h"
00225
00226 #endif //_OBJCRYST_SCATTERER_H_