#pragma once /** * @file brep_heal.h * @brief B-Rep 拓扑修复 * * 对 BrepModel 执行拓扑修复操作,处理导入 STEP/IGES 文件时常见的 * 几何缺陷:重复顶点、冗余边、间隙、退化面和方向不一致。 * * ## 修复流水线(新版) * * 1. heal_gaps — BFS 合并距离 warnings; ///< 本步产生的警告 }; /** * @brief ACIS风格五步自动修复流水线报告 * * 包含每一步的详细结果、总体评分和剩余警告。 */ struct AutoHealReport { StepResult stitch; ///< Step 1: 缝合 StepResult simplify; ///< Step 2: 简化 StepResult regularize; ///< Step 3: 正则化 StepResult orient; ///< Step 4: 定向 StepResult check; ///< Step 5: 验证 /** @brief 总体评分 (0-100),基于每步成功率和修复量 */ int overall_score = 0; /** @brief 剩余警告列表(跨步骤汇总) */ std::vector warnings; /** @brief 总修复元素数 */ [[nodiscard]] int total_fixed() const { return stitch.items_fixed + simplify.items_fixed + regularize.items_fixed + orient.items_fixed + check.items_fixed; } /** @brief 成功步数 */ [[nodiscard]] int successful_steps() const { return (stitch.success ? 1 : 0) + (simplify.success ? 1 : 0) + (regularize.success ? 1 : 0) + (orient.success ? 1 : 0) + (check.success ? 1 : 0); } }; /** * @brief ACIS风格五步自动修复流水线 * * 按顺序执行以下五个独立步骤,前一步失败不影响后一步: * * | 步骤 | 名称 | 操作 | * |------|-------------|----------------------------------------------------------| * | 1 | Stitch | 检测距离0: 修复成功,返回修复项总数 * - 0: 无需修复 * - <0: 修复失败 */ int heal_step_import(BrepModel& body); // ═══════════════════════════════════════════════════════════ // 旧版兼容函数(委托给新版实现) // ═══════════════════════════════════════════════════════════ /** * @brief 合并重合顶点(旧版兼容) * @deprecated 请使用 heal_gaps() */ int heal_merge_vertices(BrepModel& body, double tolerance = 1e-6); /** * @brief 合并重合边(旧版兼容) */ int heal_merge_edges(BrepModel& body, double tolerance = 1e-6); /** * @brief 闭合面之间的微小间隙(旧版兼容) * @deprecated 请使用 heal_gaps() */ int heal_close_gaps(BrepModel& body, double max_gap = 1e-4); } // namespace vde::brep