Subversion Repositories seema-scanner

Rev

Rev 169 | Rev 200 | Go to most recent revision | Blame | Compare with Previous | Last modification | View Log | RSS feed

#include "SMPreferenceDialog.h"
#include "ui_SMPreferenceDialog.h"

#include "OpenGLContext.h"
#include "Camera.h"
#include "Algorithm.h"

using namespace std;

SMPreferenceDialog::SMPreferenceDialog(QWidget *parent) : QDialog(parent), ui(new Ui::SMPreferenceDialog) {
    ui->setupUi(this);

    // Query projectors
    vector<ScreenInfo> screenList = OpenGLContext::GetScreenInfo();
    for(unsigned int i=0; i<screenList.size(); i++){
        QString screenString = QString("Screen %1: %2x%3").arg(i).arg(screenList[i].resX).arg(screenList[i].resY);
        ui->projectorComboBox->addItem(screenString, i);
    }

    // Add LC3000 option
    #ifdef WITH_LC3000API
        ui->projectorComboBox->addItem("LC3000 API", -2);
    #endif
    // Add LC4500 option
    #ifdef WITH_LC4500API
        ui->projectorComboBox->addItem("LC4500 API", -3);
    #endif

    // Query cameras
    vector< vector<CameraInfo> > interfaceCameraList = CameraFactory::GetInterfaceCameraList();
    for(unsigned int i=0; i<interfaceCameraList.size(); i++){
        vector<CameraInfo> cameraList = interfaceCameraList[i];
        for(unsigned int j=0; j<cameraList.size(); j++){
            QString cameraString = QString("%1: %2 # %3").arg(cameraList[j].vendor.c_str()).arg(cameraList[j].model.c_str()).arg(cameraList[j].serialNumber);
            ui->camera0ComboBox->addItem(cameraString, QPoint(i, j));
            ui->camera1ComboBox->addItem(cameraString, QPoint(i, j));
        }
    }

    // List pattern modes
    ui->algorithmComboBox->addItem("Gray Coding", "GrayCode");
    ui->algorithmComboBox->addItem("Gray Coding Horizontal+Vertical (experimental)", "GrayCodeHorzVert");
    ui->algorithmComboBox->addItem("Phase Shifting 2 frequency heterodyne", "PhaseShiftTwoFreq");
    ui->algorithmComboBox->addItem("Phase Shifting 3 frequency (experimental)", "PhaseShiftThreeFreq");
    ui->algorithmComboBox->addItem("Line Shifting", "LineShift");

    // Set all elements to current application settings
    unsigned int patternModeIndex = ui->algorithmComboBox->findData(settings.value("algorithm"));
    ui->algorithmComboBox->setCurrentIndex(patternModeIndex);

    // Projector
    int projectorIndex = ui->projectorComboBox->findData(settings.value("projector/screenNumber"));
    ui->projectorComboBox->setCurrentIndex(projectorIndex);
    ui->diamondPatternCheckBox->setChecked(settings.value("projector/diamondPattern").toBool());

    // Cameras
    QPoint camera0InterfaceSetting = QPoint(settings.value("camera0/interfaceNumber",-1).toInt(), settings.value("camera0/cameraNumber",-1).toInt());
    unsigned int camera0Index = ui->camera0ComboBox->findData(camera0InterfaceSetting);
    ui->camera0ComboBox->setCurrentIndex(camera0Index);

    QPoint camera1InterfaceSetting = QPoint(settings.value("camera1/interfaceNumber",-1).toInt(), settings.value("camera1/cameraNumber",-1).toInt());
    unsigned int camera1Index = ui->camera1ComboBox->findData(camera1InterfaceSetting);
    ui->camera1ComboBox->setCurrentIndex(camera1Index);

    float shutter = settings.value("camera/shutter", 16.666).toFloat();
    ui->shutterDoubleSpinBox->setValue(shutter);

    // Trigger mode
    QString triggerMode = settings.value("trigger/mode","software").toString();
    if(triggerMode == "hardware"){
        ui->triggerHardwareRadioButton->setChecked(true);
        on_triggerHardwareRadioButton_clicked();
    } else {
        ui->triggerSoftwareRadioButton->setChecked(true);
        on_triggerSoftwareRadioButton_clicked();
    }
    unsigned int shift = settings.value("trigger/shift",0).toInt();
    ui->shiftSpinBox->setValue(shift);
    unsigned int delay = settings.value("trigger/delay",120).toInt();
    ui->delaySpinBox->setValue(delay);

    // Calibration pattern
    unsigned int patternSizeX = settings.value("calibration/patternSizeX", 22).toInt();
    ui->patternSizeXSpinBox->setValue(patternSizeX);
    unsigned int patternSizeY = settings.value("calibration/patternSizeY", 13).toInt();
    ui->patternSizeYSpinBox->setValue(patternSizeY);
    float squareSize = settings.value("calibration/squareSize", 15.0).toFloat();
    ui->squareSizeSpinBox->setValue(squareSize);
}

