[Kstars-devel] KDE/kdeedu/kstars/kstars/skycomponents
Akarsh Simha
akarshsimha at gmail.com
Sat Aug 28 20:57:31 CEST 2010
SVN commit 1169231 by asimha:
Add a method that lists all stars in a circular aperture around a
point. This code is not tested to work, but compiles. It will be
tested when I finish the feature I'm working on.
This is different from SkyMesh::objectsInArea() because:
1. It rejects stars outside the circular aperture
2. It lists unnamed stars too
CCMAIL: kstars-devel at kde.org
M +41 -0 deepstarcomponent.cpp
M +18 -0 deepstarcomponent.h
M +27 -0 starcomponent.cpp
M +16 -0 starcomponent.h
--- trunk/KDE/kdeedu/kstars/kstars/skycomponents/deepstarcomponent.cpp #1169230:1169231
@@ -402,6 +402,47 @@
return oBest;
}
+bool DeepStarComponent::starsInAperture( QList<StarObject *> &list, const SkyPoint ¢er, float radius, float maglim )
+{
+
+ if( maglim < triggerMag )
+ return false;
+
+ // For DeepStarComponents, whether we use ra0() and dec0(), or
+ // ra() and dec(), should not matter, because the stars are
+ // repeated in all trixels that they will pass through, although
+ // the factuality of this statement needs to be verified
+
+ Q_ASSERT( center.ra0().Degrees() != 0 );
+ Q_ASSERT( center.dec0().Degrees() != 0 );
+ m_skyMesh->intersect( center.ra0().Degrees(), center.dec0().Degrees(), radius, (BufNum) OBJ_NEAREST_BUF );
+
+ MeshIterator region( m_skyMesh, OBJ_NEAREST_BUF );
+
+ if( maglim < -28 )
+ maglim = m_FaintMagnitude;
+
+ while ( region.hasNext() ) {
+ Trixel currentRegion = region.next();
+ // FIXME: Build a better way to iterate over all stars.
+ // Ideally, StarBlockList should have such a facility.
+ StarBlockList *sbl = m_starBlockList[ currentRegion ];
+ sbl->fillToMag( maglim );
+ for( int i = 0; i < sbl->getBlockCount(); ++i ) {
+ StarBlock *block = sbl->block( i );
+ for( int j = 0; j < block->getStarCount(); ++j ) {
+ StarObject *star = block->star( i );
+ if( star->mag() > maglim )
+ break; // Stars are organized by magnitude, so this should work
+ if( star->angularDistanceTo( ¢er ).Degrees() <= radius )
+ list.append( star );
+ }
+ }
+ }
+
+ return true;
+}
+
void DeepStarComponent::byteSwap( deepStarData *stardata ) {
stardata->RA = bswap_32( stardata->RA );
stardata->Dec = bswap_32( stardata->Dec );
--- trunk/KDE/kdeedu/kstars/kstars/skycomponents/deepstarcomponent.h #1169230:1169231
@@ -93,6 +93,24 @@
bool verifySBLIntegrity();
+ /**
+ *@short Add to the given list, the stars from this component,
+ * that lie within the specified circular aperture, and that are
+ * brighter than the limiting magnitude specified.
+ *@p center The center point of the aperture
+ *@p radius The radius around the center point that defines the
+ * aperture
+ *@p maglim Optional parameter indicating the limiting magnitude.
+ * If magnitude limit is numerically < -28, the limiting magnitude
+ * is assumed to be the limiting magnitude of the catalog (i.e. no
+ * magnitude limit)
+ *@p list The list to operate on
+ *@return false if the limiting magnitude is brighter than the
+ * trigger magnitude of the DeepStarComponent
+ */
+ bool starsInAperture( QList<StarObject*> &list, const SkyPoint ¢er, float radius, float maglim=-29 );
+
+
// TODO: Find the right place for this method
static void byteSwap( deepStarData *stardata );
static void byteSwap( starData *stardata );
--- trunk/KDE/kdeedu/kstars/kstars/skycomponents/starcomponent.cpp #1169230:1169231
@@ -626,6 +626,33 @@
return oBest;
}
+void StarComponent::starsInAperture( QList<StarObject*> &list, const SkyPoint ¢er, float radius, float maglim )
+{
+ m_skyMesh->intersect( center.ra0().Degrees(), center.dec0().Degrees(), radius, (BufNum) OBJ_NEAREST_BUF );
+
+ MeshIterator region( m_skyMesh, OBJ_NEAREST_BUF );
+
+ if( maglim < -28 )
+ maglim = m_FaintMagnitude;
+
+ while ( region.hasNext() ) {
+ Trixel currentRegion = region.next();
+ StarList* starList = m_starIndex->at( currentRegion );
+ for (int i=0; i < starList->size(); ++i) {
+ StarObject* star = starList->at( i );
+ if( !star ) continue;
+ if ( star->mag() > m_FaintMagnitude ) continue;
+ if( star->angularDistanceTo( ¢er ).Degrees() <= radius )
+ list.append( star );
+ }
+ }
+
+ // Add stars from the DeepStarComponents as well
+ for( int i =0; i < m_DeepStarComponents.size(); ++i ) {
+ m_DeepStarComponents.at( i )->starsInAperture( list, center, radius, maglim );
+ }
+}
+
void StarComponent::byteSwap( starData *stardata ) {
stardata->RA = bswap_32( stardata->RA );
stardata->Dec = bswap_32( stardata->Dec );
--- trunk/KDE/kdeedu/kstars/kstars/skycomponents/starcomponent.h #1169230:1169231
@@ -128,6 +128,22 @@
// FIXME: check whether return type should be StarObject*
SkyObject* findByHDIndex( int HDnum );
+ /**
+ *@short Add to the given list, the stars from this component,
+ * that lie within the specified circular aperture, and that are
+ * brighter than the limiting magnitude specified.
+ *@p center The center point of the aperture
+ *@p radius The radius around the center point that defines the
+ * aperture
+ *@p maglim Optional parameter indicating the limiting magnitude.
+ * If magnitude limit is numerically < -28, the limiting magnitude
+ * is assumed to be the limiting magnitude of the catalog (i.e. no
+ * magnitude limit)
+ *@p list The list to operate on
+ */
+ void starsInAperture( QList<StarObject*> &list, const SkyPoint ¢er, float radius, float maglim=-29 );
+
+
// TODO: Make byteSwap a template method and put it in byteorder.h
// It should ideally handle 32-bit, 16-bit fields and starData and
// deepStarData fields
More information about the Kstars-devel
mailing list