// Draw all the Nebulae void NebulaMgr::draw(StelCore* core) { const StelProjectorP prj = core->getProjection(StelCore::FrameJ2000); StelPainter sPainter(prj); StelSkyDrawer* skyDrawer = core->getSkyDrawer(); Nebula::hintsBrightness = hintsFader.getInterstate()*flagShow.getInterstate(); sPainter.enableTexture2d(true); glEnable(GL_BLEND); glBlendFunc(GL_ONE, GL_ONE); // Use a 1 degree margin const double margin = 1.*M_PI/180.*prj->getPixelPerRadAtCenter(); const SphericalRegionP& p = prj->getViewportConvexPolygon(margin, margin); // Print all the nebulae of all the selected zones float maxMagHints = skyDrawer->getLimitMagnitude()*1.2f-2.f+(hintsAmount*1.2f)-2.f; float maxMagLabels = skyDrawer->getLimitMagnitude()-2.f+(labelsAmount*1.2f)-2.f; sPainter.setFont(nebulaFont); DrawNebulaFuncObject func(maxMagHints, maxMagLabels, &sPainter, core, hintsFader.getInterstate()>0.0001); nebGrid.processIntersectingRegions(p, func); if (GETSTELMODULE(StelObjectMgr)->getFlagSelectedObjectPointer()) drawPointer(core, sPainter); }
void Galaxy::draw(StelCore* core, StelPainter& painter, float) { StelSkyDrawer* sd = core->getSkyDrawer(); Vec3f color = Vec3f(0.4f,0.5f,1.2f); if (StelApp::getInstance().getVisionModeNight()) color = StelUtils::getNightColor(color); double mag = getVMagnitude(core, true); StelUtils::spheToRect(RA, DE, XYZ); glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); glEnable(GL_BLEND); glEnable(GL_TEXTURE_2D); painter.setColor(color[0], color[1], color[2], Galaxy::galaxyBrightness); glColor4f(color[0],color[1],color[2], Galaxy::galaxyBrightness); if (mag <= sd->getLimitMagnitude()) { Galaxy::markerTexture->bind(); float size = getAngularSize(NULL)*M_PI/180.*painter.getProjector()->getPixelPerRadAtCenter(); float shift = 5.f + size/1.6f; if (GETSTELMODULE(POGS)->getDisplayMode()) { painter.drawSprite2dMode(XYZ, 6); painter.drawText(XYZ, " ", 0, shift, shift, false); } else { painter.drawSprite2dMode(XYZ, 6); painter.drawText(XYZ, designation, 0, shift, shift, false); } } }
void Exoplanet::draw(StelCore* core, StelPainter *painter) { bool visible; StelSkyDrawer* sd = core->getSkyDrawer(); StarMgr* smgr = GETSTELMODULE(StarMgr); // It's need for checking displaying of labels for stars Vec3f color = exoplanetMarkerColor; if (hasHabitableExoplanets) color = habitableExoplanetMarkerColor; StelUtils::spheToRect(RA, DE, XYZ); double mag = getVMagnitudeWithExtinction(core); painter->setBlending(true, GL_ONE, GL_ONE); painter->setColor(color[0], color[1], color[2], 1); if (timelineMode) { visible = isDiscovered(core); } else { visible = true; } if (habitableMode) { if (!hasHabitableExoplanets) return; } Vec3d win; // Check visibility of exoplanet system if(!visible || !(painter->getProjector()->projectCheck(XYZ, win))) {return;} float mlimit = sd->getLimitMagnitude(); if (mag <= mlimit) { Exoplanet::markerTexture->bind(); float size = getAngularSize(Q_NULLPTR)*M_PI/180.*painter->getProjector()->getPixelPerRadAtCenter(); float shift = 5.f + size/1.6f; painter->drawSprite2dMode(XYZ, distributionMode ? 4.f : 5.f); float coeff = 4.5f + std::log10(sradius + 0.1f); if (labelsFader.getInterstate()<=0.f && !distributionMode && (mag+coeff)<mlimit && smgr->getFlagLabels() && showDesignations) { painter->drawText(XYZ, getNameI18n(), 0, shift, shift, false); } } }
void Quasar::draw(StelCore* core, StelRenderer* renderer, StelProjectorP projector, StelTextureNew* markerTexture) { StelSkyDrawer* sd = core->getSkyDrawer(); const Vec3f color = sd->indexToColor(BvToColorIndex(bV))*0.75f; Vec3f dcolor = Vec3f(1.2f,0.5f,0.4f); if (StelApp::getInstance().getVisionModeNight()) dcolor = StelUtils::getNightColor(dcolor); float rcMag[2], size, shift; double mag; StelUtils::spheToRect(qRA, qDE, XYZ); mag = getVMagnitude(core, true); if (GETSTELMODULE(Quasars)->getDisplayMode()) { renderer->setBlendMode(BlendMode_Add); renderer->setGlobalColor(dcolor[0], dcolor[1], dcolor[2], 1); markerTexture->bind(); if (labelsFader.getInterstate()<=0.f) { Vec3d win; if(projector->project(XYZ, win)) { renderer->drawTexturedRect(win[0] - 4, win[1] - 4, 8, 8); } } } else { sd->preDrawPointSource(); if (mag <= sd->getLimitMagnitude()) { sd->computeRCMag(mag, rcMag); const Vec3f XYZf(XYZ[0], XYZ[1], XYZ[2]); Vec3f win; if(sd->pointSourceVisible(&(*projector), XYZf, rcMag, false, win)) { sd->drawPointSource(win, rcMag, sd->indexToColor(BvToColorIndex(bV))); } renderer->setGlobalColor(color[0], color[1], color[2], 1.0f); size = getAngularSize(NULL)*M_PI/180.*projector->getPixelPerRadAtCenter(); shift = 6.f + size/1.8f; if (labelsFader.getInterstate()<=0.f) { renderer->drawText(TextParams(XYZ, projector, designation).shift(shift, shift).useGravity()); } } sd->postDrawPointSource(projector); } }
void Quasar::draw(StelCore* core, StelPainter& painter) { StelSkyDrawer* sd = core->getSkyDrawer(); Vec3f color = sd->indexToColor(BvToColorIndex(bV))*0.75f; Vec3f dcolor = Vec3f(1.2f,0.5f,0.4f); if (StelApp::getInstance().getVisionModeNight()) dcolor = StelUtils::getNightColor(dcolor); float rcMag[2], size, shift; double mag; StelUtils::spheToRect(qRA, qDE, XYZ); mag = getVMagnitude(core, true); if (GETSTELMODULE(Quasars)->getDisplayMode()) { glEnable(GL_BLEND); glBlendFunc(GL_ONE, GL_ONE); painter.setColor(dcolor[0], dcolor[1], dcolor[2], 1); Quasar::markerTexture->bind(); size = getAngularSize(NULL)*M_PI/180.*painter.getProjector()->getPixelPerRadAtCenter(); shift = 5.f + size/1.6f; if (labelsFader.getInterstate()<=0.f) { painter.drawSprite2dMode(XYZ, 4); painter.drawText(XYZ, " ", 0, shift, shift, false); } } else { sd->preDrawPointSource(&painter); if (mag <= sd->getLimitMagnitude()) { sd->computeRCMag(mag, rcMag); //sd->drawPointSource(&painter, Vec3f(XYZ[0], XYZ[1], XYZ[2]), rcMag, sd->indexToColor(BvToColorIndex(bV)), false); sd->drawPointSource(&painter, XYZ, rcMag, sd->indexToColor(BvToColorIndex(bV)), false); painter.setColor(color[0], color[1], color[2], 1); size = getAngularSize(NULL)*M_PI/180.*painter.getProjector()->getPixelPerRadAtCenter(); shift = 6.f + size/1.8f; if (labelsFader.getInterstate()<=0.f) { painter.drawText(XYZ, designation, 0, shift, shift, false); } } sd->postDrawPointSource(&painter); } }
void Supernova::draw(StelCore* core, StelPainter& painter) { StelSkyDrawer* sd = core->getSkyDrawer(); Vec3f color = Vec3f(1.f,1.f,1.f); if (StelApp::getInstance().getVisionModeNight()) color = StelUtils::getNightColor(color); float rcMag[2], size, shift; double mag; StelUtils::spheToRect(snra, snde, XYZ); mag = getVMagnitude(core, true); sd->preDrawPointSource(&painter); if (mag <= sd->getLimitMagnitude()) { sd->computeRCMag(mag, rcMag); // sd->drawPointSource(&painter, Vec3f(XYZ[0], XYZ[1], XYZ[2]), rcMag, color, false); sd->drawPointSource(&painter, XYZ, rcMag, color, false); painter.setColor(color[0], color[1], color[2], 1); size = getAngularSize(NULL)*M_PI/180.*painter.getProjector()->getPixelPerRadAtCenter(); shift = 6.f + size/1.8f; if (labelsFader.getInterstate()<=0.f) { painter.drawText(XYZ, designation, 0, shift, shift, false); } } sd->postDrawPointSource(&painter); }
void Nova::draw(StelCore* core, StelPainter* painter) { StelSkyDrawer* sd = core->getSkyDrawer(); StarMgr* smgr = GETSTELMODULE(StarMgr); // It's need for checking displaying of labels for stars Vec3f color = Vec3f(1.f,1.f,1.f); RCMag rcMag; float size, shift; double mag; StelUtils::spheToRect(RA, Dec, XYZ); mag = getVMagnitudeWithExtinction(core); sd->preDrawPointSource(painter); float mlimit = sd->getLimitMagnitude(); if (mag <= mlimit) { sd->computeRCMag(mag, &rcMag); sd->drawPointSource(painter, Vec3f(XYZ[0],XYZ[1],XYZ[2]), rcMag, color, false); painter->setColor(color[0], color[1], color[2], 1.f); size = getAngularSize(NULL)*M_PI/180.*painter->getProjector()->getPixelPerRadAtCenter(); shift = 6.f + size/1.8f; if (labelsFader.getInterstate()<=0.f && (mag+5.f)<mlimit && smgr->getFlagLabels()) { QString name = novaName.isEmpty() ? designation : novaName; painter->drawText(XYZ, name, 0, shift, shift, false); } } sd->postDrawPointSource(painter); }