예제 #1
0
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;
}
예제 #2
0
파일: pose.c 프로젝트: uglyDwarf/linuxtrack
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]);
  }
}