Subversion Repositories seema-scanner

Rev

Rev 250 | Only display areas with differences | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 250 Rev 255
1
#include "SMPreferenceDialog.h"
1
#include "SMPreferenceDialog.h"
2
#include "ui_SMPreferenceDialog.h"
2
#include "ui_SMPreferenceDialog.h"
3
 
3
 
4
#include "OpenGLContext.h"
4
#include "OpenGLContext.h"
5
#include "Camera.h"
5
#include "Camera.h"
6
#include "Algorithm.h"
6
#include "Algorithm.h"
7
 
7
 
8
using namespace std;
8
using namespace std;
9
 
9
 
10
SMPreferenceDialog::SMPreferenceDialog(QWidget *parent) : QDialog(parent), ui(new Ui::SMPreferenceDialog) {
10
SMPreferenceDialog::SMPreferenceDialog(QWidget *parent) : QDialog(parent), ui(new Ui::SMPreferenceDialog) {
11
    ui->setupUi(this);
11
    ui->setupUi(this);
12
 
12
 
13
    // Query projectors
13
    // Query projectors
14
    vector<ScreenInfo> screenList = OpenGLContext::GetScreenInfo();
14
    vector<ScreenInfo> screenList = OpenGLContext::GetScreenInfo();
15
    for(unsigned int i=0; i<screenList.size(); i++){
15
    for(unsigned int i=0; i<screenList.size(); i++){
16
        QString screenString = QString("Screen %1: %2x%3").arg(i).arg(screenList[i].resX).arg(screenList[i].resY);
16
        QString screenString = QString("Screen %1: %2x%3").arg(i).arg(screenList[i].resX).arg(screenList[i].resY);
17
        ui->projectorComboBox->addItem(screenString, i);
17
        ui->projectorComboBox->addItem(screenString, i);
18
    }
18
    }
19
 
19
 
20
    // Add LC3000 option
20
    // Add LC3000 option
21
    #ifdef WITH_LC3000API
21
    #ifdef WITH_LC3000API
22
        ui->projectorComboBox->addItem("LC3000 API", -2);
22
        ui->projectorComboBox->addItem("LC3000 API", -2);
23
    #endif
23
    #endif
24
    // Add LC4500 option
24
    // Add LC4500 option
25
    #ifdef WITH_LC4500API
25
    #ifdef WITH_LC4500API
26
        ui->projectorComboBox->addItem("LC4500 API", -3);
26
        ui->projectorComboBox->addItem("LC4500 API", -3);
27
    #endif
27
    #endif
28
 
28
 
29
    // Query cameras
29
    // Query cameras
30
    vector< vector<CameraInfo> > interfaceCameraList = CameraFactory::GetInterfaceCameraList();
30
    vector< vector<CameraInfo> > interfaceCameraList = CameraFactory::GetInterfaceCameraList();
31
    for(unsigned int i=0; i<interfaceCameraList.size(); i++){
31
    for(unsigned int i=0; i<interfaceCameraList.size(); i++){
32
        vector<CameraInfo> cameraList = interfaceCameraList[i];
32
        vector<CameraInfo> cameraList = interfaceCameraList[i];
33
        for(unsigned int j=0; j<cameraList.size(); j++){
33
        for(unsigned int j=0; j<cameraList.size(); j++){
34
            QString cameraString = QString("%1: %2 # %3").arg(cameraList[j].vendor.c_str()).arg(cameraList[j].model.c_str()).arg(cameraList[j].serialNumber);
34
            QString cameraString = QString("%1: %2 # %3").arg(cameraList[j].vendor.c_str()).arg(cameraList[j].model.c_str()).arg(cameraList[j].serialNumber);
35
            ui->camera0ComboBox->addItem(cameraString, QPoint(i, j));
35
            ui->camera0ComboBox->addItem(cameraString, QPoint(i, j));
36
            ui->camera1ComboBox->addItem(cameraString, QPoint(i, j));
36
            ui->camera1ComboBox->addItem(cameraString, QPoint(i, j));
37
        }
37
        }
38
    }
38
    }
39
 
39
 
40
    // List pattern modes
40
    // List pattern modes
41
    ui->algorithmComboBox->addItem("Gray Coding", "GrayCode");
41
    ui->algorithmComboBox->addItem("Gray Coding", "GrayCode");
42
    ui->algorithmComboBox->addItem("Gray Coding Horizontal+Vertical (experimental)", "GrayCodeHorzVert");
42
    ui->algorithmComboBox->addItem("Gray Coding Horizontal+Vertical (experimental)", "GrayCodeHorzVert");
43
    ui->algorithmComboBox->addItem("Phase Shifting 2 frequency heterodyne", "PhaseShiftTwoFreq");
43
    ui->algorithmComboBox->addItem("Phase Shifting 2 frequency heterodyne", "PhaseShiftTwoFreq");
44
    ui->algorithmComboBox->addItem("Phase Shifting 3 frequency (experimental)", "PhaseShiftThreeFreq");
44
    ui->algorithmComboBox->addItem("Phase Shifting 3 frequency (experimental)", "PhaseShiftThreeFreq");
45
    ui->algorithmComboBox->addItem("Phase Shifting 2 frequency horz.+vert. (experimental)", "PhaseShiftTwoFreqHorzVert");
45
    ui->algorithmComboBox->addItem("Phase Shifting 2 frequency horz.+vert. (experimental)", "PhaseShiftTwoFreqHorzVert");
46
    ui->algorithmComboBox->addItem("Embedded Phase Shifting (experimental)", "PhaseShiftEmbedded");
46
    ui->algorithmComboBox->addItem("Embedded Phase Shifting (experimental)", "PhaseShiftEmbedded");
47
    ui->algorithmComboBox->addItem("Line Shifting", "LineShift");
47
    ui->algorithmComboBox->addItem("Line Shifting", "LineShift");
48
 
48
 
49
    // Set all elements to current application settings
49
    // Set all elements to current application settings
50
    unsigned int patternModeIndex = ui->algorithmComboBox->findData(settings.value("algorithm"));
50
    unsigned int patternModeIndex = ui->algorithmComboBox->findData(settings.value("algorithm"));
51
    ui->algorithmComboBox->setCurrentIndex(patternModeIndex);
51
    ui->algorithmComboBox->setCurrentIndex(patternModeIndex);
52
 
52
 
53
    // Projector
53
    // Projector
54
    int projectorIndex = ui->projectorComboBox->findData(settings.value("projector/screenNumber"));
54
    int projectorIndex = ui->projectorComboBox->findData(settings.value("projector/screenNumber"));
55
    ui->projectorComboBox->setCurrentIndex(projectorIndex);
55
    ui->projectorComboBox->setCurrentIndex(projectorIndex);
56
    ui->diamondPatternCheckBox->setChecked(settings.value("projector/diamondPattern").toBool());
56
    ui->diamondPatternCheckBox->setChecked(settings.value("projector/diamondPattern").toBool());
57
 
57
 
58
    // Cameras
58
    // Cameras
59
    QPoint camera0InterfaceSetting = QPoint(settings.value("camera0/interfaceNumber",-1).toInt(), settings.value("camera0/cameraNumber",-1).toInt());
59
    QPoint camera0InterfaceSetting = QPoint(settings.value("camera0/interfaceNumber",-1).toInt(), settings.value("camera0/cameraNumber",-1).toInt());
60
    unsigned int camera0Index = ui->camera0ComboBox->findData(camera0InterfaceSetting);
60
    unsigned int camera0Index = ui->camera0ComboBox->findData(camera0InterfaceSetting);
61
    ui->camera0ComboBox->setCurrentIndex(camera0Index);
61
    ui->camera0ComboBox->setCurrentIndex(camera0Index);
62
 
62
 
63
    QPoint camera1InterfaceSetting = QPoint(settings.value("camera1/interfaceNumber",-1).toInt(), settings.value("camera1/cameraNumber",-1).toInt());
63
    QPoint camera1InterfaceSetting = QPoint(settings.value("camera1/interfaceNumber",-1).toInt(), settings.value("camera1/cameraNumber",-1).toInt());
64
    unsigned int camera1Index = ui->camera1ComboBox->findData(camera1InterfaceSetting);
64
    unsigned int camera1Index = ui->camera1ComboBox->findData(camera1InterfaceSetting);
65
    ui->camera1ComboBox->setCurrentIndex(camera1Index);
65
    ui->camera1ComboBox->setCurrentIndex(camera1Index);
66
 
66
 
-
 
67
    // Shutter
67
    double shutter = settings.value("camera/shutter", 50.0/3.0).toDouble();
68
    double shutter = settings.value("camera/shutter", 50.0/3.0).toDouble();
68
    ui->shutterTimeLabel->setText(QString::number(shutter));
69
    ui->shutterTimeLabel->setText(QString::number(shutter));
69
    ui->shutterSpinBox->setValue(shutter/(50.0/3.0));
70
    ui->shutterSpinBox->setValue(shutter/(50.0/3.0));
70
 
71
 
-
 
72
    QString shuttersString = settings.value("camera/shuttersHDR").toString();
-
 
73
    QStringList list = shuttersString.split("/", QString::SkipEmptyParts);
-
 
74
    std::vector<float> shutters(list.size());
-
 
75
    for(int i=0; i<list.size(); i++)
-
 
76
        shutters[i] = list[i].toFloat();
-
 
77
    bool HDR = !shutters.empty();
-
 
78
    int HDRcount = shutters.size();
-
 
79
    ui->HDRCheckBox->setChecked(HDR);
-
 
80
    ui->HDRCountSpinBox->setValue(HDRcount);
-
 
81
    ui->HDRLabel->setEnabled(HDR);
-
 
82
    ui->HDRCountSpinBox->setEnabled(HDR);
-
 
83
 
71
    // Trigger mode
84
    // Trigger mode
72
    QString triggerMode = settings.value("trigger/mode","software").toString();
85
    QString triggerMode = settings.value("trigger/mode","software").toString();
73
    if(triggerMode == "hardware"){
86
    if(triggerMode == "hardware"){
74
        ui->triggerHardwareRadioButton->setChecked(true);
87
        ui->triggerHardwareRadioButton->setChecked(true);
75
        on_triggerHardwareRadioButton_clicked();
88
        on_triggerHardwareRadioButton_clicked();
76
    } else {
89
    } else {
77
        ui->triggerSoftwareRadioButton->setChecked(true);
90
        ui->triggerSoftwareRadioButton->setChecked(true);
78
        on_triggerSoftwareRadioButton_clicked();
91
        on_triggerSoftwareRadioButton_clicked();
79
    }
92
    }
80
    unsigned int shift = settings.value("trigger/shift",0).toInt();
93
    unsigned int shift = settings.value("trigger/shift",0).toInt();
81
    ui->shiftSpinBox->setValue(shift);
94
    ui->shiftSpinBox->setValue(shift);
82
    unsigned int delay = settings.value("trigger/delay",120).toInt();
95
    unsigned int delay = settings.value("trigger/delay",120).toInt();
83
    ui->delaySpinBox->setValue(delay);
96
    ui->delaySpinBox->setValue(delay);
84
 
97
 
85
    // Calibration pattern
98
    // Calibration pattern
86
    unsigned int patternSizeX = settings.value("calibration/patternSizeX", 22).toInt();
99
    unsigned int patternSizeX = settings.value("calibration/patternSizeX", 22).toInt();
87
    ui->patternSizeXSpinBox->setValue(patternSizeX);
100
    ui->patternSizeXSpinBox->setValue(patternSizeX);
88
    unsigned int patternSizeY = settings.value("calibration/patternSizeY", 13).toInt();
101
    unsigned int patternSizeY = settings.value("calibration/patternSizeY", 13).toInt();
89
    ui->patternSizeYSpinBox->setValue(patternSizeY);
102
    ui->patternSizeYSpinBox->setValue(patternSizeY);
90
    float squareSize = settings.value("calibration/squareSize", 15.0).toFloat();
103
    float squareSize = settings.value("calibration/squareSize", 15.0).toFloat();
91
    ui->squareSizeSpinBox->setValue(squareSize);
104
    ui->squareSizeSpinBox->setValue(squareSize);
92
}
105
}
93
 
