Files
茂之钳 5bfcbcb8e9
CI / Build & Test (push) Failing after 39s
CI / Release Build (push) Failing after 33s
Build & Test / build-and-test (push) Has been cancelled
Build & Test / python-bindings (push) Has been cancelled
feat(v1.0.1): tangent_pull + error codes + version + license management
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)
2026-07-27 21:54:46 +08:00

290 lines
13 KiB
C++
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
#pragma once
/**
* @file error_codes.h
* @brief ViewDesignEngine 统一错误码体系
*
* 所有模块的错误码集中定义在此,采用分段编码:
* 0 — SUCCESS
* 1xxx — foundation(格式IO错误)
* 2xxx — core(几何计算错误)
* 3xxx — curves(曲线曲面错误)
* 4xxx — mesh(网格错误)
* 5xxx — brepB-Rep错误)
* 6xxx — sdfSDF错误)
* 7xxx — capiC API错误)
*
* @ingroup foundation
*/
#include <cstdint>
#include <string>
#include <string_view>
namespace vde::foundation {
// ═══════════════════════════════════════════════════════════════
// ErrorCode 枚举 — 所有模块统一
// ═══════════════════════════════════════════════════════════════
enum class ErrorCode : int32_t {
// ── 成功 ───────────────────────────────────────────
SUCCESS = 0,
// ── 1xxxfoundation 格式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, // 点云噪声过大
// ── 5xxxbrep 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基元无效
// ── 7xxxcapi 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