SMPreferenceDialog::~SMPreferenceDialog(){
    delete ui;
}

void SMPreferenceDialog::on_buttonBox_accepted(){

    // Save settings

    // Pattern mode
    QString patternMode = ui->algorithmComboBox->itemData(ui->algorithmComboBox->currentIndex()).toString();
    settings.setValue("algorithm", patternMode);

    // Projector
    int proj = ui->projectorComboBox->itemData(ui->projectorComboBox->currentIndex()).toInt();
    settings.setValue("projector/screenNumber", proj);
    bool diamondPattern = ui->diamondPatternCheckBox->isChecked();
    settings.setValue("projector/diamondPattern", diamondPattern);
    vector<ScreenInfo> screenList = OpenGLContext::GetScreenInfo();
    settings.setValue("projector/resX", screenList[proj].resX);
    settings.setValue("projector/resY", screenList[proj].resY);
    //bool verticalBaseline = ui->verticalBaselineCheckbox->isChecked();
    //settings.setValue("projector/verticalBaseline", verticalBaseline);

    // Cameras
    QPoint cam0 = ui->camera0ComboBox->itemData(ui->camera0ComboBox->currentIndex()).toPoint();
    settings.setValue("camera0/interfaceNumber", cam0.x());
    settings.setValue("camera0/cameraNumber", cam0.y());

    QPoint cam1 = ui->camera1ComboBox->itemData(ui->camera1ComboBox->currentIndex()).toPoint();
    settings.setValue("camera1/interfaceNumber", cam1.x());
    settings.setValue("camera1/cameraNumber", cam1.y());

    float shutter = ui->shutterDoubleSpinBox->value();
    settings.setValue("camera/shutter", shutter);

    // Trigger mode
    if(ui->triggerHardwareRadioButton->isChecked())
        settings.setValue("trigger/mode", "hardware");
    else
        settings.setValue("trigger/mode", "software");
    unsigned int shift = ui->shiftSpinBox->value();
    settings.setValue("trigger/shift", shift);
    unsigned int delay = ui->delaySpinBox->value();
    settings.setValue("trigger/delay", delay);

    // Calibration pattern
    unsigned int patternSizeX = ui->patternSizeXSpinBox->value();
    settings.setValue("calibration/patternSizeX", patternSizeX);
    unsigned int patternSizeY = ui->patternSizeYSpinBox->value();
    settings.setValue("calibration/patternSizeY", patternSizeY);
    float squareSize = ui->squareSizeSpinBox->value();
    settings.setValue("calibration/squareSize", squareSize);

}



void SMPreferenceDialog::on_triggerHardwareRadioButton_clicked(){

    ui->shiftLabel->setEnabled(true);
    ui->shiftSpinBox->setEnabled(true);
    ui->delayLabel->setEnabled(false);
    ui->delaySpinBox->setEnabled(false);
    ui->delayMsLabel->setEnabled(false);
}

void SMPreferenceDialog::on_triggerSoftwareRadioButton_clicked(){

    ui->shiftLabel->setEnabled(false);
    ui->shiftSpinBox->setEnabled(false);
    ui->delayLabel->setEnabled(true);
    ui->delaySpinBox->setEnabled(true);
    ui->delayMsLabel->setEnabled(true);
}