LinuxtrackGui::LinuxtrackGui(QWidget *parent) : QWidget(parent), ds(NULL), xpInstall(NULL), initialized(false), news_serial(-1), guiInit(true), showWineWarning(true) { ui.setupUi(this); PREF; setWindowTitle(QString::fromUtf8("Linuxtrack GUI v") + QString::fromUtf8(PACKAGE_VERSION)); grd = new Guardian(this); me = new ModelEdit(grd, this); lv = new LogView(); pi = new PluginInstall(ui, this); ps = new ProfileSelector(this); QObject::connect(&STATE, SIGNAL(stateChanged(linuxtrack_state_type)), this, SLOT(trackerStateHandler(linuxtrack_state_type))); QObject::connect(&zipper, SIGNAL(finished(int, QProcess::ExitStatus)), this, SLOT(logsPackaged(int, QProcess::ExitStatus))); ui.ModelEditSite->addWidget(me); ui.ProfileSetupSite->addWidget(ps); gui_settings = new QSettings(QString::fromUtf8("linuxtrack"), QString::fromUtf8("ltr_gui")); showWindow = new LtrGuiForm(ui, *gui_settings); helper = new LtrDevHelp(); gui_settings->beginGroup(QString::fromUtf8("MainWindow")); resize(gui_settings->value(QString::fromUtf8("size"), QSize(763, 627)).toSize()); move(gui_settings->value(QString::fromUtf8("pos"), QPoint(0, 0)).toPoint()); welcome = gui_settings->value(QString::fromUtf8("welcome"), true).toBool(); news_serial = gui_settings->value(QString::fromUtf8("news"), -1).toInt(); showWineWarning = gui_settings->value(QString::fromUtf8("wine_warning"), true).toBool(); gui_settings->endGroup(); gui_settings->beginGroup(QString::fromUtf8("TrackingWindow")); showWindow->resize(gui_settings->value(QString::fromUtf8("size"), QSize(800, 600)).toSize()); showWindow->move(gui_settings->value(QString::fromUtf8("pos"), QPoint(0, 0)).toPoint()); gui_settings->endGroup(); gui_settings->beginGroup(QString::fromUtf8("HelperWindow")); helper->resize(gui_settings->value(QString::fromUtf8("size"), QSize(300, 80)).toSize()); helper->move(gui_settings->value(QString::fromUtf8("pos"), QPoint(0, 0)).toPoint()); gui_settings->endGroup(); HelpViewer::LoadPrefs(*gui_settings); ui.LegacyPose->setChecked(ltr_int_use_alter()); ui.LegacyRotation->setChecked(ltr_int_use_oldrot()); ui.TransRotDisable->setChecked(!ltr_int_do_tr_align()); ui.FocalLength->setValue(ltr_int_get_focal_length()); WineLauncher wl; if(!wl.wineAvailable() && showWineWarning){ WineWarn w(this); if(w.exec() == QDialog::Accepted){ showWineWarning = false; } } guiInit = false; }
static void iter_pose(struct bloblist_type blobs, double points[3][3], bool centering) { (void) centering; double tmp[3]; double pp0[3], pp1[3], pp2[3]; double uv, uw, vw; double d, e, f; double d2, e2, f2; double a_max, a_min; double h, j, k, m, n, o, p, q; internal_focal_depth = ltr_int_get_focal_length(); //printf("Pose: Iteration\n"); //printf("I: %15.4g %15.4g %15.4g\n", blobs.blobs[0].x, blobs.blobs[1].x, blobs.blobs[2].x); //printf("I: %15.4g %15.4g %15.4g\n", blobs.blobs[0].y, blobs.blobs[1].y, blobs.blobs[2].y); if(type == M_CAP){ //CAP pp0[0] = blobs.blobs[0].x; pp0[1] = blobs.blobs[0].y; pp0[2] = internal_focal_depth; pp1[0] = blobs.blobs[1].x; pp1[1] = blobs.blobs[1].y; pp1[2] = internal_focal_depth; pp2[0] = blobs.blobs[2].x; pp2[1] = blobs.blobs[2].y; pp2[2] = internal_focal_depth; ltr_int_make_vec(model_point1, model_point2, tmp); d = ltr_int_vec_size(tmp); ltr_int_make_vec(model_point0, model_point2, tmp); e = ltr_int_vec_size(tmp); ltr_int_make_vec(model_point0, model_point1, tmp); f = ltr_int_vec_size(tmp); }else{ //CLIP pp0[0] = blobs.blobs[1].x; pp0[1] = blobs.blobs[1].y; pp0[2] = internal_focal_depth; pp1[0] = blobs.blobs[0].x; pp1[1] = blobs.blobs[0].y; pp1[2] = internal_focal_depth; pp2[0] = blobs.blobs[2].x; pp2[1] = blobs.blobs[2].y; pp2[2] = internal_focal_depth; ltr_int_make_vec(model_point0, model_point2, tmp); d = ltr_int_vec_size(tmp); ltr_int_make_vec(model_point1, model_point2, tmp); e = ltr_int_vec_size(tmp); ltr_int_make_vec(model_point1, model_point0, tmp); f = ltr_int_vec_size(tmp); } // ltr_int_print_vec(pp0, "cp0"); // ltr_int_print_vec(pp1, "cp1"); // ltr_int_print_vec(pp2, "cp2"); ltr_int_normalize_vec(pp0); ltr_int_normalize_vec(pp1); ltr_int_normalize_vec(pp2); //ltr_int_print_vec(pp0, "pp0"); //ltr_int_print_vec(pp1, "pp1"); //ltr_int_print_vec(pp2, "pp2"); // printf("d = %f\t\te = %f\t\tf = %f\n", d, e, f); uv = ltr_int_dot_product(pp0, pp1); uw = ltr_int_dot_product(pp0, pp2); vw = ltr_int_dot_product(pp1, pp2); d2 = d*d; e2 = e*e; f2 = f*f; h=uw * uw - 1.0; j=uv * uv - 1.0; double uxv, uxw; ltr_int_cross_product(pp0, pp1, tmp); uxv = f / ltr_int_vec_size(tmp); ltr_int_cross_product(pp0, pp2, tmp); uxw = e / ltr_int_vec_size(tmp); a_min = e < f ? f : e; a_max = uxv < uxw ? uxv : uxw; //printf("amin = %f; amax = %f\n", a_min, a_max); //Initial guess double a = a_min + (a_min + a_max) / 2; //printf("a = %f\n", a); double a2, b, c, i_d; int i; for(i = 0; i < 20; ++i){ if(a < a_min + 0.1){ a = a_min + 0.1; } if(a > a_max - 0.1){ a = a_max - 0.1; } a2 = a * a; k = sqrt(a2 * j + f2); m = sqrt(a2 * h + e2); n = a * h / m; o = a * j / k; p = a * uv - k; q = a * uw - m; b = a * uv - k; c = a * uw - m; i_d = b * b + c * c - 2 * b * c * vw - d2; //printf("b = %f\nc = %f\ni_d = %f\nd = %f\n", b, c, i_d, i_d / 2*((uv-o)*(p-q*vw)+(uw-n)*(q-p*vw))); a -= i_d / (2*((uv-o)*(p-q*vw)+(uw-n)*(q-p*vw))); //printf("a = %f\n", a); if(abs(i_d) < 1e-2){ break; } } //printf("amin = %f\namax = %f\n", a_min, a_max); if(type == M_CAP){ ltr_int_mul_vec(pp0, a, points[0]); ltr_int_mul_vec(pp1, b, points[1]); }else{ ltr_int_mul_vec(pp0, a, points[1]); ltr_int_mul_vec(pp1, b, points[0]); } ltr_int_mul_vec(pp2, c, points[2]); /* print_matrix(points, "alter92_result"); */ if(pts_dbg_flag == DBG_ON){ printf("RAW 3D points\n"); printf("RAW: %g %g %g\n", points[0][0], points[0][1], points[0][2]); printf("RAW: %g %g %g\n", points[1][0], points[1][1], points[1][2]); printf("RAW: %g %g %g\n", points[2][0], points[2][1], points[2][2]); } }