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);
|
||||
|
||||
Reference in New Issue
Block a user