Commit 39a7d6e9b9e808e07fe73c37a4d5b8462ab7eaf4
1 parent
4385ea8c
Added dialog support and display of distortion maps.
Showing
11 changed files
with
395 additions
and
481 deletions
Show diff stats
... | ... | @@ -9,3 +9,7 @@ RTS (my personal codebase) https://github.com/dmayerich/RTS |
9 | 9 | CUDA http://www.nvidia.com/object/cuda_home_new.html |
10 | 10 | |
11 | 11 | If CMake is unable to find these, make sure to specify their locations. |
12 | + | |
13 | +Known Bugs in Source Version | |
14 | +--------------------------------- | |
15 | +*) Simulation of the spectrum at the shortest wavelength is returning NaN in Linux. | ... | ... |
SimulateSpectrum.cpp
... | ... | @@ -2,7 +2,8 @@ |
2 | 2 | #include <complex> |
3 | 3 | #include <iostream> |
4 | 4 | #include <fstream> |
5 | -#include "globals.h" | |
5 | +#include "globals.h" | |
6 | +#include <QProgressDialog> | |
6 | 7 | #include <stdlib.h> |
7 | 8 | //#include "cufft.h" |
8 | 9 | using namespace std; |
... | ... | @@ -137,7 +138,7 @@ void Legendre(double* P, double x, int Nl) |
137 | 138 | for(int l = 2; l < Nl; l++) |
138 | 139 | { |
139 | 140 | P[l] = ((2*l - 1)*x*P[l-1] - (l - 1)*P[l-2])/l; |
140 | - } | |
141 | + } | |
141 | 142 | |
142 | 143 | } |
143 | 144 | |
... | ... | @@ -190,7 +191,7 @@ void computeCondenserAlpha(double* alpha, int Nl, double cAngleI, double cAngleO |
190 | 191 | |
191 | 192 | } |
192 | 193 | |
193 | -complex<double> integrateUs(double r, double lambda, complex<double> eta, | |
194 | +complex<double> integrateUs(double r, double lambda, complex<double> eta, | |
194 | 195 | double cAngleI, double cAngleO, double oAngleI, double oAngleO, double M = 2*pi) |
195 | 196 | { |
196 | 197 | /*This function integrates the incident field of magnitude M in the far zone |
... | ... | @@ -223,7 +224,7 @@ complex<double> integrateUs(double r, double lambda, complex<double> eta, |
223 | 224 | |
224 | 225 | //store the index of refraction; |
225 | 226 | complex<double> IR(eta.real(), eta.imag()); |
226 | - | |
227 | + | |
227 | 228 | //compute the scattering coefficients |
228 | 229 | computeB(B, r, IR, lambda, Nl); |
229 | 230 | |
... | ... | @@ -248,8 +249,8 @@ complex<double> integrateUs(double r, double lambda, complex<double> eta, |
248 | 249 | } |
249 | 250 | c = (2*pi)/(2.0 * l + 1.0); |
250 | 251 | Us += c * alpha * beta * B[l] * M; |
251 | - | |
252 | - | |
252 | + | |
253 | + | |
253 | 254 | } |
254 | 255 | free(PcNAo); |
255 | 256 | free(PcNAi); |
... | ... | @@ -269,7 +270,7 @@ void pointSpectrum() |
269 | 270 | |
270 | 271 | double dNu = 2.0f; |
271 | 272 | double lambda; |
272 | - | |
273 | + | |
273 | 274 | //compute the angles based on NA |
274 | 275 | double cAngleI = asin(cNAi); |
275 | 276 | double cAngleO = asin(cNAo); |
... | ... | @@ -278,7 +279,7 @@ void pointSpectrum() |
278 | 279 | |
279 | 280 | //implement a reflection-mode system if necessary |
280 | 281 | if(opticsMode == ReflectionOpticsType){ |
281 | - | |
282 | + | |
282 | 283 | //set the condenser to match the objective |
283 | 284 | cAngleI = oAngleI; |
284 | 285 | cAngleO = oAngleO; |
... | ... | @@ -293,7 +294,7 @@ void pointSpectrum() |
293 | 294 | double I0 = Ui.real() * Ui.real() + Ui.imag() * Ui.imag(); |
294 | 295 | I0 *= scaleI0; |
295 | 296 | |
296 | - | |
297 | + | |
297 | 298 | |
298 | 299 | //double I; |
299 | 300 | SpecPair temp; |
... | ... | @@ -316,7 +317,7 @@ void pointSpectrum() |
316 | 317 | Us = integrateUs(radius, lambda, eta, cAngleI, cAngleO, oAngleI, oAngleO, 2*pi); |
317 | 318 | U = Us + Ui; |
318 | 319 | double I = U.real() * U.real() + U.imag() * U.imag(); |
319 | - | |
320 | + | |
320 | 321 | temp.nu = nu; |
321 | 322 | |
322 | 323 | //set the spectrum value based on the current display type |
... | ... | @@ -327,8 +328,8 @@ void pointSpectrum() |
327 | 328 | |
328 | 329 | if(dispNormalize) |
329 | 330 | vecLen += temp.A * temp.A; |
330 | - | |
331 | - SimSpectrum.push_back(temp); | |
331 | + | |
332 | + SimSpectrum.push_back(temp); | |
332 | 333 | } |
333 | 334 | vecLen = sqrt(vecLen); |
334 | 335 | |
... | ... | @@ -352,8 +353,10 @@ void updateSpectrum(double* I, double I0, int n) |
352 | 353 | //set the spectrum value based on the current display type |
353 | 354 | if(dispSimType == AbsorbanceSpecType) |
354 | 355 | temp.A = -log10(I[i]/I0); |
355 | - else | |
356 | - temp.A = I[i]; | |
356 | + else | |
357 | + { | |
358 | + temp.A = I[i]; | |
359 | + } | |
357 | 360 | |
358 | 361 | SimSpectrum.push_back(temp); |
359 | 362 | } |
... | ... | @@ -369,7 +372,7 @@ void computeCassegrainAngles(double& cAngleI, double& cAngleO, double& oAngleI, |
369 | 372 | |
370 | 373 | //implement a reflection-mode system if necessary |
371 | 374 | if(opticsMode == ReflectionOpticsType){ |
372 | - | |
375 | + | |
373 | 376 | //set the condenser to match the objective |
374 | 377 | cAngleI = oAngleI; |
375 | 378 | cAngleO = oAngleO; |
... | ... | @@ -410,7 +413,7 @@ void computeBArray(complex<double>* B, int Nl, int nLambda) |
410 | 413 | eta = complex<double>(baseIR, 0.0); |
411 | 414 | |
412 | 415 | //allocate memory for the scattering coefficients |
413 | - //complex<float>* B = (complex<float>*)malloc(sizeof(complex<float>)*Nl); | |
416 | + //complex<float>* B = (complex<float>*)malloc(sizeof(complex<float>)*Nl); | |
414 | 417 | |
415 | 418 | complex<double> IR(eta.real(), eta.imag()); |
416 | 419 | computeB(&B[i * Nl], radius, IR, Lambda[i], Nl); |
... | ... | @@ -419,7 +422,7 @@ void computeBArray(complex<double>* B, int Nl, int nLambda) |
419 | 422 | |
420 | 423 | void computeOpticalParameters(double& cAngleI, double& cAngleO, double& oAngleI, double& oAngleO, double& I0, double* alpha, int Nl) |
421 | 424 | { |
422 | - computeCassegrainAngles(cAngleI, cAngleO, oAngleI, oAngleO); | |
425 | + computeCassegrainAngles(cAngleI, cAngleO, oAngleI, oAngleO); | |
423 | 426 | |
424 | 427 | //evaluate the incident field intensity |
425 | 428 | I0 = 0.0; |
... | ... | @@ -437,7 +440,7 @@ void gpuDetectorSpectrum(int numSamples) |
437 | 440 | //integrate across the objective aperature and calculate the resulting intensity on a detector |
438 | 441 | PD.StartTimer(SIMULATE_SPECTRUM); |
439 | 442 | //clear the previous spectrum |
440 | - SimSpectrum.clear(); | |
443 | + SimSpectrum.clear(); | |
441 | 444 | |
442 | 445 | //compute Nl (maximum order of the spectrum) |
443 | 446 | int Nl = computeNl(); |
... | ... | @@ -448,11 +451,11 @@ void gpuDetectorSpectrum(int numSamples) |
448 | 451 | |
449 | 452 | //allocate space for a list of wavelengths |
450 | 453 | int nLambda = EtaK.size(); |
451 | - | |
454 | + | |
452 | 455 | //allocate space for the 2D array (Nl x nu) of scattering coefficients |
453 | 456 | complex<double>* B = (complex<double>*)malloc(sizeof(complex<double>) * Nl * nLambda); |
454 | 457 | computeBArray(B, Nl, nLambda); |
455 | - | |
458 | + | |
456 | 459 | |
457 | 460 | //allocate temporary space for the spectrum |
458 | 461 | double* I = (double*)malloc(sizeof(double) * EtaK.size()); |
... | ... | @@ -500,33 +503,37 @@ double absorbanceDistortion(){ |
500 | 503 | |
501 | 504 | double intensityDistortion(){ |
502 | 505 | |
503 | - //compute the magnitude of the spectrum | |
506 | + //compute the mean intensity of the spectrum | |
504 | 507 | double sumSim = 0.0; |
505 | 508 | for(unsigned int i=0; i<SimSpectrum.size(); i++) |
506 | 509 | { |
507 | - sumSim += SimSpectrum[i].A * SimSpectrum[i].A; | |
510 | + sumSim += pow(SimSpectrum[i].A, 2); | |
508 | 511 | } |
509 | 512 | double magSim = sqrt(sumSim); |
510 | 513 | |
511 | 514 | //compute the distortion (MSE from the mean) |
512 | - double sumSE = 0.0; | |
515 | + double proj = 0.0; | |
513 | 516 | for(unsigned int i=0; i<SimSpectrum.size(); i++) |
514 | 517 | { |
515 | - sumSE += (SimSpectrum[i].A/magSim) * (1.0/SimSpectrum.size()); | |
518 | + proj += (SimSpectrum[i].A/magSim) * (1.0/SimSpectrum.size()); | |
516 | 519 | } |
517 | - double MSE = sumSE; | |
520 | + double error = proj; | |
518 | 521 | |
519 | - return MSE; | |
522 | + return error; | |
520 | 523 | } |
521 | 524 | |
522 | -void MinimizeDistortion(){ | |
525 | +void DistortionMap(float* distortionMap, int nSteps){ | |
523 | 526 | ofstream outFile("distortion.txt"); |
524 | 527 | |
525 | - //set the parameters for the distortion simulation | |
526 | - double step = 0.001; | |
528 | + //set the parameters for the distortion simulation | |
529 | + double range = 0.4; | |
530 | + double step = (range)/(nSteps-1); | |
527 | 531 | |
528 | 532 | oNAi = 0.2; |
529 | - oNAo = 0.5; | |
533 | + oNAo = 0.5; | |
534 | + | |
535 | + double startNAi = 0.0; | |
536 | + double startNAo = 0.3; | |
530 | 537 | |
531 | 538 | //compute the optical parameters |
532 | 539 | //compute Nl (maximum order of the spectrum) |
... | ... | @@ -534,7 +541,7 @@ void MinimizeDistortion(){ |
534 | 541 | |
535 | 542 | double* alpha = (double*)malloc(sizeof(double)*(Nl + 1)); |
536 | 543 | double cAngleI, cAngleO, oAngleI, oAngleO, I0; |
537 | - | |
544 | + | |
538 | 545 | //allocate space for a list of wavelengths |
539 | 546 | int nLambda = EtaK.size(); |
540 | 547 | |
... | ... | @@ -546,20 +553,29 @@ void MinimizeDistortion(){ |
546 | 553 | complex<double>* B = (complex<double>*)malloc(sizeof(complex<double>) * Nl * nLambda); |
547 | 554 | computeBArray(B, Nl, nLambda); |
548 | 555 | |
549 | - | |
556 | + QProgressDialog progress("Computing distortion map...", "Stop", 0, nSteps * nSteps); | |
557 | + progress.setWindowModality(Qt::WindowModal); | |
550 | 558 | |
551 | 559 | double D; |
552 | - double e = 0.001; | |
553 | - for(double i=0.0; i<=oNAo-step; i+=step) | |
554 | - { | |
555 | - | |
556 | - for(double o=oNAi+step; o<=1.0; o+=step) | |
557 | - { | |
558 | - | |
559 | - | |
560 | + double e = 0.001; | |
561 | + int i, o; | |
562 | + for(i=0; i<nSteps; i++) | |
563 | + { | |
564 | + for(o=0; o<nSteps; o++) | |
565 | + { | |
566 | + //update the progress bar and check for an exit | |
567 | + progress.setValue(i * nSteps + o); | |
568 | + if (progress.wasCanceled()) | |
569 | + break; | |
570 | + | |
571 | + //set the current optical parameters | |
572 | + cNAi = startNAi + i * step; | |
573 | + cNAo = startNAo + o * step; | |
574 | + //cout<<cNAi<<" "<<cNAo<<endl; | |
575 | + | |
560 | 576 | //set the current optical parameters |
561 | - cNAi = i; | |
562 | - cNAo = o; | |
577 | + //cNAi = i; | |
578 | + //cNAo = o; | |
563 | 579 | |
564 | 580 | //compute the optical parameters |
565 | 581 | computeOpticalParameters(cAngleI, cAngleO, oAngleI, oAngleO, I0, alpha, Nl); |
... | ... | @@ -570,22 +586,26 @@ void MinimizeDistortion(){ |
570 | 586 | |
571 | 587 | if(dispSimType == AbsorbanceSpecType) |
572 | 588 | { |
573 | - if(i + e >= o || i + e >= oNAo || oNAi + e >= o || oNAi + e >= oNAo) | |
574 | - D = 0.0; | |
589 | + if(cNAi >= cNAo || cNAi >= oNAo || oNAi >= cNAo || oNAi >= oNAo) | |
590 | + D = -1.0; | |
575 | 591 | else |
576 | 592 | D = absorbanceDistortion(); |
577 | 593 | } |
578 | 594 | else |
579 | 595 | { |
580 | - if(i >= o || oNAi >= oNAo) | |
581 | - D=0; | |
596 | + if(cNAi >= cNAo || oNAi >= oNAo) | |
597 | + D = -1.0; | |
582 | 598 | else |
583 | 599 | D = intensityDistortion(); |
584 | - } | |
600 | + } | |
601 | + distortionMap[o * nSteps + i] = D; | |
585 | 602 | outFile<<D<<" "; |
586 | 603 | } |
587 | 604 | outFile<<endl; |
588 | - cout<<i<<endl; | |
589 | - } | |
605 | + //cout<<i<<endl; | |
606 | + } | |
607 | + | |
608 | + progress.setValue(nSteps * nSteps); | |
609 | + | |
590 | 610 | outFile.close(); |
591 | -} | |
592 | 611 | \ No newline at end of file |
612 | +} | ... | ... |
cudaKK.h
... | ... | @@ -54,16 +54,18 @@ void cudaKramersKronig(double* cpuN, double* cpuK, int nVals, double nuStart, do |
54 | 54 | HANDLE_ERROR(cudaFree(gpuN)); |
55 | 55 | } |
56 | 56 | |
57 | -__global__ void devComputeSpectrum(double* I, double2* B, double* alpha, int Nl, | |
58 | - int nSamples, double oThetaI, double oThetaO, double cThetaI, double cThetaO) | |
57 | +__global__ void devComputeSpectrum(double* I, double2* B, double* alpha, int Nl, | |
58 | + int nSamples, int nLambda, double oThetaI, double oThetaO, double cThetaI, double cThetaO) | |
59 | 59 | { |
60 | - int i = blockIdx.x * blockDim.x + threadIdx.x; | |
60 | + int i = blockIdx.x * blockDim.x + threadIdx.x; | |
61 | + if(i >= nLambda-1) | |
62 | + return; | |
61 | 63 | |
62 | 64 | //compute the delta-theta value |
63 | 65 | double dTheta = (oThetaO - oThetaI)/nSamples; |
64 | 66 | |
65 | 67 | //allocate space for the Legendre polynomials |
66 | - double Ptheta[2]; | |
68 | + double Ptheta[2]; | |
67 | 69 | |
68 | 70 | double cosTheta, theta; |
69 | 71 | cuDoubleComplex Us; |
... | ... | @@ -122,7 +124,7 @@ __global__ void devComputeSpectrum(double* I, double2* B, double* alpha, int Nl, |
122 | 124 | |
123 | 125 | complexFac = cMult(B[Nl * i + l], exp_numer); |
124 | 126 | complexFac = cMult(complexFac, iL); |
125 | - | |
127 | + | |
126 | 128 | |
127 | 129 | //combine the real and complex components |
128 | 130 | UsSample = cMult(complexFac, realFac); |
... | ... | @@ -131,7 +133,7 @@ __global__ void devComputeSpectrum(double* I, double2* B, double* alpha, int Nl, |
131 | 133 | //increment the imaginary exponent i^l |
132 | 134 | iL = cMult(iL, imag); |
133 | 135 | |
134 | - | |
136 | + | |
135 | 137 | } |
136 | 138 | |
137 | 139 | //sum the scattered and incident fields |
... | ... | @@ -158,8 +160,9 @@ void cudaComputeSpectrum(double* cpuI, double* cpuB, double* cpuAlpha, |
158 | 160 | HANDLE_ERROR(cudaMemcpy(gpuAlpha, cpuAlpha, sizeof(double) * Nl, cudaMemcpyHostToDevice)); |
159 | 161 | |
160 | 162 | double* gpuI; |
161 | - HANDLE_ERROR(cudaMalloc(&gpuI, sizeof(double) * nLambda)); | |
162 | - | |
163 | + HANDLE_ERROR(cudaMalloc(&gpuI, sizeof(double) * nLambda)); | |
164 | + HANDLE_ERROR(cudaMemset(gpuI, 0, sizeof(double) * nLambda)); | |
165 | + | |
163 | 166 | |
164 | 167 | //call the kernel to compute the spectrum |
165 | 168 | dim3 block(BLOCK_SIZE*BLOCK_SIZE); |
... | ... | @@ -167,15 +170,17 @@ void cudaComputeSpectrum(double* cpuI, double* cpuB, double* cpuAlpha, |
167 | 170 | |
168 | 171 | //devComputeSpectrum |
169 | 172 | devComputeSpectrum<<<grid, block>>>(gpuI, (double2*)gpuB, gpuAlpha, Nl, |
170 | - nSamples, oThetaI, oThetaO, cThetaI, cThetaO); | |
173 | + nSamples, nLambda, oThetaI, oThetaO, cThetaI, cThetaO); | |
171 | 174 | |
172 | 175 | HANDLE_ERROR(cudaMemcpy(cpuI, gpuI, sizeof(double) * nLambda, cudaMemcpyDeviceToHost)); |
173 | 176 | |
177 | + //printf("Final array value: %f\n", cpuI[nLambda-1]); | |
178 | + | |
174 | 179 | HANDLE_ERROR(cudaFree(gpuB)); |
175 | 180 | HANDLE_ERROR(cudaFree(gpuAlpha)); |
176 | 181 | HANDLE_ERROR(cudaFree(gpuI)); |
177 | 182 | |
178 | - | |
179 | 183 | |
180 | 184 | |
181 | -} | |
182 | 185 | \ No newline at end of file |
186 | + | |
187 | +} | ... | ... |
globals.h
... | ... | @@ -4,7 +4,7 @@ |
4 | 4 | #include <vector> |
5 | 5 | #include <string> |
6 | 6 | #include <iostream> |
7 | -#include "PerformanceData.h" | |
7 | +#include "PerformanceData.h" | |
8 | 8 | #include <complex> |
9 | 9 | using namespace std; |
10 | 10 | |
... | ... | @@ -102,9 +102,13 @@ extern int maxFitIter; |
102 | 102 | void EstimateMaterial(); |
103 | 103 | extern double scaleI0; |
104 | 104 | extern double refSlope; |
105 | - | |
105 | + | |
106 | + | |
107 | +//distortion maps | |
106 | 108 | double ComputeDistortion(); |
107 | -void MinimizeDistortion(); | |
109 | +void DistortionMap(float* distortionMap, int nSteps); | |
110 | + | |
111 | + | |
108 | 112 | |
109 | 113 | |
110 | -#endif | |
111 | 114 | \ No newline at end of file |
115 | +#endif | ... | ... |
interactivemie.cpp
1 | 1 | #include "interactivemie.h" |
2 | +#include <stdlib.h> | |
3 | + | |
4 | +qtDistortionDialog* distortionDialog; | |
2 | 5 | |
3 | 6 | InteractiveMie::InteractiveMie(QWidget *parent, Qt::WFlags flags) |
4 | 7 | : QMainWindow(parent, flags) |
... | ... | @@ -9,4 +12,11 @@ InteractiveMie::InteractiveMie(QWidget *parent, Qt::WFlags flags) |
9 | 12 | InteractiveMie::~InteractiveMie() |
10 | 13 | { |
11 | 14 | updating = false; |
15 | +} | |
16 | + | |
17 | +void InteractiveMie::closeEvent(QCloseEvent *event) | |
18 | +{ | |
19 | + cout<<"Exiting"<<endl; | |
20 | + exit(0); | |
21 | + | |
12 | 22 | } | ... | ... |
interactivemie.h
... | ... | @@ -5,16 +5,20 @@ |
5 | 5 | #include <QDragEnterEvent> |
6 | 6 | #include <qfiledialog.h> |
7 | 7 | #include <qinputdialog.h> |
8 | -#include "ui_interactivemie.h" | |
9 | -#include "globals.h" | |
10 | - | |
8 | +#include "ui_interactivemie.h" | |
9 | +#include "qtDistortionDialog.h" | |
10 | +#include "globals.h" | |
11 | + | |
12 | +extern qtDistortionDialog* distortionDialog; | |
13 | + | |
11 | 14 | class InteractiveMie : public QMainWindow |
12 | 15 | { |
13 | 16 | Q_OBJECT |
14 | 17 | |
15 | 18 | public: |
16 | 19 | InteractiveMie(QWidget *parent = 0, Qt::WFlags flags = 0); |
17 | - ~InteractiveMie(); | |
20 | + ~InteractiveMie(); | |
21 | + void closeEvent(QCloseEvent *event); | |
18 | 22 | bool updating; |
19 | 23 | |
20 | 24 | void refreshUI() |
... | ... | @@ -53,7 +57,6 @@ public: |
53 | 57 | ui.cmbMaterial->setCurrentIndex(currentMaterial); |
54 | 58 | |
55 | 59 | updating = false; |
56 | - | |
57 | 60 | } |
58 | 61 | |
59 | 62 | void dragEnterEvent(QDragEnterEvent *event) |
... | ... | @@ -64,7 +67,7 @@ public: |
64 | 67 | event->mimeData()->hasFormat("text/plain")) |
65 | 68 | { |
66 | 69 | event->acceptProposedAction(); |
67 | - | |
70 | + | |
68 | 71 | } |
69 | 72 | } |
70 | 73 | |
... | ... | @@ -104,7 +107,7 @@ public slots: |
104 | 107 | void on_chkDisplayRefSpec_clicked(bool b){ |
105 | 108 | dispRefSpec = b; |
106 | 109 | UpdateDisplay(); |
107 | - } | |
110 | + } | |
108 | 111 | void on_chkDisplaySimK_clicked(bool b){ |
109 | 112 | dispSimK = b; |
110 | 113 | UpdateDisplay(); |
... | ... | @@ -287,7 +290,9 @@ public slots: |
287 | 290 | } |
288 | 291 | void on_btnDistortion_clicked(){ |
289 | 292 | //ComputeDistortion(); |
290 | - MinimizeDistortion(); | |
293 | + //DistortionMap(); | |
294 | + cout<<"Distortion"<<endl; | |
295 | + distortionDialog->show(); | |
291 | 296 | } |
292 | 297 | void on_btnTimings_clicked(){ |
293 | 298 | PD.PrintResults(cout); |
... | ... | @@ -308,7 +313,7 @@ public slots: |
308 | 313 | |
309 | 314 | //first load the imaginary part |
310 | 315 | QString kFileName = QFileDialog::getOpenFileName(this, tr("Open Imaginary (k) Spectrum")); |
311 | - | |
316 | + | |
312 | 317 | //exit if no file was selected |
313 | 318 | if(kFileName == QString::null) |
314 | 319 | return; | ... | ... |
interactivemie.ui
... | ... | @@ -6,7 +6,7 @@ |
6 | 6 | <rect> |
7 | 7 | <x>0</x> |
8 | 8 | <y>0</y> |
9 | - <width>464</width> | |
9 | + <width>511</width> | |
10 | 10 | <height>525</height> |
11 | 11 | </rect> |
12 | 12 | </property> |
... | ... | @@ -32,7 +32,7 @@ |
32 | 32 | <widget class="QDoubleSpinBox" name="spinScaleK"> |
33 | 33 | <property name="geometry"> |
34 | 34 | <rect> |
35 | - <x>70</x> | |
35 | + <x>80</x> | |
36 | 36 | <y>80</y> |
37 | 37 | <width>62</width> |
38 | 38 | <height>22</height> |
... | ... | @@ -48,7 +48,7 @@ |
48 | 48 | <widget class="QDoubleSpinBox" name="spinBaseIR"> |
49 | 49 | <property name="geometry"> |
50 | 50 | <rect> |
51 | - <x>70</x> | |
51 | + <x>80</x> | |
52 | 52 | <y>50</y> |
53 | 53 | <width>62</width> |
54 | 54 | <height>22</height> |
... | ... | @@ -80,7 +80,7 @@ |
80 | 80 | <widget class="QDoubleSpinBox" name="spinRadius"> |
81 | 81 | <property name="geometry"> |
82 | 82 | <rect> |
83 | - <x>70</x> | |
83 | + <x>80</x> | |
84 | 84 | <y>20</y> |
85 | 85 | <width>62</width> |
86 | 86 | <height>22</height> |
... | ... | @@ -127,7 +127,7 @@ |
127 | 127 | <rect> |
128 | 128 | <x>20</x> |
129 | 129 | <y>110</y> |
130 | - <width>101</width> | |
130 | + <width>121</width> | |
131 | 131 | <height>17</height> |
132 | 132 | </rect> |
133 | 133 | </property> |
... | ... | @@ -166,7 +166,7 @@ |
166 | 166 | <rect> |
167 | 167 | <x>5</x> |
168 | 168 | <y>50</y> |
169 | - <width>71</width> | |
169 | + <width>81</width> | |
170 | 170 | <height>20</height> |
171 | 171 | </rect> |
172 | 172 | </property> |
... | ... | @@ -177,7 +177,7 @@ |
177 | 177 | <widget class="QDoubleSpinBox" name="spinCondNAi"> |
178 | 178 | <property name="geometry"> |
179 | 179 | <rect> |
180 | - <x>80</x> | |
180 | + <x>90</x> | |
181 | 181 | <y>20</y> |
182 | 182 | <width>62</width> |
183 | 183 | <height>22</height> |
... | ... | @@ -195,7 +195,7 @@ |
195 | 195 | <rect> |
196 | 196 | <x>5</x> |
197 | 197 | <y>20</y> |
198 | - <width>71</width> | |
198 | + <width>91</width> | |
199 | 199 | <height>20</height> |
200 | 200 | </rect> |
201 | 201 | </property> |
... | ... | @@ -244,7 +244,7 @@ |
244 | 244 | <widget class="QDoubleSpinBox" name="spinObjNAi"> |
245 | 245 | <property name="geometry"> |
246 | 246 | <rect> |
247 | - <x>80</x> | |
247 | + <x>90</x> | |
248 | 248 | <y>50</y> |
249 | 249 | <width>62</width> |
250 | 250 | <height>22</height> |
... | ... | @@ -262,7 +262,7 @@ |
262 | 262 | <rect> |
263 | 263 | <x>20</x> |
264 | 264 | <y>80</y> |
265 | - <width>82</width> | |
265 | + <width>111</width> | |
266 | 266 | <height>17</height> |
267 | 267 | </rect> |
268 | 268 | </property> |
... | ... | @@ -278,7 +278,7 @@ |
278 | 278 | <rect> |
279 | 279 | <x>150</x> |
280 | 280 | <y>80</y> |
281 | - <width>82</width> | |
281 | + <width>91</width> | |
282 | 282 | <height>17</height> |
283 | 283 | </rect> |
284 | 284 | </property> |
... | ... | @@ -296,15 +296,15 @@ |
296 | 296 | </rect> |
297 | 297 | </property> |
298 | 298 | <property name="text"> |
299 | - <string>Point Detector</string> | |
299 | + <string>Point Det.</string> | |
300 | 300 | </property> |
301 | 301 | </widget> |
302 | 302 | <widget class="QSpinBox" name="spinObjectiveSamples"> |
303 | 303 | <property name="geometry"> |
304 | 304 | <rect> |
305 | - <x>10</x> | |
305 | + <x>1</x> | |
306 | 306 | <y>100</y> |
307 | - <width>42</width> | |
307 | + <width>51</width> | |
308 | 308 | <height>22</height> |
309 | 309 | </rect> |
310 | 310 | </property> |
... | ... | @@ -320,7 +320,7 @@ |
320 | 320 | <rect> |
321 | 321 | <x>60</x> |
322 | 322 | <y>100</y> |
323 | - <width>71</width> | |
323 | + <width>81</width> | |
324 | 324 | <height>16</height> |
325 | 325 | </rect> |
326 | 326 | </property> |
... | ... | @@ -334,7 +334,7 @@ |
334 | 334 | <rect> |
335 | 335 | <x>280</x> |
336 | 336 | <y>20</y> |
337 | - <width>161</width> | |
337 | + <width>181</width> | |
338 | 338 | <height>411</height> |
339 | 339 | </rect> |
340 | 340 | </property> |
... | ... | @@ -454,9 +454,9 @@ |
454 | 454 | <widget class="QLabel" name="label"> |
455 | 455 | <property name="geometry"> |
456 | 456 | <rect> |
457 | - <x>20</x> | |
457 | + <x>10</x> | |
458 | 458 | <y>20</y> |
459 | - <width>61</width> | |
459 | + <width>71</width> | |
460 | 460 | <height>16</height> |
461 | 461 | </rect> |
462 | 462 | </property> |
... | ... | @@ -469,7 +469,7 @@ |
469 | 469 | <rect> |
470 | 470 | <x>10</x> |
471 | 471 | <y>230</y> |
472 | - <width>131</width> | |
472 | + <width>151</width> | |
473 | 473 | <height>17</height> |
474 | 474 | </rect> |
475 | 475 | </property> |
... | ... | @@ -485,7 +485,7 @@ |
485 | 485 | <rect> |
486 | 486 | <x>10</x> |
487 | 487 | <y>170</y> |
488 | - <width>131</width> | |
488 | + <width>151</width> | |
489 | 489 | <height>17</height> |
490 | 490 | </rect> |
491 | 491 | </property> |
... | ... | @@ -624,7 +624,7 @@ |
624 | 624 | <widget class="QDoubleSpinBox" name="spinDispScaleK"> |
625 | 625 | <property name="geometry"> |
626 | 626 | <rect> |
627 | - <x>90</x> | |
627 | + <x>120</x> | |
628 | 628 | <y>290</y> |
629 | 629 | <width>51</width> |
630 | 630 | <height>22</height> |
... | ... | @@ -637,7 +637,7 @@ |
637 | 637 | <widget class="QDoubleSpinBox" name="spinDispScaleN"> |
638 | 638 | <property name="geometry"> |
639 | 639 | <rect> |
640 | - <x>90</x> | |
640 | + <x>120</x> | |
641 | 641 | <y>340</y> |
642 | 642 | <width>51</width> |
643 | 643 | <height>22</height> |
... | ... | @@ -665,7 +665,7 @@ |
665 | 665 | <rect> |
666 | 666 | <x>50</x> |
667 | 667 | <y>190</y> |
668 | - <width>82</width> | |
668 | + <width>101</width> | |
669 | 669 | <height>17</height> |
670 | 670 | </rect> |
671 | 671 | </property> |
... | ... | @@ -692,7 +692,7 @@ |
692 | 692 | <widget class="QDoubleSpinBox" name="spinNormFactor"> |
693 | 693 | <property name="geometry"> |
694 | 694 | <rect> |
695 | - <x>90</x> | |
695 | + <x>120</x> | |
696 | 696 | <y>380</y> |
697 | 697 | <width>62</width> |
698 | 698 | <height>22</height> |
... | ... | @@ -868,8 +868,8 @@ |
868 | 868 | <rect> |
869 | 869 | <x>120</x> |
870 | 870 | <y>50</y> |
871 | - <width>46</width> | |
872 | - <height>13</height> | |
871 | + <width>51</width> | |
872 | + <height>16</height> | |
873 | 873 | </rect> |
874 | 874 | </property> |
875 | 875 | <property name="text"> |
... | ... | @@ -883,8 +883,8 @@ |
883 | 883 | <rect> |
884 | 884 | <x>0</x> |
885 | 885 | <y>0</y> |
886 | - <width>464</width> | |
887 | - <height>21</height> | |
886 | + <width>511</width> | |
887 | + <height>25</height> | |
888 | 888 | </rect> |
889 | 889 | </property> |
890 | 890 | <widget class="QMenu" name="menuFile"> | ... | ... |
main.cpp
1 | 1 | #include <fstream> |
2 | 2 | using namespace std; |
3 | 3 | #include "interactivemie.h" |
4 | -#include <QtGui/QApplication> | |
4 | +#include <QtGui/QApplication> | |
5 | +#include <QGraphicsScene> | |
6 | +#include <QGraphicsView> | |
7 | +#include <QGraphicsPixmapItem> | |
5 | 8 | #include "qtSpectrumDisplay.h" |
6 | 9 | #include "globals.h" |
7 | 10 | #include "rtsGUIConsole.h" |
... | ... | @@ -11,7 +14,11 @@ using namespace std; |
11 | 14 | |
12 | 15 | PerformanceData PD; |
13 | 16 | |
14 | -qtSpectrumDisplay* gpSpectrumDisplay; | |
17 | +qtSpectrumDisplay* gpSpectrumDisplay; | |
18 | + | |
19 | +QGraphicsScene* distortionScene = NULL; | |
20 | +QGraphicsView* distortionWindow = NULL; | |
21 | +QGraphicsPixmapItem* pixmapItem = NULL; | |
15 | 22 | |
16 | 23 | vector<vector<SpecPair> > RefSpectrum; |
17 | 24 | vector<SpecPair> SimSpectrum; |
... | ... | @@ -209,7 +216,7 @@ void FitDisplay(){ |
209 | 216 | void ChangeAbsorbance(){ |
210 | 217 | |
211 | 218 | //compute the real part of the index of refraction |
212 | - | |
219 | + | |
213 | 220 | //copy the absorbance values into a linear array |
214 | 221 | int nSamples = MaterialList[currentMaterial].eta.size(); |
215 | 222 | double startNu = MaterialList[currentMaterial].nu.front(); |
... | ... | @@ -280,11 +287,11 @@ void SetMaterial() |
280 | 287 | |
281 | 288 | int main(int argc, char *argv[]) |
282 | 289 | { |
283 | - | |
290 | + | |
284 | 291 | |
285 | 292 | //load the default project file (any previous optical settings) |
286 | 293 | LoadState(); |
287 | - | |
294 | + | |
288 | 295 | //load the default materials |
289 | 296 | LoadMaterial("eta_TolueneK.txt", "eta_TolueneN.txt", "Toluene"); |
290 | 297 | LoadMaterial("kPMMA.txt", "PMMA"); |
... | ... | @@ -294,25 +301,36 @@ int main(int argc, char *argv[]) |
294 | 301 | //compute the analytical solution for the Mie scattered spectrum |
295 | 302 | SimulateSpectrum(); |
296 | 303 | |
297 | - QApplication a(argc, argv); | |
304 | + QApplication a(argc, argv); | |
305 | + | |
306 | + //create and position the UI window | |
298 | 307 | InteractiveMie w; |
299 | - | |
300 | - | |
301 | 308 | w.show(); |
302 | - | |
303 | - | |
304 | 309 | w.move(0, 0); |
305 | - QRect frame = w.frameGeometry(); | |
306 | - QRect inside = w.geometry(); | |
310 | + QRect uiFrame = w.frameGeometry(); | |
311 | + QRect uiNoFrame = w.geometry(); | |
312 | + int frameHeight = uiFrame.height() - uiNoFrame.height(); | |
307 | 313 | |
308 | 314 | //activate a console for output |
309 | - RedirectIOToConsole(0, frame.height(), frame.width()); | |
310 | - | |
315 | + RedirectIOToConsole(0, uiFrame.height(), uiFrame.width(), 400); | |
316 | + printf("Frame height: %d\n", frameHeight); | |
317 | + | |
318 | + //set the size and position of the spectrum window | |
319 | + int visWinSize = uiFrame.height()/2 - frameHeight; | |
320 | + //create the far field window | |
311 | 321 | gpSpectrumDisplay = new qtSpectrumDisplay(); |
312 | - gpSpectrumDisplay->move(frame.width(), 0); | |
313 | - gpSpectrumDisplay->resize(2*inside.height(), inside.height()); | |
314 | - | |
315 | - gpSpectrumDisplay->show(); | |
322 | + gpSpectrumDisplay->resize(visWinSize*2, visWinSize); | |
323 | + gpSpectrumDisplay->move(uiFrame.width(), 0); | |
324 | + gpSpectrumDisplay->show(); | |
325 | + | |
326 | + //distortion dialog box | |
327 | + distortionDialog = new qtDistortionDialog(); | |
328 | + distortionDialog->move(0, 0); | |
329 | + | |
330 | + //display the distortion map | |
331 | + distortionScene = new QGraphicsScene(); | |
332 | + distortionWindow = new QGraphicsView(distortionScene); | |
333 | + distortionWindow->move(uiFrame.width(), visWinSize); | |
316 | 334 | |
317 | 335 | //refresh the UI |
318 | 336 | w.refreshUI(); | ... | ... |
qtSpectrumDisplay.cpp
1 | - #include <QtGui> | |
2 | - #include <QtOpenGL/QtOpenGL> | |
1 | +#include <QtGui> | |
2 | +#include <QtOpenGL/QtOpenGL> | |
3 | 3 | #include <GL/glu.h> |
4 | 4 | |
5 | - #include <math.h> | |
6 | - | |
7 | - #include "qtSpectrumDisplay.h" | |
8 | - | |
9 | - qtSpectrumDisplay::qtSpectrumDisplay(QWidget *parent) | |
10 | - : QGLWidget(parent) | |
11 | - { | |
12 | - object = 0; | |
13 | - xRot = 0; | |
14 | - yRot = 0; | |
15 | - zRot = 0; | |
16 | - | |
17 | - qtGreen = QColor::fromCmykF(0.40, 0.0, 1.0, 0.0); | |
18 | - qtPurple = QColor::fromCmykF(0.39, 0.39, 0.0, 0.0); | |
19 | - } | |
20 | - | |
21 | - qtSpectrumDisplay::~qtSpectrumDisplay() | |
22 | - { | |
23 | - makeCurrent(); | |
24 | - glDeleteLists(object, 1); | |
25 | - } | |
26 | - | |
27 | - QSize qtSpectrumDisplay::minimumSizeHint() const | |
28 | - { | |
29 | - return QSize(50, 50); | |
30 | - } | |
31 | - | |
32 | - QSize qtSpectrumDisplay::sizeHint() const | |
33 | - { | |
34 | - return QSize(400, 400); | |
35 | - } | |
36 | - | |
37 | - /*void qtSpectrumDisplay::setXRotation(int angle) | |
38 | - { | |
39 | - normalizeAngle(&angle); | |
40 | - if (angle != xRot) { | |
41 | - xRot = angle; | |
42 | - emit xRotationChanged(angle); | |
43 | - updateGL(); | |
5 | +#include <math.h> | |
6 | + | |
7 | +#include "qtSpectrumDisplay.h" | |
8 | + | |
9 | +qtSpectrumDisplay::qtSpectrumDisplay(QWidget *parent) | |
10 | + : QGLWidget(parent) | |
11 | +{ | |
12 | + object = 0; | |
13 | + xRot = 0; | |
14 | + yRot = 0; | |
15 | + zRot = 0; | |
16 | + | |
17 | + qtGreen = QColor::fromCmykF(0.40, 0.0, 1.0, 0.0); | |
18 | + qtPurple = QColor::fromCmykF(0.39, 0.39, 0.0, 0.0); | |
19 | +} | |
20 | + | |
21 | +qtSpectrumDisplay::~qtSpectrumDisplay() | |
22 | +{ | |
23 | + makeCurrent(); | |
24 | + glDeleteLists(object, 1); | |
25 | +} | |
26 | + | |
27 | +QSize qtSpectrumDisplay::minimumSizeHint() const | |
28 | +{ | |
29 | + return QSize(50, 50); | |
30 | +} | |
31 | + | |
32 | +QSize qtSpectrumDisplay::sizeHint() const | |
33 | +{ | |
34 | + return QSize(400, 400); | |
35 | +} | |
36 | + | |
37 | +void qtSpectrumDisplay::initializeGL() | |
38 | +{ | |
39 | + qglClearColor(qtPurple.dark()); | |
40 | + //object = makeObject(); | |
41 | + glShadeModel(GL_FLAT); | |
42 | + glEnable(GL_DEPTH_TEST); | |
43 | + glEnable(GL_CULL_FACE); | |
44 | +} | |
45 | + | |
46 | +void qtSpectrumDisplay::printWavenumber(int xPos) | |
47 | +{ | |
48 | + int viewParams[4]; | |
49 | + glGetIntegerv(GL_VIEWPORT, viewParams); | |
50 | + | |
51 | + float a = (float)xPos/(float)viewParams[2]; | |
52 | + | |
53 | + int wn = a * (nuMax - nuMin) + nuMin; | |
54 | + cout<<wn<<endl; | |
55 | + | |
56 | + | |
57 | + | |
58 | +} | |
59 | + | |
60 | +void qtSpectrumDisplay::paintGL() | |
61 | +{ | |
62 | + //prepare the projection (orthographic, bounded by spectral values) | |
63 | + glMatrixMode(GL_PROJECTION); | |
64 | + glLoadIdentity(); | |
65 | + gluOrtho2D(nuMin, nuMax, aMin, aMax); | |
66 | + glMatrixMode(GL_MODELVIEW); | |
67 | + glLoadIdentity(); | |
68 | + | |
69 | + //clear the screen | |
70 | + glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); | |
71 | + | |
72 | + //set the line width | |
73 | + glLineWidth(2); | |
74 | + | |
75 | + //draw the simulated spectrum (in white) | |
76 | + if(dispSimSpec) | |
77 | + { | |
78 | + glColor3f(1.0, 1.0, 1.0); | |
79 | + glBegin(GL_LINE_STRIP); | |
80 | + for(unsigned int i=0; i<SimSpectrum.size(); i++) | |
81 | + glVertex2f(SimSpectrum[i].nu, SimSpectrum[i].A); | |
82 | + glEnd(); | |
83 | + } | |
84 | + //draw the reference spectrum in gray | |
85 | + if(dispRefSpec && RefSpectrum.size() > 0) | |
86 | + { | |
87 | + glColor3f(0.5, 0.5, 0.5); | |
88 | + glBegin(GL_LINE_STRIP); | |
89 | + float nu; | |
90 | + for(unsigned int i=0; i<RefSpectrum[currentSpec].size(); i++) | |
91 | + { | |
92 | + nu = RefSpectrum[currentSpec][i].nu; | |
93 | + glVertex2f(nu, RefSpectrum[currentSpec][i].A + nu * refSlope); | |
44 | 94 | } |
45 | - } | |
46 | - | |
47 | - void qtSpectrumDisplay::setYRotation(int angle) | |
48 | - { | |
49 | - normalizeAngle(&angle); | |
50 | - if (angle != yRot) { | |
51 | - yRot = angle; | |
52 | - emit yRotationChanged(angle); | |
53 | - updateGL(); | |
95 | + glEnd(); | |
96 | + } | |
97 | + | |
98 | + //draw the material properties | |
99 | + | |
100 | + //change the viewport properties (materials are plotted on a different scale) | |
101 | + | |
102 | + //compute the maximum k and n | |
103 | + int nSamples = MaterialList[currentMaterial].eta.size(); | |
104 | + float maxK = 0.0; | |
105 | + float maxN = 0.0; | |
106 | + float thisN, thisK; | |
107 | + for(int i=0; i<nSamples; i++) | |
108 | + { | |
109 | + thisN = fabs(MaterialList[currentMaterial].eta[i].real() - 1.49); | |
110 | + if(thisN > maxN) | |
111 | + maxN = thisN; | |
112 | + thisK = fabs(MaterialList[currentMaterial].eta[i].imag()); | |
113 | + if(thisK > maxK) | |
114 | + thisK = maxK; | |
115 | + } | |
116 | + cout<<maxN<<"---------"<<maxK<<endl; | |
117 | + | |
118 | + | |
119 | + glMatrixMode(GL_PROJECTION); | |
120 | + glLoadIdentity(); | |
121 | + gluOrtho2D(nuMin, nuMax, aMin, aMax); | |
122 | + | |
123 | + | |
124 | + float nu; | |
125 | + //display absorbance | |
126 | + if(dispMatK) | |
127 | + { | |
128 | + | |
129 | + glColor3f(1.0, 0.0, 0.0); | |
130 | + glBegin(GL_LINE_STRIP); | |
131 | + for(int i=0; i<nSamples; i++){ | |
132 | + nu = MaterialList[currentMaterial].nu[i]; | |
133 | + glVertex2f(nu, MaterialList[currentMaterial].eta[i].imag() * dispScaleK); | |
54 | 134 | } |
55 | - } | |
56 | - | |
57 | - void qtSpectrumDisplay::setZRotation(int angle) | |
58 | - { | |
59 | - normalizeAngle(&angle); | |
60 | - if (angle != zRot) { | |
61 | - zRot = angle; | |
62 | - emit zRotationChanged(angle); | |
63 | - updateGL(); | |
135 | + glEnd(); | |
136 | + } | |
137 | + if(dispSimK) | |
138 | + { | |
139 | + glColor3f(1.0, 1.0, 0.0); | |
140 | + glBegin(GL_LINE_STRIP); | |
141 | + for(unsigned int i=0; i<EtaK.size(); i++){ | |
142 | + glVertex2f(EtaK[i].nu, EtaK[i].A * dispScaleK); | |
64 | 143 | } |
65 | - }*/ | |
66 | - | |
67 | - void qtSpectrumDisplay::initializeGL() | |
68 | - { | |
69 | - qglClearColor(qtPurple.dark()); | |
70 | - //object = makeObject(); | |
71 | - glShadeModel(GL_FLAT); | |
72 | - glEnable(GL_DEPTH_TEST); | |
73 | - glEnable(GL_CULL_FACE); | |
74 | - } | |
75 | - | |
76 | - void qtSpectrumDisplay::printWavenumber(int xPos) | |
77 | - { | |
78 | - int viewParams[4]; | |
79 | - glGetIntegerv(GL_VIEWPORT, viewParams); | |
80 | - | |
81 | - float a = (float)xPos/(float)viewParams[2]; | |
82 | - | |
83 | - int wn = a * (nuMax - nuMin) + nuMin; | |
84 | - cout<<wn<<endl; | |
85 | - | |
86 | - } | |
87 | - | |
88 | - void qtSpectrumDisplay::paintGL() | |
89 | - { | |
90 | - glMatrixMode(GL_PROJECTION); | |
91 | - glLoadIdentity(); | |
92 | - //glOrtho(-0.5, +0.5, +0.5, -0.5, 4.0, 15.0); | |
93 | - gluOrtho2D(nuMin, nuMax, aMin, aMax); | |
94 | - glMatrixMode(GL_MODELVIEW); | |
95 | - | |
96 | - glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); | |
97 | - glLoadIdentity(); | |
98 | - /*glTranslated(0.0, 0.0, -10.0); | |
99 | - glRotated(xRot / 16.0, 1.0, 0.0, 0.0); | |
100 | - glRotated(yRot / 16.0, 0.0, 1.0, 0.0); | |
101 | - glRotated(zRot / 16.0, 0.0, 0.0, 1.0);*/ | |
102 | - glLineWidth(2); | |
103 | - if(dispSimSpec) | |
104 | - { | |
105 | - glColor3f(1.0, 1.0, 1.0); | |
106 | - glBegin(GL_LINE_STRIP); | |
107 | - for(unsigned int i=0; i<SimSpectrum.size(); i++) | |
108 | - glVertex2f(SimSpectrum[i].nu, SimSpectrum[i].A); | |
109 | - glEnd(); | |
110 | - } | |
111 | - if(dispRefSpec && RefSpectrum.size() > 0) | |
112 | - { | |
113 | - glColor3f(0.5, 0.5, 0.5); | |
114 | - glBegin(GL_LINE_STRIP); | |
115 | - float nu; | |
116 | - for(unsigned int i=0; i<RefSpectrum[currentSpec].size(); i++) | |
117 | - { | |
118 | - nu = RefSpectrum[currentSpec][i].nu; | |
119 | - glVertex2f(nu, RefSpectrum[currentSpec][i].A + nu * refSlope); | |
120 | - } | |
121 | - glEnd(); | |
122 | - } | |
123 | - | |
124 | - int nSamples = MaterialList[currentMaterial].eta.size(); | |
125 | - float nu; | |
126 | - //display absorbance | |
127 | - if(dispMatK) | |
128 | - { | |
129 | - | |
130 | - glColor3f(1.0, 0.0, 0.0); | |
131 | - glBegin(GL_LINE_STRIP); | |
132 | - for(int i=0; i<nSamples; i++){ | |
133 | - nu = MaterialList[currentMaterial].nu[i]; | |
134 | - glVertex2f(nu, MaterialList[currentMaterial].eta[i].imag() * dispScaleK); | |
135 | - } | |
136 | - glEnd(); | |
137 | - } | |
138 | - if(dispSimK) | |
139 | - { | |
140 | - glColor3f(1.0, 1.0, 0.0); | |
141 | - glBegin(GL_LINE_STRIP); | |
142 | - for(unsigned int i=0; i<EtaK.size(); i++){ | |
143 | - glVertex2f(EtaK[i].nu, EtaK[i].A * dispScaleK); | |
144 | - } | |
145 | - glEnd(); | |
146 | - } | |
147 | - | |
148 | - //display refractive index (real) | |
149 | - if(dispMatN) | |
150 | - { | |
151 | - glColor3f(0.0, 1.0, 0.0); | |
152 | - glBegin(GL_LINE_STRIP); | |
153 | - for(int i=0; i<nSamples; i++){ | |
154 | - nu = MaterialList[currentMaterial].nu[i]; | |
155 | - glVertex2f(nu, (MaterialList[currentMaterial].eta[i].real() - baseIR) * dispScaleN); | |
156 | - } | |
157 | - glEnd(); | |
158 | - } | |
159 | - if(dispSimN) | |
160 | - { | |
161 | - glColor3f(0.0, 1.0, 1.0); | |
162 | - glBegin(GL_LINE_STRIP); | |
163 | - for(unsigned int i=0; i<EtaN.size(); i++) | |
164 | - glVertex2f(EtaN[i].nu, (EtaN[i].A - baseIR) * dispScaleN); | |
165 | - glEnd(); | |
166 | - } | |
167 | - | |
168 | - | |
169 | - glCallList(object); | |
170 | - } | |
171 | - | |
172 | - void qtSpectrumDisplay::resizeGL(int width, int height) | |
173 | - { | |
174 | - int side = qMin(width, height); | |
175 | - //glViewport((width - side) / 2, (height - side) / 2, side, side); | |
176 | - glViewport(0, 0, width, height); | |
177 | - | |
178 | - /*glMatrixMode(GL_PROJECTION); | |
179 | - glLoadIdentity(); | |
180 | - //glOrtho(-0.5, +0.5, +0.5, -0.5, 4.0, 15.0); | |
181 | - gluOrtho2D(nuMin, nuMax, aMin, aMax); | |
182 | - glMatrixMode(GL_MODELVIEW);*/ | |
183 | - } | |
184 | - | |
185 | - void qtSpectrumDisplay::mousePressEvent(QMouseEvent *event) | |
186 | - { | |
187 | - lastPos = event->pos(); | |
188 | - | |
189 | - if(event->buttons() & Qt::LeftButton) | |
190 | - { | |
191 | - int wn = 0; | |
192 | - printWavenumber(event->x()); | |
193 | - } | |
194 | - } | |
195 | - | |
196 | - void qtSpectrumDisplay::mouseMoveEvent(QMouseEvent *event) | |
197 | - { | |
198 | - int dx = event->x() - lastPos.x(); | |
199 | - int dy = event->y() - lastPos.y(); | |
200 | - /* | |
201 | - if (event->buttons() & Qt::LeftButton) { | |
202 | - setXRotation(xRot + 8 * dy); | |
203 | - setYRotation(yRot + 8 * dx); | |
204 | - } else if (event->buttons() & Qt::RightButton) { | |
205 | - setXRotation(xRot + 8 * dy); | |
206 | - setZRotation(zRot + 8 * dx); | |
207 | - }*/ | |
208 | - lastPos = event->pos(); | |
144 | + glEnd(); | |
145 | +} | |
146 | + | |
147 | +//display refractive index (real) | |
148 | +if(dispMatN) | |
149 | +{ | |
150 | + glColor3f(0.0, 1.0, 0.0); | |
151 | + glBegin(GL_LINE_STRIP); | |
152 | + for(int i=0; i<nSamples; i++){ | |
153 | + nu = MaterialList[currentMaterial].nu[i]; | |
154 | + glVertex2f(nu, (MaterialList[currentMaterial].eta[i].real() - baseIR) * dispScaleN); | |
209 | 155 | } |
156 | + glEnd(); | |
157 | +} | |
158 | +if(dispSimN) | |
159 | +{ | |
160 | + glColor3f(0.0, 1.0, 1.0); | |
161 | + glBegin(GL_LINE_STRIP); | |
162 | + for(unsigned int i=0; i<EtaN.size(); i++) | |
163 | + glVertex2f(EtaN[i].nu, (EtaN[i].A - baseIR) * dispScaleN); | |
164 | + glEnd(); | |
165 | +} | |
210 | 166 | |
211 | - /*GLuint qtSpectrumDisplay::makeObject() | |
212 | - { | |
213 | - GLuint list = glGenLists(1); | |
214 | - glNewList(list, GL_COMPILE); | |
215 | - | |
216 | - glBegin(GL_QUADS); | |
217 | - | |
218 | - GLdouble x1 = +0.06; | |
219 | - GLdouble y1 = -0.14; | |
220 | - GLdouble x2 = +0.14; | |
221 | - GLdouble y2 = -0.06; | |
222 | - GLdouble x3 = +0.08; | |
223 | - GLdouble y3 = +0.00; | |
224 | - GLdouble x4 = +0.30; | |
225 | - GLdouble y4 = +0.22; | |
226 | - | |
227 | - quad(x1, y1, x2, y2, y2, x2, y1, x1); | |
228 | - quad(x3, y3, x4, y4, y4, x4, y3, x3); | |
229 | 167 | |
230 | - extrude(x1, y1, x2, y2); | |
231 | - extrude(x2, y2, y2, x2); | |
232 | - extrude(y2, x2, y1, x1); | |
233 | - extrude(y1, x1, x1, y1); | |
234 | - extrude(x3, y3, x4, y4); | |
235 | - extrude(x4, y4, y4, x4); | |
236 | - extrude(y4, x4, y3, x3); | |
168 | +glCallList(object); | |
169 | + | |
170 | +glFlush(); | |
237 | 171 | |
238 | - const double Pi = 3.14159265358979323846; | |
239 | - const int NumSectors = 200; | |
172 | +//display the values at the mouse location | |
173 | +renderText(50, 50, "test"); | |
174 | +} | |
240 | 175 | |
241 | - for (int i = 0; i < NumSectors; ++i) { | |
242 | - double angle1 = (i * 2 * Pi) / NumSectors; | |
243 | - GLdouble x5 = 0.30 * sin(angle1); | |
244 | - GLdouble y5 = 0.30 * cos(angle1); | |
245 | - GLdouble x6 = 0.20 * sin(angle1); | |
246 | - GLdouble y6 = 0.20 * cos(angle1); | |
176 | +void qtSpectrumDisplay::resizeGL(int width, int height) | |
177 | +{ | |
178 | + int side = qMin(width, height); | |
179 | + glViewport(0, 0, width, height); | |
247 | 180 | |
248 | - double angle2 = ((i + 1) * 2 * Pi) / NumSectors; | |
249 | - GLdouble x7 = 0.20 * sin(angle2); | |
250 | - GLdouble y7 = 0.20 * cos(angle2); | |
251 | - GLdouble x8 = 0.30 * sin(angle2); | |
252 | - GLdouble y8 = 0.30 * cos(angle2); | |
181 | +} | |
253 | 182 | |
254 | - quad(x5, y5, x6, y6, x7, y7, x8, y8); | |
255 | - | |
256 | - extrude(x6, y6, x7, y7); | |
257 | - extrude(x8, y8, x5, y5); | |
258 | - } | |
259 | - | |
260 | - glEnd(); | |
183 | +void qtSpectrumDisplay::mousePressEvent(QMouseEvent *event) | |
184 | +{ | |
185 | + lastPos = event->pos(); | |
261 | 186 | |
262 | - glEndList(); | |
263 | - return list; | |
264 | - }*/ | |
265 | - | |
266 | - void qtSpectrumDisplay::quad(GLdouble x1, GLdouble y1, GLdouble x2, GLdouble y2, | |
267 | - GLdouble x3, GLdouble y3, GLdouble x4, GLdouble y4) | |
187 | + if(event->buttons() & Qt::LeftButton) | |
268 | 188 | { |
269 | - qglColor(qtGreen); | |
270 | - | |
271 | - glVertex3d(x1, y1, -0.05); | |
272 | - glVertex3d(x2, y2, -0.05); | |
273 | - glVertex3d(x3, y3, -0.05); | |
274 | - glVertex3d(x4, y4, -0.05); | |
275 | - | |
276 | - glVertex3d(x4, y4, +0.05); | |
277 | - glVertex3d(x3, y3, +0.05); | |
278 | - glVertex3d(x2, y2, +0.05); | |
279 | - glVertex3d(x1, y1, +0.05); | |
189 | + int wn = 0; | |
190 | + printWavenumber(event->x()); | |
280 | 191 | } |
281 | - | |
282 | - /*void qtSpectrumDisplay::extrude(GLdouble x1, GLdouble y1, GLdouble x2, GLdouble y2) | |
283 | - { | |
284 | - qglColor(qtGreen.dark(250 + int(100 * x1))); | |
285 | - | |
286 | - glVertex3d(x1, y1, +0.05); | |
287 | - glVertex3d(x2, y2, +0.05); | |
288 | - glVertex3d(x2, y2, -0.05); | |
289 | - glVertex3d(x1, y1, -0.05); | |
290 | - }*/ | |
291 | - | |
292 | - void qtSpectrumDisplay::normalizeAngle(int *angle) | |
293 | - { | |
294 | - while (*angle < 0) | |
295 | - *angle += 360 * 16; | |
296 | - while (*angle > 360 * 16) | |
297 | - *angle -= 360 * 16; | |
298 | - } | |
299 | 192 | \ No newline at end of file |
193 | +} | |
194 | + | |
195 | +void qtSpectrumDisplay::mouseMoveEvent(QMouseEvent *event) | |
196 | +{ | |
197 | + int dx = event->x() - lastPos.x(); | |
198 | + int dy = event->y() - lastPos.y(); | |
199 | + | |
200 | + lastPos = event->pos(); | |
201 | +} | |
202 | + | |
203 | +void qtSpectrumDisplay::quad(GLdouble x1, GLdouble y1, GLdouble x2, GLdouble y2, | |
204 | + GLdouble x3, GLdouble y3, GLdouble x4, GLdouble y4) | |
205 | +{ | |
206 | + qglColor(qtGreen); | |
207 | + | |
208 | + glVertex3d(x1, y1, -0.05); | |
209 | + glVertex3d(x2, y2, -0.05); | |
210 | + glVertex3d(x3, y3, -0.05); | |
211 | + glVertex3d(x4, y4, -0.05); | |
212 | + | |
213 | + glVertex3d(x4, y4, +0.05); | |
214 | + glVertex3d(x3, y3, +0.05); | |
215 | + glVertex3d(x2, y2, +0.05); | |
216 | + glVertex3d(x1, y1, +0.05); | |
217 | +} | |
218 | + | |
219 | +void qtSpectrumDisplay::normalizeAngle(int *angle) | |
220 | +{ | |
221 | + while (*angle < 0) | |
222 | + *angle += 360 * 16; | |
223 | + while (*angle > 360 * 16) | |
224 | + *angle -= 360 * 16; | |
225 | +} | ... | ... |
rtsGUIConsole.cpp deleted
1 | -#ifdef WIN32 | |
2 | -#include <windows.h> | |
3 | -#include <stdio.h> | |
4 | -#include <fcntl.h> | |
5 | -#include <io.h> | |
6 | -#include <iostream> | |
7 | -#include <fstream> | |
8 | - | |
9 | -#ifndef _USE_OLD_IOSTREAMS | |
10 | - | |
11 | -using namespace std; | |
12 | -#endif | |
13 | - | |
14 | -// maximum mumber of lines the output console should have | |
15 | - | |
16 | -static const WORD MAX_CONSOLE_LINES = 500; | |
17 | -//#ifdef _DEBUG | |
18 | - | |
19 | -void RedirectIOToConsole(int Xpos, int Ypos, int Width, int Height) | |
20 | -{ | |
21 | - int hConHandle; | |
22 | - long lStdHandle; | |
23 | - CONSOLE_SCREEN_BUFFER_INFO coninfo; | |
24 | - FILE *fp; | |
25 | - // allocate a console for this app | |
26 | - AllocConsole(); | |
27 | - // set the screen buffer to be big enough to let us scroll text | |
28 | - GetConsoleScreenBufferInfo(GetStdHandle(STD_OUTPUT_HANDLE), &coninfo); | |
29 | - coninfo.dwSize.Y = MAX_CONSOLE_LINES; | |
30 | - SetConsoleScreenBufferSize(GetStdHandle(STD_OUTPUT_HANDLE), | |
31 | - coninfo.dwSize); | |
32 | - // redirect unbuffered STDOUT to the console | |
33 | - lStdHandle = (long)GetStdHandle(STD_OUTPUT_HANDLE); | |
34 | - hConHandle = _open_osfhandle(lStdHandle, _O_TEXT); | |
35 | - fp = _fdopen( hConHandle, "w" ); | |
36 | - *stdout = *fp; | |
37 | - setvbuf( stdout, NULL, _IONBF, 0 ); | |
38 | - // redirect unbuffered STDIN to the console | |
39 | - lStdHandle = (long)GetStdHandle(STD_INPUT_HANDLE); | |
40 | - hConHandle = _open_osfhandle(lStdHandle, _O_TEXT); | |
41 | - fp = _fdopen( hConHandle, "r" ); | |
42 | - *stdin = *fp; | |
43 | - setvbuf( stdin, NULL, _IONBF, 0 ); | |
44 | - | |
45 | - // redirect unbuffered STDERR to the console | |
46 | - lStdHandle = (long)GetStdHandle(STD_ERROR_HANDLE); | |
47 | - hConHandle = _open_osfhandle(lStdHandle, _O_TEXT); | |
48 | - fp = _fdopen( hConHandle, "w" ); | |
49 | - *stderr = *fp; | |
50 | - setvbuf( stderr, NULL, _IONBF, 0 ); | |
51 | - | |
52 | - // make cout, wcout, cin, wcin, wcerr, cerr, wclog and clog | |
53 | - // point to console as well | |
54 | - ios::sync_with_stdio(); | |
55 | - //position | |
56 | - MoveWindow(GetConsoleWindow(), Xpos, Ypos, Width, Height, true); | |
57 | -} | |
58 | - | |
59 | -#else | |
60 | -void RedirectIOToConsole(int Xpos, int Ypos, int Width, int Height) | |
61 | -{ | |
62 | -} | |
63 | -#endif | |
64 | - | |
65 | -//End of File | |
66 | 0 | \ No newline at end of file |
rtsGUIConsole.h deleted