Blame view

qtSpectrumDisplay.cpp 4.95 KB
39a7d6e9   dmayerich   Added dialog supp...
1
2
  #include <QtGui>

  #include <QtOpenGL/QtOpenGL>

0c9bf8ae   dmayerich   Case-sensitive er...
3
4
  #include <GL/glu.h>

  

39a7d6e9   dmayerich   Added dialog supp...
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
  #include <math.h>

  

  #include "qtSpectrumDisplay.h"

  

  qtSpectrumDisplay::qtSpectrumDisplay(QWidget *parent)

   : QGLWidget(parent)

  {

   object = 0;

   xRot = 0;

   yRot = 0;

   zRot = 0;

  

   qtGreen = QColor::fromCmykF(0.40, 0.0, 1.0, 0.0);

   qtPurple = QColor::fromCmykF(0.39, 0.39, 0.0, 0.0);

  }

  

  qtSpectrumDisplay::~qtSpectrumDisplay()

  {

   makeCurrent();

   glDeleteLists(object, 1);

  }

  

  QSize qtSpectrumDisplay::minimumSizeHint() const

  {

   return QSize(50, 50);

  }

  

  QSize qtSpectrumDisplay::sizeHint() const

  {

   return QSize(400, 400);

  }

  

  void qtSpectrumDisplay::initializeGL()

  {

   qglClearColor(qtPurple.dark());

   //object = makeObject();

   glShadeModel(GL_FLAT);

   glEnable(GL_DEPTH_TEST);

   glEnable(GL_CULL_FACE);

  }

  

  void qtSpectrumDisplay::printWavenumber(int xPos)

  {

   int viewParams[4];

   glGetIntegerv(GL_VIEWPORT, viewParams);

  

   float a = (float)xPos/(float)viewParams[2];

  

   int wn = a * (nuMax - nuMin) + nuMin;

   cout<<wn<<endl;
  
  

  

  }

  

  void qtSpectrumDisplay::paintGL()

  {
      //prepare the projection (orthographic, bounded by spectral values)

      glMatrixMode(GL_PROJECTION);

      glLoadIdentity();

      gluOrtho2D(nuMin, nuMax, aMin, aMax);

      glMatrixMode(GL_MODELVIEW);

      glLoadIdentity();
  
      //clear the screen
      glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);

  
      //set the line width

      glLineWidth(2);
  
      //draw the simulated spectrum (in white)

      if(dispSimSpec)

      {

       glColor3f(1.0, 1.0, 1.0);

       glBegin(GL_LINE_STRIP);

       for(unsigned int i=0; i<SimSpectrum.size(); i++)

           glVertex2f(SimSpectrum[i].nu, SimSpectrum[i].A);

       glEnd();

      }
      //draw the reference spectrum in gray

      if(dispRefSpec && RefSpectrum.size() > 0)

      {

       glColor3f(0.5, 0.5, 0.5);

       glBegin(GL_LINE_STRIP);

       float nu;

       for(unsigned int i=0; i<RefSpectrum[currentSpec].size(); i++)

       {

           nu = RefSpectrum[currentSpec][i].nu;

           glVertex2f(nu, RefSpectrum[currentSpec][i].A + nu * refSlope);

0c9bf8ae   dmayerich   Case-sensitive er...
94
       }

39a7d6e9   dmayerich   Added dialog supp...
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
       glEnd();

      }

  
      //draw the material properties
  
      //change the viewport properties (materials are plotted on a different scale)
  
      //compute the maximum k and n
      int nSamples = MaterialList[currentMaterial].eta.size();
      float maxK = 0.0;
      float maxN = 0.0;
      float thisN, thisK;
      for(int i=0; i<nSamples; i++)
      {
          thisN = fabs(MaterialList[currentMaterial].eta[i].real() - 1.49);
          if(thisN > maxN)
              maxN = thisN;
          thisK = fabs(MaterialList[currentMaterial].eta[i].imag());
          if(thisK > maxK)
              thisK = maxK;
      }
      cout<<maxN<<"---------"<<maxK<<endl;
  
  
      glMatrixMode(GL_PROJECTION);

      glLoadIdentity();

      gluOrtho2D(nuMin, nuMax, aMin, aMax);
  

  

      float nu;

      //display absorbance

      if(dispMatK)

      {

  

       glColor3f(1.0, 0.0, 0.0);

       glBegin(GL_LINE_STRIP);

       for(int i=0; i<nSamples; i++){

           nu = MaterialList[currentMaterial].nu[i];

           glVertex2f(nu, MaterialList[currentMaterial].eta[i].imag() * dispScaleK);

0c9bf8ae   dmayerich   Case-sensitive er...
134
       }

39a7d6e9   dmayerich   Added dialog supp...
135
136
137
138
139
140
141
142
       glEnd();

      }

      if(dispSimK)

      {

       glColor3f(1.0, 1.0, 0.0);

       glBegin(GL_LINE_STRIP);

       for(unsigned int i=0; i<EtaK.size(); i++){

           glVertex2f(EtaK[i].nu, EtaK[i].A * dispScaleK);

0c9bf8ae   dmayerich   Case-sensitive er...
143
       }

39a7d6e9   dmayerich   Added dialog supp...
144
145
146
147
148
149
150
151
152
153
154
       glEnd();

  }

  

  //display refractive index (real)

  if(dispMatN)

  {

   glColor3f(0.0, 1.0, 0.0);

   glBegin(GL_LINE_STRIP);

   for(int i=0; i<nSamples; i++){

       nu = MaterialList[currentMaterial].nu[i];

       glVertex2f(nu, (MaterialList[currentMaterial].eta[i].real() - baseIR) * dispScaleN);

0c9bf8ae   dmayerich   Case-sensitive er...
155
   }

39a7d6e9   dmayerich   Added dialog supp...
156
157
158
159
160
161
162
163
164
165
   glEnd();

  }

  if(dispSimN)

  {

   glColor3f(0.0, 1.0, 1.0);

   glBegin(GL_LINE_STRIP);

   for(unsigned int i=0; i<EtaN.size(); i++)

       glVertex2f(EtaN[i].nu, (EtaN[i].A - baseIR) * dispScaleN);

   glEnd();

  }

