File indexing completed on 2024-03-24 15:17:41
0001 /* 0002 SPDX-FileCopyrightText: 2011 Rafał Kułaga <rl.kulaga@gmail.com> 0003 0004 SPDX-License-Identifier: GPL-2.0-or-later 0005 */ 0006 0007 #include "Options.h" 0008 0009 #include "shfovexporter.h" 0010 #include "starhopper.h" 0011 #include "targetlistcomponent.h" 0012 #include "kstarsdata.h" 0013 #include "skymapcomposite.h" 0014 #include "skymap.h" 0015 #include "printingwizard.h" 0016 0017 ShFovExporter::ShFovExporter(PrintingWizard *wizard, SkyMap *map) : m_Map(map), m_ParentWizard(wizard) 0018 { 0019 } 0020 0021 bool ShFovExporter::calculatePath(const SkyPoint &src, const SkyPoint &dest, double fov, double maglim) 0022 { 0023 m_Src = src; 0024 m_Dest = dest; 0025 0026 auto list = m_StarHopper.computePath(src, dest, fov, maglim); 0027 m_skyObjList = KSUtils::castStarObjListToSkyObjList(list); 0028 delete list; 0029 0030 m_Path = *m_skyObjList; 0031 if (m_Path.isEmpty()) 0032 { 0033 return false; 0034 } 0035 0036 return true; 0037 } 0038 0039 bool ShFovExporter::exportPath() 0040 { 0041 KStarsData::Instance()->clock()->stop(); 0042 0043 if (m_Path.isEmpty()) 0044 { 0045 return false; 0046 } 0047 0048 // Show path on SkyMap 0049 TargetListComponent *t = KStarsData::Instance()->skyComposite()->getStarHopRouteList(); 0050 0051 t->list.reset(m_skyObjList); 0052 0053 // Update SkyMap now 0054 m_Map->forceUpdate(true); 0055 0056 // Capture FOV snapshots 0057 centerBetweenAndCapture(m_Src, *m_Path.at(0)); 0058 for (int i = 0; i < m_Path.size() - 1; i++) 0059 { 0060 centerBetweenAndCapture(*m_Path.at(i), *m_Path.at(i + 1)); 0061 } 0062 centerBetweenAndCapture(*m_Path.last(), m_Dest); 0063 0064 return true; 0065 } 0066 0067 void ShFovExporter::centerBetweenAndCapture(const SkyPoint &ptA, const SkyPoint &ptB) 0068 { 0069 // Calculate RA and Dec coordinates of point between ptA and ptB 0070 dms ra(ptA.ra().Degrees() + 0.5 * (ptB.ra().Degrees() - ptA.ra().Degrees())); 0071 dms dec(ptA.dec().Degrees() + 0.5 * (ptB.dec().Degrees() - ptA.dec().Degrees())); 0072 SkyPoint between(ra, dec); 0073 0074 // Center SkyMap 0075 m_Map->setClickedPoint(&between); 0076 m_Map->slotCenter(); 0077 0078 // Capture FOV snapshot 0079 m_ParentWizard->captureFov(); 0080 }