void KStarsData::syncUpdateIDs() { m_updateID = m_preUpdateID; if ( m_updateNumID == m_preUpdateNumID ) return; m_updateNumID = m_preUpdateNumID; m_updateNum = KSNumbers( m_preUpdateNum ); }
void KStarsData::updateTime( GeoLocation *geo, SkyMap *skymap, const bool automaticDSTchange ) { // sync LTime with the simulation clock LTime = geo->UTtoLT( ut() ); syncLST(); //Only check DST if (1) TZrule is not the empty rule, and (2) if we have crossed //the DST change date/time. if ( !geo->tzrule()->isEmptyRule() ) { if ( TimeRunsForward ) { // timedirection is forward // DST change happens if current date is bigger than next calculated dst change if ( ut() > NextDSTChange ) resetToNewDST(geo, automaticDSTchange); } else { // timedirection is backward // DST change happens if current date is smaller than next calculated dst change if ( ut() < NextDSTChange ) resetToNewDST(geo, automaticDSTchange); } } KSNumbers num( ut().djd() ); if ( fabs( ut().djd() - LastNumUpdate.djd() ) > 1.0 ) { LastNumUpdate = ut().djd(); m_preUpdateNumID++; m_preUpdateNum = KSNumbers( num ); skyComposite()->update( &num ); } if ( fabs( ut().djd() - LastPlanetUpdate.djd() ) > 0.01 ) { LastPlanetUpdate = ut().djd(); skyComposite()->updatePlanets( &num ); } // Moon moves ~30 arcmin/hr, so update its position every minute. if ( fabs( ut().djd() - LastMoonUpdate.djd() ) > 0.00069444 ) { LastMoonUpdate = ut(); skyComposite()->updateMoons( &num ); } //Update Alt/Az coordinates. Timescale varies with zoom level //If Clock is in Manual Mode, always update. (?) if ( fabs( ut().djd() - LastSkyUpdate.djd() ) > 0.1/Options::zoomFactor() || clock()->isManualMode() ) { LastSkyUpdate = ut(); m_preUpdateID++; skyComposite()->update(); //omit KSNumbers arg == just update Alt/Az coords //Update focus skymap->updateFocus(); if ( clock()->isManualMode() ) QTimer::singleShot( 0, skymap, SLOT( forceUpdateNow() ) ); else skymap->forceUpdate(); } }
//Reimplement draw function so that we have control over the order of //elements, and we can add object labels // //The order in which components are drawn naturally determines the //z-ordering (the layering) of the components. Objects which //should appear "behind" others should be drawn first. void SkyMapComposite::draw( SkyPainter *skyp ) { SkyMap *map = SkyMap::Instance(); KStarsData *data = KStarsData::Instance(); // We delay one draw cycle before re-indexing // we MUST ensure CLines do not get re-indexed while we use DRAW_BUF // so we do it here. m_CLines->reindex( &m_reindexNum ); // This queues re-indexing for the next draw cycle m_reindexNum = KSNumbers( data->updateNum()->julianDay() ); // This ensures that the JIT updates are synchronized for the entire draw // cycle so the sky moves as a single sheet. May not be needed. data->syncUpdateIDs(); // prepare the aperture // FIXME_FOV: We may want to rejigger this to allow // wide-angle views --hdevalence float radius = map->projector()->fov(); if ( radius > 180.0 ) radius = 180.0; if ( m_skyMesh->inDraw() ) { printf("Warning: aborting concurrent SkyMapComposite::draw()\n"); return; } m_skyMesh->inDraw( true ); SkyPoint* focus = map->focus(); m_skyMesh->aperture( focus, radius + 1.0, DRAW_BUF ); // divide by 2 for testing // create the no-precess aperture if needed if ( Options::showEquatorialGrid() || Options::showHorizontalGrid() || Options::showCBounds() || Options::showEquator() ) { m_skyMesh->index( focus, radius + 1.0, NO_PRECESS_BUF ); } // clear marks from old labels and prep fonts m_skyLabeler->reset( map ); m_skyLabeler->useStdFont(); // info boxes have highest label priority // FIXME: REGRESSION. Labeler now know nothing about infoboxes // map->infoBoxes()->reserveBoxes( psky ); if( KStars::Instance() ) { const QList<SkyObject*> obsList = KStarsData::Instance()->observingList()->sessionList(); if( Options::obsListText() ) foreach( SkyObject* obj, obsList ) { SkyLabeler::AddLabel( obj, SkyLabeler::RUDE_LABEL ); } }
void StarComponent::reindexAll( KSNumbers *num ) { if ( 0 && ! m_reindexSplash ) { m_reindexSplash = new KStarsSplash( i18n("Please wait while re-indexing stars...") ); QObject::connect( KStarsData::Instance(), SIGNAL( progressText( QString ) ), m_reindexSplash, SLOT( setMessage( QString ) ) ); m_reindexSplash->show(); m_reindexSplash->raise(); return; } printf("Re-indexing Stars to year %4.1f...\n", 2000.0 + num->julianCenturies() * 100.0); m_reindexNum = KSNumbers( *num ); m_skyMesh->setKSNumbers( num ); // clear out the old index for ( int i = 0; i < m_starIndex->size(); i++ ) { m_starIndex->at( i )->clear(); } // re-populate it from the objectList int size = m_ObjectList.size(); for ( int i = 0; i < size; i++ ) { StarObject* star = (StarObject*) m_ObjectList[ i ]; Trixel trixel = m_skyMesh->indexStar( star ); m_starIndex->at( trixel )->append( star ); } // Let everyone else know we have re-indexed to num for ( int j = 0; j < m_highPMStars.size(); j++ ) { m_highPMStars.at( j )->setIndexTime( num ); } //delete m_reindexSplash; //m_reindexSplash = 0; printf("Done.\n"); }