You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
nmWTAI-Platform/Include/nmNum/nmSubWxs/nmWellParameterCatalog.h

77 lines
3.0 KiB
C++

#pragma once
#include "nmSubWxs_global.h"
#include "nmDefines.h"
#include "nmParameterField.h"
#include <QList>
#include <QString>
class nmDataAttribute;
class nmDataWellBase;
/** @brief 新版编辑井窗口使用的稳定参数标识。 */
enum nmWellParameterId
{
NM_WELL_PARAMETER_X = 0, ///< 井口X坐标。
NM_WELL_PARAMETER_Y, ///< 井口Y坐标。
NM_WELL_PARAMETER_RADIUS, ///< 井筒半径。
NM_WELL_PARAMETER_STORAGE, ///< 井筒储集系数。
NM_WELL_PARAMETER_BOTTOMHOLE_MD, ///< 井底测量深度。
NM_WELL_PARAMETER_LENGTH, ///< 井身长度。
NM_WELL_PARAMETER_PERFORATION_NAME, ///< 射孔段名称。
NM_WELL_PARAMETER_PERFORATION_MD_START, ///< 射孔起始测量深度。
NM_WELL_PARAMETER_PERFORATION_MD_END, ///< 射孔结束测量深度。
NM_WELL_PARAMETER_PERFORATION_SKIN, ///< 射孔段表皮系数。
NM_WELL_PARAMETER_DRAIN_ANGLE, ///< 水平井排水角度。
NM_WELL_PARAMETER_FRACTURE_COUNT, ///< 水平井裂缝数量。
NM_WELL_PARAMETER_FRACTURE_HALF_LENGTH, ///< 裂缝半长。
NM_WELL_PARAMETER_FRACTURE_ANGLE, ///< 裂缝角度。
NM_WELL_PARAMETER_FRACTURE_HEIGHT, ///< 裂缝高度。
NM_WELL_PARAMETER_FRACTURE_MIDPOINT_HEIGHT, ///< 裂缝中点高度。
NM_WELL_PARAMETER_FRACTURE_WIDTH, ///< 裂缝宽度。
NM_WELL_PARAMETER_FRACTURE_CONDUCTIVITY ///< 裂缝导流能力。
};
/** @brief 编辑井左侧单列参数分组描述。 */
struct NM_SUB_WXS_EXPORT nmWellParameterGroupInfo
{
/** @brief 创建默认的普通参数分组描述。 */
nmWellParameterGroupInfo();
QString m_sTitle; ///< 当前语言下的分组标题。
QList<nmParameterFieldInfo> m_listFields; ///< 分组字段。
bool m_bPerforationGroup; ///< 是否创建射孔选择器。
};
/**
* @brief 编辑井参数规范目录。
* @note 字段顺序、XML ID和数据属性映射集中在此维护。
*/
class NM_SUB_WXS_EXPORT nmWellParameterCatalog
{
public:
/** @brief 返回指定井型的可见参数分组。 */
static QList<nmWellParameterGroupInfo> createGroups(
NM_WELL_MODEL eWellType);
/** @brief 将稳定参数标识转换为字符串ID。 */
static QString parameterId(nmWellParameterId eParameterId);
/**
* @brief 返回字段对应的数据属性,不转移所有权。
* @note 字段不适用于当前井型或射孔索引无效时返回nullptr。
*/
static nmDataAttribute* attribute(
nmDataWellBase* pWell,
const QString& sParameterId,
int nPerforationIndex);
/** @brief 判断字段是否属于当前射孔段。 */
static bool isPerforationParameter(const QString& sParameterId);
private:
/** @brief 规范目录仅提供静态方法,不允许创建实例。 */
nmWellParameterCatalog();
};