106
 
94
SMPreferenceDialog::~SMPreferenceDialog(){
107
SMPreferenceDialog::~SMPreferenceDialog(){
95
    delete ui;
108
    delete ui;
96
}
109
}
97
 
110
 
98
void SMPreferenceDialog::on_buttonBox_accepted(){
111
void SMPreferenceDialog::on_buttonBox_accepted(){
99
 
112
 
100
    // Save settings
113
    // Save settings
101
 
114
 
102
    // Pattern mode
115
    // Pattern mode
103
    QString patternMode = ui->algorithmComboBox->itemData(ui->algorithmComboBox->currentIndex()).toString();
116
    QString patternMode = ui->algorithmComboBox->itemData(ui->algorithmComboBox->currentIndex()).toString();
104
    settings.setValue("algorithm", patternMode);
117
    settings.setValue("algorithm", patternMode);
105
 
118
 
106
    // Projector
119
    // Projector
107
    if(ui->projectorComboBox->currentIndex() >= 0){
120
    if(ui->projectorComboBox->currentIndex() >= 0){
108
        int proj = ui->projectorComboBox->itemData(ui->projectorComboBox->currentIndex()).toInt();
121
        int proj = ui->projectorComboBox->itemData(ui->projectorComboBox->currentIndex()).toInt();
109
        settings.setValue("projector/screenNumber", proj);
122
        settings.setValue("projector/screenNumber", proj);
110
        vector<ScreenInfo> screenList = OpenGLContext::GetScreenInfo();
123
        vector<ScreenInfo> screenList = OpenGLContext::GetScreenInfo();
111
        settings.setValue("projector/resX", screenList[proj].resX);
124
        settings.setValue("projector/resX", screenList[proj].resX);
112
        settings.setValue("projector/resY", screenList[proj].resY);
125
        settings.setValue("projector/resY", screenList[proj].resY);
113
    }
126
    }
114
    bool diamondPattern = ui->diamondPatternCheckBox->isChecked();
127
    bool diamondPattern = ui->diamondPatternCheckBox->isChecked();
115
    settings.setValue("projector/diamondPattern", diamondPattern);
128
    settings.setValue("projector/diamondPattern", diamondPattern);
116
    //bool verticalBaseline = ui->verticalBaselineCheckbox->isChecked();
129
    //bool verticalBaseline = ui->verticalBaselineCheckbox->isChecked();
117
    //settings.setValue("projector/verticalBaseline", verticalBaseline);
130
    //settings.setValue("projector/verticalBaseline", verticalBaseline);
118
 
131
 
119
    // Cameras
132
    // Cameras
120
    if(ui->camera0ComboBox->currentIndex() >=0){
133
    if(ui->camera0ComboBox->currentIndex() >=0){
121
        QPoint cam0 = ui->camera0ComboBox->itemData(ui->camera0ComboBox->currentIndex()).toPoint();
134
        QPoint cam0 = ui->camera0ComboBox->itemData(ui->camera0ComboBox->currentIndex()).toPoint();
122
        settings.setValue("camera0/interfaceNumber", cam0.x());
135
        settings.setValue("camera0/interfaceNumber", cam0.x());
123
        settings.setValue("camera0/cameraNumber", cam0.y());
136
        settings.setValue("camera0/cameraNumber", cam0.y());
124
    }
137
    }
125
    if(ui->camera1ComboBox->currentIndex() >=0){
138
    if(ui->camera1ComboBox->currentIndex() >=0){
126
        QPoint cam1 = ui->camera1ComboBox->itemData(ui->camera1ComboBox->currentIndex()).toPoint();
139
        QPoint cam1 = ui->camera1ComboBox->itemData(ui->camera1ComboBox->currentIndex()).toPoint();
127
        settings.setValue("camera1/interfaceNumber", cam1.x());
140
        settings.setValue("camera1/interfaceNumber", cam1.x());
128
        settings.setValue("camera1/cameraNumber", cam1.y());
141
        settings.setValue("camera1/cameraNumber", cam1.y());
129
    }
142
    }
130
 
143
 
-
 
144
    // Shutter
131
    double shutter = ui->shutterSpinBox->value() * 50.0/3.0;
145
    double shutter = ui->shutterSpinBox->value() * 50.0/3.0;
132
    settings.setValue("camera/shutter", shutter);
146
    settings.setValue("camera/shutter", shutter);
133
 
147
 
-
 
148
    QString shuttersHDR = "";
-
 
149
    if (ui->HDRCheckBox->isChecked()) {
-
 
150
        for(int i = 0; i < ui->HDRCountSpinBox->value() - 1; ++i) {
-
 
151
            shuttersHDR += QString::number(shutter) + QString("/");
-
 
152
            shutter *= 2;
-
 
153
        }
-
 
154
        shuttersHDR += QString::number(shutter);
-
 
155
    }
-
 
156
    settings.setValue("camera/shuttersHDR", shuttersHDR);
-
 
157
 
134
    // Trigger mode
158
    // Trigger mode
135
    if(ui->triggerHardwareRadioButton->isChecked())
159
    if(ui->triggerHardwareRadioButton->isChecked())
136
        settings.setValue("trigger/mode", "hardware");
160
        settings.setValue("trigger/mode", "hardware");
137
    else
161
    else
138
        settings.setValue("trigger/mode", "software");
162
        settings.setValue("trigger/mode", "software");
139
    auto shift = ui->shiftSpinBox->value();
163
    auto shift = ui->shiftSpinBox->value();
140
    settings.setValue("trigger/shift", shift);
164
    settings.setValue("trigger/shift", shift);
141
    auto delay = ui->delaySpinBox->value();
165
    auto delay = ui->delaySpinBox->value();
142
    settings.setValue("trigger/delay", delay);
166
    settings.setValue("trigger/delay", delay);
143
 
167
 
144
    // Calibration pattern
168
    // Calibration pattern
145
    auto patternSizeX = ui->patternSizeXSpinBox->value();
169
    auto patternSizeX = ui->patternSizeXSpinBox->value();
146
    settings.setValue("calibration/patternSizeX", patternSizeX);
170
    settings.setValue("calibration/patternSizeX", patternSizeX);
147
    auto patternSizeY = ui->patternSizeYSpinBox->value();
171
    auto patternSizeY = ui->patternSizeYSpinBox->value();
148
    settings.setValue("calibration/patternSizeY", patternSizeY);
172
    settings.setValue("calibration/patternSizeY", patternSizeY);
149
    auto squareSize = ui->squareSizeSpinBox->value();
173
    auto squareSize = ui->squareSizeSpinBox->value();
150
    settings.setValue("calibration/squareSize", squareSize);
174
    settings.setValue("calibration/squareSize", squareSize);
151
 
175
 
152
}
176
}
153
 