0c9bf8ae   dmayerich   Case-sensitive er...
166
  

0c9bf8ae   dmayerich   Case-sensitive er...
167
  

39a7d6e9   dmayerich   Added dialog supp...
168
169
170
  glCallList(object);
  
  glFlush();
0c9bf8ae   dmayerich   Case-sensitive er...
171
  

39a7d6e9   dmayerich   Added dialog supp...
172
173
174
  //display the values at the mouse location
  renderText(50, 50, "test");
  }

0c9bf8ae   dmayerich   Case-sensitive er...
175
  

39a7d6e9   dmayerich   Added dialog supp...
176
177
178
179
  void qtSpectrumDisplay::resizeGL(int width, int height)

  {

   int side = qMin(width, height);

   glViewport(0, 0, width, height);

0c9bf8ae   dmayerich   Case-sensitive er...
180
  

39a7d6e9   dmayerich   Added dialog supp...
181
  }

0c9bf8ae   dmayerich   Case-sensitive er...
182
  

39a7d6e9   dmayerich   Added dialog supp...
183
184
185
  void qtSpectrumDisplay::mousePressEvent(QMouseEvent *event)

  {

   lastPos = event->pos();

0c9bf8ae   dmayerich   Case-sensitive er...
186
  

39a7d6e9   dmayerich   Added dialog supp...
187
   if(event->buttons() & Qt::LeftButton)

0c9bf8ae   dmayerich   Case-sensitive er...
188
   {

39a7d6e9   dmayerich   Added dialog supp...
189
190
       int wn = 0;

       printWavenumber(event->x());

0c9bf8ae   dmayerich   Case-sensitive er...
191
   }

39a7d6e9   dmayerich   Added dialog supp...
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
  }

  

  void qtSpectrumDisplay::mouseMoveEvent(QMouseEvent *event)

  {

   int dx = event->x() - lastPos.x();

   int dy = event->y() - lastPos.y();

  

   lastPos = event->pos();

  }

  

  void qtSpectrumDisplay::quad(GLdouble x1, GLdouble y1, GLdouble x2, GLdouble y2,

                   GLdouble x3, GLdouble y3, GLdouble x4, GLdouble y4)

  {

   qglColor(qtGreen);

  

   glVertex3d(x1, y1, -0.05);

   glVertex3d(x2, y2, -0.05);

   glVertex3d(x3, y3, -0.05);

   glVertex3d(x4, y4, -0.05);

  

   glVertex3d(x4, y4, +0.05);

   glVertex3d(x3, y3, +0.05);

   glVertex3d(x2, y2, +0.05);

   glVertex3d(x1, y1, +0.05);

  }

  

  void qtSpectrumDisplay::normalizeAngle(int *angle)

  {

   while (*angle < 0)

       *angle += 360 * 16;

   while (*angle > 360 * 16)

       *angle -= 360 * 16;

  }