Compare commits
10 Commits
f016500f12
...
filetree
| Author | SHA1 | Date | |
|---|---|---|---|
| f9f005e7ea | |||
| 5ba6b4863c | |||
| 6c7e078340 | |||
| b58559a18a | |||
| 2ac14a6c04 | |||
| b84256625c | |||
| 202a2b11b7 | |||
| 32f192ed7e | |||
| a0422683bd | |||
| ce67b35bfa |
+32
-32
@@ -23,39 +23,39 @@ find_library(FITS_LIB cfitsio REQUIRED)
|
|||||||
find_library(RAW_LIB NAMES raw_r REQUIRED)
|
find_library(RAW_LIB NAMES raw_r REQUIRED)
|
||||||
find_library(WCS_LIB wcs wcslib REQUIRED)
|
find_library(WCS_LIB wcs wcslib REQUIRED)
|
||||||
find_library(LCMS2_LIB lcms2 REQUIRED)
|
find_library(LCMS2_LIB lcms2 REQUIRED)
|
||||||
find_library(STELLARSOLVER_LIB stellarsolver)
|
find_library(STELLARSOLVER_LIB NAMES stellarsolver stellarsolver6)
|
||||||
|
|
||||||
add_subdirectory(libXISF)
|
add_subdirectory(libXISF)
|
||||||
|
|
||||||
set(TENMON_SRC
|
set(TENMON_SRC
|
||||||
about.cpp about.h
|
src/about.cpp src/about.h
|
||||||
batchprocessing.cpp batchprocessing.h batchprocessing.ui
|
src/batchprocessing.cpp src/batchprocessing.h src/batchprocessing.ui
|
||||||
chartgraph.h chartgraph.cpp
|
src/chartgraph.h src/chartgraph.cpp
|
||||||
database.cpp database.h
|
src/database.cpp src/database.h
|
||||||
databaseview.cpp databaseview.h
|
src/databaseview.cpp src/databaseview.h
|
||||||
delete.cpp
|
src/delete.cpp
|
||||||
filesystemwidget.cpp filesystemwidget.h
|
src/filesystemwidget.cpp src/filesystemwidget.h
|
||||||
histogram.cpp histogram.h
|
src/histogram.cpp src/histogram.h
|
||||||
httpdownloader.h httpdownloader.cpp
|
src/httpdownloader.h src/httpdownloader.cpp
|
||||||
imageinfo.cpp imageinfo.h
|
src/imageinfo.cpp src/imageinfo.h
|
||||||
imageinfodata.cpp imageinfodata.h
|
src/imageinfodata.cpp src/imageinfodata.h
|
||||||
imageringlist.cpp imageringlist.h
|
src/imageringlist.cpp src/imageringlist.h
|
||||||
imagescrollarea.cpp imagescrollarea.h
|
src/imagescrollarea.cpp src/imagescrollarea.h
|
||||||
imagewidget.h imagewidget.cpp
|
src/imagewidget.h src/imagewidget.cpp
|
||||||
loadimage.h loadimage.cpp
|
src/loadimage.h src/loadimage.cpp
|
||||||
loadrunable.cpp loadrunable.h
|
src/loadrunable.cpp src/loadrunable.h
|
||||||
main.cpp
|
src/main.cpp
|
||||||
mainwindow.cpp mainwindow.h
|
src/mainwindow.cpp src/mainwindow.h
|
||||||
markedfiles.cpp markedfiles.h
|
src/markedfiles.cpp src/markedfiles.h
|
||||||
mtfparam.h
|
src/mtfparam.h
|
||||||
rawimage.cpp rawimage.h
|
src/rawimage.cpp src/rawimage.h
|
||||||
rawimage_sse.cpp
|
src/rawimage_sse.cpp
|
||||||
scriptengine.cpp scriptengine.h
|
src/scriptengine.cpp src/scriptengine.h
|
||||||
settingsdialog.cpp settingsdialog.h
|
src/settingsdialog.cpp src/settingsdialog.h
|
||||||
statusbar.cpp statusbar.h
|
src/statusbar.cpp src/statusbar.h
|
||||||
stfslider.cpp stfslider.h
|
src/stfslider.cpp src/stfslider.h
|
||||||
stretchtoolbar.cpp stretchtoolbar.h
|
src/stretchtoolbar.cpp src/stretchtoolbar.h
|
||||||
tfloat16.h
|
src/tfloat16.h
|
||||||
thumbnailer/genthumbnail.cpp thumbnailer/genthumbnail.h
|
thumbnailer/genthumbnail.cpp thumbnailer/genthumbnail.h
|
||||||
)
|
)
|
||||||
|
|
||||||
@@ -96,9 +96,9 @@ if(STELLARSOLVER_INCLUDE AND STELLARSOLVER_LIB)
|
|||||||
endif(MXE)
|
endif(MXE)
|
||||||
target_compile_definitions(tenmon PRIVATE "PLATESOLVER")
|
target_compile_definitions(tenmon PRIVATE "PLATESOLVER")
|
||||||
target_sources(tenmon PRIVATE
|
target_sources(tenmon PRIVATE
|
||||||
solver.cpp solver.h
|
src/solver.cpp src/solver.h
|
||||||
platesolving.cpp platesolving.h platesolving.ui
|
src/platesolving.cpp src/platesolving.h src/platesolving.ui
|
||||||
platesolvingsettings.cpp platesolvingsettings.h platesolvingsettings.ui
|
src/platesolvingsettings.cpp src/platesolvingsettings.h src/platesolvingsettings.ui
|
||||||
)
|
)
|
||||||
message(STATUS "Found stellarsolver ${STELLARSOLVER_INCLUDE} ${STELLARSOLVER_LIB}")
|
message(STATUS "Found stellarsolver ${STELLARSOLVER_INCLUDE} ${STELLARSOLVER_LIB}")
|
||||||
endif(STELLARSOLVER_INCLUDE AND STELLARSOLVER_LIB)
|
endif(STELLARSOLVER_INCLUDE AND STELLARSOLVER_LIB)
|
||||||
|
|||||||
@@ -29,3 +29,5 @@ Then to build run standard cmake sequence
|
|||||||
For working plate solving you must have compiled and installed StellarSolver https://github.com/rlancaste/stellarsolver
|
For working plate solving you must have compiled and installed StellarSolver https://github.com/rlancaste/stellarsolver
|
||||||
It is important that you compile StellarSolver with Qt6. By default it use Qt5 but when linked with Qt6 program it will
|
It is important that you compile StellarSolver with Qt6. By default it use Qt5 but when linked with Qt6 program it will
|
||||||
crash.
|
crash.
|
||||||
|
|
||||||
|
Using OpenNGC database https://github.com/mattiaverga/OpenNGC under CC-BY-SA-4.0 https://creativecommons.org/licenses/by-sa/4.0/
|
||||||
|
|||||||
@@ -0,0 +1,141 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||||
|
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
||||||
|
|
||||||
|
<svg
|
||||||
|
width="48"
|
||||||
|
height="48"
|
||||||
|
viewBox="0 0 12.699999 12.699999"
|
||||||
|
version="1.1"
|
||||||
|
id="svg5"
|
||||||
|
inkscape:version="1.2.2 (b0a8486541, 2022-12-01)"
|
||||||
|
sodipodi:docname="grid.svg"
|
||||||
|
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||||
|
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||||
|
xmlns="http://www.w3.org/2000/svg"
|
||||||
|
xmlns:svg="http://www.w3.org/2000/svg">
|
||||||
|
<sodipodi:namedview
|
||||||
|
id="namedview7"
|
||||||
|
pagecolor="#ffffff"
|
||||||
|
bordercolor="#666666"
|
||||||
|
borderopacity="1.0"
|
||||||
|
inkscape:showpageshadow="2"
|
||||||
|
inkscape:pageopacity="0.0"
|
||||||
|
inkscape:pagecheckerboard="0"
|
||||||
|
inkscape:deskcolor="#d1d1d1"
|
||||||
|
inkscape:document-units="mm"
|
||||||
|
showgrid="false"
|
||||||
|
inkscape:zoom="9.5144352"
|
||||||
|
inkscape:cx="39.361243"
|
||||||
|
inkscape:cy="25.067174"
|
||||||
|
inkscape:window-width="2510"
|
||||||
|
inkscape:window-height="1371"
|
||||||
|
inkscape:window-x="0"
|
||||||
|
inkscape:window-y="0"
|
||||||
|
inkscape:window-maximized="1"
|
||||||
|
inkscape:current-layer="layer1" />
|
||||||
|
<defs
|
||||||
|
id="defs2">
|
||||||
|
<inkscape:path-effect
|
||||||
|
effect="skeletal"
|
||||||
|
id="path-effect636"
|
||||||
|
is_visible="true"
|
||||||
|
lpeversion="1"
|
||||||
|
pattern="M 0,4.992138 C 0,2.2364778 2.2364778,0 4.992138,0 c 2.7556601,0 4.9921379,2.2364778 4.9921379,4.992138 0,2.7556601 -2.2364778,4.9921379 -4.9921379,4.9921379 C 2.2364778,9.9842759 0,7.7477981 0,4.992138 Z"
|
||||||
|
copytype="single_stretched"
|
||||||
|
prop_scale="1"
|
||||||
|
scale_y_rel="false"
|
||||||
|
spacing="0"
|
||||||
|
normal_offset="0"
|
||||||
|
tang_offset="0"
|
||||||
|
prop_units="false"
|
||||||
|
vertical_pattern="false"
|
||||||
|
hide_knot="false"
|
||||||
|
fuse_tolerance="0" />
|
||||||
|
<inkscape:path-effect
|
||||||
|
effect="skeletal"
|
||||||
|
id="path-effect632"
|
||||||
|
is_visible="true"
|
||||||
|
lpeversion="1"
|
||||||
|
pattern="M 0,4.992138 C 0,2.2364778 2.2364778,0 4.992138,0 c 2.7556601,0 4.9921379,2.2364778 4.9921379,4.992138 0,2.7556601 -2.2364778,4.9921379 -4.9921379,4.9921379 C 2.2364778,9.9842759 0,7.7477981 0,4.992138 Z"
|
||||||
|
copytype="single_stretched"
|
||||||
|
prop_scale="1"
|
||||||
|
scale_y_rel="false"
|
||||||
|
spacing="0"
|
||||||
|
normal_offset="0"
|
||||||
|
tang_offset="0"
|
||||||
|
prop_units="false"
|
||||||
|
vertical_pattern="false"
|
||||||
|
hide_knot="false"
|
||||||
|
fuse_tolerance="0" />
|
||||||
|
<inkscape:path-effect
|
||||||
|
effect="skeletal"
|
||||||
|
id="path-effect628"
|
||||||
|
is_visible="true"
|
||||||
|
lpeversion="1"
|
||||||
|
pattern="M 0,4.992138 C 0,2.2364778 2.2364778,0 4.992138,0 c 2.7556601,0 4.9921379,2.2364778 4.9921379,4.992138 0,2.7556601 -2.2364778,4.9921379 -4.9921379,4.9921379 C 2.2364778,9.9842759 0,7.7477981 0,4.992138 Z"
|
||||||
|
copytype="single_stretched"
|
||||||
|
prop_scale="1"
|
||||||
|
scale_y_rel="false"
|
||||||
|
spacing="0"
|
||||||
|
normal_offset="0"
|
||||||
|
tang_offset="0"
|
||||||
|
prop_units="false"
|
||||||
|
vertical_pattern="false"
|
||||||
|
hide_knot="false"
|
||||||
|
fuse_tolerance="0" />
|
||||||
|
<inkscape:path-effect
|
||||||
|
effect="bspline"
|
||||||
|
id="path-effect624"
|
||||||
|
is_visible="true"
|
||||||
|
lpeversion="1"
|
||||||
|
weight="33.333333"
|
||||||
|
steps="2"
|
||||||
|
helper_size="0"
|
||||||
|
apply_no_weight="true"
|
||||||
|
apply_with_weight="true"
|
||||||
|
only_selected="false" />
|
||||||
|
<inkscape:path-effect
|
||||||
|
effect="spiro"
|
||||||
|
id="path-effect620"
|
||||||
|
is_visible="true"
|
||||||
|
lpeversion="1" />
|
||||||
|
</defs>
|
||||||
|
<g
|
||||||
|
inkscape:label="Vrstva 1"
|
||||||
|
inkscape:groupmode="layer"
|
||||||
|
id="layer1">
|
||||||
|
<path
|
||||||
|
style="fill:none;stroke:#000000;stroke-width:0.503;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;stroke-dasharray:none"
|
||||||
|
d="M -5,-5 13,13"
|
||||||
|
id="path616"
|
||||||
|
sodipodi:nodetypes="cc" />
|
||||||
|
<circle
|
||||||
|
style="fill:none;stroke:#000000;stroke-width:0.503;stroke-linejoin:round;stroke-opacity:1;stroke-dasharray:none"
|
||||||
|
id="path643"
|
||||||
|
cx="-4.9824347"
|
||||||
|
cy="-4.9865055"
|
||||||
|
r="12.973718" />
|
||||||
|
<circle
|
||||||
|
style="fill:none;stroke:#000000;stroke-width:0.503;stroke-linejoin:round;stroke-dasharray:none;stroke-opacity:1"
|
||||||
|
id="path1665"
|
||||||
|
cx="-4.9600825"
|
||||||
|
cy="-4.9741392"
|
||||||
|
r="17.086035" />
|
||||||
|
<circle
|
||||||
|
style="fill:none;stroke:#000000;stroke-width:0.503;stroke-linejoin:round;stroke-dasharray:none;stroke-opacity:1"
|
||||||
|
id="path1667"
|
||||||
|
cx="-5.0079365"
|
||||||
|
cy="-5.0034046"
|
||||||
|
r="21.147657" />
|
||||||
|
<path
|
||||||
|
style="fill:none;stroke:#000000;stroke-width:0.467;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;stroke-dasharray:none"
|
||||||
|
d="M 14.371451,3.5622727 -4.9904999,-5.0054782 4.2432806,13.903978"
|
||||||
|
id="path1734" />
|
||||||
|
<circle
|
||||||
|
style="fill:none;stroke:#000000;stroke-width:0.503;stroke-linejoin:round;stroke-dasharray:none;stroke-opacity:1"
|
||||||
|
id="path1736"
|
||||||
|
cx="-5.155458"
|
||||||
|
cy="-5.1256938"
|
||||||
|
r="9.6808758" />
|
||||||
|
</g>
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 4.7 KiB |
@@ -20,14 +20,15 @@
|
|||||||
<file alias="help">../about/help_en</file>
|
<file alias="help">../about/help_en</file>
|
||||||
<file>colormap.png</file>
|
<file>colormap.png</file>
|
||||||
<file>ngc.db</file>
|
<file>ngc.db</file>
|
||||||
|
<file>grid.svg</file>
|
||||||
</qresource>
|
</qresource>
|
||||||
<qresource prefix="/" lang="en">
|
<qresource lang="en" prefix="/">
|
||||||
<file alias="help">../about/help_en</file>
|
<file alias="help">../about/help_en</file>
|
||||||
</qresource>
|
</qresource>
|
||||||
<qresource prefix="/" lang="sk">
|
<qresource lang="sk" prefix="/">
|
||||||
<file alias="help">../about/help_sk</file>
|
<file alias="help">../about/help_sk</file>
|
||||||
</qresource>
|
</qresource>
|
||||||
<qresource prefix="/" lang="fr">
|
<qresource lang="fr" prefix="/">
|
||||||
<file alias="help">../about/help_fr</file>
|
<file alias="help">../about/help_fr</file>
|
||||||
</qresource>
|
</qresource>
|
||||||
</RCC>
|
</RCC>
|
||||||
|
|||||||
@@ -12,10 +12,12 @@ if(files.length == 0)
|
|||||||
throw "";
|
throw "";
|
||||||
}
|
}
|
||||||
|
|
||||||
let action = core.getItem(["UPDATE", "ADD", "REMOVE"], "Do you want update, add or remove record?");
|
let action = core.getItem(["UPDATE", "UPDATE_ADD", "ADD", "REMOVE"], "Do you want update, add or remove record?");
|
||||||
|
|
||||||
let modify = new FITSRecordModify();
|
let modify = new FITSRecordModify();
|
||||||
|
|
||||||
|
let proceed = false;
|
||||||
|
|
||||||
if(action == "UPDATE")
|
if(action == "UPDATE")
|
||||||
{
|
{
|
||||||
let keywords = files[0].fitsKeywords().filter(checkFITS);
|
let keywords = files[0].fitsKeywords().filter(checkFITS);
|
||||||
@@ -25,22 +27,48 @@ if(action == "UPDATE")
|
|||||||
value = core.getString("Enter new value", value);
|
value = core.getString("Enter new value", value);
|
||||||
else
|
else
|
||||||
value = core.getFloat("Enter new value", value);
|
value = core.getFloat("Enter new value", value);
|
||||||
|
|
||||||
|
if(keyword && value)
|
||||||
|
{
|
||||||
|
proceed = true;
|
||||||
modify.updateKeyword(keyword, value);
|
modify.updateKeyword(keyword, value);
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
else if(action == "UPDATE_ADD")
|
||||||
|
{
|
||||||
|
let keyword = core.getString("Enter keyword to update");
|
||||||
|
let value = core.getString("Enter new value");
|
||||||
|
if(keyword && value)
|
||||||
|
{
|
||||||
|
proceed = true;
|
||||||
|
keyword = keyword.toUpperCase();
|
||||||
|
modify.updateKeyword(keyword, value);
|
||||||
|
}
|
||||||
|
}
|
||||||
else if(action == "ADD")
|
else if(action == "ADD")
|
||||||
{
|
{
|
||||||
let keyword = core.getString("Enter keyword to add");
|
let keyword = core.getString("Enter keyword to add");
|
||||||
let value = core.getString("Enter new value");
|
let value = core.getString("Enter new value");
|
||||||
|
if(keyword && value)
|
||||||
|
{
|
||||||
|
proceed = true;
|
||||||
keyword = keyword.toUpperCase();
|
keyword = keyword.toUpperCase();
|
||||||
modify.addKeyword(keyword, value);
|
modify.addKeyword(keyword, value);
|
||||||
}
|
}
|
||||||
|
}
|
||||||
else if(action == "REMOVE")
|
else if(action == "REMOVE")
|
||||||
{
|
{
|
||||||
let keywords = files[0].fitsKeywords().filter(checkFITS);
|
let keywords = files[0].fitsKeywords().filter(checkFITS);
|
||||||
let keyword = core.getItem(keywords, "Select keyword to remove");
|
let keyword = core.getItem(keywords, "Select keyword to remove");
|
||||||
|
if(keyword)
|
||||||
|
{
|
||||||
|
proceed = true;
|
||||||
modify.removeKeyword(keyword);
|
modify.removeKeyword(keyword);
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if(proceed)
|
||||||
|
{
|
||||||
for(file of files)
|
for(file of files)
|
||||||
{
|
{
|
||||||
if(file.suffix() == "fits" || file.suffix() == "fit" || file.suffix() == "xisf")
|
if(file.suffix() == "fits" || file.suffix() == "fit" || file.suffix() == "xisf")
|
||||||
@@ -49,4 +77,9 @@ for(file of files)
|
|||||||
file.modifyFITSRecords(modify);
|
file.modifyFITSRecords(modify);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
core.log("Canceled");
|
||||||
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -118,7 +118,7 @@
|
|||||||
</release>
|
</release>
|
||||||
<release version="20240816" date="2024-08-16">
|
<release version="20240816" date="2024-08-16">
|
||||||
<description>
|
<description>
|
||||||
Fix saving image
|
<p>Fix saving image</p>
|
||||||
</description>
|
</description>
|
||||||
</release>
|
</release>
|
||||||
<release version="20240616" date="2024-06-16">
|
<release version="20240616" date="2024-06-16">
|
||||||
|
|||||||
@@ -100,6 +100,7 @@ BatchProcessing::BatchProcessing(Database *database, QWidget *parent) : QDialog(
|
|||||||
|
|
||||||
connect(_ui->addFilesButton, &QPushButton::released, this, &BatchProcessing::addFiles);
|
connect(_ui->addFilesButton, &QPushButton::released, this, &BatchProcessing::addFiles);
|
||||||
connect(_ui->addDirButton, &QPushButton::released, this, &BatchProcessing::addDir);
|
connect(_ui->addDirButton, &QPushButton::released, this, &BatchProcessing::addDir);
|
||||||
|
connect(_ui->addMarkedButton, &QPushButton::released, this, &BatchProcessing::addMarked);
|
||||||
connect(_ui->removeButton, &QPushButton::released, this, &BatchProcessing::removePath);
|
connect(_ui->removeButton, &QPushButton::released, this, &BatchProcessing::removePath);
|
||||||
connect(_ui->removeAllButton, &QPushButton::released, this, &BatchProcessing::removeAllPaths);
|
connect(_ui->removeAllButton, &QPushButton::released, this, &BatchProcessing::removeAllPaths);
|
||||||
connect(_ui->startButton, &QPushButton::released, this, &BatchProcessing::runScript);
|
connect(_ui->startButton, &QPushButton::released, this, &BatchProcessing::runScript);
|
||||||
@@ -164,6 +165,17 @@ void BatchProcessing::addDir()
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void BatchProcessing::addMarked()
|
||||||
|
{
|
||||||
|
QStringList files = _database->getMarkedFiles();
|
||||||
|
for(const QString &file : files)
|
||||||
|
{
|
||||||
|
QFileInfo info(file);
|
||||||
|
if(info.exists() && info.isReadable())
|
||||||
|
_ui->pathsList->addItem(file);
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
void BatchProcessing::removePath()
|
void BatchProcessing::removePath()
|
||||||
{
|
{
|
||||||
for(auto &item : _ui->pathsList->selectedItems())
|
for(auto &item : _ui->pathsList->selectedItems())
|
||||||
@@ -28,6 +28,7 @@ protected:
|
|||||||
public slots:
|
public slots:
|
||||||
void addFiles();
|
void addFiles();
|
||||||
void addDir();
|
void addDir();
|
||||||
|
void addMarked();
|
||||||
void removePath();
|
void removePath();
|
||||||
void removeAllPaths();
|
void removeAllPaths();
|
||||||
void browse();
|
void browse();
|
||||||
@@ -52,6 +52,13 @@
|
|||||||
</property>
|
</property>
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
|
<item>
|
||||||
|
<widget class="QPushButton" name="addMarkedButton">
|
||||||
|
<property name="text">
|
||||||
|
<string>Add marked</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
<item>
|
<item>
|
||||||
<widget class="QPushButton" name="removeButton">
|
<widget class="QPushButton" name="removeButton">
|
||||||
<property name="text">
|
<property name="text">
|
||||||
@@ -284,7 +284,7 @@ QVector<SkyObject> Database::getObjects(double minRa, double maxRa, double minDe
|
|||||||
m_getNgc.value("MajAx").toDouble(),
|
m_getNgc.value("MajAx").toDouble(),
|
||||||
m_getNgc.value("MinAx").toDouble(),
|
m_getNgc.value("MinAx").toDouble(),
|
||||||
m_getNgc.value("PosAng").toDouble(),
|
m_getNgc.value("PosAng").toDouble(),
|
||||||
m_getNgc.value("mag").toDouble(),
|
m_getNgc.value("mag").isNull() ? NAN : m_getNgc.value("mag").toDouble(),
|
||||||
{0, 0},
|
{0, 0},
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
@@ -65,7 +65,7 @@ struct SkyObject
|
|||||||
double maj_ax;
|
double maj_ax;
|
||||||
double min_ax;
|
double min_ax;
|
||||||
double pos_ang;
|
double pos_ang;
|
||||||
double vmag;
|
double mag;
|
||||||
QPointF pixel;
|
QPointF pixel;
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -142,6 +142,11 @@ void ImageScrollArea::falseColor(bool enable)
|
|||||||
m_imageWidget->falseColor(enable);
|
m_imageWidget->falseColor(enable);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void ImageScrollArea::drawGrid(bool enable)
|
||||||
|
{
|
||||||
|
m_imageWidget->drawGrid(enable);
|
||||||
|
}
|
||||||
|
|
||||||
QImage ImageScrollArea::renderToImage()
|
QImage ImageScrollArea::renderToImage()
|
||||||
{
|
{
|
||||||
return m_imageWidget->renderToImage();
|
return m_imageWidget->renderToImage();
|
||||||
@@ -31,6 +31,7 @@ public slots:
|
|||||||
void invert(bool enable);
|
void invert(bool enable);
|
||||||
void superPixel(bool enable);
|
void superPixel(bool enable);
|
||||||
void falseColor(bool enable);
|
void falseColor(bool enable);
|
||||||
|
void drawGrid(bool enable);
|
||||||
QImage renderToImage();
|
QImage renderToImage();
|
||||||
protected slots:
|
protected slots:
|
||||||
void scrollEvent();
|
void scrollEvent();
|
||||||
+18
-1
@@ -4,10 +4,27 @@
|
|||||||
#include <QTranslator>
|
#include <QTranslator>
|
||||||
#include <QCommandLineParser>
|
#include <QCommandLineParser>
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
#include "thumbnailer/genthumbnail.h"
|
#include "../thumbnailer/genthumbnail.h"
|
||||||
|
#include <QTreeView>
|
||||||
|
#include <QFileSystemModel>
|
||||||
|
#include <QTimer>
|
||||||
|
|
||||||
int main(int argc, char *argv[])
|
int main(int argc, char *argv[])
|
||||||
{
|
{
|
||||||
|
|
||||||
|
QApplication app(argc, argv);
|
||||||
|
QFileSystemModel model;
|
||||||
|
QTreeView treeView;
|
||||||
|
|
||||||
|
|
||||||
|
QTimer::singleShot(5000, [&model,&treeView](){
|
||||||
|
treeView.setModel(&model);
|
||||||
|
model.setRootPath("/home");
|
||||||
|
});
|
||||||
|
treeView.resize(800, 600);
|
||||||
|
treeView.show();
|
||||||
|
return app.exec();
|
||||||
|
|
||||||
#ifdef __linux__
|
#ifdef __linux__
|
||||||
setenv("LC_NUMERIC", "C", 1);
|
setenv("LC_NUMERIC", "C", 1);
|
||||||
#endif
|
#endif
|
||||||
@@ -92,6 +92,7 @@ MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent)
|
|||||||
connect(m_stretchPanel, &StretchToolbar::invert, m_image, &ImageScrollArea::invert);
|
connect(m_stretchPanel, &StretchToolbar::invert, m_image, &ImageScrollArea::invert);
|
||||||
connect(m_stretchPanel, &StretchToolbar::superPixel, m_image, &ImageScrollArea::superPixel);
|
connect(m_stretchPanel, &StretchToolbar::superPixel, m_image, &ImageScrollArea::superPixel);
|
||||||
connect(m_stretchPanel, &StretchToolbar::falseColor, m_image, &ImageScrollArea::falseColor);
|
connect(m_stretchPanel, &StretchToolbar::falseColor, m_image, &ImageScrollArea::falseColor);
|
||||||
|
connect(m_stretchPanel, &StretchToolbar::drawGrid, m_image, &ImageScrollArea::drawGrid);
|
||||||
|
|
||||||
m_ringList = new ImageRingList(m_database, nameFilter, this);
|
m_ringList = new ImageRingList(m_database, nameFilter, this);
|
||||||
m_filesystem = new FilesystemWidget(m_ringList, this);
|
m_filesystem = new FilesystemWidget(m_ringList, this);
|
||||||
@@ -107,7 +107,34 @@ QJSValue ScriptEngine::getObjects(double ra, double dec, double distance)
|
|||||||
jsObj.setProperty("name2", object.name2);
|
jsObj.setProperty("name2", object.name2);
|
||||||
jsObj.setProperty("ra", object.skyPoint.RA());
|
jsObj.setProperty("ra", object.skyPoint.RA());
|
||||||
jsObj.setProperty("dec", object.skyPoint.DEC());
|
jsObj.setProperty("dec", object.skyPoint.DEC());
|
||||||
jsObj.setProperty("vmag", object.vmag);
|
jsObj.setProperty("mag", object.mag);
|
||||||
|
ret.setProperty(i++, jsObj);
|
||||||
|
}
|
||||||
|
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
QJSValue ScriptEngine::getObjects(const QJSValue &bounds)
|
||||||
|
{
|
||||||
|
QVector<SkyObject> objects;
|
||||||
|
double minRa = bounds.property("minRA").toNumber();
|
||||||
|
double maxRa = bounds.property("maxRA").toNumber();
|
||||||
|
double minDec = bounds.property("minDEC").toNumber();
|
||||||
|
double maxDec = bounds.property("maxDEC").toNumber();
|
||||||
|
|
||||||
|
QMetaObject::invokeMethod(_database, [this, minRa, maxRa, minDec, maxDec](){
|
||||||
|
return _database->getObjects(minRa, maxRa, minDec, maxDec); }, Qt::BlockingQueuedConnection, &objects);
|
||||||
|
|
||||||
|
QJSValue ret = newArray(objects.size());
|
||||||
|
qint32 i = 0;
|
||||||
|
for(auto &object : objects)
|
||||||
|
{
|
||||||
|
QJSValue jsObj = newObject();
|
||||||
|
jsObj.setProperty("name", object.name);
|
||||||
|
jsObj.setProperty("name2", object.name2);
|
||||||
|
jsObj.setProperty("ra", object.skyPoint.RA());
|
||||||
|
jsObj.setProperty("dec", object.skyPoint.DEC());
|
||||||
|
jsObj.setProperty("mag", object.mag);
|
||||||
ret.setProperty(i++, jsObj);
|
ret.setProperty(i++, jsObj);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -432,12 +459,14 @@ void File::loadFitsKeywords()
|
|||||||
{
|
{
|
||||||
readXISFHeader(_path, info);
|
readXISFHeader(_path, info);
|
||||||
}
|
}
|
||||||
else if(suffix().toLower() == "fits" || suffix().toLower() == "fit")
|
else if(suffix().toLower() == "fits" || suffix().toLower() == "fit" || suffix().toLower() == "fz")
|
||||||
{
|
{
|
||||||
readFITSHeader(_path, info);
|
readFITSHeader(_path, info);
|
||||||
}
|
}
|
||||||
else return;
|
else return;
|
||||||
|
|
||||||
|
_wcs = info.wcs;
|
||||||
|
|
||||||
for(auto &record : info.fitsHeader)
|
for(auto &record : info.fitsHeader)
|
||||||
{
|
{
|
||||||
_fitsKeywords.append(record.key);
|
_fitsKeywords.append(record.key);
|
||||||
@@ -810,6 +839,24 @@ QJSValue File::stats()
|
|||||||
return _stats;
|
return _stats;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
QJSValue File::calculatedBounds()
|
||||||
|
{
|
||||||
|
QJSValue ret = _engine->newObject();
|
||||||
|
loadFitsKeywords();
|
||||||
|
if(_wcs)
|
||||||
|
{
|
||||||
|
double minRa, maxRa, minDec, maxDec, crVal1, crVal2;
|
||||||
|
_wcs->calculateBounds(minRa, maxRa, minDec, maxDec, crVal1, crVal2);
|
||||||
|
ret.setProperty("minRA", minRa);
|
||||||
|
ret.setProperty("maxRA", maxRa);
|
||||||
|
ret.setProperty("minDEC", minDec);
|
||||||
|
ret.setProperty("maxDEC", maxDec);
|
||||||
|
ret.setProperty("crVal1", crVal1);
|
||||||
|
ret.setProperty("crVal2", crVal2);
|
||||||
|
}
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
#ifdef PLATESOLVER
|
#ifdef PLATESOLVER
|
||||||
QJSValue File::solve(bool updateHeader)
|
QJSValue File::solve(bool updateHeader)
|
||||||
{
|
{
|
||||||
@@ -42,6 +42,7 @@ public:
|
|||||||
Q_INVOKABLE void unmark(File *file);
|
Q_INVOKABLE void unmark(File *file);
|
||||||
Q_INVOKABLE bool isMarked(const File *file);
|
Q_INVOKABLE bool isMarked(const File *file);
|
||||||
Q_INVOKABLE QJSValue getObjects(double ra, double dec, double distance);
|
Q_INVOKABLE QJSValue getObjects(double ra, double dec, double distance);
|
||||||
|
Q_INVOKABLE QJSValue getObjects(const QJSValue &bounds);
|
||||||
Q_INVOKABLE void setMaxThread(int maxthread);
|
Q_INVOKABLE void setMaxThread(int maxthread);
|
||||||
Q_INVOKABLE void sync();
|
Q_INVOKABLE void sync();
|
||||||
Q_INVOKABLE QJSValue getString(const QString &label = QString(), const QString &text = QString()) const;
|
Q_INVOKABLE QJSValue getString(const QString &label = QString(), const QString &text = QString()) const;
|
||||||
@@ -97,6 +98,7 @@ class File : public QObject
|
|||||||
bool _fitsKeywordsLoaded = false;
|
bool _fitsKeywordsLoaded = false;
|
||||||
QStringList _fitsKeywords;
|
QStringList _fitsKeywords;
|
||||||
QMultiHash<QString, FITSRecord> _fitsRecords;
|
QMultiHash<QString, FITSRecord> _fitsRecords;
|
||||||
|
std::shared_ptr<WCSDataT> _wcs;
|
||||||
void loadFitsKeywords();
|
void loadFitsKeywords();
|
||||||
bool mkpath(const QString &path) const;
|
bool mkpath(const QString &path) const;
|
||||||
QJSValue _stats;
|
QJSValue _stats;
|
||||||
@@ -125,6 +127,7 @@ public:
|
|||||||
Q_INVOKABLE File* convert(const QString &outpath, const QString &format, const QVariantMap ¶ms = QVariantMap());
|
Q_INVOKABLE File* convert(const QString &outpath, const QString &format, const QVariantMap ¶ms = QVariantMap());
|
||||||
Q_INVOKABLE File* convertAsync(const QString &outpath, const QString &format, const QVariantMap ¶ms = QVariantMap());
|
Q_INVOKABLE File* convertAsync(const QString &outpath, const QString &format, const QVariantMap ¶ms = QVariantMap());
|
||||||
Q_INVOKABLE QJSValue stats();
|
Q_INVOKABLE QJSValue stats();
|
||||||
|
Q_INVOKABLE QJSValue calculatedBounds();
|
||||||
#ifdef PLATESOLVER
|
#ifdef PLATESOLVER
|
||||||
Q_INVOKABLE QJSValue solve(bool updateHeader = false);
|
Q_INVOKABLE QJSValue solve(bool updateHeader = false);
|
||||||
Q_INVOKABLE QJSValue extractStars(bool hfr);
|
Q_INVOKABLE QJSValue extractStars(bool hfr);
|
||||||
@@ -89,6 +89,11 @@ StretchToolbar::StretchToolbar(QWidget *parent) : QToolBar(tr("Stretch toolbar")
|
|||||||
|
|
||||||
m_autoStretchOnLoad = addAction(QIcon(":/nuke_a.png"), tr("Apply auto stretch on load"));
|
m_autoStretchOnLoad = addAction(QIcon(":/nuke_a.png"), tr("Apply auto stretch on load"));
|
||||||
m_autoStretchOnLoad->setCheckable(true);
|
m_autoStretchOnLoad->setCheckable(true);
|
||||||
|
|
||||||
|
QAction *showGridButton = addAction(QIcon(":/grid.svg"), tr("Draw equatorial grid"));
|
||||||
|
showGridButton->setCheckable(true);
|
||||||
|
connect(showGridButton, &QAction::toggled, this, &StretchToolbar::drawGrid);
|
||||||
|
|
||||||
QSettings settings;
|
QSettings settings;
|
||||||
m_autoStretchOnLoad->setChecked(settings.value("stretchtoolbar/autostretch", false).toBool());
|
m_autoStretchOnLoad->setChecked(settings.value("stretchtoolbar/autostretch", false).toBool());
|
||||||
}
|
}
|
||||||
@@ -33,6 +33,7 @@ signals:
|
|||||||
void invert(bool enable);
|
void invert(bool enable);
|
||||||
void superPixel(bool enable);
|
void superPixel(bool enable);
|
||||||
void falseColor(bool enable);
|
void falseColor(bool enable);
|
||||||
|
void drawGrid(bool enable);
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif // STRETCHTOOLBAR_H
|
#endif // STRETCHTOOLBAR_H
|
||||||
@@ -6,9 +6,9 @@ if(BUILD_THUMBNAILER)
|
|||||||
Dll.cpp
|
Dll.cpp
|
||||||
loadimage.cpp
|
loadimage.cpp
|
||||||
TenmonThumbnailProvider.cpp
|
TenmonThumbnailProvider.cpp
|
||||||
../rawimage.h
|
../src/rawimage.h
|
||||||
../rawimage.cpp
|
../src/rawimage.cpp
|
||||||
../rawimage_sse.cpp)
|
../src/rawimage_sse.cpp)
|
||||||
set_target_properties(tenmonthumbnailer PROPERTIES PREFIX "")
|
set_target_properties(tenmonthumbnailer PROPERTIES PREFIX "")
|
||||||
|
|
||||||
target_compile_definitions(tenmonthumbnailer PRIVATE NO_QT)
|
target_compile_definitions(tenmonthumbnailer PRIVATE NO_QT)
|
||||||
@@ -19,8 +19,8 @@ if(BUILD_THUMBNAILER)
|
|||||||
qt_add_executable(tenmonthumbnailer
|
qt_add_executable(tenmonthumbnailer
|
||||||
main.cpp
|
main.cpp
|
||||||
loadimage.cpp
|
loadimage.cpp
|
||||||
../rawimage.cpp
|
../src/rawimage.cpp
|
||||||
../rawimage_sse.cpp)
|
../src/rawimage_sse.cpp)
|
||||||
|
|
||||||
target_link_libraries(tenmonthumbnailer PRIVATE ${FITS_LIB} XISF)
|
target_link_libraries(tenmonthumbnailer PRIVATE ${FITS_LIB} XISF)
|
||||||
|
|
||||||
|
|||||||
@@ -2,7 +2,7 @@
|
|||||||
#include <thumbcache.h> // For IThumbnailProvider.
|
#include <thumbcache.h> // For IThumbnailProvider.
|
||||||
#include <new>
|
#include <new>
|
||||||
#include "libxisf.h"
|
#include "libxisf.h"
|
||||||
#include "../rawimage.h"
|
#include "../src/rawimage.h"
|
||||||
|
|
||||||
bool loadXISF(const LibXISF::ByteArray &data, std::shared_ptr<RawImage> &rawImage);
|
bool loadXISF(const LibXISF::ByteArray &data, std::shared_ptr<RawImage> &rawImage);
|
||||||
bool loadFITS(const LibXISF::ByteArray &data, std::shared_ptr<RawImage> &rawImage);
|
bool loadFITS(const LibXISF::ByteArray &data, std::shared_ptr<RawImage> &rawImage);
|
||||||
|
|||||||
@@ -1,7 +1,6 @@
|
|||||||
#include "genthumbnail.h"
|
#include "genthumbnail.h"
|
||||||
#include "../rawimage.h"
|
#include "../src/rawimage.h"
|
||||||
#include "../loadimage.h"
|
#include "../src/loadimage.h"
|
||||||
|
|
||||||
|
|
||||||
int generateThumbnail(const QString &input, const QString &output, uint32_t size)
|
int generateThumbnail(const QString &input, const QString &output, uint32_t size)
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
#include "libxisf.h"
|
#include "libxisf.h"
|
||||||
#include "../rawimage.h"
|
#include "../src/rawimage.h"
|
||||||
#ifdef WIN32
|
#ifdef WIN32
|
||||||
#include <windows.h>
|
#include <windows.h>
|
||||||
#endif
|
#endif
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
#include <vector>
|
#include <vector>
|
||||||
#include <string>
|
#include <string>
|
||||||
#include <iostream>
|
#include <iostream>
|
||||||
#include "../rawimage.h"
|
#include "../src/rawimage.h"
|
||||||
#define STB_IMAGE_WRITE_IMPLEMENTATION
|
#define STB_IMAGE_WRITE_IMPLEMENTATION
|
||||||
#include "stb_image_write.h"
|
#include "stb_image_write.h"
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user