void StarMgr::drawPointer(StelRenderer* renderer, StelProjectorP projector, const StelCore* core) { const QList<StelObjectP> newSelected = objectMgr->getSelectedObject("Star"); if (!newSelected.empty()) { const StelObjectP obj = newSelected[0]; Vec3d pos=obj->getJ2000EquatorialPos(core); Vec3d win; // Compute 2D pos and return if outside screen if (!projector->project(pos, win)) { return; } if(NULL == texPointer) { texPointer = renderer->createTexture("textures/pointeur2.png"); // Load pointer texture } Vec3f c(obj->getInfoColor()); if (StelApp::getInstance().getVisionModeNight()) c = StelUtils::getNightColor(c); renderer->setGlobalColor(c[0], c[1], c[2]); texPointer->bind(); renderer->setBlendMode(BlendMode_Alpha); const float angle = StelApp::getInstance().getTotalRunTime() * 40.0f; renderer->drawTexturedRect(win[0] - 13.0f, win[1] - 13.0f, 26.0f, 26.0f, angle); } }
void NebulaMgr::drawPointer(const StelCore* core, StelPainter& sPainter) { const StelProjectorP prj = core->getProjection(StelCore::FrameJ2000); const QList<StelObjectP> newSelected = GETSTELMODULE(StelObjectMgr)->getSelectedObject("Nebula"); if (!newSelected.empty()) { const StelObjectP obj = newSelected[0]; Vec3d pos=obj->getJ2000EquatorialPos(core); // Compute 2D pos and return if outside screen if (!prj->projectInPlace(pos)) return; if (StelApp::getInstance().getVisionModeNight()) sPainter.setColor(0.8f,0.0f,0.0f); else sPainter.setColor(0.4f,0.5f,0.8f); texPointer->bind(); sPainter.enableTexture2d(true); glEnable(GL_BLEND); glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); // Normal transparency mode // Size on screen float size = obj->getAngularSize(core)*M_PI/180.*prj->getPixelPerRadAtCenter(); size+=20.f + 10.f*std::sin(2.f * StelApp::getInstance().getTotalRunTime()); sPainter.drawSprite2dMode(pos[0]-size/2, pos[1]-size/2, 10, 90); sPainter.drawSprite2dMode(pos[0]-size/2, pos[1]+size/2, 10, 0); sPainter.drawSprite2dMode(pos[0]+size/2, pos[1]+size/2, 10, -90); sPainter.drawSprite2dMode(pos[0]+size/2, pos[1]-size/2, 10, -180); } }
void Supernovae::drawPointer(StelCore* core, StelRenderer* renderer, StelProjectorP projector) { const QList<StelObjectP> newSelected = GETSTELMODULE(StelObjectMgr)->getSelectedObject("Supernova"); if (!newSelected.empty()) { const StelObjectP obj = newSelected[0]; Vec3d pos=obj->getJ2000EquatorialPos(core); Vec3d screenpos; // Compute 2D pos and return if outside screen if (!projector->project(pos, screenpos)) { return; } const Vec3f& c(obj->getInfoColor()); renderer->setGlobalColor(c[0],c[1],c[2]); if(NULL == texPointer) { texPointer = renderer->createTexture("textures/pointeur2.png"); } texPointer->bind(); renderer->setBlendMode(BlendMode_Alpha); renderer->drawTexturedRect(screenpos[0] - 13.0f, screenpos[1] - 13.0f, 26.0f, 26.0f, StelApp::getInstance().getTotalRunTime() * 40.0f); } }
void StarMgr::drawPointer(StelPainter& sPainter, const StelCore* core) { const QList<StelObjectP> newSelected = objectMgr->getSelectedObject("Star"); if (!newSelected.empty()) { const StelObjectP obj = newSelected[0]; Vec3d pos=obj->getJ2000EquatorialPos(core); Vec3d screenpos; // Compute 2D pos and return if outside screen if (!sPainter.getProjector()->project(pos, screenpos)) return; Vec3f c(obj->getInfoColor()); if (StelApp::getInstance().getVisionModeNight()) c = StelUtils::getNightColor(c); sPainter.setColor(c[0], c[1], c[2]); texPointer->bind(); sPainter.enableTexture2d(true); glEnable(GL_BLEND); glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); // Normal transparency mode sPainter.drawSprite2dMode(screenpos[0], screenpos[1], 13.f, StelApp::getInstance().getTotalRunTime()*40.); } }
void TargetsDialog::createTargetFromSelection() { if (StelApp::getInstance().getStelObjectMgr().getWasSelected()) { QList<StelObjectP> selectedObjects = StelApp::getInstance().getStelObjectMgr().getSelectedObject(); QListIterator<StelObjectP> objectIterator(selectedObjects); StelCore* core = StelApp::getInstance().getCore(); while (objectIterator.hasNext()) { StelObjectP stelObject = objectIterator.next(); QString type = stelObject->getType(); QString englishName = stelObject->getEnglishName(); if (englishName == "") { englishName = "No Name"; } float magnatude = stelObject->getVMagnitude(core); double angularSize = stelObject->getAngularSize(core); Vec3d pos; double ra, dec; // ra/dec in J2000 pos = stelObject->getJ2000EquatorialPos(core); StelUtils::rectToSphe(&ra, &dec, pos); QSqlField field1("name", QVariant::String); QSqlField field2("right_ascension", QVariant::Double); QSqlField field3("declination", QVariant::Double); QSqlField field4("target_type_id", QVariant::Int); QSqlField field5("magnitude", QVariant::Double); QSqlField field6("size", QVariant::Double); field1.setValue(QVariant(englishName)); field2.setValue(QVariant(ra)); field3.setValue(QVariant(dec)); field4.setValue(QVariant(1)); field5.setValue(QVariant(magnatude)); field6.setValue(QVariant(angularSize)); QSqlRecord newRecord = QSqlRecord(); newRecord.append(field1); newRecord.append(field2); newRecord.append(field3); newRecord.append(field4); newRecord.append(field5); newRecord.append(field6); if (tableModel->insertRecord(-1, newRecord)) { ui->targetsListView->setCurrentIndex(tableModel->index(tableModel->rowCount() - 1, 1)); } else { qWarning() << "LogBook: could not insert new target. The error is: " << tableModel->lastError(); } } } else { qDebug() << "====> Nothing selected."; } }
void Novae::drawPointer(StelCore* core, StelPainter &painter) { const QList<StelObjectP> newSelected = GETSTELMODULE(StelObjectMgr)->getSelectedObject("Nova"); if (!newSelected.empty()) { const StelObjectP obj = newSelected[0]; Vec3d pos=obj->getJ2000EquatorialPos(core); Vec3d screenpos; // Compute 2D pos and return if outside screen if (!painter.getProjector()->project(pos, screenpos)) return; const Vec3f& c(obj->getInfoColor()); painter.setColor(c[0],c[1],c[2]); texPointer->bind(); painter.enableTexture2d(true); glEnable(GL_BLEND); glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); // Normal transparency mode painter.drawSprite2dMode(screenpos[0], screenpos[1], 13.f, StelApp::getInstance().getTotalRunTime()*40.); } }
void Pulsars::drawPointer(StelCore* core, StelPainter& painter) { const StelProjectorP prj = core->getProjection(StelCore::FrameJ2000); const QList<StelObjectP> newSelected = GETSTELMODULE(StelObjectMgr)->getSelectedObject("Pulsar"); if (!newSelected.empty()) { const StelObjectP obj = newSelected[0]; Vec3d pos=obj->getJ2000EquatorialPos(core); Vec3d screenpos; // Compute 2D pos and return if outside screen if (!painter.getProjector()->project(pos, screenpos)) return; const Vec3f& c(obj->getInfoColor()); painter.setColor(c[0],c[1],c[2]); texPointer->bind(); painter.setBlending(true); painter.drawSprite2dMode(screenpos[0], screenpos[1], 13.f, StelApp::getInstance().getTotalRunTime()*40.); } }
bool SkyLabel::draw(StelCore* core, StelPainter& sPainter) { if(labelFader.getInterstate() <= 0.0) return false; Vec3d objectPos = labelObject->getJ2000EquatorialPos(core); Vec3d labelXY; sPainter.getProjector()->project(objectPos,labelXY); sPainter.setFont(labelFont); double xOffset(0.); double yOffset(0.); char hJustify = 'c'; char vJustify = 'c'; if (labelSide.toUpper().contains("N")) { yOffset = 1.0; vJustify = 'b'; // bottom justify text } else if (labelSide.toUpper().contains("S")) { yOffset = -1.0; vJustify = 't'; // top justufy text } if (labelSide.toUpper().contains("E")) { xOffset = 1.0; hJustify = 'l'; // right justify text } else if (labelSide.toUpper().contains("W")) { xOffset = -1.0; hJustify = 'r'; // left justify text } if (labelDistance >= 0.0) { xOffset *= labelDistance; yOffset *= labelDistance; } else { float shift = 4.f + labelObject->getAngularSize(core)*M_PI/180.*sPainter.getProjector()->getPixelPerRadAtCenter()/1.8f; // use the object size xOffset *= shift; yOffset *= shift; } double jxOffset(0.); double jyOffset(0.); if (hJustify == 'r') jxOffset = sPainter.getFontMetrics().width(labelText); else if (hJustify == 'c') jxOffset = sPainter.getFontMetrics().width(labelText) / 2.; if (vJustify == 't') jyOffset = sPainter.getFontMetrics().height(); else if (vJustify == 'c') jyOffset = sPainter.getFontMetrics().height() / 2.; sPainter.setColor(labelColor[0], labelColor[1], labelColor[2], labelFader.getInterstate()); sPainter.drawText(labelXY[0]+xOffset-jxOffset, labelXY[1]+yOffset-jyOffset, labelText, 0, 0, 0, false); if (labelStyle == SkyLabel::Line) { sPainter.enableTexture2d(false); glEnable(GL_BLEND); glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); // screen coordinates of object Vec3d objXY; sPainter.getProjector()->project(objectPos,objXY); double lineEndX = labelXY[0]+xOffset; double lineEndY = labelXY[1]+yOffset; if (vJustify == 'b') lineEndY -= 5; else if (vJustify == 't') lineEndY += 5; if (hJustify == 'l') lineEndX -= 5; else if (hJustify == 'r') lineEndX += 5; sPainter.setColor(labelColor[0], labelColor[1], labelColor[2], labelFader.getInterstate()); sPainter.drawLine2d(lineEndX,lineEndY,objXY[0], objXY[1]); } return true; }
bool SkyLabel::draw(StelCore* core, StelRenderer* renderer, StelProjectorP projector) { if(labelFader.getInterstate() <= 0.0) return false; Vec3d objectPos = labelObject->getJ2000EquatorialPos(core); Vec3d labelXY; projector->project(objectPos, labelXY); renderer->setFont(labelFont); double xOffset(0.); double yOffset(0.); char hJustify = 'c'; char vJustify = 'c'; if (labelSide.toUpper().contains("N")) { yOffset = 1.0; vJustify = 'b'; // bottom justify text } else if (labelSide.toUpper().contains("S")) { yOffset = -1.0; vJustify = 't'; // top justufy text } if (labelSide.toUpper().contains("E")) { xOffset = 1.0; hJustify = 'l'; // right justify text } else if (labelSide.toUpper().contains("W")) { xOffset = -1.0; hJustify = 'r'; // left justify text } if (labelDistance >= 0.0) { xOffset *= labelDistance; yOffset *= labelDistance; } else { float shift = 4.0f + labelObject->getAngularSize(core) * M_PI / 180.0f * projector->getPixelPerRadAtCenter() / 1.8f; // use the object size xOffset *= shift; yOffset *= shift; } QFontMetrics fontMetrics(labelFont); const float jxOffset = hJustify == 'r' ? fontMetrics.width(labelText) : hJustify == 'c' ? fontMetrics.width(labelText) * 0.5 : 0.0; const float jyOffset = vJustify == 't' ? fontMetrics.height() : vJustify == 'c' ? fontMetrics.height() * 0.5 : 0.0; renderer->setGlobalColor(labelColor[0], labelColor[1], labelColor[2], labelFader.getInterstate()); renderer->drawText(TextParams(labelXY[0] + xOffset - jxOffset, labelXY[1] + yOffset - jyOffset, labelText).useGravity()); if (labelStyle == SkyLabel::Line) { renderer->setBlendMode(BlendMode_Alpha); // screen coordinates of object Vec3d objXY; projector->project(objectPos, objXY); double lineEndX = labelXY[0]+xOffset; double lineEndY = labelXY[1]+yOffset; if (vJustify == 'b') lineEndY -= 5; else if (vJustify == 't') lineEndY += 5; if (hJustify == 'l') lineEndX -= 5; else if (hJustify == 'r') lineEndX += 5; renderer->setGlobalColor(labelColor[0], labelColor[1], labelColor[2], labelFader.getInterstate()); renderer->drawLine(lineEndX,lineEndY,objXY[0], objXY[1]); } return true; }
void AstroCalcDialog::generateEphemeris() { float currentStep, ra, dec; QString currentPlanet = ui->celestialBodyComboBox->currentData().toString(); initListEphemeris(); switch (ui->ephemerisStepComboBox->currentData().toInt()) { case 1: currentStep = 10 * StelCore::JD_MINUTE; break; case 2: currentStep = StelCore::JD_HOUR; break; case 3: currentStep = StelCore::JD_DAY; break; case 4: currentStep = 5 * StelCore::JD_DAY; break; case 5: currentStep = 10 * StelCore::JD_DAY; break; case 6: currentStep = 15 * StelCore::JD_DAY; break; case 7: currentStep = 30 * StelCore::JD_DAY; break; case 8: currentStep = 60 * StelCore::JD_DAY; break; default: currentStep = StelCore::JD_DAY; break; } StelObjectP obj = solarSystem->searchByName(currentPlanet); if (obj) { double currentJD = core->getJD(); // save current JD double firstJD = StelUtils::qDateTimeToJd(ui->dateFromDateTimeEdit->dateTime()); firstJD = firstJD - StelUtils::getGMTShiftFromQT(firstJD)/24; int elements = (int)((StelUtils::qDateTimeToJd(ui->dateToDateTimeEdit->dateTime()) - firstJD)/currentStep); EphemerisListJ2000.clear(); EphemerisListJ2000.reserve(elements); for (int i=0; i<elements; i++) { double JD = firstJD + i*currentStep; core->setJD(JD); core->update(0); // force update to get new coordinates Vec3d pos = obj->getJ2000EquatorialPos(core); EphemerisListJ2000.append(pos); StelUtils::rectToSphe(&ra,&dec,pos); ACTreeWidgetItem *treeItem = new ACTreeWidgetItem(ui->ephemerisTreeWidget); // local date and time treeItem->setText(EphemerisDate, StelUtils::jdToQDateTime(JD + StelUtils::getGMTShiftFromQT(JD)/24).toString("yyyy-MM-dd hh:mm:ss")); treeItem->setText(EphemerisJD, QString::number(JD, 'f', 5)); treeItem->setText(EphemerisRA, StelUtils::radToHmsStr(ra)); treeItem->setTextAlignment(EphemerisRA, Qt::AlignRight); treeItem->setText(EphemerisDec, StelUtils::radToHmsStr(dec)); treeItem->setTextAlignment(EphemerisDec, Qt::AlignRight); treeItem->setText(EphemerisMagnitude, QString::number(obj->getVMagnitudeWithExtinction(core), 'f', 2)); treeItem->setTextAlignment(EphemerisMagnitude, Qt::AlignRight); } core->setJD(currentJD); // restore time } // adjust the column width for(int i = 0; i < EphemerisCount; ++i) { ui->ephemerisTreeWidget->resizeColumnToContents(i); } // sort-by-date ui->ephemerisTreeWidget->sortItems(EphemerisDate, Qt::AscendingOrder); }