177
 
154
 
178
 
155
 
179
 
156
void SMPreferenceDialog::on_triggerHardwareRadioButton_clicked(){
180
void SMPreferenceDialog::on_triggerHardwareRadioButton_clicked(){
157
 
181
 
158
    ui->shiftLabel->setEnabled(true);
182
    ui->shiftLabel->setEnabled(true);
159
    ui->shiftSpinBox->setEnabled(true);
183
    ui->shiftSpinBox->setEnabled(true);
160
    ui->delayLabel->setEnabled(false);
184
    ui->delayLabel->setEnabled(false);
161
    ui->delaySpinBox->setEnabled(false);
185
    ui->delaySpinBox->setEnabled(false);
162
    ui->delayMsLabel->setEnabled(false);
186
    ui->delayMsLabel->setEnabled(false);
163
}
187
}
164
 
188
 
165
void SMPreferenceDialog::on_triggerSoftwareRadioButton_clicked(){
189
void SMPreferenceDialog::on_triggerSoftwareRadioButton_clicked(){
166
 
190
 
167
    ui->shiftLabel->setEnabled(false);
191
    ui->shiftLabel->setEnabled(false);
168
    ui->shiftSpinBox->setEnabled(false);
192
    ui->shiftSpinBox->setEnabled(false);
169
    ui->delayLabel->setEnabled(true);
193
    ui->delayLabel->setEnabled(true);
170
    ui->delaySpinBox->setEnabled(true);
194
    ui->delaySpinBox->setEnabled(true);
171
    ui->delayMsLabel->setEnabled(true);
195
    ui->delayMsLabel->setEnabled(true);
172
}
196
}
173
 
197
 
174
void SMPreferenceDialog::on_shutterSpinBox_valueChanged(int arg1)
198
void SMPreferenceDialog::on_shutterSpinBox_valueChanged(int arg1)
175
{
199
{
176
    ui->shutterTimeLabel->setText(QString::number(50.0/3.0 * arg1));
200
    ui->shutterTimeLabel->setText(QString::number(50.0/3.0 * arg1));
177
}
201
}
-
 
202
 
-
 
203
void SMPreferenceDialog::on_HDRCheckBox_toggled(bool checked)
-
 
204
{
-
 
205
    ui->HDRLabel->setEnabled(checked);
-
 
206
    ui->HDRCountSpinBox->setEnabled(checked);
-
 
207
}
178
 
208