[658] | 1 | // This may look like C code, but it is really -*- C++ -*-
|
---|
| 2 | // Module PI : Peida Interactive PIDrawer3D PIDraw3DWdg
|
---|
| 3 | // Drawer et DrawWidget 3D R. Ansari 06/98
|
---|
| 4 | // LAL (Orsay) / IN2P3-CNRS DAPNIA/SPP (Saclay) / CEA
|
---|
| 5 |
|
---|
| 6 | #ifndef PIDRW3D_H_SEEN
|
---|
| 7 | #define PIDRW3D_H_SEEN
|
---|
| 8 |
|
---|
| 9 | #include "pisysdep.h"
|
---|
| 10 | #include "pidrawer.h"
|
---|
| 11 | #include "pigraph3d.h"
|
---|
| 12 |
|
---|
| 13 | #include PIBWDG_H
|
---|
| 14 |
|
---|
| 15 |
|
---|
| 16 | // ----------------- Traceur (Drawer) 3D -------------------
|
---|
| 17 |
|
---|
| 18 | class PIDrawer3D : public PIDrawer
|
---|
| 19 | {
|
---|
| 20 | public :
|
---|
| 21 | PIDrawer3D();
|
---|
| 22 | virtual ~PIDrawer3D();
|
---|
| 23 |
|
---|
| 24 | virtual void Set3DView_Obs(double xo, double yo, double zo, double teta, double phi, double psi,
|
---|
| 25 | double dax, double day, double co, double dco=0.2);
|
---|
| 26 | virtual void Set3DView(double xc, double yc, double zc, double xo, double yo, double zo,
|
---|
| 27 | double dax, double day, double dco=0.2, double psi=0.);
|
---|
| 28 | bool Get3DView(double& xc, double& yc, double& zc, double& xo, double& yo, double& zo,
|
---|
| 29 | double& teta, double& phi, double& psi, double& dax, double& day, double& co, double& dco);
|
---|
| 30 |
|
---|
| 31 | virtual PIGraphicUC* SetDrwWdg(PIBaseWdgGen* drw, int x0, int y0, int dx, int dy, PIGraphicGen* g);
|
---|
| 32 |
|
---|
| 33 | virtual void DrawAxes(PIGraphicUC* g);
|
---|
| 34 | virtual void Draw3DBoxe(PIGraphic3D* g3, double xx1, double xx2, double yy1, double yy2,
|
---|
| 35 | double zz1, double zz2, double xl1, double xl2,
|
---|
| 36 | double yl1, double yl2, double zl1, double zl2);
|
---|
| 37 |
|
---|
| 38 | double XMin3() const {return x3Min;}
|
---|
| 39 | double XMax3() const {return x3Max;}
|
---|
| 40 | double YMin3() const {return y3Min;}
|
---|
| 41 | double YMax3() const {return y3Max;}
|
---|
| 42 | double ZMin3() const {return z3Min;}
|
---|
| 43 | double ZMax3() const {return z3Max;}
|
---|
| 44 |
|
---|
| 45 | protected :
|
---|
| 46 | double xO, yO, zO; // Position observateur = camera
|
---|
| 47 | double xC, yC, zC; // Position centre du champ
|
---|
| 48 | double tO,fO,pO; // Orientation observateur (Teta, Phi, Psi, Angles d Euler)
|
---|
| 49 | double daxO, dayO; // Demi-ouverture de la camera suivant les deux axes de projection (xp/zp, yp/zp)
|
---|
| 50 | double lCO, dlCO; // Distance Camera-Centre du champ et profondeur de champ
|
---|
| 51 | bool v3D_obs; // Si defini par Set3DView_Obs
|
---|
| 52 | double x3Min, x3Max; // Pour delimiter le cube 3D
|
---|
| 53 | double y3Min, y3Max; // Pour delimiter le cube 3D
|
---|
| 54 | double z3Min, z3Max; // Pour delimiter le cube 3D
|
---|
| 55 | };
|
---|
| 56 |
|
---|
| 57 |
|
---|
| 58 | //------------------------------ Classe PIDrawer3D --------------------
|
---|
| 59 |
|
---|
| 60 | class PIDraw3DWdg : public PIBaseWdg {
|
---|
| 61 | public:
|
---|
| 62 | enum {ClassId = 5500};
|
---|
| 63 |
|
---|
| 64 | PIDraw3DWdg(PIContainerGen *par, char *nom,
|
---|
| 65 | int sx=100, int sy=100, int px=0, int py=0);
|
---|
| 66 | virtual ~PIDraw3DWdg();
|
---|
| 67 | virtual long kind() {return ClassId; }
|
---|
| 68 |
|
---|
| 69 |
|
---|
| 70 | virtual void Set3DView_Obs(double xo, double yo, double zo, double teta, double phi, double psi,
|
---|
| 71 | double dax, double day, double co, double dco=0.2);
|
---|
| 72 | virtual void Set3DView(double xc, double yc, double zc, double xo, double yo, double zo,
|
---|
| 73 | double dax, double day, double dco=0.2, double psi=0.);
|
---|
| 74 | bool Get3DView(double& xc, double& yc, double& zc, double& xo, double& yo, double& zo,
|
---|
| 75 | double& teta, double& phi, double& psi, double& dax, double& day, double& co, double& dco);
|
---|
| 76 |
|
---|
| 77 | virtual void Update3DView(); // Vue 3-D a partir de Drawer No 1
|
---|
| 78 |
|
---|
| 79 | inline void SetTitles(const char* tt=NULL, const char* tb=NULL)
|
---|
| 80 | { mBDrw->SetTitles(tt, tb); }
|
---|
| 81 | inline void SetTitles(string const & tt, string const & tb)
|
---|
| 82 | { mBDrw->SetTitles(tt, tb); }
|
---|
| 83 |
|
---|
| 84 | int AddDrawer3D(PIDrawer3D*, bool ad=false); // Ajoute un Drawer
|
---|
| 85 |
|
---|
| 86 | // Pour tenir trace des Drawers-3D qui sont detruits
|
---|
| 87 | virtual void RemoveDrawer(int id);
|
---|
| 88 | virtual void DeleteDrawers();
|
---|
| 89 |
|
---|
| 90 | virtual void But1Press(int x, int y);
|
---|
| 91 |
|
---|
| 92 | virtual void But2Press(int x, int y);
|
---|
| 93 | virtual void But2Release(int x, int y);
|
---|
| 94 | virtual void Ptr2Move(int x, int y);
|
---|
| 95 |
|
---|
| 96 | virtual void But3Press(int x, int y);
|
---|
| 97 | virtual void But3Release(int x, int y);
|
---|
| 98 | virtual void Ptr3Move(int x, int y);
|
---|
| 99 |
|
---|
| 100 | virtual void Keyboard(int key, PIKeyModifier kmod);
|
---|
| 101 | virtual void PasteSelection(unsigned int typ, void *pdata, unsigned int l);
|
---|
| 102 |
|
---|
| 103 |
|
---|
| 104 | protected :
|
---|
| 105 | virtual void SetDrawers3DView();
|
---|
| 106 | virtual void DrawXYZAxes();
|
---|
| 107 |
|
---|
| 108 | PIElDrawer* mBDrw; // Objet traceur d'elements de fond
|
---|
| 109 | int mPx, mPy; // Position pointeur - Bouton-1
|
---|
| 110 |
|
---|
| 111 | bool vfixed; // SetView fait ou pas
|
---|
| 112 | list<int> m3DrIl; // Liste des Id drawers 3D
|
---|
| 113 | PIGraphic3D* mGr3d; // PIGraphic3D courante
|
---|
| 114 | int lPx, lPy; // dernier position pointeur
|
---|
| 115 | PIColors lCol; // Couleur
|
---|
| 116 | double cTeta, cPhi, cUlen; // Pour garder valeurs avant rotation, Unite de longeur
|
---|
| 117 | double cXc, cYc, cZc; // Pour garder position du centre de champ
|
---|
| 118 | double clCO, cDax, cDay; // Pour garder les valeurs avant Zoom In/Out
|
---|
| 119 | bool rOfg; // si Vrai on fait tourner l'objet et pas la camera
|
---|
| 120 | bool axfg; // si Vrai on trace les axes
|
---|
| 121 | bool skcfg; // si Vrai click-2 au centre -> rotation objet
|
---|
| 122 | };
|
---|
| 123 |
|
---|
| 124 | #endif
|
---|