Add image index to FITSRecordModify
This commit is contained in:
+32
-7
@@ -625,16 +625,22 @@ bool File::modifyFITSRecords(const FITSRecordModify *modify)
|
||||
int naxis;
|
||||
long naxes[3] = {0};
|
||||
int type = -1;
|
||||
std::vector<int> imageIdxs;
|
||||
for(int i=1; i <= num; i++)
|
||||
{
|
||||
fits_movabs_hdu(file, i, IMAGE_HDU, &status);
|
||||
fits_get_hdu_type(file, &type, &status);
|
||||
fits_get_img_param(file, 3, &imgtype, &naxis, naxes, &status);
|
||||
if(type == IMAGE_HDU && naxis >= 2 && naxis <= 3 && status == 0)
|
||||
break;
|
||||
if(i == num)return false;
|
||||
if(type == IMAGE_HDU)
|
||||
{
|
||||
fits_get_img_param(file, 3, &imgtype, &naxis, naxes, &status);
|
||||
if(naxis >= 2 && naxis <= 3)imageIdxs.push_back(i);
|
||||
}
|
||||
}
|
||||
|
||||
if(modify->_imageIdx >= imageIdxs.size())return false;
|
||||
fits_movabs_hdu(file, imageIdxs[modify->_imageIdx], &type, &status);
|
||||
fits_get_img_param(file, 3, &imgtype, &naxis, naxes, &status);
|
||||
|
||||
for(auto &remove : modify->_remove)
|
||||
{
|
||||
int status = 0;//we ignore errors from here
|
||||
@@ -742,13 +748,16 @@ bool File::modifyFITSRecords(const FITSRecordModify *modify)
|
||||
qDebug() << "modify" << in << out;
|
||||
|
||||
for(auto &remove : modify->_remove)
|
||||
modifyXISF.removeFITSKeyword(0, remove.toStdString());
|
||||
modifyXISF.removeFITSKeyword(modify->_imageIdx, remove.toStdString());
|
||||
|
||||
for(auto &record : modify->_update)
|
||||
modifyXISF.updateFITSKeyword(0, {record.key.toStdString(), record.value.toString().toStdString(), record.comment.toStdString()}, true);
|
||||
modifyXISF.updateFITSKeyword(modify->_imageIdx, {record.key.toStdString(), record.value.toString().toStdString(), record.comment.toStdString()}, true);
|
||||
|
||||
for(auto &record : modify->_add)
|
||||
modifyXISF.addFITSKeyword(0, {record.key.toStdString(), record.value.toString().toStdString(), record.comment.toStdString()});
|
||||
modifyXISF.addFITSKeyword(modify->_imageIdx, {record.key.toStdString(), record.value.toString().toStdString(), record.comment.toStdString()});
|
||||
|
||||
for(auto &property : modify->_property)
|
||||
modifyXISF.updateProperty(modify->_imageIdx, property);
|
||||
|
||||
modifyXISF.save(out.toLocal8Bit().toStdString());
|
||||
modifyXISF.close();
|
||||
@@ -757,6 +766,7 @@ bool File::modifyFITSRecords(const FITSRecordModify *modify)
|
||||
}
|
||||
catch(std::filesystem::filesystem_error &err)
|
||||
{
|
||||
if(_engine)_engine->newMessage("Failed to modify file " + _path + " " + err.what(), true);
|
||||
return false;
|
||||
}
|
||||
catch(LibXISF::Error &err)
|
||||
@@ -926,6 +936,21 @@ void FITSRecordModify::addKeyword(const QString &key, const QVariant &value, con
|
||||
_update.append({key.toLatin1(), value, comment.toLatin1()});
|
||||
}
|
||||
|
||||
void FITSRecordModify::updateProperty(const QString &id, const LibXISF::Variant &value)
|
||||
{
|
||||
_property.append(LibXISF::Property(id.toStdString(), value));
|
||||
}
|
||||
|
||||
uint32_t FITSRecordModify::imageIndex() const
|
||||
{
|
||||
return _imageIdx;
|
||||
}
|
||||
|
||||
void FITSRecordModify::setImageIndex(uint32_t idx)
|
||||
{
|
||||
_imageIdx = idx;
|
||||
}
|
||||
|
||||
bool TextFile::open(const QString &path, const QString &mode)
|
||||
{
|
||||
_fr.setFileName(path);
|
||||
|
||||
@@ -9,6 +9,7 @@
|
||||
#include <QSemaphore>
|
||||
#include "database.h"
|
||||
#include "imageinfodata.h"
|
||||
#include "libxisf.h"
|
||||
|
||||
class BatchProcessing;
|
||||
class Solver;
|
||||
@@ -140,6 +141,8 @@ class FITSRecordModify : public QObject
|
||||
QStringList _remove;
|
||||
QVector<FITSRecord> _update;
|
||||
QVector<FITSRecord> _add;
|
||||
QVector<LibXISF::Property> _property;
|
||||
uint32_t _imageIdx = 0;
|
||||
|
||||
friend class File;
|
||||
public:
|
||||
@@ -147,6 +150,10 @@ public:
|
||||
Q_INVOKABLE void removeKeyword(const QString &key);
|
||||
Q_INVOKABLE void updateKeyword(const QString &key, const QVariant &value, const QString &comment = QString());
|
||||
Q_INVOKABLE void addKeyword(const QString &key, const QVariant &value, const QString &comment = QString());
|
||||
Q_PROPERTY(uint32_t imageIndex READ imageIndex WRITE setImageIndex);
|
||||
void updateProperty(const QString &id, const LibXISF::Variant &value);
|
||||
uint32_t imageIndex() const;
|
||||
void setImageIndex(uint32_t idx);
|
||||
};
|
||||
|
||||
class TextFile : public QObject
|
||||
|
||||
Reference in New Issue
Block a user