Files
茂之钳 2e004fda6d
CI / Build & Test (push) Failing after 35s
CI / Release Build (push) Failing after 48s
Build & Test / build-and-test (push) Has been cancelled
Build & Test / python-bindings (push) Has been cancelled
feat(v4.1): incremental update + large assembly + format robustness
- IncrementalUpdateEngine: dirty propagation, topological rebuild, cache hit/miss
- InstanceCache: shared LOD mesh for identical parts
- LargeAssemblyManager: BVH spatial index, view frustum culling, assembly stats
- format_io: auto-detect STEP/IGES, batch import with error recovery
- 31 tests: incremental (11), large assembly (12), format IO (8)
2026-07-25 03:51:57 +00:00

101 lines
3.2 KiB
C++

#pragma once
/**
* @file format_io.h
* @brief CAD 格式导入健壮性增强
*
* 自动格式检测、容错解析、批量导入。
*
* @ingroup foundation
*/
#include "vde/brep/brep.h"
#include <vector>
#include <string>
#include <optional>
namespace vde::brep {
// ═══════════════════════════════════════════════════════════
// Format detection
// ═══════════════════════════════════════════════════════════
/// 检测到的 CAD 格式
enum class CadFormat {
Unknown,
STEP,
IGES,
STL_ASCII,
STL_Binary,
};
/**
* @brief 自动检测 CAD 文件格式
*
* 通过文件头签名和扩展名判断格式。
*
* @param filepath 文件路径
* @return 检测到的格式,未知时返回 Unknown
*/
[[nodiscard]] CadFormat detect_format(const std::string& filepath);
/**
* @brief 自动检测内存中的 CAD 数据格式
*
* @param data 数据内容
* @return 检测到的格式
*/
[[nodiscard]] CadFormat detect_format_from_data(const std::string& data);
// ═══════════════════════════════════════════════════════════
// Auto import
// ═══════════════════════════════════════════════════════════
/**
* @brief 智能导入:自动检测格式并导入
*
* 支持 STEP, IGES 格式的自动识别和导入。
* 解析错误时不会崩溃,而是返回已成功解析的部分。
*
* @param filepath 文件路径
* @return B-Rep 模型列表和格式信息,解析失败时返回空
*/
[[nodiscard]] std::vector<BrepModel> auto_import(const std::string& filepath);
/**
* @brief 从内存数据智能导入
*
* @param data CAD 数据字符串
* @return B-Rep 模型列表
*/
[[nodiscard]] std::vector<BrepModel> auto_import_from_string(const std::string& data);
// ═══════════════════════════════════════════════════════════
// Batch import with error recovery
// ═══════════════════════════════════════════════════════════
/// 批量导入结果
struct BatchImportResult {
int total_files = 0;
int success_count = 0;
int partial_count = 0; ///< 部分成功(有些实体失败)
int fail_count = 0;
std::vector<std::string> errors;
std::vector<BrepModel> models;
[[nodiscard]] std::string summary() const;
};
/**
* @brief 批量导入 CAD 文件
*
* 对每个文件尝试自动检测格式并导入。
* 单个文件失败不影响后续文件。
*
* @param filepaths 文件路径列表
* @return 批量导入结果
*/
[[nodiscard]] BatchImportResult batch_import(
const std::vector<std::string>& filepaths);
} // namespace vde::brep