122 lines
2.3 KiB
Text
122 lines
2.3 KiB
Text
|
/*
|
||
|
* show_gl implementation
|
||
|
*
|
||
|
* Copyright (C) Kai Lingemann, Andreas Nuechter, Jan Elseberg, Dorit Borrmann, Amuz Tamrakars
|
||
|
*
|
||
|
* Released under the GPL version 3.
|
||
|
*
|
||
|
*/
|
||
|
|
||
|
/**
|
||
|
* @file
|
||
|
* @brief Implementation for displaying of a matched 3D scene
|
||
|
* @author Andreas Nuechter. Institute of Computer Science, University of Osnabrueck, Germany.
|
||
|
* @author Kai Lingemann. Institute of Computer Science, University of Osnabrueck, Germany.
|
||
|
*/
|
||
|
|
||
|
#include "show_common.cc"
|
||
|
|
||
|
#include <csignal>
|
||
|
|
||
|
void signal_segv(int v)
|
||
|
{
|
||
|
static bool segfault = false;
|
||
|
if(!segfault) {
|
||
|
segfault = true;
|
||
|
cout << endl << "Segmentation fault" << endl;
|
||
|
deinitShow();
|
||
|
}
|
||
|
exit(-1);
|
||
|
}
|
||
|
|
||
|
void signal_interrupt(int v)
|
||
|
{
|
||
|
static bool segfault = false;
|
||
|
if(!segfault) {
|
||
|
segfault = true;
|
||
|
cout << endl << "Exiting by interrupt" << endl;
|
||
|
deinitShow();
|
||
|
}
|
||
|
exit(-1);
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Main function.
|
||
|
* Reads the scan (scan000.3d, ...) and frames files (scan000.frames, ...) from the data directory.
|
||
|
* The frames are used for animation of the matching process.
|
||
|
*/
|
||
|
int main(int argc, char **argv)
|
||
|
{
|
||
|
signal(SIGSEGV, signal_segv);
|
||
|
signal(SIGINT, signal_interrupt);
|
||
|
signal(SIGTERM, signal_interrupt);
|
||
|
|
||
|
initShow(argc, argv);
|
||
|
initScreenWindow();
|
||
|
|
||
|
newMenu();
|
||
|
glutMainLoop();
|
||
|
}
|
||
|
|
||
|
|
||
|
void updateCamControls() {
|
||
|
cam_spinner->set_int_limits( 1, cams.size());
|
||
|
cam_spinner->set_int_val(cam_choice);
|
||
|
}
|
||
|
|
||
|
void resetRotationButton() {
|
||
|
rotButton->reset();
|
||
|
}
|
||
|
|
||
|
void updateTopViewControls() {
|
||
|
if(showTopView) {
|
||
|
pzoom_spinner->enable();
|
||
|
cangle_spinner->disable();
|
||
|
} else {
|
||
|
pzoom_spinner->disable();
|
||
|
cangle_spinner->enable();
|
||
|
}
|
||
|
}
|
||
|
|
||
|
|
||
|
void updateControls() {
|
||
|
glui1->sync_live();
|
||
|
glui1->show();
|
||
|
glui2->sync_live();
|
||
|
glui2->show();
|
||
|
}
|
||
|
|
||
|
static bool interrupted = false;
|
||
|
void interruptDrawing() {
|
||
|
interrupted = true;
|
||
|
}
|
||
|
void checkForInterrupt() {
|
||
|
interrupted = false;
|
||
|
}
|
||
|
bool isInterrupted() {
|
||
|
#ifdef WITH_FREEGLUT
|
||
|
#ifndef __APPLE__
|
||
|
glutMainLoopEvent();
|
||
|
#endif
|
||
|
#endif
|
||
|
glutSetWindow(window_id);
|
||
|
return interrupted;
|
||
|
}
|
||
|
|
||
|
void updatePointModeControls() {
|
||
|
switch(pointmode) {
|
||
|
case -1:
|
||
|
always_box->set_int_val(0);
|
||
|
never_box->set_int_val(1);
|
||
|
break;
|
||
|
case 0:
|
||
|
always_box->set_int_val(0);
|
||
|
never_box->set_int_val(0);
|
||
|
break;
|
||
|
case 1:
|
||
|
always_box->set_int_val(1);
|
||
|
never_box->set_int_val(0);
|
||
|
break;
|
||
|
}
|
||
|
}
|