Beispiel #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;
}
Beispiel #2
0
bool ltr_int_pose_process_blobs(struct bloblist_type blobs,
                        linuxtrack_pose_t *pose, linuxtrack_abs_pose_t *abs_pose, bool centering)
{
//  double points[3][3];
  double points[3][3] = {{28.35380,    -1.24458,    -0.11606},
                         {103.19049,   -44.13490,   -76.36657},
			 {131.32094,    10.75412,   -50.19649}
  };

/*
  double points[3][3] = {{22.923,   110.165,    28.070},
                         {91.241,    44.781,    91.768},
			 {184.262,    18.075,    47.793}
  };
*/
  if(ltr_int_use_alter()){
    alter_pose(blobs, points, centering);
  }else{
    iter_pose(blobs, points, centering);
  }

  double angles[3];
  double displacement[3];
  double abs_center[3] = {0.0, 0.0, 0.0};
  double abs_angles[3] = {0.0, 0.0, 0.0};
  if(ltr_int_use_oldrot()){
    //printf("Rotations: Old algo\n");
    //ltr_int_print_matrix(points, "points");
    double new_base[3][3];
    double vec1[3];
    double vec2[3];
    ltr_int_make_vec(points[1], points[0], vec1);
    ltr_int_make_vec(points[2], points[0], vec2);
    ltr_int_make_base(vec1, vec2, new_base);

  //  ltr_int_print_matrix(new_base, "new_base");
    if(!ltr_int_is_matrix_finite(new_base)){
      return false;
    }
    if(centering == true){
      ltr_int_assign_matrix(new_base, center_base);
    }

    //all applications contain transposed base
    ltr_int_transpose_in_place(new_base);

    double new_center[3];
    ltr_int_matrix_times_vec(new_base, model_ref, vec1);
    ltr_int_add_vecs(points[0], vec1, new_center);

  //  ltr_int_print_matrix(new_base, "new_base'");
  //  ltr_int_print_vec(model_ref, "model_ref");
  //  ltr_int_print_vec(points[0], "pt0");
  //  ltr_int_print_vec(new_center, "new_center");

    if(centering == true){
      int i;
      for(i = 0; i < 3; ++i){
        center_ref[i] = new_center[i];
      }
    }
    abs_center[0] = new_center[0];
    abs_center[1] = new_center[1];
    abs_center[2] = new_center[2];
    ltr_int_make_vec(new_center, center_ref, displacement);
  //  ltr_int_print_vec(center_ref, "ref_pt");
  //  ltr_int_print_vec(displacement, "mv");

  //  ltr_int_print_matrix(center_base, "center_base");

    double transform[3][3];
    ltr_int_mul_matrix(new_base, center_base, transform);
  //  ltr_int_print_matrix(new_base, "new_base'");
  //  ltr_int_print_matrix(center_base, "center_base");
  //  ltr_int_print_matrix(transform, "transform");
    //double pitch, yaw, roll;
    ltr_int_matrix_to_euler(transform, &(angles[0]), &(angles[1]), &(angles[2]));
  }else{
    //printf("Rotations: New algo\n");
    //ltr_int_print_matrix(points, "points");
    if(centering){
      if(!ltr_int_center(points[0], points[1], points[2], c_base, tr_center, tr_rot)){
        ltr_int_log_message("Couldn't center in new pose!\n");
        return false;
      }
    }
    if(!ltr_int_get_pose(points[0], points[1], points[2], c_base, tr_center,
                         tr_rot, angles, displacement, abs_center, abs_angles)){
      ltr_int_log_message("Couldn't determine the pose in new pose!\n");
      return false;
    }
  }

  ltr_int_mul_vec(angles, 180.0 /M_PI, angles);
  ltr_int_mul_vec(abs_angles, 180.0 /M_PI, abs_angles);

  if(ltr_int_is_vector_finite(angles) && ltr_int_is_vector_finite(displacement)){
    pose->raw_pitch = angles[0];
    pose->raw_yaw = angles[1];
    pose->raw_roll = angles[2];
    pose->raw_tx = displacement[0];
    pose->raw_ty = displacement[1];
    pose->raw_tz = displacement[2];
    abs_pose->abs_pitch = abs_angles[0];
    abs_pose->abs_yaw = abs_angles[1];
    abs_pose->abs_roll = abs_angles[2];
    abs_pose->abs_tx = abs_center[0];
    abs_pose->abs_ty = abs_center[1];
    abs_pose->abs_tz = abs_center[2];
    return true;
  }
  return false;
}