GrabBag/AppUtils/AppConfig/Inc/ConfigXmlUtils.h

83 lines
2.8 KiB
C
Raw Normal View History

#ifndef CONFIGXMLUTILS_H
#define CONFIGXMLUTILS_H
#include <vector>
#include <string>
#include "VrCommonConfig.h"
#include "VrHandEyeCalibConfig.h"
#include "tinyxml2.h"
/**
* @brief 公共配置 XML 读写工具
*
* 提供手眼标定、平面校准、调试参数、串口配置、相机列表等
* 通用配置段的 XML 加载和保存功能,供各应用的 VrConfig 复用。
*/
namespace ConfigXmlUtils
{
// ============ 手眼标定矩阵 ============
/**
* @brief 从 XML 根节点加载手眼标定矩阵列表
*
* 向后兼容策略:
* 1. 优先找 <HandEyeCalibMatrixs> 容器节点
* 2. 其次找旧名 <HandEyeCalibMatrixList>
* 3. 最后找单个 <HandEyeCalibMatrix>(作为 cameraIndex=1)
*
* @param root XML 根节点
* @param list 输出的矩阵列表
* @param defaultEulerOrder 当 XML 中无 eulerOrder 属性时使用的默认值
* @param defaultCalibType 当 XML 中无 calibType 属性时使用的默认值(0=眼在手外,1=眼在手上)
*/
void LoadHandEyeCalibMatrixs(tinyxml2::XMLElement* root,
std::vector<VrHandEyeCalibMatrix>& list,
int defaultEulerOrder = 11,
int defaultCalibType = 0);
/**
* @brief 保存手眼标定矩阵列表到 XML 根节点(<HandEyeCalibMatrixs> 格式)
*/
void SaveHandEyeCalibMatrixs(tinyxml2::XMLDocument& doc,
tinyxml2::XMLElement* root,
const std::vector<VrHandEyeCalibMatrix>& list);
// ============ 平面校准参数 ============
/**
* @brief 从 <PlaneCalibParams> 节点加载多相机平面校准参数
* @param parent 包含 <PlaneCalibParams> 的父节点(通常是 AlgorithmParams)
*/
void LoadPlaneCalibParams(tinyxml2::XMLElement* parent,
VrPlaneCalibParam& param);
/**
* @brief 保存多相机平面校准参数到 <PlaneCalibParams> 节点
*/
void SavePlaneCalibParams(tinyxml2::XMLDocument& doc,
tinyxml2::XMLElement* parent,
const VrPlaneCalibParam& param);
// ============ 调试参数 ============
void LoadDebugParam(tinyxml2::XMLElement* root, VrDebugParam& param);
void SaveDebugParam(tinyxml2::XMLDocument& doc, tinyxml2::XMLElement* root,
const VrDebugParam& param);
// ============ 串口配置 ============
void LoadSerialConfig(tinyxml2::XMLElement* root, SerialConfig& config);
void SaveSerialConfig(tinyxml2::XMLDocument& doc, tinyxml2::XMLElement* root,
const SerialConfig& config);
// ============ 相机列表 ============
void LoadCameraList(tinyxml2::XMLElement* root, std::vector<DeviceInfo>& list);
void SaveCameraList(tinyxml2::XMLDocument& doc, tinyxml2::XMLElement* root,
const std::vector<DeviceInfo>& list);
} // namespace ConfigXmlUtils
#endif // CONFIGXMLUTILS_H