Subversion Repositories seema-scanner

Rev

Rev 169 | Rev 192 | Go to most recent revision | Only display areas with differences | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 169 Rev 182
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("Gray Coding Max-intensity (experimental)", "GrayCodeMax");
-
 
44
    ui->algorithmComboBox->addItem("Phase Shifting 2 frequency heterodyne", "PhaseShiftTwoFreq");
43
    ui->algorithmComboBox->addItem("Phase Shifting 2 frequency heterodyne", "PhaseShiftTwoFreq");
45
    ui->algorithmComboBox->addItem("Phase Shifting 3 frequency (experimental)", "PhaseShiftThreeFreq");
44
    ui->algorithmComboBox->addItem("Phase Shifting 3 frequency (experimental)", "PhaseShiftThreeFreq");
46
    ui->algorithmComboBox->addItem("Line Shift", "LineShift");
45
    ui->algorithmComboBox->addItem("Line Shifting", "LineShift");
47
 
46
 
48
    // Set all elements to current application settings
47
    // Set all elements to current application settings
49
    unsigned int patternModeIndex = ui->algorithmComboBox->findData(settings.value("algorithm"));
48
    unsigned int patternModeIndex = ui->algorithmComboBox->findData(settings.value("algorithm"));
50
    ui->algorithmComboBox->setCurrentIndex(patternModeIndex);
49
    ui->algorithmComboBox->setCurrentIndex(patternModeIndex);
51
 
50
 
52
    // Projector
51
    // Projector
53
    int projectorIndex = ui->projectorComboBox->findData(settings.value("projector/screenNumber"));
52
    int projectorIndex = ui->projectorComboBox->findData(settings.value("projector/screenNumber"));
54
    ui->projectorComboBox->setCurrentIndex(projectorIndex);
53
    ui->projectorComboBox->setCurrentIndex(projectorIndex);
55
    ui->diamondPatternCheckBox->setChecked(settings.value("projector/diamondPattern").toBool());
54
    ui->diamondPatternCheckBox->setChecked(settings.value("projector/diamondPattern").toBool());
56
 
55
 
57
    // Cameras
56
    // Cameras
58
    QPoint camera0InterfaceSetting = QPoint(settings.value("camera0/interfaceNumber",-1).toInt(), settings.value("camera0/cameraNumber",-1).toInt());
57
    QPoint camera0InterfaceSetting = QPoint(settings.value("camera0/interfaceNumber",-1).toInt(), settings.value("camera0/cameraNumber",-1).toInt());
59
    unsigned int camera0Index = ui->camera0ComboBox->findData(camera0InterfaceSetting);
58
    unsigned int camera0Index = ui->camera0ComboBox->findData(camera0InterfaceSetting);
60
    ui->camera0ComboBox->setCurrentIndex(camera0Index);
59
    ui->camera0ComboBox->setCurrentIndex(camera0Index);
61
 
60
 
62
    QPoint camera1InterfaceSetting = QPoint(settings.value("camera1/interfaceNumber",-1).toInt(), settings.value("camera1/cameraNumber",-1).toInt());
61
    QPoint camera1InterfaceSetting = QPoint(settings.value("camera1/interfaceNumber",-1).toInt(), settings.value("camera1/cameraNumber",-1).toInt());
63
    unsigned int camera1Index = ui->camera1ComboBox->findData(camera1InterfaceSetting);
62
    unsigned int camera1Index = ui->camera1ComboBox->findData(camera1InterfaceSetting);
64
    ui->camera1ComboBox->setCurrentIndex(camera1Index);
63
    ui->camera1ComboBox->setCurrentIndex(camera1Index);
65
 
64
 
66
    float shutter = settings.value("camera/shutter", 16.666).toFloat();
65
    float shutter = settings.value("camera/shutter", 16.666).toFloat();
67
    ui->shutterDoubleSpinBox->setValue(shutter);
66
    ui->shutterDoubleSpinBox->setValue(shutter);
68
 
67
 
69
    // Trigger mode
68
    // Trigger mode
70
    QString triggerMode = settings.value("trigger/mode","software").toString();
69
    QString triggerMode = settings.value("trigger/mode","software").toString();
71
    if(triggerMode == "hardware"){
70
    if(triggerMode == "hardware"){
72
        ui->triggerHardwareRadioButton->setChecked(true);
71
        ui->triggerHardwareRadioButton->setChecked(true);
73
        on_triggerHardwareRadioButton_clicked();
72
        on_triggerHardwareRadioButton_clicked();
74
    } else {
73
    } else {
75
        ui->triggerSoftwareRadioButton->setChecked(true);
74
        ui->triggerSoftwareRadioButton->setChecked(true);
76
        on_triggerSoftwareRadioButton_clicked();
75
        on_triggerSoftwareRadioButton_clicked();
77
    }
76
    }
