Subversion Repositories seema-scanner

Rev

Rev 29 | Rev 32 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 29 Rev 30
Line 8... Line 8...
8
    ui->setupUi(this);
8
    ui->setupUi(this);
9
 
9
 
10
    // Register metatypes
10
    // Register metatypes
11
    qRegisterMetaType<cv::Mat>("cv::Mat");
11
    qRegisterMetaType<cv::Mat>("cv::Mat");
12
    qRegisterMetaType< std::vector<cv::Mat> >("std::vector<cv::Mat>");
12
    qRegisterMetaType< std::vector<cv::Mat> >("std::vector<cv::Mat>");
-
 
13
    qRegisterMetaType< std::vector<float> >("std::vector<float>");
13
    qRegisterMetaType<SMCalibrationSet>("SMCalibrationSet");
14
    qRegisterMetaType<SMCalibrationSet>("SMCalibrationSet");
14
    qRegisterMetaType<SMCalibrationParameters>("SMCalibrationParameters");
15
    qRegisterMetaType<SMCalibrationParameters>("SMCalibrationParameters");
15
    qRegisterMetaTypeStreamOperators<SMCalibrationParameters>("SMCalibrationParameters");
16
    qRegisterMetaTypeStreamOperators<SMCalibrationParameters>("SMCalibrationParameters");
16
    qRegisterMetaType< std::vector<SMCalibrationSet> >("std::vector<SMCalibrationSet>");
17
    qRegisterMetaType< std::vector<SMCalibrationSet> >("std::vector<SMCalibrationSet>");
17
    qRegisterMetaType<SMFrameSequence>("SMFrameSequence");
18
    qRegisterMetaType<SMFrameSequence>("SMFrameSequence");
Line 29... Line 30...
29
 
30
 
30
    // Connections
31
    // Connections
31
    connect(captureWorker, SIGNAL(newFrame(unsigned int, cv::Mat)), this, SLOT(onReceiveFrame(unsigned int, cv::Mat)));
32
    connect(captureWorker, SIGNAL(newFrame(unsigned int, cv::Mat)), this, SLOT(onReceiveFrame(unsigned int, cv::Mat)));
32
    connect(captureWorker, SIGNAL(newCalibrationSet(SMCalibrationSet)), this, SLOT(onReceiveCalibrationSet(SMCalibrationSet)));
33
    connect(captureWorker, SIGNAL(newCalibrationSet(SMCalibrationSet)), this, SLOT(onReceiveCalibrationSet(SMCalibrationSet)));
33
    connect(captureWorker, SIGNAL(newFrameSequence(SMFrameSequence)), this, SLOT(onReceiveFrameSequence(SMFrameSequence)));
34
    connect(captureWorker, SIGNAL(newFrameSequence(SMFrameSequence)), this, SLOT(onReceiveFrameSequence(SMFrameSequence)));
-
 
35
    connect(captureWorker, SIGNAL(rotatedTo(float)), this, SLOT(onReceiveRotatedTo(float)));
34
 
36
 
35
    // Start capturing
37
    // Start capturing
36
    QMetaObject::invokeMethod(captureWorker, "setup");
38
    QMetaObject::invokeMethod(captureWorker, "setup");
37
    QMetaObject::invokeMethod(captureWorker, "doWork");
39
    QMetaObject::invokeMethod(captureWorker, "doWork");
38
 
40
 
Line 92... Line 94...
92
 
94
 
93
    QMetaObject::invokeMethod(captureWorker, "acquireCalibrationSet", Q_ARG(float, -1.0));
95
    QMetaObject::invokeMethod(captureWorker, "acquireCalibrationSet", Q_ARG(float, -1.0));
94
 
96
 
95
}
97
}
96
 
98
 
-
 
99
 
-
 
100
void SMScanner::on_batchCalibrationButton_clicked(){
-
 
101
 
-
 
102
    // If in review mode, go back to aquisition mode
-
 
103
    if(calibrationReviewMode){
-
 
104
        ui->calibrationListWidget->clearSelection();
-
 
105
        ui->singleCalibrationButton->setText("Single Aquisition");
-
 
106
        ui->batchCalibrationButton->setText("Batch Aquisition");
-
 
107
        calibrationReviewMode = false;
-
 
108
        return;
-
 
109
    }
-
 
110
 
-
 
111
    // Construct vector of angles
-
 
112
    int angleStart = ui->calibrationBatchStartSpinBox->value();
-
 
113
    int angleEnd = ui->calibrationBatchEndSpinBox->value();
-
 
114
    int angleStep = ui->calibrationBatchStepSpinBox->value();
-
 
115
 
-
 
116
    if(angleStart > angleEnd)
-
 
117
        angleEnd += 360;
-
 
118
 
-
 
119
    std::vector<float> angles;
-
 
120
    for(int i=angleStart; i<=angleEnd; i+=angleStep)
-
 
121
        angles.push_back(i % 360);
-
 
122
 
-
 
123
    QMetaObject::invokeMethod(captureWorker, "acquireCalibrationSets", Q_ARG(std::vector<float>, angles));
-
 
124
 
-
 
125
    std::cout << "Aquiring sets at ";
-
 
126
    for(int i=0; i<angles.size(); i++)
-
 
127
        std::cout << angles[i] << " ";
-
 
128
    std::cout << " degrees" <<std::endl;
-
 
129
}
-
 
