Beispiel #1
0
void CObjInfo::on_cb_copy1_clicked()
////////////////////////////////////
{
  QClipboard *clipboard = QApplication::clipboard();
  double ra, dec;

  ra = m_infoItem.radec.Ra;
  dec = m_infoItem.radec.Dec;

  precess(&ra, &dec, JD2000, m_map->m_mapView.jd);

  QString str = getStrRA(ra) + " "  + getStrDeg(dec);

  clipboard->setText(str);
}
Beispiel #2
0
static void render(int type, SKMATRIX *mat, mapView_t *mapView, CSkPainter *pPainter, bool eqOnly, int x, int y, int spcx, int spcy)
{
  if (x < 0)
  {
    x += 129600000;
  }
  else
  if (x >= 129600000)
  {
    x -= 129600000;
  }

  if (y < 0 || y > 64800000)
  {
    return;
  }

  radec_t rd[4];

  if (mSet.contains(MAKE_INT64(x, y)))
  { // already rendered
    return;
  }

  QColor col = g_skSet.map.grid[type].color;
  QPen pen1 = QPen(col, 1);
  QPen pen3 = QPen(col, 3);

  rd[0].Ra = TORA(x);
  rd[0].Dec = TODEC(y);

  rd[1].Ra = TORA(x + spcx);
  rd[1].Dec = TODEC(y);

  rd[2].Ra = rd[1].Ra;
  rd[2].Dec = TODEC(y + spcy);

  rd[3].Ra = TORA(x);
  rd[3].Dec = rd[2].Dec;

  double dec = rd[0].Dec;
  double ra = rd[0].Ra;

  if (type == SMCT_ALT_AZM)
  {
    for (int i = 0; i < 4; i++)
    {
      rd[i].Dec -= cAstro.getInvAtmRef(rd[i].Dec);
    }
  }

  if (y + spcy > 64800000 && depth > 0)
  {
    return;
  }

  if (y + spcy < 00 && depth > 0)
  {
    return;
  }

  SKPOINT pt[4];
  SKPOINT opt[4];

  for (int i = 0; i < 4; i++)
  {
    trfRaDecToPointNoCorrect(&rd[i], &pt[i], mat);
    opt[i] = pt[i];
  }

  if (!SKPLANECheckFrustumToPolygon(trfGetFrustum(), pt, 4))
  { // out of screen
    return;
  }

  pPainter->setPen(pen1);
  ren++;

  if (!eqOnly && trfProjectLine(&pt[0], &pt[3]))
  {
    if ((y + spcy < 64800000 && y > 0) || (x == 0 || x == FROMRA(90) || x == FROMRA(180) || x == FROMRA(270)))
    {
      pPainter->setClipRect(clipSize, clipSize, scrWidth - clipSize * 2, scrHeight - clipSize * 2);
      pPainter->drawLine(pt[0].sx, pt[0].sy, pt[3].sx, pt[3].sy);
      pPainter->setClipping(false);

      int cx, cy;

      if (getClipPoint(cx, cy, pt[0].sx, pt[0].sy, pt[3].sx, pt[3].sy))
      {
        QString text;

        if (g_skSet.map.showGridLabels && g_showLabels)
        {
          if (type == SMCT_RA_DEC)
          {
            text = getStrRA(ra, true);
          }
          else
          if (type == SMCT_ECL)
          {
            text = getStrDeg(ra, true);
          }
          else
          {
            double value = R360 - ra;
            rangeDbl(&value, R360);
            text = getStrDeg(value, true);
          }
          drawEdgeAlignTextY(pPainter, cx, cy, text);
        }
      }
    }
  }
  else
  {
    QPointF fpt[2];
    if (eqOnly && y == 32400000 && trfProjectLine(&pt[0], &pt[3], fpt))
    {
      QString text;

      if (g_skSet.map.showGridLabels && g_showLabels)
      {
        if (type == SMCT_RA_DEC)
        {
          text = getStrRA(ra, true);
        }
        else
        if (type == SMCT_ECL)
        {
          text = getStrDeg(ra, true);
        }
        else
        {
          double value = R360 - ra;
          rangeDbl(&value, R360);
          text = getStrDeg(value, true);
        }

        SKVECTOR v;
        double l = 10;

        QPointF fpt2[2];
        trfProjectLine(&pt[0], &pt[1], fpt2);

        v.x = fpt2[0].x() - fpt2[1].x();
        v.y = fpt2[0].y() - fpt2[1].y();
        v.z = 0;

        SKVecNormalize(&v, &v);

        pPainter->setClipRect(clipSize, clipSize, scrWidth - clipSize * 2, scrHeight - clipSize * 2);

        pPainter->setPen(pen1);
        pPainter->drawLine(fpt[0].x(), fpt[0].y(), fpt[0].x() - v.y * l, fpt[0].y() + v.x * l);
        pPainter->drawLine(fpt[0].x(), fpt[0].y(), fpt[0].x() + v.y * l, fpt[0].y() - v.x * l);

        setSetFontColor(FONT_GRID, pPainter);
        pPainter->renderText(fpt[0].x(), fpt[0].y(), 10, text, RT_BOTTOM);

        pPainter->setClipping(false);
      }
    }
  }

  if ((eqOnly && y == 32400000) || !eqOnly)
  {
    int cx, cy;

    if (y == 32400000)
    {
      pPainter->setPen(pen3);
    }
    else
    {
      pPainter->setPen(pen1);
    }

    pPainter->setClipRect(clipSize, clipSize, scrWidth - clipSize * 2, scrHeight - clipSize * 2);
    if (drawInterpolatedLineRD(mat, 5, &rd[0], &rd[1], pPainter, cx, cy))
    {
      pPainter->setClipping(false);
      if (g_skSet.map.showGridLabels && g_showLabels)
      {
        drawEdgeAlignTextX(pPainter, cx, cy, QString("%1").arg(getStrDeg(dec, true)));
      }
    }
    pPainter->setClipping(false);
  }

  mSet.insert(MAKE_INT64(x, y));

  depth++;

  render(type, mat, mapView, pPainter, eqOnly, x - spcx, y, spcx, spcy);
  render(type, mat, mapView, pPainter, eqOnly, x + spcx, y, spcx, spcy);
  render(type, mat, mapView, pPainter, eqOnly, x, y + spcy, spcx, spcy);
  render(type, mat, mapView, pPainter, eqOnly, x, y - spcy, spcx, spcy);
}
Beispiel #3
0
CRestoreTM::CRestoreTM(QWidget *parent) :
  QDialog(parent),
  ui(new Ui::CRestoreTM)
{
  ui->setupUi(this);

  QStandardItemModel *m = new QStandardItemModel(0, 4);

  m->setHeaderData(0, Qt::Horizontal, QObject::tr("Date/Time"));
  m->setHeaderData(1, Qt::Horizontal, QObject::tr("Desc."));
  m->setHeaderData(2, Qt::Horizontal, QObject::tr("R.A."));
  m->setHeaderData(3, Qt::Horizontal, QObject::tr("Dec."));

  ui->treeView->sortByColumn(0);
  ui->treeView->setSortingEnabled(true);

  SkFile f(QStandardPaths::writableLocation(QStandardPaths::DataLocation) + "/data/timemarks/timemarks.dat");
  QTextStream s(&f);

  int row = 0;
  if (f.open(SkFile::ReadOnly | SkFile::Text))
  {
    QStringList list;

    while (!s.atEnd())
    {
      QString line = s.readLine();

      list = line.split(';');
      if (list.count() == 2 || list.count() == 4)
      {
        item_t *i = new item_t;

        i->desc = list.at(0);
        i->jd = list.at(1).toDouble();

        CTimeMarkItem *i0 = new CTimeMarkItem;
        QStandardItem *i1 = new QStandardItem;
        CTimeMarkItemRD *i2 = new CTimeMarkItemRD;
        CTimeMarkItemRD *i3 = new CTimeMarkItemRD;

        i0->setText(getStrDate(i->jd, 0) + " " + getStrTime(i->jd, 0));
        i0->setData((qint64)i);
        i1->setText(i->desc);

        if (list.count() == 4)
        {
          i->ra = D2R(list.at(2).toDouble());
          i->dec = D2R(list.at(3).toDouble());

          i2->setText(getStrRA(i->ra));
          i2->setData(i->ra);
          i3->setText(getStrDeg(i->dec));
          i3->setData(i->dec);
        }
        else
        {
          i->ra = CM_UNDEF;
          i->dec = CM_UNDEF;

          i2->setText(tr("N/A"));
          i2->setData(CM_UNDEF);
          i3->setText(tr("N/A"));
          i3->setData(CM_UNDEF);
        }

        m->setItem(row, 0, i0);
        m->setItem(row, 1, i1);
        m->setItem(row, 2, i2);
        m->setItem(row, 3, i3);

        row++;
      }
    }
  }

  ui->treeView->setModel(m);
  ui->treeView->header()->resizeSection(0, 140);

  QShortcut *sh1 = new QShortcut(QKeySequence(Qt::Key_Delete), ui->treeView, 0, 0,  Qt::WidgetShortcut);
  connect(sh1, SIGNAL(activated()), this, SLOT(slotDelete()));
}
Beispiel #4
0
void CEphList::on_pushButton_4_clicked()
////////////////////////////////////////
{
  QList <int> columns;
  QStringList strCol;
  int         obj;
  int         type;
  bool        isUT;
  double      tz;
  double      jdFrom;
  double      jdTo;
  double      step = 1;
  QString     name;
  QListWidgetItem *com;

  QList  <tableRow_t> rows;

  for (int i = 0; i < EL_COLUMN_COUNT; i++)
  {
    QListWidgetItem *item = ui->listWidget_2->item(i);

    if (item->checkState() == Qt::Checked && (item->flags() & Qt::ItemIsEnabled))
    {
      columns.append(item->data(Qt::UserRole + 1).toInt());
    }
  }

  if (columns.count() == 0)
  {
    msgBoxError(this, tr("There is no selected column!!!"));
    return;
  }

  switch (ui->tabWidget->currentIndex())
  {
    case 0:
      type = MO_PLANET;
      obj = ui->listWidget->currentRow();
      if (!showNoObjectSelected(obj)) return;
      break;

    case 1:
      type = MO_COMET;
      obj = ui->listWidget_3->currentRow();
      if (!showNoObjectSelected(obj)) return;
      com = ui->listWidget_3->item(obj);
      obj = com->data(Qt::UserRole + 1).toInt();
      break;

    case 2:
      type = MO_ASTER;
      obj = ui->listWidget_4->currentRow();
      if (!showNoObjectSelected(obj)) return;
      com = ui->listWidget_4->item(obj);
      obj = com->data(Qt::UserRole + 1).toInt();
      break;
  }

  isUT = ui->checkBox->isChecked();

  if (isUT)
    tz = 0;
   else
     tz = m_view.geo.tz;

  QDateTime dt;

  dt = ui->dateTimeEdit->dateTime();
  jdFrom = jdGetJDFrom_DateTime(&dt);

  dt = ui->dateTimeEdit_2->dateTime();
  jdTo = jdGetJDFrom_DateTime(&dt);

  for (int i = 0; i < columns.count(); i++)
  {
    QString str = cELColumn[columns[i]];

    strCol.append(str);
  }

  if (jdFrom >= jdTo)
  {
    msgBoxError(this, tr("Invalid date/time range!!!"));
    return;
  }

  double mul;

  switch (ui->comboBox->currentIndex())
  {
    case 0:
      mul = JD1SEC * 60;
      break;

    case 1:
      mul = JD1SEC * 3600;
      break;

    case 2:
      mul = 1;
      break;
  }

  step = ui->spinBox->value() * mul;

  int count = (jdTo - jdFrom) / step;

  if (count > 1000)
  {
    if (QMessageBox::No == msgBoxQuest(this, tr("Calculation 1000+ positions. Do you want to continue?")))
      return;
  }

  for (double jd = jdFrom; jd <= jdTo; jd += step)
  {
    bool isMoon = false;
    tableRow_t row;
    orbit_t o;

    m_view.jd = jd - tz;
    cAstro.setParam(&m_view);

    switch (type)
    {
      case MO_PLANET:
        cAstro.calcPlanet(obj, &o);
        name = cAstro.getName(obj);
        isMoon = (obj == PT_MOON);
        break;

      case MO_COMET:
        comSolve(&tComets[obj], m_view.jd);
        name = tComets[obj].name;
        o = tComets[obj].orbit;
        break;

      case MO_ASTER:
        astSolve(&tAsteroids[obj], m_view.jd);
        name = tAsteroids[obj].name;
        o = tAsteroids[obj].orbit;
        break;
    }

    for (int j = 0; j < columns.count(); j++)
    {
      QString str;

      double ra2000 = o.lRD.Ra;
      double dec2000 = o.lRD.Dec;

      precess(&ra2000, &dec2000, m_view.jd, JD2000);

      switch (columns[j])
      {
        case 0:
          str = QString::number(m_view.jd, 'f', 6);
          break;

        case 1:
          str = getStrDate(m_view.jd, tz);
          break;

        case 2:
          str = getStrTime(m_view.jd, tz);
          break;

        case 3:
          str = getStrMag(o.mag);
          break;

        case 4:
          str = QString::number(o.phase, 'f', 3);
          break;

        case 5:
          str = QString::number(R2D(o.PA), 'f', 1) + "°";
          break;

        case 6:
          str = QString::number(o.sx, 'f', 2) + "\"";
          break;

        case 7:
          str = QString::number(o.sy, 'f', 2) + "\"";
          break;

        case 8:
          str = getStrRA(o.lRD.Ra);
          break;

        case 9:
          str = getStrDeg(o.lRD.Dec);
          break;

        case 10:
          str = getStrRA(ra2000);
          break;

        case 11:
          str = getStrDeg(dec2000);
          break;

        case 12:
          str = getStrRA(o.gRD.Ra);
          break;

        case 13:
          str = getStrDeg(o.gRD.Dec);
          break;

        case 14:
          str = getStrDeg(o.lAzm);
          break;

        case 15:
          str = getStrDeg(o.lAlt);
          break;

        case 16:
          if (!isMoon)
          {
            str = QString::number(o.R, 'f', 6) + " AU";
          }
          else
          {
            str = QString::number(o.r * EARTH_DIAM) + tr(" Km");
          }
          break;

        case 17:
          if (!isMoon)
          {
            str = QString::number(o.r, 'f', 6) + " AU";
          }
          else
          {
            str = tr("N/A");
          }
          break;

        case 18:
          str = ((o.elongation >= 0) ? "+" : "") + QString::number(R2D(o.elongation), 'f', 2) + "°";
          break;

        case 19:
          str = getStrDeg(o.hLon);
          break;

        case 20:
          str = getStrDeg(o.hLat);
          break;

        case 21:
          str = QString::number(o.hRect[0], 'f', 6) + " AU";
          break;

        case 22:
          str = QString::number(o.hRect[1], 'f', 6) + " AU";
          break;

        case 23:
          str = QString::number(o.hRect[2], 'f', 6) + " AU";
          break;

        case 24:
          str = QString::number(o.light * 24. * 60., 'f', 2) + tr(" mins.");
          break;
      }

      row.row.append(str);
    }

    rows.append(row);
  }

  CEphTable dlg(this, name, strCol, rows);

  dlg.exec();
}