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
|
---|