130
 
-
 
131
 
97
void SMScanner::on_calibrationRotationDial_sliderReleased(){
132
void SMScanner::on_calibrationRotationDial_sliderReleased(){
98
 
133
 
99
    float angle = ui->calibrationRotationDial->value();
134
    float angle = ui->calibrationRotationDial->value();
100
    std::cout << "Rotation stage target: " << angle << std::endl;
135
    std::cout << "Rotation stage target: " << angle << std::endl;
101
    QMetaObject::invokeMethod(captureWorker, "rotateTo", Q_ARG(float, angle));
136
    QMetaObject::invokeMethod(captureWorker, "rotateTo", Q_ARG(float, angle));
Line 148... Line 183...
148
    // Start capturing
183
    // Start capturing
149
    QMetaObject::invokeMethod(calibrationWorker, "performCalibration", Q_ARG(std::vector<SMCalibrationSet>, calibrationData));
184
    QMetaObject::invokeMethod(calibrationWorker, "performCalibration", Q_ARG(std::vector<SMCalibrationSet>, calibrationData));
150
 
185
 
151
}
186
}
152
 
187
 
-
 
188
 
-
 
189
 
153
void SMScanner::onCalibrationSetProcessed(int idx){
190
void SMScanner::onCalibrationSetProcessed(int idx){
154
 
191
 
155
    ui->calibrationListWidget->setCurrentRow(idx);
192
    ui->calibrationListWidget->setCurrentRow(idx);
156
}
193
}
157
 
194
 
Line 217... Line 254...
217
    QMetaObject::invokeMethod(captureWorker, "acquireFrameSequence", Q_ARG(float, -1.0));
254
    QMetaObject::invokeMethod(captureWorker, "acquireFrameSequence", Q_ARG(float, -1.0));
218
 
255
 
219
}
256
}
220
 
257
 
221
 
258
 
-
 
259
void SMScanner::on_batchCaptureButton_clicked(){
-
 
260
 
-
 
261
    // If in review mode, go back to aquisition mode
-
 
262
    if(captureReviewMode){
-
 
263
        ui->captureTreeWidget->clearSelection();
-
 
264
        ui->singleCaptureButton->setText("Single Aquisition");
-
 
265
        ui->batchCaptureButton->setText("Batch Aquisition");
-
 
266
        captureReviewMode = false;
-
 
267
        return;
-
 
268
    }
-
 
269
 
-
 
270
    // Construct vector of angles
-
 
271
    int angleStart = ui->captureBatchStartSpinBox->value();
-
 
272
    int angleEnd = ui->captureBatchEndSpinBox->value();
-
 
273
    int angleStep = ui->captureBatchStepSpinBox->value();
-
 
274
 
-
 
275
    if(angleStart > angleEnd)
-
 
276
        angleEnd += 360;
-
 
277
 
-
 
278
    std::vector<float> angles;
-
 
279
    for(int i=angleStart; i<=angleEnd; i+=angleStep)
-
 
280
        angles.push_back(i % 360);
-
 
281
 
-
 
282
    std::cout << "Aquiring sequences at ";
-
 
283
    for(int i=0; i<angles.size(); i++)
-
 
284
        std::cout << angles[i] << " ";
-
 
285
    std::cout << " degrees" <<std::endl;
-
 
286
 
-
 
287
    QMetaObject::invokeMethod(captureWorker, "acquireFrameSequences", Q_ARG(std::vector<float>, angles));
-
 
288
}
-
 
289
 
222
void SMScanner::on_captureRotationDial_sliderReleased(){
290
void SMScanner::on_captureRotationDial_sliderReleased(){
223
 
291
 
224
    float angle = ui->captureRotationDial->value();
292
    float angle = ui->captureRotationDial->value();
225
    std::cout << "Rotation stage target: " << angle << std::endl;
293
    std::cout << "Rotation stage target: " << angle << std::endl;
226
    QMetaObject::invokeMethod(captureWorker, "rotateTo", Q_ARG(float, angle));
294
    QMetaObject::invokeMethod(captureWorker, "rotateTo", Q_ARG(float, angle));
Line 269... Line 337...
269
        ui->captureCamera1Widget->showImageCV(captureData[idx.x()].frames1[idx.y()]);
337
        ui->captureCamera1Widget->showImageCV(captureData[idx.x()].frames1[idx.y()]);
270
    }
338
    }
271
 
339
 
272
//     std::cout << "on_captureTreeWidget_itemSelectionChanged" << std::endl;
340
//     std::cout << "on_captureTreeWidget_itemSelectionChanged" << std::endl;
273
}
341
}
-
 
342
 
-
 
343
 
-
 
344
void SMScanner::onReceiveRotatedTo(float angle){
-
 
345
 
-
 
346
    // update ui with new position
-
 
347
    ui->calibrationRotationDial->setValue(angle);
-
 
348
    ui->captureRotationDial->setValue(angle);
-
 
349
 
-
 
350
}