5bfcbcb8e9
Remaining P3 item: - tangent_pull: maintain G1 tangency when pulling faces System infrastructure: - Unified ErrorCode (0-7xxx): ErrorInfo with Chinese messages - Version system: VDE_VERSION_MAJOR/MINOR/PATCH macros, vde_version() → VersionInfo, vde_version_string() - License management: LicenseTier (Community/Professional/Enterprise), LicenseKey (VDE-XXXX-XXXX, Base32 + HMAC-SHA256 signature), LicenseManager singleton with trial support - Convenience header: vde/vde_version.h Tests: 43 total (26 license + 17 version)
290 lines
13 KiB
C++
290 lines
13 KiB
C++
#pragma once
|
||
/**
|
||
* @file error_codes.h
|
||
* @brief ViewDesignEngine 统一错误码体系
|
||
*
|
||
* 所有模块的错误码集中定义在此,采用分段编码:
|
||
* 0 — SUCCESS
|
||
* 1xxx — foundation(格式IO错误)
|
||
* 2xxx — core(几何计算错误)
|
||
* 3xxx — curves(曲线曲面错误)
|
||
* 4xxx — mesh(网格错误)
|
||
* 5xxx — brep(B-Rep错误)
|
||
* 6xxx — sdf(SDF错误)
|
||
* 7xxx — capi(C API错误)
|
||
*
|
||
* @ingroup foundation
|
||
*/
|
||
|
||
#include <cstdint>
|
||
#include <string>
|
||
#include <string_view>
|
||
|
||
namespace vde::foundation {
|
||
|
||
// ═══════════════════════════════════════════════════════════════
|
||
// ErrorCode 枚举 — 所有模块统一
|
||
// ═══════════════════════════════════════════════════════════════
|
||
|
||
enum class ErrorCode : int32_t {
|
||
// ── 成功 ───────────────────────────────────────────
|
||
SUCCESS = 0,
|
||
|
||
// ── 1xxx:foundation 格式IO错误 ──────────────────────
|
||
// 通用文件IO
|
||
ERR_FILE_NOT_FOUND = 1001, // 文件未找到
|
||
ERR_FILE_OPEN_FAILED = 1002, // 文件打开失败
|
||
ERR_FILE_WRITE_FAILED = 1003, // 文件写入失败
|
||
ERR_FILE_READ_FAILED = 1004, // 文件读取失败
|
||
ERR_FILE_PERMISSION_DENIED = 1005, // 文件权限不足
|
||
ERR_FILE_TOO_LARGE = 1006, // 文件过大
|
||
ERR_FILE_EMPTY = 1007, // 文件为空
|
||
ERR_FILE_ALREADY_EXISTS = 1008, // 文件已存在
|
||
|
||
// 格式解析
|
||
ERR_FORMAT_INVALID = 1101, // 格式无效
|
||
ERR_FORMAT_UNSUPPORTED = 1102, // 格式不支持
|
||
ERR_FORMAT_VERSION_MISMATCH = 1103, // 格式版本不匹配
|
||
ERR_FORMAT_CORRUPTED = 1104, // 格式数据损坏
|
||
ERR_FORMAT_TRUNCATED = 1105, // 格式数据截断
|
||
ERR_FORMAT_MAGIC_MISMATCH = 1106, // 格式魔术字不匹配
|
||
|
||
// VDE 原生格式
|
||
ERR_VDE_HEADER_INVALID = 1201, // VDE文件头无效
|
||
ERR_VDE_SECTION_MISSING = 1202, // VDE段缺失
|
||
ERR_VDE_SECTION_CORRUPTED = 1203, // VDE段损坏
|
||
ERR_VDE_TOPOLOGY_INVALID = 1204, // VDE拓扑数据无效
|
||
ERR_VDE_GEOMETRY_INVALID = 1205, // VDE几何数据无效
|
||
ERR_VDE_SERIALIZE_FAILED = 1206, // VDE序列化失败
|
||
ERR_VDE_DESERIALIZE_FAILED = 1207, // VDE反序列化失败
|
||
|
||
// 工业格式 IO
|
||
ERR_STEP_PARSE = 1301, // STEP解析错误
|
||
ERR_STEP_SCHEMA_MISMATCH = 1302, // STEP模式不匹配
|
||
ERR_STEP_ENTITY_UNKNOWN = 1303, // STEP未知实体
|
||
ERR_STEP_TOPOLOGY = 1304, // STEP拓扑构建失败
|
||
ERR_STEP_GEOMETRY = 1305, // STEP几何构建失败
|
||
ERR_IGES_PARSE = 1311, // IGES解析错误
|
||
ERR_IGES_ENTITY_UNSUPPORTED = 1312, // IGES不支持的实体
|
||
ERR_OBJ_PARSE = 1321, // OBJ解析错误
|
||
ERR_STL_PARSE = 1331, // STL解析错误
|
||
ERR_STL_BINARY_INVALID = 1332, // STL二进制格式无效
|
||
ERR_PLY_PARSE = 1341, // PLY解析错误
|
||
ERR_GLTF_PARSE = 1351, // glTF解析错误
|
||
ERR_3MF_PARSE = 1361, // 3MF解析错误
|
||
ERR_DXF_PARSE = 1371, // DXF解析错误
|
||
|
||
// ── 2xxx:core 几何计算错误 ─────────────────────────
|
||
ERR_DEGENERATE_GEOMETRY = 2001, // 退化几何
|
||
ERR_NUMERIC_INSTABILITY = 2002, // 数值不稳定
|
||
ERR_DIVISION_BY_ZERO = 2003, // 除零错误
|
||
ERR_SINGULAR_MATRIX = 2004, // 奇异矩阵
|
||
ERR_CONVERGENCE_FAILURE = 2005, // 收敛失败
|
||
ERR_OUT_OF_MEMORY = 2006, // 内存不足
|
||
ERR_OVERFLOW = 2007, // 数值溢出
|
||
ERR_PRECISION_LOSS = 2008, // 精度丢失
|
||
ERR_BUFFER_TOO_SMALL = 2009, // 缓冲区太小
|
||
ERR_INDEX_OUT_OF_BOUNDS = 2010, // 索引越界
|
||
|
||
// 几何运算
|
||
ERR_INTERSECTION_FAILED = 2101, // 求交失败
|
||
ERR_PROJECTION_FAILED = 2102, // 投影失败
|
||
ERR_DISTANCE_COMPUTE_FAILED = 2103, // 距离计算失败
|
||
ERR_CONVEX_HULL_FAILED = 2104, // 凸包计算失败
|
||
ERR_VORONOI_FAILED = 2105, // Voronoi计算失败
|
||
ERR_TRIANGULATION_FAILED = 2106, // 三角剖分失败
|
||
ERR_SIMPLIFY_FAILED = 2107, // 简化失败
|
||
|
||
// CAM
|
||
ERR_CAM_TOOLPATH_GENERATION = 2201, // 刀路生成失败
|
||
ERR_CAM_COLLISION_DETECTED = 2202, // 刀具碰撞检测到
|
||
ERR_CAM_INVALID_STRATEGY = 2203, // 无效的加工策略
|
||
ERR_CAM_5AXIS_LIMIT = 2204, // 五轴极限超限
|
||
ERR_CAM_OPTIMIZATION_FAILED = 2205, // CAM优化失败
|
||
|
||
// 性能/并发
|
||
ERR_THREAD_CREATE_FAILED = 2301, // 线程创建失败
|
||
ERR_LOCK_TIMEOUT = 2302, // 锁超时
|
||
ERR_TASK_CANCELLED = 2303, // 任务已取消
|
||
ERR_TRANSACTION_CONFLICT = 2304, // 事务冲突
|
||
ERR_TRANSACTION_ROLLBACK = 2305, // 事务回滚
|
||
|
||
// ── 3xxx:curves 曲线曲面错误 ───────────────────────
|
||
ERR_CURVE_DEGREE_INVALID = 3001, // 曲线阶数无效
|
||
ERR_CURVE_KNOT_INVALID = 3002, // 节点向量无效
|
||
ERR_CURVE_CP_COUNT_MISMATCH = 3003, // 控制点数量不匹配
|
||
ERR_CURVE_EVALUATION_FAILED = 3004, // 曲线求值失败
|
||
ERR_CURVE_DERIVATIVE_FAILED = 3005, // 曲线求导失败
|
||
ERR_CURVE_PARAM_OUT_OF_RANGE= 3006, // 参数超出范围
|
||
ERR_CURVE_SELF_INTERSECT = 3007, // 曲线自交
|
||
ERR_CURVE_DISCONTINUITY = 3008, // 曲线不连续
|
||
|
||
// 曲面
|
||
ERR_SURFACE_INVALID = 3101, // 曲面无效
|
||
ERR_SURFACE_PARAM_RANGE = 3102, // 曲面参数范围无效
|
||
ERR_SURFACE_DEGENERATE = 3103, // 退化曲面
|
||
ERR_SURFACE_SINGULARITY = 3104, // 曲面奇点
|
||
ERR_SURFACE_INTERSECTION = 3105, // 曲面求交失败
|
||
ERR_SURFACE_CONTINUITY = 3106, // 曲面连续性不满足
|
||
ERR_SURFACE_TRIMMING = 3107, // 曲面裁剪失败
|
||
ERR_SURFACE_EXTENSION = 3108, // 曲面延伸失败
|
||
ERR_SURFACE_OFFSET = 3109, // 曲面偏置失败
|
||
ERR_SURFACE_FAIRING = 3110, // 曲面光顺失败
|
||
|
||
// IGA
|
||
ERR_IGA_MESH_INVALID = 3201, // IGA网格无效
|
||
ERR_IGA_REFINEMENT_FAILED = 3202, // IGA细化失败
|
||
|
||
// ── 4xxx:mesh 网格错误 ─────────────────────────────
|
||
ERR_MESH_EMPTY = 4001, // 网格为空
|
||
ERR_MESH_NON_MANIFOLD = 4002, // 非流形网格
|
||
ERR_MESH_DEGENERATE_FACE = 4003, // 退化面
|
||
ERR_MESH_SELF_INTERSECTION = 4004, // 网格自交
|
||
ERR_MESH_INVERTED_NORMAL = 4005, // 法线翻转
|
||
ERR_MESH_HOLE_DETECTED = 4006, // 检测到孔洞
|
||
ERR_MESH_DISCONNECTED = 4007, // 网格不连通
|
||
|
||
// 网格操作
|
||
ERR_MESH_BOOLEAN_FAILED = 4101, // 网格布尔失败
|
||
ERR_MESH_SIMPLIFY_FAILED = 4102, // 网格简化失败
|
||
ERR_MESH_SMOOTH_FAILED = 4103, // 网格平滑失败
|
||
ERR_MESH_REPAIR_FAILED = 4104, // 网格修复失败
|
||
ERR_MESH_PARAMETERIZE_FAILED= 4105, // 网格参数化失败
|
||
ERR_MESH_REMESH_FAILED = 4106, // 网格重划分失败
|
||
ERR_MESH_SPLIT_FAILED = 4107, // 网格分割失败
|
||
|
||
// 高级网格
|
||
ERR_FEA_MESH_QUALITY = 4201, // FEA网格质量不足
|
||
ERR_FEA_MESH_GENERATION = 4202, // FEA网格生成失败
|
||
ERR_MARCHING_CUBES_FAILED = 4203, // Marching Cubes失败
|
||
ERR_POINT_CLOUD_EMPTY = 4204, // 点云为空
|
||
ERR_POINT_CLOUD_NOISE = 4205, // 点云噪声过大
|
||
|
||
// ── 5xxx:brep B-Rep错误 ───────────────────────────
|
||
ERR_BREP_TOPOLOGY_INVALID = 5001, // B-Rep拓扑无效
|
||
ERR_BREP_GEOMETRY_MISMATCH = 5002, // B-Rep几何不匹配
|
||
ERR_BREP_SHELL_NOT_CLOSED = 5003, // 壳不封闭
|
||
ERR_BREP_ORIENTATION = 5004, // 方向不一致
|
||
ERR_BREP_SEWING_FAILED = 5005, // 缝合失败
|
||
ERR_BREP_HEALING_FAILED = 5006, // 修复失败
|
||
ERR_BREP_VALIDATION_FAILED = 5007, // 验证失败
|
||
|
||
// 布尔操作
|
||
ERR_BOOLEAN_OPERATION_FAILED= 5101, // 布尔操作失败
|
||
ERR_BOOLEAN_INTERSECT_FAILED= 5102, // 布尔求交失败
|
||
ERR_BOOLEAN_SUBTRACT_FAILED = 5103, // 布尔求差失败
|
||
ERR_BOOLEAN_UNION_FAILED = 5104, // 布尔求并失败
|
||
ERR_BOOLEAN_DEGENERATE = 5105, // 布尔操作产生退化
|
||
ERR_BOOLEAN_FALLBACK_USED = 5106, // 布尔操作回退到备用方法
|
||
|
||
// 特征建模
|
||
ERR_FEATURE_CREATION_FAILED = 5201, // 特征创建失败
|
||
ERR_FEATURE_TREE_INVALID = 5202, // 特征树无效
|
||
ERR_FEATURE_UPDATE_FAILED = 5203, // 特征更新失败
|
||
ERR_FEATURE_RECOGNITION = 5204, // 特征识别失败
|
||
|
||
// 装配
|
||
ERR_ASSEMBLY_CONSTRAINT = 5301, // 装配约束冲突
|
||
ERR_ASSEMBLY_INTERFERENCE = 5302, // 装配干涉
|
||
ERR_ASSEMBLY_CYCLE = 5303, // 装配循环引用
|
||
ERR_ASSEMBLY_MATE_FAILED = 5304, // 配合失败
|
||
ERR_ASSEMBLY_LOD_INVALID = 5305, // LOD级别无效
|
||
|
||
// 钣金
|
||
ERR_SHEET_METAL_THICKNESS = 5401, // 钣金厚度无效
|
||
ERR_SHEET_METAL_BEND_RADIUS = 5402, // 弯曲半径无效
|
||
ERR_SHEET_METAL_UNFOLD = 5403, // 展开失败
|
||
|
||
// PMI/GD&T
|
||
ERR_PMI_INVALID = 5501, // PMI无效
|
||
ERR_GDT_TOLERANCE = 5502, // GD&T公差错误
|
||
ERR_AUTO_DIM_FAILED = 5503, // 自动标注失败
|
||
ERR_DRAWING_STANDARD = 5504, // 制图标准错误
|
||
|
||
// 柔性体
|
||
ERR_FFD_INVALID = 5601, // FFD变形无效
|
||
|
||
// ── 6xxx:sdf SDF错误 ──────────────────────────────
|
||
ERR_SDF_EVALUATE_FAILED = 6001, // SDF求值失败
|
||
ERR_SDF_TREE_INVALID = 6002, // SDF树无效
|
||
ERR_SDF_TO_MESH_FAILED = 6003, // SDF转网格失败
|
||
ERR_SDF_OPTIMIZE_FAILED = 6004, // SDF优化失败
|
||
ERR_SDF_TORCH_ERROR = 6005, // SDF Torch推理错误
|
||
ERR_SDF_PRIMITIVE_INVALID = 6006, // SDF基元无效
|
||
|
||
// ── 7xxx:capi C API错误 ───────────────────────────
|
||
ERR_CAPI_NULL_HANDLE = 7001, // 空句柄
|
||
ERR_CAPI_INVALID_ARGUMENT = 7002, // 无效参数
|
||
ERR_CAPI_TYPE_MISMATCH = 7003, // 类型不匹配
|
||
ERR_CAPI_NOT_INITIALIZED = 7004, // 引擎未初始化
|
||
ERR_CAPI_ALREADY_INITIALIZED= 7005, // 引擎已初始化
|
||
ERR_CAPI_BUFFER_TOO_SMALL = 7006, // 输出缓冲区太小
|
||
ERR_CAPI_FEATURE_NOT_AVAIL = 7007, // 功能不可用
|
||
ERR_CAPI_UNKNOWN_ERROR = 7999, // 未知C API错误
|
||
};
|
||
|
||
// ═══════════════════════════════════════════════════════════════
|
||
// ErrorInfo 结构体
|
||
// ═══════════════════════════════════════════════════════════════
|
||
|
||
/**
|
||
* @brief 错误信息结构体
|
||
*
|
||
* 包含错误码、中文描述、所属模块和发生的源位置。
|
||
*/
|
||
struct ErrorInfo {
|
||
ErrorCode code; ///< 错误码
|
||
std::string message; ///< 中文错误描述
|
||
std::string module; ///< 所属模块名
|
||
std::string file; ///< 源文件名
|
||
int line; ///< 源文件行号
|
||
|
||
/// 默认构造(SUCCESS)
|
||
ErrorInfo()
|
||
: code(ErrorCode::SUCCESS), message("成功"), module(""), file(""), line(0) {}
|
||
|
||
/// 完整构造
|
||
ErrorInfo(ErrorCode c, std::string msg, std::string mod,
|
||
std::string f = "", int l = 0)
|
||
: code(c), message(std::move(msg)), module(std::move(mod)),
|
||
file(std::move(f)), line(l) {}
|
||
};
|
||
|
||
// ═══════════════════════════════════════════════════════════════
|
||
// API 函数
|
||
// ═══════════════════════════════════════════════════════════════
|
||
|
||
/**
|
||
* @brief 获取错误码对应的中文描述
|
||
* @param code 错误码
|
||
* @return 中文错误描述字符串
|
||
*/
|
||
std::string error_message(ErrorCode code);
|
||
|
||
/**
|
||
* @brief 判断错误码是否表示错误(非成功)
|
||
* @param code 错误码
|
||
* @return true 表示有错误
|
||
*/
|
||
constexpr bool is_error(ErrorCode code) noexcept {
|
||
return code != ErrorCode::SUCCESS;
|
||
}
|
||
|
||
/**
|
||
* @brief 判断错误码是否表示成功
|
||
* @param code 错误码
|
||
* @return true 表示成功
|
||
*/
|
||
constexpr bool is_success(ErrorCode code) noexcept {
|
||
return code == ErrorCode::SUCCESS;
|
||
}
|
||
|
||
/**
|
||
* @brief 将错误码转换为所属模块名
|
||
* @param code 错误码
|
||
* @return 模块名称字符串
|
||
*/
|
||
std::string error_module(ErrorCode code);
|
||
|
||
} // namespace vde::foundation
|