78
    unsigned int shift = settings.value("trigger/shift",0).toInt();
77
    unsigned int shift = settings.value("trigger/shift",0).toInt();
79
    ui->shiftSpinBox->setValue(shift);
78
    ui->shiftSpinBox->setValue(shift);
80
    unsigned int delay = settings.value("trigger/delay",120).toInt();
79
    unsigned int delay = settings.value("trigger/delay",120).toInt();
81
    ui->delaySpinBox->setValue(delay);
80
    ui->delaySpinBox->setValue(delay);
82
 
81
 
83
    // Calibration pattern
82
    // Calibration pattern
84
    unsigned int patternSizeX = settings.value("calibration/patternSizeX", 22).toInt();
83
    unsigned int patternSizeX = settings.value("calibration/patternSizeX", 22).toInt();
85
    ui->patternSizeXSpinBox->setValue(patternSizeX);
84
    ui->patternSizeXSpinBox->setValue(patternSizeX);
86
    unsigned int patternSizeY = settings.value("calibration/patternSizeY", 13).toInt();
85
    unsigned int patternSizeY = settings.value("calibration/patternSizeY", 13).toInt();
87
    ui->patternSizeYSpinBox->setValue(patternSizeY);
86
    ui->patternSizeYSpinBox->setValue(patternSizeY);
88
    float squareSize = settings.value("calibration/squareSize", 15.0).toFloat();
87
    float squareSize = settings.value("calibration/squareSize", 15.0).toFloat();
89
    ui->squareSizeSpinBox->setValue(squareSize);
88
    ui->squareSizeSpinBox->setValue(squareSize);
90
}
89
}
91
 
90
 
92
SMPreferenceDialog::~SMPreferenceDialog(){
91
SMPreferenceDialog::~SMPreferenceDialog(){
93
    delete ui;
92
    delete ui;
94
}
93
}
95
 
94
 
