File indexing completed on 2024-04-14 14:11:26
0001 /* 0002 SPDX-FileCopyrightText: 2001 Jason Harris <jharris@30doradus.org> 0003 SPDX-FileCopyrightText: 2021 Valentin Boettcher <hiro at protagon.space; @hiro98:tchncs.de> 0004 0005 SPDX-License-Identifier: GPL-2.0-or-later 0006 */ 0007 0008 #include "catalogobject.h" 0009 #include "ksutils.h" 0010 #include "Options.h" 0011 #include "skymap.h" 0012 #include "texturemanager.h" 0013 #include "kstarsdata.h" 0014 #include "kspopupmenu.h" 0015 #include "catalogsdb.h" 0016 #include <QCryptographicHash> 0017 #include <typeinfo> 0018 0019 CatalogObject *CatalogObject::clone() const 0020 { 0021 Q_ASSERT(typeid(this) == typeid(static_cast<const CatalogObject *>( 0022 this))); // Ensure we are not slicing a derived class 0023 return new CatalogObject(*this); // NOLINT, (b.c. returning raw memory is bad!) 0024 } 0025 0026 float CatalogObject::e() const 0027 { 0028 if (m_major_axis == 0.0 || m_minor_axis == 0.0) 0029 return 1.0; //assume circular 0030 return m_minor_axis / m_major_axis; 0031 } 0032 0033 double CatalogObject::labelOffset() const 0034 { 0035 //Calculate object size in pixels 0036 double major_axis = m_major_axis; 0037 double minor_axis = m_minor_axis; 0038 0039 if (major_axis == 0.0 && type() == 1) //catalog stars 0040 { 0041 major_axis = 1.0; 0042 minor_axis = 1.0; 0043 } 0044 0045 double size = 0046 ((major_axis + minor_axis) / 2.0) * dms::PI * Options::zoomFactor() / 10800.0; 0047 0048 return 0.5 * size + 4.; 0049 } 0050 0051 QString CatalogObject::labelString() const 0052 { 0053 QString oName; 0054 if (Options::showDeepSkyNames()) 0055 { 0056 if (Options::deepSkyLongLabels() && translatedLongName() != translatedName()) 0057 oName = translatedLongName() + " (" + translatedName() + ')'; 0058 else 0059 oName = translatedName(); 0060 } 0061 0062 if (Options::showDeepSkyMagnitudes() && !std::isnan(mag())) 0063 { 0064 if (Options::showDeepSkyNames()) 0065 oName += ' '; 0066 oName += '[' + QLocale().toString(mag(), 'f', 1) + "m]"; 0067 } 0068 0069 return oName; 0070 } 0071 0072 SkyObject::UID CatalogObject::getUID() const 0073 { 0074 return m_object_id.toLongLong(); // = qint64 0075 } 0076 0077 void CatalogObject::JITupdate() 0078 { 0079 KStarsData *data{ KStarsData::Instance() }; 0080 0081 if (m_updateID != data->updateID()) 0082 { 0083 m_updateID = data->updateID(); 0084 0085 if (m_updateNumID != data->updateNumID()) 0086 { 0087 updateCoords(data->updateNum()); 0088 m_updateNumID = data->updateNumID(); 0089 } 0090 0091 EquatorialToHorizontal(data->lst(), data->geo()->lat()); 0092 } 0093 } 0094 0095 void CatalogObject::initPopupMenu(KSPopupMenu *pmenu) 0096 { 0097 #ifndef KSTARS_LITE 0098 pmenu->createCatalogObjectMenu(this); 0099 #else 0100 Q_UNUSED(pmenu); 0101 #endif 0102 } 0103 0104 const CatalogsDB::Catalog CatalogObject::getCatalog() const 0105 { 0106 if (m_database_path.get().length() == 0) 0107 return {}; 0108 0109 CatalogsDB::DBManager db{ m_database_path }; 0110 0111 const auto &success = db.get_catalog(m_catalog_id); 0112 return (success.first ? success.second : CatalogsDB::Catalog{}); 0113 } 0114 0115 const CatalogObject::oid CatalogObject::getId() const 0116 0117 { 0118 return CatalogObject::getId(SkyObject::TYPE(type()), ra0().Degrees(), 0119 dec0().Degrees(), name(), catalogIdentifier()); 0120 } 0121 0122 const CatalogObject::oid CatalogObject::getId(const SkyObject::TYPE type, const double ra, 0123 const double dec, const QString &name, 0124 const QString &catalog_identifier) 0125 { 0126 QString data; 0127 data += QString::number(type); 0128 data += QString::number(static_cast<int>(std::floor(ra))); 0129 data += QString::number(static_cast<int>(std::floor(dec))); 0130 data += name; 0131 data += catalog_identifier; 0132 0133 QCryptographicHash hash{ QCryptographicHash::Sha256 }; 0134 hash.addData(data.toUtf8()); 0135 0136 return hash.result(); 0137 } 0138 0139 void CatalogObject::load_image() 0140 { 0141 if (!m_image_loaded) 0142 { 0143 QString tname = name().toLower().remove(' '); 0144 m_image = TextureManager::getImage(tname); 0145 m_image_loaded = true; 0146 } 0147 }