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 }