00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018 #ifndef _VFN_WX_CRYSTAL_H_
00019 #define _VFN_WX_CRYSTAL_H_
00020
00021 #include "wx/glcanvas.h"
00022
00023 #include "wxCryst/wxRefinableObj.h"
00024 #include "ObjCryst/Crystal.h"
00025
00026 namespace ObjCryst
00027 {
00028 class WXGLCrystalCanvas;
00029
00031 class WXCrystal: public WXRefinableObj
00032 {
00033 public:
00034 WXCrystal(wxWindow *parent, Crystal*);
00035 virtual void CrystUpdate();
00037 void UpdateGL(const bool onlyIndependentAtoms=false,
00038 const double xMin=-.1,const double xMax=1.1,
00039 const double yMin=-.1,const double yMax=1.1,
00040 const double zMin=-.1,const double zMax=1.1);
00043 int GrabCrystalGLDisplayList()const;
00044 void ReleaseCrystalGLDisplayList()const;
00046 void OnMenuCrystalGL(wxCommandEvent & WXUNUSED(event));
00048 void NotifyCrystalGLDelete();
00049 void OnMenuSaveCIF(wxCommandEvent & WXUNUSED(event));
00050 void OnMenuSaveText(wxCommandEvent & WXUNUSED(event));
00051 void OnMenuAddScattPowAtom(wxCommandEvent & WXUNUSED(event));
00052 void OnMenuRemoveScattPow(wxCommandEvent & WXUNUSED(event));
00053 void OnMenuAddScatterer(wxCommandEvent & event);
00054 void OnMenuRemoveScatterer(wxCommandEvent & WXUNUSED(event));
00055 void OnMenuAddAntiBumpDist(wxCommandEvent & WXUNUSED(event));
00056 bool OnChangeName(const int id);
00057 private:
00058 Crystal* mpCrystal;
00060 WXFieldRefPar* mpFieldLatticeA;
00061 WXFieldRefPar* mpFieldLatticeB;
00062 WXFieldRefPar* mpFieldLatticeC;
00063 WXFieldRefPar* mpFieldLatticeAlpha;
00064 WXFieldRefPar* mpFieldLatticeBeta;
00065 WXFieldRefPar* mpFieldLatticeGamma;
00067 WXFieldName* mpFieldSpacegroup;
00069 WXRegistry<Scatterer>* mpWXScattererRegistry;
00071 WXRegistry<ScatteringPower>* mpWXScatteringPowerRegistry;
00072
00073
00075
00077
00079
00080 DECLARE_EVENT_TABLE()
00081 };
00082
00084 class WXGLCrystalCanvas : public wxGLCanvas
00085 {
00086 public:
00087 WXGLCrystalCanvas(WXCrystal *wxcryst,
00088 wxFrame *parent, wxWindowID id=-1,
00089 const wxPoint &pos=wxDefaultPosition,
00090 const wxSize &size=wxDefaultSize);
00091 ~WXGLCrystalCanvas();
00092 void OnExit(wxCommandEvent &event);
00093 void OnPaint(wxPaintEvent &event);
00094 void OnSize(wxSizeEvent& event);
00095 void OnEraseBackground(wxEraseEvent& event);
00096 void OnKeyDown(wxKeyEvent& event);
00097 void OnKeyUp(wxKeyEvent& event);
00098 void OnEnterWindow( wxMouseEvent& event );
00099 void OnMouse( wxMouseEvent& event );
00101 void OnUpdate(wxCommandEvent & WXUNUSED(event));
00102 void CrystUpdate();
00103 void OnChangeLimits(wxCommandEvent & WXUNUSED(event));
00104 private:
00105 void InitGL();
00107 WXCrystal* mpWXCrystal;
00109 bool mIsGLInit;
00111 float mQuat [4];
00113 float mTrackBallLastX,mTrackBallLastY;
00115 float mDist;
00117 float mViewAngle;
00119 wxMenu* mpPopUpMenu;
00120 float mXmin,mXmax,mYmin,mYmax,mZmin,mZmax;
00121 DECLARE_EVENT_TABLE()
00122 };
00123
00124
00125 }
00126
00127 #endif