Add method to modify XISF Property
This commit is contained in:
+28
-1
@@ -1034,11 +1034,11 @@ public:
|
|||||||
void save(std::ostream &io);
|
void save(std::ostream &io);
|
||||||
void writeImage(const Image &image);
|
void writeImage(const Image &image);
|
||||||
static void writeFITSKeyword(pugi::xml_node &node, const FITSKeyword &keyword);
|
static void writeFITSKeyword(pugi::xml_node &node, const FITSKeyword &keyword);
|
||||||
|
static void writePropertyElement(pugi::xml_node &node, const Property &property);
|
||||||
private:
|
private:
|
||||||
void writeHeader();
|
void writeHeader();
|
||||||
void writeImageElement(pugi::xml_node &node, const Image &image);
|
void writeImageElement(pugi::xml_node &node, const Image &image);
|
||||||
void writeDataBlockAttributes(pugi::xml_node &image_node, const DataBlock &dataBlock);
|
void writeDataBlockAttributes(pugi::xml_node &image_node, const DataBlock &dataBlock);
|
||||||
void writePropertyElement(pugi::xml_node &node, const Property &property);
|
|
||||||
void writeMetadata(pugi::xml_node &node);
|
void writeMetadata(pugi::xml_node &node);
|
||||||
void updateImageAttachmentPos(pugi::xml_node &root, size_t offset);
|
void updateImageAttachmentPos(pugi::xml_node &root, size_t offset);
|
||||||
ByteArray _xisfHeader;
|
ByteArray _xisfHeader;
|
||||||
@@ -1371,6 +1371,7 @@ public:
|
|||||||
void addFITSKeyword(uint32_t image, const FITSKeyword &keyword);
|
void addFITSKeyword(uint32_t image, const FITSKeyword &keyword);
|
||||||
void updateFITSKeyword(uint32_t image, const FITSKeyword &keyword, bool add);
|
void updateFITSKeyword(uint32_t image, const FITSKeyword &keyword, bool add);
|
||||||
void removeFITSKeyword(uint32_t image, const String &name);
|
void removeFITSKeyword(uint32_t image, const String &name);
|
||||||
|
void updateProperty(uint32_t image, const Property &property);
|
||||||
private:
|
private:
|
||||||
void readXISFHeader();
|
void readXISFHeader();
|
||||||
void parseAttachmentPos(pugi::xml_node &root);
|
void parseAttachmentPos(pugi::xml_node &root);
|
||||||
@@ -1551,6 +1552,27 @@ void XISFModifyPrivate::removeFITSKeyword(uint32_t image, const String &name)
|
|||||||
imageNode.remove_child(keywordNode);
|
imageNode.remove_child(keywordNode);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void XISFModifyPrivate::updateProperty(uint32_t image, const Property &property)
|
||||||
|
{
|
||||||
|
if(!_root)
|
||||||
|
throw Error("No input file opened");
|
||||||
|
|
||||||
|
pugi::xpath_node_set images = _root.select_nodes("//Image");
|
||||||
|
|
||||||
|
if(image >= images.size())
|
||||||
|
throw Error("Out of bounds");
|
||||||
|
|
||||||
|
pugi::xpath_variable_set variables;
|
||||||
|
variables.set("id", property.id.c_str());
|
||||||
|
pugi::xml_node imageNode = images[image].node();
|
||||||
|
pugi::xml_node propertyNode = imageNode.select_node("Property[@id=string($id)]", &variables).node();
|
||||||
|
|
||||||
|
if(propertyNode)
|
||||||
|
imageNode.remove_child(propertyNode);
|
||||||
|
|
||||||
|
XISFWriterPrivate::writePropertyElement(imageNode, property);
|
||||||
|
}
|
||||||
|
|
||||||
void XISFModifyPrivate::readXISFHeader()
|
void XISFModifyPrivate::readXISFHeader()
|
||||||
{
|
{
|
||||||
char signature[8];
|
char signature[8];
|
||||||
@@ -1669,6 +1691,11 @@ void XISFModify::removeFITSKeyword(uint32_t image, const String &name)
|
|||||||
p->removeFITSKeyword(image, name);
|
p->removeFITSKeyword(image, name);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void XISFModify::updateProperty(uint32_t image, const Property &property)
|
||||||
|
{
|
||||||
|
p->updateProperty(image, property);
|
||||||
|
}
|
||||||
|
|
||||||
#define STRING_ENUM(map, map2, c, e) { map.insert({#e, c::e}); map2.insert({c::e, #e}); }
|
#define STRING_ENUM(map, map2, c, e) { map.insert({#e, c::e}); map2.insert({c::e, #e}); }
|
||||||
|
|
||||||
struct Init
|
struct Init
|
||||||
|
|||||||
@@ -443,6 +443,12 @@ public:
|
|||||||
* @param name of keyword that will be removed
|
* @param name of keyword that will be removed
|
||||||
*/
|
*/
|
||||||
void removeFITSKeyword(uint32_t image, const String &name);
|
void removeFITSKeyword(uint32_t image, const String &name);
|
||||||
|
/**
|
||||||
|
* @brief updateProperty add new or update existing XISF Property
|
||||||
|
* @param image index of image to update
|
||||||
|
* @param property new value of property
|
||||||
|
*/
|
||||||
|
void updateProperty(uint32_t image, const Property &property);
|
||||||
private:
|
private:
|
||||||
XISFModifyPrivate *p;
|
XISFModifyPrivate *p;
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -17,7 +17,6 @@
|
|||||||
************************************************************************/
|
************************************************************************/
|
||||||
|
|
||||||
#include <charconv>
|
#include <charconv>
|
||||||
#include <type_traits>
|
|
||||||
#include <map>
|
#include <map>
|
||||||
#include <regex>
|
#include <regex>
|
||||||
#include <iomanip>
|
#include <iomanip>
|
||||||
@@ -403,7 +402,6 @@ Variant variantFromString(Variant::Type type, const String &str)
|
|||||||
|
|
||||||
Variant::Type Variant::type() const
|
Variant::Type Variant::type() const
|
||||||
{
|
{
|
||||||
int idx = _value.index();
|
|
||||||
return (Variant::Type)_value.index();
|
return (Variant::Type)_value.index();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user