96
void SMPreferenceDialog::on_buttonBox_accepted(){
95
void SMPreferenceDialog::on_buttonBox_accepted(){
97
 
96
 
98
    // Save settings
97
    // Save settings
99
 
98
 
100
    // Pattern mode
99
    // Pattern mode
101
    QString patternMode = ui->algorithmComboBox->itemData(ui->algorithmComboBox->currentIndex()).toString();
100
    QString patternMode = ui->algorithmComboBox->itemData(ui->algorithmComboBox->currentIndex()).toString();
102
    settings.setValue("algorithm", patternMode);
101
    settings.setValue("algorithm", patternMode);
103
 
102
 
104
    // Projector
103
    // Projector
105
    int proj = ui->projectorComboBox->itemData(ui->projectorComboBox->currentIndex()).toInt();
104
    int proj = ui->projectorComboBox->itemData(ui->projectorComboBox->currentIndex()).toInt();
106
    settings.setValue("projector/screenNumber", proj);
105
    settings.setValue("projector/screenNumber", proj);
107
    bool diamondPattern = ui->diamondPatternCheckBox->isChecked();
106
    bool diamondPattern = ui->diamondPatternCheckBox->isChecked();
108
    settings.setValue("projector/diamondPattern", diamondPattern);
107
    settings.setValue("projector/diamondPattern", diamondPattern);
109
    vector<ScreenInfo> screenList = OpenGLContext::GetScreenInfo();
108
    vector<ScreenInfo> screenList = OpenGLContext::GetScreenInfo();
110
    settings.setValue("projector/resX", screenList[proj].resX);
109
    settings.setValue("projector/resX", screenList[proj].resX);
111
    settings.setValue("projector/resY", screenList[proj].resY);
110
    settings.setValue("projector/resY", screenList[proj].resY);
112
    //bool verticalBaseline = ui->verticalBaselineCheckbox->isChecked();
111
    //bool verticalBaseline = ui->verticalBaselineCheckbox->isChecked();
113
    //settings.setValue("projector/verticalBaseline", verticalBaseline);
112
    //settings.setValue("projector/verticalBaseline", verticalBaseline);
114
 
113
 
115
    // Cameras
114
    // Cameras
116
    QPoint cam0 = ui->camera0ComboBox->itemData(ui->camera0ComboBox->currentIndex()).toPoint();
115
    QPoint cam0 = ui->camera0ComboBox->itemData(ui->camera0ComboBox->currentIndex()).toPoint();
117
    settings.setValue("camera0/interfaceNumber", cam0.x());
116
    settings.setValue("camera0/interfaceNumber", cam0.x());
118
    settings.setValue("camera0/cameraNumber", cam0.y());
117
    settings.setValue("camera0/cameraNumber", cam0.y());
119
 
118
 
120
    QPoint cam1 = ui->camera1ComboBox->itemData(ui->camera1ComboBox->currentIndex()).toPoint();
119
    QPoint cam1 = ui->camera1ComboBox->itemData(ui->camera1ComboBox->currentIndex()).toPoint();
121
    settings.setValue("camera1/interfaceNumber", cam1.x());
120
    settings.setValue("camera1/interfaceNumber", cam1.x());
122
    settings.setValue("camera1/cameraNumber", cam1.y());
121
    settings.setValue("camera1/cameraNumber", cam1.y());
123
 
122
 
124
    float shutter = ui->shutterDoubleSpinBox->value();
123
    float shutter = ui->shutterDoubleSpinBox->value();
125
    settings.setValue("camera/shutter", shutter);
124
    settings.setValue("camera/shutter", shutter);
126
 
125
 
127
    // Trigger mode
126
    // Trigger mode
128
    if(ui->triggerHardwareRadioButton->isChecked())
127
    if(ui->triggerHardwareRadioButton->isChecked())
129
        settings.setValue("trigger/mode", "hardware");
128
        settings.setValue("trigger/mode", "hardware");
130
    else
129
    else
131
        settings.setValue("trigger/mode", "software");
130
        settings.setValue("trigger/mode", "software");
132
    unsigned int shift = ui->shiftSpinBox->value();
131
    unsigned int shift = ui->shiftSpinBox->value();
133
    settings.setValue("trigger/shift", shift);
132
    settings.setValue("trigger/shift", shift);
134
    unsigned int delay = ui->delaySpinBox->value();
133
    unsigned int delay = ui->delaySpinBox->value();
135
    settings.setValue("trigger/delay", delay);
134
    settings.setValue("trigger/delay", delay);
136
 
135
 
137
    // Calibration pattern
136
    // Calibration pattern
138
    unsigned int patternSizeX = ui->patternSizeXSpinBox->value();
137
    unsigned int patternSizeX = ui->patternSizeXSpinBox->value();
139
    settings.setValue("calibration/patternSizeX", patternSizeX);
138
    settings.setValue("calibration/patternSizeX", patternSizeX);
140
    unsigned int patternSizeY = ui->patternSizeYSpinBox->value();
139
    unsigned int patternSizeY = ui->patternSizeYSpinBox->value();
141
    settings.setValue("calibration/patternSizeY", patternSizeY);
140
    settings.setValue("calibration/patternSizeY", patternSizeY);
142
    float squareSize = ui->squareSizeSpinBox->value();
141
    float squareSize = ui->squareSizeSpinBox->value();
143
    settings.setValue("calibration/squareSize", squareSize);
142
    settings.setValue("calibration/squareSize", squareSize);
144
 
143
 
145
}
144
}
146
 
145
 
147
 
146
 
148
 
147
 
149
void SMPreferenceDialog::on_triggerHardwareRadioButton_clicked(){
148
void SMPreferenceDialog::on_triggerHardwareRadioButton_clicked(){
150
 
149
 
151
    ui->shiftLabel->setEnabled(true);
150
    ui->shiftLabel->setEnabled(true);
152
    ui->shiftSpinBox->setEnabled(true);
151
    ui->shiftSpinBox->setEnabled(true);
153
    ui->delayLabel->setEnabled(false);
152
    ui->delayLabel->setEnabled(false);
154
    ui->delaySpinBox->setEnabled(false);
153
    ui->delaySpinBox->setEnabled(false);
155
    ui->delayMsLabel->setEnabled(false);
154
    ui->delayMsLabel->setEnabled(false);
156
}
155
}
157
 
156
 
158
void SMPreferenceDialog::on_triggerSoftwareRadioButton_clicked(){
157
void SMPreferenceDialog::on_triggerSoftwareRadioButton_clicked(){
159
 
158
 
160
    ui->shiftLabel->setEnabled(false);
159
    ui->shiftLabel->setEnabled(false);
161
    ui->shiftSpinBox->setEnabled(false);
160
    ui->shiftSpinBox->setEnabled(false);
162
    ui->delayLabel->setEnabled(true);
161
    ui->delayLabel->setEnabled(true);
163
    ui->delaySpinBox->setEnabled(true);
162
    ui->delaySpinBox->setEnabled(true);
164
    ui->delayMsLabel->setEnabled(true);
163
    ui->delayMsLabel->setEnabled(true);
165
}
164
}
166
 
165