2001-11-27 18:50:04 -07:00
|
|
|
// stardb.h
|
|
|
|
//
|
|
|
|
// Copyright (C) 2001, Chris Laurel <claurel@shatters.net>
|
|
|
|
//
|
|
|
|
// This program is free software; you can redistribute it and/or
|
|
|
|
// modify it under the terms of the GNU General Public License
|
|
|
|
// as published by the Free Software Foundation; either version 2
|
|
|
|
// of the License, or (at your option) any later version.
|
|
|
|
|
|
|
|
#ifndef _STARDB_H_
|
|
|
|
#define _STARDB_H_
|
|
|
|
|
|
|
|
#include <iostream>
|
|
|
|
#include <vector>
|
|
|
|
#include <celengine/constellation.h>
|
|
|
|
#include <celengine/starname.h>
|
|
|
|
#include <celengine/star.h>
|
2005-11-18 02:00:39 -07:00
|
|
|
#include <celengine/staroctree.h>
|
2004-10-02 04:44:49 -06:00
|
|
|
#include <celengine/parser.h>
|
2001-11-27 18:50:04 -07:00
|
|
|
|
|
|
|
|
2005-11-18 02:00:39 -07:00
|
|
|
static const unsigned int MAX_STAR_NAMES = 10;
|
|
|
|
|
|
|
|
|
2001-11-27 18:50:04 -07:00
|
|
|
class StarDatabase
|
|
|
|
{
|
|
|
|
public:
|
|
|
|
StarDatabase();
|
|
|
|
~StarDatabase();
|
|
|
|
|
2005-11-18 02:00:39 -07:00
|
|
|
|
|
|
|
inline Star* getStar(const uint32) const;
|
2001-11-27 18:50:04 -07:00
|
|
|
inline uint32 size() const;
|
2005-11-18 02:00:39 -07:00
|
|
|
|
|
|
|
Star* find(const uint32 catalogNumber) const;
|
2002-01-23 18:34:58 -07:00
|
|
|
Star* find(const std::string&) const;
|
2005-11-18 02:00:39 -07:00
|
|
|
|
2003-05-31 04:55:44 -06:00
|
|
|
std::vector<std::string> getCompletion(const std::string&) const;
|
2001-11-27 18:50:04 -07:00
|
|
|
|
|
|
|
void findVisibleStars(StarHandler& starHandler,
|
2005-11-18 02:00:39 -07:00
|
|
|
const Point3f& obsPosition,
|
|
|
|
const Quatf& obsOrientation,
|
2001-11-27 18:50:04 -07:00
|
|
|
float fovY,
|
|
|
|
float aspectRatio,
|
|
|
|
float limitingMag) const;
|
2005-11-18 02:00:39 -07:00
|
|
|
|
2001-11-27 18:50:04 -07:00
|
|
|
void findCloseStars(StarHandler& starHandler,
|
2005-11-18 02:00:39 -07:00
|
|
|
const Point3f& obsPosition,
|
2001-11-27 18:50:04 -07:00
|
|
|
float radius) const;
|
|
|
|
|
2005-11-18 02:00:39 -07:00
|
|
|
std::string getStarName (const Star&) const;
|
2006-03-08 11:29:10 -07:00
|
|
|
void getStarName(const Star& star, char* nameBuffer, unsigned int bufferSize) const;
|
2005-11-18 02:00:39 -07:00
|
|
|
std::string getStarNameList(const Star&, const unsigned int maxNames = MAX_STAR_NAMES) const;
|
2001-11-27 18:50:04 -07:00
|
|
|
|
|
|
|
StarNameDatabase* getNameDatabase() const;
|
|
|
|
void setNameDatabase(StarNameDatabase*);
|
|
|
|
|
2004-09-21 11:37:17 -06:00
|
|
|
bool load(std::istream&, const std::string& resourcePath);
|
2002-05-08 02:02:27 -06:00
|
|
|
bool loadBinary(std::istream&);
|
2004-09-09 01:36:08 -06:00
|
|
|
bool loadOldFormatBinary(std::istream&);
|
|
|
|
|
2005-11-18 02:00:39 -07:00
|
|
|
Star* createStar(const uint32 catalogNumber,
|
2004-10-02 04:44:49 -06:00
|
|
|
Hash* starData,
|
|
|
|
const std::string& path,
|
2005-11-18 02:00:39 -07:00
|
|
|
const bool isBarycenter);
|
2004-10-02 04:44:49 -06:00
|
|
|
|
2004-09-09 01:36:08 -06:00
|
|
|
enum Catalog
|
|
|
|
{
|
|
|
|
HenryDraper = 0,
|
|
|
|
Gliese = 1,
|
|
|
|
SAO = 2,
|
|
|
|
MaxCatalog = 3,
|
|
|
|
};
|
|
|
|
|
|
|
|
struct CrossIndexEntry
|
|
|
|
{
|
|
|
|
uint32 catalogNumber;
|
|
|
|
uint32 celCatalogNumber;
|
|
|
|
};
|
|
|
|
|
|
|
|
typedef std::vector<CrossIndexEntry> CrossIndex;
|
2005-11-18 02:00:39 -07:00
|
|
|
|
|
|
|
bool loadCrossIndex (const Catalog, std::istream&);
|
|
|
|
Star* searchCrossIndex(const Catalog, const uint32 number) const;
|
|
|
|
uint32 crossIndex (const Catalog, const uint32 number) const;
|
2002-05-08 02:02:27 -06:00
|
|
|
|
|
|
|
void finish();
|
2001-11-27 18:50:04 -07:00
|
|
|
|
|
|
|
static StarDatabase* read(std::istream&);
|
|
|
|
|
2005-11-18 02:00:39 -07:00
|
|
|
static const char* FILE_HEADER;
|
|
|
|
static const char* CROSSINDEX_FILE_HEADER;
|
2004-09-09 01:36:08 -06:00
|
|
|
|
2001-11-27 18:50:04 -07:00
|
|
|
private:
|
|
|
|
void buildOctree();
|
|
|
|
void buildIndexes();
|
|
|
|
|
|
|
|
int nStars;
|
2002-05-08 02:02:27 -06:00
|
|
|
int capacity;
|
2001-11-27 18:50:04 -07:00
|
|
|
Star* stars;
|
2005-11-18 02:00:39 -07:00
|
|
|
StarNameDatabase* namesDB;
|
2004-09-09 01:36:08 -06:00
|
|
|
Star** catalogNumberIndex;
|
2001-11-27 18:50:04 -07:00
|
|
|
StarOctree* octreeRoot;
|
2005-11-18 02:00:39 -07:00
|
|
|
uint32 nextAutoCatalogNumber;
|
2001-11-27 18:50:04 -07:00
|
|
|
|
2004-09-09 01:36:08 -06:00
|
|
|
std::vector<CrossIndex*> crossIndexes;
|
2004-10-02 04:44:49 -06:00
|
|
|
|
|
|
|
|
|
|
|
struct BarycenterUsage
|
|
|
|
{
|
|
|
|
uint32 catNo;
|
|
|
|
uint32 barycenterCatNo;
|
|
|
|
};
|
|
|
|
std::vector<BarycenterUsage> barycenters;
|
2001-11-27 18:50:04 -07:00
|
|
|
};
|
|
|
|
|
|
|
|
|
2005-11-18 02:00:39 -07:00
|
|
|
Star* StarDatabase::getStar(const uint32 n) const
|
2001-11-27 18:50:04 -07:00
|
|
|
{
|
|
|
|
return stars + n;
|
|
|
|
}
|
|
|
|
|
|
|
|
uint32 StarDatabase::size() const
|
|
|
|
{
|
|
|
|
return nStars;
|
|
|
|
}
|
|
|
|
|
|
|
|
#endif // _STARDB_H_
|